{"version":3,"file":"54-00b046e3187194c067e6.js","mappings":"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","sources":["webpack://example/../node_modules/autocomplete.js/index.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/css.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/dataset.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/dropdown.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/event_bus.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/event_emitter.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/html.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/input.js","webpack://example/../node_modules/autocomplete.js/src/autocomplete/typeahead.js","webpack://example/../node_modules/autocomplete.js/src/common/dom.js","webpack://example/../node_modules/autocomplete.js/src/common/parseAlgoliaClientVersion.js","webpack://example/../node_modules/autocomplete.js/src/common/utils.js","webpack://example/../node_modules/autocomplete.js/src/sources/hits.js","webpack://example/../node_modules/autocomplete.js/src/sources/index.js","webpack://example/../node_modules/autocomplete.js/src/sources/popularIn.js","webpack://example/../node_modules/autocomplete.js/src/standalone/index.js","webpack://example/../node_modules/autocomplete.js/version.js","webpack://example/../node_modules/autocomplete.js/zepto.js","webpack://example/../node_modules/hogan.js/lib/compiler.js","webpack://example/../node_modules/hogan.js/lib/hogan.js","webpack://example/../node_modules/hogan.js/lib/template.js","webpack://example/../node_modules/immediate/lib/index.js","webpack://example/../node_modules/immediate/lib/messageChannel.js","webpack://example/../node_modules/immediate/lib/mutation.js","webpack://example/../node_modules/immediate/lib/queueMicrotask.js","webpack://example/../node_modules/immediate/lib/stateChange.js","webpack://example/../node_modules/immediate/lib/timeout.js","webpack://example/../node_modules/rsuite/esm/FormGroup/FormGroup.js","webpack://example/../node_modules/rsuite/esm/InputGroup/InputGroupAddon.js","webpack://example/../node_modules/rsuite/esm/InputGroup/InputGroupButton.js","webpack://example/../node_modules/rsuite/esm/InputGroup/InputGroup.js","webpack://example/../node_modules/rsuite/esm/Plaintext/Plaintext.js","webpack://example/../node_modules/rsuite/esm/Plaintext/index.js","webpack://example/../node_modules/rsuite/esm/Input/Input.js","webpack://example/../node_modules/rsuite/esm/Input/index.js","webpack://example/../gatsby-theme-academic/src/components/SearchBar/lib/lunar-search.js","webpack://example/../gatsby-theme-academic/src/components/SearchBar/lib/templates.js","webpack://example/../gatsby-theme-academic/src/components/SearchBar/lib/utils.js","webpack://example/../gatsby-theme-academic/src/components/SearchBar/lib/DocSearch.js","webpack://example/../gatsby-theme-academic/src/components/SearchBar/index.jsx"],"sourcesContent":["'use strict';\n\nmodule.exports = require('./src/standalone/');","'use strict';\n\nvar _ = require('../common/utils.js');\n\nvar css = {\n wrapper: {\n position: 'relative',\n display: 'inline-block'\n },\n hint: {\n position: 'absolute',\n top: '0',\n left: '0',\n borderColor: 'transparent',\n boxShadow: 'none',\n // #741: fix hint opacity issue on iOS\n opacity: '1'\n },\n input: {\n position: 'relative',\n verticalAlign: 'top',\n backgroundColor: 'transparent'\n },\n inputWithNoHint: {\n position: 'relative',\n verticalAlign: 'top'\n },\n dropdown: {\n position: 'absolute',\n top: '100%',\n left: '0',\n zIndex: '100',\n display: 'none'\n },\n suggestions: {\n display: 'block'\n },\n suggestion: {\n whiteSpace: 'nowrap',\n cursor: 'pointer'\n },\n suggestionChild: {\n whiteSpace: 'normal'\n },\n ltr: {\n left: '0',\n right: 'auto'\n },\n rtl: {\n left: 'auto',\n right: '0'\n },\n defaultClasses: {\n root: 'algolia-autocomplete',\n prefix: 'aa',\n noPrefix: false,\n dropdownMenu: 'dropdown-menu',\n input: 'input',\n hint: 'hint',\n suggestions: 'suggestions',\n suggestion: 'suggestion',\n cursor: 'cursor',\n dataset: 'dataset',\n empty: 'empty'\n },\n // will be merged with the default ones if appendTo is used\n appendTo: {\n wrapper: {\n position: 'absolute',\n zIndex: '100',\n display: 'none'\n },\n input: {},\n inputWithNoHint: {},\n dropdown: {\n display: 'block'\n }\n }\n}; // ie specific styling\n\nif (_.isMsie()) {\n // ie6-8 (and 9?) doesn't fire hover and click events for elements with\n // transparent backgrounds, for a workaround, use 1x1 transparent gif\n _.mixin(css.input, {\n backgroundImage: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)'\n });\n} // ie7 and under specific styling\n\n\nif (_.isMsie() && _.isMsie() <= 7) {\n // if someone can tell me why this is necessary to align\n // the hint with the query in ie7, i'll send you $5 - @JakeHarding\n _.mixin(css.input, {\n marginTop: '-1px'\n });\n}\n\nmodule.exports = css;","'use strict';\n\nvar datasetKey = 'aaDataset';\nvar valueKey = 'aaValue';\nvar datumKey = 'aaDatum';\n\nvar _ = require('../common/utils.js');\n\nvar DOM = require('../common/dom.js');\n\nvar html = require('./html.js');\n\nvar css = require('./css.js');\n\nvar EventEmitter = require('./event_emitter.js'); // constructor\n// -----------\n\n\nfunction Dataset(o) {\n o = o || {};\n o.templates = o.templates || {};\n\n if (!o.source) {\n _.error('missing source');\n }\n\n if (o.name && !isValidName(o.name)) {\n _.error('invalid dataset name: ' + o.name);\n } // tracks the last query the dataset was updated for\n\n\n this.query = null;\n this._isEmpty = true;\n this.highlight = !!o.highlight;\n this.name = typeof o.name === 'undefined' || o.name === null ? _.getUniqueId() : o.name;\n this.source = o.source;\n this.displayFn = getDisplayFn(o.display || o.displayKey);\n this.debounce = o.debounce;\n this.cache = o.cache !== false;\n this.templates = getTemplates(o.templates, this.displayFn);\n this.css = _.mixin({}, css, o.appendTo ? css.appendTo : {});\n this.cssClasses = o.cssClasses = _.mixin({}, css.defaultClasses, o.cssClasses || {});\n this.cssClasses.prefix = o.cssClasses.formattedPrefix || _.formatPrefix(this.cssClasses.prefix, this.cssClasses.noPrefix);\n\n var clazz = _.className(this.cssClasses.prefix, this.cssClasses.dataset);\n\n this.$el = o.$menu && o.$menu.find(clazz + '-' + this.name).length > 0 ? DOM.element(o.$menu.find(clazz + '-' + this.name)[0]) : DOM.element(html.dataset.replace('%CLASS%', this.name).replace('%PREFIX%', this.cssClasses.prefix).replace('%DATASET%', this.cssClasses.dataset));\n this.$menu = o.$menu;\n this.clearCachedSuggestions();\n} // static methods\n// --------------\n\n\nDataset.extractDatasetName = function extractDatasetName(el) {\n return DOM.element(el).data(datasetKey);\n};\n\nDataset.extractValue = function extractValue(el) {\n return DOM.element(el).data(valueKey);\n};\n\nDataset.extractDatum = function extractDatum(el) {\n var datum = DOM.element(el).data(datumKey);\n\n if (typeof datum === 'string') {\n // Zepto has an automatic deserialization of the\n // JSON encoded data attribute\n datum = JSON.parse(datum);\n }\n\n return datum;\n}; // instance methods\n// ----------------\n\n\n_.mixin(Dataset.prototype, EventEmitter, {\n // ### private\n _render: function render(query, suggestions) {\n if (!this.$el) {\n return;\n }\n\n var that = this;\n var hasSuggestions;\n var renderArgs = [].slice.call(arguments, 2);\n this.$el.empty();\n hasSuggestions = suggestions && suggestions.length;\n this._isEmpty = !hasSuggestions;\n\n if (!hasSuggestions && this.templates.empty) {\n this.$el.html(getEmptyHtml.apply(this, renderArgs)).prepend(that.templates.header ? getHeaderHtml.apply(this, renderArgs) : null).append(that.templates.footer ? getFooterHtml.apply(this, renderArgs) : null);\n } else if (hasSuggestions) {\n this.$el.html(getSuggestionsHtml.apply(this, renderArgs)).prepend(that.templates.header ? getHeaderHtml.apply(this, renderArgs) : null).append(that.templates.footer ? getFooterHtml.apply(this, renderArgs) : null);\n } else if (suggestions && !Array.isArray(suggestions)) {\n throw new TypeError('suggestions must be an array');\n }\n\n if (this.$menu) {\n this.$menu.addClass(this.cssClasses.prefix + (hasSuggestions ? 'with' : 'without') + '-' + this.name).removeClass(this.cssClasses.prefix + (hasSuggestions ? 'without' : 'with') + '-' + this.name);\n }\n\n this.trigger('rendered', query);\n\n function getEmptyHtml() {\n var args = [].slice.call(arguments, 0);\n args = [{\n query: query,\n isEmpty: true\n }].concat(args);\n return that.templates.empty.apply(this, args);\n }\n\n function getSuggestionsHtml() {\n var args = [].slice.call(arguments, 0);\n var $suggestions;\n var nodes;\n var self = this;\n var suggestionsHtml = html.suggestions.replace('%PREFIX%', this.cssClasses.prefix).replace('%SUGGESTIONS%', this.cssClasses.suggestions);\n $suggestions = DOM.element(suggestionsHtml).css(this.css.suggestions); // jQuery#append doesn't support arrays as the first argument\n // until version 1.8, see http://bugs.jquery.com/ticket/11231\n\n nodes = _.map(suggestions, getSuggestionNode);\n $suggestions.append.apply($suggestions, nodes);\n return $suggestions;\n\n function getSuggestionNode(suggestion) {\n var $el;\n var suggestionHtml = html.suggestion.replace('%PREFIX%', self.cssClasses.prefix).replace('%SUGGESTION%', self.cssClasses.suggestion);\n $el = DOM.element(suggestionHtml).attr({\n role: 'option',\n id: ['option', Math.floor(Math.random() * 100000000)].join('-')\n }).append(that.templates.suggestion.apply(this, [suggestion].concat(args)));\n $el.data(datasetKey, that.name);\n $el.data(valueKey, that.displayFn(suggestion) || undefined); // this led to undefined return value\n\n $el.data(datumKey, JSON.stringify(suggestion));\n $el.children().each(function () {\n DOM.element(this).css(self.css.suggestionChild);\n });\n return $el;\n }\n }\n\n function getHeaderHtml() {\n var args = [].slice.call(arguments, 0);\n args = [{\n query: query,\n isEmpty: !hasSuggestions\n }].concat(args);\n return that.templates.header.apply(this, args);\n }\n\n function getFooterHtml() {\n var args = [].slice.call(arguments, 0);\n args = [{\n query: query,\n isEmpty: !hasSuggestions\n }].concat(args);\n return that.templates.footer.apply(this, args);\n }\n },\n // ### public\n getRoot: function getRoot() {\n return this.$el;\n },\n update: function update(query) {\n function handleSuggestions(suggestions) {\n // if the update has been canceled or if the query has changed\n // do not render the suggestions as they've become outdated\n if (!this.canceled && query === this.query) {\n // concat all the other arguments that could have been passed\n // to the render function, and forward them to _render\n var extraArgs = [].slice.call(arguments, 1);\n this.cacheSuggestions(query, suggestions, extraArgs);\n\n this._render.apply(this, [query, suggestions].concat(extraArgs));\n }\n }\n\n this.query = query;\n this.canceled = false;\n\n if (this.shouldFetchFromCache(query)) {\n handleSuggestions.apply(this, [this.cachedSuggestions].concat(this.cachedRenderExtraArgs));\n } else {\n var that = this;\n\n var execSource = function execSource() {\n // When the call is debounced the condition avoid to do a useless\n // request with the last character when the input has been cleared\n if (!that.canceled) {\n that.source(query, handleSuggestions.bind(that));\n }\n };\n\n if (this.debounce) {\n var later = function later() {\n that.debounceTimeout = null;\n execSource();\n };\n\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = setTimeout(later, this.debounce);\n } else {\n execSource();\n }\n }\n },\n cacheSuggestions: function cacheSuggestions(query, suggestions, extraArgs) {\n this.cachedQuery = query;\n this.cachedSuggestions = suggestions;\n this.cachedRenderExtraArgs = extraArgs;\n },\n shouldFetchFromCache: function shouldFetchFromCache(query) {\n return this.cache && this.cachedQuery === query && this.cachedSuggestions && this.cachedSuggestions.length;\n },\n clearCachedSuggestions: function clearCachedSuggestions() {\n delete this.cachedQuery;\n delete this.cachedSuggestions;\n delete this.cachedRenderExtraArgs;\n },\n cancel: function cancel() {\n this.canceled = true;\n },\n clear: function clear() {\n if (this.$el) {\n this.cancel();\n this.$el.empty();\n this.trigger('rendered', '');\n }\n },\n isEmpty: function isEmpty() {\n return this._isEmpty;\n },\n destroy: function destroy() {\n this.clearCachedSuggestions();\n this.$el = null;\n }\n}); // helper functions\n// ----------------\n\n\nfunction getDisplayFn(display) {\n display = display || 'value';\n return _.isFunction(display) ? display : displayFn;\n\n function displayFn(obj) {\n return obj[display];\n }\n}\n\nfunction getTemplates(templates, displayFn) {\n return {\n empty: templates.empty && _.templatify(templates.empty),\n header: templates.header && _.templatify(templates.header),\n footer: templates.footer && _.templatify(templates.footer),\n suggestion: templates.suggestion || suggestionTemplate\n };\n\n function suggestionTemplate(context) {\n return '

' + displayFn(context) + '

';\n }\n}\n\nfunction isValidName(str) {\n // dashes, underscores, letters, and numbers\n return /^[_a-zA-Z0-9-]+$/.test(str);\n}\n\nmodule.exports = Dataset;","'use strict';\n\nvar _ = require('../common/utils.js');\n\nvar DOM = require('../common/dom.js');\n\nvar EventEmitter = require('./event_emitter.js');\n\nvar Dataset = require('./dataset.js');\n\nvar css = require('./css.js'); // constructor\n// -----------\n\n\nfunction Dropdown(o) {\n var that = this;\n var onSuggestionClick;\n var onSuggestionMouseEnter;\n var onSuggestionMouseLeave;\n o = o || {};\n\n if (!o.menu) {\n _.error('menu is required');\n }\n\n if (!_.isArray(o.datasets) && !_.isObject(o.datasets)) {\n _.error('1 or more datasets required');\n }\n\n if (!o.datasets) {\n _.error('datasets is required');\n }\n\n this.isOpen = false;\n this.isEmpty = true;\n this.minLength = o.minLength || 0;\n this.templates = {};\n this.appendTo = o.appendTo || false;\n this.css = _.mixin({}, css, o.appendTo ? css.appendTo : {});\n this.cssClasses = o.cssClasses = _.mixin({}, css.defaultClasses, o.cssClasses || {});\n this.cssClasses.prefix = o.cssClasses.formattedPrefix || _.formatPrefix(this.cssClasses.prefix, this.cssClasses.noPrefix); // bound functions\n\n onSuggestionClick = _.bind(this._onSuggestionClick, this);\n onSuggestionMouseEnter = _.bind(this._onSuggestionMouseEnter, this);\n onSuggestionMouseLeave = _.bind(this._onSuggestionMouseLeave, this);\n\n var cssClass = _.className(this.cssClasses.prefix, this.cssClasses.suggestion);\n\n this.$menu = DOM.element(o.menu).on('mouseenter.aa', cssClass, onSuggestionMouseEnter).on('mouseleave.aa', cssClass, onSuggestionMouseLeave).on('click.aa', cssClass, onSuggestionClick);\n this.$container = o.appendTo ? o.wrapper : this.$menu;\n\n if (o.templates && o.templates.header) {\n this.templates.header = _.templatify(o.templates.header);\n this.$menu.prepend(this.templates.header());\n }\n\n if (o.templates && o.templates.empty) {\n this.templates.empty = _.templatify(o.templates.empty);\n this.$empty = DOM.element('
' + '
');\n this.$menu.append(this.$empty);\n this.$empty.hide();\n }\n\n this.datasets = _.map(o.datasets, function (oDataset) {\n return initializeDataset(that.$menu, oDataset, o.cssClasses);\n });\n\n _.each(this.datasets, function (dataset) {\n var root = dataset.getRoot();\n\n if (root && root.parent().length === 0) {\n that.$menu.append(root);\n }\n\n dataset.onSync('rendered', that._onRendered, that);\n });\n\n if (o.templates && o.templates.footer) {\n this.templates.footer = _.templatify(o.templates.footer);\n this.$menu.append(this.templates.footer());\n }\n\n var self = this;\n DOM.element(window).resize(function () {\n self._redraw();\n });\n} // instance methods\n// ----------------\n\n\n_.mixin(Dropdown.prototype, EventEmitter, {\n // ### private\n _onSuggestionClick: function onSuggestionClick($e) {\n this.trigger('suggestionClicked', DOM.element($e.currentTarget));\n },\n _onSuggestionMouseEnter: function onSuggestionMouseEnter($e) {\n var elt = DOM.element($e.currentTarget);\n\n if (elt.hasClass(_.className(this.cssClasses.prefix, this.cssClasses.cursor, true))) {\n // we're already on the cursor\n // => we're probably entering it again after leaving it for a nested div\n return;\n }\n\n this._removeCursor(); // Fixes iOS double tap behaviour, by modifying the DOM right before the\n // native href clicks happens, iOS will requires another tap to follow\n // a suggestion that has an element inside\n // https://www.google.com/search?q=ios+double+tap+bug+href\n\n\n var suggestion = this;\n setTimeout(function () {\n // this exact line, when inside the main loop, will trigger a double tap bug\n // on iOS devices\n suggestion._setCursor(elt, false);\n }, 0);\n },\n _onSuggestionMouseLeave: function onSuggestionMouseLeave($e) {\n // $e.relatedTarget is the `EventTarget` the pointing device entered to\n if ($e.relatedTarget) {\n var elt = DOM.element($e.relatedTarget);\n\n if (elt.closest('.' + _.className(this.cssClasses.prefix, this.cssClasses.cursor, true)).length > 0) {\n // our father is a cursor\n // => it means we're just leaving the suggestion for a nested div\n return;\n }\n }\n\n this._removeCursor();\n\n this.trigger('cursorRemoved');\n },\n _onRendered: function onRendered(e, query) {\n this.isEmpty = _.every(this.datasets, isDatasetEmpty);\n\n if (this.isEmpty) {\n if (query.length >= this.minLength) {\n this.trigger('empty');\n }\n\n if (this.$empty) {\n if (query.length < this.minLength) {\n this._hide();\n } else {\n var html = this.templates.empty({\n query: this.datasets[0] && this.datasets[0].query\n });\n this.$empty.html(html);\n this.$empty.show();\n\n this._show();\n }\n } else if (_.any(this.datasets, hasEmptyTemplate)) {\n if (query.length < this.minLength) {\n this._hide();\n } else {\n this._show();\n }\n } else {\n this._hide();\n }\n } else if (this.isOpen) {\n if (this.$empty) {\n this.$empty.empty();\n this.$empty.hide();\n }\n\n if (query.length >= this.minLength) {\n this._show();\n } else {\n this._hide();\n }\n }\n\n this.trigger('datasetRendered');\n\n function isDatasetEmpty(dataset) {\n return dataset.isEmpty();\n }\n\n function hasEmptyTemplate(dataset) {\n return dataset.templates && dataset.templates.empty;\n }\n },\n _hide: function _hide() {\n this.$container.hide();\n },\n _show: function _show() {\n // can't use jQuery#show because $menu is a span element we want\n // display: block; not dislay: inline;\n this.$container.css('display', 'block');\n\n this._redraw();\n\n this.trigger('shown');\n },\n _redraw: function redraw() {\n if (!this.isOpen || !this.appendTo) return;\n this.trigger('redrawn');\n },\n _getSuggestions: function getSuggestions() {\n return this.$menu.find(_.className(this.cssClasses.prefix, this.cssClasses.suggestion));\n },\n _getCursor: function getCursor() {\n return this.$menu.find(_.className(this.cssClasses.prefix, this.cssClasses.cursor)).first();\n },\n _setCursor: function setCursor($el, updateInput) {\n $el.first().addClass(_.className(this.cssClasses.prefix, this.cssClasses.cursor, true)).attr('aria-selected', 'true');\n this.trigger('cursorMoved', updateInput);\n },\n _removeCursor: function removeCursor() {\n this._getCursor().removeClass(_.className(this.cssClasses.prefix, this.cssClasses.cursor, true)).removeAttr('aria-selected');\n },\n _moveCursor: function moveCursor(increment) {\n var $suggestions;\n var $oldCursor;\n var newCursorIndex;\n var $newCursor;\n\n if (!this.isOpen) {\n return;\n }\n\n $oldCursor = this._getCursor();\n $suggestions = this._getSuggestions();\n\n this._removeCursor(); // shifting before and after modulo to deal with -1 index\n\n\n newCursorIndex = $suggestions.index($oldCursor) + increment;\n newCursorIndex = (newCursorIndex + 1) % ($suggestions.length + 1) - 1;\n\n if (newCursorIndex === -1) {\n this.trigger('cursorRemoved');\n return;\n } else if (newCursorIndex < -1) {\n newCursorIndex = $suggestions.length - 1;\n }\n\n this._setCursor($newCursor = $suggestions.eq(newCursorIndex), true); // in the case of scrollable overflow\n // make sure the cursor is visible in the menu\n\n\n this._ensureVisible($newCursor);\n },\n _ensureVisible: function ensureVisible($el) {\n var elTop;\n var elBottom;\n var menuScrollTop;\n var menuHeight;\n elTop = $el.position().top;\n elBottom = elTop + $el.height() + parseInt($el.css('margin-top'), 10) + parseInt($el.css('margin-bottom'), 10);\n menuScrollTop = this.$menu.scrollTop();\n menuHeight = this.$menu.height() + parseInt(this.$menu.css('padding-top'), 10) + parseInt(this.$menu.css('padding-bottom'), 10);\n\n if (elTop < 0) {\n this.$menu.scrollTop(menuScrollTop + elTop);\n } else if (menuHeight < elBottom) {\n this.$menu.scrollTop(menuScrollTop + (elBottom - menuHeight));\n }\n },\n // ### public\n close: function close() {\n if (this.isOpen) {\n this.isOpen = false;\n\n this._removeCursor();\n\n this._hide();\n\n this.trigger('closed');\n }\n },\n open: function open() {\n if (!this.isOpen) {\n this.isOpen = true;\n\n if (!this.isEmpty) {\n this._show();\n }\n\n this.trigger('opened');\n }\n },\n setLanguageDirection: function setLanguageDirection(dir) {\n this.$menu.css(dir === 'ltr' ? this.css.ltr : this.css.rtl);\n },\n moveCursorUp: function moveCursorUp() {\n this._moveCursor(-1);\n },\n moveCursorDown: function moveCursorDown() {\n this._moveCursor(+1);\n },\n getDatumForSuggestion: function getDatumForSuggestion($el) {\n var datum = null;\n\n if ($el.length) {\n datum = {\n raw: Dataset.extractDatum($el),\n value: Dataset.extractValue($el),\n datasetName: Dataset.extractDatasetName($el)\n };\n }\n\n return datum;\n },\n getCurrentCursor: function getCurrentCursor() {\n return this._getCursor().first();\n },\n getDatumForCursor: function getDatumForCursor() {\n return this.getDatumForSuggestion(this._getCursor().first());\n },\n getDatumForTopSuggestion: function getDatumForTopSuggestion() {\n return this.getDatumForSuggestion(this._getSuggestions().first());\n },\n cursorTopSuggestion: function cursorTopSuggestion() {\n this._setCursor(this._getSuggestions().first(), false);\n },\n update: function update(query) {\n _.each(this.datasets, updateDataset);\n\n function updateDataset(dataset) {\n dataset.update(query);\n }\n },\n empty: function empty() {\n _.each(this.datasets, clearDataset);\n\n this.isEmpty = true;\n\n function clearDataset(dataset) {\n dataset.clear();\n }\n },\n isVisible: function isVisible() {\n return this.isOpen && !this.isEmpty;\n },\n destroy: function destroy() {\n this.$menu.off('.aa');\n this.$menu = null;\n\n _.each(this.datasets, destroyDataset);\n\n function destroyDataset(dataset) {\n dataset.destroy();\n }\n }\n}); // helper functions\n// ----------------\n\n\nDropdown.Dataset = Dataset;\n\nfunction initializeDataset($menu, oDataset, cssClasses) {\n return new Dropdown.Dataset(_.mixin({\n $menu: $menu,\n cssClasses: cssClasses\n }, oDataset));\n}\n\nmodule.exports = Dropdown;","'use strict';\n\nvar namespace = 'autocomplete:';\n\nvar _ = require('../common/utils.js');\n\nvar DOM = require('../common/dom.js'); // constructor\n// -----------\n\n\nfunction EventBus(o) {\n if (!o || !o.el) {\n _.error('EventBus initialized without el');\n }\n\n this.$el = DOM.element(o.el);\n} // instance methods\n// ----------------\n\n\n_.mixin(EventBus.prototype, {\n // ### public\n trigger: function trigger(type, suggestion, dataset, context) {\n var event = _.Event(namespace + type);\n\n this.$el.trigger(event, [suggestion, dataset, context]);\n return event;\n }\n});\n\nmodule.exports = EventBus;","'use strict';\n\nvar immediate = require('immediate');\n\nvar splitter = /\\s+/;\nmodule.exports = {\n onSync: onSync,\n onAsync: onAsync,\n off: off,\n trigger: trigger\n};\n\nfunction on(method, types, cb, context) {\n var type;\n\n if (!cb) {\n return this;\n }\n\n types = types.split(splitter);\n cb = context ? bindContext(cb, context) : cb;\n this._callbacks = this._callbacks || {};\n\n while (type = types.shift()) {\n this._callbacks[type] = this._callbacks[type] || {\n sync: [],\n async: []\n };\n\n this._callbacks[type][method].push(cb);\n }\n\n return this;\n}\n\nfunction onAsync(types, cb, context) {\n return on.call(this, 'async', types, cb, context);\n}\n\nfunction onSync(types, cb, context) {\n return on.call(this, 'sync', types, cb, context);\n}\n\nfunction off(types) {\n var type;\n\n if (!this._callbacks) {\n return this;\n }\n\n types = types.split(splitter);\n\n while (type = types.shift()) {\n delete this._callbacks[type];\n }\n\n return this;\n}\n\nfunction trigger(types) {\n var type;\n var callbacks;\n var args;\n var syncFlush;\n var asyncFlush;\n\n if (!this._callbacks) {\n return this;\n }\n\n types = types.split(splitter);\n args = [].slice.call(arguments, 1);\n\n while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\n // eslint-disable-line\n syncFlush = getFlush(callbacks.sync, this, [type].concat(args));\n asyncFlush = getFlush(callbacks.async, this, [type].concat(args));\n\n if (syncFlush()) {\n immediate(asyncFlush);\n }\n }\n\n return this;\n}\n\nfunction getFlush(callbacks, context, args) {\n return flush;\n\n function flush() {\n var cancelled;\n\n for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\n // only cancel if the callback explicitly returns false\n cancelled = callbacks[i].apply(context, args) === false;\n }\n\n return !cancelled;\n }\n}\n\nfunction bindContext(fn, context) {\n return fn.bind ? fn.bind(context) : function () {\n fn.apply(context, [].slice.call(arguments, 0));\n };\n}","'use strict';\n\nmodule.exports = {\n wrapper: '',\n dropdown: '',\n dataset: '
',\n suggestions: '',\n suggestion: '
'\n};","'use strict';\n\nvar specialKeyCodeMap;\nspecialKeyCodeMap = {\n 9: 'tab',\n 27: 'esc',\n 37: 'left',\n 39: 'right',\n 13: 'enter',\n 38: 'up',\n 40: 'down'\n};\n\nvar _ = require('../common/utils.js');\n\nvar DOM = require('../common/dom.js');\n\nvar EventEmitter = require('./event_emitter.js'); // constructor\n// -----------\n\n\nfunction Input(o) {\n var that = this;\n var onBlur;\n var onFocus;\n var onKeydown;\n var onInput;\n o = o || {};\n\n if (!o.input) {\n _.error('input is missing');\n } // bound functions\n\n\n onBlur = _.bind(this._onBlur, this);\n onFocus = _.bind(this._onFocus, this);\n onKeydown = _.bind(this._onKeydown, this);\n onInput = _.bind(this._onInput, this);\n this.$hint = DOM.element(o.hint);\n this.$input = DOM.element(o.input).on('blur.aa', onBlur).on('focus.aa', onFocus).on('keydown.aa', onKeydown); // if no hint, noop all the hint related functions\n\n if (this.$hint.length === 0) {\n this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\n } // ie7 and ie8 don't support the input event\n // ie9 doesn't fire the input event when characters are removed\n // not sure if ie10 is compatible\n\n\n if (!_.isMsie()) {\n this.$input.on('input.aa', onInput);\n } else {\n this.$input.on('keydown.aa keypress.aa cut.aa paste.aa', function ($e) {\n // if a special key triggered this, ignore it\n if (specialKeyCodeMap[$e.which || $e.keyCode]) {\n return;\n } // give the browser a chance to update the value of the input\n // before checking to see if the query changed\n\n\n _.defer(_.bind(that._onInput, that, $e));\n });\n } // the query defaults to whatever the value of the input is\n // on initialization, it'll most likely be an empty string\n\n\n this.query = this.$input.val(); // helps with calculating the width of the input's value\n\n this.$overflowHelper = buildOverflowHelper(this.$input);\n} // static methods\n// --------------\n\n\nInput.normalizeQuery = function (str) {\n // strips leading whitespace and condenses all whitespace\n return (str || '').replace(/^\\s*/g, '').replace(/\\s{2,}/g, ' ');\n}; // instance methods\n// ----------------\n\n\n_.mixin(Input.prototype, EventEmitter, {\n // ### private\n _onBlur: function onBlur() {\n this.resetInputValue();\n this.$input.removeAttr('aria-activedescendant');\n this.trigger('blurred');\n },\n _onFocus: function onFocus() {\n this.trigger('focused');\n },\n _onKeydown: function onKeydown($e) {\n // which is normalized and consistent (but not for ie)\n var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\n\n this._managePreventDefault(keyName, $e);\n\n if (keyName && this._shouldTrigger(keyName, $e)) {\n this.trigger(keyName + 'Keyed', $e);\n }\n },\n _onInput: function onInput() {\n this._checkInputValue();\n },\n _managePreventDefault: function managePreventDefault(keyName, $e) {\n var preventDefault;\n var hintValue;\n var inputValue;\n\n switch (keyName) {\n case 'tab':\n hintValue = this.getHint();\n inputValue = this.getInputValue();\n preventDefault = hintValue && hintValue !== inputValue && !withModifier($e);\n break;\n\n case 'up':\n case 'down':\n preventDefault = !withModifier($e);\n break;\n\n default:\n preventDefault = false;\n }\n\n if (preventDefault) {\n $e.preventDefault();\n }\n },\n _shouldTrigger: function shouldTrigger(keyName, $e) {\n var trigger;\n\n switch (keyName) {\n case 'tab':\n trigger = !withModifier($e);\n break;\n\n default:\n trigger = true;\n }\n\n return trigger;\n },\n _checkInputValue: function checkInputValue() {\n var inputValue;\n var areEquivalent;\n var hasDifferentWhitespace;\n inputValue = this.getInputValue();\n areEquivalent = areQueriesEquivalent(inputValue, this.query);\n hasDifferentWhitespace = areEquivalent && this.query ? this.query.length !== inputValue.length : false;\n this.query = inputValue;\n\n if (!areEquivalent) {\n this.trigger('queryChanged', this.query);\n } else if (hasDifferentWhitespace) {\n this.trigger('whitespaceChanged', this.query);\n }\n },\n // ### public\n focus: function focus() {\n this.$input.focus();\n },\n blur: function blur() {\n this.$input.blur();\n },\n getQuery: function getQuery() {\n return this.query;\n },\n setQuery: function setQuery(query) {\n this.query = query;\n },\n getInputValue: function getInputValue() {\n return this.$input.val();\n },\n setInputValue: function setInputValue(value, silent) {\n if (typeof value === 'undefined') {\n value = this.query;\n }\n\n this.$input.val(value); // silent prevents any additional events from being triggered\n\n if (silent) {\n this.clearHint();\n } else {\n this._checkInputValue();\n }\n },\n expand: function expand() {\n this.$input.attr('aria-expanded', 'true');\n },\n collapse: function collapse() {\n this.$input.attr('aria-expanded', 'false');\n },\n setActiveDescendant: function setActiveDescendant(activedescendantId) {\n this.$input.attr('aria-activedescendant', activedescendantId);\n },\n removeActiveDescendant: function removeActiveDescendant() {\n this.$input.removeAttr('aria-activedescendant');\n },\n resetInputValue: function resetInputValue() {\n this.setInputValue(this.query, true);\n },\n getHint: function getHint() {\n return this.$hint.val();\n },\n setHint: function setHint(value) {\n this.$hint.val(value);\n },\n clearHint: function clearHint() {\n this.setHint('');\n },\n clearHintIfInvalid: function clearHintIfInvalid() {\n var val;\n var hint;\n var valIsPrefixOfHint;\n var isValid;\n val = this.getInputValue();\n hint = this.getHint();\n valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\n isValid = val !== '' && valIsPrefixOfHint && !this.hasOverflow();\n\n if (!isValid) {\n this.clearHint();\n }\n },\n getLanguageDirection: function getLanguageDirection() {\n return (this.$input.css('direction') || 'ltr').toLowerCase();\n },\n hasOverflow: function hasOverflow() {\n // 2 is arbitrary, just picking a small number to handle edge cases\n var constraint = this.$input.width() - 2;\n this.$overflowHelper.text(this.getInputValue());\n return this.$overflowHelper.width() >= constraint;\n },\n isCursorAtEnd: function isCursorAtEnd() {\n var valueLength;\n var selectionStart;\n var range;\n valueLength = this.$input.val().length;\n selectionStart = this.$input[0].selectionStart;\n\n if (_.isNumber(selectionStart)) {\n return selectionStart === valueLength;\n } else if (document.selection) {\n // NOTE: this won't work unless the input has focus, the good news\n // is this code should only get called when the input has focus\n range = document.selection.createRange();\n range.moveStart('character', -valueLength);\n return valueLength === range.text.length;\n }\n\n return true;\n },\n destroy: function destroy() {\n this.$hint.off('.aa');\n this.$input.off('.aa');\n this.$hint = this.$input = this.$overflowHelper = null;\n }\n}); // helper functions\n// ----------------\n\n\nfunction buildOverflowHelper($input) {\n return DOM.element('
').css({\n    // position helper off-screen\n    position: 'absolute',\n    visibility: 'hidden',\n    // avoid line breaks and whitespace collapsing\n    whiteSpace: 'pre',\n    // use same font css as input to calculate accurate width\n    fontFamily: $input.css('font-family'),\n    fontSize: $input.css('font-size'),\n    fontStyle: $input.css('font-style'),\n    fontVariant: $input.css('font-variant'),\n    fontWeight: $input.css('font-weight'),\n    wordSpacing: $input.css('word-spacing'),\n    letterSpacing: $input.css('letter-spacing'),\n    textIndent: $input.css('text-indent'),\n    textRendering: $input.css('text-rendering'),\n    textTransform: $input.css('text-transform')\n  }).insertAfter($input);\n}\n\nfunction areQueriesEquivalent(a, b) {\n  return Input.normalizeQuery(a) === Input.normalizeQuery(b);\n}\n\nfunction withModifier($e) {\n  return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\n}\n\nmodule.exports = Input;","'use strict';\n\nvar attrsKey = 'aaAttrs';\n\nvar _ = require('../common/utils.js');\n\nvar DOM = require('../common/dom.js');\n\nvar EventBus = require('./event_bus.js');\n\nvar Input = require('./input.js');\n\nvar Dropdown = require('./dropdown.js');\n\nvar html = require('./html.js');\n\nvar css = require('./css.js'); // constructor\n// -----------\n// THOUGHT: what if datasets could dynamically be added/removed?\n\n\nfunction Typeahead(o) {\n  var $menu;\n  var $hint;\n  o = o || {};\n\n  if (!o.input) {\n    _.error('missing input');\n  }\n\n  this.isActivated = false;\n  this.debug = !!o.debug;\n  this.autoselect = !!o.autoselect;\n  this.autoselectOnBlur = !!o.autoselectOnBlur;\n  this.openOnFocus = !!o.openOnFocus;\n  this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\n  this.autoWidth = o.autoWidth === undefined ? true : !!o.autoWidth;\n  this.clearOnSelected = !!o.clearOnSelected;\n  this.tabAutocomplete = o.tabAutocomplete === undefined ? true : !!o.tabAutocomplete;\n  o.hint = !!o.hint;\n\n  if (o.hint && o.appendTo) {\n    throw new Error('[autocomplete.js] hint and appendTo options can\\'t be used at the same time');\n  }\n\n  this.css = o.css = _.mixin({}, css, o.appendTo ? css.appendTo : {});\n  this.cssClasses = o.cssClasses = _.mixin({}, css.defaultClasses, o.cssClasses || {});\n  this.cssClasses.prefix = o.cssClasses.formattedPrefix = _.formatPrefix(this.cssClasses.prefix, this.cssClasses.noPrefix);\n  this.listboxId = o.listboxId = [this.cssClasses.root, 'listbox', _.getUniqueId()].join('-');\n  var domElts = buildDom(o);\n  this.$node = domElts.wrapper;\n  var $input = this.$input = domElts.input;\n  $menu = domElts.menu;\n  $hint = domElts.hint;\n\n  if (o.dropdownMenuContainer) {\n    DOM.element(o.dropdownMenuContainer).css('position', 'relative') // ensure the container has a relative position\n    .append($menu.css('top', '0')); // override the top: 100%\n  } // #705: if there's scrollable overflow, ie doesn't support\n  // blur cancellations when the scrollbar is clicked\n  //\n  // #351: preventDefault won't cancel blurs in ie <= 8\n\n\n  $input.on('blur.aa', function ($e) {\n    var active = document.activeElement;\n\n    if (_.isMsie() && ($menu[0] === active || $menu[0].contains(active))) {\n      $e.preventDefault(); // stop immediate in order to prevent Input#_onBlur from\n      // getting exectued\n\n      $e.stopImmediatePropagation();\n\n      _.defer(function () {\n        $input.focus();\n      });\n    }\n  }); // #351: prevents input blur due to clicks within dropdown menu\n\n  $menu.on('mousedown.aa', function ($e) {\n    $e.preventDefault();\n  });\n  this.eventBus = o.eventBus || new EventBus({\n    el: $input\n  });\n  this.dropdown = new Typeahead.Dropdown({\n    appendTo: o.appendTo,\n    wrapper: this.$node,\n    menu: $menu,\n    datasets: o.datasets,\n    templates: o.templates,\n    cssClasses: o.cssClasses,\n    minLength: this.minLength\n  }).onSync('suggestionClicked', this._onSuggestionClicked, this).onSync('cursorMoved', this._onCursorMoved, this).onSync('cursorRemoved', this._onCursorRemoved, this).onSync('opened', this._onOpened, this).onSync('closed', this._onClosed, this).onSync('shown', this._onShown, this).onSync('empty', this._onEmpty, this).onSync('redrawn', this._onRedrawn, this).onAsync('datasetRendered', this._onDatasetRendered, this);\n  this.input = new Typeahead.Input({\n    input: $input,\n    hint: $hint\n  }).onSync('focused', this._onFocused, this).onSync('blurred', this._onBlurred, this).onSync('enterKeyed', this._onEnterKeyed, this).onSync('tabKeyed', this._onTabKeyed, this).onSync('escKeyed', this._onEscKeyed, this).onSync('upKeyed', this._onUpKeyed, this).onSync('downKeyed', this._onDownKeyed, this).onSync('leftKeyed', this._onLeftKeyed, this).onSync('rightKeyed', this._onRightKeyed, this).onSync('queryChanged', this._onQueryChanged, this).onSync('whitespaceChanged', this._onWhitespaceChanged, this);\n\n  this._bindKeyboardShortcuts(o);\n\n  this._setLanguageDirection();\n} // instance methods\n// ----------------\n\n\n_.mixin(Typeahead.prototype, {\n  // ### private\n  _bindKeyboardShortcuts: function _bindKeyboardShortcuts(options) {\n    if (!options.keyboardShortcuts) {\n      return;\n    }\n\n    var $input = this.$input;\n    var keyboardShortcuts = [];\n\n    _.each(options.keyboardShortcuts, function (key) {\n      if (typeof key === 'string') {\n        key = key.toUpperCase().charCodeAt(0);\n      }\n\n      keyboardShortcuts.push(key);\n    });\n\n    DOM.element(document).keydown(function (event) {\n      var elt = event.target || event.srcElement;\n      var tagName = elt.tagName;\n\n      if (elt.isContentEditable || tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {\n        // already in an input\n        return;\n      }\n\n      var which = event.which || event.keyCode;\n\n      if (keyboardShortcuts.indexOf(which) === -1) {\n        // not the right shortcut\n        return;\n      }\n\n      $input.focus();\n      event.stopPropagation();\n      event.preventDefault();\n    });\n  },\n  _onSuggestionClicked: function onSuggestionClicked(type, $el) {\n    var datum;\n    var context = {\n      selectionMethod: 'click'\n    };\n\n    if (datum = this.dropdown.getDatumForSuggestion($el)) {\n      this._select(datum, context);\n    }\n  },\n  _onCursorMoved: function onCursorMoved(event, updateInput) {\n    var datum = this.dropdown.getDatumForCursor();\n    var currentCursorId = this.dropdown.getCurrentCursor().attr('id');\n    this.input.setActiveDescendant(currentCursorId);\n\n    if (datum) {\n      if (updateInput) {\n        this.input.setInputValue(datum.value, true);\n      }\n\n      this.eventBus.trigger('cursorchanged', datum.raw, datum.datasetName);\n    }\n  },\n  _onCursorRemoved: function onCursorRemoved() {\n    this.input.resetInputValue();\n\n    this._updateHint();\n\n    this.eventBus.trigger('cursorremoved');\n  },\n  _onDatasetRendered: function onDatasetRendered() {\n    this._updateHint();\n\n    this.eventBus.trigger('updated');\n  },\n  _onOpened: function onOpened() {\n    this._updateHint();\n\n    this.input.expand();\n    this.eventBus.trigger('opened');\n  },\n  _onEmpty: function onEmpty() {\n    this.eventBus.trigger('empty');\n  },\n  _onRedrawn: function onRedrawn() {\n    this.$node.css('top', 0 + 'px');\n    this.$node.css('left', 0 + 'px');\n    var inputRect = this.$input[0].getBoundingClientRect();\n\n    if (this.autoWidth) {\n      this.$node.css('width', inputRect.width + 'px');\n    }\n\n    var wrapperRect = this.$node[0].getBoundingClientRect();\n    var top = inputRect.bottom - wrapperRect.top;\n    this.$node.css('top', top + 'px');\n    var left = inputRect.left - wrapperRect.left;\n    this.$node.css('left', left + 'px');\n    this.eventBus.trigger('redrawn');\n  },\n  _onShown: function onShown() {\n    this.eventBus.trigger('shown');\n\n    if (this.autoselect) {\n      this.dropdown.cursorTopSuggestion();\n    }\n  },\n  _onClosed: function onClosed() {\n    this.input.clearHint();\n    this.input.removeActiveDescendant();\n    this.input.collapse();\n    this.eventBus.trigger('closed');\n  },\n  _onFocused: function onFocused() {\n    this.isActivated = true;\n\n    if (this.openOnFocus) {\n      var query = this.input.getQuery();\n\n      if (query.length >= this.minLength) {\n        this.dropdown.update(query);\n      } else {\n        this.dropdown.empty();\n      }\n\n      this.dropdown.open();\n    }\n  },\n  _onBlurred: function onBlurred() {\n    var cursorDatum;\n    var topSuggestionDatum;\n    cursorDatum = this.dropdown.getDatumForCursor();\n    topSuggestionDatum = this.dropdown.getDatumForTopSuggestion();\n    var context = {\n      selectionMethod: 'blur'\n    };\n\n    if (!this.debug) {\n      if (this.autoselectOnBlur && cursorDatum) {\n        this._select(cursorDatum, context);\n      } else if (this.autoselectOnBlur && topSuggestionDatum) {\n        this._select(topSuggestionDatum, context);\n      } else {\n        this.isActivated = false;\n        this.dropdown.empty();\n        this.dropdown.close();\n      }\n    }\n  },\n  _onEnterKeyed: function onEnterKeyed(type, $e) {\n    var cursorDatum;\n    var topSuggestionDatum;\n    cursorDatum = this.dropdown.getDatumForCursor();\n    topSuggestionDatum = this.dropdown.getDatumForTopSuggestion();\n    var context = {\n      selectionMethod: 'enterKey'\n    };\n\n    if (cursorDatum) {\n      this._select(cursorDatum, context);\n\n      $e.preventDefault();\n    } else if (this.autoselect && topSuggestionDatum) {\n      this._select(topSuggestionDatum, context);\n\n      $e.preventDefault();\n    }\n  },\n  _onTabKeyed: function onTabKeyed(type, $e) {\n    if (!this.tabAutocomplete) {\n      // Closing the dropdown enables further tabbing\n      this.dropdown.close();\n      return;\n    }\n\n    var datum;\n    var context = {\n      selectionMethod: 'tabKey'\n    };\n\n    if (datum = this.dropdown.getDatumForCursor()) {\n      this._select(datum, context);\n\n      $e.preventDefault();\n    } else {\n      this._autocomplete(true);\n    }\n  },\n  _onEscKeyed: function onEscKeyed() {\n    this.dropdown.close();\n    this.input.resetInputValue();\n  },\n  _onUpKeyed: function onUpKeyed() {\n    var query = this.input.getQuery();\n\n    if (this.dropdown.isEmpty && query.length >= this.minLength) {\n      this.dropdown.update(query);\n    } else {\n      this.dropdown.moveCursorUp();\n    }\n\n    this.dropdown.open();\n  },\n  _onDownKeyed: function onDownKeyed() {\n    var query = this.input.getQuery();\n\n    if (this.dropdown.isEmpty && query.length >= this.minLength) {\n      this.dropdown.update(query);\n    } else {\n      this.dropdown.moveCursorDown();\n    }\n\n    this.dropdown.open();\n  },\n  _onLeftKeyed: function onLeftKeyed() {\n    if (this.dir === 'rtl') {\n      this._autocomplete();\n    }\n  },\n  _onRightKeyed: function onRightKeyed() {\n    if (this.dir === 'ltr') {\n      this._autocomplete();\n    }\n  },\n  _onQueryChanged: function onQueryChanged(e, query) {\n    this.input.clearHintIfInvalid();\n\n    if (query.length >= this.minLength) {\n      this.dropdown.update(query);\n    } else {\n      this.dropdown.empty();\n    }\n\n    this.dropdown.open();\n\n    this._setLanguageDirection();\n  },\n  _onWhitespaceChanged: function onWhitespaceChanged() {\n    this._updateHint();\n\n    this.dropdown.open();\n  },\n  _setLanguageDirection: function setLanguageDirection() {\n    var dir = this.input.getLanguageDirection();\n\n    if (this.dir !== dir) {\n      this.dir = dir;\n      this.$node.css('direction', dir);\n      this.dropdown.setLanguageDirection(dir);\n    }\n  },\n  _updateHint: function updateHint() {\n    var datum;\n    var val;\n    var query;\n    var escapedQuery;\n    var frontMatchRegEx;\n    var match;\n    datum = this.dropdown.getDatumForTopSuggestion();\n\n    if (datum && this.dropdown.isVisible() && !this.input.hasOverflow()) {\n      val = this.input.getInputValue();\n      query = Input.normalizeQuery(val);\n      escapedQuery = _.escapeRegExChars(query); // match input value, then capture trailing text\n\n      frontMatchRegEx = new RegExp('^(?:' + escapedQuery + ')(.+$)', 'i');\n      match = frontMatchRegEx.exec(datum.value); // clear hint if there's no trailing text\n\n      if (match) {\n        this.input.setHint(val + match[1]);\n      } else {\n        this.input.clearHint();\n      }\n    } else {\n      this.input.clearHint();\n    }\n  },\n  _autocomplete: function autocomplete(laxCursor) {\n    var hint;\n    var query;\n    var isCursorAtEnd;\n    var datum;\n    hint = this.input.getHint();\n    query = this.input.getQuery();\n    isCursorAtEnd = laxCursor || this.input.isCursorAtEnd();\n\n    if (hint && query !== hint && isCursorAtEnd) {\n      datum = this.dropdown.getDatumForTopSuggestion();\n\n      if (datum) {\n        this.input.setInputValue(datum.value);\n      }\n\n      this.eventBus.trigger('autocompleted', datum.raw, datum.datasetName);\n    }\n  },\n  _select: function select(datum, context) {\n    if (typeof datum.value !== 'undefined') {\n      this.input.setQuery(datum.value);\n    }\n\n    if (this.clearOnSelected) {\n      this.setVal('');\n    } else {\n      this.input.setInputValue(datum.value, true);\n    }\n\n    this._setLanguageDirection();\n\n    var event = this.eventBus.trigger('selected', datum.raw, datum.datasetName, context);\n\n    if (event.isDefaultPrevented() === false) {\n      this.dropdown.close(); // #118: allow click event to bubble up to the body before removing\n      // the suggestions otherwise we break event delegation\n\n      _.defer(_.bind(this.dropdown.empty, this.dropdown));\n    }\n  },\n  // ### public\n  open: function open() {\n    // if the menu is not activated yet, we need to update\n    // the underlying dropdown menu to trigger the search\n    // otherwise we're not gonna see anything\n    if (!this.isActivated) {\n      var query = this.input.getInputValue();\n\n      if (query.length >= this.minLength) {\n        this.dropdown.update(query);\n      } else {\n        this.dropdown.empty();\n      }\n    }\n\n    this.dropdown.open();\n  },\n  close: function close() {\n    this.dropdown.close();\n  },\n  setVal: function setVal(val) {\n    // expect val to be a string, so be safe, and coerce\n    val = _.toStr(val);\n\n    if (this.isActivated) {\n      this.input.setInputValue(val);\n    } else {\n      this.input.setQuery(val);\n      this.input.setInputValue(val, true);\n    }\n\n    this._setLanguageDirection();\n  },\n  getVal: function getVal() {\n    return this.input.getQuery();\n  },\n  destroy: function destroy() {\n    this.input.destroy();\n    this.dropdown.destroy();\n    destroyDomStructure(this.$node, this.cssClasses);\n    this.$node = null;\n  },\n  getWrapper: function getWrapper() {\n    return this.dropdown.$container[0];\n  }\n});\n\nfunction buildDom(options) {\n  var $input;\n  var $wrapper;\n  var $dropdown;\n  var $hint;\n  $input = DOM.element(options.input);\n  $wrapper = DOM.element(html.wrapper.replace('%ROOT%', options.cssClasses.root)).css(options.css.wrapper); // override the display property with the table-cell value\n  // if the parent element is a table and the original input was a block\n  //  -> https://github.com/algolia/autocomplete.js/issues/16\n\n  if (!options.appendTo && $input.css('display') === 'block' && $input.parent().css('display') === 'table') {\n    $wrapper.css('display', 'table-cell');\n  }\n\n  var dropdownHtml = html.dropdown.replace('%PREFIX%', options.cssClasses.prefix).replace('%DROPDOWN_MENU%', options.cssClasses.dropdownMenu);\n  $dropdown = DOM.element(dropdownHtml).css(options.css.dropdown).attr({\n    role: 'listbox',\n    id: options.listboxId\n  });\n\n  if (options.templates && options.templates.dropdownMenu) {\n    $dropdown.html(_.templatify(options.templates.dropdownMenu)());\n  }\n\n  $hint = $input.clone().css(options.css.hint).css(getBackgroundStyles($input));\n  $hint.val('').addClass(_.className(options.cssClasses.prefix, options.cssClasses.hint, true)).removeAttr('id name placeholder required').prop('readonly', true).attr({\n    'aria-hidden': 'true',\n    autocomplete: 'off',\n    spellcheck: 'false',\n    tabindex: -1\n  });\n\n  if ($hint.removeData) {\n    $hint.removeData();\n  } // store the original values of the attrs that get modified\n  // so modifications can be reverted on destroy\n\n\n  $input.data(attrsKey, {\n    'aria-autocomplete': $input.attr('aria-autocomplete'),\n    'aria-expanded': $input.attr('aria-expanded'),\n    'aria-owns': $input.attr('aria-owns'),\n    autocomplete: $input.attr('autocomplete'),\n    dir: $input.attr('dir'),\n    role: $input.attr('role'),\n    spellcheck: $input.attr('spellcheck'),\n    style: $input.attr('style'),\n    type: $input.attr('type')\n  });\n  $input.addClass(_.className(options.cssClasses.prefix, options.cssClasses.input, true)).attr({\n    autocomplete: 'off',\n    spellcheck: false,\n    // Accessibility features\n    // Give the field a presentation of a \"select\".\n    // Combobox is the combined presentation of a single line textfield\n    // with a listbox popup.\n    // https://www.w3.org/WAI/PF/aria/roles#combobox\n    role: 'combobox',\n    // Let the screen reader know the field has an autocomplete\n    // feature to it.\n    'aria-autocomplete': options.datasets && options.datasets[0] && options.datasets[0].displayKey ? 'both' : 'list',\n    // Indicates whether the dropdown it controls is currently expanded or collapsed\n    'aria-expanded': 'false',\n    'aria-label': options.ariaLabel,\n    // Explicitly point to the listbox,\n    // which is a list of suggestions (aka options)\n    'aria-owns': options.listboxId\n  }).css(options.hint ? options.css.input : options.css.inputWithNoHint); // ie7 does not like it when dir is set to auto\n\n  try {\n    if (!$input.attr('dir')) {\n      $input.attr('dir', 'auto');\n    }\n  } catch (e) {// ignore\n  }\n\n  $wrapper = options.appendTo ? $wrapper.appendTo(DOM.element(options.appendTo).eq(0)).eq(0) : $input.wrap($wrapper).parent();\n  $wrapper.prepend(options.hint ? $hint : null).append($dropdown);\n  return {\n    wrapper: $wrapper,\n    input: $input,\n    hint: $hint,\n    menu: $dropdown\n  };\n}\n\nfunction getBackgroundStyles($el) {\n  return {\n    backgroundAttachment: $el.css('background-attachment'),\n    backgroundClip: $el.css('background-clip'),\n    backgroundColor: $el.css('background-color'),\n    backgroundImage: $el.css('background-image'),\n    backgroundOrigin: $el.css('background-origin'),\n    backgroundPosition: $el.css('background-position'),\n    backgroundRepeat: $el.css('background-repeat'),\n    backgroundSize: $el.css('background-size')\n  };\n}\n\nfunction destroyDomStructure($node, cssClasses) {\n  var $input = $node.find(_.className(cssClasses.prefix, cssClasses.input)); // need to remove attrs that weren't previously defined and\n  // revert attrs that originally had a value\n\n  _.each($input.data(attrsKey), function (val, key) {\n    if (val === undefined) {\n      $input.removeAttr(key);\n    } else {\n      $input.attr(key, val);\n    }\n  });\n\n  $input.detach().removeClass(_.className(cssClasses.prefix, cssClasses.input, true)).insertAfter($node);\n\n  if ($input.removeData) {\n    $input.removeData(attrsKey);\n  }\n\n  $node.remove();\n}\n\nTypeahead.Dropdown = Dropdown;\nTypeahead.Input = Input;\nTypeahead.sources = require('../sources/index.js');\nmodule.exports = Typeahead;","'use strict';\n\nmodule.exports = {\n  element: null\n};","'use strict';\n\nmodule.exports = function parseAlgoliaClientVersion(agent) {\n  var parsed = // User agent for algoliasearch >= 3.33.0\n  agent.match(/Algolia for JavaScript \\((\\d+\\.)(\\d+\\.)(\\d+)\\)/) || // User agent for algoliasearch < 3.33.0\n  agent.match(/Algolia for vanilla JavaScript (\\d+\\.)(\\d+\\.)(\\d+)/);\n\n  if (parsed) {\n    return [parsed[1], parsed[2], parsed[3]];\n  }\n\n  return undefined;\n};","'use strict';\n\nvar DOM = require('./dom.js');\n\nfunction escapeRegExp(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\nmodule.exports = {\n  // those methods are implemented differently\n  // depending on which build it is, using\n  // $... or angular... or Zepto... or require(...)\n  isArray: null,\n  isFunction: null,\n  isObject: null,\n  bind: null,\n  each: null,\n  map: null,\n  mixin: null,\n  isMsie: function isMsie(agentString) {\n    if (agentString === undefined) {\n      agentString = navigator.userAgent;\n    } // from https://github.com/ded/bowser/blob/master/bowser.js\n\n\n    if (/(msie|trident)/i.test(agentString)) {\n      var match = agentString.match(/(msie |rv:)(\\d+(.\\d+)?)/i);\n\n      if (match) {\n        return match[2];\n      }\n    }\n\n    return false;\n  },\n  // http://stackoverflow.com/a/6969486\n  escapeRegExChars: function escapeRegExChars(str) {\n    return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n  },\n  isNumber: function isNumber(obj) {\n    return typeof obj === 'number';\n  },\n  toStr: function toStr(s) {\n    return s === undefined || s === null ? '' : s + '';\n  },\n  cloneDeep: function cloneDeep(obj) {\n    var clone = this.mixin({}, obj);\n    var self = this;\n    this.each(clone, function (value, key) {\n      if (value) {\n        if (self.isArray(value)) {\n          clone[key] = [].concat(value);\n        } else if (self.isObject(value)) {\n          clone[key] = self.cloneDeep(value);\n        }\n      }\n    });\n    return clone;\n  },\n  error: function error(msg) {\n    throw new Error(msg);\n  },\n  every: function every(obj, test) {\n    var result = true;\n\n    if (!obj) {\n      return result;\n    }\n\n    this.each(obj, function (val, key) {\n      if (result) {\n        result = test.call(null, val, key, obj) && result;\n      }\n    });\n    return !!result;\n  },\n  any: function any(obj, test) {\n    var found = false;\n\n    if (!obj) {\n      return found;\n    }\n\n    this.each(obj, function (val, key) {\n      if (test.call(null, val, key, obj)) {\n        found = true;\n        return false;\n      }\n    });\n    return found;\n  },\n  getUniqueId: function () {\n    var counter = 0;\n    return function () {\n      return counter++;\n    };\n  }(),\n  templatify: function templatify(obj) {\n    if (this.isFunction(obj)) {\n      return obj;\n    }\n\n    var $template = DOM.element(obj);\n\n    if ($template.prop('tagName') === 'SCRIPT') {\n      return function template() {\n        return $template.text();\n      };\n    }\n\n    return function template() {\n      return String(obj);\n    };\n  },\n  defer: function defer(fn) {\n    setTimeout(fn, 0);\n  },\n  noop: function noop() {},\n  formatPrefix: function formatPrefix(prefix, noPrefix) {\n    return noPrefix ? '' : prefix + '-';\n  },\n  className: function className(prefix, clazz, skipDot) {\n    return (skipDot ? '' : '.') + prefix + clazz;\n  },\n  escapeHighlightedString: function escapeHighlightedString(str, highlightPreTag, highlightPostTag) {\n    highlightPreTag = highlightPreTag || '';\n    var pre = document.createElement('div');\n    pre.appendChild(document.createTextNode(highlightPreTag));\n    highlightPostTag = highlightPostTag || '';\n    var post = document.createElement('div');\n    post.appendChild(document.createTextNode(highlightPostTag));\n    var div = document.createElement('div');\n    div.appendChild(document.createTextNode(str));\n    return div.innerHTML.replace(RegExp(escapeRegExp(pre.innerHTML), 'g'), highlightPreTag).replace(RegExp(escapeRegExp(post.innerHTML), 'g'), highlightPostTag);\n  }\n};","'use strict';\n\nvar _ = require('../common/utils.js');\n\nvar version = require('../../version.js');\n\nvar parseAlgoliaClientVersion = require('../common/parseAlgoliaClientVersion.js');\n\nfunction createMultiQuerySource() {\n  var queries = [];\n  var lastResults = [];\n  var lastSearch = window.Promise.resolve();\n\n  function requestSearch(queryClient, queryIndex) {\n    // Since all requests happen synchronously, this is executed once all the\n    // sources have been requested.\n    return window.Promise.resolve().then(function () {\n      if (queries.length) {\n        lastSearch = queryClient.search(queries);\n        queries = [];\n      }\n\n      return lastSearch;\n    }).then(function (result) {\n      if (!result) {\n        return undefined;\n      }\n\n      lastResults = result.results;\n      return lastResults[queryIndex];\n    });\n  }\n\n  return function multiQuerySource(searchIndex, params) {\n    return function search(query, cb) {\n      var queryClient = searchIndex.as;\n      var queryIndex = queries.push({\n        indexName: searchIndex.indexName,\n        query: query,\n        params: params\n      }) - 1;\n      requestSearch(queryClient, queryIndex).then(function (result) {\n        if (result) {\n          cb(result.hits, result);\n        }\n      }).catch(function (error) {\n        _.error(error.message);\n      });\n    };\n  };\n}\n\nvar source = createMultiQuerySource();\n\nmodule.exports = function search(index, params) {\n  var algoliaVersion = parseAlgoliaClientVersion(index.as._ua);\n\n  if (algoliaVersion && algoliaVersion[0] >= 3 && algoliaVersion[1] > 20) {\n    var autocompleteUserAgent = 'autocomplete.js ' + version;\n\n    if (index.as._ua.indexOf(autocompleteUserAgent) === -1) {\n      index.as._ua += '; ' + autocompleteUserAgent;\n    }\n  }\n\n  return source(index, params);\n};","'use strict';\n\nmodule.exports = {\n  hits: require('./hits.js'),\n  popularIn: require('./popularIn.js')\n};","'use strict';\n\nvar _ = require('../common/utils.js');\n\nvar version = require('../../version.js');\n\nvar parseAlgoliaClientVersion = require('../common/parseAlgoliaClientVersion.js');\n\nmodule.exports = function popularIn(index, params, details, options) {\n  var algoliaVersion = parseAlgoliaClientVersion(index.as._ua);\n\n  if (algoliaVersion && algoliaVersion[0] >= 3 && algoliaVersion[1] > 20) {\n    params = params || {};\n    params.additionalUA = 'autocomplete.js ' + version;\n  }\n\n  if (!details.source) {\n    return _.error(\"Missing 'source' key\");\n  }\n\n  var source = _.isFunction(details.source) ? details.source : function (hit) {\n    return hit[details.source];\n  };\n\n  if (!details.index) {\n    return _.error(\"Missing 'index' key\");\n  }\n\n  var detailsIndex = details.index;\n  options = options || {};\n  return sourceFn;\n\n  function sourceFn(query, cb) {\n    index.search(query, params, function (error, content) {\n      if (error) {\n        _.error(error.message);\n\n        return;\n      }\n\n      if (content.hits.length > 0) {\n        var first = content.hits[0];\n\n        var detailsParams = _.mixin({\n          hitsPerPage: 0\n        }, details);\n\n        delete detailsParams.source; // not a query parameter\n\n        delete detailsParams.index; // not a query parameter\n\n        var detailsAlgoliaVersion = parseAlgoliaClientVersion(detailsIndex.as._ua);\n\n        if (detailsAlgoliaVersion && detailsAlgoliaVersion[0] >= 3 && detailsAlgoliaVersion[1] > 20) {\n          params.additionalUA = 'autocomplete.js ' + version;\n        }\n\n        detailsIndex.search(source(first), detailsParams, function (error2, content2) {\n          if (error2) {\n            _.error(error2.message);\n\n            return;\n          }\n\n          var suggestions = []; // add the 'all department' entry before others\n\n          if (options.includeAll) {\n            var label = options.allTitle || 'All departments';\n            suggestions.push(_.mixin({\n              facet: {\n                value: label,\n                count: content2.nbHits\n              }\n            }, _.cloneDeep(first)));\n          } // enrich the first hit iterating over the facets\n\n\n          _.each(content2.facets, function (values, facet) {\n            _.each(values, function (count, value) {\n              suggestions.push(_.mixin({\n                facet: {\n                  facet: facet,\n                  value: value,\n                  count: count\n                }\n              }, _.cloneDeep(first)));\n            });\n          }); // append all other hits\n\n\n          for (var i = 1; i < content.hits.length; ++i) {\n            suggestions.push(content.hits[i]);\n          }\n\n          cb(suggestions, content);\n        });\n        return;\n      }\n\n      cb([]);\n    });\n  }\n};","'use strict'; // this will inject Zepto in window, unfortunately no easy commonJS zepto build\n\nvar zepto = require('../../zepto.js'); // setup DOM element\n\n\nvar DOM = require('../common/dom.js');\n\nDOM.element = zepto; // setup utils functions\n\nvar _ = require('../common/utils.js');\n\n_.isArray = zepto.isArray;\n_.isFunction = zepto.isFunction;\n_.isObject = zepto.isPlainObject;\n_.bind = zepto.proxy;\n\n_.each = function (collection, cb) {\n  // stupid argument order for jQuery.each\n  zepto.each(collection, reverseArgs);\n\n  function reverseArgs(index, value) {\n    return cb(value, index);\n  }\n};\n\n_.map = zepto.map;\n_.mixin = zepto.extend;\n_.Event = zepto.Event;\nvar typeaheadKey = 'aaAutocomplete';\n\nvar Typeahead = require('../autocomplete/typeahead.js');\n\nvar EventBus = require('../autocomplete/event_bus.js');\n\nfunction autocomplete(selector, options, datasets, typeaheadObject) {\n  datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 2);\n  var inputs = zepto(selector).each(function (i, input) {\n    var $input = zepto(input);\n    var eventBus = new EventBus({\n      el: $input\n    });\n    var typeahead = typeaheadObject || new Typeahead({\n      input: $input,\n      eventBus: eventBus,\n      dropdownMenuContainer: options.dropdownMenuContainer,\n      hint: options.hint === undefined ? true : !!options.hint,\n      minLength: options.minLength,\n      autoselect: options.autoselect,\n      autoselectOnBlur: options.autoselectOnBlur,\n      tabAutocomplete: options.tabAutocomplete,\n      openOnFocus: options.openOnFocus,\n      templates: options.templates,\n      debug: options.debug,\n      clearOnSelected: options.clearOnSelected,\n      cssClasses: options.cssClasses,\n      datasets: datasets,\n      keyboardShortcuts: options.keyboardShortcuts,\n      appendTo: options.appendTo,\n      autoWidth: options.autoWidth,\n      ariaLabel: options.ariaLabel || input.getAttribute('aria-label')\n    });\n    $input.data(typeaheadKey, typeahead);\n  }); // expose all methods in the `autocomplete` attribute\n\n  inputs.autocomplete = {};\n\n  _.each(['open', 'close', 'getVal', 'setVal', 'destroy', 'getWrapper'], function (method) {\n    inputs.autocomplete[method] = function () {\n      var methodArguments = arguments;\n      var result;\n      inputs.each(function (j, input) {\n        var typeahead = zepto(input).data(typeaheadKey);\n        result = typeahead[method].apply(typeahead, methodArguments);\n      });\n      return result;\n    };\n  });\n\n  return inputs;\n}\n\nautocomplete.sources = Typeahead.sources;\nautocomplete.escapeHighlightedString = _.escapeHighlightedString;\nvar wasAutocompleteSet = ('autocomplete' in window);\nvar oldAutocomplete = window.autocomplete;\n\nautocomplete.noConflict = function noConflict() {\n  if (wasAutocompleteSet) {\n    window.autocomplete = oldAutocomplete;\n  } else {\n    delete window.autocomplete;\n  }\n\n  return autocomplete;\n};\n\nmodule.exports = autocomplete;","module.exports = \"0.38.1\";","/* istanbul ignore next */\n\n/* Zepto v1.2.0 - zepto event assets data - zeptojs.com/license */\n(function (global, factory) {\n  module.exports = factory(global);\n})(\n/* this ##### UPDATED: here we want to use window/global instead of this which is the current file context ##### */\nwindow, function (window) {\n  var Zepto = function () {\n    var undefined,\n        key,\n        $,\n        classList,\n        emptyArray = [],\n        _concat = emptyArray.concat,\n        _filter = emptyArray.filter,\n        _slice = emptyArray.slice,\n        document = window.document,\n        elementDisplay = {},\n        classCache = {},\n        cssNumber = {\n      'column-count': 1,\n      'columns': 1,\n      'font-weight': 1,\n      'line-height': 1,\n      'opacity': 1,\n      'z-index': 1,\n      'zoom': 1\n    },\n        fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n        singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n        tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n        rootNodeRE = /^(?:body|html)$/i,\n        capitalRE = /([A-Z])/g,\n        // special attributes that should be get/set via method calls\n    methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n        adjacencyOperators = ['after', 'prepend', 'before', 'append'],\n        table = document.createElement('table'),\n        tableRow = document.createElement('tr'),\n        containers = {\n      'tr': document.createElement('tbody'),\n      'tbody': table,\n      'thead': table,\n      'tfoot': table,\n      'td': tableRow,\n      'th': tableRow,\n      '*': document.createElement('div')\n    },\n        readyRE = /complete|loaded|interactive/,\n        simpleSelectorRE = /^[\\w-]*$/,\n        class2type = {},\n        toString = class2type.toString,\n        zepto = {},\n        camelize,\n        uniq,\n        tempParent = document.createElement('div'),\n        propMap = {\n      'tabindex': 'tabIndex',\n      'readonly': 'readOnly',\n      'for': 'htmlFor',\n      'class': 'className',\n      'maxlength': 'maxLength',\n      'cellspacing': 'cellSpacing',\n      'cellpadding': 'cellPadding',\n      'rowspan': 'rowSpan',\n      'colspan': 'colSpan',\n      'usemap': 'useMap',\n      'frameborder': 'frameBorder',\n      'contenteditable': 'contentEditable'\n    },\n        isArray = Array.isArray || function (object) {\n      return object instanceof Array;\n    };\n\n    zepto.matches = function (element, selector) {\n      if (!selector || !element || element.nodeType !== 1) return false;\n      var matchesSelector = element.matches || element.webkitMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.matchesSelector;\n      if (matchesSelector) return matchesSelector.call(element, selector); // fall back to performing a selector:\n\n      var match,\n          parent = element.parentNode,\n          temp = !parent;\n      if (temp) (parent = tempParent).appendChild(element);\n      match = ~zepto.qsa(parent, selector).indexOf(element);\n      temp && tempParent.removeChild(element);\n      return match;\n    };\n\n    function type(obj) {\n      return obj == null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n    }\n\n    function isFunction(value) {\n      return type(value) == \"function\";\n    }\n\n    function isWindow(obj) {\n      return obj != null && obj == obj.window;\n    }\n\n    function isDocument(obj) {\n      return obj != null && obj.nodeType == obj.DOCUMENT_NODE;\n    }\n\n    function isObject(obj) {\n      return type(obj) == \"object\";\n    }\n\n    function isPlainObject(obj) {\n      return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n    }\n\n    function likeArray(obj) {\n      var length = !!obj && 'length' in obj && obj.length,\n          type = $.type(obj);\n      return 'function' != type && !isWindow(obj) && ('array' == type || length === 0 || typeof length == 'number' && length > 0 && length - 1 in obj);\n    }\n\n    function compact(array) {\n      return _filter.call(array, function (item) {\n        return item != null;\n      });\n    }\n\n    function flatten(array) {\n      return array.length > 0 ? $.fn.concat.apply([], array) : array;\n    }\n\n    camelize = function camelize(str) {\n      return str.replace(/-+(.)?/g, function (match, chr) {\n        return chr ? chr.toUpperCase() : '';\n      });\n    };\n\n    function dasherize(str) {\n      return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase();\n    }\n\n    uniq = function uniq(array) {\n      return _filter.call(array, function (item, idx) {\n        return array.indexOf(item) == idx;\n      });\n    };\n\n    function classRE(name) {\n      return name in classCache ? classCache[name] : classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)');\n    }\n\n    function maybeAddPx(name, value) {\n      return typeof value == \"number\" && !cssNumber[dasherize(name)] ? value + \"px\" : value;\n    }\n\n    function defaultDisplay(nodeName) {\n      var element, display;\n\n      if (!elementDisplay[nodeName]) {\n        element = document.createElement(nodeName);\n        document.body.appendChild(element);\n        display = getComputedStyle(element, '').getPropertyValue(\"display\");\n        element.parentNode.removeChild(element);\n        display == \"none\" && (display = \"block\");\n        elementDisplay[nodeName] = display;\n      }\n\n      return elementDisplay[nodeName];\n    }\n\n    function _children(element) {\n      return 'children' in element ? _slice.call(element.children) : $.map(element.childNodes, function (node) {\n        if (node.nodeType == 1) return node;\n      });\n    }\n\n    function Z(dom, selector) {\n      var i,\n          len = dom ? dom.length : 0;\n\n      for (i = 0; i < len; i++) {\n        this[i] = dom[i];\n      }\n\n      this.length = len;\n      this.selector = selector || '';\n    } // `$.zepto.fragment` takes a html string and an optional tag name\n    // to generate DOM nodes from the given html string.\n    // The generated DOM nodes are returned as an array.\n    // This function can be overridden in plugins for example to make\n    // it compatible with browsers that don't support the DOM fully.\n\n\n    zepto.fragment = function (html, name, properties) {\n      var dom, nodes, container; // A special case optimization for a single tag\n\n      if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1));\n\n      if (!dom) {\n        if (html.replace) html = html.replace(tagExpanderRE, \"<$1>\");\n        if (name === undefined) name = fragmentRE.test(html) && RegExp.$1;\n        if (!(name in containers)) name = '*';\n        container = containers[name];\n        container.innerHTML = '' + html;\n        dom = $.each(_slice.call(container.childNodes), function () {\n          container.removeChild(this);\n        });\n      }\n\n      if (isPlainObject(properties)) {\n        nodes = $(dom);\n        $.each(properties, function (key, value) {\n          if (methodAttributes.indexOf(key) > -1) nodes[key](value);else nodes.attr(key, value);\n        });\n      }\n\n      return dom;\n    }; // `$.zepto.Z` swaps out the prototype of the given `dom` array\n    // of nodes with `$.fn` and thus supplying all the Zepto functions\n    // to the array. This method can be overridden in plugins.\n\n\n    zepto.Z = function (dom, selector) {\n      return new Z(dom, selector);\n    }; // `$.zepto.isZ` should return `true` if the given object is a Zepto\n    // collection. This method can be overridden in plugins.\n\n\n    zepto.isZ = function (object) {\n      return object instanceof zepto.Z;\n    }; // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n    // takes a CSS selector and an optional context (and handles various\n    // special cases).\n    // This method can be overridden in plugins.\n\n\n    zepto.init = function (selector, context) {\n      var dom; // If nothing given, return an empty Zepto collection\n\n      if (!selector) return zepto.Z(); // Optimize for string selectors\n      else if (typeof selector == 'string') {\n        selector = selector.trim(); // If it's a html fragment, create nodes from it\n        // Note: In both Chrome 21 and Firefox 15, DOM error 12\n        // is thrown if the fragment doesn't begin with <\n\n        if (selector[0] == '<' && fragmentRE.test(selector)) dom = zepto.fragment(selector, RegExp.$1, context), selector = null; // If there's a context, create a collection on that context first, and select\n        // nodes from there\n        else if (context !== undefined) return $(context).find(selector); // If it's a CSS selector, use it to select nodes.\n        else dom = zepto.qsa(document, selector);\n      } // If a function is given, call it when the DOM is ready\n      else if (isFunction(selector)) return $(document).ready(selector); // If a Zepto collection is given, just return it\n      else if (zepto.isZ(selector)) return selector;else {\n        // normalize array if an array of nodes is given\n        if (isArray(selector)) dom = compact(selector); // Wrap DOM nodes.\n        else if (isObject(selector)) dom = [selector], selector = null; // If it's a html fragment, create nodes from it\n        else if (fragmentRE.test(selector)) dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null; // If there's a context, create a collection on that context first, and select\n        // nodes from there\n        else if (context !== undefined) return $(context).find(selector); // And last but no least, if it's a CSS selector, use it to select nodes.\n        else dom = zepto.qsa(document, selector);\n      } // create a new Zepto collection from the nodes found\n\n      return zepto.Z(dom, selector);\n    }; // `$` will be the base `Zepto` object. When calling this\n    // function just call `$.zepto.init, which makes the implementation\n    // details of selecting nodes and creating Zepto collections\n    // patchable in plugins.\n\n\n    $ = function $(selector, context) {\n      return zepto.init(selector, context);\n    };\n\n    function extend(target, source, deep) {\n      for (key in source) {\n        if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n          if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {};\n          if (isArray(source[key]) && !isArray(target[key])) target[key] = [];\n          extend(target[key], source[key], deep);\n        } else if (source[key] !== undefined) target[key] = source[key];\n      }\n    } // Copy all but undefined properties from one or more\n    // objects to the `target` object.\n\n\n    $.extend = function (target) {\n      var deep,\n          args = _slice.call(arguments, 1);\n\n      if (typeof target == 'boolean') {\n        deep = target;\n        target = args.shift();\n      }\n\n      args.forEach(function (arg) {\n        extend(target, arg, deep);\n      });\n      return target;\n    }; // `$.zepto.qsa` is Zepto's CSS selector implementation which\n    // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n    // This method can be overridden in plugins.\n\n\n    zepto.qsa = function (element, selector) {\n      var found,\n          maybeID = selector[0] == '#',\n          maybeClass = !maybeID && selector[0] == '.',\n          nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\n          // Ensure that a 1 char tag name still gets checked\n      isSimple = simpleSelectorRE.test(nameOnly);\n      return element.getElementById && isSimple && maybeID ? // Safari DocumentFragment doesn't have getElementById\n      (found = element.getElementById(nameOnly)) ? [found] : [] : element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11 ? [] : _slice.call(isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n      maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n      element.getElementsByTagName(selector) : // Or a tag\n      element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n      );\n    };\n\n    function filtered(nodes, selector) {\n      return selector == null ? $(nodes) : $(nodes).filter(selector);\n    }\n\n    $.contains = document.documentElement.contains ? function (parent, node) {\n      return parent !== node && parent.contains(node);\n    } : function (parent, node) {\n      while (node && (node = node.parentNode)) {\n        if (node === parent) return true;\n      }\n\n      return false;\n    };\n\n    function funcArg(context, arg, idx, payload) {\n      return isFunction(arg) ? arg.call(context, idx, payload) : arg;\n    }\n\n    function setAttribute(node, name, value) {\n      value == null ? node.removeAttribute(name) : node.setAttribute(name, value);\n    } // access className property while respecting SVGAnimatedString\n\n\n    function className(node, value) {\n      var klass = node.className || '',\n          svg = klass && klass.baseVal !== undefined;\n      if (value === undefined) return svg ? klass.baseVal : klass;\n      svg ? klass.baseVal = value : node.className = value;\n    } // \"true\"  => true\n    // \"false\" => false\n    // \"null\"  => null\n    // \"42\"    => 42\n    // \"42.5\"  => 42.5\n    // \"08\"    => \"08\"\n    // JSON    => parse if valid\n    // String  => self\n\n\n    function deserializeValue(value) {\n      try {\n        return value ? value == \"true\" || (value == \"false\" ? false : value == \"null\" ? null : +value + \"\" == value ? +value : /^[\\[\\{]/.test(value) ? $.parseJSON(value) : value) : value;\n      } catch (e) {\n        return value;\n      }\n    }\n\n    $.type = type;\n    $.isFunction = isFunction;\n    $.isWindow = isWindow;\n    $.isArray = isArray;\n    $.isPlainObject = isPlainObject;\n\n    $.isEmptyObject = function (obj) {\n      var name;\n\n      for (name in obj) {\n        return false;\n      }\n\n      return true;\n    };\n\n    $.isNumeric = function (val) {\n      var num = Number(val),\n          type = typeof val;\n      return val != null && type != 'boolean' && (type != 'string' || val.length) && !isNaN(num) && isFinite(num) || false;\n    };\n\n    $.inArray = function (elem, array, i) {\n      return emptyArray.indexOf.call(array, elem, i);\n    };\n\n    $.camelCase = camelize;\n\n    $.trim = function (str) {\n      return str == null ? \"\" : String.prototype.trim.call(str);\n    }; // plugin compatibility\n\n\n    $.uuid = 0;\n    $.support = {};\n    $.expr = {};\n\n    $.noop = function () {};\n\n    $.map = function (elements, callback) {\n      var value,\n          values = [],\n          i,\n          key;\n      if (likeArray(elements)) for (i = 0; i < elements.length; i++) {\n        value = callback(elements[i], i);\n        if (value != null) values.push(value);\n      } else for (key in elements) {\n        value = callback(elements[key], key);\n        if (value != null) values.push(value);\n      }\n      return flatten(values);\n    };\n\n    $.each = function (elements, callback) {\n      var i, key;\n\n      if (likeArray(elements)) {\n        for (i = 0; i < elements.length; i++) {\n          if (callback.call(elements[i], i, elements[i]) === false) return elements;\n        }\n      } else {\n        for (key in elements) {\n          if (callback.call(elements[key], key, elements[key]) === false) return elements;\n        }\n      }\n\n      return elements;\n    };\n\n    $.grep = function (elements, callback) {\n      return _filter.call(elements, callback);\n    };\n\n    if (window.JSON) $.parseJSON = JSON.parse; // Populate the class2type map\n\n    $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function (i, name) {\n      class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n    }); // Define methods that will be available on all\n    // Zepto collections\n\n    $.fn = {\n      constructor: zepto.Z,\n      length: 0,\n      // Because a collection acts like an array\n      // copy over these useful array functions.\n      forEach: emptyArray.forEach,\n      reduce: emptyArray.reduce,\n      push: emptyArray.push,\n      sort: emptyArray.sort,\n      splice: emptyArray.splice,\n      indexOf: emptyArray.indexOf,\n      concat: function concat() {\n        var i,\n            value,\n            args = [];\n\n        for (i = 0; i < arguments.length; i++) {\n          value = arguments[i];\n          args[i] = zepto.isZ(value) ? value.toArray() : value;\n        }\n\n        return _concat.apply(zepto.isZ(this) ? this.toArray() : this, args);\n      },\n      // `map` and `slice` in the jQuery API work differently\n      // from their array counterparts\n      map: function map(fn) {\n        return $($.map(this, function (el, i) {\n          return fn.call(el, i, el);\n        }));\n      },\n      slice: function slice() {\n        return $(_slice.apply(this, arguments));\n      },\n      ready: function ready(callback) {\n        // need to check if document.body exists for IE as that browser reports\n        // document ready when it hasn't yet created the body element\n        if (readyRE.test(document.readyState) && document.body) callback($);else document.addEventListener('DOMContentLoaded', function () {\n          callback($);\n        }, false);\n        return this;\n      },\n      get: function get(idx) {\n        return idx === undefined ? _slice.call(this) : this[idx >= 0 ? idx : idx + this.length];\n      },\n      toArray: function toArray() {\n        return this.get();\n      },\n      size: function size() {\n        return this.length;\n      },\n      remove: function remove() {\n        return this.each(function () {\n          if (this.parentNode != null) this.parentNode.removeChild(this);\n        });\n      },\n      each: function each(callback) {\n        emptyArray.every.call(this, function (el, idx) {\n          return callback.call(el, idx, el) !== false;\n        });\n        return this;\n      },\n      filter: function filter(selector) {\n        if (isFunction(selector)) return this.not(this.not(selector));\n        return $(_filter.call(this, function (element) {\n          return zepto.matches(element, selector);\n        }));\n      },\n      add: function add(selector, context) {\n        return $(uniq(this.concat($(selector, context))));\n      },\n      is: function is(selector) {\n        return this.length > 0 && zepto.matches(this[0], selector);\n      },\n      not: function not(selector) {\n        var nodes = [];\n        if (isFunction(selector) && selector.call !== undefined) this.each(function (idx) {\n          if (!selector.call(this, idx)) nodes.push(this);\n        });else {\n          var excludes = typeof selector == 'string' ? this.filter(selector) : likeArray(selector) && isFunction(selector.item) ? _slice.call(selector) : $(selector);\n          this.forEach(function (el) {\n            if (excludes.indexOf(el) < 0) nodes.push(el);\n          });\n        }\n        return $(nodes);\n      },\n      has: function has(selector) {\n        return this.filter(function () {\n          return isObject(selector) ? $.contains(this, selector) : $(this).find(selector).size();\n        });\n      },\n      eq: function eq(idx) {\n        return idx === -1 ? this.slice(idx) : this.slice(idx, +idx + 1);\n      },\n      first: function first() {\n        var el = this[0];\n        return el && !isObject(el) ? el : $(el);\n      },\n      last: function last() {\n        var el = this[this.length - 1];\n        return el && !isObject(el) ? el : $(el);\n      },\n      find: function find(selector) {\n        var result,\n            $this = this;\n        if (!selector) result = $();else if (typeof selector == 'object') result = $(selector).filter(function () {\n          var node = this;\n          return emptyArray.some.call($this, function (parent) {\n            return $.contains(parent, node);\n          });\n        });else if (this.length == 1) result = $(zepto.qsa(this[0], selector));else result = this.map(function () {\n          return zepto.qsa(this, selector);\n        });\n        return result;\n      },\n      closest: function closest(selector, context) {\n        var nodes = [],\n            collection = typeof selector == 'object' && $(selector);\n        this.each(function (_, node) {\n          while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector))) {\n            node = node !== context && !isDocument(node) && node.parentNode;\n          }\n\n          if (node && nodes.indexOf(node) < 0) nodes.push(node);\n        });\n        return $(nodes);\n      },\n      parents: function parents(selector) {\n        var ancestors = [],\n            nodes = this;\n\n        while (nodes.length > 0) {\n          nodes = $.map(nodes, function (node) {\n            if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n              ancestors.push(node);\n              return node;\n            }\n          });\n        }\n\n        return filtered(ancestors, selector);\n      },\n      parent: function parent(selector) {\n        return filtered(uniq(this.pluck('parentNode')), selector);\n      },\n      children: function children(selector) {\n        return filtered(this.map(function () {\n          return _children(this);\n        }), selector);\n      },\n      contents: function contents() {\n        return this.map(function () {\n          return this.contentDocument || _slice.call(this.childNodes);\n        });\n      },\n      siblings: function siblings(selector) {\n        return filtered(this.map(function (i, el) {\n          return _filter.call(_children(el.parentNode), function (child) {\n            return child !== el;\n          });\n        }), selector);\n      },\n      empty: function empty() {\n        return this.each(function () {\n          this.innerHTML = '';\n        });\n      },\n      // `pluck` is borrowed from Prototype.js\n      pluck: function pluck(property) {\n        return $.map(this, function (el) {\n          return el[property];\n        });\n      },\n      show: function show() {\n        return this.each(function () {\n          this.style.display == \"none\" && (this.style.display = '');\n          if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\") this.style.display = defaultDisplay(this.nodeName);\n        });\n      },\n      replaceWith: function replaceWith(newContent) {\n        return this.before(newContent).remove();\n      },\n      wrap: function wrap(structure) {\n        var func = isFunction(structure);\n        if (this[0] && !func) var dom = $(structure).get(0),\n            clone = dom.parentNode || this.length > 1;\n        return this.each(function (index) {\n          $(this).wrapAll(func ? structure.call(this, index) : clone ? dom.cloneNode(true) : dom);\n        });\n      },\n      wrapAll: function wrapAll(structure) {\n        if (this[0]) {\n          $(this[0]).before(structure = $(structure));\n          var children; // drill down to the inmost element\n\n          while ((children = structure.children()).length) {\n            structure = children.first();\n          }\n\n          $(structure).append(this);\n        }\n\n        return this;\n      },\n      wrapInner: function wrapInner(structure) {\n        var func = isFunction(structure);\n        return this.each(function (index) {\n          var self = $(this),\n              contents = self.contents(),\n              dom = func ? structure.call(this, index) : structure;\n          contents.length ? contents.wrapAll(dom) : self.append(dom);\n        });\n      },\n      unwrap: function unwrap() {\n        this.parent().each(function () {\n          $(this).replaceWith($(this).children());\n        });\n        return this;\n      },\n      clone: function clone() {\n        return this.map(function () {\n          return this.cloneNode(true);\n        });\n      },\n      hide: function hide() {\n        return this.css(\"display\", \"none\");\n      },\n      toggle: function toggle(setting) {\n        return this.each(function () {\n          var el = $(this);\n          (setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide();\n        });\n      },\n      prev: function prev(selector) {\n        return $(this.pluck('previousElementSibling')).filter(selector || '*');\n      },\n      next: function next(selector) {\n        return $(this.pluck('nextElementSibling')).filter(selector || '*');\n      },\n      html: function html(_html) {\n        return 0 in arguments ? this.each(function (idx) {\n          var originHtml = this.innerHTML;\n          $(this).empty().append(funcArg(this, _html, idx, originHtml));\n        }) : 0 in this ? this[0].innerHTML : null;\n      },\n      text: function text(_text) {\n        return 0 in arguments ? this.each(function (idx) {\n          var newText = funcArg(this, _text, idx, this.textContent);\n          this.textContent = newText == null ? '' : '' + newText;\n        }) : 0 in this ? this.pluck('textContent').join(\"\") : null;\n      },\n      attr: function attr(name, value) {\n        var result;\n        return typeof name == 'string' && !(1 in arguments) ? 0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined : this.each(function (idx) {\n          if (this.nodeType !== 1) return;\n          if (isObject(name)) for (key in name) {\n            setAttribute(this, key, name[key]);\n          } else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)));\n        });\n      },\n      removeAttr: function removeAttr(name) {\n        return this.each(function () {\n          this.nodeType === 1 && name.split(' ').forEach(function (attribute) {\n            setAttribute(this, attribute);\n          }, this);\n        });\n      },\n      prop: function prop(name, value) {\n        name = propMap[name] || name;\n        return 1 in arguments ? this.each(function (idx) {\n          this[name] = funcArg(this, value, idx, this[name]);\n        }) : this[0] && this[0][name];\n      },\n      removeProp: function removeProp(name) {\n        name = propMap[name] || name;\n        return this.each(function () {\n          delete this[name];\n        });\n      },\n      data: function data(name, value) {\n        var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase();\n        var data = 1 in arguments ? this.attr(attrName, value) : this.attr(attrName);\n        return data !== null ? deserializeValue(data) : undefined;\n      },\n      val: function val(value) {\n        if (0 in arguments) {\n          if (value == null) value = \"\";\n          return this.each(function (idx) {\n            this.value = funcArg(this, value, idx, this.value);\n          });\n        } else {\n          return this[0] && (this[0].multiple ? $(this[0]).find('option').filter(function () {\n            return this.selected;\n          }).pluck('value') : this[0].value);\n        }\n      },\n      offset: function offset(coordinates) {\n        if (coordinates) return this.each(function (index) {\n          var $this = $(this),\n              coords = funcArg(this, coordinates, index, $this.offset()),\n              parentOffset = $this.offsetParent().offset(),\n              props = {\n            top: coords.top - parentOffset.top,\n            left: coords.left - parentOffset.left\n          };\n          if ($this.css('position') == 'static') props['position'] = 'relative';\n          $this.css(props);\n        });\n        if (!this.length) return null;\n        if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0])) return {\n          top: 0,\n          left: 0\n        };\n        var obj = this[0].getBoundingClientRect();\n        return {\n          left: obj.left + window.pageXOffset,\n          top: obj.top + window.pageYOffset,\n          width: Math.round(obj.width),\n          height: Math.round(obj.height)\n        };\n      },\n      css: function css(property, value) {\n        if (arguments.length < 2) {\n          var element = this[0];\n\n          if (typeof property == 'string') {\n            if (!element) return;\n            return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property);\n          } else if (isArray(property)) {\n            if (!element) return;\n            var props = {};\n            var computedStyle = getComputedStyle(element, '');\n            $.each(property, function (_, prop) {\n              props[prop] = element.style[camelize(prop)] || computedStyle.getPropertyValue(prop);\n            });\n            return props;\n          }\n        }\n\n        var css = '';\n\n        if (type(property) == 'string') {\n          if (!value && value !== 0) this.each(function () {\n            this.style.removeProperty(dasherize(property));\n          });else css = dasherize(property) + \":\" + maybeAddPx(property, value);\n        } else {\n          for (key in property) {\n            if (!property[key] && property[key] !== 0) this.each(function () {\n              this.style.removeProperty(dasherize(key));\n            });else css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';';\n          }\n        }\n\n        return this.each(function () {\n          this.style.cssText += ';' + css;\n        });\n      },\n      index: function index(element) {\n        return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]);\n      },\n      hasClass: function hasClass(name) {\n        if (!name) return false;\n        return emptyArray.some.call(this, function (el) {\n          return this.test(className(el));\n        }, classRE(name));\n      },\n      addClass: function addClass(name) {\n        if (!name) return this;\n        return this.each(function (idx) {\n          if (!('className' in this)) return;\n          classList = [];\n          var cls = className(this),\n              newName = funcArg(this, name, idx, cls);\n          newName.split(/\\s+/g).forEach(function (klass) {\n            if (!$(this).hasClass(klass)) classList.push(klass);\n          }, this);\n          classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"));\n        });\n      },\n      removeClass: function removeClass(name) {\n        return this.each(function (idx) {\n          if (!('className' in this)) return;\n          if (name === undefined) return className(this, '');\n          classList = className(this);\n          funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function (klass) {\n            classList = classList.replace(classRE(klass), \" \");\n          });\n          className(this, classList.trim());\n        });\n      },\n      toggleClass: function toggleClass(name, when) {\n        if (!name) return this;\n        return this.each(function (idx) {\n          var $this = $(this),\n              names = funcArg(this, name, idx, className(this));\n          names.split(/\\s+/g).forEach(function (klass) {\n            (when === undefined ? !$this.hasClass(klass) : when) ? $this.addClass(klass) : $this.removeClass(klass);\n          });\n        });\n      },\n      scrollTop: function scrollTop(value) {\n        if (!this.length) return;\n        var hasScrollTop = ('scrollTop' in this[0]);\n        if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset;\n        return this.each(hasScrollTop ? function () {\n          this.scrollTop = value;\n        } : function () {\n          this.scrollTo(this.scrollX, value);\n        });\n      },\n      scrollLeft: function scrollLeft(value) {\n        if (!this.length) return;\n        var hasScrollLeft = ('scrollLeft' in this[0]);\n        if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset;\n        return this.each(hasScrollLeft ? function () {\n          this.scrollLeft = value;\n        } : function () {\n          this.scrollTo(value, this.scrollY);\n        });\n      },\n      position: function position() {\n        if (!this.length) return;\n        var elem = this[0],\n            // Get *real* offsetParent\n        offsetParent = this.offsetParent(),\n            // Get correct offsets\n        offset = this.offset(),\n            parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? {\n          top: 0,\n          left: 0\n        } : offsetParent.offset(); // Subtract element margins\n        // note: when an element has margin: auto the offsetLeft and marginLeft\n        // are the same in Safari causing offset.left to incorrectly be 0\n\n        offset.top -= parseFloat($(elem).css('margin-top')) || 0;\n        offset.left -= parseFloat($(elem).css('margin-left')) || 0; // Add offsetParent borders\n\n        parentOffset.top += parseFloat($(offsetParent[0]).css('border-top-width')) || 0;\n        parentOffset.left += parseFloat($(offsetParent[0]).css('border-left-width')) || 0; // Subtract the two offsets\n\n        return {\n          top: offset.top - parentOffset.top,\n          left: offset.left - parentOffset.left\n        };\n      },\n      offsetParent: function offsetParent() {\n        return this.map(function () {\n          var parent = this.offsetParent || document.body;\n\n          while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\") {\n            parent = parent.offsetParent;\n          }\n\n          return parent;\n        });\n      }\n    }; // for now\n\n    $.fn.detach = $.fn.remove // Generate the `width` and `height` functions\n    ;\n    ['width', 'height'].forEach(function (dimension) {\n      var dimensionProperty = dimension.replace(/./, function (m) {\n        return m[0].toUpperCase();\n      });\n\n      $.fn[dimension] = function (value) {\n        var offset,\n            el = this[0];\n        if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] : isDocument(el) ? el.documentElement['scroll' + dimensionProperty] : (offset = this.offset()) && offset[dimension];else return this.each(function (idx) {\n          el = $(this);\n          el.css(dimension, funcArg(this, value, idx, el[dimension]()));\n        });\n      };\n    });\n\n    function traverseNode(node, fun) {\n      fun(node);\n\n      for (var i = 0, len = node.childNodes.length; i < len; i++) {\n        traverseNode(node.childNodes[i], fun);\n      }\n    } // Generate the `after`, `prepend`, `before`, `append`,\n    // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n\n\n    adjacencyOperators.forEach(function (operator, operatorIndex) {\n      var inside = operatorIndex % 2; //=> prepend, append\n\n      $.fn[operator] = function () {\n        // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n        var argType,\n            nodes = $.map(arguments, function (arg) {\n          var arr = [];\n          argType = type(arg);\n\n          if (argType == \"array\") {\n            arg.forEach(function (el) {\n              if (el.nodeType !== undefined) return arr.push(el);else if ($.zepto.isZ(el)) return arr = arr.concat(el.get());\n              arr = arr.concat(zepto.fragment(el));\n            });\n            return arr;\n          }\n\n          return argType == \"object\" || arg == null ? arg : zepto.fragment(arg);\n        }),\n            parent,\n            copyByClone = this.length > 1;\n        if (nodes.length < 1) return this;\n        return this.each(function (_, target) {\n          parent = inside ? target : target.parentNode; // convert all methods to a \"before\" operation\n\n          target = operatorIndex == 0 ? target.nextSibling : operatorIndex == 1 ? target.firstChild : operatorIndex == 2 ? target : null;\n          var parentInDocument = $.contains(document.documentElement, parent);\n          nodes.forEach(function (node) {\n            if (copyByClone) node = node.cloneNode(true);else if (!parent) return $(node).remove();\n            parent.insertBefore(node, target);\n            if (parentInDocument) traverseNode(node, function (el) {\n              if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && (!el.type || el.type === 'text/javascript') && !el.src) {\n                var target = el.ownerDocument ? el.ownerDocument.defaultView : window;\n                target['eval'].call(target, el.innerHTML);\n              }\n            });\n          });\n        });\n      }; // after    => insertAfter\n      // prepend  => prependTo\n      // before   => insertBefore\n      // append   => appendTo\n\n\n      $.fn[inside ? operator + 'To' : 'insert' + (operatorIndex ? 'Before' : 'After')] = function (html) {\n        $(html)[operator](this);\n        return this;\n      };\n    });\n    zepto.Z.prototype = Z.prototype = $.fn; // Export internal API functions in the `$.zepto` namespace\n\n    zepto.uniq = uniq;\n    zepto.deserializeValue = deserializeValue;\n    $.zepto = zepto;\n    return $;\n  }();\n\n  (function ($) {\n    var _zid = 1,\n        undefined,\n        slice = Array.prototype.slice,\n        isFunction = $.isFunction,\n        isString = function isString(obj) {\n      return typeof obj == 'string';\n    },\n        handlers = {},\n        specialEvents = {},\n        focusinSupported = ('onfocusin' in window),\n        focus = {\n      focus: 'focusin',\n      blur: 'focusout'\n    },\n        hover = {\n      mouseenter: 'mouseover',\n      mouseleave: 'mouseout'\n    };\n\n    specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents';\n\n    function zid(element) {\n      return element._zid || (element._zid = _zid++);\n    }\n\n    function findHandlers(element, event, fn, selector) {\n      event = parse(event);\n      if (event.ns) var matcher = matcherFor(event.ns);\n      return (handlers[zid(element)] || []).filter(function (handler) {\n        return handler && (!event.e || handler.e == event.e) && (!event.ns || matcher.test(handler.ns)) && (!fn || zid(handler.fn) === zid(fn)) && (!selector || handler.sel == selector);\n      });\n    }\n\n    function parse(event) {\n      var parts = ('' + event).split('.');\n      return {\n        e: parts[0],\n        ns: parts.slice(1).sort().join(' ')\n      };\n    }\n\n    function matcherFor(ns) {\n      return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)');\n    }\n\n    function eventCapture(handler, captureSetting) {\n      return handler.del && !focusinSupported && handler.e in focus || !!captureSetting;\n    }\n\n    function realEvent(type) {\n      return hover[type] || focusinSupported && focus[type] || type;\n    }\n\n    function add(element, events, fn, data, selector, delegator, capture) {\n      var id = zid(element),\n          set = handlers[id] || (handlers[id] = []);\n      events.split(/\\s/).forEach(function (event) {\n        if (event == 'ready') return $(document).ready(fn);\n        var handler = parse(event);\n        handler.fn = fn;\n        handler.sel = selector; // emulate mouseenter, mouseleave\n\n        if (handler.e in hover) fn = function fn(e) {\n          var related = e.relatedTarget;\n          if (!related || related !== this && !$.contains(this, related)) return handler.fn.apply(this, arguments);\n        };\n        handler.del = delegator;\n        var callback = delegator || fn;\n\n        handler.proxy = function (e) {\n          e = compatible(e);\n          if (e.isImmediatePropagationStopped()) return;\n\n          try {\n            var dataPropDescriptor = Object.getOwnPropertyDescriptor(e, 'data');\n            if (!dataPropDescriptor || dataPropDescriptor.writable) e.data = data;\n          } catch (e) {} // when using strict mode dataPropDescriptor will be undefined when e is InputEvent (even though data property exists). So we surround with try/catch\n\n\n          var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args));\n          if (result === false) e.preventDefault(), e.stopPropagation();\n          return result;\n        };\n\n        handler.i = set.length;\n        set.push(handler);\n        if ('addEventListener' in element) element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n      });\n    }\n\n    function remove(element, events, fn, selector, capture) {\n      var id = zid(element);\n      (events || '').split(/\\s/).forEach(function (event) {\n        findHandlers(element, event, fn, selector).forEach(function (handler) {\n          delete handlers[id][handler.i];\n          if ('removeEventListener' in element) element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n        });\n      });\n    }\n\n    $.event = {\n      add: add,\n      remove: remove\n    };\n\n    $.proxy = function (fn, context) {\n      var args = 2 in arguments && slice.call(arguments, 2);\n\n      if (isFunction(fn)) {\n        var proxyFn = function proxyFn() {\n          return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments);\n        };\n\n        proxyFn._zid = zid(fn);\n        return proxyFn;\n      } else if (isString(context)) {\n        if (args) {\n          args.unshift(fn[context], fn);\n          return $.proxy.apply(null, args);\n        } else {\n          return $.proxy(fn[context], fn);\n        }\n      } else {\n        throw new TypeError(\"expected function\");\n      }\n    };\n\n    $.fn.bind = function (event, data, callback) {\n      return this.on(event, data, callback);\n    };\n\n    $.fn.unbind = function (event, callback) {\n      return this.off(event, callback);\n    };\n\n    $.fn.one = function (event, selector, data, callback) {\n      return this.on(event, selector, data, callback, 1);\n    };\n\n    var returnTrue = function returnTrue() {\n      return true;\n    },\n        returnFalse = function returnFalse() {\n      return false;\n    },\n        ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n        eventMethods = {\n      preventDefault: 'isDefaultPrevented',\n      stopImmediatePropagation: 'isImmediatePropagationStopped',\n      stopPropagation: 'isPropagationStopped'\n    };\n\n    function compatible(event, source) {\n      if (source || !event.isDefaultPrevented) {\n        source || (source = event);\n        $.each(eventMethods, function (name, predicate) {\n          var sourceMethod = source[name];\n\n          event[name] = function () {\n            this[predicate] = returnTrue;\n            return sourceMethod && sourceMethod.apply(source, arguments);\n          };\n\n          event[predicate] = returnFalse;\n        });\n\n        try {\n          event.timeStamp || (event.timeStamp = Date.now());\n        } catch (ignored) {}\n\n        if (source.defaultPrevented !== undefined ? source.defaultPrevented : 'returnValue' in source ? source.returnValue === false : source.getPreventDefault && source.getPreventDefault()) event.isDefaultPrevented = returnTrue;\n      }\n\n      return event;\n    }\n\n    function createProxy(event) {\n      var key,\n          proxy = {\n        originalEvent: event\n      };\n\n      for (key in event) {\n        if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key];\n      }\n\n      return compatible(proxy, event);\n    }\n\n    $.fn.delegate = function (selector, event, callback) {\n      return this.on(event, selector, callback);\n    };\n\n    $.fn.undelegate = function (selector, event, callback) {\n      return this.off(event, selector, callback);\n    };\n\n    $.fn.live = function (event, callback) {\n      $(document.body).delegate(this.selector, event, callback);\n      return this;\n    };\n\n    $.fn.die = function (event, callback) {\n      $(document.body).undelegate(this.selector, event, callback);\n      return this;\n    };\n\n    $.fn.on = function (event, selector, data, callback, one) {\n      var autoRemove,\n          delegator,\n          $this = this;\n\n      if (event && !isString(event)) {\n        $.each(event, function (type, fn) {\n          $this.on(type, selector, data, fn, one);\n        });\n        return $this;\n      }\n\n      if (!isString(selector) && !isFunction(callback) && callback !== false) callback = data, data = selector, selector = undefined;\n      if (callback === undefined || data === false) callback = data, data = undefined;\n      if (callback === false) callback = returnFalse;\n      return $this.each(function (_, element) {\n        if (one) autoRemove = function autoRemove(e) {\n          remove(element, e.type, callback);\n          return callback.apply(this, arguments);\n        };\n        if (selector) delegator = function delegator(e) {\n          var evt,\n              match = $(e.target).closest(selector, element).get(0);\n\n          if (match && match !== element) {\n            evt = $.extend(createProxy(e), {\n              currentTarget: match,\n              liveFired: element\n            });\n            return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)));\n          }\n        };\n        add(element, event, callback, data, selector, delegator || autoRemove);\n      });\n    };\n\n    $.fn.off = function (event, selector, callback) {\n      var $this = this;\n\n      if (event && !isString(event)) {\n        $.each(event, function (type, fn) {\n          $this.off(type, selector, fn);\n        });\n        return $this;\n      }\n\n      if (!isString(selector) && !isFunction(callback) && callback !== false) callback = selector, selector = undefined;\n      if (callback === false) callback = returnFalse;\n      return $this.each(function () {\n        remove(this, event, callback, selector);\n      });\n    };\n\n    $.fn.trigger = function (event, args) {\n      event = isString(event) || $.isPlainObject(event) ? $.Event(event) : compatible(event);\n      event._args = args;\n      return this.each(function () {\n        // handle focus(), blur() by calling them directly\n        if (event.type in focus && typeof this[event.type] == \"function\") this[event.type](); // items in the collection might not be DOM elements\n        else if ('dispatchEvent' in this) this.dispatchEvent(event);else $(this).triggerHandler(event, args);\n      });\n    }; // triggers event handlers on current element just as if an event occurred,\n    // doesn't trigger an actual event, doesn't bubble\n\n\n    $.fn.triggerHandler = function (event, args) {\n      var e, result;\n      this.each(function (i, element) {\n        e = createProxy(isString(event) ? $.Event(event) : event);\n        e._args = args;\n        e.target = element;\n        $.each(findHandlers(element, event.type || event), function (i, handler) {\n          result = handler.proxy(e);\n          if (e.isImmediatePropagationStopped()) return false;\n        });\n      });\n      return result;\n    } // shortcut methods for `.bind(event, fn)` for each event type\n    ;\n\n    ('focusin focusout focus blur load resize scroll unload click dblclick ' + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave ' + 'change select keydown keypress keyup error').split(' ').forEach(function (event) {\n      $.fn[event] = function (callback) {\n        return 0 in arguments ? this.bind(event, callback) : this.trigger(event);\n      };\n    });\n\n    $.Event = function (type, props) {\n      if (!isString(type)) props = type, type = props.type;\n      var event = document.createEvent(specialEvents[type] || 'Events'),\n          bubbles = true;\n      if (props) for (var name in props) {\n        name == 'bubbles' ? bubbles = !!props[name] : event[name] = props[name];\n      }\n      event.initEvent(type, bubbles, true);\n      return compatible(event);\n    };\n  })(Zepto);\n\n  (function ($) {\n    var cache = [],\n        timeout;\n\n    $.fn.remove = function () {\n      return this.each(function () {\n        if (this.parentNode) {\n          if (this.tagName === 'IMG') {\n            cache.push(this);\n            this.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n            if (timeout) clearTimeout(timeout);\n            timeout = setTimeout(function () {\n              cache = [];\n            }, 60000);\n          }\n\n          this.parentNode.removeChild(this);\n        }\n      });\n    };\n  })(Zepto);\n\n  (function ($) {\n    var data = {},\n        dataAttr = $.fn.data,\n        camelize = $.camelCase,\n        exp = $.expando = 'Zepto' + +new Date(),\n        emptyArray = []; // Get value from node:\n    // 1. first try key as given,\n    // 2. then try camelized key,\n    // 3. fall back to reading \"data-*\" attribute.\n\n    function getData(node, name) {\n      var id = node[exp],\n          store = id && data[id];\n      if (name === undefined) return store || setData(node);else {\n        if (store) {\n          if (name in store) return store[name];\n          var camelName = camelize(name);\n          if (camelName in store) return store[camelName];\n        }\n\n        return dataAttr.call($(node), name);\n      }\n    } // Store value under camelized key on node\n\n\n    function setData(node, name, value) {\n      var id = node[exp] || (node[exp] = ++$.uuid),\n          store = data[id] || (data[id] = attributeData(node));\n      if (name !== undefined) store[camelize(name)] = value;\n      return store;\n    } // Read all \"data-*\" attributes from a node\n\n\n    function attributeData(node) {\n      var store = {};\n      $.each(node.attributes || emptyArray, function (i, attr) {\n        if (attr.name.indexOf('data-') == 0) store[camelize(attr.name.replace('data-', ''))] = $.zepto.deserializeValue(attr.value);\n      });\n      return store;\n    }\n\n    $.fn.data = function (name, value) {\n      return value === undefined ? // set multiple values via object\n      $.isPlainObject(name) ? this.each(function (i, node) {\n        $.each(name, function (key, value) {\n          setData(node, key, value);\n        });\n      }) : // get value from first element\n      0 in this ? getData(this[0], name) : undefined : // set value on all elements\n      this.each(function () {\n        setData(this, name, value);\n      });\n    };\n\n    $.data = function (elem, name, value) {\n      return $(elem).data(name, value);\n    };\n\n    $.hasData = function (elem) {\n      var id = elem[exp],\n          store = id && data[id];\n      return store ? !$.isEmptyObject(store) : false;\n    };\n\n    $.fn.removeData = function (names) {\n      if (typeof names == 'string') names = names.split(/\\s+/);\n      return this.each(function () {\n        var id = this[exp],\n            store = id && data[id];\n        if (store) $.each(names || store, function (key) {\n          delete store[names ? camelize(this) : key];\n        });\n      });\n    } // Generate extended `remove` and `empty` functions\n    ;\n\n    ['remove', 'empty'].forEach(function (methodName) {\n      var origFn = $.fn[methodName];\n\n      $.fn[methodName] = function () {\n        var elements = this.find('*');\n        if (methodName === 'remove') elements = elements.add(this);\n        elements.removeData();\n        return origFn.call(this);\n      };\n    });\n  })(Zepto);\n\n  return Zepto;\n});","/*\n *  Copyright 2011 Twitter, Inc.\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(function (Hogan) {\n  // Setup regex  assignments\n  // remove whitespace according to Mustache spec\n  var rIsWhitespace = /\\S/,\n      rQuot = /\\\"/g,\n      rNewline = /\\n/g,\n      rCr = /\\r/g,\n      rSlash = /\\\\/g,\n      rLineSep = /\\u2028/,\n      rParagraphSep = /\\u2029/;\n  Hogan.tags = {\n    '#': 1,\n    '^': 2,\n    '<': 3,\n    '$': 4,\n    '/': 5,\n    '!': 6,\n    '>': 7,\n    '=': 8,\n    '_v': 9,\n    '{': 10,\n    '&': 11,\n    '_t': 12\n  };\n\n  Hogan.scan = function scan(text, delimiters) {\n    var len = text.length,\n        IN_TEXT = 0,\n        IN_TAG_TYPE = 1,\n        IN_TAG = 2,\n        state = IN_TEXT,\n        tagType = null,\n        tag = null,\n        buf = '',\n        tokens = [],\n        seenTag = false,\n        i = 0,\n        lineStart = 0,\n        otag = '{{',\n        ctag = '}}';\n\n    function addBuf() {\n      if (buf.length > 0) {\n        tokens.push({\n          tag: '_t',\n          text: new String(buf)\n        });\n        buf = '';\n      }\n    }\n\n    function lineIsWhitespace() {\n      var isAllWhitespace = true;\n\n      for (var j = lineStart; j < tokens.length; j++) {\n        isAllWhitespace = Hogan.tags[tokens[j].tag] < Hogan.tags['_v'] || tokens[j].tag == '_t' && tokens[j].text.match(rIsWhitespace) === null;\n\n        if (!isAllWhitespace) {\n          return false;\n        }\n      }\n\n      return isAllWhitespace;\n    }\n\n    function filterLine(haveSeenTag, noNewLine) {\n      addBuf();\n\n      if (haveSeenTag && lineIsWhitespace()) {\n        for (var j = lineStart, next; j < tokens.length; j++) {\n          if (tokens[j].text) {\n            if ((next = tokens[j + 1]) && next.tag == '>') {\n              // set indent to token value\n              next.indent = tokens[j].text.toString();\n            }\n\n            tokens.splice(j, 1);\n          }\n        }\n      } else if (!noNewLine) {\n        tokens.push({\n          tag: '\\n'\n        });\n      }\n\n      seenTag = false;\n      lineStart = tokens.length;\n    }\n\n    function changeDelimiters(text, index) {\n      var close = '=' + ctag,\n          closeIndex = text.indexOf(close, index),\n          delimiters = trim(text.substring(text.indexOf('=', index) + 1, closeIndex)).split(' ');\n      otag = delimiters[0];\n      ctag = delimiters[delimiters.length - 1];\n      return closeIndex + close.length - 1;\n    }\n\n    if (delimiters) {\n      delimiters = delimiters.split(' ');\n      otag = delimiters[0];\n      ctag = delimiters[1];\n    }\n\n    for (i = 0; i < len; i++) {\n      if (state == IN_TEXT) {\n        if (tagChange(otag, text, i)) {\n          --i;\n          addBuf();\n          state = IN_TAG_TYPE;\n        } else {\n          if (text.charAt(i) == '\\n') {\n            filterLine(seenTag);\n          } else {\n            buf += text.charAt(i);\n          }\n        }\n      } else if (state == IN_TAG_TYPE) {\n        i += otag.length - 1;\n        tag = Hogan.tags[text.charAt(i + 1)];\n        tagType = tag ? text.charAt(i + 1) : '_v';\n\n        if (tagType == '=') {\n          i = changeDelimiters(text, i);\n          state = IN_TEXT;\n        } else {\n          if (tag) {\n            i++;\n          }\n\n          state = IN_TAG;\n        }\n\n        seenTag = i;\n      } else {\n        if (tagChange(ctag, text, i)) {\n          tokens.push({\n            tag: tagType,\n            n: trim(buf),\n            otag: otag,\n            ctag: ctag,\n            i: tagType == '/' ? seenTag - otag.length : i + ctag.length\n          });\n          buf = '';\n          i += ctag.length - 1;\n          state = IN_TEXT;\n\n          if (tagType == '{') {\n            if (ctag == '}}') {\n              i++;\n            } else {\n              cleanTripleStache(tokens[tokens.length - 1]);\n            }\n          }\n        } else {\n          buf += text.charAt(i);\n        }\n      }\n    }\n\n    filterLine(seenTag, true);\n    return tokens;\n  };\n\n  function cleanTripleStache(token) {\n    if (token.n.substr(token.n.length - 1) === '}') {\n      token.n = token.n.substring(0, token.n.length - 1);\n    }\n  }\n\n  function trim(s) {\n    if (s.trim) {\n      return s.trim();\n    }\n\n    return s.replace(/^\\s*|\\s*$/g, '');\n  }\n\n  function tagChange(tag, text, index) {\n    if (text.charAt(index) != tag.charAt(0)) {\n      return false;\n    }\n\n    for (var i = 1, l = tag.length; i < l; i++) {\n      if (text.charAt(index + i) != tag.charAt(i)) {\n        return false;\n      }\n    }\n\n    return true;\n  } // the tags allowed inside super templates\n\n\n  var allowedInSuper = {\n    '_t': true,\n    '\\n': true,\n    '$': true,\n    '/': true\n  };\n\n  function buildTree(tokens, kind, stack, customTags) {\n    var instructions = [],\n        opener = null,\n        tail = null,\n        token = null;\n    tail = stack[stack.length - 1];\n\n    while (tokens.length > 0) {\n      token = tokens.shift();\n\n      if (tail && tail.tag == '<' && !(token.tag in allowedInSuper)) {\n        throw new Error('Illegal content in < super tag.');\n      }\n\n      if (Hogan.tags[token.tag] <= Hogan.tags['$'] || isOpener(token, customTags)) {\n        stack.push(token);\n        token.nodes = buildTree(tokens, token.tag, stack, customTags);\n      } else if (token.tag == '/') {\n        if (stack.length === 0) {\n          throw new Error('Closing tag without opener: /' + token.n);\n        }\n\n        opener = stack.pop();\n\n        if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {\n          throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);\n        }\n\n        opener.end = token.i;\n        return instructions;\n      } else if (token.tag == '\\n') {\n        token.last = tokens.length == 0 || tokens[0].tag == '\\n';\n      }\n\n      instructions.push(token);\n    }\n\n    if (stack.length > 0) {\n      throw new Error('missing closing tag: ' + stack.pop().n);\n    }\n\n    return instructions;\n  }\n\n  function isOpener(token, tags) {\n    for (var i = 0, l = tags.length; i < l; i++) {\n      if (tags[i].o == token.n) {\n        token.tag = '#';\n        return true;\n      }\n    }\n  }\n\n  function isCloser(close, open, tags) {\n    for (var i = 0, l = tags.length; i < l; i++) {\n      if (tags[i].c == close && tags[i].o == open) {\n        return true;\n      }\n    }\n  }\n\n  function stringifySubstitutions(obj) {\n    var items = [];\n\n    for (var key in obj) {\n      items.push('\"' + esc(key) + '\": function(c,p,t,i) {' + obj[key] + '}');\n    }\n\n    return \"{ \" + items.join(\",\") + \" }\";\n  }\n\n  function stringifyPartials(codeObj) {\n    var partials = [];\n\n    for (var key in codeObj.partials) {\n      partials.push('\"' + esc(key) + '\":{name:\"' + esc(codeObj.partials[key].name) + '\", ' + stringifyPartials(codeObj.partials[key]) + \"}\");\n    }\n\n    return \"partials: {\" + partials.join(\",\") + \"}, subs: \" + stringifySubstitutions(codeObj.subs);\n  }\n\n  Hogan.stringify = function (codeObj, text, options) {\n    return \"{code: function (c,p,i) { \" + Hogan.wrapMain(codeObj.code) + \" },\" + stringifyPartials(codeObj) + \"}\";\n  };\n\n  var serialNo = 0;\n\n  Hogan.generate = function (tree, text, options) {\n    serialNo = 0;\n    var context = {\n      code: '',\n      subs: {},\n      partials: {}\n    };\n    Hogan.walk(tree, context);\n\n    if (options.asString) {\n      return this.stringify(context, text, options);\n    }\n\n    return this.makeTemplate(context, text, options);\n  };\n\n  Hogan.wrapMain = function (code) {\n    return 'var t=this;t.b(i=i||\"\");' + code + 'return t.fl();';\n  };\n\n  Hogan.template = Hogan.Template;\n\n  Hogan.makeTemplate = function (codeObj, text, options) {\n    var template = this.makePartials(codeObj);\n    template.code = new Function('c', 'p', 'i', this.wrapMain(codeObj.code));\n    return new this.template(template, text, this, options);\n  };\n\n  Hogan.makePartials = function (codeObj) {\n    var key,\n        template = {\n      subs: {},\n      partials: codeObj.partials,\n      name: codeObj.name\n    };\n\n    for (key in template.partials) {\n      template.partials[key] = this.makePartials(template.partials[key]);\n    }\n\n    for (key in codeObj.subs) {\n      template.subs[key] = new Function('c', 'p', 't', 'i', codeObj.subs[key]);\n    }\n\n    return template;\n  };\n\n  function esc(s) {\n    return s.replace(rSlash, '\\\\\\\\').replace(rQuot, '\\\\\\\"').replace(rNewline, '\\\\n').replace(rCr, '\\\\r').replace(rLineSep, \"\\\\u2028\").replace(rParagraphSep, \"\\\\u2029\");\n  }\n\n  function chooseMethod(s) {\n    return ~s.indexOf('.') ? 'd' : 'f';\n  }\n\n  function createPartial(node, context) {\n    var prefix = \"<\" + (context.prefix || \"\");\n    var sym = prefix + node.n + serialNo++;\n    context.partials[sym] = {\n      name: node.n,\n      partials: {}\n    };\n    context.code += 't.b(t.rp(\"' + esc(sym) + '\",c,p,\"' + (node.indent || '') + '\"));';\n    return sym;\n  }\n\n  Hogan.codegen = {\n    '#': function _(node, context) {\n      context.code += 'if(t.s(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,1),' + 'c,p,0,' + node.i + ',' + node.end + ',\"' + node.otag + \" \" + node.ctag + '\")){' + 't.rs(c,p,' + 'function(c,p,t){';\n      Hogan.walk(node.nodes, context);\n      context.code += '});c.pop();}';\n    },\n    '^': function _(node, context) {\n      context.code += 'if(!t.s(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,1),c,p,1,0,0,\"\")){';\n      Hogan.walk(node.nodes, context);\n      context.code += '};';\n    },\n    '>': createPartial,\n    '<': function _(node, context) {\n      var ctx = {\n        partials: {},\n        code: '',\n        subs: {},\n        inPartial: true\n      };\n      Hogan.walk(node.nodes, ctx);\n      var template = context.partials[createPartial(node, context)];\n      template.subs = ctx.subs;\n      template.partials = ctx.partials;\n    },\n    '$': function $(node, context) {\n      var ctx = {\n        subs: {},\n        code: '',\n        partials: context.partials,\n        prefix: node.n\n      };\n      Hogan.walk(node.nodes, ctx);\n      context.subs[node.n] = ctx.code;\n\n      if (!context.inPartial) {\n        context.code += 't.sub(\"' + esc(node.n) + '\",c,p,i);';\n      }\n    },\n    '\\n': function _(node, context) {\n      context.code += write('\"\\\\n\"' + (node.last ? '' : ' + i'));\n    },\n    '_v': function _v(node, context) {\n      context.code += 't.b(t.v(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,0)));';\n    },\n    '_t': function _t(node, context) {\n      context.code += write('\"' + esc(node.text) + '\"');\n    },\n    '{': tripleStache,\n    '&': tripleStache\n  };\n\n  function tripleStache(node, context) {\n    context.code += 't.b(t.t(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,0)));';\n  }\n\n  function write(s) {\n    return 't.b(' + s + ');';\n  }\n\n  Hogan.walk = function (nodelist, context) {\n    var func;\n\n    for (var i = 0, l = nodelist.length; i < l; i++) {\n      func = Hogan.codegen[nodelist[i].tag];\n      func && func(nodelist[i], context);\n    }\n\n    return context;\n  };\n\n  Hogan.parse = function (tokens, text, options) {\n    options = options || {};\n    return buildTree(tokens, '', [], options.sectionTags || []);\n  };\n\n  Hogan.cache = {};\n\n  Hogan.cacheKey = function (text, options) {\n    return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');\n  };\n\n  Hogan.compile = function (text, options) {\n    options = options || {};\n    var key = Hogan.cacheKey(text, options);\n    var template = this.cache[key];\n\n    if (template) {\n      var partials = template.partials;\n\n      for (var name in partials) {\n        delete partials[name].instance;\n      }\n\n      return template;\n    }\n\n    template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);\n    return this.cache[key] = template;\n  };\n})(typeof exports !== 'undefined' ? exports : Hogan);","/*\n *  Copyright 2011 Twitter, Inc.\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// This file is for use with Node.js. See dist/ for browser files.\nvar Hogan = require('./compiler');\n\nHogan.Template = require('./template').Template;\nHogan.template = Hogan.Template;\nmodule.exports = Hogan;","/*\n *  Copyright 2011 Twitter, Inc.\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 */\nvar Hogan = {};\n\n(function (Hogan) {\n  Hogan.Template = function (codeObj, text, compiler, options) {\n    codeObj = codeObj || {};\n    this.r = codeObj.code || this.r;\n    this.c = compiler;\n    this.options = options || {};\n    this.text = text || '';\n    this.partials = codeObj.partials || {};\n    this.subs = codeObj.subs || {};\n    this.buf = '';\n  };\n\n  Hogan.Template.prototype = {\n    // render: replaced by generated code.\n    r: function r(context, partials, indent) {\n      return '';\n    },\n    // variable escaping\n    v: hoganEscape,\n    // triple stache\n    t: coerceToString,\n    render: function render(context, partials, indent) {\n      return this.ri([context], partials || {}, indent);\n    },\n    // render internal -- a hook for overrides that catches partials too\n    ri: function ri(context, partials, indent) {\n      return this.r(context, partials, indent);\n    },\n    // ensurePartial\n    ep: function ep(symbol, partials) {\n      var partial = this.partials[symbol]; // check to see that if we've instantiated this partial before\n\n      var template = partials[partial.name];\n\n      if (partial.instance && partial.base == template) {\n        return partial.instance;\n      }\n\n      if (typeof template == 'string') {\n        if (!this.c) {\n          throw new Error(\"No compiler available.\");\n        }\n\n        template = this.c.compile(template, this.options);\n      }\n\n      if (!template) {\n        return null;\n      } // We use this to check whether the partials dictionary has changed\n\n\n      this.partials[symbol].base = template;\n\n      if (partial.subs) {\n        // Make sure we consider parent template now\n        if (!partials.stackText) partials.stackText = {};\n\n        for (key in partial.subs) {\n          if (!partials.stackText[key]) {\n            partials.stackText[key] = this.activeSub !== undefined && partials.stackText[this.activeSub] ? partials.stackText[this.activeSub] : this.text;\n          }\n        }\n\n        template = createSpecializedPartial(template, partial.subs, partial.partials, this.stackSubs, this.stackPartials, partials.stackText);\n      }\n\n      this.partials[symbol].instance = template;\n      return template;\n    },\n    // tries to find a partial in the current scope and render it\n    rp: function rp(symbol, context, partials, indent) {\n      var partial = this.ep(symbol, partials);\n\n      if (!partial) {\n        return '';\n      }\n\n      return partial.ri(context, partials, indent);\n    },\n    // render a section\n    rs: function rs(context, partials, section) {\n      var tail = context[context.length - 1];\n\n      if (!isArray(tail)) {\n        section(context, partials, this);\n        return;\n      }\n\n      for (var i = 0; i < tail.length; i++) {\n        context.push(tail[i]);\n        section(context, partials, this);\n        context.pop();\n      }\n    },\n    // maybe start a section\n    s: function s(val, ctx, partials, inverted, start, end, tags) {\n      var pass;\n\n      if (isArray(val) && val.length === 0) {\n        return false;\n      }\n\n      if (typeof val == 'function') {\n        val = this.ms(val, ctx, partials, inverted, start, end, tags);\n      }\n\n      pass = !!val;\n\n      if (!inverted && pass && ctx) {\n        ctx.push(typeof val == 'object' ? val : ctx[ctx.length - 1]);\n      }\n\n      return pass;\n    },\n    // find values with dotted names\n    d: function d(key, ctx, partials, returnFound) {\n      var found,\n          names = key.split('.'),\n          val = this.f(names[0], ctx, partials, returnFound),\n          doModelGet = this.options.modelGet,\n          cx = null;\n\n      if (key === '.' && isArray(ctx[ctx.length - 2])) {\n        val = ctx[ctx.length - 1];\n      } else {\n        for (var i = 1; i < names.length; i++) {\n          found = findInScope(names[i], val, doModelGet);\n\n          if (found !== undefined) {\n            cx = val;\n            val = found;\n          } else {\n            val = '';\n          }\n        }\n      }\n\n      if (returnFound && !val) {\n        return false;\n      }\n\n      if (!returnFound && typeof val == 'function') {\n        ctx.push(cx);\n        val = this.mv(val, ctx, partials);\n        ctx.pop();\n      }\n\n      return val;\n    },\n    // find values with normal names\n    f: function f(key, ctx, partials, returnFound) {\n      var val = false,\n          v = null,\n          found = false,\n          doModelGet = this.options.modelGet;\n\n      for (var i = ctx.length - 1; i >= 0; i--) {\n        v = ctx[i];\n        val = findInScope(key, v, doModelGet);\n\n        if (val !== undefined) {\n          found = true;\n          break;\n        }\n      }\n\n      if (!found) {\n        return returnFound ? false : \"\";\n      }\n\n      if (!returnFound && typeof val == 'function') {\n        val = this.mv(val, ctx, partials);\n      }\n\n      return val;\n    },\n    // higher order templates\n    ls: function ls(func, cx, partials, text, tags) {\n      var oldTags = this.options.delimiters;\n      this.options.delimiters = tags;\n      this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials));\n      this.options.delimiters = oldTags;\n      return false;\n    },\n    // compile text\n    ct: function ct(text, cx, partials) {\n      if (this.options.disableLambda) {\n        throw new Error('Lambda features disabled.');\n      }\n\n      return this.c.compile(text, this.options).render(cx, partials);\n    },\n    // template result buffering\n    b: function b(s) {\n      this.buf += s;\n    },\n    fl: function fl() {\n      var r = this.buf;\n      this.buf = '';\n      return r;\n    },\n    // method replace section\n    ms: function ms(func, ctx, partials, inverted, start, end, tags) {\n      var textSource,\n          cx = ctx[ctx.length - 1],\n          result = func.call(cx);\n\n      if (typeof result == 'function') {\n        if (inverted) {\n          return true;\n        } else {\n          textSource = this.activeSub && this.subsText && this.subsText[this.activeSub] ? this.subsText[this.activeSub] : this.text;\n          return this.ls(result, cx, partials, textSource.substring(start, end), tags);\n        }\n      }\n\n      return result;\n    },\n    // method replace variable\n    mv: function mv(func, ctx, partials) {\n      var cx = ctx[ctx.length - 1];\n      var result = func.call(cx);\n\n      if (typeof result == 'function') {\n        return this.ct(coerceToString(result.call(cx)), cx, partials);\n      }\n\n      return result;\n    },\n    sub: function sub(name, context, partials, indent) {\n      var f = this.subs[name];\n\n      if (f) {\n        this.activeSub = name;\n        f(context, partials, this, indent);\n        this.activeSub = false;\n      }\n    }\n  }; //Find a key in an object\n\n  function findInScope(key, scope, doModelGet) {\n    var val;\n\n    if (scope && typeof scope == 'object') {\n      if (scope[key] !== undefined) {\n        val = scope[key]; // try lookup with get for backbone or similar model data\n      } else if (doModelGet && scope.get && typeof scope.get == 'function') {\n        val = scope.get(key);\n      }\n    }\n\n    return val;\n  }\n\n  function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) {\n    function PartialTemplate() {}\n\n    ;\n    PartialTemplate.prototype = instance;\n\n    function Substitutions() {}\n\n    ;\n    Substitutions.prototype = instance.subs;\n    var key;\n    var partial = new PartialTemplate();\n    partial.subs = new Substitutions();\n    partial.subsText = {}; //hehe. substext.\n\n    partial.buf = '';\n    stackSubs = stackSubs || {};\n    partial.stackSubs = stackSubs;\n    partial.subsText = stackText;\n\n    for (key in subs) {\n      if (!stackSubs[key]) stackSubs[key] = subs[key];\n    }\n\n    for (key in stackSubs) {\n      partial.subs[key] = stackSubs[key];\n    }\n\n    stackPartials = stackPartials || {};\n    partial.stackPartials = stackPartials;\n\n    for (key in partials) {\n      if (!stackPartials[key]) stackPartials[key] = partials[key];\n    }\n\n    for (key in stackPartials) {\n      partial.partials[key] = stackPartials[key];\n    }\n\n    return partial;\n  }\n\n  var rAmp = /&/g,\n      rLt = //g,\n      rApos = /\\'/g,\n      rQuot = /\\\"/g,\n      hChars = /[&<>\\\"\\']/;\n\n  function coerceToString(val) {\n    return String(val === null || val === undefined ? '' : val);\n  }\n\n  function hoganEscape(str) {\n    str = coerceToString(str);\n    return hChars.test(str) ? str.replace(rAmp, '&').replace(rLt, '<').replace(rGt, '>').replace(rApos, ''').replace(rQuot, '"') : str;\n  }\n\n  var isArray = Array.isArray || function (a) {\n    return Object.prototype.toString.call(a) === '[object Array]';\n  };\n})(typeof exports !== 'undefined' ? exports : Hogan);","'use strict';\n\nvar types = [require('./nextTick'), require('./queueMicrotask'), require('./mutation.js'), require('./messageChannel'), require('./stateChange'), require('./timeout')];\nvar draining;\nvar currentQueue;\nvar queueIndex = -1;\nvar queue = [];\nvar scheduled = false;\n\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n\n  draining = false;\n\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n\n  if (queue.length) {\n    nextTick();\n  }\n} //named nextTick for less confusing stack traces\n\n\nfunction nextTick() {\n  if (draining) {\n    return;\n  }\n\n  scheduled = false;\n  draining = true;\n  var len = queue.length;\n  var timeout = setTimeout(cleanUpNextTick);\n\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n\n    while (currentQueue && ++queueIndex < len) {\n      currentQueue[queueIndex].run();\n    }\n\n    queueIndex = -1;\n    len = queue.length;\n  }\n\n  currentQueue = null;\n  queueIndex = -1;\n  draining = false;\n  clearTimeout(timeout);\n}\n\nvar scheduleDrain;\nvar i = -1;\nvar len = types.length;\n\nwhile (++i < len) {\n  if (types[i] && types[i].test && types[i].test()) {\n    scheduleDrain = types[i].install(nextTick);\n    break;\n  }\n} // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\n\nItem.prototype.run = function () {\n  var fun = this.fun;\n  var array = this.array;\n\n  switch (array.length) {\n    case 0:\n      return fun();\n\n    case 1:\n      return fun(array[0]);\n\n    case 2:\n      return fun(array[0], array[1]);\n\n    case 3:\n      return fun(array[0], array[1], array[2]);\n\n    default:\n      return fun.apply(null, array);\n  }\n};\n\nmodule.exports = immediate;\n\nfunction immediate(task) {\n  var args = new Array(arguments.length - 1);\n\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n\n  queue.push(new Item(task, args));\n\n  if (!scheduled && !draining) {\n    scheduled = true;\n    scheduleDrain();\n  }\n}","'use strict';\n\nexports.test = function () {\n  if (global.setImmediate) {\n    // we can only get here in IE10\n    // which doesn't handel postMessage well\n    return false;\n  }\n\n  return typeof global.MessageChannel !== 'undefined';\n};\n\nexports.install = function (func) {\n  var channel = new global.MessageChannel();\n  channel.port1.onmessage = func;\n  return function () {\n    channel.port2.postMessage(0);\n  };\n};","'use strict'; //based off rsvp https://github.com/tildeio/rsvp.js\n//license https://github.com/tildeio/rsvp.js/blob/master/LICENSE\n//https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/asap.js\n\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nexports.test = function () {\n  return Mutation;\n};\n\nexports.install = function (handle) {\n  var called = 0;\n  var observer = new Mutation(handle);\n  var element = global.document.createTextNode('');\n  observer.observe(element, {\n    characterData: true\n  });\n  return function () {\n    element.data = called = ++called % 2;\n  };\n};","'use strict';\n\nexports.test = function () {\n  return typeof global.queueMicrotask === 'function';\n};\n\nexports.install = function (func) {\n  return function () {\n    global.queueMicrotask(func);\n  };\n};","'use strict';\n\nexports.test = function () {\n  return 'document' in global && 'onreadystatechange' in global.document.createElement('script');\n};\n\nexports.install = function (handle) {\n  return function () {\n    // Create a