-
Notifications
You must be signed in to change notification settings - Fork 15
/
collage.min.js.map
executable file
·1 lines (1 loc) · 213 KB
/
collage.min.js.map
1
{"version":3,"file":"collage.min.js","sources":["/Users/ozan/code/boilerplate-gulp/node_modules/browserify/node_modules/browser-pack/_prelude.js","/Users/ozan/code/boilerplate-gulp/node_modules/browserify/node_modules/process/browser.js","/Users/ozan/code/collage/bower_components/eventEmitter/EventEmitter.js","/Users/ozan/code/giant-quadtree/node_modules/boilerplate-gulp/node_modules/browserify/node_modules/browser-pack/_prelude.js","/Users/ozan/code/collage/bower_components/mustache/mustache.js","/Users/ozan/code/collage/bower_components/q/q.js","/Users/ozan/code/collage/src/BoundingBox.js","/Users/ozan/code/collage/src/Tag.js","/Users/ozan/code/collage/src/collage.js","/Users/ozan/code/collage/src/element/Element.js","/Users/ozan/code/collage/src/element/Iframe.js","/Users/ozan/code/collage/src/element/Simple.js","/Users/ozan/code/collage/src/element/Video.js","/Users/ozan/code/collage/src/element/index.js","/Users/ozan/code/collage/src/loader/facebook.js","/Users/ozan/code/collage/src/loader/flickr.js","/Users/ozan/code/collage/src/loader/getFromCommonApi.js","/Users/ozan/code/collage/src/loader/googleNews.js","/Users/ozan/code/collage/src/loader/googlePlus.js","/Users/ozan/code/collage/src/loader/iframe.js","/Users/ozan/code/collage/src/loader/image.js","/Users/ozan/code/collage/src/loader/index.js","/Users/ozan/code/collage/src/loader/nyTimes.js","/Users/ozan/code/collage/src/loader/reddit.js","/Users/ozan/code/collage/src/loader/twitter.js","/Users/ozan/code/collage/src/loader/youtube.js","/Users/ozan/code/collage/src/utils.js"],"names":[],"mappings":"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","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","// shim for using process in browser\n\nvar process = module.exports = {};\n\nprocess.nextTick = (function () {\n var canSetImmediate = typeof window !== 'undefined'\n && window.setImmediate;\n var canPost = typeof window !== 'undefined'\n && window.postMessage && window.addEventListener\n ;\n\n if (canSetImmediate) {\n return function (f) { return window.setImmediate(f) };\n }\n\n if (canPost) {\n var queue = [];\n window.addEventListener('message', function (ev) {\n var source = ev.source;\n if ((source === window || source === null) && ev.data === 'process-tick') {\n ev.stopPropagation();\n if (queue.length > 0) {\n var fn = queue.shift();\n fn();\n }\n }\n }, true);\n\n return function nextTick(fn) {\n queue.push(fn);\n window.postMessage('process-tick', '*');\n };\n }\n\n return function nextTick(fn) {\n setTimeout(fn, 0);\n };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n}\n\n// TODO(shtylman)\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n","/**\n * EventEmitter v4.0.5 - git.io/ee\n * Oliver Caldwell\n * MIT license\n * @preserve\n */\n\n;(function(exports) {\n // JSHint config - http://www.jshint.com/\n /*jshint laxcomma:true*/\n /*global define:true*/\n\n // Place the script in strict mode\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class Manages event registering and emitting.\n */\n function EventEmitter(){}\n\n // Shortcuts to improve speed and size\n\n // Easy access to the prototype\n var proto = EventEmitter.prototype\n\n // Existence of a native indexOf\n , nativeIndexOf = Array.prototype.indexOf ? true : false;\n\n /**\n * Finds the index of the listener for the event in it's storage array\n *\n * @param {Function} listener Method to look for.\n * @param {Function[]} listeners Array of listeners to search through.\n * @return {Number} Index of the specified listener, -1 if not found\n */\n function indexOfListener(listener, listeners) {\n // Return the index via the native method if possible\n if(nativeIndexOf) {\n return listeners.indexOf(listener);\n }\n\n // There is no native method\n // Use a manual loop to find the index\n var i = listeners.length;\n while(i--) {\n // If the listener matches, return it's index\n if(listeners[i] === listener) {\n return i;\n }\n }\n\n // Default to returning -1\n return -1;\n }\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n */\n proto._getEvents = function() {\n return this._events || (this._events = {});\n };\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n *\n * @param {String} evt Name of the event to return the listeners from.\n * @return {Function[]} All listener functions for the event.\n * @doc\n */\n proto.getListeners = function(evt) {\n // Create a shortcut to the storage object\n // Initialise it if it does not exists yet\n var events = this._getEvents();\n\n // Return the listener array\n // Initialise it if it does not exist\n return events[evt] || (events[evt] = []);\n };\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n *\n * @param {String} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.addListener = function(evt, listener) {\n // Fetch the listeners\n var listeners = this.getListeners(evt);\n\n // Push the listener into the array if it is not already there\n if(indexOfListener(listener, listeners) === -1) {\n listeners.push(listener);\n }\n\n // Return the instance of EventEmitter to allow chaining\n return this;\n };\n\n /**\n * Alias of addListener\n * @doc\n */\n proto.on = proto.addListener;\n\n /**\n * Removes a listener function from the specified event.\n *\n * @param {String} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.removeListener = function(evt, listener) {\n // Fetch the listeners\n // And get the index of the listener in the array\n var listeners = this.getListeners(evt)\n , index = indexOfListener(listener, listeners);\n\n // If the listener was found then remove it\n if(index !== -1) {\n listeners.splice(index, 1);\n\n // If there are no more listeners in this array then remove it\n if(listeners.length === 0) {\n this.removeEvent(evt);\n }\n }\n\n // Return the instance of EventEmitter to allow chaining\n return this;\n };\n\n /**\n * Alias of removeListener\n * @doc\n */\n proto.off = proto.removeListener;\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added.\n *\n * @param {String|Object} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.addListeners = function(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n *\n * @param {String|Object} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.removeListeners = function(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.manipulateListeners = function(remove, evt, listeners) {\n // Initialise any required variables\n var i\n , value\n , single = remove ? this.removeListener : this.addListener\n , multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of it's properties to this method\n if(typeof evt === 'object') {\n for(i in evt) {\n if(evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if(typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while(i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n // Return the instance of EventEmitter to allow chaining\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n *\n * @param {String} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.removeEvent = function(evt) {\n // Remove different things depending on the state of evt\n if(evt) {\n // Remove all listeners for the specified event\n delete this._getEvents()[evt];\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n // Return the instance of EventEmitter to allow chaining\n return this;\n };\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n *\n * @param {String} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.emitEvent = function(evt, args) {\n // Get the listeners for the event\n // Also initialise any other required variables\n var listeners = this.getListeners(evt)\n , i = listeners.length\n , response;\n\n // Loop over all listeners assigned to the event\n // Apply the arguments array to each listener function\n while(i--) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n response = args ? listeners[i].apply(null, args) : listeners[i]();\n if(response === true) {\n this.removeListener(evt, listeners[i]);\n }\n }\n\n // Return the instance of EventEmitter to allow chaining\n return this;\n };\n\n /**\n * Alias of emitEvent\n * @doc\n */\n proto.trigger = proto.emitEvent;\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as\n * opposed to taking a single array of arguments to pass on.\n *\n * @param {String} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n * @doc\n */\n proto.emit = function(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n // Expose the class either via AMD or the global object\n if(typeof define === 'function' && define.amd) {\n define(function() {\n return EventEmitter;\n });\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}(this));","(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n/*global define: false*/\n\n(function (root, factory) {\n if (typeof exports === \"object\" && exports) {\n factory(exports); // CommonJS\n } else {\n var mustache = {};\n factory(mustache);\n if (typeof define === \"function\" && define.amd) {\n define(mustache); // AMD\n } else {\n root.Mustache = mustache; // <script>\n }\n }\n}(this, function (mustache) {\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var nonSpaceRe = /\\S/;\n var eqRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var RegExp_test = RegExp.prototype.test;\n function testRegExp(re, string) {\n return RegExp_test.call(re, string);\n }\n\n function isWhitespace(string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var Object_toString = Object.prototype.toString;\n var isArray = Array.isArray || function (object) {\n return Object_toString.call(object) === '[object Array]';\n };\n\n function isFunction(object) {\n return typeof object === 'function';\n }\n\n function escapeRegExp(string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n }\n\n var entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': '"',\n \"'\": ''',\n \"/\": '/'\n };\n\n function escapeHtml(string) {\n return String(string).replace(/[&<>\"'\\/]/g, function (s) {\n return entityMap[s];\n });\n }\n\n function Scanner(string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function () {\n return this.tail === \"\";\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function (re) {\n var match = this.tail.match(re);\n\n if (match && match.index === 0) {\n var string = match[0];\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n return string;\n }\n\n return \"\";\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = \"\";\n break;\n case 0:\n match = \"\";\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n function Context(view, parent) {\n this.view = view == null ? {} : view;\n this.parent = parent;\n this._cache = { '.': this.view };\n }\n\n Context.make = function (view) {\n return (view instanceof Context) ? view : new Context(view);\n };\n\n Context.prototype.push = function (view) {\n return new Context(view, this);\n };\n\n Context.prototype.lookup = function (name) {\n var value;\n if (name in this._cache) {\n value = this._cache[name];\n } else {\n var context = this;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n value = context.view;\n\n var names = name.split('.'), i = 0;\n while (value != null && i < names.length) {\n value = value[names[i++]];\n }\n } else {\n value = context.view[name];\n }\n\n if (value != null) break;\n\n context = context.parent;\n }\n\n this._cache[name] = value;\n }\n\n if (isFunction(value)) {\n value = value.call(this.view);\n }\n\n return value;\n };\n\n function Writer() {\n this.clearCache();\n }\n\n Writer.prototype.clearCache = function () {\n this._cache = {};\n this._partialCache = {};\n };\n\n Writer.prototype.compile = function (template, tags) {\n var fn = this._cache[template];\n\n if (!fn) {\n var tokens = mustache.parse(template, tags);\n fn = this._cache[template] = this.compileTokens(tokens, template);\n }\n\n return fn;\n };\n\n Writer.prototype.compilePartial = function (name, template, tags) {\n var fn = this.compile(template, tags);\n this._partialCache[name] = fn;\n return fn;\n };\n\n Writer.prototype.getPartial = function (name) {\n if (!(name in this._partialCache) && this._loadPartial) {\n this.compilePartial(name, this._loadPartial(name));\n }\n\n return this._partialCache[name];\n };\n\n Writer.prototype.compileTokens = function (tokens, template) {\n var self = this;\n return function (view, partials) {\n if (partials) {\n if (isFunction(partials)) {\n self._loadPartial = partials;\n } else {\n for (var name in partials) {\n self.compilePartial(name, partials[name]);\n }\n }\n }\n\n return renderTokens(tokens, self, Context.make(view), template);\n };\n };\n\n Writer.prototype.render = function (template, view, partials) {\n return this.compile(template)(view, partials);\n };\n\n /**\n * Low-level function that renders the given `tokens` using the given `writer`\n * and `context`. The `template` string is only needed for templates that use\n * higher-order sections to extract the portion of the original template that\n * was contained in that section.\n */\n function renderTokens(tokens, writer, context, template) {\n var buffer = '';\n\n // This function is used to render an artbitrary template\n // in the current context by higher-order functions.\n function subRender(template) {\n return writer.render(template, context);\n }\n\n var token, tokenValue, value;\n for (var i = 0, len = tokens.length; i < len; ++i) {\n token = tokens[i];\n tokenValue = token[1];\n\n switch (token[0]) {\n case '#':\n value = context.lookup(tokenValue);\n\n if (typeof value === 'object' || typeof value === 'string') {\n if (isArray(value)) {\n for (var j = 0, jlen = value.length; j < jlen; ++j) {\n buffer += renderTokens(token[4], writer, context.push(value[j]), template);\n }\n } else if (value) {\n buffer += renderTokens(token[4], writer, context.push(value), template);\n }\n } else if (isFunction(value)) {\n var text = template == null ? null : template.slice(token[3], token[5]);\n value = value.call(context.view, text, subRender);\n if (value != null) buffer += value;\n } else if (value) {\n buffer += renderTokens(token[4], writer, context, template);\n }\n\n break;\n case '^':\n value = context.lookup(tokenValue);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0)) {\n buffer += renderTokens(token[4], writer, context, template);\n }\n\n break;\n case '>':\n value = writer.getPartial(tokenValue);\n if (isFunction(value)) buffer += value(context);\n break;\n case '&':\n value = context.lookup(tokenValue);\n if (value != null) buffer += value;\n break;\n case 'name':\n value = context.lookup(tokenValue);\n if (value != null) buffer += mustache.escape(value);\n break;\n case 'text':\n buffer += tokenValue;\n break;\n }\n }\n\n return buffer;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens(tokens) {\n var tree = [];\n var collector = tree;\n var sections = [];\n\n var token;\n for (var i = 0, len = tokens.length; i < len; ++i) {\n token = tokens[i];\n switch (token[0]) {\n case '#':\n case '^':\n sections.push(token);\n collector.push(token);\n collector = token[4] = [];\n break;\n case '/':\n var section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : tree;\n break;\n default:\n collector.push(token);\n }\n }\n\n return tree;\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens(tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, len = tokens.length; i < len; ++i) {\n token = tokens[i];\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n lastToken = token;\n squashedTokens.push(token);\n }\n }\n }\n\n return squashedTokens;\n }\n\n function escapeTags(tags) {\n return [\n new RegExp(escapeRegExp(tags[0]) + \"\\\\s*\"),\n new RegExp(\"\\\\s*\" + escapeRegExp(tags[1]))\n ];\n }\n\n /**\n * Breaks up the given `template` string into a tree of token objects. If\n * `tags` is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [\"<%\", \"%>\"]). Of\n * course, the default is to use mustaches (i.e. Mustache.tags).\n */\n function parseTemplate(template, tags) {\n template = template || '';\n tags = tags || mustache.tags;\n\n if (typeof tags === 'string') tags = tags.split(spaceRe);\n if (tags.length !== 2) throw new Error('Invalid tags: ' + tags.join(', '));\n\n var tagRes = escapeTags(tags);\n var scanner = new Scanner(template);\n\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace() {\n if (hasTag && !nonSpace) {\n while (spaces.length) {\n delete tokens[spaces.pop()];\n }\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(tagRes[0]);\n if (value) {\n for (var i = 0, len = value.length; i < len; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n } else {\n nonSpace = true;\n }\n\n tokens.push(['text', chr, start, start + 1]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr == '\\n') stripSpace();\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(tagRes[0])) break;\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(eqRe);\n scanner.scan(eqRe);\n scanner.scanUntil(tagRes[1]);\n } else if (type === '{') {\n value = scanner.scanUntil(new RegExp('\\\\s*' + escapeRegExp('}' + tags[1])));\n scanner.scan(curlyRe);\n scanner.scanUntil(tagRes[1]);\n type = '&';\n } else {\n value = scanner.scanUntil(tagRes[1]);\n }\n\n // Match the closing tag.\n if (!scanner.scan(tagRes[1])) throw new Error('Unclosed tag at ' + scanner.pos);\n\n token = [type, value, start, scanner.pos];\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n if (!openSection) {\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n }\n if (openSection[1] !== value) {\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n }\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n tags = value.split(spaceRe);\n if (tags.length !== 2) {\n throw new Error('Invalid tags at ' + start + ': ' + tags.join(', '));\n }\n tagRes = escapeTags(tags);\n }\n }\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n if (openSection) {\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n }\n\n return nestTokens(squashTokens(tokens));\n }\n\n mustache.name = \"mustache.js\";\n mustache.version = \"0.7.3\";\n mustache.tags = [\"{{\", \"}}\"];\n\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n mustache.parse = parseTemplate;\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // All Mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates and partials in the default writer.\n */\n mustache.clearCache = function () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Compiles the given `template` to a reusable function using the default\n * writer.\n */\n mustache.compile = function (template, tags) {\n return defaultWriter.compile(template, tags);\n };\n\n /**\n * Compiles the partial with the given `name` and `template` to a reusable\n * function using the default writer.\n */\n mustache.compilePartial = function (name, template, tags) {\n return defaultWriter.compilePartial(name, template, tags);\n };\n\n /**\n * Compiles the given array of tokens (the output of a parse) to a reusable\n * function using the default writer.\n */\n mustache.compileTokens = function (tokens, template) {\n return defaultWriter.compileTokens(tokens, template);\n };\n\n /**\n * Renders the `template` with the given `view` and `partials` using the\n * default writer.\n */\n mustache.render = function (template, view, partials) {\n return defaultWriter.render(template, view, partials);\n };\n\n // This is here for backwards compatibility with 0.4.x.\n mustache.to_html = function (template, view, partials, send) {\n var result = mustache.render(template, view, partials);\n\n if (isFunction(send)) {\n send(result);\n } else {\n return result;\n }\n };\n\n}));\n","(function (process){\n// vim:ts=4:sts=4:sw=4:\n/*!\n *\n * Copyright 2009-2012 Kris Kowal under the terms of the MIT\n * license found at http://github.com/kriskowal/q/raw/master/LICENSE\n *\n * With parts by Tyler Close\n * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found\n * at http://www.opensource.org/licenses/mit-license.html\n * Forked at ref_send.js version: 2009-05-11\n *\n * With parts by Mark Miller\n * Copyright (C) 2011 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n(function (definition) {\n // Turn off strict mode for this function so we can assign to global.Q\n /*jshint strict: false*/\n\n // This file will function properly as a <script> tag, or a module\n // using CommonJS and NodeJS or RequireJS module formats. In\n // Common/Node/RequireJS, the module exports the Q API and when\n // executed as a simple <script>, it creates a Q global instead.\n\n // Montage Require\n if (typeof bootstrap === \"function\") {\n bootstrap(\"promise\", definition);\n\n // CommonJS\n } else if (typeof exports === \"object\") {\n definition(void 0, exports);\n\n // RequireJS\n } else if (typeof define === \"function\") {\n define(definition);\n\n // SES (Secure EcmaScript)\n } else if (typeof ses !== \"undefined\") {\n if (!ses.ok()) {\n return;\n } else {\n ses.makeQ = function () {\n var Q = {};\n return definition(void 0, Q);\n };\n }\n\n // <script>\n } else {\n definition(void 0, Q = {});\n }\n\n})(function (require, exports) {\n\"use strict\";\n\n// All code after this point will be filtered from stack traces reported\n// by Q.\nvar qStartingLine = captureLine();\nvar qFileName;\n\n// shims\n\n// used for fallback \"defend\" and in \"allResolved\"\nvar noop = function () {};\n\n// for the security conscious, defend may be a deep freeze as provided\n// by cajaVM. Otherwise we try to provide a shallow freeze just to\n// discourage promise changes that are not compatible with secure\n// usage. If Object.freeze does not exist, fall back to doing nothing\n// (no op).\nvar defend = Object.freeze || noop;\nif (typeof cajaVM !== \"undefined\") {\n defend = cajaVM.def;\n}\n\n// use the fastest possible means to execute a task in a future turn\n// of the event loop.\nvar nextTick;\nif (typeof process !== \"undefined\") {\n // node\n nextTick = process.nextTick;\n} else if (typeof setImmediate === \"function\") {\n // In IE10, or use https://github.com/NobleJS/setImmediate\n nextTick = setImmediate;\n} else if (typeof MessageChannel !== \"undefined\") {\n // modern browsers\n // http://www.nonblocking.io/2011/06/windownexttick.html\n var channel = new MessageChannel();\n // linked list of tasks (single, with head node)\n var head = {}, tail = head;\n channel.port1.onmessage = function () {\n head = head.next;\n var task = head.task;\n delete head.task;\n task();\n };\n nextTick = function (task) {\n tail = tail.next = {task: task};\n channel.port2.postMessage(0);\n };\n} else {\n // old browsers\n nextTick = function (task) {\n setTimeout(task, 0);\n };\n}\n\n// Attempt to make generics safe in the face of downstream\n// modifications.\n// There is no situation where this is necessary.\n// If you need a security guarantee, these primordials need to be\n// deeply frozen anyway, and if you don’t need a security guarantee,\n// this is just plain paranoid.\n// However, this does have the nice side-effect of reducing the size\n// of the code by reducing x.call() to merely x(), eliminating many\n// hard-to-minify characters.\n// See Mark Miller’s explanation of what this does.\n// http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming\nvar uncurryThis;\n// I have kept both variations because the first is theoretically\n// faster, if bind is available.\nif (Function.prototype.bind) {\n var Function_bind = Function.prototype.bind;\n uncurryThis = Function_bind.bind(Function_bind.call);\n} else {\n uncurryThis = function (f) {\n return function () {\n return f.call.apply(f, arguments);\n };\n };\n}\n\nvar array_slice = uncurryThis(Array.prototype.slice);\n\nvar array_reduce = uncurryThis(\n Array.prototype.reduce || function (callback, basis) {\n var index = 0,\n length = this.length;\n // concerning the initial value, if one is not provided\n if (arguments.length === 1) {\n // seek to the first value in the array, accounting\n // for the possibility that is is a sparse array\n do {\n if (index in this) {\n basis = this[index++];\n break;\n }\n if (++index >= length) {\n throw new TypeError();\n }\n } while (1);\n }\n // reduce\n for (; index < length; index++) {\n // account for the possibility that the array is sparse\n if (index in this) {\n basis = callback(basis, this[index], index);\n }\n }\n return basis;\n }\n);\n\nvar array_indexOf = uncurryThis(\n Array.prototype.indexOf || function (value) {\n // not a very good shim, but good enough for our one use of it\n for (var i = 0; i < this.length; i++) {\n if (this[i] === value) {\n return i;\n }\n }\n return -1;\n }\n);\n\nvar array_map = uncurryThis(\n Array.prototype.map || function (callback, thisp) {\n var self = this;\n var collect = [];\n array_reduce(self, function (undefined, value, index) {\n collect.push(callback.call(thisp, value, index, self));\n }, void 0);\n return collect;\n }\n);\n\nvar object_create = Object.create || function (prototype) {\n function Type() { }\n Type.prototype = prototype;\n return new Type();\n};\n\nvar object_keys = Object.keys || function (object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n return keys;\n};\n\nvar object_toString = Object.prototype.toString;\n\n// generator related shims\n\nfunction isStopIteration(exception) {\n return (\n object_toString(exception) === \"[object StopIteration]\" ||\n exception instanceof QReturnValue\n );\n}\n\nvar QReturnValue;\nif (typeof ReturnValue !== \"undefined\") {\n QReturnValue = ReturnValue;\n} else {\n QReturnValue = function (value) {\n this.value = value;\n };\n}\n\n// long stack traces\n\nvar STACK_JUMP_SEPARATOR = \"From previous event:\";\n\nfunction makeStackTraceLong(error, promise) {\n // If possible (that is, if in V8), transform the error stack\n // trace by removing Node and Q cruft, then concatenating with\n // the stack trace of the promise we are ``done``ing. See #57.\n if (promise.stack &&\n typeof error === \"object\" &&\n error !== null &&\n error.stack &&\n error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1\n ) {\n error.stack = filterStackString(error.stack) +\n \"\\n\" + STACK_JUMP_SEPARATOR + \"\\n\" +\n filterStackString(promise.stack);\n }\n}\n\nfunction filterStackString(stackString) {\n var lines = stackString.split(\"\\n\");\n var desiredLines = [];\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i];\n\n if (!isInternalFrame(line) && !isNodeFrame(line)) {\n desiredLines.push(line);\n }\n }\n return desiredLines.join(\"\\n\");\n}\n\nfunction isNodeFrame(stackLine) {\n return stackLine.indexOf(\"(module.js:\") !== -1 ||\n stackLine.indexOf(\"(node.js:\") !== -1;\n}\n\nfunction isInternalFrame(stackLine) {\n var pieces = /at .+ \\((.*):(\\d+):\\d+\\)/.exec(stackLine);\n\n if (!pieces) {\n return false;\n }\n\n var fileName = pieces[1];\n var lineNumber = pieces[2];\n\n return fileName === qFileName &&\n lineNumber >= qStartingLine &&\n lineNumber <= qEndingLine;\n}\n\n// discover own file name and line number range for filtering stack\n// traces\nfunction captureLine() {\n if (Error.captureStackTrace) {\n var fileName, lineNumber;\n\n var oldPrepareStackTrace = Error.prepareStackTrace;\n\n Error.prepareStackTrace = function (error, frames) {\n fileName = frames[1].getFileName();\n lineNumber = frames[1].getLineNumber();\n };\n\n // teases call of temporary prepareStackTrace\n // JSHint and Closure Compiler generate known warnings here\n /*jshint expr: true */\n new Error().stack;\n\n Error.prepareStackTrace = oldPrepareStackTrace;\n qFileName = fileName;\n return lineNumber;\n }\n}\n\nfunction deprecate(callback, name, alternative) {\n return function () {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(name + \" is deprecated, use \" + alternative + \" instead.\", new Error(\"\").stack);\n }\n return callback.apply(callback, arguments);\n };\n}\n\n// end of shims\n// beginning of real work\n\n/**\n * Performs a task in a future turn of the event loop.\n * @param {Function} task\n */\nexports.nextTick = nextTick;\n\n/**\n * Constructs a {promise, resolve} object.\n *\n * The resolver is a callback to invoke with a more resolved value for the\n * promise. To fulfill the promise, invoke the resolver with any value that is\n * not a function. To reject the promise, invoke the resolver with a rejection\n * object. To put the promise in the same state as another promise, invoke the\n * resolver with that other promise.\n */\nexports.defer = defer;\nfunction defer() {\n // if \"pending\" is an \"Array\", that indicates that the promise has not yet\n // been resolved. If it is \"undefined\", it has been resolved. Each\n // element of the pending array is itself an array of complete arguments to\n // forward to the resolved promise. We coerce the resolution value to a\n // promise using the ref promise because it handles both fully\n // resolved values and other promises gracefully.\n var pending = [], progressListeners = [], value;\n\n var deferred = object_create(defer.prototype);\n var promise = object_create(makePromise.prototype);\n\n promise.promiseSend = function (op, _, __, progress) {\n var args = array_slice(arguments);\n if (pending) {\n pending.push(args);\n if (op === \"when\" && progress) {\n progressListeners.push(progress);\n }\n } else {\n nextTick(function () {\n value.promiseSend.apply(value, args);\n });\n }\n };\n\n promise.valueOf = function () {\n if (pending) {\n return promise;\n }\n return value.valueOf();\n };\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(promise, defer);\n\n // Reify the stack into a string by using the accessor; this prevents\n // memory leaks as per GH-111. At the same time, cut off the first line;\n // it's always just \"[object Promise]\\n\", as per the `toString`.\n promise.stack = promise.stack.substring(promise.stack.indexOf(\"\\n\") + 1);\n }\n\n function become(resolvedValue) {\n if (!pending) {\n return;\n }\n value = resolve(resolvedValue);\n array_reduce(pending, function (undefined, pending) {\n nextTick(function () {\n value.promiseSend.apply(value, pending);\n });\n }, void 0);\n pending = void 0;\n progressListeners = void 0;\n }\n\n defend(promise);\n\n deferred.promise = promise;\n deferred.resolve = become;\n deferred.reject = function (exception) {\n become(reject(exception));\n };\n deferred.notify = function (progress) {\n if (pending) {\n array_reduce(progressListeners, function (undefined, progressListener) {\n nextTick(function () {\n progressListener(progress);\n });\n }, void 0);\n }\n };\n\n return deferred;\n}\n\n/**\n * Creates a Node-style callback that will resolve or reject the deferred\n * promise.\n * @returns a nodeback\n */\ndefer.prototype.makeNodeResolver = function () {\n var self = this;\n return function (error, value) {\n if (error) {\n self.reject(error);\n } else if (arguments.length > 2) {\n self.resolve(array_slice(arguments, 1));\n } else {\n self.resolve(value);\n }\n };\n};\n// XXX deprecated\ndefer.prototype.node = deprecate(defer.prototype.makeNodeResolver, \"node\", \"makeNodeResolver\");\n\n/**\n * @param makePromise {Function} a function that returns nothing and accepts\n * the resolve, reject, and notify functions for a deferred.\n * @returns a promise that may be resolved with the given resolve and reject\n * functions, or rejected by a thrown exception in makePromise\n */\nexports.promise = promise;\nfunction promise(makePromise) {\n var deferred = defer();\n fcall(\n makePromise,\n deferred.resolve,\n deferred.reject,\n deferred.notify\n ).fail(deferred.reject);\n return deferred.promise;\n}\n\n/**\n * Constructs a Promise with a promise descriptor object and optional fallback\n * function. The descriptor contains methods like when(rejected), get(name),\n * put(name, value), post(name, args), and delete(name), which all\n * return either a value, a promise for a value, or a rejection. The fallback\n * accepts the operation name, a resolver, and any further arguments that would\n * have been forwarded to the appropriate method above had a method been\n * provided with the proper name. The API makes no guarantees about the nature\n * of the returned object, apart from that it is usable whereever promises are\n * bought and sold.\n */\nexports.makePromise = makePromise;\nfunction makePromise(descriptor, fallback, valueOf, exception) {\n if (fallback === void 0) {\n fallback = function (op) {\n return reject(new Error(\"Promise does not support operation: \" + op));\n };\n }\n\n var promise = object_create(makePromise.prototype);\n\n promise.promiseSend = function (op, resolved /* ...args */) {\n var args = array_slice(arguments, 2);\n var result;\n try {\n if (descriptor[op]) {\n result = descriptor[op].apply(promise, args);\n } else {\n result = fallback.apply(promise, [op].concat(args));\n }\n } catch (exception) {\n result = reject(exception);\n }\n if (resolved) {\n resolved(result);\n }\n };\n\n if (valueOf) {\n promise.valueOf = valueOf;\n }\n\n if (exception) {\n promise.exception = exception;\n }\n\n defend(promise);\n\n return promise;\n}\n\n// provide thenables, CommonJS/Promises/A\nmakePromise.prototype.then = function (fulfilled, rejected, progressed) {\n return when(this, fulfilled, rejected, progressed);\n};\n\nmakePromise.prototype.thenResolve = function (value) {\n return when(this, function () { return value; });\n};\n\n// Chainable methods\narray_reduce(\n [\n \"isResolved\", \"isFulfilled\", \"isRejected\",\n \"when\", \"spread\", \"send\",\n \"get\", \"put\", \"del\",\n \"post\", \"invoke\",\n \"keys\",\n \"apply\", \"call\", \"bind\",\n \"fapply\", \"fcall\", \"fbind\",\n \"all\", \"allResolved\",\n \"view\", \"viewInfo\",\n \"timeout\", \"delay\",\n \"catch\", \"finally\", \"fail\", \"fin\", \"progress\", \"end\", \"done\",\n \"nfcall\", \"nfapply\", \"nfbind\",\n \"ncall\", \"napply\", \"nbind\",\n \"npost\", \"ninvoke\",\n \"nend\", \"nodeify\"\n ],\n function (undefined, name) {\n makePromise.prototype[name] = function () {\n return exports[name].apply(\n exports,\n [this].concat(array_slice(arguments))\n );\n };\n },\n void 0\n);\n\nmakePromise.prototype.toSource = function () {\n return this.toString();\n};\n\nmakePromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\ndefend(makePromise.prototype);\n\n/**\n * If an object is not a promise, it is as \"near\" as possible.\n * If a promise is rejected, it is as \"near\" as possible too.\n * If it’s a fulfilled promise, the fulfillment value is nearer.\n * If it’s a deferred promise and the deferred has been resolved, the\n * resolution is \"nearer\".\n * @param object\n * @returns most resolved (nearest) form of the object\n */\nexports.nearer = valueOf;\nfunction valueOf(value) {\n if (isPromise(value)) {\n return value.valueOf();\n }\n return value;\n}\n\n/**\n * @returns whether the given object is a promise.\n * Otherwise it is a fulfilled value.\n */\nexports.isPromise = isPromise;\nfunction isPromise(object) {\n return object && typeof object.promiseSend === \"function\";\n}\n\n/**\n * @returns whether the given object can be coerced to a promise.\n * Otherwise it is a fulfilled value.\n */\nexports.isPromiseAlike = isPromiseAlike;\nfunction isPromiseAlike(object) {\n return object && typeof object.then === \"function\";\n}\n\n/**\n * @returns whether the given object is a resolved promise.\n */\nexports.isResolved = isResolved;\nfunction isResolved(object) {\n return isFulfilled(object) || isRejected(object);\n}\n\n/**\n * @returns whether the given object is a value or fulfilled\n * promise.\n */\nexports.isFulfilled = isFulfilled;\nfunction isFulfilled(object) {\n return !isPromiseAlike(valueOf(object));\n}\n\n/**\n * @returns whether the given object is a rejected promise.\n */\nexports.isRejected = isRejected;\nfunction isRejected(object) {\n object = valueOf(object);\n return isPromise(object) && 'exception' in object;\n}\n\nvar rejections = [];\nvar errors = [];\nvar errorsDisplayed;\nfunction displayErrors() {\n if (\n !errorsDisplayed &&\n typeof window !== \"undefined\" &&\n !window.Touch &&\n window.console\n ) {\n // This promise library consumes exceptions thrown in handlers so\n // they can be handled by a subsequent promise. The rejected\n // promises get added to this array when they are created, and\n // removed when they are handled.\n console.log(\"Should be empty:\", errors);\n }\n errorsDisplayed = true;\n}\n\n/**\n * Constructs a rejected promise.\n * @param exception value describing the failure\n */\nexports.reject = reject;\nfunction reject(exception) {\n var rejection = makePromise({\n \"when\": function (rejected) {\n // note that the error has been handled\n if (rejected) {\n var at = array_indexOf(rejections, this);\n if (at !== -1) {\n errors.splice(at, 1);\n rejections.splice(at, 1);\n }\n }\n return rejected ? rejected(exception) : reject(exception);\n }\n }, function fallback() {\n return reject(exception);\n }, function valueOf() {\n return this;\n }, exception);\n // note that the error has not been handled\n displayErrors();\n rejections.push(rejection);\n errors.push(exception);\n return rejection;\n}\n\n/**\n * Constructs a promise for an immediate reference.\n * @param value immediate reference\n */\nexports.begin = resolve; // XXX experimental\nexports.resolve = resolve;\nexports.ref = deprecate(resolve, \"ref\", \"resolve\"); // XXX deprecated, use resolve\nfunction resolve(object) {\n // If the object is already a Promise, return it directly. This enables\n // the resolve function to both be used to created references from objects,\n // but to tolerably coerce non-promises to promises.\n if (isPromise(object)) {\n return object;\n }\n // In order to break infinite recursion or loops between `then` and\n // `resolve`, it is necessary to attempt to extract fulfilled values\n // out of foreign promise implementations before attempting to wrap\n // them as unresolved promises. It is my hope that other\n // implementations will implement `valueOf` to synchronously extract\n // the fulfillment value from their fulfilled promises. If the\n // other promise library does not implement `valueOf`, the\n // implementations on primordial prototypes are harmless.\n object = valueOf(object);\n // assimilate thenables, CommonJS/Promises/A\n if (isPromiseAlike(object)) {\n var deferred = defer();\n object.then(deferred.resolve, deferred.reject, deferred.notify);\n return deferred.promise;\n }\n return makePromise({\n \"when\": function () {\n return object;\n },\n \"get\": function (name) {\n return object[name];\n },\n \"put\": function (name, value) {\n object[name] = value;\n return object;\n },\n \"del\": function (name) {\n delete object[name];\n return object;\n },\n \"post\": function (name, value) {\n return object[name].apply(object, value);\n },\n \"apply\": function (self, args) {\n return object.apply(self, args);\n },\n \"fapply\": function (args) {\n return object.apply(void 0, args);\n },\n \"viewInfo\": function () {\n var on = object;\n var properties = {};\n\n function fixFalsyProperty(name) {\n if (!properties[name]) {\n properties[name] = typeof on[name];\n }\n }\n\n while (on) {\n Object.getOwnPropertyNames(on).forEach(fixFalsyProperty);\n on = Object.getPrototypeOf(on);\n }\n return {\n \"type\": typeof object,\n \"properties\": properties\n };\n },\n \"keys\": function () {\n return object_keys(object);\n }\n }, void 0, function valueOf() {\n return object;\n });\n}\n\n/**\n * Annotates an object such that it will never be\n * transferred away from this process over any promise\n * communication channel.\n * @param object\n * @returns promise a wrapping of that object that\n * additionally responds to the \"isDef\" message\n * without a rejection.\n */\nexports.master = master;\nfunction master(object) {\n return makePromise({\n \"isDef\": function () {}\n }, function fallback() {\n var args = array_slice(arguments);\n return send.apply(void 0, [object].concat(args));\n }, function () {\n return valueOf(object);\n });\n}\n\nexports.viewInfo = viewInfo;\nfunction viewInfo(object, info) {\n object = resolve(object);\n if (info) {\n return makePromise({\n \"viewInfo\": function () {\n return info;\n }\n }, function fallback() {\n var args = array_slice(arguments);\n return send.apply(void 0, [object].concat(args));\n }, function () {\n return valueOf(object);\n });\n } else {\n return send(object, \"viewInfo\");\n }\n}\n\nexports.view = view;\nfunction view(object) {\n return viewInfo(object).when(function (info) {\n var view;\n if (info.type === \"function\") {\n view = function () {\n return apply(object, void 0, arguments);\n };\n } else {\n view = {};\n }\n var properties = info.properties || {};\n object_keys(properties).forEach(function (name) {\n if (properties[name] === \"function\") {\n view[name] = function () {\n return post(object, name, arguments);\n };\n }\n });\n return resolve(view);\n });\n}\n\n/**\n * Registers an observer on a promise.\n *\n * Guarantees:\n *\n * 1. that fulfilled and rejected will be called only once.\n * 2. that either the fulfilled callback or the rejected callback will be\n * called, but not both.\n * 3. that fulfilled and rejected will not be called in this turn.\n *\n * @param value promise or immediate reference to observe\n * @param fulfilled function to be called with the fulfilled value\n * @param rejected function to be called with the rejection exception\n * @param progressed function to be called on any progress notifications\n * @return promise for the return value from the invoked callback\n */\nexports.when = when;\nfunction when(value, fulfilled, rejected, progressed) {\n var deferred = defer();\n var done = false; // ensure the untrusted promise makes at most a\n // single call to one of the callbacks\n\n function _fulfilled(value) {\n try {\n return typeof fulfilled === \"function\" ? fulfilled(value) : value;\n } catch (exception) {\n return reject(exception);\n }\n }\n\n function _rejected(exception) {\n if (typeof rejected === \"function\") {\n makeStackTraceLong(exception, resolvedValue);\n try {\n return rejected(exception);\n } catch (newException) {\n return reject(newException);\n }\n }\n return reject(exception);\n }\n\n function _progressed(value) {\n return typeof progressed === \"function\" ? progressed(value) : value;\n }\n\n var resolvedValue = resolve(value);\n nextTick(function () {\n resolvedValue.promiseSend(\"when\", function (value) {\n if (done) {\n return;\n }\n done = true;\n\n deferred.resolve(_fulfilled(value));\n }, function (exception) {\n if (done) {\n return;\n }\n done = true;\n\n deferred.resolve(_rejected(exception));\n });\n });\n\n // Progress propagator need to be attached in the current tick.\n resolvedValue.promiseSend(\"when\", void 0, void 0, function (value) {\n deferred.notify(_progressed(value));\n });\n\n return deferred.promise;\n}\n\n/**\n * Spreads the values of a promised array of arguments into the\n * fulfillment callback.\n * @param fulfilled callback that receives variadic arguments from the\n * promised array\n * @param rejected callback that receives the exception if the promise\n * is rejected.\n * @returns a promise for the return value or thrown exception of\n * either callback.\n */\nexports.spread = spread;\nfunction spread(promise, fulfilled, rejected) {\n return when(promise, function (valuesOrPromises) {\n return all(valuesOrPromises).then(function (values) {\n return fulfilled.apply(void 0, values);\n }, rejected);\n }, rejected);\n}\n\n/**\n * The async function is a decorator for generator functions, turning\n * them into asynchronous generators. This presently only works in\n * Firefox/Spidermonkey, however, this code does not cause syntax\n * errors in older engines. This code should continue to work and\n * will in fact improve over time as the language improves.\n *\n * Decorates a generator function such that:\n * - it may yield promises\n * - execution will continue when that promise is fulfilled\n * - the value of the yield expression will be the fulfilled value\n * - it returns a promise for the return value (when the generator\n * stops iterating)\n * - the decorated function returns a promise for the return value\n * of the generator or the first rejected promise among those\n * yielded.\n * - if an error is thrown in the generator, it propagates through\n * every following yield until it is caught, or until it escapes\n * the generator function altogether, and is translated into a\n * rejection for the promise returned by the decorated generator.\n * - in present implementations of generators, when a generator\n * function is complete, it throws ``StopIteration``, ``return`` is\n * a syntax error in the presence of ``yield``, so there is no\n * observable return value. There is a proposal[1] to add support\n * for ``return``, which would permit the value to be carried by a\n * ``StopIteration`` instance, in which case it would fulfill the\n * promise returned by the asynchronous generator. This can be\n * emulated today by throwing StopIteration explicitly with a value\n * property.\n *\n * [1]: http://wiki.ecmascript.org/doku.php?id=strawman:async_functions#reference_implementation\n *\n */\nexports.async = async;\nfunction async(makeGenerator) {\n return function () {\n // when verb is \"send\", arg is a value\n // when verb is \"throw\", arg is an exception\n function continuer(verb, arg) {\n var result;\n try {\n result = generator[verb](arg);\n } catch (exception) {\n if (isStopIteration(exception)) {\n return exception.value;\n } else {\n return reject(exception);\n }\n }\n return when(result, callback, errback);\n }\n var generator = makeGenerator.apply(this, arguments);\n var callback = continuer.bind(continuer, \"send\");\n var errback = continuer.bind(continuer, \"throw\");\n return callback();\n };\n}\n\n/**\n * Throws a ReturnValue exception to stop an asynchronous generator.\n * Only useful presently in Firefox/SpiderMonkey since generators are\n * implemented.\n * @param value the return value for the surrounding generator\n * @throws ReturnValue exception with the value.\n * @example\n * Q.async(function () {\n * var foo = yield getFooPromise();\n * var bar = yield getBarPromise();\n * Q.return(foo + bar);\n * })\n */\nexports['return'] = _return;\nfunction _return(value) {\n throw new QReturnValue(value);\n}\n\n/**\n * The promised function decorator ensures that any promise arguments\n * are resolved and passed as values (`this` is also resolved and passed\n * as a value). It will also ensure that the result of a function is\n * always a promise.\n *\n * @example\n * var add = Q.promised(function (a, b) {\n * return a + b;\n * });\n * add(Q.resolve(a), Q.resolve(B));\n *\n * @param {function} callback The function to decorate\n * @returns {function} a function that has been decorated.\n */\nexports.promised = promised;\nfunction promised(callback) {\n return function () {\n return all([this, all(arguments)]).spread(function (self, args) {\n return callback.apply(self, args);\n });\n };\n}\n\n/**\n * Constructs a promise method that can be used to safely observe resolution of\n * a promise for an arbitrarily named method like \"propfind\" in a future turn.\n */\nexports.sender = deprecate(sender, \"sender\", \"dispatcher\"); // XXX deprecated, use dispatcher\nexports.Method = deprecate(sender, \"Method\", \"dispatcher\"); // XXX deprecated, use dispatcher\nfunction sender(op) {\n return function (object) {\n var args = array_slice(arguments, 1);\n return send.apply(void 0, [object, op].concat(args));\n };\n}\n\n/**\n * sends a message to a value in a future turn\n * @param object* the recipient\n * @param op the name of the message operation, e.g., \"when\",\n * @param ...args further arguments to be forwarded to the operation\n * @returns result {Promise} a promise for the result of the operation\n */\nexports.send = deprecate(send, \"send\", \"dispatch\"); // XXX deprecated, use dispatch\nfunction send(object, op) {\n var deferred = defer();\n var args = array_slice(arguments, 2);\n object = resolve(object);\n nextTick(function () {\n object.promiseSend.apply(\n object,\n [op, deferred.resolve].concat(args)\n );\n });\n return deferred.promise;\n}\n\n/**\n * sends a message to a value in a future turn\n * @param object* the recipient\n * @param op the name of the message operation, e.g., \"when\",\n * @param args further arguments to be forwarded to the operation\n * @returns result {Promise} a promise for the result of the operation\n */\nexports.dispatch = dispatch;\nfunction dispatch(object, op, args) {\n var deferred = defer();\n object = resolve(object);\n nextTick(function () {\n object.promiseSend.apply(\n object,\n [op, deferred.resolve].concat(args)\n );\n });\n return deferred.promise;\n}\n\n/**\n * Constructs a promise method that can be used to safely observe resolution of\n * a promise for an arbitrarily named method like \"propfind\" in a future turn.\n *\n * \"dispatcher\" constructs methods like \"get(promise, name)\" and \"put(promise)\".\n */\nexports.dispatcher = dispatcher;\nfunction dispatcher(op) {\n return function (object) {\n var args = array_slice(arguments, 1);\n return dispatch(object, op, args);\n };\n}\n\n/**\n * Gets the value of a property in a future turn.\n * @param object promise or immediate reference for target object\n * @param name name of property to get\n * @return promise for the property value\n */\nexports.get = dispatcher(\"get\");\n\n/**\n * Sets the value of a property in a future turn.\n * @param object promise or immediate reference for object object\n * @param name name of property to set\n * @param value new value of property\n * @return promise for the return value\n */\nexports.put = dispatcher(\"put\");\n\n/**\n * Deletes a property in a future turn.\n * @param object promise or immediate reference for target object\n * @param name name of property to delete\n * @return promise for the return value\n */\nexports[\"delete\"] = // XXX experimental\nexports.del = dispatcher(\"del\");\n\n/**\n * Invokes a method in a future turn.\n * @param object promise or immediate reference for target object\n * @param name name of method to invoke\n * @param value a value to post, typically an array of\n * invocation arguments for promises that\n * are ultimately backed with `resolve` values,\n * as opposed to those backed with URLs\n * wherein the posted value can be any\n * JSON serializable object.\n * @return promise for the return value\n */\n// bound locally because it is used by other methods\nvar post = exports.post = dispatcher(\"post\");\n\n/**\n * Invokes a method in a future turn.\n * @param object promise or immediate reference for target object\n * @param name name of method to invoke\n * @param ...args array of invocation arguments\n * @return promise for the return value\n */\nexports.invoke = function (value, name) {\n var args = array_slice(arguments, 2);\n return post(value, name, args);\n};\n\n/**\n * Applies the promised function in a future turn.\n * @param object promise or immediate reference for target function\n * @param thisp the `this` object for the call\n * @param args array of application arguments\n */\n// XXX deprecated, use fapply\nvar apply = exports.apply = deprecate(dispatcher(\"apply\"), \"apply\", \"fapply\");\n\n/**\n * Applies the promised function in a future turn.\n * @param object promise or immediate reference for target function\n * @param args array of application arguments\n */\nvar fapply = exports.fapply = dispatcher(\"fapply\");\n\n/**\n * Calls the promised function in a future turn.\n * @param object promise or immediate reference for target function\n * @param thisp the `this` object for the call\n * @param ...args array of application arguments\n */\n// XXX deprecated, use fcall\nexports.call = deprecate(call, \"call\", \"fcall\");\nfunction call(value, thisp) {\n var args = array_slice(arguments, 2);\n return apply(value, thisp, args);\n}\n\n/**\n * Calls the promised function in a future turn.\n * @param object promise or immediate reference for target function\n * @param ...args array of application arguments\n */\nexports[\"try\"] = fcall; // XXX experimental\nexports.fcall = fcall;\nfunction fcall(value) {\n var args = array_slice(arguments, 1);\n return fapply(value, args);\n}\n\n/**\n * Binds the promised function, transforming return values into a fulfilled\n * promise and thrown errors into a rejected one.\n * @param object promise or immediate reference for target function\n * @param thisp the `this` object for the call\n * @param ...args array of application arguments\n */\nexports.bind = deprecate(bind, \"bind\", \"fbind\"); // XXX deprecated, use fbind\nfunction bind(value, thisp) {\n var args = array_slice(arguments, 2);\n return function bound() {\n var allArgs = args.concat(array_slice(arguments));\n return apply(value, thisp, allArgs);\n };\n}\n\n/**\n * Binds the promised function, transforming return values into a fulfilled\n * promise and thrown errors into a rejected one.\n * @param object promise or immediate reference for target function\n * @param ...args array of application arguments\n */\nexports.fbind = fbind;\nfunction fbind(value) {\n var args = array_slice(arguments, 1);\n return function fbound() {\n var allArgs = args.concat(array_slice(arguments));\n return fapply(value, allArgs);\n };\n}\n\n/**\n * Requests the names of the owned properties of a promised\n * object in a future turn.\n * @param object promise or immediate reference for target object\n * @return promise for the keys of the eventually resolved object\n */\nexports.keys = dispatcher(\"keys\");\n\n/**\n * Turns an array of promises into a promise for an array. If any of\n * the promises gets rejected, the whole array is rejected immediately.\n * @param {Array*} an array (or promise for an array) of values (or\n * promises for values)\n * @returns a promise for an array of the corresponding values\n */\n// By Mark Miller\n// http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled\nexports.all = all;\nfunction all(promises) {\n return when(promises, function (promises) {\n var countDown = promises.length;\n if (countDown === 0) {\n return resolve(promises);\n }\n var deferred = defer();\n array_reduce(promises, function (undefined, promise, index) {\n if (isFulfilled(promise)) {\n promises[index] = valueOf(promise);\n if (--countDown === 0) {\n deferred.resolve(promises);\n }\n } else {\n when(promise, function (value) {\n promises[index] = value;\n if (--countDown === 0) {\n deferred.resolve(promises);\n }\n })\n .fail(deferred.reject);\n }\n }, void 0);\n return deferred.promise;\n });\n}\n\n/**\n * Waits for all promises to be resolved, either fulfilled or\n * rejected. This is distinct from `all` since that would stop\n * waiting at the first rejection. The promise returned by\n * `allResolved` will never be rejected.\n * @param promises a promise for an array (or an array) of promises\n * (or values)\n * @return a promise for an array of promises\n */\nexports.allResolved = allResolved;\nfunction allResolved(promises) {\n return when(promises, function (promises) {\n return when(all(array_map(promises, function (promise) {\n return when(promise, noop, noop);\n })), function () {\n return array_map(promises, resolve);\n });\n });\n}\n\n/**\n * Captures the failure of a promise, giving an oportunity to recover\n * with a callback. If the given promise is fulfilled, the returned\n * promise is fulfilled.\n * @param {Any*} promise for something\n * @param {Function} callback to fulfill the returned promise if the\n * given promise is rejected\n * @returns a promise for the return value of the callback\n */\nexports[\"catch\"] = // XXX experimental\nexports.fail = fail;\nfunction fail(promise, rejected) {\n return when(promise, void 0, rejected);\n}\n\n/**\n * Attaches a listener that can respond to progress notifications from a\n * promise's originating deferred. This listener receives the exact arguments\n * passed to ``deferred.notify``.\n * @param {Any*} promise for something\n * @param {Function} callback to receive any progress notifications\n * @returns the given promise, unchanged\n */\nexports.progress = progress;\nfunction progress(promise, progressed) {\n return when(promise, void 0, void 0, progressed);\n}\n\n/**\n * Provides an opportunity to observe the rejection of a promise,\n * regardless of whether the promise is fulfilled or rejected. Forwards\n * the resolution to the returned promise when the callback is done.\n * The callback can return a promise to defer completion.\n * @param {Any*} promise\n * @param {Function} callback to observe the resolution of the given\n * promise, takes no arguments.\n * @returns a promise for the resolution of the given promise when\n * ``fin`` is done.\n */\nexports[\"finally\"] = // XXX experimental\nexports.fin = fin;\nfunction fin(promise, callback) {\n return when(promise, function (value) {\n return when(callback(), function () {\n return value;\n });\n }, function (exception) {\n return when(callback(), function () {\n return reject(exception);\n });\n });\n}\n\n/**\n * Terminates a chain of promises, forcing rejections to be\n * thrown as exceptions.\n * @param {Any*} promise at the end of a chain of promises\n * @returns nothing\n */\nexports.end = deprecate(done, \"end\", \"done\"); // XXX deprecated, use done\nexports.done = done;\nfunction done(promise, fulfilled, rejected, progress) {\n function onUnhandledError(error) {\n // forward to a future turn so that ``when``\n // does not catch it and turn it into a rejection.\n nextTick(function () {\n makeStackTraceLong(error, promise);\n\n if (exports.onerror) {\n exports.onerror(error);\n } else {\n throw error;\n }\n });\n }\n\n // Avoid unnecessary `nextTick`ing via an unnecessary `when`.\n var promiseToHandle = fulfilled || rejected || progress ?\n when(promise, fulfilled, rejected, progress) :\n promise;\n\n fail(promiseToHandle, onUnhandledError);\n}\n\n/**\n * Causes a promise to be rejected if it does not get fulfilled before\n * some milliseconds time out.\n * @param {Any*} promise\n * @param {Number} milliseconds timeout\n * @returns a promise for the resolution of the given promise if it is\n * fulfilled before the timeout, otherwise rejected.\n */\nexports.timeout = timeout;\nfunction timeout(promise, ms) {\n var deferred = defer();\n var timeoutId = setTimeout(function () {\n deferred.reject(new Error(\"Timed out after \" + ms + \" ms\"));\n }, ms);\n\n when(promise, function (value) {\n clearTimeout(timeoutId);\n deferred.resolve(value);\n }, function (exception) {\n clearTimeout(timeoutId);\n deferred.reject(exception);\n });\n\n return deferred.promise;\n}\n\n/**\n * Returns a promise for the given value (or promised value) after some\n * milliseconds.\n * @param {Any*} promise\n * @param {Number} milliseconds\n * @returns a promise for the resolution of the given promise after some\n * time has elapsed.\n */\nexports.delay = delay;\nfunction delay(promise, timeout) {\n if (timeout === void 0) {\n timeout = promise;\n promise = void 0;\n }\n var deferred = defer();\n setTimeout(function () {\n deferred.resolve(promise);\n }, timeout);\n return deferred.promise;\n}\n\n/**\n * Passes a continuation to a Node function, which is called with the given\n * arguments provided as an array, and returns a promise.\n *\n * Q.nfapply(FS.readFile, [__filename])\n * .then(function (content) {\n * })\n *\n */\nexports.nfapply = nfapply;\nfunction nfapply(callback, args) {\n var nodeArgs = array_slice(args);\n var deferred = defer();\n nodeArgs.push(deferred.makeNodeResolver());\n\n fapply(callback, nodeArgs).fail(deferred.reject);\n return deferred.promise;\n}\n\n/**\n * Passes a continuation to a Node function, which is called with the given\n * arguments provided individually, and returns a promise.\n *\n * Q.nfcall(FS.readFile, __filename)\n * .then(function (content) {\n * })\n *\n */\nexports.nfcall = nfcall;\nfunction nfcall(callback/*, ...args */) {\n var nodeArgs = array_slice(arguments, 1);\n var deferred = defer();\n nodeArgs.push(deferred.makeNodeResolver());\n\n fapply(callback, nodeArgs).fail(deferred.reject);\n return deferred.promise;\n}\n\n/**\n * Wraps a NodeJS continuation passing function and returns an equivalent\n * version that returns a promise.\n *\n * Q.nfbind(FS.readFile, __filename)(\"utf-8\")\n * .then(console.log)\n * .done()\n *\n */\nexports.nfbind = nfbind;\nfunction nfbind(callback/*, ...args */) {\n var baseArgs = array_slice(arguments, 1);\n return function () {\n var nodeArgs = baseArgs.concat(array_slice(arguments));\n var deferred = defer();\n nodeArgs.push(deferred.makeNodeResolver());\n\n fapply(callback, nodeArgs).fail(deferred.reject);\n return deferred.promise;\n };\n}\n\n/**\n * Passes a continuation to a Node function, which is called with a given\n * `this` value and arguments provided as an array, and returns a promise.\n *\n * Q.napply(FS.readFile, FS, [__filename])\n * .then(function (content) {\n * })\n *\n */\nexports.napply = deprecate(napply, \"napply\", \"npost\");\nfunction napply(callback, thisp, args) {\n return nbind(callback, thisp).apply(void 0, args);\n}\n\n/**\n * Passes a continuation to a Node function, which is called with a given\n * `this` value and arguments provided individually, and returns a promise.\n *\n * Q.ncall(FS.readFile, FS, __filename)\n * .then(function (content) {\n * })\n *\n */\nexports.ncall = deprecate(ncall, \"ncall\", \"ninvoke\");\nfunction ncall(callback, thisp /*, ...args*/) {\n var args = array_slice(arguments, 2);\n return napply(callback, thisp, args);\n}\n\n/**\n * Wraps a NodeJS continuation passing function and returns an equivalent\n * version that returns a promise.\n *\n * Q.nbind(FS.readFile, FS)(__filename)\n * .then(console.log)\n * .done()\n *\n */\nexports.nbind = deprecate(nbind, \"nbind\", \"nfbind\");\nfunction nbind(callback /* thisp, ...args*/) {\n if (arguments.length > 1) {\n var thisp = arguments[1];\n var args = array_slice(arguments, 2);\n\n var originalCallback = callback;\n callback = function () {\n var combinedArgs = args.concat(array_slice(arguments));\n return originalCallback.apply(thisp, combinedArgs);\n };\n }\n return function () {\n var deferred = defer();\n var args = array_slice(arguments);\n // add a continuation that resolves the promise\n args.push(deferred.makeNodeResolver());\n // trap exceptions thrown by the callback\n fapply(callback, args)\n .fail(deferred.reject);\n return deferred.promise;\n };\n}\n\n/**\n * Calls a method of a Node-style object that accepts a Node-style\n * callback with a given array of arguments, plus a provided callback.\n * @param object an object that has the named method\n * @param {String} name name of the method of object\n * @param {Array} args arguments to pass to the method; the callback\n * will be provided by Q and appended to these arguments.\n * @returns a promise for the value or error\n */\nexports.npost = npost;\nfunction npost(object, name, args) {\n var nodeArgs = array_slice(args);\n var deferred = defer();\n nodeArgs.push(deferred.makeNodeResolver());\n\n post(object, name, nodeArgs).fail(deferred.reject);\n return deferred.promise;\n}\n\n/**\n * Calls a method of a Node-style object that accepts a Node-style\n * callback, forwarding the given variadic arguments, plus a provided\n * callback argument.\n * @param object an object that has the named method\n * @param {String} name name of the method of object\n * @param ...args arguments to pass to the method; the callback will\n * be provided by Q and appended to these arguments.\n * @returns a promise for the value or error\n */\nexports.ninvoke = ninvoke;\nfunction ninvoke(object, name /*, ...args*/) {\n var nodeArgs = array_slice(arguments, 2);\n var deferred = defer();\n nodeArgs.push(deferred.makeNodeResolver());\n\n post(object, name, nodeArgs).fail(deferred.reject);\n return deferred.promise;\n}\n\nexports.nend = deprecate(nodeify, \"nend\", \"nodeify\"); // XXX deprecated, use nodeify\nexports.nodeify = nodeify;\nfunction nodeify(promise, nodeback) {\n if (nodeback) {\n promise.then(function (value) {\n nextTick(function () {\n nodeback(null, value);\n });\n }, function (error) {\n nextTick(function () {\n nodeback(error);\n });\n });\n } else {\n return promise;\n }\n}\n\n// All code before this point will be filtered from stack traces.\nvar qEndingLine = captureLine();\n\n});\n\n}).call(this,require(\"Mk2NyG\"))","'use strict';\n\nvar BoundingBox = module.exports = function(element, left, top){\n\tthis.element = element;\n\tthis.top = top || 0;\n\tthis.left = left || 0;\n\tthis.width = this.element.width;\n\tthis.height = this.element.height;\n\tthis.bottom = this.top + this.height;\n\tthis.right = this.left + this.width;\n\n\telement.locations.push(this);\n};\n\nBoundingBox.prototype.show = function(container){\n\tif(this.visible) return;\n\t\n\tthis.visible = true;\n\tthis.element.show(this.left, this.top, container);\n};\n\nBoundingBox.prototype.hide = function(container){\n\tif(!this.visible) return;\n\n\tthis.visible = false;\n\tthis.element.hide(container);\n};","'use strict';\n\nmodule.exports = Tag;\n\nfunction Tag(){\n\tthis.elements = [];\n}\n\nTag.create = function(options){\n\toptions = options || {};\n\tvar tag = new Tag();\n\t\n\tif('skipProbability' in options) tag.skipProbability = options.skipProbability;\n\tif('tryLimit' in options) tag.tryLimit = options.tryLimit;\n\n\treturn tag;\n};\n\nTag.prototype.chanceMultiplier = 1;\nTag.prototype.skipProbability = 0;\n\nTag.prototype.add = function(element){\n\tvar chanceMultiplier = element.chanceMultiplier;\n\twhile(chanceMultiplier--) this.elements.push(element);\n};\n\nTag.prototype.remove = function(element){\n\tvar\tindex;\n\n\t// Remove all instances of the element\n\twhile(~(index = this.elements.indexOf(element))){\n\t\tthis.elements.splice(index, 1);\n\t}\n};\n\nTag.prototype.getElements = function(){\n\treturn this.elements.slice();\n};\n\nTag.prototype.getRandomElement = function(){\n\treturn this.elements[(Math.random() * this.elements.length)|0];\n};\n\n\n","'use strict';\n\nvar Q = require('../bower_components/q/q.js');\nvar createQuadtree = require('../bower_components/giant-quadtree/dist/GiantQuadtree.js').create,\n\tSurface = require('../bower_components/big-surface/dist/BigSurface.js');\n\nvar BoundingBox = require('./BoundingBox.js'),\n\tTag = require('./Tag.js');\n\nvar Collage = module.exports = function(container){\n\tSurface.call(this, container);\n\tthis.quadtree = createQuadtree(15000);\n\n\tthis.tags = {};\n\tthis.activeTags = [];\n\n\tthis.updateCanvasDimensions();\n};\n\nCollage.prototype = Object.create(Surface.prototype);\n\nCollage.create = function(container){\n\tvar collage = new Collage(container);\n\treturn Collage.getApi(collage);\n};\n\nCollage.getApi = function(collage){\n\tvar api = Surface.getApi(collage);\n\n\tapi.createTag = collage.createTag.bind(collage);\n\tapi.configureTag = collage.configureTag.bind(collage);\n\t\n\tapi.setActiveTags = collage.setActiveTags.bind(collage);\n\t\n\tapi.pause = collage.pause.bind(collage);\n\tapi.resume = collage.resume.bind(collage);\n\n\tapi.load = collage.loadElements.bind(collage);\n\tapi.add = collage.addElements.bind(collage);\n\tapi.remove = collage.removeElement.bind(collage);\n\tapi.get = collage.getElements.bind(collage);\n\tapi.showElement = collage.showElement.bind(collage);\n\tapi.loader = collage.loader;\n\n\tapi.fill = function(){\n\t\tcollage.updateCanvasDimensions();\n\t\tcollage.pickNextElement();\n\n\t\tif(collage.nextElement){\n\t\t\treturn collage.fillCenter();\t\n\t\t}\n\n\t\treturn [];\n\t};\n\n\tapi.start = collage.start.bind(collage);\n\t\n\treturn api;\n};\n\nCollage.loader = require('./loader/index.js');\nCollage.element = require('./element/index.js');\n\n// How many random spot will be checked to place elements per frame\nCollage.prototype.scanTryLimit = 20;\n\n// Max number of frames an element has to find a place before another is picked\n// this prevents large gaps due to large elements\nCollage.prototype.missLimit = 4;\n\n// Minimum pixel spacing between elements\nCollage.prototype.elementMargin = 25;\n\n// How much beyond the window to scan for places to put objects when filling\nCollage.prototype.overScan = 0;\n\nCollage.prototype.hidingArea = document.createDocumentFragment();\nCollage.prototype.minElementSize = 50;\n\nCollage.prototype.createTag = function(name, options){\n\tthis.tags[name] = Tag.create(options);\n\treturn this.tags[name];\n};\n\nCollage.prototype.configureTag = function(name, options){\n\tvar tag = this.tags[name];\n\tif(!tag){\n\t\tthis.createTag(options);\n\t\treturn;\n\t}\n\n\tif('skipProbability' in options) tag.skipProbability = options.skipProbability;\n\tif('tryLimit' in options) tag.tryLimit = options.tryLimit;\n};\n\nCollage.prototype.loadElements = function(tagNames, arg2, arg3){\n\tvar addElements = this.addElements.bind(this, tagNames),\n\t\tloaderMap,\n\t\tloaderName,\n\t\tloader,\n\t\tloaderConfig,\n\t\tloaderConfigs,\n\t\tloaderConfigIndex,\n\t\tpromise,\n\t\tpromises = [];\n\n\tif(typeof arg2 === 'string'){\n\t\t// Handle the .load([tag name], [loader name], [loader config]) case\n\t\tloaderMap = {};\n\t\tloaderMap[arg2] = arg3;\t\n\t} else {\n\t\t// Handle the .load([tag name], [loader map]) case\n\t\tloaderMap = arg2;\n\t} \n\n\tfor(loaderName in loaderMap){\n\t\tif(loaderMap.hasOwnProperty(loaderName)){\n\t\t\tloader = Collage.loader[loaderName];\n\t\t\tloaderConfigs = loaderMap[loaderName];\n\t\t\tif(!Array.isArray(loaderConfigs)) loaderConfigs = [loaderConfigs];\t\t\n\t\t\tloaderConfigIndex = loaderConfigs.length;\n\n\t\t\tloaderConfig = loaderConfigs[--loaderConfigIndex];\n\t\t\twhile(loaderConfig){\n\t\t\t\tpromise = loader(this, loaderConfig).then(addElements);\n\t\t\t\tpromises.push(promise);\t\n\t\t\t\tloaderConfig = loaderConfigs[--loaderConfigIndex];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Q.allResolved(promises);\n};\n\nCollage.prototype.addElements = function(tagNames, elements){\n\tif(!Array.isArray(tagNames)) tagNames = [tagNames];\n\tif(!Array.isArray(elements)) elements = [elements];\n\t\n\tvar tagNameIndex = tagNames.length,\n\t\ttagName,\n\t\ttag,\n\t\telementIndex;\n\n\t// For each tag...\n\ttagName = tagNames[--tagNameIndex];\n\twhile(tagName){\n\t\ttag = this.tags[tagName] || this.createTag(tagName);\n\t\telementIndex = elements.length;\n\t\twhile(elementIndex--) tag.add(elements[elementIndex]);\n\t\ttagName = tagNames[--tagNameIndex];\n\t}\n};\n\nCollage.prototype.fadeInToCenter = function(){};\n\nCollage.prototype.removeElement = function(tagNames, element){\n\tif(!Array.isArray(tagNames)) tagNames = [tagNames];\n\t\n\tvar tagNameIndex = tagNames.length,\n\t\ttagName,\n\t\ttag;\n\n\ttagName = tagNames[tagNameIndex--];\n\twhile(tagName){\n\t\ttag = this.tags[tagName];\n\t\tif(!tag) continue;\n\t\ttag.remove(element);\n\t\ttagName = tagNames[tagNameIndex--];\n\t}\n};\n\nCollage.prototype.getElements = function(){\n\tvar tagNames = (arguments.length > 0)? arguments : Object.keys(this.tags),\n\t\ttagNameIndex = tagNames.length,\n\t\ttagName,\n\t\ttag,\n\t\telements = [];\n\n\ttagName = tagNames[--tagNameIndex];\n\twhile(tagName){\n\t\ttag = this.tags[tagName];\n\t\tif(tag){\n\t\t\telements = elements.concat(tag.getElements());\n\t\t}\n\t\ttagName = tagNames[--tagNameIndex];\n\t}\n\n\treturn elements;\n};\n\nCollage.prototype.setActiveTags = function(){\n\tvar index = arguments.length,\n\t\ttagName,\n\t\ttag,\n\t\tchanceMultiplier,\n\t\tactiveTags = [];\n\n\ttagName = arguments[--index];\n\twhile(tagName){\n\t\ttag = this.tags[tagName];\n\t\tif(tag){\n\t\t\tchanceMultiplier = tag.chanceMultiplier;\n\t\t\twhile(chanceMultiplier--) activeTags.push(tag);\n\t\t}\n\t\ttagName = arguments[--index];\n\t}\n\n\tthis.activeTags = activeTags;\n};\n\nCollage.prototype.getRandomActiveTag = function(){\n\tvar tag,\n\t\tfailSafe = this.getRandomActiveTagFailSafe;\n\n\twhile(failSafe--){\n\t\ttag = this.activeTags[(Math.random() * this.activeTags.length)|0];\n\t\tif(tag.skipProbability < Math.random()) break;\n\t}\n\t\n\treturn tag;\n};\n\nCollage.prototype.pause = function(duration){\n\tif(this.savedHorizontalVelocityScalar !== void 0) return;\n\tthis.savedHorizontalVelocityScalar = this.horizontalVelocityScalar;\n\tthis.savedVerticalVelocityScalar = this.verticalVelocityScalar;\n\tthis.setVelocityScalar(0, duration || 0.4);\n};\n\nCollage.prototype.resume = function(duration){\n\tif(this.savedHorizontalVelocityScalar === void 0) return;\n\n\tthis.setHorizontalVelocityScalar(this.savedHorizontalVelocityScalar, (duration || 0.4));\n\tthis.setVerticalVelocityScalar(this.savedVerticalVelocityScalar, (duration || 0.4));\n\tthis.savedHorizontalVelocityScalar = void 0;\n};\n\nCollage.prototype.savedHorizontalVelocityScalar = void 0;\nCollage.prototype.savedVerticalVelocityScalar = void 0;\n\nCollage.prototype.getRandomActiveTagFailSafe = 20;\nCollage.prototype.getRandomElementFailSafe = 20;\nCollage.prototype.getRandomElementTryLimit = 20;\nCollage.prototype.maxElementWidth = 2000;\nCollage.prototype.maxElementHeight = 1000;\n\nCollage.prototype.getRandomElement = function(){\n\tvar failSafe = this.getRandomElementFailSafe,\n\t\tinCanvasRange = true,\n\t\tleft = this.viewportLeft - this.maxElementWidth,\n\t\ttop = this.viewportTop - this.maxElementHeight,\n\t\tright = this.viewportRight + this.maxElementWidth,\n\t\tbottom = this.viewportBottom + this.maxElementHeight,\n\t\telement,\n\t\ttag,\n\t\ttryLimit;\n\n\twhile(inCanvasRange && failSafe--){\n\t\ttag = this.getRandomActiveTag();\n\t\ttryLimit = tag.tryLimit || this.getRandomElementTryLimit;\n\n\t\twhile(tryLimit--){\n\t\t\telement = tag.getRandomElement();\n\n\t\t\tif(!element.isIn(left, top, right, bottom)){\n\t\t\t\treturn element;\n\t\t\t}\n\t\t}\n\t}\n};\n\nCollage.prototype.transformStep = function(){\n\tSurface.prototype.transformStep.call(this);\n\tthis.updateCanvasDimensions();\n\tthis.updateElementVisibility();\n\tthis.maxCheckHeight = 0;\n\tthis.maxCheckWidth = 0;\n\n\tthis.pickNextElement();\n\tif(this.nextElement) this.fill();\n};\n\nCollage.prototype.start = function(){\n\tif(arguments.length > 0) this.setActiveTags.apply(this, arguments);\n\t\n\tif(this.activeTags.length === 0){\n\t\tthrow new Error('Unable to start without active tags');\n\t}\n\tthis.startTransformLoop();\n\tthis.updateCanvasDimensions();\n\tthis.pickNextElement();\n\n\tif(this.nextElement){\n\t\tthis.fillCenter();\t\n\t}\n};\n\nCollage.prototype.pickNextElement = function(){\n\tthis.nextElement = this.getRandomElement();\n\tthis.missCount = 0;\n\n\tif(this.nextElement){\n\t\tthis.updateBounds();\n\t}\n};\n\nCollage.prototype.insertNextElement = function(left, top, show){\n\tvar box = this.showElement(this.nextElement, left, top, show);\n\tthis.pickNextElement();\n\treturn box;\n};\n\nCollage.prototype.showElement = function(element, left, top, show){\n\tvar boundingBox = new BoundingBox(element, left, top);\n\tthis.quadtree.insert(boundingBox);\n\t\n\tif(show){\n\t\tboundingBox.show(this.element);\n\t} else {\n\t\tboundingBox.hide(this.hidingArea);\n\t}\n\n\treturn boundingBox;\n};\n\nCollage.prototype.getViewportBoundingBoxes = function(){\n\treturn this.quadtree.getObjects(this.viewportLeft, this.viewportTop, this.viewportWidth, this.viewportHeight);\n};\n\n\nCollage.prototype.getViewportElements = function(){\n\tvar boundingBoxes = this.getViewportBoundingBoxes(),\n\t\tindex = boundingBoxes.length,\n\t\tresult = [];\n\n\t// boundingBoxes.map would be proper but is less proc efficient\n\twhile(index--) result.push(boundingBoxes[index].element);\n\n\treturn result;\n};\n\nCollage.prototype.updateElementVisibility = function(){\n\tvar oldBoxes = this.visibleBoxes || [],\n\t\tnewBoxes = this.quadtree.getObjects(this.viewportLeft, this.viewportTop, this.viewportWidth, this.viewportHeight),\n\t\tindex,\n\t\tbox;\n\n\t// Mark old visible to hide\n\tindex = oldBoxes.length;\n\twhile(index--) oldBoxes[index].hidePending = true;\n\n\tindex = newBoxes.length;\n\twhile(index--){\n\t\tbox = newBoxes[index];\n\t\tif(!box.visible) box.show(this.element);\n\n\t\t// Clear hide flags for things that are still visible\n\t\tbox.hidePending = false;\n\t}\n\n\t// Hide elements no longer in view\n\tindex = oldBoxes.length;\n\twhile(index--){\n\t\tbox = oldBoxes[index];\n\t\tif(box.hidePending) box.hide(this.hidingArea);\n\t}\n\n\tthis.visibleBoxes = newBoxes;\n};\n\nCollage.prototype.updateCanvasDimensions = function(){\n\tthis.viewportLeft = -1 * this.horizontalPosition - this.overScan;\n\tthis.viewportTop = -1 * this.verticalPosition - this.overScan;\n\tthis.viewportWidth = this.width + this.overScan * 2;\n\tthis.viewportHeight = this.height + this.overScan * 2;\n\tthis.viewportRight = this.viewportLeft + this.viewportWidth;\n\tthis.viewportBottom = this.viewportTop + this.viewportHeight;\n\t\n\tthis.movingUp = this.lastVerticalDisplacement > 0;\n\tthis.movingLeft = this.lastHorizontalDisplacement > 0;\n};\n\nCollage.prototype.fillCenter = function(){\n\tvar boxes = this.quadtree.getObjects(\n\t\tthis.viewportLeft - this.checkWidth,\n\t\tthis.viewportTop - this.checkHeight,\n\t\tthis.viewportWidth + this.checkWidth * 2,\n\t\tthis.viewportHeight + this.checkHeight * 2\n\t);\n\n\tvar\tboundingBoxes = [],\n\t\tscanCheckLeft,\n\t\tscanCheckTop,\n\t\tscanCheckRight,\n\t\tscanCheckBottom,\n\n\t\ttryCount = 0,\n\t\ttryLimit = this.scanTryLimit * 10,\n\t\tmissCount = 0,\n\t\tmissLimit = tryLimit / 20;\n\n\tfor(;tryCount < tryLimit; tryCount++){\n\t\tmissCount++;\n\n\t\tif(missCount > missLimit){\n\t\t\tmissCount = 0;\n\t\t\tthis.pickNextElement();\n\t\t\tif(!this.nextElement) break;\n\t\t}\n\n\t\tscanCheckLeft = (this.viewportLeft - this.checkWidth) + \n\t\t\tMath.floor((this.viewportWidth + this.checkWidth) * Math.random());\n\t\tscanCheckTop = (this.viewportTop - this.checkHeight) + \n\t\t\tMath.floor((this.viewportHeight + this.checkHeight) * Math.random());\n\t\tscanCheckRight = scanCheckLeft + this.checkWidth;\n\t\tscanCheckBottom = scanCheckTop + this.checkHeight;\n\t\n\t\tif(!hasCollision(boxes, scanCheckLeft, scanCheckTop, scanCheckRight, scanCheckBottom)){\n\t\t\tboundingBoxes.push(this.insertNextElement(scanCheckLeft + this.elementMargin, scanCheckTop + this.elementMargin));\n\t\t\tif(!this.nextElement) break;\n\n\t\t\tmissCount = 0;\n\t\t\tboxes = this.quadtree.getObjects(\n\t\t\t\tthis.viewportLeft - this.checkWidth,\n\t\t\t\tthis.viewportTop - this.checkHeight,\n\t\t\t\tthis.viewportWidth + this.checkWidth * 2,\n\t\t\t\tthis.viewportHeight + this.checkHeight * 2\n\t\t\t);\n\t\t}\n\t}\n\n\tthis.updateElementVisibility();\n\treturn boundingBoxes;\n};\n\nCollage.prototype.updateBounds = function(){\n\tthis.checkHeight = this.nextElement.height + this.elementMargin * 2;\n\tthis.checkWidth = this.nextElement.width + this.elementMargin * 2;\n\n\tthis.checkLeft = this.movingLeft ? (this.viewportLeft - this.checkWidth) : this.viewportRight;\n\tthis.checkTop = this.movingUp ? this.viewportTop - this.checkHeight : this.viewportBottom;\n\tthis.checkRight = this.checkLeft + this.checkWidth;\n\tthis.checkBottom = this.checkTop + this.checkHeight;\n\t\t\n\tthis.scanLeft = this.viewportLeft - this.checkWidth;\n\tthis.scanTop = this.viewportTop - this.checkHeight;\n\tthis.scanWidth = this.viewportWidth + this.checkWidth;\n\tthis.scanHeight = this.viewportHeight + this.checkHeight;\n\n\tthis.horizontalBoxes = this.quadtree.getObjects(\n\t\t(this.movingLeft ? this.viewportLeft - this.checkWidth : this.viewportRight),\n\t\tthis.scanTop,\n\t\tthis.checkWidth,\n\t\tthis.scanHeight + this.checkHeight\n\t);\n\n\tthis.verticalBoxes = this.quadtree.getObjects(\n\t\tthis.scanLeft,\n\t\t(this.movingUp ? (this.viewportTop - this.checkHeight) : this.viewportBottom),\n\t\tthis.scanWidth + this.checkWidth,\n\t\tthis.checkHeight\n\t);\n};\n\nfunction hasCollision(boxList, left, top, right, bottom){\n\tvar index = boxList.length,\n\t\tbox;\n\n\twhile(index--){\n\t\tbox = boxList[index];\n\n\t\t// If there is a y-axis intersection\n\t\tif ((top <= box.top ?\n\t\t\t\t\t\t(bottom >= box.top) :\n\t\t\t\t\t\t(box.bottom >= top)) && \n\t\t\t\t\t\t\t// And if there is intersection along the x-axis\n\t\t\t\t\t\t\t(left <= box.left ?\n\t\t\t\t\t\t\t\t(right >= box.left) :\n\t\t\t\t\t\t\t\t(box.right >= left))){\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nCollage.prototype.fill = function(){\n\tvar tryCount = 0,\n\t\ttryLimit = this.scanTryLimit,\n\t\tscanCheckLeft,\n\t\tscanCheckTop,\n\t\tscanCheckRight,\n\t\tscanCheckBottom;\n\n\tthis.missCount++;\n\tif(this.missCount > this.missLimit){\n\t\tthis.pickNextElement();\n\t\tif(!this.nextElement) return;\n\t}\n\n\tfor(;tryCount < tryLimit; tryCount++){\n\t\t// VERTICAL\n\t\tscanCheckLeft = this.scanLeft + Math.floor(this.scanWidth * Math.random());\n\t\tscanCheckRight = scanCheckLeft + this.checkWidth;\n\t\t\n\t\tif(!hasCollision(this.verticalBoxes, scanCheckLeft, this.checkTop, scanCheckRight, this.checkBottom)){\n\t\t\tthis.insertNextElement(scanCheckLeft + this.elementMargin, this.checkTop + this.elementMargin);\n\t\t\tif(!this.nextElement) break;\n\t\t}\n\n\t\t// HORIZONTAL\n\t\tscanCheckTop = this.scanTop + Math.floor(this.scanHeight * Math.random());\n\t\tscanCheckBottom = scanCheckTop + this.checkHeight;\n\n\t\tif(!hasCollision(this.horizontalBoxes, this.checkLeft, scanCheckTop, this.checkRight, scanCheckBottom)){\n\t\t\tvar box = this.insertNextElement(this.checkLeft + this.elementMargin, scanCheckTop + this.elementMargin);\n\t\t\tthis.horizontalBoxes.push(box);\n\n\t\t\tif(!this.nextElement) break;\n\t\t}\n\t}\n};\n","'use strict';\n\nmodule.exports = BaseElement;\n\nfunction BaseElement(domElement, width, height){\n\tthis.element = domElement;\n\tthis.width = width || domElement.width || parseInt(domElement.clientWidth);\n\tthis.height = height || domElement.height || parseInt(domElement.clientHeight);\n\tthis.locations = [];\n\tthis.isVisible = undefined;\n\t\n\tthis.element.style.position = 'absolute';\n}\n\nBaseElement.create = function(domElement, width, height){\n\tvar element = new BaseElement(domElement, width, height);\n\treturn BaseElement.getApi(element);\n};\n\nBaseElement.getApi = function(element){\n\tvar api = {};\n\tapi.element = element.element;\n\tapi.isIn = element.isIn.bind(element);\n\tapi.reposition = element.reposition.bind(element);\n\tapi.show = element.show.bind(element);\n\tapi.hide = element.hide.bind(element);\n\n\tObject.defineProperty(api, 'width', {\n\t\tget: function(){return element.width;}\n\t});\n\n\tObject.defineProperty(api, 'visible', {\n\t\tget: function(){return element.isVisible;}\n\t});\n\n\tObject.defineProperty(api, 'height', {\n\t\tget: function(){return element.height;}\n\t});\n\n\tObject.defineProperty(api, 'chanceMultiplier', {\n\t\tget: function(){return element.chanceMultiplier;},\n\t\tset: function(value){ element.chanceMultiplier = value;}\n\t});\n\n\tObject.defineProperty(api, 'locations', {\n\t\tget: function(){return element.locations; }\n\t});\n\n\treturn api;\n};\n\nBaseElement.prototype.chanceMultiplier = 1;\n\nBaseElement.prototype.isIn = function(left, top, right, bottom){\n\tvar locationIndex = this.locations.length,\n\t\tboundingBox = this.locations[--locationIndex];\n\n\twhile(boundingBox){\n\t\tif((((left < boundingBox.left && boundingBox.left < right) ||\n\t\t\t\t(boundingBox.right < right && left < boundingBox.right)) &&\n\t\t\t((top < boundingBox.top && boundingBox.top < bottom) || \n\t\t\t\t(boundingBox.bottom < bottom && top < boundingBox.bottom)))){\n\t\t\treturn true;\n\t\t}\n\t\tboundingBox = this.locations[--locationIndex];\n\t}\n\n\treturn false;\n};\n\nBaseElement.prototype.reposition = function(left, top){\n\tthis.element.style.left = left + 'px';\n\tthis.element.style.top = top + 'px';\n};\n\nBaseElement.prototype.hide = function(){\n\tthis.isVisible = false;\n};\n\nBaseElement.prototype.show = function(left, top){\n\tthis.reposition(left, top);\n\tthis.isVisible = true;\n};","'use strict';\n\nvar BaseElement = require('./Element.js');\n\nmodule.exports = IframeElement;\n\n// iOS has a rendering bug related to iframes,\nvar isiOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );\n\nfunction IframeElement (element){\n\tBaseElement.call(this, element, parseInt(element.width), parseInt(element.height));\n\n\tthis.iframe = this.element.querySelector('iframe') || this.element;\n\tthis.isLocal = this.iframe.contentDocument && this.iframe.contentDocument.body && \n\t\tthis.iframe.contentDocument.body.innerHTML !== '';\n\t\n\t// Hack to fix for iOS's failure to render the inside of a iframe \n\t// when using css transforms. If we have permission to edit the iframe,\n\t// this method is much more performant that the hack in .show\n\tif(isiOS && this.isLocal){\n\t\tthis.iframe.contentDocument.body.style.webkitTransform = 'translate3d(0, 0, 0)';\n\t}\n\t\n\tthis.hide();\n}\nIframeElement.prototype = Object.create(BaseElement.prototype);\n\nIframeElement.create = function(element){\n\telement = new IframeElement(element);\n\treturn IframeElement.getApi(element);\n};\n\nIframeElement.getApi = function(element){\n\treturn BaseElement.getApi(element);\n};\n\nIframeElement.prototype.hide = function(){\n\tBaseElement.prototype.hide.call(this);\n\tthis.element.style.opacity = 0;\n\t\n\tif(this.fidget){\n\t\tclearInterval(this.fidget);\n\t\tthis.fidget = void 0;\n\t}\n};\n\nIframeElement.prototype.show = function(left, top){\n\tBaseElement.prototype.show.call(this, left, top);\n\tthis.element.style.opacity = 1;\n\n\t// Hack to fix for iOS's failure to render the \n\t// inside of a iframe when using css transforms.\n\tif(isiOS && !this.isLocal && !this.fidget){\n\t\tvar iframe = this.iframe,\n\t\t\tflipper = 0.001;\n\n\t\tthis.fidget = setInterval(function(){\n\t\t\tiframe.style.opacity = 1 + flipper;\n\t\t\tflipper *= -1;\n\t\t}, 200);\n\t}\n};\n","'use strict';\n\nvar BaseElement = require('./Element.js');\n\nmodule.exports = SimpleElement;\n\nfunction SimpleElement (element){\n\tBaseElement.call(this, element, parseInt(element.width), parseInt(element.height));\n\tthis.appended = undefined;\n}\nSimpleElement.prototype = Object.create(BaseElement.prototype);\n\nSimpleElement.create = function(element){\n\telement = new SimpleElement(element);\n\treturn SimpleElement.getApi(element);\n};\n\nSimpleElement.getApi = function(element){\n\treturn BaseElement.getApi(element);\n};\n\n//var hidingArea = document.createDocumentFragment();\nSimpleElement.prototype.hide = function(){\t\n\tBaseElement.prototype.hide.call(this);\n\tthis.element.style.display = 'none';\n\t//hidingArea.appendChild(this.element);\n};\n\nSimpleElement.prototype.show = function(left, top, container){\n\tBaseElement.prototype.show.call(this, left, top);\n\tthis.element.style.display = 'block';\n\tif(!this.appended){\n\t\tcontainer.appendChild(this.element);\n\t\tthis.appended = true;\n\t}\n};","'use strict';\n\nvar EventEmitter = require('../../bower_components/eventEmitter/EventEmitter.js').EventEmitter;\nvar BaseElement = require('./Element.js');\nmodule.exports = VideoElement;\n\n// Manages global tasks, such as periodic polling of players\n// to gather time information\nvar timeManager = (function(){\n\tvar ACTIVE_ELEMENTS = [],\n\t\tPERIODIC_LISTENER,\n\t\tapi = {};\n\n\tapi.add = function(element){\n\t\tACTIVE_ELEMENTS.push(element);\n\t\tif(ACTIVE_ELEMENTS.length === 1){\n\t\t\tPERIODIC_LISTENER = setInterval(function(){\n\t\t\t\tACTIVE_ELEMENTS.forEach(function(element){\n\t\t\t\t\tvar time = Math.round(element.player.getCurrentTime()),\n\t\t\t\t\t\telapsed = time - element.lastReportedTime;\n\t\t\t\t\t\n\t\t\t\t\tif(elapsed === 0) return;\n\t\t\t\t\tif(elapsed === 1){\n\t\t\t\t\t\telement.lastReportedTime = time;\n\t\t\t\t\t\telement.emitter.emit('time', time);\n\t\t\t\t\t\telement.emitter.emit('time:' + time);\n\t\t\t\t\t} else { // In case we missed some ticks, make up for them\n\t\t\t\t\t\tvar start = element.lastReportedTime + 1;\n\t\t\t\t\t\tfor(; start < time; start++){\n\t\t\t\t\t\t\telement.lastReportedTime = start;\n\t\t\t\t\t\t\telement.emitter.emit('time', start);\n\t\t\t\t\t\t\telement.emitter.emit('time:' + start);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, 500); \t// 500 ms ensures that we account for fluctuations in \n\t\t\t\t\t// timing so we report the time accurate to the second\n\t\t}\n\t};\n\n\tapi.remove = function(element){\n\t\tvar index = ACTIVE_ELEMENTS.indexOf(element);\n\t\tif(~index){\n\t\t\tACTIVE_ELEMENTS.splice(index, 1);\n\t\t\tif(ACTIVE_ELEMENTS.length === 0){\n\t\t\t\tclearInterval(PERIODIC_LISTENER); \n\t\t\t}\t\n\t\t}\n\t};\n\n\treturn api;\n}());\n\nfunction VideoElement (element, player){\n\tBaseElement.call(this, element);\n\tthis.player = player;\n\tthis.emitter = new EventEmitter();\n\tthis.lastReportedTime = 0;\n\tplayer.addEventListener('onStateChange', this.statusChangeHandler.bind(this));\n\tplayer.addEventListener('onError', this.errorHandler.bind(this));\n\tthis.hide();\n}\nVideoElement.prototype = Object.create(BaseElement.prototype);\n\nVideoElement.create = function(element, player, options){\n\tvar videoElement = new VideoElement(element, player);\n\n\tif(options.continuousPlay) videoElement.continuousPlay = true;\n\tif(options.autoplay) videoElement.autoplay = true;\n\tif(options.loop) videoElement.loop = true;\n\t\n\treturn VideoElement.getApi(videoElement);\n};\n\nVideoElement.getApi = function(element){\n\tvar api = BaseElement.getApi(element);\n\tapi.player = element.player;\n\tapi.element = element.element;\n\tapi.on = element.emitter.on.bind(element.emitter);\n\tapi.removeListener = element.emitter.removeListener.bind(element.emitter);\n\tapi.destroy = element.destroy.bind(element);\n\treturn api;\n};\n\nVideoElement.prototype.continuousPlay = false;\nVideoElement.prototype.autoplay = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? false : true );\nVideoElement.prototype.loop = false;\nVideoElement.prototype.playing = false;\n\nVideoElement.prototype.errorHandler = function(e){\n\tif(e.data === 150){\n\t\tconsole.log(this);\n\t\tthis.destroy();\n\t}\n};\n\nVideoElement.prototype.destroy = function(){\n\tthis.height = 0;\n\tthis.width = 0;\n\tthis.bottom = this.top;\n\tthis.left = this.right;\n\tthis.element.parentNode.removeChild(this.element);\n};\n\nVideoElement.prototype.hide = function(){\n\tBaseElement.prototype.hide.call(this);\n\tthis.element.style.opacity = 0;\n\t\n\tif(!this.continuousPlay){\n\t\tthis.player.pauseVideo();\n\t}\n};\n\nVideoElement.prototype.show = function(left, top){\n\tthis.element.style.opacity = 1;\n\tBaseElement.prototype.show.call(this, left, top);\n\t\n\tif(this.playing && !this.continuousPlay){\n\t\tthis.player.playVideo();\n\t} else if(!this.playing && this.autoplay) {\n\t\tthis.playing = true;\n\t\tthis.player.playVideo();\n\t}\n};\n\nVideoElement.prototype.statusChangeHandler = function(status){\n\tswitch(status.data){\n\t\tcase -1:\n\t\t\tthis.emitter.emit('unstarted');\n\t\tbreak;\n\t\tcase 0:\n\t\t\tthis.emitter.emit('ended');\n\t\t\ttimeManager.remove(this);\n\t\t\tif(this.loop){\n\t\t\t\tthis.player.seekTo(0);\n\t\t\t\tthis.player.playVideo();\n\t\t\t}\n\t\tbreak;\n\t\tcase 1:\n\t\t\tthis.emitter.emit('playing');\n\t\t\ttimeManager.add(this);\n\t\tbreak;\n\t\tcase 2:\n\t\t\tthis.emitter.emit('paused');\n\t\t\ttimeManager.remove(this);\n\t\tbreak;\n\t\tcase 3:\n\t\t\tthis.emitter.emit('buffering');\n\t\tbreak;\n\t\tcase 5:\n\t\t\tthis.emitter.emit('video cued');\n\t\tbreak;\n\t}\n};","'use strict';\n\nexports.Iframe = require('./Iframe.js');\nexports.Simple = require('./Simple.js');\nexports.Video = require('./Video.js');","'use strict';\n/* globals FB */\n\nvar Q = require('../../bower_components/q/q.js'),\n\tgetFromApi = require('./getFromCommonApi.js'),\n\tIframeElement = require('../element/Iframe.js'),\n\tutils = require('../utils.js');\n\nvar endpoint = 'https://graph.facebook.com/search';\n//var endpoint = '/search';\n\nwindow.credits = window.credits || {};\nvar credits = window.credits.facebook = {};\n\nmodule.exports = function(collage, options){\n\tif(!options.type) options.type = 'pages';\n\t\n\tswitch(options.type){\n\t\tcase 'pages':\n\t\t\treturn createPages(collage, options);\n\t}\n};\n/*\nvar ACTIVITY_BOX_TEMPLATE = '<div class=\"fb-activity\" data-site=\"www.hrc.org\" ' + \n\t'data-width=\"{{width}}\" data-height=\"{{height}}\" data-header=\"false\" ' + \n\t'data-recommendations=\"false\"></div>';\nvar LIKE_BOX_TEMPLATE = '<div class=\"fb-like-box\" ' + \n\t'data-href=\"http://www.facebook.com/{{id}}\" data-width=\"{{width}}\" ' + \n\t'data-height=\"{{height}}\" data-show-faces=\"true\" data-stream=\"false\" ' + \n\t'data-header=\"false\"></div>';\n*/\nvar defaults = {\n\tlimit: 3,\n\twidth: 400,\n\theight: 600,\n\tminLikes: 0,\n\tshowFaces: true,\n\tshowStream: true,\n\tshowHeader: false,\n\tids: []\n};\n\nfunction createPages(collage, options){\n\tutils.extend(options, defaults);\n\tvar ids = options.ids;\n\t\n\tif(options.query){\n\t\treturn getFromApi(endpoint, [\n\t\t\t'type=page',\n\t\t\t'fields=name,link,likes,category',\n\t\t\t'limit=' + options.limit,\n\t\t\t'q=' + encodeURIComponent(options.query)\n\t\t]).then(function(response){\n\t\t\tresponse.data.forEach(function(item){\n\t\t\t\tif(item.likes < options.minLikes) return;\n\t\t\t\n\t\t\t\tcredits[item.name] = item.link;\n\t\t\t\tids.push(item.id);\n\t\t\t});\n\n\t\t\treturn loadLikeBoxes(collage, ids, options);\n\t\t});\n\t} else {\n\t\treturn Q.when(loadLikeBoxes(collage, ids, options));\n\t}\n}\n\nfunction loadLikeBoxes(collage, ids, options){\n\tvar elements = [];\n\n\tids.forEach(function(id){\n\t\tvar element = document.createElement('div');\n\t\telement.className='fb-like-box';\n\t\telement.setAttribute('data-href', 'http://www.facebook.com/' + id);\n\t\telement.setAttribute('data-width', options.width);\n\t\telement.setAttribute('data-height', options.height);\n\t\telement.setAttribute('data-show-faces', options.showFaces);\n\t\telement.setAttribute('data-stream', options.showStream);\n\t\telement.setAttribute('data-header', options.showHeader);\n\n\t\tvar iframeElement = utils.attachIframeToCollage(collage, element, options.width, options.height);\n\t\t\n\t\tFB.XFBML.parse(iframeElement);\n\n\t\telements.push(new IframeElement(iframeElement));\n\t});\n\t\n\treturn elements;\n}\n","'use strict';\n/* jslint camelcase:false */\nvar Q = require('../../bower_components/q/q.js'),\n\tSimpleElement = require('../element/Simple.js'),\n\tutils = require('../utils.js'),\n\tgetFromApi = require('./getFromCommonApi.js');\n\nwindow.credits = window.credits || {};\nvar credits = window.credits.flickr = {};\n\nvar endpoint = 'https://api.flickr.com/services/rest/';\n//var endpoint = '/services/rest/';\n\nmodule.exports = getPhotos;\n\nvar defaults = {\n\tsort: 'relevance',\n\tcount: '20',\n\tlicense: '1,2,3,4,5,6,7,8', // http://www.flickr.com/services/api/flickr.photos.licenses.getInfo.html\n\tapiKey: '06960d3c3c8affd01e65ec032513557b',\n\tmedia: 'photos',\n\ttagMode: 'all',\n\tisCommons: false,\n\tcontentType: '1' // Photos only (not screenshots or drawings)\n};\n\nfunction getPhotos(collage, options){\n\tvar deferred = Q.defer(),\n\t\tparams;\n\t\n\tif(typeof options === 'string') options = {tags: options};\n\tutils.extend(options, defaults);\n\n\tparams = [\n\t\t'format=json',\n\t\t'method=flickr.photos.search',\n\t\t'extras=url_z,url_m,path_alias',\n\t\t'api_key=' + options.apiKey,\n\t\t'license=' + options.license, \n\t\t'sort=' + options.sort,\n\t\t'tag_mode=' + options.tagMode,\n\t\t'per_page=' + options.count,\n\t\t'content_type=' + options.contentType,\n\t\t'media=' + options.media,\n\t\t'tags=' + options.tags,\n\t\t'api_key=' + '50af342c4178f4a984377a4b4b55998b'\n\t];\n\n\tif(options.isCommons){\n\t\tparams.push('is_commons=' + options.isCommons);\n\t}\n\n\tgetFromApi(endpoint, 'jsoncallback', params).then(function(response){\n\t\tvar elements = [],\n\t\t\tphotos = response.photos && response.photos.photo || [],\n\t\t\twaiting = photos.length;\n\n\t\tphotos.forEach(function(item){\n\t\t\tvar url = item.url_z || item.url_m;\n\n\t\t\tif(!url){\n\t\t\t\twaiting--;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tloadImage(item.url_z || item.url_m).then(function(element){\n\t\t\t\tvar anchor = document.createElement('a');\n\t\t\t\tanchor.href = 'http://www.flickr.com/photos/' + item.pathalias + '/' + item.id + '/';\n\t\t\t\tanchor.width = element.width;\n\t\t\t\tanchor.height = element.height;\n\t\t\t\tanchor.target = '_blank';\n\t\t\t\tanchor.style.display = 'block';\n\t\t\t\tanchor.appendChild(element);\n\t\t\t\t\n\t\t\t\tcredits[item.pathalias] = anchor.href;\n\t\t\t\t\n\t\t\t\telements.push(SimpleElement.create(anchor));\n\t\t\t\tif(--waiting === 0) deferred.resolve(elements);\n\t\t\t}, function(){\n\t\t\t\tif(--waiting === 0) deferred.resolve(elements);\n\t\t\t});\n\t\t});\n\t});\n\n\treturn deferred.promise;\n}\n\nvar documentFragment = document.createDocumentFragment();\nfunction loadImage(src){\n\tvar\tdeferred = Q.defer(),\n\t\timg = new Image();\n\t\n\timg.src = src;\n\n\timg.onload = function(){\n\t\t// This forces FF to set the width/height\n\t\tdocumentFragment.appendChild(img);\n\t\tdeferred.resolve(img);\n\t};\n\n\timg.onerror = deferred.reject.bind(deferred);\n\n\treturn deferred.promise;\n}","'use strict';\n\nvar Q = require('../../bower_components/q/q.js');\n\nwindow.API_CALLBACKS = {};\n\nmodule.exports = (function(){\n\tvar callbackCounter = 0,\n\t\tcallbacks = window.API_CALLBACKS,\n\t\tdefaultTimeout = 10 * 1000;\n\n\treturn function(endpoint, callbackParam, params, timeout){\n\t\tvar callbackId = 'c' + callbackCounter++,\n\t\t\tdeferred = Q.defer(),\n\t\t\tscript = document.createElement('script'),\n\t\t\ttimeoutId;\n\t\t\n\t\tif(typeof callbackParam !== 'string'){\n\t\t\ttimeout = params;\n\t\t\tparams = callbackParam;\n\t\t\tcallbackParam = 'callback';\n\t\t}\n\n\t\ttimeout = timeout || defaultTimeout;\n\t\tparams = params || [];\n\t\tparams.push(callbackParam + '=API_CALLBACKS.' + callbackId);\n\n\t\ttimeoutId = setTimeout(function(){\n\t\t\tdeferred.reject('timeout');\n\t\t}, timeout);\n\t\t\n\t\tcallbacks[callbackId] = function(response){\n\t\t\tclearTimeout(timeoutId);\n\t\t\tdelete callbacks[callbackId];\n\t\t\tdeferred.resolve(response);\n\t\t};\n\n\t\tscript.async = true;\n\t\tscript.src = endpoint + '?' + params.join('&'); \n\t\tdocument.body.appendChild(script);\n\n\t\treturn deferred.promise;\n\t};\n}());","'use strict';\n\n// This one is a bit questionable since it's deprecated, and the TOS for use in\n// collages is unclear.\n\nvar mustache = require('../../bower_components/mustache/mustache.js');\nvar getFromApi = require('./getFromCommonApi.js');\nvar SimpleElement = require('../element/Simple.js');\n\t\nwindow.credits = window.credits || {};\nvar credits = window.credits.googleNews = {};\n\nmodule.exports = function(collage, query){\n\treturn search(query);\n};\n\nvar ARTICLE_TEMPLATE = '' +\n'<div class=\"article-wrapper\">' +\n\t'{{#image}}' +\n\t\t'<a href=\"{{image.contextUrl}}\">' +\n\t\t\t'<img title=\"Image by {{image.publisher}}\" class=\"article-image\" ' + \n\t\t\t'src=\"{{image.src}}\" width=\"{{image.width}}\" height=\"{{image.height}}\"/>' + \n\t\t'</a>' +\n\t'{{/image}}' +\n\t'<a class=\"article-title\" href=\"{{sourceUrl}}\">{{{title}}}</a>' + \n\t'<p class=\"article-attribution\">' +\n\t\t'<span class=\"article-publisher\">{{{publisher}}}</span>' +\n\t\t' – <span class=\"article-date\">{{date}}</span>' +\n\t\t' via {{#gnewsUrl}}<a class=\"article-via\" href=\"{{gnewsUrl}}\">{{/gnewsUrl}}' + \n\t\t'Google News{{#gnewsUrl}}</a>{{/gnewsUrl}}' +\n\t'</p>' +\n\t'<p class=\"article-body\">{{{body}}}</p>' +\n'</div>';\n\nvar documentFragment = document.createDocumentFragment();\n\nvar search = (function(){\n\tvar endpoint = 'https://ajax.googleapis.com/ajax/services/search/news';\n\t//var endpoint = '/ajax/services/search/news';\n\n\treturn function(query){\n\t\tvar params = [\n\t\t\t\t'v=1.0',\n\t\t\t\t'rsz=8',\n\t\t\t\t'q=' + encodeURIComponent(query)\n\t\t\t];\n\t\t\n\t\treturn getFromApi(endpoint, params).then(function(response){\n\t\t\tvar elements = [];\n\t\t\tresponse.responseData.results.forEach(function(item){\n\t\t\t\tcredits[item.publisher] = item.unescapedUrl;\n\n\t\t\t\tvar templateParams = {\n\t\t\t\t\ttitle: item.titleNoFormatting,\n\t\t\t\t\tsourceUrl: item.unescapedUrl,\n\t\t\t\t\tpublisher: item.publisher,\n\t\t\t\t\tdate: (new Date(item.publishedDate)).toLocaleDateString(),\n\t\t\t\t\tgnewsUrl: item.clusterUrl,\n\t\t\t\t\tbody: item.content\n\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\tif(item.image){\n\t\t\t\t\ttemplateParams.image = {\n\t\t\t\t\t\tsrc: item.image.tbUrl,\n\t\t\t\t\t\twidth: item.image.tbWidth,\n\t\t\t\t\t\theight: item.image.tbHeight,\n\t\t\t\t\t\tpublisher: item.image.publisher,\n\t\t\t\t\t\tcontextUrl: item.image.originalContextUrl\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar element = document.createElement('div');\n\t\t\t\telement.className = 'gnews-article';\n\t\t\t\telement.innerHTML = mustache.render(ARTICLE_TEMPLATE, templateParams);\n\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\n\t\t\t\telement.width = element.clientWidth;\n\t\t\t\telement.height = element.clientHeight;\n\n\t\t\t\telements.push(new SimpleElement(element));\n\t\t\t\tdocumentFragment.appendChild(element);\n\t\t\t});\n\n\t\t\treturn elements;\n\t\t});\n\t};\n}());\n\n","'use strict';\n\nvar mustache = require('../../bower_components/mustache/mustache.js');\nvar getFromApi = require('./getFromCommonApi.js');\nvar SimpleElement = require('../element/Simple.js');\n\t\nmodule.exports = function(collage, query){\n\treturn queryActivities(query);\n};\n\nvar ARTICLE_TEMPLATE = '' +\n'<div class=\"article-wrapper\">' +\n\t'<div class=\"post-attribution\">' +\n\t\t'<a href=\"{{authorUrl}}\">' +\n\t\t\t'{{#authorImage}}<img class=\"author-image\" src=\"{{authorImage.src}}\" ' + \n\t\t\t\t'width=\"{{authorImage.width}}\" height=\"{{authorImage.height}}\"/>{{/authorImage}}' +\n\t\t\t'<span class=\"author-name\">{{authorName}}</span>' +\n\t\t'</a>' + \n\t\t'<span class=\"post-date\">on Google Plus – {{date}}</span>' +\n\t'</div>' +\n\t'<p class=\"author-comments\">{{{authorComments}}}</p>' + \n\t'<div class=\"article\">' + \n\t\t'<a href=\"{{articleUrl}}\">' +\n\t\t\t'{{#image}}<img class=\"article-image\" src=\"{{image.src}}\" width=\"{{image.width}}\" ' + \n\t\t\t\t'height=\"{{image.height}}\"/>{{/image}}' + \n\t\t\t'<div class=\"article-attribution\">' +\n\t\t\t\t'<span>{{title}}</span>' + \n\t\t\t'</div>' + \n\t\t'</a>' +\n\t\t'<p class=\"article-body\">{{body}}</p>' +\n\t'</div>' +\n'</div>';\n\nvar documentFragment = document.createDocumentFragment();\n\nvar queryActivities = (function(){\n\tvar endpoint = 'https://www.googleapis.com/plus/v1/activities';\n\n\treturn function(query){\n\t\tvar params = [\n\t\t\t\t'key=AIzaSyAZw0kviWeCOidthcZAYs5oCZ0k8DsOuUk',\n\t\t\t\t'query=' + encodeURIComponent(query)\n\t\t\t];\n\t\t\n\t\treturn getFromApi(endpoint, params).then(function(response){\n\t\t\tvar elements = [];\n\n\t\t\tresponse.items.forEach(function(item){\n\t\t\t\tif(!(item && item.object && item.object.attachments && item.object.attachments.length > 0)) return;\n\t\t\t\tvar article = item.object.attachments[0];\n\t\t\t\tif(article.objectType !== 'article') return;\n\n\t\t\t\tvar actor = item.object.actor || item.actor,\n\t\t\t\t\tauthorComments = item.object.content;\n\t\t\t\tif(authorComments && authorComments.length > 150){\n\t\t\t\t\tauthorComments = authorComments.substr(0, 150) + '…';\n\t\t\t\t}\n\n\t\t\t\tvar templateParams = {\n\t\t\t\t\tauthorName: actor.displayName,\n\t\t\t\t\tauthorUrl: actor.url,\n\t\t\t\t\tauthorId: actor.id,\n\t\t\t\t\tdate: new Date(item.published).toLocaleDateString(),\n\t\t\t\t\tauthorComments: authorComments,\n\t\t\t\t\tarticleUrl: article.url,\n\t\t\t\t\ttitle: article.displayName,\n\t\t\t\t\tbody: article.content\n\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\tif(actor.image){\n\t\t\t\t\ttemplateParams.authorImage = {\n\t\t\t\t\t\tsrc: actor.image.url,\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\theight: 50\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif(article.image){\n\t\t\t\t\ttemplateParams.image = {\n\t\t\t\t\t\tsrc: article.image.url,\n\t\t\t\t\t\twidth: article.image.width,\n\t\t\t\t\t\theight: article.image.height\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar element = document.createElement('div');\n\t\t\t\telement.className = 'gplus-article';\n\t\t\t\telement.innerHTML = mustache.render(ARTICLE_TEMPLATE, templateParams);\n\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\n\t\t\t\telement.width = element.clientWidth;\n\t\t\t\telement.height = element.clientHeight;\n\n\t\t\t\telements.push(new SimpleElement(element));\n\t\t\t\tdocumentFragment.appendChild(element);\n\n\t\t\t});\n\n\t\t\treturn elements;\n\t\t});\n\t};\n}());\n","'use strict';\n\nvar Q = require('../../bower_components/q/q.js'),\n\tIframeElement = require('../element/Iframe.js'),\n\tutils = require('../utils.js');\n\nmodule.exports = function(collage, options){\n\tvar width = options.width || 500,\n\t\theight = options.height || 500;\n\n\tvar iframe = document.createElement('iframe');\n\tiframe.src = options.url;\n\n\tvar element = utils.attachIframeToCollage(collage, iframe, width, height);\n\n\treturn Q.when(new IframeElement(element));\n};\n","'use strict';\n\nvar Q = require('../../bower_components/q/q.js');\nvar SimpleElement = require('../element/Simple.js');\n\nvar documentFragment = document.createDocumentFragment();\n\nmodule.exports = function(collage, src){\n\tvar\tdeferred = Q.defer(),\n\t\timg = new Image();\n\t\n\timg.src = src;\n\n\timg.onload = function(){\n\t\t// This forces FF to set the width/height\n\t\tdocumentFragment.appendChild(img);\n\t\tdeferred.resolve(new SimpleElement(img));\n\t};\n\n\timg.onerror = deferred.reject.bind(deferred);\n\n\treturn deferred.promise;\n};","'use strict';\n\nexports.flickr = require('./flickr.js');\nexports.image = require('./image.js');\nexports.youtube = require('./youtube.js');\nexports.googlePlus = require('./googlePlus.js');\nexports.googleNews = require('./googleNews.js');\nexports.nyTimes = require('./nyTimes.js');\nexports.twitter = require('./twitter.js');\nexports.facebook = require('./facebook.js');\nexports.iframe = require('./iframe.js');\nexports.reddit = require('./reddit.js');","'use strict';\n\n/* jshint camelcase:false */\n\nvar Q = require('../../bower_components/q/q.js'),\n\tSimpleElement = require('../element/Simple.js'),\n\tmustache = require('../../bower_components/mustache/mustache.js');\n\nwindow.credits = window.credits || {};\nvar credits = window.credits.nyTimes = {};\n\nvar ARTICLE_TEMPLATE = '' +\n\t\t'<h2><a href=\"{{url}}\">{{{title}}}</a></h2>' +\n\t\t'{{#image}}<img class=\"article-image\" src=\"{{image.src}}\" ' + \n\t\t\t'width=\"{{image.width}}\" height=\"{{image.height}}\"/>{{/image}}' + \n\t\t'<div class=\"article-attribution\">' +\n\t\t\t'<img class=\"nyt-brand\" ' + \n\t\t\t\t'src=\"http://graphics8.nytimes.com/packages/images/developer/' + \n\t\t\t\t'logos/poweredby_nytimes_30a.png\"/>' +\n\t\t\t'<span class=\"byline\">{{{byline}}}</span>' + \n\t\t\t'<span class=\"date\">{{date}}</span>' + \n\t\t'</div>' +\n\t\t'<p>{{{body}}}</p>';\n\nvar documentFragment = document.createDocumentFragment();\n\nvar endpoint = '/svc/search/v1/article';\n//var endpoint = \"http://api.nytimes.com/svc/search/v1/article\";\n\nmodule.exports = function(collage, options){\n\treturn query(options);\n};\n\nfunction query(options){\n\tfunction parseResponse(data){\n\t\treturn data.results.map(function(data){\n\t\t\tvar element = document.createElement('div');\n\t\t\telement.className = 'nytimes-article';\n\n\t\t\tif(data.byline){\n\t\t\t\tcredits[data.byline.replace('By ', '')] = data.url;\n\t\t\t}\n\t\t\t\n\t\t\tvar templateData = {\n\t\t\t\ttitle: data.title,\n\t\t\t\tbyline: data.byline,\n\t\t\t\tdate: (new Date(data.publication_year, data.publication_month, data.publication_day)).toLocaleDateString(),\n\t\t\t\tbody: data.body,\n\t\t\t\turl: data.url\n\t\t\t};\n\n\t\t\tif(data.small_image_url){\n\t\t\t\ttemplateData.image = {\n\t\t\t\t\tsrc: data.small_image_url.replace(/thumbStandard.*\\./, 'hpMedium.'),\n\t\t\t\t\theight: 253,\n\t\t\t\t\twidth: 337\n\t\t\t\t};\n\t\t\t}\n\n\t\t\telement.innerHTML = mustache.render(ARTICLE_TEMPLATE, templateData);\n\t\t\tdocument.body.appendChild(element);\n\n\t\t\telement.width = element.clientWidth;\n\t\t\telement.height = element.clientHeight;\n\n\t\t\tdocumentFragment.appendChild(element);\n\t\t\treturn new SimpleElement(element);\n\t\t});\n\t}\n\n\tif(options.data){\n\t\treturn Q.when(parseResponse(options.data));\n\t} else {\n\n\t}\n\treturn load(options).then(function(response){\n\t\treturn parseResponse(response);\n\t});\n}\n\nfunction load(options){\n\tvar deferred = Q.defer();\n\n\tvar params = [\n\t\t'format=json',\n\t\t'fields=publication_year,publication_month,publication_day,body,date,' + \n\t\t\t'title,url,byline,small_image_url,small_image_height,small_image_width',\n\t\t'api-key=af04c123c8988a12245668f5b5fa4f4c:8:67325739',\n\t\t'query=' + options.query\n\t];\n\t\n\tvar request = new XMLHttpRequest();\n\n\trequest.onload = function(){\n\t\tdeferred.resolve(JSON.parse(this.responseText));\n\t};\n\n\trequest.onerror = function(){\n\t\tdeferred.reject();\n\t};\n\n\trequest.open('get', endpoint + '?' + params.join('&'), true);\n\trequest.send();\n\n\treturn deferred.promise;\n}\n","'use strict';\n\n/* jshint camelcase:false */\n\nvar Q = require('../../bower_components/q/q.js'),\n\tSimpleElement = require('../element/Simple.js'),\n\tIframeElement = require('../element/Iframe.js'),\n\tutils = require('../utils.js'),\n\tgetFromApi = require('./getFromCommonApi.js');\n\nwindow.credits = window.credits || {};\nvar credits = window.credits.reddit = {};\n\nvar endpoint = 'http://www.reddit.com/r/all/search.json';\n//var endpoint = '/r/all/search.json';\n\nmodule.exports = function(collage, options){\n\tif(options.type === 'embed'){\n\t\treturn getEmbed(collage, options);\n\t} else {\n\t\treturn getPhotos(collage, options);\n\t}\n};\n\nfunction getEmbed(collage, options){\n\tutils.extend(options, defaults);\n\tvar params = [\n\t\t'limit=' + options.limit,\n\t\t'restrict_sr=' + options.restrict_sr, \n\t\t'sort=' + options.sort,\n\t\t't=' + options.time,\n\t\t'q=' + options.query\n\t];\n\n\tvar iframe = document.createElement('IFRAME'),\n\t\tiframeDoc,\n\t\tiframeContent;\n\n\tvar element = utils.attachIframeToCollage(collage, iframe, options.width, options.height);\n\n\tiframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;\n\tiframeContent = '<html><head><title></title></head><body>';\n\tiframeContent += '<script type=\"text/javascript\" src=\"http://www.reddit.com/r/' + \n\t\toptions.subreddit + '/search.embed?' + params.join('&').replace(' ', '%20') + '\"></script>';\n\tiframeContent += '</body></html>';\n\t\n\tiframeDoc.open();\n\tiframeDoc.write(iframeContent);\n\tiframeDoc.close();\n\t\n\treturn Q.when(new IframeElement(element));\n}\n\nvar defaults = {\n\tlimit: '20',\n\tsubreddit: 'all',\n\trestrict_sr: 'false',\n\tsort: 'top',\n\ttime: 'all',\n\tnsfw: 'false',\n\tminComments: 0,\n\twidth: 500,\n\theight:600,\n\tminScore: 0\n};\n\nfunction getPhotos(collage, options){\n\tvar deferred = Q.defer(),\n\t\tparams;\n\t\n\tif(typeof options === 'string') options = {tags: options};\n\tutils.extend(options, defaults);\n\n\tparams = [\n\t\t'limit=' + options.limit,\n\t\t'restrict_sr=' + options.restrict_sr, \n\t\t'sort=' + options.sort,\n\t\t't=' + options.time,\n\t\t'q=' + options.query\n\t];\n\t\n\tgetFromApi(endpoint, 'jsonp', params).then(function(response){\n\t\tvar elements = [],\n\t\t\tphotos = response.data && response.data.children || [],\n\t\t\twaiting;\n\n\t\tphotos = photos.filter(function(item){\n\t\t\titem = item.data;\n\n\t\t\tif(\titem.score < options.minScore || \n\t\t\t\titem.num_comments < options.minComments ||\n\t\t\t\t(!~item.url.indexOf('.jpg'))){\n\t\t\t\treturn false;\t\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\twaiting = photos.length;\n\t\tphotos.forEach(function(item){\n\t\t\titem = item.data;\n\t\t\t\n\t\t\tcredits[item.author] = 'http://www.reddit.com' + item.permalink;\n\t\t\t\n\t\t\tloadImage(item.url).then(function(element){\n\t\t\t\tvar anchor = document.createElement('a');\n\t\t\t\tanchor.href = 'http://www.reddit.com' + item.permalink;\n\t\t\t\tanchor.width = element.width;\n\t\t\t\tanchor.height = element.height;\n\t\t\t\tanchor.target = '_blank';\n\t\t\t\tanchor.style.display = 'block';\n\t\t\t\tanchor.appendChild(element);\n\t\t\t\t\n\t\t\t\telements.push(SimpleElement.create(anchor));\n\n\t\t\t\tif(--waiting === 0) deferred.resolve(elements);\n\t\t\t}, function(){\n\t\t\t\tif(--waiting === 0) deferred.resolve(elements);\n\t\t\t});\n\t\t});\n\t});\n\n\treturn deferred.promise;\n}\n\nvar documentFragment = document.createDocumentFragment();\nfunction loadImage(src){\n\tvar\tdeferred = Q.defer(),\n\t\timg = new Image();\n\t\n\timg.src = src;\n\n\timg.onload = function(){\n\t\t// This forces FF to set the width/height\n\t\tdocumentFragment.appendChild(img);\n\t\tdeferred.resolve(img);\n\t};\n\n\timg.onerror = deferred.reject.bind(deferred);\n\n\treturn deferred.promise;\n}","'use strict';\n/* globals twttr */\n/* jshint camelcase:false */\n\n// This uses an undocumented twitter api (twttr.widget.createTweet) so it might break\n\nvar Q = require('../../bower_components/q/q.js'),\n\tgetFromApi = require('./getFromCommonApi.js'),\t\n\tIframeElement = require('../element/Iframe.js');\n\nvar TIMEOUT = 1000 * 10;\n\nwindow.credits = window.credits || {};\nvar credits = window.credits.twitter = {};\n\n// options should have container and query\nmodule.exports = function(collage, options){\n\tvar container = collage.element;\n\n\tif(options.query){\n\t\treturn queryTweets(options.query).then(function(tweetIds){\n\t\t\treturn loadTweets(tweetIds, container, collage);\n\t\t});\t\n\t} else if(options.ids) {\n\t\treturn loadTweets(options.ids, container, collage);\n\t} else if(options.id){\n\t\treturn loadTweets([options.id], container, collage).then(function(elements){\n\t\t\tif(elements && elements.length) return elements[0];\n\t\t});\n\t}\n};\n\nvar loadTweets = (function(){\n\treturn function(ids, container){\n\t\tif(!Array.isArray(ids) || !container) return;\n\n\t\tvar index = ids.length,\n\t\t\tdeferred = Q.defer(),\n\t\t\telements = [],\n\t\t\ttimedOut = false,\n\t\t\twaitingForResize = [],\n\t\t\ttimeout = setTimeout(function(){\n\t\t\t\ttimedOut = true;\n\t\t\t\tclearInterval(heightChecker);\n\t\t\t\tdeferred.resolve(elements);\n\t\t\t}, TIMEOUT);\n\n\t\tfunction heightCheck(){\n\t\t\tvar index = waitingForResize.length,\n\t\t\t\telement;\n\n\t\t\twhile(index--){\n\t\t\t\telement = waitingForResize[index];\n\t\t\t\tif(element.height !== '0' && element.width !== '0'){\n\t\t\t\t\telements.push(IframeElement.create(element));\n\n\t\t\t\t\tif(elements.length === ids.length){\n\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\tclearInterval(heightChecker);\n\t\t\t\t\t\tdeferred.resolve(elements);\n\t\t\t\t\t}\n\n\t\t\t\t\twaitingForResize.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar heightChecker = setInterval(heightCheck, 250);\n\n\t\tfunction handleElement(element){\n\t\t\tif(timedOut) return;\n\n\t\t\tvar iframeWindow = 'contentWindow' in element? element.contentWindow : element.contentDocument.defaultView;\n\t\t\t\n\t\t\tvar onMouseMoveCallback = iframeWindow.onmousemove;\n\t\t\t\n\t\t\t// Iframes capture all events, this allows us to bubble the event\n\t\t\t// up to this window's scope\n\t\t\tiframeWindow.onmousemove = function(e){\n\t\t\t\tif(onMouseMoveCallback) onMouseMoveCallback(e);\n\t\t\t\tvar evt = document.createEvent('MouseEvents'),\n\t\t\t\t\tboundingClientRect = element.getBoundingClientRect();\n\n\t\t\t\tevt.initMouseEvent(\t'mousemove', \n\t\t\t\t\t\t\t\t\ttrue, \n\t\t\t\t\t\t\t\t\tfalse, \n\t\t\t\t\t\t\t\t\twindow,\n\t\t\t\t\t\t\t\t\te.detail,\n\t\t\t\t\t\t\t\t\te.screenX,\n\t\t\t\t\t\t\t\t\te.screenY, \n\t\t\t\t\t\t\t\t\te.clientX + boundingClientRect.left, \n\t\t\t\t\t\t\t\t\te.clientY + boundingClientRect.top, \n\t\t\t\t\t\t\t\t\te.ctrlKey, \n\t\t\t\t\t\t\t\t\te.altKey,\n\t\t\t\t\t\t\t\t\te.shiftKey, \n\t\t\t\t\t\t\t\t\te.metaKey,\n\t\t\t\t\t\t\t\t\te.button, \n\t\t\t\t\t\t\t\t\tnull);\n\t\t\t\t\n\t\t\t\telement.dispatchEvent(evt);\n\t\t\t};\n\n\t\t\twaitingForResize.push(element);\n\t\t\telement.style.opacity = 0;\n\t\t}\n\n\t\twhile(index--){\n\t\t\ttwttr.widgets.createTweet(ids[index], container, handleElement);\n\t\t}\n\n\t\treturn deferred.promise;\n\t};\n}());\n\nvar queryTweets = (function(){\n\tvar endpoint = 'http://search.twitter.com/search.json';\n\t//var endpoint = '/search.json';\n\n\treturn function(query){\n\t\treturn getFromApi(endpoint, [\n\t\t\t'format=json',\n\t\t\t'q=' + encodeURIComponent(query)\n\t\t]).then(function(response){\n\t\t\tvar tweetIds = [],\n\t\t\t\tdupeCheck = [];\n\n\t\t\tresponse.results.forEach(function(item){\n\t\t\t\t// Skip retweets\n\t\t\t\tif(~dupeCheck.indexOf(item.text)){\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tdupeCheck.push(item.text);\n\t\t\t\t}\n\n\t\t\t\t// Skip matches on username\n\t\t\t\tif(~item.from_user.toLowerCase().indexOf(query.toLowerCase())){\n\t\t\t\t\treturn;\t\n\t\t\t\t}\n\n\t\t\t\tcredits[item.from_user] = 'http://twitter.com/' + item.from_user;\n\n\t\t\t\ttweetIds.push(item.id_str);\n\t\t\t});\n\n\t\t\treturn tweetIds;\n\t\t});\n\t};\n}());","'use strict';\n/* globals YT */\n\nvar Q = require('../../bower_components/q/q.js');\nvar VideoElement = require('../element/Video.js');\nvar getFromApi = require('./getFromCommonApi.js');\nvar utils = require('../utils.js');\nvar TIMEOUT = 10 * 1000;\n\nwindow.credits = window.credits || {};\nvar credits = window.credits.youtube = {};\n\nmodule.exports = function(collage, options){\n\tif(options.query){\n\t\treturn queryVideos(options).then(function(videoIds){\n\t\t\toptions.videoIds = videoIds;\n\t\t\treturn loadVideos(collage, options);\n\t\t});\n\t}\n\n\tif(options.videoId){\n\t\toptions.videoIds = [options.videoId];\n\n\t\treturn loadVideos(collage, options).then(function(elements){\n\t\t\treturn elements[0];\n\t\t});\n\t} else if(options.videoIds){\n\t\treturn loadVideos(collage, options);\t\n\t}\n};\n\nvar defaults = {\n\tduration: 'short',\n\tkey: 'AIzaSyAZw0kviWeCOidthcZAYs5oCZ0k8DsOuUk'\n};\n\nvar queryVideos = (function(){\n\tvar endpoint = 'https://www.googleapis.com/youtube/v3/search';\n\t//var endpoint = 'https://d3ggoqbhpexke2.cloudfront.net/youtube/v3/search';\n\n\treturn function(options){\n\t\tutils.extend(options, defaults);\n\n\t\tvar params = [\n\t\t\t\t'part=id,snippet',\n\t\t\t\t'videoDuration=' + options.duration,\n\t\t\t\t'type=video',\n\t\t\t\t'videoEmbeddable=true',\n\t\t\t\t'videoSyndicated=true',\n\t\t\t\t'key=' + options.key,\n\t\t\t\t'q=' + encodeURIComponent(options.query)\n\t\t\t];\n\t\t\n\t\treturn getFromApi(endpoint, params).then(function(response){\n\t\t\tvar videoIds = [];\n\n\t\t\tresponse.items.forEach(function(item){\n\t\t\t\tcredits[item.snippet.channelTitle] = 'http://youtube.com/' + item.snippet.channelTitle;\n\t\t\t\tvideoIds.push(item.id.videoId);\n\t\t\t});\n\n\t\t\treturn videoIds;\n\t\t});\n\t};\n}());\n\nvar loadVideos = (function(){\n\treturn function(collage, options){\n\t\tif(!Array.isArray(options.videoIds)) return;\n\t\t\n\t\tvar index = options.videoIds.length,\n\t\t\tdeferred = Q.defer(),\n\t\t\telements = [],\n\t\t\tvideoOptions,\n\t\t\ttimedOut = false,\n\t\t\ttimeout = setTimeout(function(){\n\t\t\t\ttimedOut = true;\n\t\t\t\tdeferred.resolve(elements);\n\t\t\t}, TIMEOUT);\n\n\t\toptions.callback = function(element){\n\t\t\tif(timedOut || !element) return;\n\t\t\telements.push(element);\n\n\t\t\tif(elements.length === options.videoIds.length){\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tdeferred.resolve(elements);\n\t\t\t}\n\t\t};\n\n\t\twhile(index--){\n\t\t\tvideoOptions = Object.create(options);\n\t\t\tvideoOptions.videoId = options.videoIds[index];\n\t\t\tloadVideo(collage, videoOptions);\n\t\t}\n\n\t\treturn deferred.promise;\n\t};\n}());\n\nvar isiOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );\n\nvar loadVideo = (function(){\n\tvar playerIdCounter = 0;\n\treturn function(collage, options){\n\t\tvar videoId = options.videoId,\n\t\t\twidth = options.width || 1060,\n\t\t\theight = options.height || 650;\n\n\t\tvar playerId = 'player' + (playerIdCounter++);\n\n\t\tvar element = document.createElement('div');\n\t\telement.width = width;\n\t\telement.height = height;\n\t\telement.className = 'youtube-video';\n\t\t\n\t\tif(isiOS) element.className += ' hide-video-mask';\n\n\t\telement.innerHTML = '<div id=\"' + playerId + '\"></div><div class=\"video-mask\"></div>';\n\t\tcollage.element.appendChild(element);\n\t\t\n\t\tvar videoElement;\n\n\t\tnew YT.Player(playerId, {\n\t\t\theight: height,\n\t\t\twidth: width,\n\t\t\tplayerVars: { \n\t\t\t\tcontrols: 0, \n\t\t\t\thtml5: 1,\n\t\t\t\tstart: (options.startTime || 0)\n\t\t\t},\n\t\t\tvideoId: videoId,\n\t\t\tevents: {\n\t\t\t\tonReady: function(e){\n\t\t\t\t\tvar playerObj = e.target;\n\t\t\t\t\tvideoElement = VideoElement.create(element, playerObj, {\n\t\t\t\t\t\tcontinuousPlay: options.continuousPlay,\n\t\t\t\t\t\tautoplay: options.autoplay,\n\t\t\t\t\t\tloop: options.loop\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(isiOS){\n\t\t\t\t\t\tvideoElement.on('playing', function(){\n\t\t\t\t\t\t\telement.className = element.className.replace(' hide-video-mask', '');\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvideoElement.on('paused', function(){\n\t\t\t\t\t\t\telement.className += ' hide-video-mask';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tplayerObj.pauseVideo();\n\t\t\t\t\tif(options.continuousPlay){\n\t\t\t\t\t\tplayerObj.unMute();\n\t\t\t\t\t\tplayerObj.setVolume(100);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(options.mute){\n\t\t\t\t\t\tplayerObj.mute();\n\t\t\t\t\t\tplayerObj.setVolume(0);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(options.callback) options.callback(videoElement);\n\t\t\t\t},\n\t\t\t\tonError: function(){\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}());\n","'use strict';\n\nexports.extend = function(destination){\n\tvar sources = arguments.length,\n\t\tindex = 1,\n\t\tsource,\n\t\tkey;\n\n\tfor(; index < sources; index++){\n\t\tsource = arguments[index];\n\t\tfor(key in source){\n\t\t\tif(source.hasOwnProperty(key) && !(key in destination)){\n\t\t\t\tdestination[key] = source[key];\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.attachIframeToCollage = function(collage, iframe, width, height){\n\tvar container = document.createElement('div');\n\tcontainer.className='iframe-container';\n\t\n\tvar overflowWrapper = document.createElement('div');\n\toverflowWrapper.className = 'iframe-overflow-wrapper';\n\toverflowWrapper.style.width = width + 'px';\n\toverflowWrapper.style.height = height + 'px';\n\tcontainer.appendChild(overflowWrapper);\n\n\tiframe.style.width = width + 'px';\n\tiframe.style.height = height + 'px';\n\toverflowWrapper.appendChild(iframe);\n\n\tvar mask = document.createElement('div');\n\tmask.className = 'iframe-mask';\n\tcontainer.appendChild(mask);\n\n\tvar hasFocus = false;\n\tmask.addEventListener('click', function(){\n\t\thasFocus = true;\n\t\tcontainer.className += ' in-focus';\n\t\tcollage.pause(0.4);\n\t});\n\n\tmask.addEventListener('mouseover', function(){\n\t\tif(!hasFocus) return;\n\t\thasFocus = false;\n\t\tcontainer.className = container.className.replace(' in-focus', '');\n\t\tcollage.resume(0.4);\n\t});\n\n\tcollage.element.appendChild(container);\n\t\n\treturn container;\n};\n\n\nexports.requestAnimationFrame = window.requestAnimationFrame || \n\t\t\t\t\t\t\t\twindow.mozRequestAnimationFrame ||\n \twindow.webkitRequestAnimationFrame || \n \twindow.msRequestAnimationFrame || \n \tfunction(cb){return setTimeout(cb, 15);};\n\nexports.cancelAnimationFrame = \twindow.cancelAnimationFrame || \n\t\t\t\t\t\t\t\twindow.mozCancelAnimationFrame ||\n \twindow.webkitCancelAnimationFrame || \n \twindow.msCancelAnimationFrame || \n \tfunction(timeout){return clearTimeout(timeout);};\n\nexports.requestFullscreen = document.documentElement.requestFullscreen ||\n\t\t\t\t\t\t\tdocument.documentElement.mozRequestFullScreen ||\n\t\t\t\t\t\t\tdocument.documentElement.webkitRequestFullscreen ||\n\t\t\t\t\t\t\tfunction(){};\n\nvar bodyStyle = document.body.style;\t\nexports.transitionAttribute =\t(bodyStyle.msTransition !== void 0) && 'msTransition' ||\n\t\t\t\t\t\t\t\t(bodyStyle.webkitTransition !== void 0) && 'webkitTransition' ||\n\t\t\t\t\t\t\t\t(bodyStyle.MozTransition !== void 0) && 'MozTransition' || \n\t\t\t\t\t\t\t\t(bodyStyle.transition !== void 0) && 'transition';\n"],"sourceRoot":"/source/"}