{"version":3,"file":"ractive.mjs","sources":["../../../src/polyfills/Object.assign.js","../../../src/utils/object.js","../../../src/utils/is.js","../../../src/polyfills/array.find.js","../../../src/polyfills/node.contains.js","../../../src/polyfills/performance.now.js","../../../src/polyfills/Promise.js","../../../src/polyfills/requestAnimationFrame.js","../../../src/Ractive/config/defaults.js","../../../src/Ractive/static/easing.js","../../../src/config/environment.js","../../../src/utils/noop.js","../../../src/utils/log.js","../../../src/config/errors.js","../../../src/shared/registry.js","../../../src/shared/interpolate.js","../../../src/Ractive/static/interpolators.js","../../../src/shared/keypaths.js","../../../src/utils/array.js","../../../src/utils/bind.js","../../../src/model/ModelBase.js","../../../src/global/capture.js","../../../src/shared/methodCallers.js","../../../src/shared/rebind.js","../../../src/model/LinkModel.js","../../../src/parse/utils/createFunction.js","../../../src/shared/getFunction.js","../../../src/config/template.js","../../../src/parse/Parser.js","../../../src/config/types.js","../../../src/parse/converters/mustache/readDelimiterChange.js","../../../src/parse/converters/expressions/primary/literal/readRegexpLiteral.js","../../../src/utils/escapeRegExp.js","../../../src/parse/converters/utils/getLowestIndex.js","../../../src/utils/html.js","../../../src/parse/converters/expressions/shared/errors.js","../../../src/parse/converters/expressions/primary/literal/readNumberLiteral.js","../../../src/parse/converters/expressions/primary/literal/readBooleanLiteral.js","../../../src/parse/converters/expressions/primary/literal/stringLiteral/makeQuotedStringMatcher.js","../../../src/parse/converters/expressions/primary/literal/readStringLiteral.js","../../../src/parse/converters/expressions/primary/literal/readTemplateStringLiteral.js","../../../src/parse/converters/expressions/shared/patterns.js","../../../src/parse/converters/expressions/shared/readKey.js","../../../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePair.js","../../../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePairs.js","../../../src/parse/converters/expressions/primary/literal/readObjectLiteral.js","../../../src/parse/converters/expressions/primary/literal/readArrayLiteral.js","../../../src/parse/converters/expressions/primary/readLiteral.js","../../../src/parse/converters/expressions/primary/readReference.js","../../../src/parse/converters/expressions/primary/readBracketedExpression.js","../../../src/parse/converters/expressions/readPrimary.js","../../../src/parse/converters/expressions/shared/readRefinement.js","../../../src/parse/converters/expressions/readMemberOrInvocation.js","../../../src/parse/converters/expressions/readTypeof.js","../../../src/parse/converters/expressions/readLogicalOr.js","../../../src/parse/converters/expressions/readConditional.js","../../../src/parse/converters/readExpression.js","../../../src/parse/converters/expressions/shared/readExpressionList.js","../../../src/parse/converters/readExpressionOrReference.js","../../../src/parse/utils/flattenExpression.js","../../../src/parse/utils/refineExpression.js","../../../src/parse/converters/element/readAttribute.js","../../../src/parse/converters/readMustache.js","../../../src/parse/converters/mustache/readTriple.js","../../../src/parse/converters/mustache/readUnescaped.js","../../../src/parse/converters/mustache/readAliases.js","../../../src/parse/converters/mustache/readPartial.js","../../../src/parse/converters/mustache/readMustacheComment.js","../../../src/parse/converters/mustache/readInterpolator.js","../../../src/parse/converters/mustache/section/readClosing.js","../../../src/parse/converters/mustache/section/readInlineBlock.js","../../../src/parse/converters/mustache/handlebarsBlockCodes.js","../../../src/parse/converters/mustache/readSection.js","../../../src/parse/converters/readHtmlComment.js","../../../src/parse/utils/stripStandalones.js","../../../src/parse/utils/trimWhitespace.js","../../../src/parse/utils/cleanup.js","../../../src/parse/converters/element/readClosingTag.js","../../../src/utils/hyphenateCamel.js","../../../src/parse/converters/readElement.js","../../../src/parse/converters/readText.js","../../../src/parse/converters/readPartialDefinitionSection.js","../../../src/parse/converters/readTemplate.js","../../../src/parse/utils/insertExpressions.js","../../../src/Ractive/shared.js","../../../src/parse/_parse.js","../../../src/Ractive/config/runtime-parser.js","../../../src/Ractive/helpers/getComputationSignature.js","../../../src/global/TransitionManager.js","../../../src/global/runloop.js","../../../src/shared/Ticker.js","../../../src/model/helpers/getPrefixer.js","../../../src/model/Model.js","../../../src/model/specials/SharedModel.js","../../../src/view/resolvers/resolveReference.js","../../../src/shared/getRactiveContext.js","../../../src/shared/set.js","../../../src/Ractive/prototype/shared/add.js","../../../src/Ractive/prototype/add.js","../../../src/Ractive/prototype/animate.js","../../../src/events/eventStack.js","../../../src/events/fireEvent.js","../../../src/events/Hook.js","../../../src/shared/anchors.js","../../../src/Ractive/prototype/attachChild.js","../../../src/Ractive/prototype/compute.js","../../../src/Ractive/prototype/detach.js","../../../src/Ractive/prototype/detachChild.js","../../../src/Ractive/prototype/find.js","../../../src/Ractive/prototype/findAll.js","../../../src/Ractive/prototype/findAllComponents.js","../../../src/Ractive/prototype/findComponent.js","../../../src/Ractive/prototype/findContainer.js","../../../src/Ractive/prototype/findParent.js","../../../src/view/items/shared/findElement.js","../../../src/shared/getNewIndices.js","../../../src/Ractive/prototype/shared/makeArrayMethod.js","../../../src/Ractive/prototype/update.js","../../../src/shared/Context.js","../../../src/Ractive/prototype/fire.js","../../../src/Ractive/prototype/get.js","../../../src/Ractive/static/getContext.js","../../../src/Ractive/prototype/getContext.js","../../../src/config/namespaces.js","../../../src/utils/dom.js","../../../src/Ractive/prototype/insert.js","../../../src/Ractive/prototype/link.js","../../../src/Ractive/prototype/observe/Observer.js","../../../src/Ractive/prototype/observe/Pattern.js","../../../src/Ractive/prototype/observe/Array.js","../../../src/Ractive/prototype/observe.js","../../../src/Ractive/prototype/observeOnce.js","../../../src/Ractive/prototype/shared/trim.js","../../../src/Ractive/prototype/shared/notEmptyString.js","../../../src/Ractive/prototype/off.js","../../../src/Ractive/prototype/on.js","../../../src/Ractive/prototype/once.js","../../../src/Ractive/prototype/pop.js","../../../src/Ractive/prototype/push.js","../../../src/Ractive/prototype/readLink.js","../../../src/global/css.js","../../../src/Ractive/config/custom/adapt.js","../../../src/utils/cleanCss.js","../../../src/Ractive/config/custom/css/transform.js","../../../src/utils/id.js","../../../src/Ractive/static/styleSet.js","../../../src/model/specials/CSSModel.js","../../../src/Ractive/config/custom/css/css.js","../../../src/Ractive/config/custom/data.js","../../../src/Ractive/config/custom/template.js","../../../src/Ractive/config/registries.js","../../../src/Ractive/config/wrapPrototypeMethod.js","../../../src/Ractive/config/deprecate.js","../../../src/Ractive/config/config.js","../../../src/view/items/shared/Item.js","../../../src/model/ComputationChild.js","../../../src/model/Computation.js","../../../src/view/resolvers/ExpressionProxy.js","../../../src/view/resolvers/ReferenceExpressionProxy.js","../../../src/view/resolvers/resolve.js","../../../src/view/items/Alias.js","../../../src/view/helpers/specialAttrs.js","../../../src/view/items/element/attribute/getUpdateDelegate.js","../../../src/view/items/element/attribute/propertyNames.js","../../../src/view/items/element/ConditionalAttribute.js","../../../src/view/items/element/Attribute.js","../../../src/view/items/element/BindingFlag.js","../../../src/view/items/Comment.js","../../../src/Ractive/prototype/teardown.js","../../../src/model/specials/RactiveModel.js","../../../src/model/RootModel.js","../../../src/Ractive/helpers/subscribe.js","../../../src/Ractive/construct.js","../../../src/view/items/Component.js","../../../src/view/items/shared/directiveArgs.js","../../../src/view/items/element/Decorator.js","../../../src/view/items/Doctype.js","../../../src/view/items/element/binding/Binding.js","../../../src/view/items/element/binding/handleDomEvent.js","../../../src/view/items/element/binding/CheckboxBinding.js","../../../src/view/items/element/binding/getBindingGroup.js","../../../src/view/items/element/binding/CheckboxNameBinding.js","../../../src/view/items/element/binding/ContentEditableBinding.js","../../../src/view/items/element/binding/GenericBinding.js","../../../src/view/items/element/binding/FileBinding.js","../../../src/utils/getSelectedOptions.js","../../../src/view/items/element/binding/MultipleSelectBinding.js","../../../src/view/items/element/binding/NumericBinding.js","../../../src/view/items/element/binding/RadioBinding.js","../../../src/view/items/element/binding/RadioNameBinding.js","../../../src/view/items/element/binding/SingleSelectBinding.js","../../../src/view/items/element/binding/selectBinding.js","../../../src/view/items/Element.js","../../../src/view/items/element/specials/Form.js","../../../src/view/items/element/ElementEvents.js","../../../src/view/items/component/RactiveEvent.js","../../../src/view/items/shared/EventDirective.js","../../../src/view/items/shared/progressiveText.js","../../../src/view/items/shared/Mustache.js","../../../src/view/items/Interpolator.js","../../../src/view/items/element/specials/Input.js","../../../src/utils/parseJSON.js","../../../src/view/items/component/Mapping.js","../../../src/view/items/element/specials/Option.js","../../../src/view/items/partial/getPartialTemplate.js","../../../src/view/items/Partial.js","../../../src/model/specials/KeyModel.js","../../../src/view/RepeatedFragment.js","../../../src/view/items/Section.js","../../../src/view/items/element/specials/Select.js","../../../src/view/items/element/specials/Textarea.js","../../../src/view/items/Text.js","../../../src/config/visibility.js","../../../src/view/items/element/transitions/prefix.js","../../../src/view/items/element/transitions/hyphenate.js","../../../src/view/items/element/transitions/createTransitions.js","../../../src/view/items/element/Transition.js","../../../src/view/items/triple/insertHtml.js","../../../src/view/items/Triple.js","../../../src/view/items/component/getComponentConstructor.js","../../../src/view/items/asyncProxy.js","../../../src/view/items/Await.js","../../../src/view/items/createItem.js","../../../src/view/helpers/processItems.js","../../../src/view/Fragment.js","../../../src/Ractive/initialise.js","../../../src/Ractive/render.js","../../../src/Ractive/prototype/render.js","../../../src/Ractive/prototype/reset.js","../../../src/Ractive/prototype/resetPartial.js","../../../src/Ractive/prototype/resetTemplate.js","../../../src/Ractive/prototype/reverse.js","../../../src/Ractive/prototype/set.js","../../../src/Ractive/prototype/shift.js","../../../src/Ractive/prototype/sort.js","../../../src/Ractive/prototype/splice.js","../../../src/Ractive/prototype/subtract.js","../../../src/Ractive/prototype/toggle.js","../../../src/Ractive/prototype/toCSS.js","../../../src/Ractive/prototype/toHTML.js","../../../src/Ractive/prototype/toText.js","../../../src/Ractive/prototype/transition.js","../../../src/Ractive/prototype/unlink.js","../../../src/Ractive/prototype/unrender.js","../../../src/Ractive/prototype/unshift.js","../../../src/Ractive/prototype/updateModel.js","../../../src/Ractive/prototype/use.js","../../../src/Ractive/prototype.js","../../../src/Ractive/static/isInstance.js","../../../src/Ractive/static/styleGet.js","../../../src/Ractive/static/styles.js","../../../src/Ractive/static/sharedSet.js","../../../src/Ractive/static/sharedGet.js","../../../src/Ractive/static/use.js","../../../src/extend/_extend.js","../../../src/extend/_macro.js","../../../src/Ractive/static/keypaths.js","../../../src/Ractive/static/findPlugin.js","../../../src/Ractive.js"],"sourcesContent":["/* istanbul ignore if */\nif (!Object.assign) {\n Object.assign = function(target, ...sources) {\n if (target == null) throw new TypeError('Cannot convert undefined or null to object');\n\n const to = Object(target);\n const sourcesLength = sources.length;\n\n for (let index = 0; index < sourcesLength; index++) {\n const nextSource = sources[index];\n for (const nextKey in nextSource) {\n if (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) continue;\n to[nextKey] = nextSource[nextKey];\n }\n }\n\n return to;\n };\n}\n","export function hasOwn(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function fillGaps(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n for (const key in source) {\n // Source can be a prototype-less object.\n if (key in target || !hasOwn(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nexport function toPairs(obj = {}) {\n const pairs = [];\n for (const key in obj) {\n // Source can be a prototype-less object.\n if (!hasOwn(obj, key)) continue;\n pairs.push([key, obj[key]]);\n }\n return pairs;\n}\n\nconst obj = Object;\n\nexport const assign = obj.assign;\n\nexport const create = obj.create;\n\nexport const defineProperty = obj.defineProperty;\n\nexport const defineProperties = obj.defineProperties;\n\nexport const keys = obj.keys;\n","const toString = Object.prototype.toString;\nconst arrayLikePattern = /^\\[object (?:Array|FileList)\\]$/;\n\nexport function isArrayLike(obj) {\n return arrayLikePattern.test(toString.call(obj));\n}\n\nexport const isArray = Array.isArray;\n\nexport function isEqual(a, b) {\n if (a === null && b === null) {\n return true;\n }\n\n if (isObjectType(a) || isObjectType(b)) {\n return false;\n }\n\n return a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nexport function isNumeric(thing) {\n return !isNaN(parseFloat(thing)) && isFinite(thing);\n}\n\nexport function isObject(thing) {\n return thing && toString.call(thing) === '[object Object]';\n}\n\nexport function isObjectLike(thing) {\n return !!(thing && (isObjectType(thing) || isFunction(thing)));\n}\n\nexport function isObjectType(thing) {\n return typeof thing === 'object';\n}\n\nexport function isFunction(thing) {\n return typeof thing === 'function';\n}\n\nexport function isString(thing) {\n return typeof thing === 'string';\n}\n\nexport function isNumber(thing) {\n return typeof thing === 'number';\n}\n","import { hasOwn, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n/* istanbul ignore if */\nif (!Array.prototype.find) {\n defineProperty(Array.prototype, 'find', {\n value(callback, thisArg) {\n if (this === null || this === undefined)\n throw new TypeError('Array.prototype.find called on null or undefined');\n\n if (!isFunction(callback)) throw new TypeError(`${callback} is not a function`);\n\n const array = Object(this);\n const arrayLength = array.length >>> 0;\n\n for (let index = 0; index < arrayLength; index++) {\n if (!hasOwn(array, index)) continue;\n if (!callback.call(thisArg, array[index], index, array)) continue;\n return array[index];\n }\n\n return undefined;\n },\n configurable: true,\n writable: true\n });\n}\n","// NOTE: Node doesn't exist in IE8. Nothing can be done.\n/* istanbul ignore if */\nif (\n typeof window !== 'undefined' &&\n window.Node &&\n window.Node.prototype &&\n !window.Node.prototype.contains\n) {\n Node.prototype.contains = function(node) {\n if (!node) throw new TypeError('node required');\n\n do {\n if (this === node) return true;\n } while ((node = node && node.parentNode));\n\n return false;\n };\n}\n","/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.performance && !window.performance.now) {\n window.performance = window.performance || {};\n\n const nowOffset = Date.now();\n\n window.performance.now = function() {\n return Date.now() - nowOffset;\n };\n}\n","import { isFunction, isObjectType } from 'utils/is';\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && !window.Promise) {\n const PENDING = {};\n const FULFILLED = {};\n const REJECTED = {};\n\n const Promise = (window.Promise = function(callback) {\n const fulfilledHandlers = [];\n const rejectedHandlers = [];\n let state = PENDING;\n let result;\n let dispatchHandlers;\n\n const makeResolver = newState => {\n return function(value) {\n if (state !== PENDING) return;\n result = value;\n state = newState;\n dispatchHandlers = makeDispatcher(\n state === FULFILLED ? fulfilledHandlers : rejectedHandlers,\n result\n );\n wait(dispatchHandlers);\n };\n };\n\n const fulfill = makeResolver(FULFILLED);\n const reject = makeResolver(REJECTED);\n\n try {\n callback(fulfill, reject);\n } catch (err) {\n reject(err);\n }\n\n return {\n // `then()` returns a Promise - 2.2.7\n then(onFulfilled, onRejected) {\n const promise2 = new Promise((fulfill, reject) => {\n const processResolutionHandler = (handler, handlers, forward) => {\n if (isFunction(handler)) {\n handlers.push(p1result => {\n try {\n resolve(promise2, handler(p1result), fulfill, reject);\n } catch (err) {\n reject(err);\n }\n });\n } else {\n handlers.push(forward);\n }\n };\n\n processResolutionHandler(onFulfilled, fulfilledHandlers, fulfill);\n processResolutionHandler(onRejected, rejectedHandlers, reject);\n\n if (state !== PENDING) {\n wait(dispatchHandlers);\n }\n });\n return promise2;\n },\n catch(onRejected) {\n return this.then(null, onRejected);\n }\n };\n });\n\n Promise.all = function(promises) {\n return new Promise((fulfil, reject) => {\n const result = [];\n let pending;\n let i;\n\n if (!promises.length) {\n fulfil(result);\n return;\n }\n\n const processPromise = (promise, i) => {\n if (promise && isFunction(promise.then)) {\n promise.then(value => {\n result[i] = value;\n --pending || fulfil(result);\n }, reject);\n } else {\n result[i] = promise;\n --pending || fulfil(result);\n }\n };\n\n pending = i = promises.length;\n\n while (i--) {\n processPromise(promises[i], i);\n }\n });\n };\n\n Promise.resolve = function(value) {\n return new Promise(fulfill => {\n fulfill(value);\n });\n };\n\n Promise.reject = function(reason) {\n return new Promise((fulfill, reject) => {\n reject(reason);\n });\n };\n\n // TODO use MutationObservers or something to simulate setImmediate\n const wait = function(callback) {\n setTimeout(callback, 0);\n };\n\n const makeDispatcher = function(handlers, result) {\n return function() {\n for (let handler; (handler = handlers.shift()); ) {\n handler(result);\n }\n };\n };\n\n const resolve = function(promise, x, fulfil, reject) {\n let then;\n if (x === promise) {\n throw new TypeError(`A promise's fulfillment handler cannot return the same promise`);\n }\n if (x instanceof Promise) {\n x.then(fulfil, reject);\n } else if (x && (isObjectType(x) || isFunction(x))) {\n try {\n then = x.then;\n } catch (e) {\n reject(e);\n return;\n }\n if (isFunction(then)) {\n let called;\n\n const resolvePromise = function(y) {\n if (called) return;\n called = true;\n resolve(promise, y, fulfil, reject);\n };\n const rejectPromise = function(r) {\n if (called) return;\n called = true;\n reject(r);\n };\n\n try {\n then.call(x, resolvePromise, rejectPromise);\n } catch (e) {\n if (!called) {\n reject(e);\n called = true;\n return;\n }\n }\n } else {\n fulfil(x);\n }\n } else {\n fulfil(x);\n }\n };\n}\n","/* istanbul ignore if */\nif (\n typeof window !== 'undefined' &&\n !(window.requestAnimationFrame && window.cancelAnimationFrame)\n) {\n let lastTime = 0;\n window.requestAnimationFrame = function(callback) {\n const currentTime = Date.now();\n const timeToNextCall = Math.max(0, 16 - (currentTime - lastTime));\n const id = window.setTimeout(() => {\n callback(currentTime + timeToNextCall);\n }, timeToNextCall);\n lastTime = currentTime + timeToNextCall;\n return id;\n };\n window.cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n}\n","import { create } from 'utils/object';\n\nexport default {\n // render placement:\n el: void 0,\n append: false,\n delegate: true,\n enhance: false,\n\n // template:\n template: null,\n\n // parse:\n allowExpressions: true,\n delimiters: ['{{', '}}'],\n tripleDelimiters: ['{{{', '}}}'],\n staticDelimiters: ['[[', ']]'],\n staticTripleDelimiters: ['[[[', ']]]'],\n csp: true,\n interpolate: false,\n preserveWhitespace: false,\n sanitize: false,\n stripComments: true,\n contextLines: 0,\n\n // data & binding:\n data: create(null),\n helpers: create(null),\n computed: create(null),\n syncComputedChildren: false,\n resolveInstanceMembers: false,\n warnAboutAmbiguity: false,\n adapt: [],\n isolated: true,\n twoway: true,\n lazy: false,\n\n // transitions:\n noIntro: false,\n noOutro: false,\n transitionsEnabled: true,\n complete: void 0,\n nestedTransitions: true,\n\n // css:\n css: null,\n noCssTransform: false\n};\n","// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\nexport default {\n linear(pos) {\n return pos;\n },\n easeIn(pos) {\n /* istanbul ignore next */\n return Math.pow(pos, 3);\n },\n easeOut(pos) {\n return Math.pow(pos - 1, 3) + 1;\n },\n easeInOut(pos) {\n /* istanbul ignore next */\n if ((pos /= 0.5) < 1) {\n return 0.5 * Math.pow(pos, 3);\n }\n /* istanbul ignore next */\n return 0.5 * (Math.pow(pos - 2, 3) + 2);\n }\n};\n","/* eslint no-console:\"off\" */\nimport { isFunction } from 'utils/is';\n\nconst win = typeof window !== 'undefined' ? window : null;\nconst doc = win ? document : null;\nconst isClient = !!doc;\nconst hasConsole =\n typeof console !== 'undefined' && isFunction(console.warn) && isFunction(console.warn.apply);\n\nconst svg = doc\n ? doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')\n : false;\n\nconst vendors = ['o', 'ms', 'moz', 'webkit'];\n\nexport { win, doc, isClient, hasConsole, svg, vendors };\n","export default function() {}\n","/* global console */\n/* eslint no-console:\"off\" */\n\nimport { hasConsole } from '../config/environment';\nimport Ractive from '../Ractive';\nimport noop from './noop';\nimport { isObjectType } from 'utils/is';\n\nconst alreadyWarned = {};\nlet log, printWarning, welcome;\n\nif (hasConsole) {\n const welcomeIntro = [\n `%cRactive.js %c0.10.10 %cin debug mode, %cmore...`,\n 'color: rgb(114, 157, 52); font-weight: normal;',\n 'color: rgb(85, 85, 85); font-weight: normal;',\n 'color: rgb(85, 85, 85); font-weight: normal;',\n 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n ];\n const welcomeMessage = `You're running Ractive 0.10.10 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n http://ractive.js.org\n http://stackoverflow.com/questions/tagged/ractivejs\n http://groups.google.com/forum/#!forum/ractive-js\n http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n https://github.com/ractivejs/ractive/issues\n\n`;\n\n welcome = () => {\n if (Ractive.WELCOME_MESSAGE === false) {\n welcome = noop;\n return;\n }\n const message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n const hasGroup = !!console.groupCollapsed;\n if (hasGroup) console.groupCollapsed.apply(console, welcomeIntro);\n console.log(message);\n if (hasGroup) {\n console.groupEnd(welcomeIntro);\n }\n\n welcome = noop;\n };\n\n printWarning = (message, args) => {\n welcome();\n\n // extract information about the instance this message pertains to, if applicable\n if (isObjectType(args[args.length - 1])) {\n const options = args.pop();\n const ractive = options ? options.ractive : null;\n\n if (ractive) {\n // if this is an instance of a component that we know the name of, add\n // it to the message\n let name;\n if (ractive.component && (name = ractive.component.name)) {\n message = `<${name}> ${message}`;\n }\n\n let node;\n if (\n (node =\n options.node || (ractive.fragment && ractive.fragment.rendered && ractive.find('*')))\n ) {\n args.push(node);\n }\n }\n }\n\n console.warn.apply(\n console,\n ['%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);'].concat(\n args\n )\n );\n };\n\n log = function() {\n console.log.apply(console, arguments);\n };\n} else {\n printWarning = log = welcome = noop;\n}\n\nfunction format(message, args) {\n return message.replace(/%s/g, () => args.shift());\n}\n\nfunction fatal(message, ...args) {\n message = format(message, args);\n throw new Error(message);\n}\n\nfunction logIfDebug() {\n if (Ractive.DEBUG) {\n log.apply(null, arguments);\n }\n}\n\nfunction warn(message, ...args) {\n message = format(message, args);\n printWarning(message, args);\n}\n\nfunction warnOnce(message, ...args) {\n message = format(message, args);\n\n if (alreadyWarned[message]) {\n return;\n }\n\n alreadyWarned[message] = true;\n printWarning(message, args);\n}\n\nfunction warnIfDebug() {\n if (Ractive.DEBUG) {\n warn.apply(null, arguments);\n }\n}\n\nfunction warnOnceIfDebug() {\n if (Ractive.DEBUG) {\n warnOnce.apply(null, arguments);\n }\n}\n\nexport { fatal, log, logIfDebug, warn, warnOnce, warnIfDebug, warnOnceIfDebug, welcome };\n","// Error messages that are used (or could be) in multiple places\nexport const badArguments = 'Bad arguments';\nexport const noRegistryFunctionReturn =\n 'A function was specified for \"%s\" %s, but no %s was returned';\nexport const missingPlugin = (name, type) =>\n `Missing \"${name}\" ${type} plugin. You may need to download a plugin via http://ractive.js.org/integrations/#${type}s`;\n","export function findInViewHierarchy(registryName, ractive, name) {\n const instance = findInstance(registryName, ractive, name);\n return instance ? instance[registryName][name] : null;\n}\n\nexport function findInstance(registryName, ractive, name) {\n while (ractive) {\n if (name in ractive[registryName]) {\n return ractive;\n }\n\n if (ractive.isolated) {\n return null;\n }\n\n ractive = ractive.parent;\n }\n}\n","import { fatal } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport interpolators from '../Ractive/static/interpolators';\nimport { findInViewHierarchy } from './registry';\n\nexport default function interpolate(from, to, ractive, type) {\n if (from === to) return null;\n\n if (type) {\n const interpol = findInViewHierarchy('interpolators', ractive, type);\n if (interpol) return interpol(from, to) || null;\n\n fatal(missingPlugin(type, 'interpolator'));\n }\n\n return (\n interpolators.number(from, to) ||\n interpolators.array(from, to) ||\n interpolators.object(from, to) ||\n null\n );\n}\n","import { isArray, isObject, isNumeric } from 'utils/is';\nimport interpolate from 'shared/interpolate';\nimport { hasOwn } from 'utils/object';\n\nconst interpolators = {\n number(from, to) {\n if (!isNumeric(from) || !isNumeric(to)) {\n return null;\n }\n\n from = +from;\n to = +to;\n\n const delta = to - from;\n\n if (!delta) {\n return function() {\n return from;\n };\n }\n\n return function(t) {\n return from + t * delta;\n };\n },\n\n array(from, to) {\n let len, i;\n\n if (!isArray(from) || !isArray(to)) {\n return null;\n }\n\n const intermediate = [];\n const interpolators = [];\n\n i = len = Math.min(from.length, to.length);\n while (i--) {\n interpolators[i] = interpolate(from[i], to[i]);\n }\n\n // surplus values - don't interpolate, but don't exclude them either\n for (i = len; i < from.length; i += 1) {\n intermediate[i] = from[i];\n }\n\n for (i = len; i < to.length; i += 1) {\n intermediate[i] = to[i];\n }\n\n return function(t) {\n let i = len;\n\n while (i--) {\n intermediate[i] = interpolators[i](t);\n }\n\n return intermediate;\n };\n },\n\n object(from, to) {\n if (!isObject(from) || !isObject(to)) {\n return null;\n }\n\n const properties = [];\n const intermediate = {};\n const interpolators = {};\n\n for (const prop in from) {\n if (hasOwn(from, prop)) {\n if (hasOwn(to, prop)) {\n properties.push(prop);\n interpolators[prop] = interpolate(from[prop], to[prop]) || (() => to[prop]);\n } else {\n intermediate[prop] = from[prop];\n }\n }\n }\n\n for (const prop in to) {\n if (hasOwn(to, prop) && !hasOwn(from, prop)) {\n intermediate[prop] = to[prop];\n }\n }\n\n const len = properties.length;\n\n return function(t) {\n let i = len;\n\n while (i--) {\n const prop = properties[i];\n\n intermediate[prop] = interpolators[prop](t);\n }\n\n return intermediate;\n };\n }\n};\n\nexport default interpolators;\n","import { isString } from 'utils/is';\n\nconst refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nconst splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nconst escapeKeyPattern = /\\\\|\\./g;\nconst unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nexport function escapeKey(key) {\n if (isString(key)) {\n return key.replace(escapeKeyPattern, '\\\\$&');\n }\n\n return key;\n}\n\nexport function normalise(ref) {\n return ref ? ref.replace(refPattern, '.$1') : '';\n}\n\nexport function splitKeypath(keypath) {\n const result = [];\n let match;\n\n keypath = normalise(keypath);\n\n while ((match = splitPattern.exec(keypath))) {\n const index = match.index + match[1].length;\n result.push(keypath.substr(0, index));\n keypath = keypath.substr(index + 1);\n }\n\n result.push(keypath);\n\n return result;\n}\n\nexport function unescapeKey(key) {\n if (isString(key)) {\n return key.replace(unescapeKeyPattern, '$1$2');\n }\n\n return key;\n}\n","import { isArray, isString } from './is';\n\nexport function addToArray(array, value) {\n const index = array.indexOf(value);\n\n if (index === -1) {\n array.push(value);\n }\n}\n\nexport function arrayContains(array, value) {\n for (let i = 0, c = array.length; i < c; i++) {\n if (array[i] == value) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function arrayContentsMatch(a, b) {\n let i;\n\n if (!isArray(a) || !isArray(b)) {\n return false;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n i = a.length;\n while (i--) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function ensureArray(x) {\n if (isString(x)) {\n return [x];\n }\n\n if (x === undefined) {\n return [];\n }\n\n return x;\n}\n\nexport function lastItem(array) {\n return array[array.length - 1];\n}\n\nexport function removeFromArray(array, member) {\n if (!array) {\n return;\n }\n\n const index = array.indexOf(member);\n\n if (index !== -1) {\n array.splice(index, 1);\n }\n}\n\nexport function combine(...arrays) {\n const res = arrays.concat.apply([], arrays);\n let i = res.length;\n while (i--) {\n const idx = res.indexOf(res[i]);\n if (~idx && idx < i) res.splice(i, 1);\n }\n\n return res;\n}\n\nexport function toArray(arrayLike) {\n const array = [];\n let i = arrayLike.length;\n while (i--) {\n array[i] = arrayLike[i];\n }\n\n return array;\n}\n\nexport function findMap(array, fn) {\n const len = array.length;\n for (let i = 0; i < len; i++) {\n const result = fn(array[i]);\n if (result) return result;\n }\n}\n\nexport function buildNewIndices(one, two, comparator) {\n let oldArray = one;\n let newArray = two;\n if (comparator) {\n oldArray = oldArray.map(comparator);\n newArray = newArray.map(comparator);\n }\n\n const oldLength = oldArray.length;\n\n const usedIndices = {};\n let firstUnusedIndex = 0;\n\n return oldArray.map(item => {\n let index;\n let start = firstUnusedIndex;\n\n do {\n index = newArray.indexOf(item, start);\n\n if (index === -1) {\n return -1;\n }\n\n start = index + 1;\n } while (usedIndices[index] === true && start < oldLength);\n\n // keep track of the first unused index, so we don't search\n // the whole of newArray for each item in oldArray unnecessarily\n if (index === firstUnusedIndex) {\n firstUnusedIndex += 1;\n }\n // allow next instance of next \"equal\" to be found item\n usedIndices[index] = true;\n return index;\n });\n}\n","const fnBind = Function.prototype.bind;\n\nexport default function bind(fn, context) {\n if (!/this/.test(fn.toString())) return fn;\n\n const bound = fnBind.call(fn, context);\n for (const prop in fn) bound[prop] = fn[prop];\n\n return bound;\n}\n","import { escapeKey, unescapeKey } from 'shared/keypaths';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction } from 'utils/is';\nimport bind from 'utils/bind';\nimport { create, keys as objectKeys } from 'utils/object';\n\nconst shuffleTasks = { early: [], mark: [] };\nconst registerQueue = { early: [], mark: [] };\nexport const noVirtual = { virtual: false };\n\nexport default class ModelBase {\n constructor(parent) {\n this.deps = [];\n\n this.children = [];\n this.childByKey = {};\n this.links = [];\n\n this.bindings = [];\n\n if (parent) {\n this.parent = parent;\n this.root = parent.root;\n }\n }\n\n addShuffleTask(task, stage = 'early') {\n shuffleTasks[stage].push(task);\n }\n addShuffleRegister(item, stage = 'early') {\n registerQueue[stage].push({ model: this, item });\n }\n\n downstreamChanged() {}\n\n findMatches(keys) {\n const len = keys.length;\n\n let existingMatches = [this];\n let matches;\n let i;\n\n for (i = 0; i < len; i += 1) {\n const key = keys[i];\n\n if (key === '*') {\n matches = [];\n existingMatches.forEach(model => {\n matches.push.apply(matches, model.getValueChildren(model.get()));\n });\n } else {\n matches = existingMatches.map(model => model.joinKey(key));\n }\n\n existingMatches = matches;\n }\n\n return matches;\n }\n\n getKeypath(ractive) {\n if (ractive !== this.ractive && this._link) return this._link.target.getKeypath(ractive);\n\n if (!this.keypath) {\n const parent = this.parent && this.parent.getKeypath(ractive);\n this.keypath = parent\n ? `${this.parent.getKeypath(ractive)}.${escapeKey(this.key)}`\n : escapeKey(this.key);\n }\n\n return this.keypath;\n }\n\n getValueChildren(value) {\n let children;\n if (isArray(value)) {\n children = [];\n if ('length' in this && this.length !== value.length) {\n children.push(this.joinKey('length'));\n }\n value.forEach((m, i) => {\n children.push(this.joinKey(i));\n });\n } else if (isObject(value) || isFunction(value)) {\n children = objectKeys(value).map(key => this.joinKey(key));\n } else if (value != null) {\n children = [];\n }\n\n const computed = this.computed;\n if (computed) {\n children.push.apply(children, objectKeys(computed).map(k => this.joinKey(k)));\n }\n\n return children;\n }\n\n getVirtual(shouldCapture) {\n const value = this.get(shouldCapture, { virtual: false });\n if (isObject(value)) {\n const result = isArray(value) ? [] : create(null);\n\n let keys = objectKeys(value);\n let i = keys.length;\n while (i--) {\n const child = this.childByKey[keys[i]];\n if (!child) result[keys[i]] = value[keys[i]];\n else if (child._link) result[keys[i]] = child._link.getVirtual();\n else result[keys[i]] = child.getVirtual();\n }\n\n i = this.children.length;\n while (i--) {\n const child = this.children[i];\n if (!(child.key in result) && child._link) {\n result[child.key] = child._link.getVirtual();\n }\n }\n\n if (this.computed) {\n keys = objectKeys(this.computed);\n i = keys.length;\n while (i--) {\n result[keys[i]] = this.computed[keys[i]].get();\n }\n }\n\n return result;\n } else return value;\n }\n\n has(key) {\n if (this._link) return this._link.has(key);\n\n const value = this.get(false, noVirtual);\n if (!value) return false;\n\n key = unescapeKey(key);\n if ((isFunction(value) || isObject(value)) && key in value) return true;\n\n let computed = this.computed;\n if (computed && key in this.computed) return true;\n\n computed = this.root.ractive && this.root.ractive.computed;\n if (computed) {\n objectKeys(computed).forEach(k => {\n if (computed[k].pattern && computed[k].pattern.test(this.getKeypath())) return true;\n });\n }\n\n return false;\n }\n\n joinAll(keys, opts) {\n let model = this;\n for (let i = 0; i < keys.length; i += 1) {\n if (\n opts &&\n opts.lastLink === false &&\n i + 1 === keys.length &&\n model.childByKey[keys[i]] &&\n model.childByKey[keys[i]]._link\n )\n return model.childByKey[keys[i]];\n model = model.joinKey(keys[i], opts);\n }\n\n return model;\n }\n\n notifyUpstream(startPath) {\n let parent = this.parent;\n const path = startPath || [this.key];\n while (parent) {\n if (parent.patterns) parent.patterns.forEach(o => o.notify(path.slice()));\n path.unshift(parent.key);\n parent.links.forEach(l => l.notifiedUpstream(path, this.root));\n parent.deps.forEach(d => d.handleChange(path));\n parent.downstreamChanged(startPath);\n parent = parent.parent;\n }\n }\n\n rebind(next, previous, safe) {\n if (this._link) {\n this._link.rebind(next, previous, false);\n }\n\n // tell the deps to move to the new target\n let i = this.deps.length;\n while (i--) {\n if (this.deps[i].rebind) this.deps[i].rebind(next, previous, safe);\n }\n\n i = this.links.length;\n while (i--) {\n const link = this.links[i];\n // only relink the root of the link tree\n if (link.owner && link.owner._link) link.relinking(next, safe);\n }\n\n i = this.children.length;\n while (i--) {\n const child = this.children[i];\n child.rebind(next ? next.joinKey(child.key) : undefined, child, safe);\n }\n\n i = this.bindings.length;\n while (i--) {\n this.bindings[i].rebind(next, previous, safe);\n }\n }\n\n reference() {\n 'refs' in this ? this.refs++ : (this.refs = 1);\n }\n\n register(dep) {\n this.deps.push(dep);\n }\n\n registerLink(link) {\n addToArray(this.links, link);\n }\n\n registerPatternObserver(observer) {\n (this.patterns || (this.patterns = [])).push(observer);\n this.register(observer);\n }\n\n registerTwowayBinding(binding) {\n this.bindings.push(binding);\n }\n\n unreference() {\n if ('refs' in this) this.refs--;\n }\n\n unregister(dep) {\n removeFromArray(this.deps, dep);\n }\n\n unregisterLink(link) {\n removeFromArray(this.links, link);\n }\n\n unregisterPatternObserver(observer) {\n removeFromArray(this.patterns, observer);\n this.unregister(observer);\n }\n\n unregisterTwowayBinding(binding) {\n removeFromArray(this.bindings, binding);\n }\n\n updateFromBindings(cascade) {\n let i = this.bindings.length;\n while (i--) {\n const value = this.bindings[i].getValue();\n if (value !== this.value) this.set(value);\n }\n\n // check for one-way bindings if there are no two-ways\n if (!this.bindings.length) {\n const oneway = findBoundValue(this.deps);\n if (oneway && oneway.value !== this.value) this.set(oneway.value);\n }\n\n if (cascade) {\n this.children.forEach(updateFromBindings);\n this.links.forEach(updateFromBindings);\n if (this._link) this._link.updateFromBindings(cascade);\n }\n }\n}\n\n// TODO: this may be better handled by overriding `get` on models with a parent that isRoot\nexport function maybeBind(model, value, shouldBind) {\n if (shouldBind && isFunction(value) && model.parent && model.parent.isRoot) {\n if (!model.boundValue) {\n model.boundValue = bind(value._r_unbound || value, model.parent.ractive);\n }\n\n return model.boundValue;\n }\n\n return value;\n}\n\nfunction updateFromBindings(model) {\n model.updateFromBindings(true);\n}\n\nexport function findBoundValue(list) {\n let i = list.length;\n while (i--) {\n if (list[i].bound) {\n const owner = list[i].owner;\n if (owner) {\n const value = owner.name === 'checked' ? owner.node.checked : owner.node.value;\n return { value };\n }\n }\n }\n}\n\nexport function fireShuffleTasks(stage) {\n if (!stage) {\n fireShuffleTasks('early');\n fireShuffleTasks('mark');\n } else {\n const tasks = shuffleTasks[stage];\n shuffleTasks[stage] = [];\n let i = tasks.length;\n while (i--) tasks[i]();\n\n const register = registerQueue[stage];\n registerQueue[stage] = [];\n i = register.length;\n while (i--) register[i].model.register(register[i].item);\n }\n}\n\nexport function shuffle(model, newIndices, link, unsafe) {\n model.shuffling = true;\n\n let i = newIndices.length;\n while (i--) {\n const idx = newIndices[i];\n // nothing is actually changing, so move in the index and roll on\n if (i === idx) {\n continue;\n }\n\n // rebind the children on i to idx\n if (i in model.childByKey)\n model.childByKey[i].rebind(\n !~idx ? undefined : model.joinKey(idx),\n model.childByKey[i],\n !unsafe\n );\n }\n\n const upstream = model.source().length !== model.source().value.length;\n\n model.links.forEach(l => l.shuffle(newIndices));\n if (!link) fireShuffleTasks('early');\n\n i = model.deps.length;\n while (i--) {\n if (model.deps[i].shuffle) model.deps[i].shuffle(newIndices);\n }\n\n model[link ? 'marked' : 'mark']();\n if (!link) fireShuffleTasks('mark');\n\n if (upstream) model.notifyUpstream();\n\n model.shuffling = false;\n}\n","const stack = [];\nlet captureGroup;\n\nexport function startCapturing() {\n stack.push((captureGroup = []));\n}\n\nexport function stopCapturing() {\n const dependencies = stack.pop();\n captureGroup = stack[stack.length - 1];\n return dependencies;\n}\n\nexport function capture(model) {\n if (captureGroup) {\n captureGroup.push(model);\n }\n}\n","export function bind(x) {\n x.bind();\n}\nexport function cancel(x) {\n x.cancel();\n}\nexport function destroyed(x) {\n x.destroyed();\n}\nexport function handleChange(x) {\n x.handleChange();\n}\nexport function mark(x) {\n x.mark();\n}\nexport function markForce(x) {\n x.mark(true);\n}\nexport function marked(x) {\n x.marked();\n}\nexport function markedAll(x) {\n x.markedAll();\n}\nexport function render(x) {\n x.render();\n}\nexport function shuffled(x) {\n x.shuffled();\n}\nexport function teardown(x) {\n x.teardown();\n}\nexport function unbind(x) {\n x.unbind();\n}\nexport function unrender(x) {\n x.unrender();\n}\nexport function unrenderAndDestroy(x) {\n x.unrender(true);\n}\nexport function update(x) {\n x.update();\n}\nexport function toString(x) {\n return x.toString();\n}\nexport function toEscapedString(x) {\n return x.toString(true);\n}\n","import { splitKeypath } from './keypaths';\nimport { isString } from 'utils/is';\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nexport function rebindMatch(template, next, previous, fragment) {\n const keypath = template.r || template;\n\n // no valid keypath, go with next\n if (!keypath || !isString(keypath)) return next;\n\n // completely contextual ref, go with next\n if (\n keypath === '.' ||\n keypath[0] === '@' ||\n (next || previous).isKey ||\n (next || previous).isKeypath\n )\n return next;\n\n const parts = keypath.split('/');\n let keys = splitKeypath(parts[parts.length - 1]);\n const last = keys[keys.length - 1];\n\n // check the keypath against the model keypath to see if it matches\n let model = next || previous;\n\n // check to see if this was an alias\n if (model && keys.length === 1 && last !== model.key && fragment) {\n keys = findAlias(last, fragment) || keys;\n }\n\n let i = keys.length;\n let match = true;\n let shuffling = false;\n\n while (model && i--) {\n if (model.shuffling) shuffling = true;\n // non-strict comparison to account for indices in keypaths\n if (keys[i] != model.key) match = false;\n model = model.parent;\n }\n\n // next is undefined, but keypath is shuffling and previous matches\n if (!next && match && shuffling) return previous;\n else if (next && !match && shuffling)\n // next is defined, but doesn't match the keypath\n return previous;\n else return next;\n}\n\nfunction findAlias(name, fragment) {\n while (fragment) {\n const z = fragment.aliases;\n if (z && z[name]) {\n const aliases = (fragment.owner.iterations ? fragment.owner : fragment).owner.template.z;\n for (let i = 0; i < aliases.length; i++) {\n if (aliases[i].n === name) {\n const alias = aliases[i].x;\n if (!alias.r) return false;\n const parts = alias.r.split('/');\n return splitKeypath(parts[parts.length - 1]);\n }\n }\n return;\n }\n\n fragment = fragment.componentParent || fragment.parent;\n }\n}\n","import ModelBase, { fireShuffleTasks, maybeBind, shuffle } from './ModelBase';\nimport { capture } from '../global/capture';\nimport { handleChange, marked, markedAll, teardown } from 'shared/methodCallers';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\nimport { hasOwn } from 'utils/object';\n\n// temporary placeholder target for detached implicit links\nexport const Missing = {\n key: '@missing',\n animate: noop,\n applyValue: noop,\n get: noop,\n getKeypath() {\n return this.key;\n },\n joinAll() {\n return this;\n },\n joinKey() {\n return this;\n },\n mark: noop,\n registerLink: noop,\n shufle: noop,\n set: noop,\n unregisterLink: noop\n};\nMissing.parent = Missing;\n\nexport default class LinkModel extends ModelBase {\n constructor(parent, owner, target, key) {\n super(parent);\n\n this.owner = owner;\n this.target = target;\n this.key = key === undefined ? owner.key : key;\n if (owner && owner.isLink) this.sourcePath = `${owner.sourcePath}.${this.key}`;\n\n if (target) target.registerLink(this);\n\n if (parent) this.isReadonly = parent.isReadonly;\n\n this.isLink = true;\n }\n\n animate(from, to, options, interpolator) {\n return this.target.animate(from, to, options, interpolator);\n }\n\n applyValue(value) {\n if (this.boundValue) this.boundValue = null;\n this.target.applyValue(value);\n }\n\n attach(fragment) {\n const model = resolveReference(fragment, this.key);\n if (model) {\n this.relinking(model, false);\n } else {\n // if there is no link available, move everything here to real models\n this.owner.unlink();\n }\n }\n\n detach() {\n this.relinking(Missing, false);\n }\n\n get(shouldCapture, opts = {}) {\n if (shouldCapture) {\n capture(this);\n\n // may need to tell the target to unwrap\n opts.unwrap = 'unwrap' in opts ? opts.unwrap : true;\n }\n\n const bind = 'shouldBind' in opts ? opts.shouldBind : true;\n opts.shouldBind = this.mapping && this.target.parent && this.target.parent.isRoot;\n\n return maybeBind(this, this.target.get(false, opts), bind);\n }\n\n getKeypath(ractive) {\n if (ractive && ractive !== this.root.ractive) return this.target.getKeypath(ractive);\n\n return super.getKeypath(ractive);\n }\n\n handleChange() {\n this.deps.forEach(handleChange);\n this.links.forEach(handleChange);\n this.notifyUpstream();\n }\n\n isDetached() {\n return this.virtual && this.target === Missing;\n }\n\n joinKey(key) {\n // TODO: handle nested links\n if (key === undefined || key === '') return this;\n\n if (!hasOwn(this.childByKey, key)) {\n const child = new LinkModel(this, this, this.target.joinKey(key), key);\n this.children.push(child);\n this.childByKey[key] = child;\n }\n\n return this.childByKey[key];\n }\n\n mark(force) {\n this.target.mark(force);\n }\n\n marked() {\n if (this.boundValue) this.boundValue = null;\n\n this.links.forEach(marked);\n\n this.deps.forEach(handleChange);\n }\n\n markedAll() {\n this.children.forEach(markedAll);\n this.marked();\n }\n\n notifiedUpstream(startPath, root) {\n this.links.forEach(l => l.notifiedUpstream(startPath, this.root));\n this.deps.forEach(handleChange);\n if (startPath && this.rootLink && this.root !== root) {\n const path = startPath.slice(1);\n path.unshift(this.key);\n this.notifyUpstream(path);\n }\n }\n\n relinked() {\n this.target.registerLink(this);\n this.children.forEach(c => c.relinked());\n }\n\n relinking(target, safe) {\n if (this.rootLink && this.sourcePath)\n target = rebindMatch(this.sourcePath, target, this.target);\n if (!target || this.target === target) return;\n\n this.target && this.target.unregisterLink(this);\n\n this.target = target;\n this.children.forEach(c => {\n c.relinking(target.joinKey(c.key), safe);\n });\n\n if (this.rootLink)\n this.addShuffleTask(() => {\n this.relinked();\n if (!safe) {\n this.markedAll();\n this.notifyUpstream();\n }\n });\n }\n\n set(value) {\n if (this.boundValue) this.boundValue = null;\n this.target.set(value);\n }\n\n shuffle(newIndices) {\n // watch for extra shuffles caused by a shuffle in a downstream link\n if (this.shuffling) return;\n\n // let the real model handle firing off shuffles\n if (!this.target.shuffling) {\n if (this.target.shuffle) {\n this.target.shuffle(newIndices);\n } else {\n // the target is a computation, which can't shuffle\n this.target.mark();\n }\n } else {\n shuffle(this, newIndices, true);\n }\n }\n\n source() {\n if (this.target.source) return this.target.source();\n else return this.target;\n }\n\n teardown() {\n if (this._link) this._link.teardown();\n this.target.unregisterLink(this);\n this.children.forEach(teardown);\n }\n}\n\nModelBase.prototype.link = function link(model, keypath, options) {\n const lnk = this._link || new LinkModel(this.parent, this, model, this.key);\n lnk.implicit = options && options.implicit;\n lnk.mapping = options && options.mapping;\n lnk.sourcePath = keypath;\n lnk.rootLink = true;\n if (this._link) this._link.relinking(model, false);\n this.rebind(lnk, this, false);\n fireShuffleTasks();\n\n this._link = lnk;\n lnk.markedAll();\n\n this.notifyUpstream();\n return lnk;\n};\n\nModelBase.prototype.unlink = function unlink() {\n if (this._link) {\n const ln = this._link;\n this._link = undefined;\n ln.rebind(this, ln, false);\n fireShuffleTasks();\n ln.teardown();\n this.notifyUpstream();\n }\n};\n","export function fromExpression(body, length = 0) {\n const args = new Array(length);\n\n while (length--) {\n args[length] = `_${length}`;\n }\n\n // Functions created directly with new Function() look like this:\n // function anonymous (_0 /**/) { return _0*2 }\n //\n // With this workaround, we get a little more compact:\n // function (_0){return _0*2}\n return new Function([], `return function (${args.join(',')}){return(${body});};`)();\n}\n","import { createFunction } from '../Ractive/config/runtime-parser';\nimport { create, keys } from 'utils/object';\n\nconst functions = create(null);\n\nexport default function getFunction(str, i) {\n if (functions[str]) return functions[str];\n return (functions[str] = createFunction(str, i));\n}\n\nexport function addFunctions(template) {\n if (!template) return;\n\n const exp = template.e;\n\n if (!exp) return;\n\n keys(exp).forEach(str => {\n if (functions[str]) return;\n functions[str] = exp[str];\n });\n}\n","export const TEMPLATE_VERSION = 4;\n","import { warnIfDebug } from 'utils/log';\nimport { create, hasOwn } from 'utils/object';\n\nconst leadingWhitespace = /^\\s+/;\n\nconst ParseError = function(message) {\n this.name = 'ParseError';\n this.message = message;\n try {\n throw new Error(message);\n } catch (e) {\n this.stack = e.stack;\n }\n};\n\nParseError.prototype = Error.prototype;\n\nconst Parser = function(str, options) {\n let item;\n let lineStart = 0;\n\n this.str = str;\n this.options = options || {};\n this.pos = 0;\n\n this.lines = this.str.split('\\n');\n this.lineEnds = this.lines.map(line => {\n const lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n lineStart = lineEnd;\n return lineEnd;\n }, 0);\n\n // Custom init logic\n if (this.init) this.init(str, options);\n\n const items = [];\n\n while (this.pos < this.str.length && (item = this.read())) {\n items.push(item);\n }\n\n this.leftover = this.remaining();\n this.result = this.postProcess ? this.postProcess(items, options) : items;\n};\n\nParser.prototype = {\n read(converters) {\n let i, item;\n\n if (!converters) converters = this.converters;\n\n const pos = this.pos;\n\n const len = converters.length;\n for (i = 0; i < len; i += 1) {\n this.pos = pos; // reset for each attempt\n\n if ((item = converters[i](this))) {\n return item;\n }\n }\n\n return null;\n },\n\n getContextMessage(pos, message) {\n const [lineNum, columnNum] = this.getLinePos(pos);\n if (this.options.contextLines === -1) {\n return [lineNum, columnNum, `${message} at line ${lineNum} character ${columnNum}`];\n }\n\n const line = this.lines[lineNum - 1];\n\n let contextUp = '';\n let contextDown = '';\n if (this.options.contextLines) {\n const start =\n lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n contextUp = this.lines\n .slice(start, lineNum - 1 - start)\n .join('\\n')\n .replace(/\\t/g, ' ');\n contextDown = this.lines\n .slice(lineNum, lineNum + this.options.contextLines)\n .join('\\n')\n .replace(/\\t/g, ' ');\n if (contextUp) {\n contextUp += '\\n';\n }\n if (contextDown) {\n contextDown = '\\n' + contextDown;\n }\n }\n\n let numTabs = 0;\n const annotation =\n contextUp +\n line.replace(/\\t/g, (match, char) => {\n if (char < columnNum) {\n numTabs += 1;\n }\n\n return ' ';\n }) +\n '\\n' +\n new Array(columnNum + numTabs).join(' ') +\n '^----' +\n contextDown;\n\n return [\n lineNum,\n columnNum,\n `${message} at line ${lineNum} character ${columnNum}:\\n${annotation}`\n ];\n },\n\n getLinePos(char) {\n let lineNum = 0;\n let lineStart = 0;\n\n while (char >= this.lineEnds[lineNum]) {\n lineStart = this.lineEnds[lineNum];\n lineNum += 1;\n }\n\n const columnNum = char - lineStart;\n return [lineNum + 1, columnNum + 1, char]; // line/col should be one-based, not zero-based!\n },\n\n error(message) {\n const [lineNum, columnNum, msg] = this.getContextMessage(this.pos, message);\n\n const error = new ParseError(msg);\n\n error.line = lineNum;\n error.character = columnNum;\n error.shortMessage = message;\n\n throw error;\n },\n\n matchString(string) {\n if (this.str.substr(this.pos, string.length) === string) {\n this.pos += string.length;\n return string;\n }\n },\n\n matchPattern(pattern) {\n let match;\n\n if ((match = pattern.exec(this.remaining()))) {\n this.pos += match[0].length;\n return match[1] || match[0];\n }\n },\n\n sp() {\n this.matchPattern(leadingWhitespace);\n },\n\n remaining() {\n return this.str.substring(this.pos);\n },\n\n nextChar() {\n return this.str.charAt(this.pos);\n },\n\n warn(message) {\n const msg = this.getContextMessage(this.pos, message)[2];\n\n warnIfDebug(msg);\n }\n};\n\nParser.extend = function(proto) {\n const Parent = this;\n const Child = function(str, options) {\n Parser.call(this, str, options);\n };\n\n Child.prototype = create(Parent.prototype);\n\n for (const key in proto) {\n if (hasOwn(proto, key)) {\n Child.prototype[key] = proto[key];\n }\n }\n\n Child.extend = Parser.extend;\n return Child;\n};\n\nexport default Parser;\n","export const TEXT = 1;\nexport const INTERPOLATOR = 2;\nexport const TRIPLE = 3;\nexport const SECTION = 4;\nexport const INVERTED = 5;\nexport const CLOSING = 6;\nexport const ELEMENT = 7;\nexport const PARTIAL = 8;\nexport const COMMENT = 9;\nexport const DELIMCHANGE = 10;\nexport const ANCHOR = 11;\nexport const ATTRIBUTE = 13;\nexport const CLOSING_TAG = 14;\nexport const COMPONENT = 15;\nexport const YIELDER = 16;\nexport const INLINE_PARTIAL = 17;\nexport const DOCTYPE = 18;\nexport const ALIAS = 19;\n\nexport const AWAIT = 55;\n\nexport const NUMBER_LITERAL = 20;\nexport const STRING_LITERAL = 21;\nexport const ARRAY_LITERAL = 22;\nexport const OBJECT_LITERAL = 23;\nexport const BOOLEAN_LITERAL = 24;\nexport const REGEXP_LITERAL = 25;\n\nexport const GLOBAL = 26;\nexport const KEY_VALUE_PAIR = 27;\n\nexport const REFERENCE = 30;\nexport const REFINEMENT = 31;\nexport const MEMBER = 32;\nexport const PREFIX_OPERATOR = 33;\nexport const BRACKETED = 34;\nexport const CONDITIONAL = 35;\nexport const INFIX_OPERATOR = 36;\n\nexport const INVOCATION = 40;\n\nexport const SECTION_IF = 50;\nexport const SECTION_UNLESS = 51;\nexport const SECTION_EACH = 52;\nexport const SECTION_WITH = 53;\nexport const SECTION_IF_WITH = 54;\n\nexport const ELSE = 60;\nexport const ELSEIF = 61;\nexport const THEN = 62;\nexport const CATCH = 63;\n\nexport const EVENT = 70;\nexport const DECORATOR = 71;\nexport const TRANSITION = 72;\nexport const BINDING_FLAG = 73;\nexport const DELEGATE_FLAG = 74;\n","const delimiterChangePattern = /^[^\\s=]+/;\nconst whitespacePattern = /^\\s+/;\n\nexport default function readDelimiterChange(parser) {\n if (!parser.matchString('=')) {\n return null;\n }\n\n const start = parser.pos;\n\n // allow whitespace before new opening delimiter\n parser.sp();\n\n const opening = parser.matchPattern(delimiterChangePattern);\n if (!opening) {\n parser.pos = start;\n return null;\n }\n\n // allow whitespace (in fact, it's necessary...)\n if (!parser.matchPattern(whitespacePattern)) {\n return null;\n }\n\n const closing = parser.matchPattern(delimiterChangePattern);\n if (!closing) {\n parser.pos = start;\n return null;\n }\n\n // allow whitespace before closing '='\n parser.sp();\n\n if (!parser.matchString('=')) {\n parser.pos = start;\n return null;\n }\n\n return [opening, closing];\n}\n","import { REGEXP_LITERAL } from '../../../../../config/types';\n\nconst regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nexport default function readNumberLiteral(parser) {\n let result;\n\n if ((result = parser.matchPattern(regexpPattern))) {\n return {\n t: REGEXP_LITERAL,\n v: result\n };\n }\n\n return null;\n}\n","const pattern = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nexport default function escapeRegExp(str) {\n return str.replace(pattern, '\\\\$&');\n}\n","import escapeRegExp from 'utils/escapeRegExp';\n\nconst regExpCache = {};\n\nexport default function(haystack, needles) {\n return haystack.search(\n regExpCache[needles.join()] ||\n (regExpCache[needles.join()] = new RegExp(needles.map(escapeRegExp).join('|')))\n );\n}\n","import { keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\n//export const booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nexport const booleanAttributes = {\n allowfullscreen: 1,\n async: 1,\n autofocus: 1,\n autoplay: 1,\n checked: 1,\n compact: 1,\n controls: 1,\n declare: 1,\n default: 1,\n defaultchecked: 1,\n defaultmuted: 1,\n defaultselected: 1,\n defer: 1,\n disabled: 1,\n enabled: 1,\n formnovalidate: 1,\n hidden: 1,\n indeterminate: 1,\n inert: 1,\n ismap: 1,\n itemscope: 1,\n loop: 1,\n multiple: 1,\n muted: 1,\n nohref: 1,\n noresize: 1,\n noshade: 1,\n novalidate: 1,\n nowrap: 1,\n open: 1,\n pauseonexit: 1,\n readonly: 1,\n required: 1,\n reversed: 1,\n scoped: 1,\n seamless: 1,\n selected: 1,\n sortable: 1,\n translate: 1,\n truespeed: 1,\n typemustmatch: 1,\n visible: 1\n};\nexport const voidElements = {\n area: 1,\n base: 1,\n br: 1,\n col: 1,\n command: 1,\n doctype: 1,\n embed: 1,\n hr: 1,\n img: 1,\n input: 1,\n keygen: 1,\n link: 1,\n meta: 1,\n param: 1,\n source: 1,\n track: 1,\n wbr: 1\n};\n\nconst htmlEntities = {\n quot: 34,\n amp: 38,\n apos: 39,\n lt: 60,\n gt: 62,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n copy: 169,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n reg: 174,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n sup1: 185,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n Agrave: 192,\n Aacute: 193,\n Acirc: 194,\n Atilde: 195,\n Auml: 196,\n Aring: 197,\n AElig: 198,\n Ccedil: 199,\n Egrave: 200,\n Eacute: 201,\n Ecirc: 202,\n Euml: 203,\n Igrave: 204,\n Iacute: 205,\n Icirc: 206,\n Iuml: 207,\n ETH: 208,\n Ntilde: 209,\n Ograve: 210,\n Oacute: 211,\n Ocirc: 212,\n Otilde: 213,\n Ouml: 214,\n times: 215,\n Oslash: 216,\n Ugrave: 217,\n Uacute: 218,\n Ucirc: 219,\n Uuml: 220,\n Yacute: 221,\n THORN: 222,\n szlig: 223,\n agrave: 224,\n aacute: 225,\n acirc: 226,\n atilde: 227,\n auml: 228,\n aring: 229,\n aelig: 230,\n ccedil: 231,\n egrave: 232,\n eacute: 233,\n ecirc: 234,\n euml: 235,\n igrave: 236,\n iacute: 237,\n icirc: 238,\n iuml: 239,\n eth: 240,\n ntilde: 241,\n ograve: 242,\n oacute: 243,\n ocirc: 244,\n otilde: 245,\n ouml: 246,\n divide: 247,\n oslash: 248,\n ugrave: 249,\n uacute: 250,\n ucirc: 251,\n uuml: 252,\n yacute: 253,\n thorn: 254,\n yuml: 255,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830\n};\nconst controlCharacters = [\n 8364,\n 129,\n 8218,\n 402,\n 8222,\n 8230,\n 8224,\n 8225,\n 710,\n 8240,\n 352,\n 8249,\n 338,\n 141,\n 381,\n 143,\n 144,\n 8216,\n 8217,\n 8220,\n 8221,\n 8226,\n 8211,\n 8212,\n 732,\n 8482,\n 353,\n 8250,\n 339,\n 157,\n 382,\n 376\n];\nconst entityPattern = new RegExp(\n '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + keys(htmlEntities).join('|') + '));?',\n 'g'\n);\nconst codePointSupport = isFunction(String.fromCodePoint);\nconst codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nexport function decodeCharacterReferences(html) {\n return html.replace(entityPattern, (match, entity) => {\n let code;\n\n // Handle named entities\n if (entity[0] !== '#') {\n code = htmlEntities[entity];\n } else if (entity[1] === 'x') {\n code = parseInt(entity.substring(2), 16);\n } else {\n code = parseInt(entity.substring(1), 10);\n }\n\n if (!code) {\n return match;\n }\n\n return codeToChar(validateCode(code));\n });\n}\n\nconst lessThan = /</g;\nconst greaterThan = />/g;\nconst amp = /&/g;\nconst invalid = 65533;\n\nexport function escapeHtml(str) {\n return str\n .replace(amp, '&')\n .replace(lessThan, '<')\n .replace(greaterThan, '>');\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\n/* istanbul ignore next */\nfunction validateCode(code) {\n if (!code) {\n return invalid;\n }\n\n // line feed becomes generic whitespace\n if (code === 10) {\n return 32;\n }\n\n // ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n if (code < 128) {\n return code;\n }\n\n // code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n // to correct the mistake or we'll end up with missing € signs and so on\n if (code <= 159) {\n return controlCharacters[code - 128];\n }\n\n // basic multilingual plane\n if (code < 55296) {\n return code;\n }\n\n // UTF-16 surrogate halves\n if (code <= 57343) {\n return invalid;\n }\n\n // rest of the basic multilingual plane\n if (code <= 65535) {\n return code;\n } else if (!codePointSupport) {\n return invalid;\n }\n\n // supplementary multilingual plane 0x10000 - 0x1ffff\n if (code >= 65536 && code <= 131071) {\n return code;\n }\n\n // supplementary ideographic plane 0x20000 - 0x2ffff\n if (code >= 131072 && code <= 196607) {\n return code;\n }\n\n return invalid;\n}\n","export const expectedExpression = 'Expected a JavaScript expression';\nexport const expectedParen = 'Expected closing paren';\n","import { NUMBER_LITERAL } from '../../../../../config/types';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nconst numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nexport default function readNumberLiteral(parser) {\n let result;\n\n if ((result = parser.matchPattern(numberPattern))) {\n return {\n t: NUMBER_LITERAL,\n v: result\n };\n }\n\n return null;\n}\n","import { BOOLEAN_LITERAL } from '../../../../../config/types';\n\nexport default function readBooleanLiteral(parser) {\n const remaining = parser.remaining();\n\n if (remaining.substr(0, 4) === 'true') {\n parser.pos += 4;\n return {\n t: BOOLEAN_LITERAL,\n v: 'true'\n };\n }\n\n if (remaining.substr(0, 5) === 'false') {\n parser.pos += 5;\n return {\n t: BOOLEAN_LITERAL,\n v: 'false'\n };\n }\n\n return null;\n}\n","// Match one or more characters until: \", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nconst stringMiddlePattern = /^(?=.)[^\"'\\\\]+?(?:(?!.)|(?=[\"'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nexport const escapeSequencePattern = /^\\\\(?:[`'\"\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nexport const lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nexport default function(okQuote) {\n return function(parser) {\n let literal = '\"';\n let done = false;\n let next;\n\n while (!done) {\n next =\n parser.matchPattern(stringMiddlePattern) ||\n parser.matchPattern(escapeSequencePattern) ||\n parser.matchString(okQuote);\n if (next) {\n if (next === `\"`) {\n literal += `\\\\\"`;\n } else if (next === `\\\\'`) {\n literal += `'`;\n } else {\n literal += next;\n }\n } else {\n next = parser.matchPattern(lineContinuationPattern);\n if (next) {\n // convert \\(newline-like) into a \\u escape, which is allowed in JSON\n literal += '\\\\u' + ('000' + next.charCodeAt(1).toString(16)).slice(-4);\n } else {\n done = true;\n }\n }\n }\n\n literal += '\"';\n\n // use JSON.parse to interpret escapes\n return JSON.parse(literal);\n };\n}\n","import { STRING_LITERAL } from '../../../../../config/types';\nimport makeQuotedStringMatcher from './stringLiteral/makeQuotedStringMatcher';\n\nconst singleMatcher = makeQuotedStringMatcher(`\"`);\nconst doubleMatcher = makeQuotedStringMatcher(`'`);\n\nexport default function(parser) {\n const start = parser.pos;\n const quote = parser.matchString(`'`) || parser.matchString(`\"`);\n\n if (quote) {\n const string = (quote === `'` ? singleMatcher : doubleMatcher)(parser);\n\n if (!parser.matchString(quote)) {\n parser.pos = start;\n return null;\n }\n\n return {\n t: STRING_LITERAL,\n v: string\n };\n }\n\n return null;\n}\n","import readExpression from '../../../readExpression';\nimport { STRING_LITERAL, BRACKETED, INFIX_OPERATOR } from '../../../../../config/types';\nimport {\n escapeSequencePattern,\n lineContinuationPattern\n} from './stringLiteral/makeQuotedStringMatcher';\n\n// Match one or more characters until: \", ', or \\\nconst stringMiddlePattern = /^[^`\"\\\\\\$]+?(?:(?=[`\"\\\\\\$]))/;\n\nconst escapes = /[\\r\\n\\t\\b\\f]/g;\nfunction getString(literal) {\n return JSON.parse(`\"${literal.replace(escapes, escapeChar)}\"`);\n}\n\nfunction escapeChar(c) {\n switch (c) {\n case '\\n':\n return '\\\\n';\n case '\\r':\n return '\\\\r';\n case '\\t':\n return '\\\\t';\n case '\\b':\n return '\\\\b';\n case '\\f':\n return '\\\\f';\n }\n}\n\nexport default function readTemplateStringLiteral(parser) {\n if (!parser.matchString('`')) return null;\n\n let literal = '';\n let done = false;\n let next;\n const parts = [];\n\n while (!done) {\n next =\n parser.matchPattern(stringMiddlePattern) ||\n parser.matchPattern(escapeSequencePattern) ||\n parser.matchString('$') ||\n parser.matchString('\"');\n if (next) {\n if (next === `\"`) {\n literal += `\\\\\"`;\n } else if (next === '\\\\`') {\n literal += '`';\n } else if (next === '$') {\n if (parser.matchString('{')) {\n parts.push({ t: STRING_LITERAL, v: getString(literal) });\n literal = '';\n\n parser.sp();\n const expr = readExpression(parser);\n\n if (!expr) parser.error('Expected valid expression');\n\n parts.push({ t: BRACKETED, x: expr });\n\n parser.sp();\n if (!parser.matchString('}'))\n parser.error(`Expected closing '}' after interpolated expression`);\n } else {\n literal += '$';\n }\n } else {\n literal += next;\n }\n } else {\n next = parser.matchPattern(lineContinuationPattern);\n if (next) {\n // convert \\(newline-like) into a \\u escape, which is allowed in JSON\n literal += '\\\\u' + ('000' + next.charCodeAt(1).toString(16)).slice(-4);\n } else {\n done = true;\n }\n }\n }\n\n if (literal.length) parts.push({ t: STRING_LITERAL, v: getString(literal) });\n\n if (!parser.matchString('`')) parser.error(\"Expected closing '`'\");\n\n if (parts.length === 1) {\n return parts[0];\n } else {\n let result = parts.pop();\n let part;\n\n while ((part = parts.pop())) {\n result = {\n t: INFIX_OPERATOR,\n s: '+',\n o: [part, result]\n };\n }\n\n return {\n t: BRACKETED,\n x: result\n };\n }\n}\n","export const name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nexport const spreadPattern = /^\\s*\\.{3}/;\nexport const legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nexport const relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n","import readStringLiteral from '../primary/literal/readStringLiteral';\nimport readNumberLiteral from '../primary/literal/readNumberLiteral';\nimport { name as namePattern } from './patterns';\n\nconst identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nexport default function readKey(parser) {\n let token;\n\n if ((token = readStringLiteral(parser))) {\n return identifier.test(token.v) ? token.v : '\"' + token.v.replace(/\"/g, '\\\\\"') + '\"';\n }\n\n if ((token = readNumberLiteral(parser))) {\n return token.v;\n }\n\n if ((token = parser.matchPattern(namePattern))) {\n return token;\n }\n\n return null;\n}\n","import { KEY_VALUE_PAIR, REFERENCE } from 'src/config/types';\nimport readKey from '../../../shared/readKey';\nimport readExpression from '../../../../readExpression';\nimport { name as namePattern, spreadPattern } from '../../../shared/patterns';\n\nexport default function readKeyValuePair(parser) {\n let spread;\n const start = parser.pos;\n\n // allow whitespace between '{' and key\n parser.sp();\n\n const refKey = parser.nextChar() !== \"'\" && parser.nextChar() !== '\"';\n if (refKey) spread = parser.matchPattern(spreadPattern);\n\n const key = spread ? readExpression(parser) : readKey(parser);\n if (key === null) {\n parser.pos = start;\n return null;\n }\n\n // allow whitespace between key and ':'\n parser.sp();\n\n // es2015 shorthand property\n if (refKey && (parser.nextChar() === ',' || parser.nextChar() === '}')) {\n if (!spread && !namePattern.test(key)) {\n parser.error(`Expected a valid reference, but found '${key}' instead.`);\n }\n\n const pair = {\n t: KEY_VALUE_PAIR,\n k: key,\n v: {\n t: REFERENCE,\n n: key\n }\n };\n\n if (spread) {\n pair.p = true;\n }\n\n return pair;\n }\n\n // next character must be ':'\n if (!parser.matchString(':')) {\n parser.pos = start;\n return null;\n }\n\n // allow whitespace between ':' and value\n parser.sp();\n\n // next expression must be a, well... expression\n const value = readExpression(parser);\n if (value === null) {\n parser.pos = start;\n return null;\n }\n\n return {\n t: KEY_VALUE_PAIR,\n k: key,\n v: value\n };\n}\n","import getKeyValuePair from './keyValuePair';\n\nexport default function readKeyValuePairs(parser) {\n const start = parser.pos;\n\n const pair = getKeyValuePair(parser);\n if (pair === null) {\n return null;\n }\n\n const pairs = [pair];\n\n if (parser.matchString(',')) {\n const keyValuePairs = readKeyValuePairs(parser);\n\n if (!keyValuePairs) {\n parser.pos = start;\n return null;\n }\n\n return pairs.concat(keyValuePairs);\n }\n\n return pairs;\n}\n","import { OBJECT_LITERAL } from '../../../../../config/types';\nimport readKeyValuePairs from './objectLiteral/keyValuePairs';\n\nexport default function(parser) {\n const start = parser.pos;\n\n // allow whitespace\n parser.sp();\n\n if (!parser.matchString('{')) {\n parser.pos = start;\n return null;\n }\n\n const keyValuePairs = readKeyValuePairs(parser);\n\n // allow whitespace between final value and '}'\n parser.sp();\n\n if (!parser.matchString('}')) {\n parser.pos = start;\n return null;\n }\n\n return {\n t: OBJECT_LITERAL,\n m: keyValuePairs\n };\n}\n","import { ARRAY_LITERAL } from 'src/config/types';\nimport readExpressionList from '../../shared/readExpressionList';\n\nexport default function(parser) {\n const start = parser.pos;\n\n // allow whitespace before '['\n parser.sp();\n\n if (!parser.matchString('[')) {\n parser.pos = start;\n return null;\n }\n\n const expressionList = readExpressionList(parser, true);\n\n if (!parser.matchString(']')) {\n parser.pos = start;\n return null;\n }\n\n return {\n t: ARRAY_LITERAL,\n m: expressionList\n };\n}\n","import readNumberLiteral from './literal/readNumberLiteral';\nimport readBooleanLiteral from './literal/readBooleanLiteral';\nimport readStringLiteral from './literal/readStringLiteral';\nimport readTemplateStringLiteral from './literal/readTemplateStringLiteral';\nimport readObjectLiteral from './literal/readObjectLiteral';\nimport readArrayLiteral from './literal/readArrayLiteral';\nimport readRegexpLiteral from './literal/readRegexpLiteral';\n\nexport default function readLiteral(parser) {\n return (\n readNumberLiteral(parser) ||\n readBooleanLiteral(parser) ||\n readStringLiteral(parser) ||\n readTemplateStringLiteral(parser) ||\n readObjectLiteral(parser) ||\n readArrayLiteral(parser) ||\n readRegexpLiteral(parser)\n );\n}\n","import { BRACKETED, GLOBAL, REFERENCE } from 'src/config/types';\nimport { normalise } from 'src/shared/keypaths';\nimport { legalReference, relaxedName } from '../shared/patterns';\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nconst globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nconst keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nconst prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nconst specials = /^(key|index|keypath|rootpath|this|global|shared|context|event|node|local|style|helpers|last)/;\n\nexport default function readReference(parser) {\n let prefix, name, global, reference, lastDotIndex;\n\n const startPos = parser.pos;\n\n prefix = parser.matchPattern(prefixPattern) || '';\n name =\n (!prefix && parser.relaxedNames && parser.matchPattern(relaxedName)) ||\n parser.matchPattern(legalReference);\n const actual = prefix.length + ((name && name.length) || 0);\n\n if (prefix === '@.') {\n prefix = '@';\n if (name) name = 'this.' + name;\n else name = 'this';\n }\n\n if (!name && prefix) {\n name = prefix;\n prefix = '';\n }\n\n if (!name) {\n return null;\n }\n\n if (prefix === '@') {\n if (!specials.test(name)) {\n parser.error(`Unrecognized special reference @${name}`);\n } else if ((~name.indexOf('event') || ~name.indexOf('node')) && !parser.inEvent) {\n parser.error(`@event and @node are only valid references within an event directive`);\n } else if (~name.indexOf('context')) {\n parser.pos = parser.pos - (name.length - 7);\n return {\n t: BRACKETED,\n x: {\n t: REFERENCE,\n n: '@context'\n }\n };\n }\n }\n\n // bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n if (!prefix && !parser.relaxedNames && keywords.test(name)) {\n parser.pos = startPos;\n return null;\n }\n\n // if this is a browser global, stop here\n if (!prefix && globals.test(name)) {\n global = globals.exec(name)[0];\n parser.pos = startPos + global.length;\n\n return {\n t: GLOBAL,\n v: global\n };\n }\n\n reference = (prefix || '') + normalise(name);\n\n if (parser.matchString('(')) {\n // if this is a method invocation (as opposed to a function) we need\n // to strip the method name from the reference combo, else the context\n // will be wrong\n // but only if the reference was actually a member and not a refinement\n lastDotIndex = reference.lastIndexOf('.');\n if (lastDotIndex !== -1 && name[name.length - 1] !== ']') {\n if (lastDotIndex === 0) {\n reference = '.';\n parser.pos = startPos;\n } else {\n const refLength = reference.length;\n reference = reference.substr(0, lastDotIndex);\n parser.pos = startPos + (actual - (refLength - lastDotIndex));\n }\n } else {\n parser.pos -= 1;\n }\n }\n\n return {\n t: REFERENCE,\n n: reference.replace(/^this\\./, './').replace(/^this$/, '.')\n };\n}\n","import { BRACKETED } from 'src/config/types';\nimport { expectedExpression, expectedParen } from '../shared/errors';\nimport readExpression from '../../readExpression';\n\nexport default function readBracketedExpression(parser) {\n if (!parser.matchString('(')) return null;\n\n parser.sp();\n\n const expr = readExpression(parser);\n\n if (!expr) parser.error(expectedExpression);\n\n parser.sp();\n\n if (!parser.matchString(')')) parser.error(expectedParen);\n\n return {\n t: BRACKETED,\n x: expr\n };\n}\n","import readLiteral from './primary/readLiteral';\nimport readReference from './primary/readReference';\nimport readBracketedExpression from './primary/readBracketedExpression';\n\nexport default function(parser) {\n return readLiteral(parser) || readReference(parser) || readBracketedExpression(parser);\n}\n","import { REFINEMENT } from 'config/types';\nimport { expectedExpression } from './errors';\nimport { name as namePattern } from './patterns';\nimport readExpression from '../../readExpression';\n\nexport default function readRefinement(parser) {\n // some things call for strict refinement (partial names), meaning no space between reference and refinement\n if (!parser.strictRefinement) {\n parser.sp();\n }\n\n // \".\" name\n if (parser.matchString('.')) {\n parser.sp();\n\n const name = parser.matchPattern(namePattern);\n if (name) {\n return {\n t: REFINEMENT,\n n: name\n };\n }\n\n parser.error('Expected a property name');\n }\n\n // \"[\" expression \"]\"\n if (parser.matchString('[')) {\n parser.sp();\n\n const expr = readExpression(parser);\n if (!expr) parser.error(expectedExpression);\n\n parser.sp();\n\n if (!parser.matchString(']')) parser.error(`Expected ']'`);\n\n return {\n t: REFINEMENT,\n x: expr\n };\n }\n\n return null;\n}\n","import { MEMBER, INVOCATION } from 'config/types';\nimport readPrimary from './readPrimary';\nimport readExpressionList from './shared/readExpressionList';\nimport readRefinement from './shared/readRefinement';\nimport { expectedParen } from './shared/errors';\n\nexport default function(parser) {\n let expression = readPrimary(parser);\n\n if (!expression) return null;\n\n while (expression) {\n const refinement = readRefinement(parser);\n if (refinement) {\n expression = {\n t: MEMBER,\n x: expression,\n r: refinement\n };\n } else if (parser.matchString('(')) {\n parser.sp();\n const expressionList = readExpressionList(parser, true);\n\n parser.sp();\n\n if (!parser.matchString(')')) {\n parser.error(expectedParen);\n }\n\n expression = {\n t: INVOCATION,\n x: expression\n };\n\n if (expressionList) expression.o = expressionList;\n } else {\n break;\n }\n }\n\n return expression;\n}\n","import { PREFIX_OPERATOR } from 'config/types';\nimport { expectedExpression } from './shared/errors';\nimport readMemberOrInvocation from './readMemberOrInvocation';\nimport readExpression from '../readExpression';\n\nlet readTypeOf;\n\nconst makePrefixSequenceMatcher = function(symbol, fallthrough) {\n return function(parser) {\n let expression;\n\n if ((expression = fallthrough(parser))) {\n return expression;\n }\n\n if (!parser.matchString(symbol)) {\n return null;\n }\n\n parser.sp();\n\n expression = readExpression(parser);\n if (!expression) {\n parser.error(expectedExpression);\n }\n\n return {\n s: symbol,\n o: expression,\n t: PREFIX_OPERATOR\n };\n };\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n let i, len, matcher, fallthrough;\n\n const prefixOperators = '! ~ + - typeof'.split(' ');\n\n fallthrough = readMemberOrInvocation;\n for (i = 0, len = prefixOperators.length; i < len; i += 1) {\n matcher = makePrefixSequenceMatcher(prefixOperators[i], fallthrough);\n fallthrough = matcher;\n }\n\n // typeof operator is higher precedence than multiplication, so provides the\n // fallthrough for the multiplication sequence matcher we're about to create\n // (we're skipping void and delete)\n readTypeOf = fallthrough;\n})();\n\nexport default readTypeOf;\n","import { INFIX_OPERATOR } from 'config/types';\nimport readTypeof from './readTypeof';\n\nlet readLogicalOr;\n\nconst makeInfixSequenceMatcher = function(symbol, fallthrough) {\n return function(parser) {\n // > and / have to be quoted\n if (parser.inUnquotedAttribute && (symbol === '>' || symbol === '/'))\n return fallthrough(parser);\n\n let start, left, right;\n\n left = fallthrough(parser);\n if (!left) {\n return null;\n }\n\n // Loop to handle left-recursion in a case like `a * b * c` and produce\n // left association, i.e. `(a * b) * c`. The matcher can't call itself\n // to parse `left` because that would be infinite regress.\n while (true) {\n start = parser.pos;\n\n parser.sp();\n\n if (!parser.matchString(symbol)) {\n parser.pos = start;\n return left;\n }\n\n // special case - in operator must not be followed by [a-zA-Z_$0-9]\n if (symbol === 'in' && /[a-zA-Z_$0-9]/.test(parser.remaining().charAt(0))) {\n parser.pos = start;\n return left;\n }\n\n parser.sp();\n\n // right operand must also consist of only higher-precedence operators\n right = fallthrough(parser);\n if (!right) {\n parser.pos = start;\n return left;\n }\n\n left = {\n t: INFIX_OPERATOR,\n s: symbol,\n o: [left, right]\n };\n\n // Loop back around. If we don't see another occurrence of the symbol,\n // we'll return left.\n }\n };\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n let i, len, matcher, fallthrough;\n\n // All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n // Each sequence matcher will initially fall through to its higher precedence\n // neighbour, and only attempt to match if one of the higher precedence operators\n // (or, ultimately, a literal, reference, or bracketed expression) already matched\n const infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split(\n ' '\n );\n\n // A typeof operator is higher precedence than multiplication\n fallthrough = readTypeof;\n for (i = 0, len = infixOperators.length; i < len; i += 1) {\n matcher = makeInfixSequenceMatcher(infixOperators[i], fallthrough);\n fallthrough = matcher;\n }\n\n // Logical OR is the fallthrough for the conditional matcher\n readLogicalOr = fallthrough;\n})();\n\nexport default readLogicalOr;\n","import { CONDITIONAL } from 'config/types';\nimport readLogicalOr from './readLogicalOr';\nimport { expectedExpression } from './shared/errors';\nimport readExpression from '../readExpression';\n\n// The conditional operator is the lowest precedence operator, so we start here\nexport default function getConditional(parser) {\n const expression = readLogicalOr(parser);\n if (!expression) {\n return null;\n }\n\n const start = parser.pos;\n\n parser.sp();\n\n if (!parser.matchString('?')) {\n parser.pos = start;\n return expression;\n }\n\n parser.sp();\n\n const ifTrue = readExpression(parser);\n if (!ifTrue) {\n parser.error(expectedExpression);\n }\n\n parser.sp();\n\n if (!parser.matchString(':')) {\n parser.error('Expected \":\"');\n }\n\n parser.sp();\n\n const ifFalse = readExpression(parser);\n if (!ifFalse) {\n parser.error(expectedExpression);\n }\n\n return {\n t: CONDITIONAL,\n o: [expression, ifTrue, ifFalse]\n };\n}\n","import readConditional from './expressions/readConditional';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpression(parser) {\n // if eval is false, no expressions\n if (parser.allowExpressions === false) {\n const ref = readReference(parser);\n parser.sp();\n return ref;\n }\n\n // The conditional operator is the lowest precedence operator (except yield,\n // assignment operators, and commas, none of which are supported), so we\n // start there. If it doesn't match, it 'falls through' to progressively\n // higher precedence operators, until it eventually matches (or fails to\n // match) a 'primary' - a literal or a reference. This way, the abstract syntax\n // tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n return readConditional(parser);\n}\n","import { expectedExpression } from './errors';\nimport readExpression from '../../readExpression';\nimport { spreadPattern } from './patterns';\n\nexport default function readExpressionList(parser, spread) {\n let isSpread;\n const expressions = [];\n\n const pos = parser.pos;\n\n do {\n parser.sp();\n\n if (spread) {\n isSpread = parser.matchPattern(spreadPattern);\n }\n\n const expr = readExpression(parser);\n\n if (expr === null && expressions.length) {\n parser.error(expectedExpression);\n } else if (expr === null) {\n parser.pos = pos;\n return null;\n }\n\n if (isSpread) {\n expr.p = true;\n }\n\n expressions.push(expr);\n\n parser.sp();\n } while (parser.matchString(','));\n\n return expressions;\n}\n","import { REFERENCE } from 'config/types';\nimport readExpression from './readExpression';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpressionOrReference(parser, expectedFollowers) {\n const start = parser.pos;\n const expression = readExpression(parser);\n\n if (!expression) {\n // valid reference but invalid expression e.g. `{{new}}`?\n const ref = parser.matchPattern(/^(\\w+)/);\n if (ref) {\n return {\n t: REFERENCE,\n n: ref\n };\n }\n\n return null;\n }\n\n for (let i = 0; i < expectedFollowers.length; i += 1) {\n if (parser.remaining().substr(0, expectedFollowers[i].length) === expectedFollowers[i]) {\n return expression;\n }\n }\n\n parser.pos = start;\n return readReference(parser);\n}\n","import {\n REFERENCE,\n BOOLEAN_LITERAL,\n GLOBAL,\n NUMBER_LITERAL,\n REGEXP_LITERAL,\n STRING_LITERAL,\n ARRAY_LITERAL,\n OBJECT_LITERAL,\n KEY_VALUE_PAIR,\n PREFIX_OPERATOR,\n INFIX_OPERATOR,\n INVOCATION,\n BRACKETED,\n MEMBER,\n REFINEMENT,\n CONDITIONAL\n} from 'config/types';\nimport { isObject, isString } from 'utils/is';\n\nexport default function flattenExpression(expression) {\n let refs;\n let count = 0;\n\n extractRefs(expression, (refs = []));\n const stringified = stringify(expression);\n\n return {\n r: refs,\n s: getVars(stringified)\n };\n\n function getVars(expr) {\n const vars = [];\n for (let i = count - 1; i >= 0; i--) {\n vars.push(`x$${i}`);\n }\n return vars.length ? `(function(){var ${vars.join(',')};return(${expr});})()` : expr;\n }\n\n function stringify(node) {\n if (isString(node)) {\n return node;\n }\n\n switch (node.t) {\n case BOOLEAN_LITERAL:\n case GLOBAL:\n case NUMBER_LITERAL:\n case REGEXP_LITERAL:\n return node.v;\n\n case STRING_LITERAL:\n return JSON.stringify(String(node.v));\n\n case ARRAY_LITERAL:\n if (node.m && hasSpread(node.m)) {\n return `[].concat(${makeSpread(node.m, '[', ']', stringify)})`;\n } else {\n return '[' + (node.m ? node.m.map(stringify).join(',') : '') + ']';\n }\n\n case OBJECT_LITERAL:\n if (node.m && hasSpread(node.m)) {\n return `Object.assign({},${makeSpread(node.m, '{', '}', stringifyPair)})`;\n } else {\n return '{' + (node.m ? node.m.map(n => `${n.k}:${stringify(n.v)}`).join(',') : '') + '}';\n }\n\n case PREFIX_OPERATOR:\n return (node.s === 'typeof' ? 'typeof ' : node.s) + stringify(node.o);\n\n case INFIX_OPERATOR:\n return (\n stringify(node.o[0]) +\n (node.s.substr(0, 2) === 'in' ? ' ' + node.s + ' ' : node.s) +\n stringify(node.o[1])\n );\n\n case INVOCATION:\n if (node.o && hasSpread(node.o)) {\n const id = count++;\n return `(x$${id}=${stringify(node.x)}).apply(x$${id},${stringify({\n t: ARRAY_LITERAL,\n m: node.o\n })})`;\n } else {\n return stringify(node.x) + '(' + (node.o ? node.o.map(stringify).join(',') : '') + ')';\n }\n\n case BRACKETED:\n return '(' + stringify(node.x) + ')';\n\n case MEMBER:\n return stringify(node.x) + stringify(node.r);\n\n case REFINEMENT:\n return node.n ? '.' + node.n : '[' + stringify(node.x) + ']';\n\n case CONDITIONAL:\n return stringify(node.o[0]) + '?' + stringify(node.o[1]) + ':' + stringify(node.o[2]);\n\n case REFERENCE:\n return '_' + refs.indexOf(node.n);\n\n default:\n throw new Error('Expected legal JavaScript');\n }\n }\n\n function stringifyPair(node) {\n return node.p ? stringify(node.k) : `${node.k}:${stringify(node.v)}`;\n }\n\n function makeSpread(list, open, close, fn) {\n const out = list.reduce(\n (a, c) => {\n if (c.p) {\n a.str += `${a.open ? close + ',' : a.str.length ? ',' : ''}${fn(c)}`;\n } else {\n a.str += `${!a.str.length ? open : !a.open ? ',' + open : ','}${fn(c)}`;\n }\n a.open = !c.p;\n return a;\n },\n { open: false, str: '' }\n );\n if (out.open) out.str += close;\n return out.str;\n }\n}\n\nfunction hasSpread(list) {\n for (let i = 0; i < list.length; i++) {\n if (list[i].p) return true;\n }\n\n return false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs(node, refs) {\n if (node.t === REFERENCE && isString(node.n)) {\n if (!~refs.indexOf(node.n)) {\n refs.unshift(node.n);\n }\n }\n\n const list = node.o || node.m;\n if (list) {\n if (isObject(list)) {\n extractRefs(list, refs);\n } else {\n let i = list.length;\n while (i--) {\n extractRefs(list[i], refs);\n }\n }\n }\n\n if (node.k && node.t === KEY_VALUE_PAIR && !isString(node.k)) {\n extractRefs(node.k, refs);\n }\n\n if (node.x) {\n extractRefs(node.x, refs);\n }\n\n if (node.r) {\n extractRefs(node.r, refs);\n }\n\n if (node.v) {\n extractRefs(node.v, refs);\n }\n}\n","import { REFERENCE, BRACKETED, MEMBER, REFINEMENT } from 'config/types';\nimport flattenExpression from './flattenExpression';\n\nexport default function refineExpression(expression, mustache) {\n let referenceExpression;\n\n if (expression) {\n while (expression.t === BRACKETED && expression.x) {\n expression = expression.x;\n }\n\n if (expression.t === REFERENCE) {\n const n = expression.n;\n if (!~n.indexOf('@context')) {\n mustache.r = expression.n;\n } else {\n mustache.x = flattenExpression(expression);\n }\n } else {\n if ((referenceExpression = getReferenceExpression(expression))) {\n mustache.rx = referenceExpression;\n } else {\n mustache.x = flattenExpression(expression);\n }\n }\n\n return mustache;\n }\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression(expression) {\n const members = [];\n let refinement;\n\n while (expression.t === MEMBER && expression.r.t === REFINEMENT) {\n refinement = expression.r;\n\n if (refinement.x) {\n if (refinement.x.t === REFERENCE) {\n members.unshift(refinement.x);\n } else {\n members.unshift(flattenExpression(refinement.x));\n }\n } else {\n members.unshift(refinement.n);\n }\n\n expression = expression.x;\n }\n\n if (expression.t !== REFERENCE) {\n return null;\n }\n\n return {\n r: expression.n,\n m: members\n };\n}\n","import {\n ARRAY_LITERAL,\n ATTRIBUTE,\n DECORATOR,\n DELEGATE_FLAG,\n BINDING_FLAG,\n INTERPOLATOR,\n TRANSITION,\n EVENT\n} from '../../../config/types';\nimport getLowestIndex from '../utils/getLowestIndex';\nimport readMustache from '../readMustache';\nimport { decodeCharacterReferences } from 'src/utils/html';\nimport readExpressionList from '../expressions/shared/readExpressionList';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport flattenExpression from 'parse/utils/flattenExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { isString } from 'utils/is';\n\nconst attributeNamePattern = /^[^\\s\"'>\\/=(]+/;\nconst onPattern = /^on/;\nconst eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nconst reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nconst decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nconst transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nconst boundPattern = /^((bind|class)-(([-a-zA-Z0-9_])+))$/;\nconst directives = {\n lazy: { t: BINDING_FLAG, v: 'l' },\n twoway: { t: BINDING_FLAG, v: 't' },\n 'no-delegation': { t: DELEGATE_FLAG }\n};\nconst unquotedAttributeValueTextPattern = /^[^\\s\"'=<>\\/`]+/;\nconst proxyEvent = /^[^\\s\"'=<>@\\[\\]()]*/;\nconst whitespace = /^\\s+/;\n\nconst slashes = /\\\\/g;\nfunction splitEvent(str) {\n const result = [];\n let s = 0;\n\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '-' && str[i - 1] !== '\\\\') {\n result.push(str.substring(s, i).replace(slashes, ''));\n s = i + 1;\n }\n }\n\n result.push(str.substring(s).replace(slashes, ''));\n\n return result;\n}\n\nexport default function readAttribute(parser) {\n let name, i, nearest, idx;\n\n parser.sp();\n\n name = parser.matchPattern(attributeNamePattern);\n if (!name) {\n return null;\n }\n\n // check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n nearest = name.length;\n for (i = 0; i < parser.tags.length; i++) {\n if (~(idx = name.indexOf(parser.tags[i].open))) {\n if (idx < nearest) nearest = idx;\n }\n }\n if (nearest < name.length) {\n parser.pos -= name.length - nearest;\n name = name.substr(0, nearest);\n if (!name) return null;\n }\n\n return { n: name };\n}\n\nfunction readAttributeValue(parser) {\n const start = parser.pos;\n\n // next character must be `=`, `/`, `>` or whitespace\n if (!/[=\\/>\\s]/.test(parser.nextChar())) {\n parser.error('Expected `=`, `/`, `>` or whitespace');\n }\n\n parser.sp();\n\n if (!parser.matchString('=')) {\n parser.pos = start;\n return null;\n }\n\n parser.sp();\n\n const valueStart = parser.pos;\n const startDepth = parser.sectionDepth;\n\n const value =\n readQuotedAttributeValue(parser, `'`) ||\n readQuotedAttributeValue(parser, `\"`) ||\n readUnquotedAttributeValue(parser);\n\n if (value === null) {\n parser.error('Expected valid attribute value');\n }\n\n if (parser.sectionDepth !== startDepth) {\n parser.pos = valueStart;\n parser.error(\n 'An attribute value must contain as many opening section tags as closing section tags'\n );\n }\n\n if (!value.length) {\n return '';\n }\n\n if (value.length === 1 && isString(value[0])) {\n return decodeCharacterReferences(value[0]);\n }\n\n return value;\n}\n\nfunction readUnquotedAttributeValueToken(parser) {\n let text, index;\n\n const start = parser.pos;\n\n text = parser.matchPattern(unquotedAttributeValueTextPattern);\n\n if (!text) {\n return null;\n }\n\n const haystack = text;\n const needles = parser.tags.map(t => t.open); // TODO refactor... we do this in readText.js as well\n\n if ((index = getLowestIndex(haystack, needles)) !== -1) {\n text = text.substr(0, index);\n parser.pos = start + text.length;\n }\n\n return text;\n}\n\nfunction readUnquotedAttributeValue(parser) {\n parser.inAttribute = true;\n\n const tokens = [];\n\n let token = readMustache(parser) || readUnquotedAttributeValueToken(parser);\n while (token) {\n tokens.push(token);\n token = readMustache(parser) || readUnquotedAttributeValueToken(parser);\n }\n\n if (!tokens.length) {\n return null;\n }\n\n parser.inAttribute = false;\n return tokens;\n}\n\nfunction readQuotedAttributeValue(parser, quoteMark) {\n const start = parser.pos;\n\n if (!parser.matchString(quoteMark)) {\n return null;\n }\n\n parser.inAttribute = quoteMark;\n\n const tokens = [];\n\n let token = readMustache(parser) || readQuotedStringToken(parser, quoteMark);\n while (token !== null) {\n tokens.push(token);\n token = readMustache(parser) || readQuotedStringToken(parser, quoteMark);\n }\n\n if (!parser.matchString(quoteMark)) {\n parser.pos = start;\n return null;\n }\n\n parser.inAttribute = false;\n\n return tokens;\n}\n\nfunction readQuotedStringToken(parser, quoteMark) {\n const haystack = parser.remaining();\n\n const needles = parser.tags.map(t => t.open); // TODO refactor... we do this in readText.js as well\n needles.push(quoteMark);\n\n const index = getLowestIndex(haystack, needles);\n\n if (index === -1) {\n parser.error('Quoted attribute value must have a closing quote');\n }\n\n if (!index) {\n return null;\n }\n\n parser.pos += index;\n return haystack.substr(0, index);\n}\n\nexport function readAttributeOrDirective(parser) {\n let match, directive;\n\n const attribute = readAttribute(parser, false);\n\n if (!attribute) return null;\n\n // lazy, twoway\n if ((directive = directives[attribute.n])) {\n attribute.t = directive.t;\n if (directive.v) attribute.v = directive.v;\n delete attribute.n; // no name necessary\n parser.sp();\n if (parser.nextChar() === '=') attribute.f = readAttributeValue(parser);\n } else if ((match = decoratorPattern.exec(attribute.n))) {\n // decorators\n attribute.n = match[1];\n attribute.t = DECORATOR;\n readArguments(parser, attribute);\n } else if ((match = transitionPattern.exec(attribute.n))) {\n // transitions\n attribute.n = match[1];\n attribute.t = TRANSITION;\n readArguments(parser, attribute);\n attribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n } else if ((match = eventPattern.exec(attribute.n))) {\n // on-click etc\n attribute.n = splitEvent(match[1]);\n attribute.t = EVENT;\n\n if (parser.matchString('(')) {\n attribute.a = flattenExpression({\n t: ARRAY_LITERAL,\n m: readExpressionList(parser)\n });\n if (!parser.matchString(')')) parser.error(`Expected closing ')'`);\n }\n\n parser.inEvent = true;\n\n // check for a proxy event\n if (!readProxyEvent(parser, attribute)) {\n // otherwise, it's an expression\n readArguments(parser, attribute, true);\n } else if (reservedEventNames.test(attribute.f)) {\n parser.pos -= attribute.f.length;\n parser.error(\n 'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)'\n );\n }\n\n parser.inEvent = false;\n } else if ((match = boundPattern.exec(attribute.n))) {\n // bound directives\n const bind = match[2] === 'bind';\n attribute.n = bind ? match[3] : match[1];\n attribute.t = ATTRIBUTE;\n readArguments(parser, attribute, false, true);\n\n if (!attribute.f && bind) {\n attribute.f = [{ t: INTERPOLATOR, r: match[3] }];\n }\n } else {\n parser.sp();\n const value = parser.nextChar() === '=' ? readAttributeValue(parser) : null;\n attribute.f = value != null ? value : attribute.f;\n\n if (parser.sanitizeEventAttributes && onPattern.test(attribute.n)) {\n return { exclude: true };\n } else {\n attribute.f = attribute.f || (attribute.f === '' ? '' : 0);\n attribute.t = ATTRIBUTE;\n }\n }\n\n return attribute;\n}\n\nfunction readProxyEvent(parser, attribute) {\n const start = parser.pos;\n if (!parser.matchString('=')) parser.error(`Missing required directive arguments`);\n\n const quote = parser.matchString(`'`) || parser.matchString(`\"`);\n parser.sp();\n const proxy = parser.matchPattern(proxyEvent);\n\n if (proxy !== undefined) {\n if (quote) {\n parser.sp();\n if (!parser.matchString(quote)) parser.pos = start;\n else return (attribute.f = proxy) || true;\n } else if (!parser.matchPattern(whitespace)) {\n parser.pos = start;\n } else {\n return (attribute.f = proxy) || true;\n }\n } else {\n parser.pos = start;\n }\n}\n\nfunction readArguments(parser, attribute, required = false, single = false) {\n parser.sp();\n if (!parser.matchString('=')) {\n if (required) parser.error(`Missing required directive arguments`);\n return;\n }\n parser.sp();\n\n const quote = parser.matchString('\"') || parser.matchString(\"'\");\n const spread = parser.spreadArgs;\n parser.spreadArgs = true;\n parser.inUnquotedAttribute = !quote;\n const expr = single\n ? readExpressionOrReference(parser, [quote || ' ', '/', '>'])\n : { m: readExpressionList(parser), t: ARRAY_LITERAL };\n parser.inUnquotedAttribute = false;\n parser.spreadArgs = spread;\n\n if (quote) {\n parser.sp();\n if (parser.matchString(quote) !== quote) parser.error(`Expected matching quote '${quote}'`);\n }\n\n if (single) {\n const interpolator = { t: INTERPOLATOR };\n refineExpression(expr, interpolator);\n attribute.f = [interpolator];\n } else {\n attribute.f = flattenExpression(expr);\n }\n}\n","import { DELIMCHANGE } from 'config/types';\nimport readDelimiterChange from './mustache/readDelimiterChange';\nimport readRegexpLiteral from './expressions/primary/literal/readRegexpLiteral';\nimport { readAttributeOrDirective } from './element/readAttribute';\n\nconst delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nexport default function readMustache(parser) {\n let mustache, i;\n\n // If we're inside a <script> or <style> tag, and we're not\n // interpolating, bug out\n if (parser.interpolate[parser.inside] === false) {\n return null;\n }\n\n for (i = 0; i < parser.tags.length; i += 1) {\n if ((mustache = readMustacheOfType(parser, parser.tags[i]))) {\n return mustache;\n }\n }\n\n if (parser.inTag && !parser.inAttribute) {\n mustache = readAttributeOrDirective(parser);\n if (mustache) {\n parser.sp();\n return mustache;\n }\n }\n}\n\nfunction readMustacheOfType(parser, tag) {\n let mustache, reader, i;\n\n const start = parser.pos;\n\n if (parser.matchString('\\\\' + tag.open)) {\n if (start === 0 || parser.str[start - 1] !== '\\\\') {\n return tag.open;\n }\n } else if (!parser.matchString(tag.open)) {\n return null;\n }\n\n // delimiter change?\n if ((mustache = readDelimiterChange(parser))) {\n // find closing delimiter or abort...\n if (!parser.matchString(tag.close)) {\n return null;\n }\n\n // ...then make the switch\n tag.open = mustache[0];\n tag.close = mustache[1];\n parser.sortMustacheTags();\n\n return delimiterChangeToken;\n }\n\n parser.sp();\n\n // illegal section closer\n if (parser.matchString('/')) {\n parser.pos -= 1;\n const rewind = parser.pos;\n if (!readRegexpLiteral(parser)) {\n parser.pos = rewind - tag.close.length;\n if (parser.inAttribute) {\n parser.pos = start;\n return null;\n } else {\n parser.error(\"Attempted to close a section that wasn't open\");\n }\n } else {\n parser.pos = rewind;\n }\n }\n\n for (i = 0; i < tag.readers.length; i += 1) {\n reader = tag.readers[i];\n\n if ((mustache = reader(parser, tag))) {\n if (tag.isStatic) {\n mustache.s = 1;\n }\n\n if (parser.includeLinePositions) {\n mustache.q = parser.getLinePos(start);\n }\n\n return mustache;\n }\n }\n\n parser.pos = start;\n return null;\n}\n","import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readTriple(parser, tag) {\n const expression = readExpression(parser);\n\n if (!expression) {\n return null;\n }\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}'`);\n }\n\n const triple = { t: TRIPLE };\n refineExpression(expression, triple); // TODO handle this differently - it's mysterious\n\n return triple;\n}\n","import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readUnescaped(parser, tag) {\n if (!parser.matchString('&')) {\n return null;\n }\n\n parser.sp();\n\n const expression = readExpression(parser);\n\n if (!expression) {\n return null;\n }\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}'`);\n }\n\n const triple = { t: TRIPLE };\n refineExpression(expression, triple); // TODO handle this differently - it's mysterious\n\n return triple;\n}\n","import readExpression from '../readExpression';\nimport refineExpression from '../../utils/refineExpression';\n\nconst legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nconst asRE = /^as/i;\n\nexport function readAliases(parser) {\n const aliases = [];\n let alias;\n const start = parser.pos;\n\n parser.sp();\n\n alias = readAlias(parser);\n\n if (alias) {\n alias.x = refineExpression(alias.x, {});\n aliases.push(alias);\n\n parser.sp();\n\n while (parser.matchString(',')) {\n alias = readAlias(parser);\n\n if (!alias) {\n parser.error('Expected another alias.');\n }\n\n alias.x = refineExpression(alias.x, {});\n aliases.push(alias);\n\n parser.sp();\n }\n\n return aliases;\n }\n\n parser.pos = start;\n return null;\n}\n\nexport function readAlias(parser) {\n const start = parser.pos;\n\n parser.sp();\n\n const expr = readExpression(parser, []);\n\n if (!expr) {\n parser.pos = start;\n return null;\n }\n\n parser.sp();\n parser.matchPattern(asRE);\n parser.sp();\n\n const alias = parser.matchPattern(legalAlias);\n\n if (!alias) {\n parser.pos = start;\n return null;\n }\n\n return { n: alias, x: expr };\n}\n","import { PARTIAL, YIELDER } from 'src/config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAliases } from './readAliases';\n\nexport default function readPartial(parser, tag) {\n const type = parser.matchString('>') || parser.matchString('yield');\n const partial = { t: type === '>' ? PARTIAL : YIELDER };\n let aliases;\n\n if (!type) return null;\n\n parser.sp();\n\n if (type === '>' || !(aliases = parser.matchString('with'))) {\n // Partial names can include hyphens, so we can't use readExpression\n // blindly. Instead, we use the `relaxedNames` flag to indicate that\n // `foo-bar` should be read as a single name, rather than 'subtract\n // bar from foo'\n parser.relaxedNames = parser.strictRefinement = true;\n const expression = readExpression(parser);\n parser.relaxedNames = parser.strictRefinement = false;\n\n if (!expression && type === '>') return null;\n\n if (expression) {\n refineExpression(expression, partial); // TODO...\n parser.sp();\n if (type !== '>') aliases = parser.matchString('with');\n }\n }\n\n parser.sp();\n\n // check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n if (aliases || type === '>') {\n aliases = readAliases(parser);\n if (aliases && aliases.length) {\n partial.z = aliases;\n } else {\n // otherwise check for literal context e.g. `{{>foo bar}}` then\n // turn it into `{{#with bar}}{{>foo}}{{/with}}`\n const context = readExpression(parser);\n if (context) {\n partial.c = {};\n refineExpression(context, partial.c);\n }\n }\n\n if (type !== '>' && (!partial.c && !partial.z)) {\n // {{yield with}} requires some aliases\n parser.error(`Expected a context or one or more aliases`);\n }\n }\n\n parser.sp();\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}'`);\n }\n\n return partial;\n}\n","import { COMMENT } from 'src/config/types';\n\nexport default function readComment(parser, tag) {\n if (!parser.matchString('!')) {\n return null;\n }\n\n const index = parser.remaining().indexOf(tag.close);\n\n if (index !== -1) {\n parser.pos += index + tag.close.length;\n return { t: COMMENT };\n }\n}\n","import { INTERPOLATOR } from 'config/types';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readInterpolator(parser, tag) {\n let expression, err;\n\n const start = parser.pos;\n\n // TODO would be good for perf if we could do away with the try-catch\n try {\n expression = readExpressionOrReference(parser, [tag.close]);\n } catch (e) {\n err = e;\n }\n\n if (!expression) {\n if (parser.str.charAt(start) === '!') {\n // special case - comment\n parser.pos = start;\n return null;\n }\n\n if (err) {\n throw err;\n }\n }\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}' after reference`);\n\n if (!expression) {\n // special case - comment\n if (parser.nextChar() === '!') {\n return null;\n }\n\n parser.error(`Expected expression or legal reference`);\n }\n }\n\n const interpolator = { t: INTERPOLATOR };\n refineExpression(expression, interpolator); // TODO handle this differently - it's mysterious\n\n return interpolator;\n}\n","import { CLOSING } from 'config/types';\n\nexport default function readClosing(parser, tag) {\n const start = parser.pos;\n\n if (!parser.matchString(tag.open)) {\n return null;\n }\n\n parser.sp();\n\n if (!parser.matchString('/')) {\n parser.pos = start;\n return null;\n }\n\n parser.sp();\n\n const remaining = parser.remaining();\n const index = remaining.indexOf(tag.close);\n\n if (index !== -1) {\n const closing = {\n t: CLOSING,\n r: remaining.substr(0, index).split(' ')[0]\n };\n\n parser.pos += index;\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}'`);\n }\n\n return closing;\n }\n\n parser.pos = start;\n return null;\n}\n","import { CATCH, ELSE, ELSEIF, THEN } from 'config/types';\nimport readExpression from '../../readExpression';\nimport { name } from '../../expressions/shared/patterns';\n\nconst patterns = {\n else: /^\\s*else\\s*/,\n elseif: /^\\s*elseif\\s+/,\n then: /^\\s*then\\s*/,\n catch: /^\\s*catch\\s*/\n};\n\nconst types = {\n else: ELSE,\n elseif: ELSEIF,\n then: THEN,\n catch: CATCH\n};\n\nexport default function readInlineBlock(parser, tag, type) {\n const start = parser.pos;\n\n if (!parser.matchString(tag.open)) {\n return null;\n }\n\n if (!parser.matchPattern(patterns[type])) {\n parser.pos = start;\n return null;\n }\n\n const res = { t: types[type] };\n\n if (type === 'elseif') {\n res.x = readExpression(parser);\n } else if (type === 'catch' || type === 'then') {\n const nm = parser.matchPattern(name);\n if (nm) res.n = nm;\n }\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}'`);\n }\n\n return res;\n}\n","import { SECTION_EACH, SECTION_IF, SECTION_IF_WITH, SECTION_UNLESS } from 'config/types';\n\nexport default {\n each: SECTION_EACH,\n if: SECTION_IF,\n with: SECTION_IF_WITH,\n unless: SECTION_UNLESS\n};\n","import {\n ALIAS,\n AWAIT,\n CATCH,\n ELSE,\n ELSEIF,\n SECTION,\n SECTION_IF,\n SECTION_UNLESS,\n THEN\n} from 'config/types';\nimport { READERS } from 'parse/_parse';\nimport readClosing from './section/readClosing';\nimport readInlineBlock from './section/readInlineBlock';\nimport handlebarsBlockCodes from './handlebarsBlockCodes';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAlias, readAliases } from './readAliases';\nimport { keys } from 'utils/object';\nimport { name } from '../expressions/shared/patterns';\n\nconst indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst handlebarsBlockPattern = new RegExp('^(' + keys(handlebarsBlockCodes).join('|') + ')\\\\b');\n\nexport default function readSection(parser, tag) {\n let expression,\n section,\n child,\n children,\n hasElse,\n block,\n unlessBlock,\n closed,\n i,\n expectedClose,\n hasThen,\n hasCatch,\n inlineThen;\n let aliasOnly = false;\n\n const start = parser.pos;\n\n if (parser.matchString('^')) {\n // watch out for parent context refs - {{^^/^^/foo}}\n if (parser.matchString('^/')) {\n parser.pos = start;\n return null;\n }\n section = { t: SECTION, f: [], n: SECTION_UNLESS };\n } else if (parser.matchString('#')) {\n section = { t: SECTION, f: [] };\n\n if (parser.matchString('partial')) {\n parser.pos = start - parser.standardDelimiters[0].length;\n parser.error(\n 'Partial definitions can only be at the top level of the template, or immediately inside components'\n );\n }\n\n if ((block = parser.matchString('await'))) {\n expectedClose = block;\n section.t = AWAIT;\n } else if ((block = parser.matchPattern(handlebarsBlockPattern))) {\n expectedClose = block;\n section.n = handlebarsBlockCodes[block];\n }\n } else {\n return null;\n }\n\n parser.sp();\n\n if (block === 'with') {\n const aliases = readAliases(parser);\n if (aliases) {\n aliasOnly = true;\n section.z = aliases;\n section.t = ALIAS;\n }\n } else if (block === 'each') {\n const alias = readAlias(parser);\n if (alias) {\n section.z = [{ n: alias.n, x: { r: '.' } }];\n expression = alias.x;\n }\n }\n\n if (!aliasOnly) {\n if (!expression) expression = readExpression(parser);\n\n if (!expression) {\n parser.error('Expected expression');\n }\n\n // extra each aliases\n if (block === 'each' && parser.matchString(',')) {\n const aliases = readAliases(parser);\n if (aliases) {\n if (section.z) aliases.unshift(section.z[0]);\n section.z = aliases;\n }\n }\n\n // optional index and key references\n if ((block === 'each' || !block) && (i = parser.matchPattern(indexRefPattern))) {\n let extra;\n\n if ((extra = parser.matchPattern(keyIndexRefPattern))) {\n section.i = i + ',' + extra;\n } else {\n section.i = i;\n }\n } else if (block === 'await' && parser.matchString('then')) {\n parser.sp();\n hasThen = true;\n inlineThen = parser.matchPattern(name);\n if (!inlineThen) inlineThen = true;\n }\n\n if (!block && expression.n) {\n expectedClose = expression.n;\n }\n }\n\n parser.sp();\n\n if (!parser.matchString(tag.close)) {\n parser.error(`Expected closing delimiter '${tag.close}'`);\n }\n\n parser.sectionDepth += 1;\n children = section.f;\n\n let pos;\n do {\n pos = parser.pos;\n if ((child = readClosing(parser, tag))) {\n if (expectedClose && child.r !== expectedClose) {\n if (!block) {\n if (child.r)\n parser.warn(\n `Expected ${tag.open}/${expectedClose}${tag.close} but found ${tag.open}/${child.r}${\n tag.close\n }`\n );\n } else {\n parser.pos = pos;\n parser.error(`Expected ${tag.open}/${expectedClose}${tag.close}`);\n }\n }\n\n parser.sectionDepth -= 1;\n closed = true;\n } else if (\n !aliasOnly &&\n ((child = readInlineBlock(parser, tag, 'elseif')) ||\n (child = readInlineBlock(parser, tag, 'else')) ||\n (block === 'await' &&\n ((child = readInlineBlock(parser, tag, 'then')) ||\n (child = readInlineBlock(parser, tag, 'catch')))))\n ) {\n if (section.n === SECTION_UNLESS) {\n parser.error('{{else}} not allowed in {{#unless}}');\n }\n\n if (hasElse) {\n if (child.t === ELSE) {\n parser.error('there can only be one {{else}} block, at the end of a section');\n } else if (child.t === ELSEIF) {\n parser.error('illegal {{elseif...}} after {{else}}');\n }\n }\n\n if (!unlessBlock && (inlineThen || !hasThen) && !hasCatch) {\n if (block === 'await') {\n const s = { f: children };\n section.f = [s];\n if (inlineThen) {\n s.t = THEN;\n inlineThen !== true && (s.n = inlineThen);\n } else {\n s.t = SECTION;\n }\n } else {\n unlessBlock = [];\n }\n }\n\n const mustache = {\n t: SECTION,\n f: (children = [])\n };\n\n if (child.t === ELSE) {\n if (block === 'await') {\n section.f.push(mustache);\n mustache.t = ELSE;\n } else {\n mustache.n = SECTION_UNLESS;\n unlessBlock.push(mustache);\n }\n hasElse = true;\n } else if (child.t === ELSEIF) {\n mustache.n = SECTION_IF;\n refineExpression(child.x, mustache);\n unlessBlock.push(mustache);\n } else if (child.t === THEN) {\n if (hasElse) parser.error('{{then}} block must appear before any {{else}} block');\n if (hasCatch) parser.error('{{then}} block must appear before any {{catch}} block');\n if (hasThen) parser.error('there can only be one {{then}} block per {{#await}}');\n mustache.t = THEN;\n hasThen = true;\n child.n && (mustache.n = child.n);\n section.f.push(mustache);\n } else if (child.t === CATCH) {\n if (hasElse) parser.error('{{catch}} block must appear before any {{else}} block');\n if (hasCatch) parser.error('there can only be one {{catch}} block per {{#await}}');\n mustache.t = CATCH;\n hasCatch = true;\n mustache.n = child.n;\n section.f.push(mustache);\n }\n } else {\n child = parser.read(READERS);\n\n if (!child) {\n break;\n }\n\n children.push(child);\n }\n } while (!closed);\n\n if (unlessBlock) {\n section.l = unlessBlock;\n }\n\n if (!aliasOnly) {\n refineExpression(expression, section);\n }\n\n if (block === 'await' && (inlineThen || !hasThen) && !hasCatch && !hasElse) {\n const s = { f: section.f };\n section.f = [s];\n if (inlineThen) {\n s.t = THEN;\n inlineThen !== true && (s.n = inlineThen);\n } else {\n s.t = SECTION;\n }\n }\n\n // TODO if a section is empty it should be discarded. Don't do\n // that here though - we need to clean everything up first, as\n // it may contain removeable whitespace. As a temporary measure,\n // to pass the existing tests, remove empty `f` arrays\n if (!section.f.length) {\n delete section.f;\n }\n\n return section;\n}\n","import { COMMENT } from 'config/types';\n\nconst OPEN_COMMENT = '<!--';\nconst CLOSE_COMMENT = '-->';\n\nexport default function readHtmlComment(parser) {\n const start = parser.pos;\n\n if (parser.textOnlyMode || !parser.matchString(OPEN_COMMENT)) {\n return null;\n }\n\n const remaining = parser.remaining();\n const endIndex = remaining.indexOf(CLOSE_COMMENT);\n\n if (endIndex === -1) {\n parser.error(\"Illegal HTML - expected closing comment sequence ('-->')\");\n }\n\n const content = remaining.substr(0, endIndex);\n parser.pos += endIndex + 3;\n\n const comment = {\n t: COMMENT,\n c: content\n };\n\n if (parser.includeLinePositions) {\n comment.q = parser.getLinePos(start);\n }\n\n return comment;\n}\n","import { COMMENT, DELIMCHANGE, SECTION, INVERTED } from 'config/types';\nimport { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nconst leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nconst trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nexport default function(items) {\n let i, current, backOne, backTwo, lastSectionItem;\n\n for (i = 1; i < items.length; i += 1) {\n current = items[i];\n backOne = items[i - 1];\n backTwo = items[i - 2];\n\n // if we're at the end of a [text][comment][text] sequence...\n if (isString(current) && isComment(backOne) && isString(backTwo)) {\n // ... and the comment is a standalone (i.e. line breaks either side)...\n if (trailingLinebreak.test(backTwo) && leadingLinebreak.test(current)) {\n // ... then we want to remove the whitespace after the first line break\n items[i - 2] = backTwo.replace(trailingLinebreak, '\\n');\n\n // and the leading line break of the second text token\n items[i] = current.replace(leadingLinebreak, '');\n }\n }\n\n // if the current item is a section, and it is preceded by a linebreak, and\n // its first item is a linebreak...\n if (isSection(current) && isString(backOne)) {\n if (\n trailingLinebreak.test(backOne) &&\n isString(current.f[0]) &&\n leadingLinebreak.test(current.f[0])\n ) {\n items[i - 1] = backOne.replace(trailingLinebreak, '\\n');\n current.f[0] = current.f[0].replace(leadingLinebreak, '');\n }\n }\n\n // if the last item was a section, and it is followed by a linebreak, and\n // its last item is a linebreak...\n if (isString(current) && isSection(backOne)) {\n lastSectionItem = lastItem(backOne.f);\n\n if (\n isString(lastSectionItem) &&\n trailingLinebreak.test(lastSectionItem) &&\n leadingLinebreak.test(current)\n ) {\n backOne.f[backOne.f.length - 1] = lastSectionItem.replace(trailingLinebreak, '\\n');\n items[i] = current.replace(leadingLinebreak, '');\n }\n }\n }\n\n return items;\n}\n\nfunction isComment(item) {\n return item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection(item) {\n return (item.t === SECTION || item.t === INVERTED) && item.f;\n}\n","import { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nexport default function(items, leadingPattern, trailingPattern) {\n let item;\n\n if (leadingPattern) {\n item = items[0];\n if (isString(item)) {\n item = item.replace(leadingPattern, '');\n\n if (!item) {\n items.shift();\n } else {\n items[0] = item;\n }\n }\n }\n\n if (trailingPattern) {\n item = lastItem(items);\n if (isString(item)) {\n item = item.replace(trailingPattern, '');\n\n if (!item) {\n items.pop();\n } else {\n items[items.length - 1] = item;\n }\n }\n }\n}\n","import { COMMENT, ELEMENT } from 'config/types';\nimport stripStandalones from './stripStandalones';\nimport trimWhitespace from './trimWhitespace';\nimport { isString } from 'utils/is';\n\nconst contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nconst leadingWhitespace = /^[ \\t\\f\\r\\n]+/;\nconst trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nconst leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nconst trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nexport default function cleanup(\n items,\n stripComments,\n preserveWhitespace,\n removeLeadingWhitespace,\n removeTrailingWhitespace,\n whiteSpaceElements\n) {\n if (isString(items)) return;\n\n let i,\n item,\n previousItem,\n nextItem,\n preserveWhitespaceInsideFragment,\n removeLeadingWhitespaceInsideFragment,\n removeTrailingWhitespaceInsideFragment;\n\n // First pass - remove standalones and comments etc\n stripStandalones(items);\n\n i = items.length;\n while (i--) {\n item = items[i];\n\n // Remove delimiter changes, unsafe elements etc\n if (item.exclude) {\n items.splice(i, 1);\n } else if (stripComments && item.t === COMMENT) {\n // Remove comments, unless we want to keep them\n items.splice(i, 1);\n }\n }\n\n // If necessary, remove leading and trailing whitespace\n trimWhitespace(\n items,\n removeLeadingWhitespace ? leadingWhitespace : null,\n removeTrailingWhitespace ? trailingWhitespace : null\n );\n\n i = items.length;\n while (i--) {\n item = items[i];\n removeLeadingWhitespaceInsideFragment = removeTrailingWhitespaceInsideFragment = false;\n\n // Recurse\n if (item.f) {\n const isPreserveWhitespaceElement =\n item.t === ELEMENT &&\n (whiteSpaceElements[item.e.toLowerCase()] || whiteSpaceElements[item.e]);\n preserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n if (!preserveWhitespace && isPreserveWhitespaceElement) {\n trimWhitespace(item.f, leadingNewLine, trailingNewLine);\n }\n\n if (!preserveWhitespaceInsideFragment) {\n previousItem = items[i - 1];\n nextItem = items[i + 1];\n\n // if the previous item was a text item with trailing whitespace,\n // remove leading whitespace inside the fragment\n if (!previousItem || (isString(previousItem) && trailingWhitespace.test(previousItem))) {\n removeLeadingWhitespaceInsideFragment = true;\n }\n\n // and vice versa\n if (!nextItem || (isString(nextItem) && leadingWhitespace.test(nextItem))) {\n removeTrailingWhitespaceInsideFragment = true;\n }\n }\n\n cleanup(\n item.f,\n stripComments,\n preserveWhitespaceInsideFragment,\n removeLeadingWhitespaceInsideFragment,\n removeTrailingWhitespaceInsideFragment,\n whiteSpaceElements\n );\n }\n\n // Split if-else blocks into two (an if, and an unless)\n if (item.l) {\n cleanup(\n item.l,\n stripComments,\n preserveWhitespace,\n removeLeadingWhitespaceInsideFragment,\n removeTrailingWhitespaceInsideFragment,\n whiteSpaceElements\n );\n\n item.l.forEach(s => (s.l = 1));\n item.l.unshift(i + 1, 0);\n items.splice.apply(items, item.l);\n delete item.l; // TODO would be nice if there was a way around this\n }\n\n // Clean up conditional attributes\n if (item.m) {\n cleanup(\n item.m,\n stripComments,\n preserveWhitespace,\n removeLeadingWhitespaceInsideFragment,\n removeTrailingWhitespaceInsideFragment,\n whiteSpaceElements\n );\n if (item.m.length < 1) delete item.m;\n }\n }\n\n // final pass - fuse text nodes together\n i = items.length;\n while (i--) {\n if (isString(items[i])) {\n if (isString(items[i + 1])) {\n items[i] = items[i] + items[i + 1];\n items.splice(i + 1, 1);\n }\n\n if (!preserveWhitespace) {\n items[i] = items[i].replace(contiguousWhitespace, ' ');\n }\n\n if (items[i] === '') {\n items.splice(i, 1);\n }\n }\n }\n}\n","import { CLOSING_TAG } from 'src/config/types';\n\nconst closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nexport default function readClosingTag(parser) {\n let tag;\n\n const start = parser.pos;\n\n // are we looking at a closing tag?\n if (!parser.matchString('</')) {\n return null;\n }\n\n if ((tag = parser.matchPattern(closingTagPattern))) {\n if (parser.inside && tag !== parser.inside) {\n parser.pos = start;\n return null;\n }\n\n return {\n t: CLOSING_TAG,\n e: tag\n };\n }\n\n // We have an illegal closing tag, report it\n parser.pos -= 2;\n parser.error('Illegal closing tag');\n}\n","export default function(camelCaseStr) {\n return camelCaseStr.replace(/([A-Z])/g, (match, $1) => {\n return '-' + $1.toLowerCase();\n });\n}\n","import { ANCHOR, DOCTYPE, ELEMENT, ATTRIBUTE } from 'config/types';\nimport { voidElements } from 'utils/html';\nimport { READERS, PARTIAL_READERS } from '../_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport readMustache from './readMustache';\nimport readClosingTag from './element/readClosingTag';\nimport readClosing from './mustache/section/readClosing';\nimport { create } from 'utils/object';\nimport { isString } from 'utils/is';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nconst tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nconst anchorPattern = /^[a-zA-Z_$][-a-zA-Z0-9_$]*/;\nconst validTagNameFollower = /^[\\s\\n\\/>]/;\nconst semiEnd = /;\\s*$/;\nconst exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nconst disallowedContents = {\n li: ['li'],\n dt: ['dt', 'dd'],\n dd: ['dt', 'dd'],\n p: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split(\n ' '\n ),\n rt: ['rt', 'rp'],\n rp: ['rt', 'rp'],\n optgroup: ['optgroup'],\n option: ['option', 'optgroup'],\n thead: ['tbody', 'tfoot'],\n tbody: ['tbody', 'tfoot'],\n tfoot: ['tbody'],\n tr: ['tr', 'tbody'],\n td: ['td', 'th', 'tr'],\n th: ['td', 'th', 'tr']\n};\n\nexport default readElement;\n\nfunction readElement(parser) {\n let attribute,\n selfClosing,\n children,\n partials,\n hasPartials,\n child,\n closed,\n pos,\n remaining,\n closingTag,\n anchor;\n\n const start = parser.pos;\n\n if (parser.inside || parser.inAttribute || parser.textOnlyMode) {\n return null;\n }\n\n if (!parser.matchString('<')) {\n return null;\n }\n\n // if this is a closing tag, abort straight away\n if (parser.nextChar() === '/') {\n return null;\n }\n\n const element = {};\n if (parser.includeLinePositions) {\n element.q = parser.getLinePos(start);\n }\n\n // check for doctype decl\n if (parser.matchString('!')) {\n element.t = DOCTYPE;\n if (!parser.matchPattern(/^doctype/i)) {\n parser.error('Expected DOCTYPE declaration');\n }\n\n element.a = parser.matchPattern(/^(.+?)>/);\n return element;\n } else if ((anchor = parser.matchString('#'))) {\n // check for anchor\n parser.sp();\n element.t = ANCHOR;\n element.n = parser.matchPattern(anchorPattern);\n } else {\n // otherwise, it's an element/component\n element.t = ELEMENT;\n\n // element name\n element.e = parser.matchPattern(tagNamePattern);\n if (!element.e) {\n return null;\n }\n }\n\n // next character must be whitespace, closing solidus or '>'\n if (!validTagNameFollower.test(parser.nextChar())) {\n parser.error('Illegal tag name');\n }\n\n parser.sp();\n\n parser.inTag = true;\n\n // directives and attributes\n while ((attribute = readMustache(parser))) {\n if (attribute !== false) {\n if (!element.m) element.m = [];\n element.m.push(attribute);\n }\n\n parser.sp();\n }\n\n parser.inTag = false;\n\n // allow whitespace before closing solidus\n parser.sp();\n\n // self-closing solidus?\n if (parser.matchString('/')) {\n selfClosing = true;\n }\n\n // closing angle bracket\n if (!parser.matchString('>')) {\n return null;\n }\n\n const lowerCaseName = (element.e || element.n).toLowerCase();\n const preserveWhitespace = parser.preserveWhitespace;\n\n if (!selfClosing && (anchor || !voidElements[element.e.toLowerCase()])) {\n if (!anchor) {\n parser.elementStack.push(lowerCaseName);\n\n // Special case - if we open a script element, further tags should\n // be ignored unless they're a closing script element\n if (lowerCaseName in parser.interpolate) {\n parser.inside = lowerCaseName;\n }\n }\n\n children = [];\n partials = create(null);\n\n do {\n pos = parser.pos;\n remaining = parser.remaining();\n\n if (!remaining) {\n // if this happens to be a script tag and there's no content left, it's because\n // a closing script tag can't appear in a script\n if (parser.inside === 'script') {\n closed = true;\n break;\n }\n\n parser.error(\n `Missing end ${parser.elementStack.length > 1 ? 'tags' : 'tag'} (${parser.elementStack\n .reverse()\n .map(x => `</${x}>`)\n .join('')})`\n );\n }\n\n // if for example we're in an <li> element, and we see another\n // <li> tag, close the first so they become siblings\n if (!anchor && !canContain(lowerCaseName, remaining)) {\n closed = true;\n } else if (!anchor && (closingTag = readClosingTag(parser))) {\n // closing tag\n closed = true;\n\n const closingTagName = closingTag.e.toLowerCase();\n\n // if this *isn't* the closing tag for the current element...\n if (closingTagName !== lowerCaseName) {\n // rewind parser\n parser.pos = pos;\n\n // if it doesn't close a parent tag, error\n if (!~parser.elementStack.indexOf(closingTagName)) {\n let errorMessage = 'Unexpected closing tag';\n\n // add additional help for void elements, since component names\n // might clash with them\n if (voidElements[closingTagName.toLowerCase()]) {\n errorMessage += ` (<${closingTagName}> is a void element - it cannot contain children)`;\n }\n\n parser.error(errorMessage);\n }\n }\n } else if (anchor && readAnchorClose(parser, element.n)) {\n closed = true;\n } else {\n // implicit close by closing section tag. TODO clean this up\n const tag = {\n open: parser.standardDelimiters[0],\n close: parser.standardDelimiters[1]\n };\n if (readClosing(parser, tag) || readInline(parser, tag)) {\n closed = true;\n parser.pos = pos;\n } else if ((child = parser.read(PARTIAL_READERS))) {\n if (partials[child.n]) {\n parser.pos = pos;\n parser.error('Duplicate partial definition');\n }\n\n cleanup(\n child.f,\n parser.stripComments,\n preserveWhitespace,\n !preserveWhitespace,\n !preserveWhitespace,\n parser.whiteSpaceElements\n );\n\n partials[child.n] = child.f;\n hasPartials = true;\n } else {\n if ((child = parser.read(READERS))) {\n children.push(child);\n } else {\n closed = true;\n }\n }\n }\n } while (!closed);\n\n if (children.length) {\n element.f = children;\n }\n\n if (hasPartials) {\n element.p = partials;\n }\n\n parser.elementStack.pop();\n }\n\n parser.inside = null;\n\n if (parser.sanitizeElements && parser.sanitizeElements.indexOf(lowerCaseName) !== -1) {\n return exclude;\n }\n\n if (\n element.m &&\n lowerCaseName !== 'input' &&\n lowerCaseName !== 'select' &&\n lowerCaseName !== 'textarea' &&\n lowerCaseName !== 'option'\n ) {\n const attrs = element.m;\n let classes, styles, cls, style;\n let i = 0;\n let a;\n while (i < attrs.length) {\n a = attrs[i];\n\n if (a.t !== ATTRIBUTE) {\n i++;\n continue;\n }\n\n if (a.n.indexOf('class-') === 0 && !a.f) {\n // static class directives\n (classes || (classes = [])).push(a.n.slice(6));\n attrs.splice(i, 1);\n } else if (a.n.indexOf('style-') === 0 && isString(a.f)) {\n // static style directives\n (styles || (styles = [])).push(`${hyphenateCamel(a.n.slice(6))}: ${a.f};`);\n attrs.splice(i, 1);\n } else if (a.n === 'class' && isString(a.f)) {\n // static class attrs\n (classes || (classes = [])).push(a.f);\n attrs.splice(i, 1);\n } else if (a.n === 'style' && isString(a.f)) {\n // static style attrs\n (styles || (styles = [])).push(a.f + (semiEnd.test(a.f) ? '' : ';'));\n attrs.splice(i, 1);\n } else if (a.n === 'class') {\n cls = a;\n i++;\n } else if (a.n === 'style') {\n style = a;\n i++;\n } else if (\n !~a.n.indexOf(':') &&\n a.n !== 'value' &&\n a.n !== 'contenteditable' &&\n isString(a.f)\n ) {\n a.g = 1;\n i++;\n } else {\n i++;\n }\n }\n\n if (classes) {\n if (!cls || !isString(cls.f))\n attrs.unshift({ t: ATTRIBUTE, n: 'class', f: classes.join(' '), g: 1 });\n else cls.f += ' ' + classes.join(' ');\n } else if (cls && isString(cls.f)) cls.g = 1;\n\n if (styles) {\n if (!style || !isString(style.f))\n attrs.unshift({ t: ATTRIBUTE, n: 'style', f: styles.join(' '), g: 1 });\n else style.f += '; ' + styles.join(' ');\n } else if (style && isString(style.f)) style.g = 1;\n }\n\n return element;\n}\n\nfunction canContain(name, remaining) {\n const match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec(remaining);\n const disallowed = disallowedContents[name];\n\n if (!match || !disallowed) {\n return true;\n }\n\n return !~disallowed.indexOf(match[1].toLowerCase());\n}\n\nfunction readAnchorClose(parser, name) {\n const pos = parser.pos;\n if (!parser.matchString('</')) {\n return null;\n }\n\n parser.matchString('#');\n parser.sp();\n\n if (!parser.matchString(name)) {\n parser.pos = pos;\n return null;\n }\n\n parser.sp();\n\n if (!parser.matchString('>')) {\n parser.pos = pos;\n return null;\n }\n\n return true;\n}\n\nconst inlines = /^\\s*(elseif|else|then|catch)\\s*/;\nfunction readInline(parser, tag) {\n const pos = parser.pos;\n if (!parser.matchString(tag.open)) return;\n if (parser.matchPattern(inlines)) {\n return true;\n } else {\n parser.pos = pos;\n }\n}\n","import getLowestIndex from './utils/getLowestIndex';\nimport { decodeCharacterReferences } from 'utils/html';\n\nexport default function readText(parser) {\n let index, disallowed, barrier;\n\n const remaining = parser.remaining();\n\n if (parser.textOnlyMode) {\n disallowed = parser.tags.map(t => t.open);\n disallowed = disallowed.concat(parser.tags.map(t => '\\\\' + t.open));\n\n index = getLowestIndex(remaining, disallowed);\n } else {\n barrier = parser.inside ? '</' + parser.inside : '<';\n\n if (parser.inside && !parser.interpolate[parser.inside]) {\n index = remaining.indexOf(barrier);\n } else {\n disallowed = parser.tags.map(t => t.open);\n disallowed = disallowed.concat(parser.tags.map(t => '\\\\' + t.open));\n\n // http://developers.whatwg.org/syntax.html#syntax-attributes\n if (parser.inAttribute === true) {\n // we're inside an unquoted attribute value\n disallowed.push(`\"`, `'`, `=`, `<`, `>`, '`');\n } else if (parser.inAttribute) {\n // quoted attribute value\n disallowed.push(parser.inAttribute);\n } else {\n disallowed.push(barrier);\n }\n\n index = getLowestIndex(remaining, disallowed);\n }\n }\n\n if (!index) {\n return null;\n }\n\n if (index === -1) {\n index = remaining.length;\n }\n\n parser.pos += index;\n\n if ((parser.inside && parser.inside !== 'textarea') || parser.textOnlyMode) {\n return remaining.substr(0, index);\n } else {\n return decodeCharacterReferences(remaining.substr(0, index));\n }\n}\n","import { INLINE_PARTIAL } from 'config/types';\nimport { READERS } from '../_parse';\nimport readClosing from './mustache/section/readClosing';\n\nconst partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nexport default function readPartialDefinitionSection(parser) {\n let child, closed;\n\n const start = parser.pos;\n\n const delimiters = parser.standardDelimiters;\n\n if (!parser.matchString(delimiters[0])) {\n return null;\n }\n\n if (!parser.matchPattern(partialDefinitionSectionPattern)) {\n parser.pos = start;\n return null;\n }\n\n const name = parser.matchPattern(/^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/);\n\n if (!name) {\n parser.error('expected legal partial name');\n }\n\n parser.sp();\n if (!parser.matchString(delimiters[1])) {\n parser.error(`Expected closing delimiter '${delimiters[1]}'`);\n }\n\n const content = [];\n\n const [open, close] = delimiters;\n\n do {\n if ((child = readClosing(parser, { open, close }))) {\n if (child.r !== 'partial') {\n parser.error(`Expected ${open}/partial${close}`);\n }\n\n closed = true;\n } else {\n child = parser.read(READERS);\n\n if (!child) {\n parser.error(`Expected ${open}/partial${close}`);\n }\n\n content.push(child);\n }\n } while (!closed);\n\n return {\n t: INLINE_PARTIAL,\n n: name,\n f: content\n };\n}\n","import { TEMPLATE_VERSION } from 'config/template';\nimport { READERS, PARTIAL_READERS } from 'parse/_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport { create } from 'utils/object';\n\nexport default function readTemplate(parser) {\n const fragment = [];\n const partials = create(null);\n let hasPartials = false;\n\n const preserveWhitespace = parser.preserveWhitespace;\n\n while (parser.pos < parser.str.length) {\n const pos = parser.pos;\n let item, partial;\n\n if ((partial = parser.read(PARTIAL_READERS))) {\n if (partials[partial.n]) {\n parser.pos = pos;\n parser.error('Duplicated partial definition');\n }\n\n cleanup(\n partial.f,\n parser.stripComments,\n preserveWhitespace,\n !preserveWhitespace,\n !preserveWhitespace,\n parser.whiteSpaceElements\n );\n\n partials[partial.n] = partial.f;\n hasPartials = true;\n } else if ((item = parser.read(READERS))) {\n fragment.push(item);\n } else {\n parser.error('Unexpected template content');\n }\n }\n\n const result = {\n v: TEMPLATE_VERSION,\n t: fragment\n };\n\n if (hasPartials) {\n result.p = partials;\n }\n\n return result;\n}\n","import { fromExpression } from './createFunction';\nimport { isArray, isObject } from 'utils/is';\nimport { keys } from 'utils/object';\n\nexport default function insertExpressions(obj, expr) {\n keys(obj).forEach(key => {\n if (isExpression(key, obj)) return addTo(obj, expr);\n\n const ref = obj[key];\n if (hasChildren(ref)) insertExpressions(ref, expr);\n });\n}\n\nfunction isExpression(key, obj) {\n return key === 's' && isArray(obj.r);\n}\n\nfunction addTo(obj, expr) {\n const { s, r } = obj;\n if (!expr[s]) expr[s] = fromExpression(s, r.length);\n}\n\nfunction hasChildren(ref) {\n return isArray(ref) || isObject(ref);\n}\n","export default {};\n","import { TEMPLATE_VERSION } from 'config/template';\nimport Parser from './Parser';\nimport readMustache from './converters/readMustache';\nimport readTriple from './converters/mustache/readTriple';\nimport readUnescaped from './converters/mustache/readUnescaped';\nimport readPartial from './converters/mustache/readPartial';\nimport readMustacheComment from './converters/mustache/readMustacheComment';\nimport readInterpolator from './converters/mustache/readInterpolator';\nimport readSection from './converters/mustache/readSection';\nimport readHtmlComment from './converters/readHtmlComment';\nimport readElement from './converters/readElement';\nimport readText from './converters/readText';\nimport readPartialDefinitionSection from './converters/readPartialDefinitionSection';\nimport readTemplate from './converters/readTemplate';\nimport readExpression from './converters/readExpression';\nimport { fromExpression } from './utils/createFunction';\nimport cleanup from './utils/cleanup';\nimport insertExpressions from './utils/insertExpressions';\nimport flattenExpression from './utils/flattenExpression';\nimport shared from '../Ractive/shared';\nimport { assign, keys } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nconst STANDARD_READERS = [\n readPartial,\n readUnescaped,\n readSection,\n readInterpolator,\n readMustacheComment\n];\nconst TRIPLE_READERS = [readTriple];\n\nexport const READERS = [readMustache, readHtmlComment, readElement, readText];\nexport const PARTIAL_READERS = [readPartialDefinitionSection];\n\nconst preserveWhitespaceElements = { pre: 1, script: 1, style: 1, textarea: 1 };\n\nconst defaultInterpolate = { textarea: true, script: true, style: true, template: true };\n\nconst StandardParser = Parser.extend({\n init(str, options) {\n const tripleDelimiters = options.tripleDelimiters || shared.defaults.tripleDelimiters;\n const staticDelimiters = options.staticDelimiters || shared.defaults.staticDelimiters;\n const staticTripleDelimiters =\n options.staticTripleDelimiters || shared.defaults.staticTripleDelimiters;\n\n this.standardDelimiters = options.delimiters || shared.defaults.delimiters;\n\n this.tags = [\n {\n isStatic: false,\n isTriple: false,\n open: this.standardDelimiters[0],\n close: this.standardDelimiters[1],\n readers: STANDARD_READERS\n },\n {\n isStatic: false,\n isTriple: true,\n open: tripleDelimiters[0],\n close: tripleDelimiters[1],\n readers: TRIPLE_READERS\n },\n {\n isStatic: true,\n isTriple: false,\n open: staticDelimiters[0],\n close: staticDelimiters[1],\n readers: STANDARD_READERS\n },\n {\n isStatic: true,\n isTriple: true,\n open: staticTripleDelimiters[0],\n close: staticTripleDelimiters[1],\n readers: TRIPLE_READERS\n }\n ];\n\n this.contextLines = options.contextLines || shared.defaults.contextLines;\n\n this.sortMustacheTags();\n\n this.sectionDepth = 0;\n this.elementStack = [];\n\n this.interpolate = assign(\n {},\n defaultInterpolate,\n shared.defaults.interpolate,\n options.interpolate\n );\n\n if (options.sanitize === true) {\n options.sanitize = {\n // blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n elements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split(\n ' '\n ),\n eventAttributes: true\n };\n }\n\n this.stripComments = options.stripComments !== false;\n this.preserveWhitespace = isObjectType(options.preserveWhitespace)\n ? false\n : options.preserveWhitespace;\n this.sanitizeElements = options.sanitize && options.sanitize.elements;\n this.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n this.includeLinePositions = options.includeLinePositions;\n this.textOnlyMode = options.textOnlyMode;\n this.csp = options.csp;\n this.allowExpressions = options.allowExpressions;\n\n if (options.expression) this.converters = [readExpression];\n\n if (options.attributes) this.inTag = true;\n\n // special whitespace handling requested for certain elements\n this.whiteSpaceElements = assign({}, options.preserveWhitespace, preserveWhitespaceElements);\n },\n\n postProcess(result, options) {\n if (options.expression) {\n const expr = flattenExpression(result[0]);\n expr.e = fromExpression(expr.s, expr.r.length);\n return expr;\n } else {\n // special case - empty string\n if (!result.length) {\n return { t: [], v: TEMPLATE_VERSION };\n }\n\n if (this.sectionDepth > 0) {\n this.error('A section was left open');\n }\n\n cleanup(\n result[0].t,\n this.stripComments,\n this.preserveWhitespace,\n !this.preserveWhitespace,\n !this.preserveWhitespace,\n this.whiteSpaceElements\n );\n\n if (this.csp !== false) {\n const expr = {};\n insertExpressions(result[0].t, expr);\n if (keys(expr).length) result[0].e = expr;\n }\n\n return result[0];\n }\n },\n\n converters: [readTemplate],\n\n sortMustacheTags() {\n // Sort in order of descending opening delimiter length (longer first),\n // to protect against opening delimiters being substrings of each other\n this.tags.sort((a, b) => {\n return b.open.length - a.open.length;\n });\n }\n});\n\nexport default function parse(template, options) {\n return new StandardParser(template, options || {}).result;\n}\n","import { fromExpression } from 'parse/utils/createFunction';\nimport { doc } from 'config/environment';\nimport { fatal } from 'utils/log';\nimport { addFunctions } from 'shared/getFunction';\nimport parse from 'parse/_parse';\nimport { isString } from 'utils/is';\n\nconst parseOptions = [\n 'delimiters',\n 'tripleDelimiters',\n 'staticDelimiters',\n 'staticTripleDelimiters',\n 'csp',\n 'interpolate',\n 'preserveWhitespace',\n 'sanitize',\n 'stripComments',\n 'contextLines',\n 'allowExpressions',\n 'attributes'\n];\n\nconst TEMPLATE_INSTRUCTIONS = `Either preparse or use a ractive runtime source that includes the parser. `;\n\nconst COMPUTATION_INSTRUCTIONS = `Either include a version of Ractive that can parse or convert your computation strings to functions.`;\n\nfunction throwNoParse(method, error, instructions) {\n if (!method) {\n fatal(`Missing Ractive.parse - cannot parse ${error}. ${instructions}`);\n }\n}\n\nexport function createFunction(body, length) {\n throwNoParse(fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS);\n return fromExpression(body, length);\n}\n\nexport function createFunctionFromString(str, bindTo) {\n throwNoParse(parse, 'compution string \"${str}\"', COMPUTATION_INSTRUCTIONS);\n const tpl = parse(str, { expression: true });\n return function() {\n return tpl.e.apply(bindTo, tpl.r.map(r => bindTo.get(r)));\n };\n}\n\nconst parser = {\n fromId(id, options) {\n if (!doc) {\n if (options && options.noThrow) {\n return;\n }\n throw new Error(`Cannot retrieve template #${id} as Ractive is not running in a browser.`);\n }\n\n if (id) id = id.replace(/^#/, '');\n\n let template;\n\n if (!(template = doc.getElementById(id))) {\n if (options && options.noThrow) {\n return;\n }\n throw new Error(`Could not find template element with id #${id}`);\n }\n\n if (template.tagName.toUpperCase() !== 'SCRIPT') {\n if (options && options.noThrow) {\n return;\n }\n throw new Error(`Template element with id #${id}, must be a <script> element`);\n }\n\n return 'textContent' in template ? template.textContent : template.innerHTML;\n },\n\n isParsed(template) {\n return !isString(template);\n },\n\n getParseOptions(ractive) {\n // Could be Ractive or a Component\n if (ractive.defaults) {\n ractive = ractive.defaults;\n }\n\n return parseOptions.reduce((val, key) => {\n val[key] = ractive[key];\n return val;\n }, {});\n },\n\n parse(template, options) {\n throwNoParse(parse, 'template', TEMPLATE_INSTRUCTIONS);\n const parsed = parse(template, options);\n addFunctions(parsed);\n return parsed;\n },\n\n parseFor(template, ractive) {\n return this.parse(template, this.getParseOptions(ractive));\n }\n};\n\nexport default parser;\n","import { fatal } from 'utils/log';\nimport bind from 'utils/bind';\nimport { createFunctionFromString } from '../config/runtime-parser';\nimport { isFunction, isString, isObjectType } from 'utils/is';\n\nexport default function getComputationSignature(ractive, key, signature) {\n let getter;\n let setter;\n\n // useful for debugging\n let getterString;\n let getterUseStack;\n let setterString;\n\n if (isFunction(signature)) {\n getter = bind(signature, ractive);\n getterString = signature.toString();\n getterUseStack = true;\n }\n\n if (isString(signature)) {\n getter = createFunctionFromString(signature, ractive);\n getterString = signature;\n }\n\n if (isObjectType(signature)) {\n if (isString(signature.get)) {\n getter = createFunctionFromString(signature.get, ractive);\n getterString = signature.get;\n } else if (isFunction(signature.get)) {\n getter = bind(signature.get, ractive);\n getterString = signature.get.toString();\n getterUseStack = true;\n } else {\n fatal('`%s` computation must have a `get()` method', key);\n }\n\n if (isFunction(signature.set)) {\n setter = bind(signature.set, ractive);\n setterString = signature.set.toString();\n }\n }\n\n return {\n getter,\n setter,\n getterString,\n setterString,\n getterUseStack\n };\n}\n","import { removeFromArray } from 'utils/array';\nimport { isFunction } from 'utils/is';\n\nlet id = 0;\n\nexport default class TransitionManager {\n constructor(callback, parent) {\n this.callback = callback;\n this.parent = parent;\n\n this.intros = [];\n this.outros = [];\n\n this.children = [];\n this.totalChildren = this.outroChildren = 0;\n\n this.detachQueue = [];\n this.outrosComplete = false;\n\n this.id = id++;\n\n if (parent) {\n parent.addChild(this);\n }\n }\n\n add(transition) {\n const list = transition.isIntro ? this.intros : this.outros;\n transition.starting = true;\n list.push(transition);\n }\n\n addChild(child) {\n this.children.push(child);\n\n this.totalChildren += 1;\n this.outroChildren += 1;\n }\n\n checkStart() {\n if (this.parent && this.parent.started) this.start();\n }\n\n decrementOutros() {\n this.outroChildren -= 1;\n check(this);\n }\n\n decrementTotal() {\n this.totalChildren -= 1;\n check(this);\n }\n\n detachNodes() {\n let len = this.detachQueue.length;\n for (let i = 0; i < len; i++) this.detachQueue[i].detach();\n len = this.children.length;\n for (let i = 0; i < len; i++) this.children[i].detachNodes();\n this.detachQueue = [];\n }\n\n ready() {\n if (this.detachQueue.length) detachImmediate(this);\n }\n\n remove(transition) {\n const list = transition.isIntro ? this.intros : this.outros;\n removeFromArray(list, transition);\n check(this);\n }\n\n start() {\n this.started = true;\n this.children.forEach(c => c.start());\n this.intros.concat(this.outros).forEach(t => t.start());\n check(this);\n }\n}\n\nfunction check(tm) {\n if (!tm.started || tm.outros.length || tm.outroChildren) return;\n\n // If all outros are complete, and we haven't already done this,\n // we notify the parent if there is one, otherwise\n // start detaching nodes\n if (!tm.outrosComplete) {\n tm.outrosComplete = true;\n\n if (tm.parent) tm.parent.decrementOutros(tm);\n\n if (!tm.parent || tm.parent.outrosComplete) {\n tm.detachNodes();\n }\n }\n\n // Once everything is done, we can notify parent transition\n // manager and call the callback\n if (!tm.intros.length && !tm.totalChildren) {\n if (isFunction(tm.callback)) {\n tm.callback();\n }\n\n if (tm.parent && !tm.notifiedTotal) {\n tm.notifiedTotal = true;\n tm.parent.decrementTotal();\n }\n }\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate(manager) {\n const queue = manager.detachQueue;\n const outros = collectAllOutros(manager);\n\n if (!outros.length) {\n manager.detachNodes();\n } else {\n let i = queue.length;\n let j = 0;\n let node, trans;\n const nqueue = (manager.detachQueue = []);\n\n start: while (i--) {\n node = queue[i].node;\n j = outros.length;\n while (j--) {\n trans = outros[j].element.node;\n // check to see if the node is, contains, or is contained by the transitioning node\n if (trans === node || trans.contains(node) || node.contains(trans)) {\n nqueue.push(queue[i]);\n continue start;\n }\n }\n\n // no match, we can drop it\n queue[i].detach();\n }\n }\n}\n\nfunction collectAllOutros(manager, _list) {\n let list = _list;\n\n // if there's no list, we're starting at the root to build one\n if (!list) {\n list = [];\n let parent = manager;\n while (parent.parent) parent = parent.parent;\n return collectAllOutros(parent, list);\n } else {\n // grab all outros from child managers\n let i = manager.children.length;\n while (i--) {\n list = collectAllOutros(manager.children[i], list);\n }\n\n // grab any from this manager if there are any\n if (manager.outros.length) list = list.concat(manager.outros);\n\n return list;\n }\n}\n","import { addToArray } from 'utils/array';\nimport TransitionManager from './TransitionManager';\n\nlet batch;\n\nconst runloop = {\n active() {\n return !!batch;\n },\n\n start() {\n let fulfilPromise;\n const promise = new Promise(f => (fulfilPromise = f));\n\n batch = {\n previousBatch: batch,\n transitionManager: new TransitionManager(fulfilPromise, batch && batch.transitionManager),\n fragments: [],\n tasks: [],\n immediateObservers: [],\n deferredObservers: [],\n promise\n };\n\n return promise;\n },\n\n end() {\n flushChanges();\n\n if (!batch.previousBatch) batch.transitionManager.start();\n else batch.transitionManager.checkStart();\n\n batch = batch.previousBatch;\n },\n\n addFragment(fragment) {\n addToArray(batch.fragments, fragment);\n },\n\n // TODO: come up with a better way to handle fragments that trigger their own update\n addFragmentToRoot(fragment) {\n if (!batch) return;\n\n let b = batch;\n while (b.previousBatch) {\n b = b.previousBatch;\n }\n\n addToArray(b.fragments, fragment);\n },\n\n addObserver(observer, defer) {\n if (!batch) {\n observer.dispatch();\n } else {\n addToArray(defer ? batch.deferredObservers : batch.immediateObservers, observer);\n }\n },\n\n registerTransition(transition) {\n transition._manager = batch.transitionManager;\n batch.transitionManager.add(transition);\n },\n\n // synchronise node detachments with transition ends\n detachWhenReady(thing) {\n batch.transitionManager.detachQueue.push(thing);\n },\n\n scheduleTask(task, postRender) {\n let _batch;\n\n if (!batch) {\n task();\n } else {\n _batch = batch;\n while (postRender && _batch.previousBatch) {\n // this can't happen until the DOM has been fully updated\n // otherwise in some situations (with components inside elements)\n // transitions and decorators will initialise prematurely\n _batch = _batch.previousBatch;\n }\n\n _batch.tasks.push(task);\n }\n },\n\n promise() {\n if (!batch) return Promise.resolve();\n\n let target = batch;\n while (target.previousBatch) {\n target = target.previousBatch;\n }\n\n return target.promise || Promise.resolve();\n }\n};\n\nexport default runloop;\n\nfunction dispatch(observer) {\n observer.dispatch();\n}\n\nfunction flushChanges() {\n let which = batch.immediateObservers;\n batch.immediateObservers = [];\n which.forEach(dispatch);\n\n // Now that changes have been fully propagated, we can update the DOM\n // and complete other tasks\n let i = batch.fragments.length;\n let fragment;\n\n which = batch.fragments;\n batch.fragments = [];\n\n while (i--) {\n fragment = which[i];\n fragment.update();\n }\n\n batch.transitionManager.ready();\n\n which = batch.deferredObservers;\n batch.deferredObservers = [];\n which.forEach(dispatch);\n\n const tasks = batch.tasks;\n batch.tasks = [];\n\n for (i = 0; i < tasks.length; i += 1) {\n tasks[i]();\n }\n\n // If updating the view caused some model blowback - e.g. a triple\n // containing <option> elements caused the binding on the <select>\n // to update - then we start over\n if (\n batch.fragments.length ||\n batch.immediateObservers.length ||\n batch.deferredObservers.length ||\n batch.tasks.length\n )\n return flushChanges();\n}\n","import runloop from 'src/global/runloop';\n\n// TODO what happens if a transition is aborted?\n\nconst tickers = [];\nlet running = false;\n\nfunction tick() {\n runloop.start();\n\n const now = performance.now();\n\n let i;\n let ticker;\n\n for (i = 0; i < tickers.length; i += 1) {\n ticker = tickers[i];\n\n if (!ticker.tick(now)) {\n // ticker is complete, remove it from the stack, and decrement i so we don't miss one\n tickers.splice(i--, 1);\n }\n }\n\n runloop.end();\n\n if (tickers.length) {\n requestAnimationFrame(tick);\n } else {\n running = false;\n }\n}\n\nexport default class Ticker {\n constructor(options) {\n this.duration = options.duration;\n this.step = options.step;\n this.complete = options.complete;\n this.easing = options.easing;\n\n this.start = performance.now();\n this.end = this.start + this.duration;\n\n this.running = true;\n\n tickers.push(this);\n if (!running) requestAnimationFrame(tick);\n }\n\n tick(now) {\n if (!this.running) return false;\n\n if (now > this.end) {\n if (this.step) this.step(1);\n if (this.complete) this.complete(1);\n\n return false;\n }\n\n const elapsed = now - this.start;\n const eased = this.easing(elapsed / this.duration);\n\n if (this.step) this.step(eased);\n\n return true;\n }\n\n stop() {\n if (this.abort) this.abort();\n this.running = false;\n }\n}\n","import { hasOwn } from 'utils/object';\nimport { isString, isObjectType } from 'utils/is';\n\nconst prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\n/* istanbul ignore next */\nfunction prefixKeypath(obj, prefix) {\n const prefixed = {};\n\n if (!prefix) {\n return obj;\n }\n\n prefix += '.';\n\n for (const key in obj) {\n if (hasOwn(obj, key)) {\n prefixed[prefix + key] = obj[key];\n }\n }\n\n return prefixed;\n}\n\nexport default function getPrefixer(rootKeypath) {\n let rootDot;\n\n if (!prefixers[rootKeypath]) {\n rootDot = rootKeypath ? rootKeypath + '.' : '';\n\n /* istanbul ignore next */\n prefixers[rootKeypath] = function(relativeKeypath, value) {\n let obj;\n\n if (isString(relativeKeypath)) {\n obj = {};\n obj[rootDot + relativeKeypath] = value;\n return obj;\n }\n\n if (isObjectType(relativeKeypath)) {\n // 'relativeKeypath' is in fact a hash, not a keypath\n return rootDot ? prefixKeypath(relativeKeypath, rootKeypath) : relativeKeypath;\n }\n };\n }\n\n return prefixers[rootKeypath];\n}\n","import ModelBase, { maybeBind, shuffle } from './ModelBase';\nimport LinkModel from './LinkModel'; // eslint-disable-line no-unused-vars\nimport getComputationSignature from 'src/Ractive/helpers/getComputationSignature';\nimport { capture } from 'src/global/capture';\nimport { isArray, isEqual, isNumeric, isObjectLike } from 'utils/is';\nimport { handleChange, mark, markForce, marked, teardown } from 'shared/methodCallers';\nimport Ticker from 'shared/Ticker';\nimport getPrefixer from './helpers/getPrefixer';\nimport { unescapeKey } from 'shared/keypaths';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn, keys } from 'utils/object';\nimport { buildNewIndices } from 'utils/array';\n\nexport const shared = {};\n\nexport default class Model extends ModelBase {\n constructor(parent, key) {\n super(parent);\n\n this.ticker = null;\n\n if (parent) {\n this.key = unescapeKey(key);\n this.isReadonly = parent.isReadonly;\n\n if (parent.value) {\n this.value = parent.value[this.key];\n if (isArray(this.value)) this.length = this.value.length;\n this.adapt();\n }\n }\n }\n\n adapt() {\n const adaptors = this.root.adaptors;\n const len = adaptors.length;\n\n this.rewrap = false;\n\n // Exit early if no adaptors\n if (len === 0) return;\n\n const value = this.wrapper\n ? 'newWrapperValue' in this\n ? this.newWrapperValue\n : this.wrapperValue\n : this.value;\n\n // TODO remove this legacy nonsense\n const ractive = this.root.ractive;\n const keypath = this.getKeypath();\n\n // tear previous adaptor down if present\n if (this.wrapper) {\n const shouldTeardown =\n this.wrapperValue === value\n ? false\n : !this.wrapper.reset || this.wrapper.reset(value) === false;\n\n if (shouldTeardown) {\n this.wrapper.teardown();\n delete this.wrapper;\n delete this.wrapperValue;\n\n // don't branch for undefined values\n if (this.value !== undefined) {\n const parentValue = this.parent.value || this.parent.createBranch(this.key);\n if (parentValue[this.key] !== value) parentValue[this.key] = value;\n this.value = value;\n }\n } else {\n delete this.newWrapperValue;\n this.value = this.wrapper.get();\n return;\n }\n }\n\n let i;\n\n for (i = 0; i < len; i += 1) {\n const adaptor = adaptors[i];\n if (adaptor.filter(value, keypath, ractive)) {\n this.wrapper = adaptor.wrap(ractive, value, keypath, getPrefixer(keypath));\n this.wrapperValue = value;\n this.wrapper.__model = this; // massive temporary hack to enable array adaptor\n\n this.value = this.wrapper.get();\n\n break;\n }\n }\n }\n\n animate(from, to, options, interpolator) {\n if (this.ticker) this.ticker.stop();\n\n let fulfilPromise;\n const promise = new Promise(fulfil => (fulfilPromise = fulfil));\n\n this.ticker = new Ticker({\n duration: options.duration,\n easing: options.easing,\n step: t => {\n const value = interpolator(t);\n this.applyValue(value);\n if (options.step) options.step(t, value);\n },\n complete: () => {\n this.applyValue(to);\n if (options.complete) options.complete(to);\n\n this.ticker = null;\n fulfilPromise(to);\n }\n });\n\n promise.stop = this.ticker.stop;\n return promise;\n }\n\n applyValue(value, notify = true) {\n if (isEqual(value, this.value)) return;\n if (this.boundValue) this.boundValue = null;\n\n if (this.parent.wrapper && this.parent.wrapper.set) {\n this.parent.wrapper.set(this.key, value);\n this.parent.value = this.parent.wrapper.get();\n\n this.value = this.parent.value[this.key];\n if (this.wrapper) this.newWrapperValue = this.value;\n this.adapt();\n } else if (this.wrapper) {\n this.newWrapperValue = value;\n this.adapt();\n } else {\n const parentValue = this.parent.value || this.parent.createBranch(this.key);\n if (isObjectLike(parentValue)) {\n parentValue[this.key] = value;\n } else {\n warnIfDebug(`Attempted to set a property of a non-object '${this.getKeypath()}'`);\n return;\n }\n\n this.value = value;\n this.adapt();\n }\n\n // keep track of array stuff\n if (isArray(value)) {\n this.length = value.length;\n this.isArray = true;\n } else {\n this.isArray = false;\n }\n\n // notify dependants\n this.links.forEach(handleChange);\n this.children.forEach(mark);\n this.deps.forEach(handleChange);\n\n if (notify) this.notifyUpstream();\n\n if (this.parent.isArray) {\n if (this.key === 'length') this.parent.length = value;\n else this.parent.joinKey('length').mark();\n }\n }\n\n compute(key, computed) {\n const registry = this.computed || (this.computed = {});\n\n if (registry[key]) {\n registry[key].signature = getComputationSignature(this.root.ractive, key, computed);\n registry[key].mark();\n } else {\n registry[key] = new shared.Computation(\n this,\n getComputationSignature(this.root.ractive, key, computed),\n key\n );\n }\n\n return registry[key];\n }\n\n createBranch(key) {\n const branch = isNumeric(key) ? [] : {};\n this.applyValue(branch, false);\n\n return branch;\n }\n\n get(shouldCapture, opts) {\n if (this._link) return this._link.get(shouldCapture, opts);\n if (shouldCapture) capture(this);\n // if capturing, this value needs to be unwrapped because it's for external use\n if (opts && opts.virtual) return this.getVirtual(false);\n return maybeBind(\n this,\n (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture) && this.wrapper\n ? this.wrapperValue\n : this.value,\n !opts || opts.shouldBind !== false\n );\n }\n\n joinKey(key, opts) {\n if (this._link) {\n if (opts && opts.lastLink !== false && (key === undefined || key === '')) return this;\n return this._link.joinKey(key);\n }\n\n if (key === undefined || key === '') return this;\n\n let child;\n if (hasOwn(this.childByKey, key)) child = this.childByKey[key];\n else child = this.computed && this.computed[key];\n\n if (!child) {\n let computed;\n if (this.isRoot && this.ractive && (computed = this.ractive.computed[key])) {\n child = this.compute(key, computed);\n } else if (!this.isRoot && this.root.ractive) {\n const registry = this.root.ractive.computed;\n for (const k in registry) {\n computed = registry[k];\n if (computed.pattern && computed.pattern.test(this.getKeypath() + '.' + key)) {\n child = this.compute(key, computed);\n }\n }\n }\n }\n\n if (!child) {\n child = new Model(this, key);\n this.children.push(child);\n this.childByKey[key] = child;\n }\n\n if (child._link && (!opts || opts.lastLink !== false)) return child._link;\n\n return child;\n }\n\n mark(force) {\n if (this._link) return this._link.mark(force);\n\n const old = this.value;\n const value = this.retrieve();\n\n if (force || !isEqual(value, old)) {\n this.value = value;\n if (this.boundValue) this.boundValue = null;\n\n // make sure the wrapper stays in sync\n if (old !== value || this.rewrap) {\n if (this.wrapper) this.newWrapperValue = value;\n this.adapt();\n }\n\n // keep track of array stuff\n if (isArray(value)) {\n this.length = value.length;\n this.isArray = true;\n } else {\n this.isArray = false;\n }\n\n this.children.forEach(force ? markForce : mark);\n this.links.forEach(marked);\n\n this.deps.forEach(handleChange);\n }\n }\n\n merge(array, comparator) {\n const newIndices = buildNewIndices(\n this.value === array ? recreateArray(this) : this.value,\n array,\n comparator\n );\n this.parent.value[this.key] = array;\n this.shuffle(newIndices, true);\n }\n\n retrieve() {\n return this.parent.value ? this.parent.value[this.key] : undefined;\n }\n\n set(value) {\n if (this.ticker) this.ticker.stop();\n this.applyValue(value);\n }\n\n shuffle(newIndices, unsafe) {\n shuffle(this, newIndices, false, unsafe);\n }\n\n source() {\n return this;\n }\n\n teardown() {\n if (this._link) {\n this._link.teardown();\n this._link = null;\n }\n this.children.forEach(teardown);\n if (this.wrapper) this.wrapper.teardown();\n if (this.computed) keys(this.computed).forEach(k => this.computed[k].teardown());\n }\n}\n\nfunction recreateArray(model) {\n const array = [];\n\n for (let i = 0; i < model.length; i++) {\n array[i] = (model.childByKey[i] || {}).value;\n }\n\n return array;\n}\n","/* global global */\nimport Model from '../Model';\n\nexport const data = {};\n\nexport class SharedModel extends Model {\n constructor(value, name, ractive) {\n super(null, `@${name}`);\n this.key = `@${name}`;\n this.value = value;\n this.isRoot = true;\n this.root = this;\n this.adaptors = [];\n this.ractive = ractive;\n }\n\n getKeypath() {\n return this.key;\n }\n\n retrieve() {\n return this.value;\n }\n}\n\nexport default new SharedModel(data, 'shared');\n\nexport const GlobalModel = new SharedModel(\n typeof global !== 'undefined' ? global : window,\n 'global'\n);\n","import { splitKeypath } from 'shared/keypaths';\nimport SharedModel, { GlobalModel } from 'src/model/specials/SharedModel';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nfunction findContext(fragment) {\n let frag = fragment;\n while (frag && !frag.context && !frag.aliases) frag = frag.parent;\n return frag;\n}\n\nexport default function resolveReference(fragment, ref) {\n const initialFragment = fragment;\n // current context ref\n if (ref === '.') return fragment.findContext();\n\n // ancestor references\n if (ref[0] === '~') return fragment.ractive.viewmodel.joinAll(splitKeypath(ref.slice(2)));\n\n // scoped references\n if (ref[0] === '.' || ref[0] === '^') {\n let frag = fragment;\n const parts = ref.split('/');\n const explicitContext = parts[0] === '^^';\n\n // find nearest context node\n while (frag && !frag.context) {\n frag = up(frag);\n }\n let context = frag && frag.context;\n\n // walk up the context chain\n while (frag && parts[0] === '^^') {\n parts.shift();\n\n // the current fragment should always be a context,\n // and if it happens to be an iteration, jump above the each block\n if (frag.isIteration) {\n frag = frag.parent.parent;\n } else {\n // otherwise jump above the current fragment\n frag = up(frag);\n }\n\n // walk to the next contexted fragment\n while (frag && !frag.context) {\n frag = up(frag);\n }\n context = frag && frag.context;\n }\n\n if (!context && explicitContext) {\n throw new Error(\n `Invalid context parent reference ('${ref}'). There is not context at that level.`\n );\n }\n\n // walk up the context path\n while (parts[0] === '.' || parts[0] === '..') {\n const part = parts.shift();\n\n if (part === '..') {\n context = context.parent;\n }\n }\n\n ref = parts.join('/');\n\n // special case - `{{.foo}}` means the same as `{{./foo}}`\n if (ref[0] === '.') ref = ref.slice(1);\n return context.joinAll(splitKeypath(ref));\n }\n\n const keys = splitKeypath(ref);\n if (!keys.length) return;\n const base = keys.shift();\n\n // special refs\n if (base[0] === '@') {\n // shorthand from outside the template\n // @this referring to local ractive instance\n if (base === '@this' || base === '@') {\n return fragment.ractive.viewmodel.getRactiveModel().joinAll(keys);\n } else if (base === '@index' || base === '@key') {\n // @index or @key referring to the nearest repeating index or key\n if (keys.length) badReference(base);\n const repeater = findIter(fragment);\n return repeater && repeater[`get${base[1] === 'i' ? 'Index' : 'Key'}`]();\n } else if (base === '@last') {\n const repeater = findIter(fragment);\n return repeater && repeater.parent.getLast();\n } else if (base === '@global') {\n // @global referring to window or global\n return GlobalModel.joinAll(keys);\n } else if (base === '@shared') {\n // @global referring to window or global\n return SharedModel.joinAll(keys);\n } else if (base === '@keypath' || base === '@rootpath') {\n // @keypath or @rootpath, the current keypath string\n const root = ref[1] === 'r' ? fragment.ractive.root : null;\n let f = fragment;\n\n while (\n f &&\n (!f.context || (f.isRoot && f.ractive.component && (root || !f.ractive.isolated)))\n ) {\n f = f.isRoot ? f.componentParent : f.parent;\n }\n\n return f.getKeypath(root);\n } else if (base === '@context') {\n return new ContextModel(fragment.getContext());\n } else if (base === '@local') {\n // @context-local data\n return fragment.getContext()._data.joinAll(keys);\n } else if (base === '@style') {\n // @style shared model\n return fragment.ractive.constructor._cssModel.joinAll(keys);\n } else if (base === '@helpers') {\n // @helpers instance model\n return fragment.ractive.viewmodel.getHelpers().joinAll(keys);\n } else {\n // nope\n throw new Error(`Invalid special reference '${base}'`);\n }\n }\n\n // helpers\n if (base && !keys.length) {\n const helpers = fragment.ractive.viewmodel.getHelpers();\n if (helpers.has(base)) return helpers.joinKey(base);\n }\n\n let context = findContext(fragment);\n\n // check immediate context for a match\n if (context) {\n if (context.context) {\n context = context.context;\n if (context.has(base)) return context.joinKey(base).joinAll(keys);\n } else {\n // alias block, so get next full context for later\n context = fragment.findContext();\n }\n } else {\n context = fragment.findContext();\n }\n\n // walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n let createMapping = false;\n const shouldWarn = fragment.ractive.warnAboutAmbiguity;\n let crossed = 0;\n let model;\n\n while (fragment) {\n // repeated fragments\n if (fragment.isIteration) {\n if (base === fragment.parent.keyRef) {\n model = fragment.getKey();\n } else if (base === fragment.parent.indexRef) {\n model = fragment.getIndex();\n }\n\n if (model && keys.length) badReference(base);\n }\n\n // alias node or iteration\n if (!model && fragment.aliases && hasOwn(fragment.aliases, base)) {\n model = fragment.aliases[base];\n }\n\n // check fragment context to see if it has the key we need\n if (!model && fragment.context && fragment.context.has(base)) {\n model = fragment.context.joinKey(base);\n\n // this is an implicit mapping\n if (createMapping) {\n if (shouldWarn)\n warnIfDebug(\n `'${ref}' resolved but is ambiguous and will create a mapping to a parent component.`\n );\n } else if (shouldWarn && crossed) warnIfDebug(`'${ref}' resolved but is ambiguous.`);\n }\n\n if (model) {\n if (createMapping) {\n model = initialFragment.ractive.viewmodel.createLink(base, model, base, { implicit: true });\n }\n\n if (keys.length > 0 && isFunction(model.joinAll)) {\n model = model.joinAll(keys);\n }\n\n return model;\n }\n\n // don't consider alias blocks when checking for ambiguity\n if (fragment.context && !fragment.aliases) crossed = 1;\n\n if (\n (fragment.componentParent || (!fragment.parent && fragment.ractive.component)) &&\n !fragment.ractive.isolated\n ) {\n // ascend through component boundary\n fragment = fragment.componentParent || fragment.ractive.component.up;\n createMapping = true;\n } else {\n fragment = fragment.parent;\n }\n }\n\n // if enabled, check the instance for a match\n const instance = initialFragment.ractive;\n if (instance.resolveInstanceMembers && base !== 'data' && base in instance) {\n return instance.viewmodel\n .getRactiveModel()\n .joinKey(base)\n .joinAll(keys);\n }\n\n if (shouldWarn) {\n warnIfDebug(`'${ref}' is ambiguous and did not resolve.`);\n }\n\n // didn't find anything, so go ahead and create the key on the local model\n return context.joinKey(base).joinAll(keys);\n}\n\nfunction up(fragment) {\n return fragment && ((!fragment.ractive.isolated && fragment.componentParent) || fragment.parent);\n}\n\nfunction findIter(start) {\n let fragment = start;\n let next;\n while (!fragment.isIteration && (next = up(fragment))) {\n fragment = next;\n }\n\n return fragment.isIteration && fragment;\n}\n\nfunction badReference(key) {\n throw new Error(`An index or key reference (${key}) cannot have child properties`);\n}\n\nclass ContextModel {\n constructor(context) {\n this.context = context;\n }\n\n get() {\n return this.context;\n }\n\n getKeypath() {\n return '@context';\n }\n}\n","import noop from 'utils/noop';\nimport { assign, create } from 'utils/object';\n\nexport const extern = {};\n\nexport default function getRactiveContext(ractive, ...assigns) {\n const fragment =\n ractive.fragment ||\n ractive._fakeFragment ||\n (ractive._fakeFragment = new FakeFragment(ractive));\n return fragment.getContext.apply(fragment, assigns);\n}\n\nexport function getContext(...assigns) {\n if (!this.ctx) this.ctx = new extern.Context(this);\n assigns.unshift(create(this.ctx));\n return assign.apply(null, assigns);\n}\n\nexport class FakeFragment {\n constructor(ractive) {\n this.ractive = ractive;\n }\n\n findContext() {\n return this.ractive.viewmodel;\n }\n}\nconst proto = FakeFragment.prototype;\nproto.getContext = getContext;\nproto.find = proto.findComponent = proto.findAll = proto.findAllComponents = noop;\n\nexport function findParentWithContext(fragment) {\n let frag = fragment;\n while (frag && !frag.context) frag = frag.parent;\n if (!frag) return fragment && fragment.ractive.fragment;\n else return frag;\n}\n","import { isArray, isObject, isObjectType, isFunction, isString } from 'utils/is';\nimport { warnIfDebug } from 'utils/log';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from '../global/runloop';\nimport { splitKeypath } from './keypaths';\nimport { FakeFragment } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\n\nexport let keep = false;\n\nexport function set(pairs, options) {\n const k = keep;\n\n const deep = options && options.deep;\n const shuffle = options && options.shuffle;\n const promise = runloop.start();\n if (options && 'keep' in options) keep = options.keep;\n\n let i = pairs.length;\n while (i--) {\n const model = pairs[i][0];\n const value = pairs[i][1];\n const keypath = pairs[i][2];\n\n if (!model) {\n runloop.end();\n throw new Error(`Failed to set invalid keypath '${keypath}'`);\n }\n\n if (deep) deepSet(model, value);\n else if (shuffle) {\n let array = value;\n const target = model.get();\n // shuffle target array with itself\n if (!array) array = target;\n\n // if there's not an array there yet, go ahead and set\n if (target === undefined) {\n model.set(array);\n } else {\n if (!isArray(target) || !isArray(array)) {\n runloop.end();\n throw new Error('You cannot merge an array with a non-array');\n }\n\n const comparator = getComparator(shuffle);\n model.merge(array, comparator);\n }\n } else model.set(value);\n }\n\n runloop.end();\n\n keep = k;\n\n return promise;\n}\n\nconst star = /\\*/;\nexport function gather(ractive, keypath, base, isolated) {\n if (!base && (keypath[0] === '.' || keypath[1] === '^')) {\n warnIfDebug(\n `Attempted to set a relative keypath from a non-relative context. You can use a context object to set relative keypaths.`\n );\n return [];\n }\n\n const keys = splitKeypath(keypath);\n const model = base || ractive.viewmodel;\n\n if (star.test(keypath)) {\n return model.findMatches(keys);\n } else {\n if (model === ractive.viewmodel) {\n // allow implicit mappings\n if (\n ractive.component &&\n !ractive.isolated &&\n !model.has(keys[0]) &&\n keypath[0] !== '@' &&\n keypath[0] &&\n !isolated\n ) {\n return [resolveReference(ractive.fragment || new FakeFragment(ractive), keypath)];\n } else {\n return [model.joinAll(keys)];\n }\n } else {\n return [model.joinAll(keys)];\n }\n }\n}\n\nexport function build(ractive, keypath, value, isolated) {\n const sets = [];\n\n // set multiple keypaths in one go\n if (isObject(keypath)) {\n for (const k in keypath) {\n if (hasOwn(keypath, k)) {\n sets.push.apply(sets, gather(ractive, k, null, isolated).map(m => [m, keypath[k], k]));\n }\n }\n } else {\n // set a single keypath\n sets.push.apply(sets, gather(ractive, keypath, null, isolated).map(m => [m, value, keypath]));\n }\n\n return sets;\n}\n\nconst deepOpts = { virtual: false };\nfunction deepSet(model, value) {\n const dest = model.get(false, deepOpts);\n\n // if dest doesn't exist, just set it\n if (dest == null || !isObjectType(value)) return model.set(value);\n if (!isObjectType(dest)) return model.set(value);\n\n for (const k in value) {\n if (hasOwn(value, k)) {\n deepSet(model.joinKey(k), value[k]);\n }\n }\n}\n\nconst comparators = {};\nfunction getComparator(option) {\n if (option === true) return null; // use existing arrays\n if (isFunction(option)) return option;\n\n if (isString(option)) {\n return comparators[option] || (comparators[option] = thing => thing[option]);\n }\n\n throw new Error('If supplied, options.compare must be a string, function, or true'); // TODO link to docs\n}\n","import { isNumeric, isString } from 'utils/is';\nimport { build, set } from 'shared/set';\n\nconst errorMessage = 'Cannot add to a non-numeric value';\n\nexport default function add(ractive, keypath, d, options) {\n if (!isString(keypath) || !isNumeric(d)) {\n throw new Error('Bad arguments');\n }\n\n const sets = build(ractive, keypath, d, options && options.isolated);\n\n return set(\n sets.map(pair => {\n const [model, add] = pair;\n const value = model.get();\n if (!isNumeric(add) || !isNumeric(value)) throw new Error(errorMessage);\n return [model, value + add];\n })\n );\n}\n","import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$add(keypath, d, options) {\n const num = isNumber(d) ? d : 1;\n const opts = isObjectType(d) ? d : options;\n return add(this, keypath, num, opts);\n}\n","import runloop from 'src/global/runloop';\nimport easing from 'src/Ractive/static/easing';\nimport interpolate from 'shared/interpolate';\nimport { isEqual, isFunction, isObjectType } from 'utils/is';\nimport noop from 'utils/noop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { defineProperty, keys as objectKeys } from 'utils/object';\n\nfunction immediate(value) {\n const result = Promise.resolve(value);\n defineProperty(result, 'stop', { value: noop });\n return result;\n}\n\nconst linear = easing.linear;\n\nfunction getOptions(options, instance) {\n options = options || {};\n\n let easing;\n if (options.easing) {\n easing = isFunction(options.easing) ? options.easing : instance.easing[options.easing];\n }\n\n return {\n easing: easing || linear,\n duration: 'duration' in options ? options.duration : 400,\n complete: options.complete || noop,\n step: options.step || noop,\n interpolator: options.interpolator\n };\n}\n\nexport function animate(ractive, model, to, options) {\n options = getOptions(options, ractive);\n const from = model.get();\n\n // don't bother animating values that stay the same\n if (isEqual(from, to)) {\n options.complete(options.to);\n return immediate(to);\n }\n\n const interpolator = interpolate(from, to, ractive, options.interpolator);\n\n // if we can't interpolate the value, set it immediately\n if (!interpolator) {\n runloop.start();\n model.set(to);\n runloop.end();\n\n return immediate(to);\n }\n\n return model.animate(from, to, options, interpolator);\n}\n\nexport default function Ractive$animate(keypath, to, options) {\n if (isObjectType(keypath)) {\n const keys = objectKeys(keypath);\n\n throw new Error(`ractive.animate(...) no longer supports objects. Instead of ractive.animate({\n ${keys.map(key => `'${key}': ${keypath[key]}`).join('\\n ')}\n}, {...}), do\n\n${keys.map(key => `ractive.animate('${key}', ${keypath[key]}, {...});`).join('\\n')}\n`);\n }\n\n return animate(this, this.viewmodel.joinAll(splitKeypath(keypath)), to, options);\n}\n","export function enqueue(ractive, event) {\n if (ractive.event) {\n ractive._eventQueue.push(ractive.event);\n }\n\n ractive.event = event;\n}\n\nexport function dequeue(ractive) {\n if (ractive._eventQueue.length) {\n ractive.event = ractive._eventQueue.pop();\n } else {\n ractive.event = null;\n }\n}\n","import { enqueue, dequeue } from './eventStack';\n\nconst initStars = {};\nconst bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants(name, initial) {\n const map = initial ? initStars : bubbleStars;\n if (map[name]) return map[name];\n\n const parts = name.split('.');\n const result = [];\n let base = false;\n\n // initial events the implicit namespace of 'this'\n if (initial) {\n parts.unshift('this');\n base = true;\n }\n\n // use max - 1 bits as a bitmap to pick a part or a *\n // need to skip the full star case if the namespace is synthetic\n const max = Math.pow(2, parts.length) - (initial ? 1 : 0);\n for (let i = 0; i < max; i++) {\n const join = [];\n for (let j = 0; j < parts.length; j++) {\n join.push(1 & (i >> j) ? '*' : parts[j]);\n }\n result.unshift(join.join('.'));\n }\n\n if (base) {\n // include non-this-namespaced versions\n if (parts.length > 2) {\n result.push.apply(result, variants(name, false));\n } else {\n result.push('*');\n result.push(name);\n }\n }\n\n map[name] = result;\n return result;\n}\n\nexport default function fireEvent(ractive, eventName, context, args = []) {\n if (!eventName) {\n return;\n }\n\n context.name = eventName;\n args.unshift(context);\n\n const eventNames = ractive._nsSubs ? variants(eventName, true) : ['*', eventName];\n\n return fireEventAs(ractive, eventNames, context, args, true);\n}\n\nfunction fireEventAs(ractive, eventNames, context, args, initialFire = false) {\n let bubble = true;\n\n if (initialFire || ractive._nsSubs) {\n enqueue(ractive, context);\n\n let i = eventNames.length;\n while (i--) {\n if (eventNames[i] in ractive._subs) {\n bubble = notifySubscribers(ractive, ractive._subs[eventNames[i]], context, args) && bubble;\n }\n }\n\n dequeue(ractive);\n }\n\n if (ractive.parent && bubble) {\n if (initialFire && ractive.component) {\n const fullName = ractive.component.name + '.' + eventNames[eventNames.length - 1];\n eventNames = variants(fullName, false);\n\n if (context && !context.component) {\n context.component = ractive;\n }\n }\n\n bubble = fireEventAs(ractive.parent, eventNames, context, args);\n }\n\n return bubble;\n}\n\nfunction notifySubscribers(ractive, subscribers, context, args) {\n let originalEvent = null;\n let stopEvent = false;\n\n // subscribers can be modified inflight, e.g. \"once\" functionality\n // so we need to copy to make sure everyone gets called\n subscribers = subscribers.slice();\n\n for (let i = 0, len = subscribers.length; i < len; i += 1) {\n if (!subscribers[i].off && subscribers[i].handler.apply(ractive, args) === false) {\n stopEvent = true;\n }\n }\n\n if (context && stopEvent && (originalEvent = context.event)) {\n originalEvent.preventDefault && originalEvent.preventDefault();\n originalEvent.stopPropagation && originalEvent.stopPropagation();\n }\n\n return !stopEvent;\n}\n","import fireEvent from './fireEvent';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nexport class Hook {\n constructor(event) {\n this.event = event;\n this.method = 'on' + event;\n }\n\n fire(ractive, arg) {\n const context = getRactiveContext(ractive);\n const method = this.method;\n\n if (ractive[method]) {\n arg ? ractive[method](context, arg) : ractive[method](context);\n }\n\n fireEvent(ractive, this.event, context, arg ? [arg, ractive] : [ractive]);\n }\n}\n\nfunction getChildQueue(queue, ractive) {\n return queue[ractive._guid] || (queue[ractive._guid] = []);\n}\n\nfunction fire(hookQueue, ractive) {\n const childQueue = getChildQueue(hookQueue.queue, ractive);\n\n hookQueue.hook.fire(ractive);\n\n // queue is \"live\" because components can end up being\n // added while hooks fire on parents that modify data values.\n while (childQueue.length) {\n fire(hookQueue, childQueue.shift());\n }\n\n delete hookQueue.queue[ractive._guid];\n}\n\nexport class HookQueue {\n constructor(event) {\n this.hook = new Hook(event);\n this.inProcess = {};\n this.queue = {};\n }\n\n begin(ractive) {\n this.inProcess[ractive._guid] = true;\n }\n\n end(ractive) {\n const parent = ractive.parent;\n\n // If this is *isn't* a child of a component that's in process,\n // it should call methods or fire at this point\n if (!parent || !this.inProcess[parent._guid]) {\n fire(this, ractive);\n } else {\n // elsewise, handoff to parent to fire when ready\n getChildQueue(this.queue, parent).push(ractive);\n }\n\n delete this.inProcess[ractive._guid];\n }\n}\n\nconst hooks = {};\n[\n 'construct',\n 'config',\n 'attachchild',\n 'detach',\n 'detachchild',\n 'insert',\n 'complete',\n 'reset',\n 'render',\n 'unrendering',\n 'unrender',\n 'teardown',\n 'destruct',\n 'update'\n].forEach(hook => {\n hooks[hook] = new Hook(hook);\n});\nhooks.init = new HookQueue('init');\n\nexport default hooks;\n","export function findAnchors(fragment, name = null) {\n const res = [];\n\n findAnchorsIn(fragment, name, res);\n\n return res;\n}\n\nfunction findAnchorsIn(item, name, result) {\n if (item.isAnchor) {\n if (!name || item.name === name) {\n result.push(item);\n }\n } else if (item.items) {\n item.items.forEach(i => findAnchorsIn(i, name, result));\n } else if (item.iterations) {\n item.iterations.forEach(i => findAnchorsIn(i, name, result));\n } else if (item.fragment && !item.component) {\n findAnchorsIn(item.fragment, name, result);\n }\n}\n\nexport function updateAnchors(instance, name = null) {\n const anchors = findAnchors(instance.fragment, name);\n const idxs = {};\n const children = instance._children.byName;\n\n anchors.forEach(a => {\n const name = a.name;\n if (!(name in idxs)) idxs[name] = 0;\n const idx = idxs[name];\n const child = (children[name] || [])[idx];\n\n if (child && child.lastBound !== a) {\n if (child.lastBound) child.lastBound.removeChild(child);\n a.addChild(child);\n }\n\n idxs[name]++;\n });\n}\n\nexport function unrenderChild(meta) {\n if (meta.instance.fragment.rendered) {\n meta.shouldDestroy = true;\n meta.instance.unrender();\n }\n meta.instance.el = null;\n}\n","import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { unrenderChild, updateAnchors } from 'shared/anchors';\n\nexport default function attachChild(child, options = {}) {\n const children = this._children;\n let idx;\n\n if (child.parent && child.parent !== this)\n throw new Error(\n `Instance ${child._guid} is already attached to a different instance ${\n child.parent._guid\n }. Please detach it from the other instance using detachChild first.`\n );\n else if (child.parent)\n throw new Error(`Instance ${child._guid} is already attached to this instance.`);\n\n const meta = {\n instance: child,\n ractive: this,\n name: options.name || child.constructor.name || 'Ractive',\n target: options.target || false,\n bubble,\n findNextNode\n };\n meta.nameOption = options.name;\n\n // child is managing itself\n if (!meta.target) {\n meta.up = this.fragment;\n meta.external = true;\n } else {\n let list;\n if (!(list = children.byName[meta.target])) {\n list = [];\n this.set(`@this.children.byName.${meta.target}`, list);\n }\n idx = options.prepend ? 0 : options.insertAt !== undefined ? options.insertAt : list.length;\n }\n\n child.parent = this;\n child.root = this.root;\n child.component = meta;\n children.push(meta);\n\n const promise = runloop.start();\n\n const rm = child.viewmodel.getRactiveModel();\n rm.joinKey('parent', { lastLink: false }).link(this.viewmodel.getRactiveModel());\n rm.joinKey('root', { lastLink: false }).link(this.root.viewmodel.getRactiveModel());\n\n hooks.attachchild.fire(child);\n\n if (meta.target) {\n unrenderChild(meta);\n this.splice(`@this.children.byName.${meta.target}`, idx, 0, meta);\n updateAnchors(this, meta.target);\n } else {\n if (!child.isolated) child.viewmodel.attached(this.fragment);\n }\n\n runloop.end();\n\n promise.ractive = child;\n return promise.then(() => child);\n}\n\nfunction bubble() {\n runloop.addFragment(this.instance.fragment);\n}\n\nfunction findNextNode() {\n if (this.anchor) return this.anchor.findNextNode();\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport { isString, isFunction } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { fireShuffleTasks } from 'src/model/ModelBase';\n\nexport function compute(path, computed) {\n this.computed[path] = computed;\n if (isString(computed) || isFunction(computed))\n computed = this.computed[path] = { get: computed };\n\n const keys = splitKeypath(path);\n if (!~path.indexOf('*')) {\n const last = keys.pop();\n return this.viewmodel.joinAll(keys).compute(last, computed);\n } else {\n computed.pattern = new RegExp(\n '^' +\n keys\n .map(k => k.replace(/\\*\\*/g, '(.+)').replace(/\\*/g, '((?:\\\\\\\\.|[^\\\\.])+)'))\n .join('\\\\.') +\n '$'\n );\n }\n}\n\nexport default function Ractive$compute(path, computed) {\n const promise = runloop.start();\n const comp = compute.call(this, path, computed);\n\n if (comp) {\n const keys = splitKeypath(path);\n if (keys.length === 1 && !comp.isReadonly) {\n comp.set(this.viewmodel.value[keys[0]]);\n }\n\n const first = keys.reduce((a, c) => a && a.childByKey[c], this.viewmodel);\n if (first) {\n first.rebind(comp, first, false);\n if (first.parent) delete first.parent.childByKey[first.key];\n fireShuffleTasks();\n }\n }\n\n runloop.end();\n\n return promise;\n}\n","import hooks from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\n\nexport default function Ractive$detach() {\n if (this.isDetached) {\n return this.el;\n }\n\n if (this.el) {\n removeFromArray(this.el.__ractive_instances__, this);\n }\n\n this.el = this.fragment.detach();\n this.isDetached = true;\n\n hooks.detach.fire(this);\n return this.el;\n}\n","import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\n\nexport default function detachChild(child) {\n const children = this._children;\n let meta, index;\n\n let i = children.length;\n while (i--) {\n if (children[i].instance === child) {\n index = i;\n meta = children[i];\n break;\n }\n }\n\n if (!meta || child.parent !== this)\n throw new Error(`Instance ${child._guid} is not attached to this instance.`);\n\n const promise = runloop.start();\n\n if (meta.anchor) meta.anchor.removeChild(meta);\n if (!child.isolated) child.viewmodel.detached();\n\n children.splice(index, 1);\n if (meta.target) {\n this.splice(\n `@this.children.byName.${meta.target}`,\n children.byName[meta.target].indexOf(meta),\n 1\n );\n updateAnchors(this, meta.target);\n }\n const rm = child.viewmodel.getRactiveModel();\n rm.joinKey('parent', { lastLink: false }).unlink();\n rm.joinKey('root', { lastLink: false }).link(rm);\n child.root = child;\n child.parent = null;\n child.component = null;\n\n hooks.detachchild.fire(child);\n\n runloop.end();\n\n promise.ractive = child;\n return promise.then(() => child);\n}\n","export default function Ractive$find(selector, options = {}) {\n if (!this.rendered)\n throw new Error(\n `Cannot call ractive.find('${selector}') unless instance is rendered to the DOM`\n );\n\n let node = this.fragment.find(selector, options);\n if (node) return node;\n\n if (options.remote) {\n for (let i = 0; i < this._children.length; i++) {\n if (!this._children[i].instance.fragment.rendered) continue;\n node = this._children[i].instance.find(selector, options);\n if (node) return node;\n }\n }\n}\n","import { isArray } from 'utils/is';\n\nexport default function Ractive$findAll(selector, options = {}) {\n if (!this.rendered)\n throw new Error(\n `Cannot call ractive.findAll('${selector}', ...) unless instance is rendered to the DOM`\n );\n\n if (!isArray(options.result)) options.result = [];\n\n this.fragment.findAll(selector, options);\n\n if (options.remote) {\n // seach non-fragment children\n this._children.forEach(c => {\n if (!c.target && c.instance.fragment && c.instance.fragment.rendered) {\n c.instance.findAll(selector, options);\n }\n });\n }\n\n return options.result;\n}\n","import { isArray, isObjectType } from 'utils/is';\n\nexport default function Ractive$findAllComponents(selector, options) {\n if (!options && isObjectType(selector)) {\n options = selector;\n selector = '';\n }\n\n options = options || {};\n\n if (!isArray(options.result)) options.result = [];\n\n this.fragment.findAllComponents(selector, options);\n\n if (options.remote) {\n // search non-fragment children\n this._children.forEach(c => {\n if (!c.target && c.instance.fragment && c.instance.fragment.rendered) {\n if (!selector || c.name === selector) {\n options.result.push(c.instance);\n }\n\n c.instance.findAllComponents(selector, options);\n }\n });\n }\n\n return options.result;\n}\n","import { isObjectType } from 'utils/is';\n\nexport default function Ractive$findComponent(selector, options = {}) {\n if (isObjectType(selector)) {\n options = selector;\n selector = '';\n }\n\n let child = this.fragment.findComponent(selector, options);\n if (child) return child;\n\n if (options.remote) {\n if (!selector && this._children.length) return this._children[0].instance;\n for (let i = 0; i < this._children.length; i++) {\n // skip children that are or should be in an anchor\n if (this._children[i].target) continue;\n if (this._children[i].name === selector) return this._children[i].instance;\n child = this._children[i].instance.findComponent(selector, options);\n if (child) return child;\n }\n }\n}\n","export default function Ractive$findContainer(selector) {\n if (this.container) {\n if (this.container.component && this.container.component.name === selector) {\n return this.container;\n } else {\n return this.container.findContainer(selector);\n }\n }\n\n return null;\n}\n","export default function Ractive$findParent(selector) {\n if (this.parent) {\n if (this.parent.component && this.parent.component.name === selector) {\n return this.parent;\n } else {\n return this.parent.findParent(selector);\n }\n }\n\n return null;\n}\n","import { ANCHOR, COMPONENT, ELEMENT } from 'config/types';\n\nexport default function findElement(start, orComponent = true, name) {\n while (\n start &&\n (start.type !== ELEMENT || (name && start.name !== name)) &&\n (!orComponent || (start.type !== COMPONENT && start.type !== ANCHOR))\n ) {\n // start is a fragment - look at the owner\n if (start.owner) start = start.owner;\n else if (start.component)\n // start is a component or yielder - look at the container\n start = start.containerFragment || start.component.up;\n else if (start.parent)\n // start is an item - look at the parent\n start = start.parent;\n else if (start.up)\n // start is an item without a parent - look at the parent fragment\n start = start.up;\n else start = undefined;\n }\n\n return start;\n}\n","import { isNumber } from 'utils/is';\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n// array = [ 'a', 'b', 'c', 'd' ];\n// array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n// array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n// array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nexport default function getNewIndices(length, methodName, args) {\n const newIndices = [];\n\n const spliceArguments = getSpliceEquivalent(length, methodName, args);\n\n if (!spliceArguments) {\n return null; // TODO support reverse and sort?\n }\n\n const balance = spliceArguments.length - 2 - spliceArguments[1];\n\n const removeStart = Math.min(length, spliceArguments[0]);\n const removeEnd = removeStart + spliceArguments[1];\n newIndices.startIndex = removeStart;\n\n let i;\n for (i = 0; i < removeStart; i += 1) {\n newIndices.push(i);\n }\n\n for (; i < removeEnd; i += 1) {\n newIndices.push(-1);\n }\n\n for (; i < length; i += 1) {\n newIndices.push(i + balance);\n }\n\n // there is a net shift for the rest of the array starting with index + balance\n if (balance !== 0) {\n newIndices.touchedFrom = spliceArguments[0];\n } else {\n newIndices.touchedFrom = length;\n }\n\n return newIndices;\n}\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent(length, methodName, args) {\n switch (methodName) {\n case 'splice':\n if (args[0] !== undefined && args[0] < 0) {\n args[0] = length + Math.max(args[0], -length);\n }\n\n if (args[0] === undefined) args[0] = 0;\n\n while (args.length < 2) {\n args.push(length - args[0]);\n }\n\n if (!isNumber(args[1])) {\n args[1] = length - args[0];\n }\n\n // ensure we only remove elements that exist\n args[1] = Math.min(args[1], length - args[0]);\n\n return args;\n\n case 'sort':\n case 'reverse':\n return null;\n\n case 'pop':\n if (length) {\n return [length - 1, 1];\n }\n return [0, 0];\n\n case 'push':\n return [length, 0].concat(args);\n\n case 'shift':\n return [0, length ? 1 : 0];\n\n case 'unshift':\n return [0, 0].concat(args);\n }\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\nimport getNewIndices from 'shared/getNewIndices';\nimport { isArray } from 'utils/is';\n\nconst arrayProto = Array.prototype;\n\nexport default function(methodName) {\n function path(keypath, ...args) {\n return model(this.viewmodel.joinAll(splitKeypath(keypath)), args);\n }\n\n function model(mdl, args) {\n let array = mdl.get();\n\n if (!isArray(array)) {\n if (array === undefined) {\n array = [];\n const result = arrayProto[methodName].apply(array, args);\n const promise = runloop.start().then(() => result);\n mdl.set(array);\n runloop.end();\n return promise;\n } else {\n throw new Error(\n `shuffle array method ${methodName} called on non-array at ${mdl.getKeypath()}`\n );\n }\n }\n\n const newIndices = getNewIndices(array.length, methodName, args);\n const result = arrayProto[methodName].apply(array, args);\n\n const promise = runloop.start().then(() => result);\n promise.result = result;\n\n if (newIndices) {\n if (mdl.shuffle) {\n mdl.shuffle(newIndices);\n } else {\n // it's a computation, which don't have a shuffle, so just invalidate\n mdl.mark();\n }\n } else {\n mdl.set(result);\n }\n\n runloop.end();\n\n return promise;\n }\n\n return { path, model };\n}\n","import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isString } from 'utils/is';\n\nexport function update(ractive, model, options) {\n // if the parent is wrapped, the adaptor will need to be updated before\n // updating on this keypath\n if (model.parent && model.parent.wrapper) {\n model.parent.adapt();\n }\n\n const promise = runloop.start();\n\n model.mark(options && options.force);\n\n // notify upstream of changes\n model.notifyUpstream();\n\n runloop.end();\n\n hooks.update.fire(ractive, model);\n\n return promise;\n}\n\nexport default function Ractive$update(keypath, options) {\n let opts, path;\n\n if (isString(keypath)) {\n path = splitKeypath(keypath);\n opts = options;\n } else {\n opts = keypath;\n }\n\n return update(this, path ? this.viewmodel.joinAll(path) : this.viewmodel, opts);\n}\n","import resolveReference from 'src/view/resolvers/resolveReference';\nimport Model from 'src/model/Model';\nimport { isNumeric, isObject, isNumber, isObjectType, isString } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport findElement from 'src/view/items/shared/findElement';\nimport { set as sharedSet } from './set';\nimport makeArrayMethod from '../Ractive/prototype/shared/makeArrayMethod';\nimport { animate as protoAnimate } from '../Ractive/prototype/animate';\nimport { update as protoUpdate } from '../Ractive/prototype/update';\nimport getRactiveContext, { extern, findParentWithContext } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\nimport { ELEMENT } from 'config/types';\n\nconst modelPush = makeArrayMethod('push').model;\nconst modelPop = makeArrayMethod('pop').model;\nconst modelShift = makeArrayMethod('shift').model;\nconst modelUnshift = makeArrayMethod('unshift').model;\nconst modelSort = makeArrayMethod('sort').model;\nconst modelSplice = makeArrayMethod('splice').model;\nconst modelReverse = makeArrayMethod('reverse').model;\n\nclass ContextData extends Model {\n constructor(options) {\n super(null, null);\n\n this.isRoot = true;\n this.root = this;\n this.value = {};\n this.ractive = options.ractive;\n this.adaptors = [];\n this.context = options.context;\n }\n\n getKeypath() {\n return '@context.data';\n }\n\n rebound() {}\n}\n\nexport default class Context {\n constructor(fragment, element) {\n this.fragment = fragment;\n this.element = element || findElement(fragment);\n this.node = this.element && this.element.node;\n this.ractive = fragment.ractive;\n this.root = this;\n }\n\n get decorators() {\n const items = {};\n if (!this.element) return items;\n this.element.decorators.forEach(d => (items[d.name] = d.handle));\n return items;\n }\n\n get _data() {\n return (\n this.model ||\n (this.root.model = new ContextData({\n ractive: this.ractive,\n context: this.root\n }))\n );\n }\n\n // the usual mutation suspects\n add(keypath, d, options) {\n const num = isNumber(d) ? +d : 1;\n const opts = isObjectType(d) ? d : options;\n return sharedSet(\n build(this, keypath, num).map(pair => {\n const [model, val] = pair;\n const value = model.get();\n if (!isNumeric(val) || !isNumeric(value)) throw new Error('Cannot add non-numeric value');\n return [model, value + val];\n }),\n opts\n );\n }\n\n animate(keypath, value, options) {\n const model = findModel(this, keypath).model;\n return protoAnimate(this.ractive, model, value, options);\n }\n\n // get relative keypaths and values\n get(keypath) {\n if (!keypath) return this.fragment.findContext().get(true);\n\n const { model } = findModel(this, keypath);\n\n return model ? model.get(true) : undefined;\n }\n\n getParent(component) {\n let fragment = this.fragment;\n\n if (fragment.context)\n fragment = findParentWithContext(fragment.parent || (component && fragment.componentParent));\n else {\n fragment = findParentWithContext(fragment.parent || (component && fragment.componentParent));\n if (fragment)\n fragment = findParentWithContext(\n fragment.parent || (component && fragment.componentParent)\n );\n }\n\n if (!fragment || fragment === this.fragment) return;\n else return fragment.getContext();\n }\n\n hasListener(name, bubble) {\n // if the owner is a component, start there because the nearest element\n // may exist outside of the immediate context (yield)\n let el = this.fragment.owner.component\n ? this.fragment.owner\n : this.element || this.fragment.owner;\n let base;\n\n do {\n base = el.component || el;\n if (base.template.t === ELEMENT) {\n if (findEvent(base, name)) return true;\n }\n el = el.up && el.up.owner;\n if (el && el.component) el = el.component;\n } while (el && bubble);\n }\n\n link(source, dest) {\n const there = findModel(this, source).model;\n const here = findModel(this, dest).model;\n const promise = runloop.start();\n here.link(there, source);\n runloop.end();\n return promise;\n }\n\n listen(event, handler) {\n const el = this.element;\n el.on(event, handler);\n return {\n cancel() {\n el.off(event, handler);\n }\n };\n }\n\n observe(keypath, callback, options = {}) {\n if (isObject(keypath)) options = callback || {};\n options.fragment = this.fragment;\n return this.ractive.observe(keypath, callback, options);\n }\n\n observeOnce(keypath, callback, options = {}) {\n if (isObject(keypath)) options = callback || {};\n options.fragment = this.fragment;\n return this.ractive.observeOnce(keypath, callback, options);\n }\n\n pop(keypath) {\n return modelPop(findModel(this, keypath).model, []);\n }\n\n push(keypath, ...values) {\n return modelPush(findModel(this, keypath).model, values);\n }\n\n raise(name, event, ...args) {\n let el = this.element;\n let ev;\n\n while (el) {\n if (el.component) el = el.component;\n ev = findEvent(el, name);\n if (ev) {\n return ev.fire(\n ev.element.getContext(\n event || {},\n event && !('original' in event) ? { original: {} } : {}\n ),\n args\n );\n }\n\n el = el.up && el.up.owner;\n }\n }\n\n readLink(keypath, options) {\n return this.ractive.readLink(this.resolve(keypath), options);\n }\n\n resolve(path, ractive) {\n const { model, instance } = findModel(this, path);\n return model ? model.getKeypath(ractive || instance) : path;\n }\n\n reverse(keypath) {\n return modelReverse(findModel(this, keypath).model, []);\n }\n\n set(keypath, value, options) {\n return sharedSet(build(this, keypath, value), options);\n }\n\n shift(keypath) {\n return modelShift(findModel(this, keypath).model, []);\n }\n\n splice(keypath, index, drop, ...add) {\n add.unshift(index, drop);\n return modelSplice(findModel(this, keypath).model, add);\n }\n\n sort(keypath) {\n return modelSort(findModel(this, keypath).model, []);\n }\n\n subtract(keypath, d, options) {\n const num = isNumber(d) ? d : 1;\n const opts = isObjectType(d) ? d : options;\n return sharedSet(\n build(this, keypath, num).map(pair => {\n const [model, val] = pair;\n const value = model.get();\n if (!isNumeric(val) || !isNumeric(value)) throw new Error('Cannot add non-numeric value');\n return [model, value - val];\n }),\n opts\n );\n }\n\n toggle(keypath, options) {\n const { model } = findModel(this, keypath);\n return sharedSet([[model, !model.get()]], options);\n }\n\n unlink(dest) {\n const here = findModel(this, dest).model;\n const promise = runloop.start();\n if (here.owner && here.owner._link) here.owner.unlink();\n runloop.end();\n return promise;\n }\n\n unlisten(event, handler) {\n this.element.off(event, handler);\n }\n\n unshift(keypath, ...add) {\n return modelUnshift(findModel(this, keypath).model, add);\n }\n\n update(keypath, options) {\n return protoUpdate(this.ractive, findModel(this, keypath).model, options);\n }\n\n updateModel(keypath, cascade) {\n const { model } = findModel(this, keypath);\n const promise = runloop.start();\n model.updateFromBindings(cascade);\n runloop.end();\n return promise;\n }\n\n // two-way binding related helpers\n isBound() {\n const { model } = this.getBindingModel(this);\n return !!model;\n }\n\n getBindingPath(ractive) {\n const { model, instance } = this.getBindingModel(this);\n if (model) return model.getKeypath(ractive || instance);\n }\n\n getBinding() {\n const { model } = this.getBindingModel(this);\n if (model) return model.get(true);\n }\n\n getBindingModel(ctx) {\n const el = ctx.element;\n return { model: el.binding && el.binding.model, instance: el.up.ractive };\n }\n\n setBinding(value) {\n const { model } = this.getBindingModel(this);\n return sharedSet([[model, value]]);\n }\n}\n\nContext.forRactive = getRactiveContext;\n// circular deps are fun\nextern.Context = Context;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build(ctx, keypath, value) {\n const sets = [];\n\n // set multiple keypaths in one go\n if (isObject(keypath)) {\n for (const k in keypath) {\n if (hasOwn(keypath, k)) {\n sets.push([findModel(ctx, k).model, keypath[k]]);\n }\n }\n } else {\n // set a single keypath\n sets.push([findModel(ctx, keypath).model, value]);\n }\n\n return sets;\n}\n\nfunction findModel(ctx, path) {\n const frag = ctx.fragment;\n\n if (!isString(path)) {\n return { model: frag.findContext(), instance: path };\n }\n\n return { model: resolveReference(frag, path), instance: frag.ractive };\n}\n\nfunction findEvent(el, name) {\n return el.events && el.events.find && el.events.find(e => ~e.template.n.indexOf(name));\n}\n","import fireEvent from 'src/events/fireEvent';\nimport Context from 'shared/Context';\nimport { assign, create } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$fire(eventName, ...args) {\n let ctx;\n\n // watch for reproxy\n if (args[0] instanceof Context) {\n const proto = args.shift();\n ctx = create(proto);\n assign(ctx, proto);\n } else if (isObjectType(args[0]) && (args[0] === null || args[0].constructor === Object)) {\n ctx = Context.forRactive(this, args.shift());\n } else {\n ctx = Context.forRactive(this);\n }\n\n return fireEvent(this, eventName, ctx, args);\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport { FakeFragment } from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$get(keypath, opts) {\n if (!isString(keypath)) return this.viewmodel.get(true, keypath);\n\n const keys = splitKeypath(keypath);\n const key = keys[0];\n\n let model;\n\n if (!this.viewmodel.has(key)) {\n // if this is an inline component, we may need to create\n // an implicit mapping\n if (this.component && !this.isolated) {\n model = resolveReference(this.fragment || new FakeFragment(this), key);\n }\n }\n\n model = this.viewmodel.joinAll(keys);\n return model.get(true, opts);\n}\n","import { doc } from 'config/environment';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nconst query = doc && doc.querySelector;\n\nexport default function getContext(node) {\n if (isString(node) && query) {\n node = query.call(document, node);\n }\n\n let instances;\n if (node) {\n if (node._ractive) {\n return node._ractive.proxy.getContext();\n } else if ((instances = node.__ractive_instances__)) {\n if (instances.length === 1) return getRactiveContext(instances[0]);\n } else return getContext(node.parentNode);\n }\n}\n","import staticContext from '../static/getContext';\nimport getRactiveContext from 'src/shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function getContext(node, options) {\n if (!node) return getRactiveContext(this);\n\n if (isString(node)) {\n node = this.find(node, options);\n }\n\n return staticContext(node);\n}\n","export const html = 'http://www.w3.org/1999/xhtml';\nexport const mathml = 'http://www.w3.org/1998/Math/MathML';\nexport const svg = 'http://www.w3.org/2000/svg';\nexport const xlink = 'http://www.w3.org/1999/xlink';\nexport const xml = 'http://www.w3.org/XML/1998/namespace';\nexport const xmlns = 'http://www.w3.org/2000/xmlns';\n\nexport default { html, mathml, svg, xlink, xml, xmlns };\n","import { isClient, svg, vendors, win, doc } from 'config/environment';\nimport { html } from 'config/namespaces';\nimport { isString, isNumber } from 'utils/is';\n\nlet createElement, matches, div, methodNames, unprefixed, prefixed, i, j, makeFunction;\n\n// Test for SVG support\nif (!svg) {\n /* istanbul ignore next */\n createElement = (type, ns, extend) => {\n if (ns && ns !== html) {\n throw \"This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://ractive.js.org/support/#svgs for more information\";\n }\n\n return extend ? doc.createElement(type, extend) : doc.createElement(type);\n };\n} else {\n createElement = (type, ns, extend) => {\n if (!ns || ns === html) {\n return extend ? doc.createElement(type, extend) : doc.createElement(type);\n }\n\n return extend ? doc.createElementNS(ns, type, extend) : doc.createElementNS(ns, type);\n };\n}\n\nexport function createDocumentFragment() {\n return doc.createDocumentFragment();\n}\n\nfunction getElement(input) {\n let output;\n\n if (!input || typeof input === 'boolean') {\n return;\n }\n\n /* istanbul ignore next */\n if (!win || !doc || !input) {\n return null;\n }\n\n // We already have a DOM node - no work to do. (Duck typing alert!)\n if (input.nodeType) {\n return input;\n }\n\n // Get node from string\n if (isString(input)) {\n // try ID first\n output = doc.getElementById(input);\n\n // then as selector, if possible\n if (!output && doc.querySelector) {\n try {\n output = doc.querySelector(input);\n } catch (e) {\n /* this space intentionally left blank */\n }\n }\n\n // did it work?\n if (output && output.nodeType) {\n return output;\n }\n }\n\n // If we've been given a collection (jQuery, Zepto etc), extract the first item\n if (input[0] && input[0].nodeType) {\n return input[0];\n }\n\n return null;\n}\n\nif (!isClient) {\n matches = null;\n} else {\n div = createElement('div');\n methodNames = ['matches', 'matchesSelector'];\n\n makeFunction = function(methodName) {\n return function(node, selector) {\n return node[methodName](selector);\n };\n };\n\n i = methodNames.length;\n\n while (i-- && !matches) {\n unprefixed = methodNames[i];\n\n if (div[unprefixed]) {\n matches = makeFunction(unprefixed);\n } else {\n j = vendors.length;\n while (j--) {\n prefixed = vendors[i] + unprefixed.substr(0, 1).toUpperCase() + unprefixed.substring(1);\n\n if (div[prefixed]) {\n matches = makeFunction(prefixed);\n break;\n }\n }\n }\n }\n\n // IE8... and apparently phantom some?\n /* istanbul ignore next */\n if (!matches) {\n matches = function(node, selector) {\n let parentNode, i;\n\n parentNode = node.parentNode;\n\n if (!parentNode) {\n // empty dummy <div>\n div.innerHTML = '';\n\n parentNode = div;\n node = node.cloneNode();\n\n div.appendChild(node);\n }\n\n const nodes = parentNode.querySelectorAll(selector);\n\n i = nodes.length;\n while (i--) {\n if (nodes[i] === node) {\n return true;\n }\n }\n\n return false;\n };\n }\n}\n\nfunction detachNode(node) {\n // stupid ie\n // eslint-disable-next-line valid-typeof\n if (node && typeof node.parentNode !== 'unknown' && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n\n return node;\n}\n\nfunction safeToStringValue(value) {\n return value == null || (isNumber(value) && isNaN(value)) || !value.toString ? '' : '' + value;\n}\n\nfunction safeAttributeString(string) {\n return safeToStringValue(string)\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nexport { createElement, detachNode, getElement, matches, safeToStringValue, safeAttributeString };\n","import hooks from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\n\nexport default function Ractive$insert(target, anchor) {\n if (!this.fragment.rendered) {\n // TODO create, and link to, documentation explaining this\n throw new Error(\n 'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.'\n );\n }\n\n target = getElement(target);\n anchor = getElement(anchor) || null;\n\n if (!target) {\n throw new Error('You must specify a valid target to insert into');\n }\n\n target.insertBefore(this.detach(), anchor);\n this.el = target;\n\n (target.__ractive_instances__ || (target.__ractive_instances__ = [])).push(this);\n this.isDetached = false;\n\n fireInsertHook(this);\n}\n\nfunction fireInsertHook(ractive) {\n hooks.insert.fire(ractive);\n\n ractive.findAllComponents('*').forEach(child => {\n fireInsertHook(child.instance);\n });\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from 'src/global/runloop';\n\nexport default function link(there, here, options) {\n let model;\n const target = (options && (options.ractive || options.instance)) || this;\n\n // may need to allow a mapping to resolve implicitly\n const sourcePath = splitKeypath(there);\n if (!target.viewmodel.has(sourcePath[0]) && target.component) {\n model = resolveReference(target.component.up, sourcePath[0]);\n model = model.joinAll(sourcePath.slice(1));\n }\n\n const src = model || target.viewmodel.joinAll(sourcePath);\n const dest = this.viewmodel.joinAll(splitKeypath(here), { lastLink: false });\n\n if (isUpstream(src, dest) || isUpstream(dest, src)) {\n throw new Error('A keypath cannot be linked to itself.');\n }\n\n const promise = runloop.start();\n\n dest.link(src, (options && options.keypath) || there);\n\n runloop.end();\n\n return promise;\n}\n\nfunction isUpstream(check, start) {\n let model = start;\n while (model) {\n if (model === check || model.owner === check) return true;\n model = model.target || model.parent;\n }\n}\n","import { isEqual, isFunction } from 'utils/is';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'shared/rebind';\nimport { create } from 'utils/object';\n\nexport default class Observer {\n constructor(ractive, model, callback, options) {\n this.context = options.context || ractive;\n this.callback = callback;\n this.ractive = ractive;\n this.keypath = options.keypath;\n this.options = options;\n\n if (model) this.resolved(model);\n\n if (isFunction(options.old)) {\n this.oldContext = create(ractive);\n this.oldFn = options.old;\n }\n\n if (options.init !== false) {\n this.dirty = true;\n this.dispatch();\n } else {\n updateOld(this);\n }\n\n this.dirty = false;\n }\n\n cancel() {\n this.cancelled = true;\n if (this.model) {\n this.model.unregister(this);\n } else {\n this.resolver.unbind();\n }\n removeFromArray(this.ractive._observers, this);\n }\n\n dispatch() {\n if (!this.cancelled) {\n this.callback.call(this.context, this.newValue, this.oldValue, this.keypath);\n updateOld(this, true);\n this.dirty = false;\n }\n }\n\n handleChange() {\n if (!this.dirty) {\n const newValue = this.model.get();\n if (isEqual(newValue, this.oldValue)) return;\n\n this.newValue = newValue;\n\n if (this.options.strict && this.newValue === this.oldValue) return;\n\n runloop.addObserver(this, this.options.defer);\n this.dirty = true;\n\n if (this.options.once) runloop.scheduleTask(() => this.cancel());\n } else {\n // make sure the newValue stays updated in case this observer gets touched multiple times in one loop\n this.newValue = this.model.get();\n }\n }\n\n rebind(next, previous) {\n next = rebindMatch(this.keypath, next, previous);\n if (next === this.model) return false;\n\n if (this.model) this.model.unregister(this);\n if (next) next.addShuffleTask(() => this.resolved(next));\n }\n\n resolved(model) {\n this.model = model;\n\n this.oldValue = undefined;\n this.newValue = model.get();\n\n model.register(this);\n }\n}\n\nfunction updateOld(observer, fresh) {\n const next = fresh\n ? observer.model\n ? observer.model.get()\n : observer.newValue\n : observer.newValue;\n observer.oldValue = observer.oldFn\n ? observer.oldFn.call(observer.oldContext, undefined, next, observer.keypath)\n : next;\n}\n","import { escapeKey } from 'shared/keypaths';\nimport { removeFromArray } from 'utils/array';\nimport { isArray, isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { create, keys } from 'utils/object';\n\nconst star = /\\*+/g;\n\nexport default class PatternObserver {\n constructor(ractive, baseModel, keys, callback, options) {\n this.context = options.context || ractive;\n this.ractive = ractive;\n this.baseModel = baseModel;\n this.keys = keys;\n this.callback = callback;\n\n const pattern = keys.join('\\\\.').replace(star, '(.+)');\n const baseKeypath = (this.baseKeypath = baseModel.getKeypath(ractive));\n this.pattern = new RegExp(`^${baseKeypath ? baseKeypath + '\\\\.' : ''}${pattern}$`);\n this.recursive = keys.length === 1 && keys[0] === '**';\n if (this.recursive) this.keys = ['*'];\n if (options.old) {\n this.oldContext = create(ractive);\n this.oldFn = options.old;\n }\n\n this.oldValues = {};\n this.newValues = {};\n\n this.defer = options.defer;\n this.once = options.once;\n this.strict = options.strict;\n\n this.dirty = false;\n this.changed = [];\n this.partial = false;\n this.links = options.links;\n\n const models = baseModel.findMatches(this.keys);\n\n models.forEach(model => {\n this.newValues[model.getKeypath(this.ractive)] = model.get();\n });\n\n if (options.init !== false) {\n this.dispatch();\n } else {\n updateOld(this, this.newValues);\n }\n\n baseModel.registerPatternObserver(this);\n }\n\n cancel() {\n this.baseModel.unregisterPatternObserver(this);\n removeFromArray(this.ractive._observers, this);\n }\n\n dispatch() {\n const newValues = this.newValues;\n this.newValues = {};\n keys(newValues).forEach(keypath => {\n const newValue = newValues[keypath];\n const oldValue = this.oldValues[keypath];\n\n if (this.strict && newValue === oldValue) return;\n if (isEqual(newValue, oldValue)) return;\n\n let args = [newValue, oldValue, keypath];\n if (keypath) {\n const wildcards = this.pattern.exec(keypath);\n if (wildcards) {\n args = args.concat(wildcards.slice(1));\n }\n }\n\n this.callback.apply(this.context, args);\n });\n\n updateOld(this, newValues, this.partial);\n\n this.dirty = false;\n }\n\n notify(key) {\n this.changed.push(key);\n }\n\n shuffle(newIndices) {\n if (!isArray(this.baseModel.value)) return;\n\n const max = this.baseModel.value.length;\n\n for (let i = 0; i < newIndices.length; i++) {\n if (newIndices[i] === -1 || newIndices[i] === i) continue;\n this.changed.push([i]);\n }\n\n for (let i = newIndices.touchedFrom; i < max; i++) {\n this.changed.push([i]);\n }\n }\n\n handleChange() {\n if (!this.dirty || this.changed.length) {\n if (!this.dirty) this.newValues = {};\n\n if (!this.changed.length) {\n this.baseModel.findMatches(this.keys).forEach(model => {\n const keypath = model.getKeypath(this.ractive);\n this.newValues[keypath] = model.get();\n });\n this.partial = false;\n } else {\n let count = 0;\n\n if (this.recursive) {\n this.changed.forEach(keys => {\n const model = this.baseModel.joinAll(keys);\n if (model.isLink && !this.links) return;\n count++;\n this.newValues[model.getKeypath(this.ractive)] = model.get();\n });\n } else {\n const ok = this.baseModel.isRoot\n ? this.changed.map(keys => keys.map(escapeKey).join('.'))\n : this.changed.map(keys => this.baseKeypath + '.' + keys.map(escapeKey).join('.'));\n\n this.baseModel.findMatches(this.keys).forEach(model => {\n const keypath = model.getKeypath(this.ractive);\n const check = k => {\n return (\n (k.indexOf(keypath) === 0 &&\n (k.length === keypath.length || k[keypath.length] === '.')) ||\n (keypath.indexOf(k) === 0 &&\n (k.length === keypath.length || keypath[k.length] === '.'))\n );\n };\n\n // is this model on a changed keypath?\n if (ok.filter(check).length) {\n count++;\n this.newValues[keypath] = model.get();\n }\n });\n }\n\n // no valid change triggered, so bail to avoid breakage\n if (!count) return;\n\n this.partial = true;\n }\n\n runloop.addObserver(this, this.defer);\n this.dirty = true;\n this.changed.length = 0;\n\n if (this.once) this.cancel();\n }\n }\n}\n\nfunction updateOld(observer, vals, partial) {\n const olds = observer.oldValues;\n\n if (observer.oldFn) {\n if (!partial) observer.oldValues = {};\n\n keys(vals).forEach(k => {\n const args = [olds[k], vals[k], k];\n const parts = observer.pattern.exec(k);\n if (parts) {\n args.push.apply(args, parts.slice(1));\n }\n observer.oldValues[k] = observer.oldFn.apply(observer.oldContext, args);\n });\n } else {\n if (partial) {\n keys(vals).forEach(k => (olds[k] = vals[k]));\n } else {\n observer.oldValues = vals;\n }\n }\n}\n","import { removeFromArray } from 'utils/array';\nimport { isArray } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nfunction negativeOne() {\n return -1;\n}\n\nexport default class ArrayObserver {\n constructor(ractive, model, callback, options) {\n this.ractive = ractive;\n this.model = model;\n this.keypath = model.getKeypath();\n this.callback = callback;\n this.options = options;\n\n this.pending = null;\n\n model.register(this);\n\n if (options.init !== false) {\n this.sliced = [];\n this.shuffle([]);\n this.dispatch();\n } else {\n this.sliced = this.slice();\n }\n }\n\n cancel() {\n this.model.unregister(this);\n removeFromArray(this.ractive._observers, this);\n }\n\n dispatch() {\n this.callback(this.pending);\n this.pending = null;\n if (this.options.once) this.cancel();\n }\n\n handleChange(path) {\n if (this.pending) {\n // post-shuffle\n runloop.addObserver(this, this.options.defer);\n } else if (!path) {\n // entire array changed\n this.shuffle(this.sliced.map(negativeOne));\n this.handleChange();\n }\n }\n\n shuffle(newIndices) {\n const newValue = this.slice();\n\n const inserted = [];\n const deleted = [];\n let start;\n\n const hadIndex = {};\n\n newIndices.forEach((newIndex, oldIndex) => {\n hadIndex[newIndex] = true;\n\n if (newIndex !== oldIndex && start === undefined) {\n start = oldIndex;\n }\n\n if (newIndex === -1) {\n deleted.push(this.sliced[oldIndex]);\n }\n });\n\n if (start === undefined) start = newIndices.length;\n\n const len = newValue.length;\n for (let i = 0; i < len; i += 1) {\n if (!hadIndex[i]) inserted.push(newValue[i]);\n }\n\n this.pending = { inserted, deleted, start };\n this.sliced = newValue;\n }\n\n slice() {\n const value = this.model.get();\n return isArray(value) ? value.slice() : [];\n }\n}\n","import { isObject, isFunction } from 'utils/is';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport Observer from './observe/Observer';\nimport PatternObserver from './observe/Pattern';\nimport ArrayObserver from './observe/Array';\nimport { keys } from 'utils/object';\n\nexport default function observe(keypath, callback, options) {\n const observers = [];\n let map;\n let opts;\n\n if (isObject(keypath)) {\n map = keypath;\n opts = callback || {};\n } else {\n if (isFunction(keypath)) {\n map = { '': keypath };\n opts = callback || {};\n } else {\n map = {};\n map[keypath] = callback;\n opts = options || {};\n }\n }\n\n let silent = false;\n keys(map).forEach(keypath => {\n const callback = map[keypath];\n const caller = function(...args) {\n if (silent) return;\n return callback.apply(this, args);\n };\n\n let keypaths = keypath.split(' ');\n if (keypaths.length > 1) keypaths = keypaths.filter(k => k);\n\n keypaths.forEach(keypath => {\n opts.keypath = keypath;\n const observer = createObserver(this, keypath, caller, opts);\n if (observer) observers.push(observer);\n });\n });\n\n // add observers to the Ractive instance, so they can be\n // cancelled on ractive.teardown()\n this._observers.push.apply(this._observers, observers);\n\n return {\n cancel: () => observers.forEach(o => o.cancel()),\n isSilenced: () => silent,\n silence: () => (silent = true),\n resume: () => (silent = false)\n };\n}\n\nfunction createObserver(ractive, keypath, callback, options) {\n const keys = splitKeypath(keypath);\n let wildcardIndex = keys.indexOf('*');\n if (!~wildcardIndex) wildcardIndex = keys.indexOf('**');\n\n options.fragment = options.fragment || ractive.fragment;\n\n let model;\n if (!options.fragment) {\n model = ractive.viewmodel.joinKey(keys[0]);\n } else {\n // .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n if (~keys[0].indexOf('.*')) {\n model = options.fragment.findContext();\n wildcardIndex = 0;\n keys[0] = keys[0].slice(1);\n } else {\n model =\n wildcardIndex === 0\n ? options.fragment.findContext()\n : resolveReference(options.fragment, keys[0]);\n }\n }\n\n // the model may not exist key\n if (!model) model = ractive.viewmodel.joinKey(keys[0]);\n\n if (!~wildcardIndex) {\n model = model.joinAll(keys.slice(1));\n if (options.array) {\n return new ArrayObserver(ractive, model, callback, options);\n } else {\n return new Observer(ractive, model, callback, options);\n }\n } else {\n const double = keys.indexOf('**');\n if (~double) {\n if (double + 1 !== keys.length || ~keys.indexOf('*')) {\n warnOnceIfDebug(\n `Recursive observers may only specify a single '**' at the end of the path.`\n );\n return;\n }\n }\n\n model = model.joinAll(keys.slice(1, wildcardIndex));\n\n return new PatternObserver(ractive, model, keys.slice(wildcardIndex), callback, options);\n }\n}\n","import { isObject, isFunction } from 'utils/is';\nimport { assign } from 'utils/object';\n\nconst onceOptions = { init: false, once: true };\n\nexport default function observeOnce(keypath, callback, options) {\n if (isObject(keypath) || isFunction(keypath)) {\n options = assign(callback || {}, onceOptions);\n return this.observe(keypath, options);\n }\n\n options = assign(options || {}, onceOptions);\n return this.observe(keypath, callback, options);\n}\n","export default str => str.trim();\n","export default str => str !== '';\n","import { removeFromArray } from 'utils/array';\nimport trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\n\nexport default function Ractive$off(eventName, callback) {\n // if no event is specified, remove _all_ event listeners\n if (!eventName) {\n this._subs = {};\n } else {\n // Handle multiple space-separated event names\n const eventNames = eventName\n .split(' ')\n .map(trim)\n .filter(notEmptyString);\n\n eventNames.forEach(event => {\n const subs = this._subs[event];\n // if given a specific callback to remove, remove only it\n if (subs && callback) {\n const entry = subs.find(s => s.callback === callback);\n if (entry) {\n removeFromArray(subs, entry);\n entry.off = true;\n\n if (event.indexOf('.')) this._nsSubs--;\n }\n } else if (subs) {\n // otherwise, remove all listeners for this event\n if (event.indexOf('.')) this._nsSubs -= subs.length;\n subs.length = 0;\n }\n });\n }\n\n return this;\n}\n","import trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\nimport { hasOwn } from 'utils/object';\nimport { isObjectType, isString } from 'utils/is';\n\nexport default function Ractive$on(eventName, callback) {\n // eventName may already be a map\n const map = isObjectType(eventName) ? eventName : {};\n // or it may be a string along with a callback\n if (isString(eventName)) map[eventName] = callback;\n\n let silent = false;\n const events = [];\n\n for (const k in map) {\n const callback = map[k];\n const caller = function(...args) {\n if (!silent) return callback.apply(this, args);\n };\n const entry = {\n callback,\n handler: caller\n };\n\n if (hasOwn(map, k)) {\n const names = k\n .split(' ')\n .map(trim)\n .filter(notEmptyString);\n names.forEach(n => {\n (this._subs[n] || (this._subs[n] = [])).push(entry);\n if (n.indexOf('.')) this._nsSubs++;\n events.push([n, entry]);\n });\n }\n }\n\n return {\n cancel: () => events.forEach(e => this.off(e[0], e[1].callback)),\n isSilenced: () => silent,\n silence: () => (silent = true),\n resume: () => (silent = false)\n };\n}\n","export default function Ractive$once(eventName, handler) {\n const listener = this.on(eventName, function() {\n handler.apply(this, arguments);\n listener.cancel();\n });\n\n // so we can still do listener.cancel() manually\n return listener;\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('pop').path;\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('push').path;\n","import { splitKeypath } from 'shared/keypaths';\n\nexport default function readLink(keypath, options = {}) {\n const path = splitKeypath(keypath);\n\n if (this.viewmodel.has(path[0])) {\n let model = this.viewmodel.joinAll(path);\n\n if (!model.isLink) return;\n\n while ((model = model.target) && options.canonical !== false) {\n if (!model.isLink) break;\n }\n\n if (model) return { ractive: model.root.ractive, keypath: model.getKeypath() };\n }\n}\n","import { doc } from '../config/environment';\n\nconst PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nconst styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nlet isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nlet styleElement = null;\nlet useCssText = null;\n\nexport function addCSS(styleDefinition) {\n styleDefinitions.push(styleDefinition);\n isDirty = true;\n}\n\nexport function applyCSS(force) {\n const styleElement = style();\n\n // Apply only seems to make sense when we're in the DOM. Server-side renders\n // can call toCSS to get the updated CSS.\n if (!styleElement || (!force && !isDirty)) return;\n\n if (useCssText) {\n styleElement.styleSheet.cssText = getCSS(null);\n } else {\n styleElement.innerHTML = getCSS(null);\n }\n\n isDirty = false;\n}\n\nexport function getCSS(cssIds) {\n const filteredStyleDefinitions = cssIds\n ? styleDefinitions.filter(style => ~cssIds.indexOf(style.id))\n : styleDefinitions;\n\n filteredStyleDefinitions.forEach(d => (d.applied = true));\n\n return filteredStyleDefinitions.reduce(\n (styles, style) => `${styles ? `${styles}\\n\\n/* {${style.id}} */\\n${style.styles}` : ''}`,\n PREFIX\n );\n}\n\nfunction style() {\n // If we're on the browser, additional setup needed.\n if (doc && !styleElement) {\n styleElement = doc.createElement('style');\n styleElement.type = 'text/css';\n styleElement.setAttribute('data-ractive-css', '');\n\n doc.getElementsByTagName('head')[0].appendChild(styleElement);\n\n useCssText = !!styleElement.styleSheet;\n }\n\n return styleElement;\n}\n","import { ensureArray, combine } from 'utils/array';\n\nexport default {\n extend: (Parent, proto, options) => {\n proto.adapt = combine(proto.adapt, ensureArray(options.adapt));\n },\n\n init() {}\n};\n","const remove = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nconst escape = /url\\(\\s*(['\"])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\"])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nconst value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nexport default function(css, callback, additionalReplaceRules = []) {\n const values = [];\n const reconstruct = css => css.replace(value, (match, n) => values[n]);\n css = css.replace(escape, match => `\\0${values.push(match) - 1}`).replace(remove, '');\n\n additionalReplaceRules.forEach(pattern => {\n css = css.replace(pattern, match => `\\0${values.push(match) - 1}`);\n });\n\n return callback(css, reconstruct);\n}\n","import cleanCss from 'utils/cleanCss';\n\nconst selectorsPattern = /(?:^|\\}|\\{|\\x01)\\s*([^\\{\\}\\0\\x01]+)\\s*(?=\\{)/g;\nconst importPattern = /@import\\s*\\([^)]*\\)\\s*;?/gi;\nconst importEndPattern = /\\x01/g;\nconst keyframesDeclarationPattern = /@keyframes\\s+[^\\{\\}]+\\s*\\{(?:[^{}]+|\\{[^{}]+})*}/gi;\nconst selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nconst excludePattern = /^(?:@|\\d+%)/;\nconst dataRvcGuidPattern = /\\[data-ractive-css~=\"\\{[a-z0-9-]+\\}\"]/g;\n\nfunction trim(str) {\n return str.trim();\n}\n\nfunction extractString(unit) {\n return unit.str;\n}\n\nfunction transformSelector(selector, parent) {\n const selectorUnits = [];\n let match;\n\n while ((match = selectorUnitPattern.exec(selector))) {\n selectorUnits.push({\n str: match[0],\n base: match[1],\n modifiers: match[2]\n });\n }\n\n // For each simple selector within the selector, we need to create a version\n // that a) combines with the id, and b) is inside the id\n const base = selectorUnits.map(extractString);\n\n const transformed = [];\n let i = selectorUnits.length;\n\n while (i--) {\n const appended = base.slice();\n\n // Pseudo-selectors should go after the attribute selector\n const unit = selectorUnits[i];\n appended[i] = unit.base + parent + unit.modifiers || '';\n\n const prepended = base.slice();\n prepended[i] = parent + ' ' + prepended[i];\n\n transformed.push(appended.join(' '), prepended.join(' '));\n }\n\n return transformed.join(', ');\n}\n\nexport default function transformCss(css, id) {\n const dataAttr = `[data-ractive-css~=\"{${id}}\"]`;\n\n let transformed;\n\n if (dataRvcGuidPattern.test(css)) {\n transformed = css.replace(dataRvcGuidPattern, dataAttr);\n } else {\n transformed = cleanCss(\n css,\n (css, reconstruct) => {\n css = css\n .replace(importPattern, '$&\\x01')\n .replace(selectorsPattern, (match, $1) => {\n // don't transform at-rules and keyframe declarations\n if (excludePattern.test($1)) return match;\n\n const selectors = $1.split(',').map(trim);\n const transformed =\n selectors.map(selector => transformSelector(selector, dataAttr)).join(', ') + ' ';\n\n return match.replace($1, transformed);\n })\n .replace(importEndPattern, '');\n\n return reconstruct(css);\n },\n [keyframesDeclarationPattern]\n );\n }\n\n return transformed;\n}\n","function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n}\n\nexport function uuid() {\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n","import { applyCSS } from '../../global/css';\nimport transformCSS from '../config/custom/css/transform';\nimport { evalCSS } from '../config/custom/css/css';\nimport { build, set } from '../../shared/set';\nimport runloop from '../../global/runloop';\nimport { isObjectType, isFunction } from 'utils/is';\n\nexport default function setCSSData(keypath, value, options) {\n const opts = isObjectType(keypath) ? value : options;\n const model = this._cssModel;\n\n model.locked = true;\n const promise = set(build({ viewmodel: model }, keypath, value, true), opts);\n model.locked = false;\n\n const cascade = runloop.start();\n this.extensions.forEach(e => {\n const model = e._cssModel;\n model.mark();\n model.downstreamChanged('', 1);\n });\n runloop.end();\n\n applyChanges(this, !opts || opts.apply !== false);\n\n return promise.then(() => cascade);\n}\n\nexport function applyChanges(component, apply) {\n const local = recomputeCSS(component);\n const child = component.extensions\n .map(e => applyChanges(e, false))\n .reduce((a, c) => c || a, false);\n\n if (apply && (local || child)) {\n const def = component._cssDef;\n if (!def || (def && def.applied)) applyCSS(true);\n }\n\n return local || child;\n}\n\nexport function recomputeCSS(component) {\n const css = component.css;\n\n if (!isFunction(css)) return;\n\n const def = component._cssDef;\n const result = evalCSS(component, css);\n const styles = def.transform ? transformCSS(result, def.id) : result;\n\n if (def.styles === styles) return;\n\n def.styles = styles;\n\n return true;\n}\n","import { SharedModel } from './SharedModel';\nimport { applyChanges } from '../../Ractive/static/styleSet';\n\nexport default class CSSModel extends SharedModel {\n constructor(component) {\n super(component.cssData, '@style');\n this.component = component;\n }\n\n downstreamChanged(path, depth) {\n if (this.locked) return;\n\n const component = this.component;\n\n component.extensions.forEach(e => {\n const model = e._cssModel;\n model.mark();\n model.downstreamChanged(path, depth || 1);\n });\n\n if (!depth) {\n applyChanges(component, true);\n }\n }\n}\n","import { addCSS, applyCSS } from 'src/global/css';\nimport transformCss from './transform';\nimport { uuid } from 'utils/id';\nimport { warnIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { splitKeypath } from 'shared/keypaths';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperty } from 'utils/object';\nimport { isString, isFunction, isObjectType } from 'utils/is';\n\nconst hasCurly = /\\{/;\nexport default {\n name: 'css',\n\n // Called when creating a new component definition\n extend: (Parent, proto, options, Child) => {\n Child._cssIds = gatherIds(Parent);\n\n defineProperty(Child, 'cssData', {\n configurable: true,\n value: assign(create(Parent.cssData), options.cssData || {})\n });\n\n defineProperty(Child, '_cssModel', {\n configurable: true,\n value: new CSSModel(Child)\n });\n\n if (options.css) initCSS(options, Child, proto);\n },\n\n // Called when creating a new component instance\n init: (Parent, target, options) => {\n if (!options.css) return;\n\n warnIfDebug(`\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\n\nconst Component = Ractive.extend({\n\t...\n\tcss: '/* your css */',\n\t...\n});\n\nconst componentInstance = new Component({ ... })\n\t\t`);\n }\n};\n\nfunction gatherIds(start) {\n let cmp = start;\n const ids = [];\n\n while (cmp) {\n if (cmp.prototype.cssId) ids.push(cmp.prototype.cssId);\n cmp = cmp.Parent;\n }\n\n return ids;\n}\n\nexport function evalCSS(component, css) {\n if (isString(css)) return css;\n\n const cssData = component.cssData;\n const model = component._cssModel;\n const data = function data(path) {\n return model.joinAll(splitKeypath(path)).get();\n };\n data.__proto__ = cssData;\n\n const result = css.call(component, data);\n return isString(result) ? result : '';\n}\n\nexport function initCSS(options, target, proto) {\n let css =\n options.css === true\n ? ''\n : isString(options.css) && !hasCurly.test(options.css)\n ? getElement(options.css) || options.css\n : options.css;\n let cssProp = css;\n\n const id = options.cssId || uuid();\n\n if (isObjectType(css)) {\n css = 'textContent' in css ? css.textContent : css.innerHTML;\n cssProp = css;\n } else if (isFunction(css)) {\n cssProp = css;\n css = evalCSS(target, css);\n }\n\n const def = { transform: !options.noCssTransform };\n\n defineProperty(target, '_cssDef', { configurable: true, value: def });\n\n defineProperty(target, 'css', {\n get() {\n return cssProp;\n },\n set(next) {\n cssProp = next;\n const css = evalCSS(target, cssProp);\n const styles = def.styles;\n def.styles = def.transform ? transformCss(css, id) : css;\n if (def.applied && styles !== def.styles) applyCSS(true);\n }\n });\n\n def.styles = def.transform ? transformCss(css, id) : css;\n def.id = proto.cssId = id;\n target._cssIds.push(id);\n\n addCSS(target._cssDef);\n}\n","import { fatal, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { isArray, isObject, isFunction, isObjectType } from 'utils/is';\nimport bind from 'utils/bind';\n\nfunction validate(data) {\n // Warn if userOptions.data is a non-POJO\n if (data && data.constructor !== Object) {\n if (isFunction(data)) {\n // TODO do we need to support this in the new Ractive() case?\n } else if (!isObjectType(data)) {\n fatal(`data option must be an object or a function, \\`${data}\\` is not valid`);\n } else {\n warnIfDebug(\n 'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged'\n );\n }\n }\n}\n\nexport default {\n name: 'data',\n\n extend: (Parent, proto, options) => {\n let key;\n let value;\n\n // check for non-primitives, which could cause mutation-related bugs\n if (options.data && isObject(options.data)) {\n for (key in options.data) {\n value = options.data[key];\n\n if (value && isObjectType(value)) {\n if (isObject(value) || isArray(value)) {\n warnIfDebug(`Passing a \\`data\\` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n // this...\n data: function () {\n return {\n myObject: {}\n };\n })\n\n // instead of this:\n data: {\n myObject: {}\n }`);\n }\n }\n }\n }\n\n proto.data = combine(proto.data, options.data);\n },\n\n init: (Parent, ractive, options) => {\n let result = combine(Parent.prototype.data, options.data);\n\n if (isFunction(result)) result = result.call(ractive);\n\n // bind functions to the ractive instance at the top level,\n // unless it's a non-POJO (in which case alarm bells should ring)\n if (result && result.constructor === Object) {\n for (const prop in result) {\n if (isFunction(result[prop])) {\n const value = result[prop];\n result[prop] = bind(value, ractive);\n result[prop]._r_unbound = value;\n }\n }\n }\n\n return result || {};\n },\n\n reset(ractive) {\n const result = this.init(ractive.constructor, ractive, ractive.viewmodel);\n ractive.viewmodel.root.set(result);\n return true;\n }\n};\n\nfunction emptyData() {\n return {};\n}\n\nfunction combine(parentValue, childValue) {\n validate(childValue);\n\n const parentIsFn = isFunction(parentValue);\n\n // Very important, otherwise child instance can become\n // the default data object on Ractive or a component.\n // then ractive.set() ends up setting on the prototype!\n if (!childValue && !parentIsFn) {\n // this needs to be a function so that it can still inherit parent defaults\n childValue = emptyData;\n }\n\n const childIsFn = isFunction(childValue);\n\n // Fast path, where we just need to copy properties from\n // parent to child\n if (!parentIsFn && !childIsFn) {\n return fromProperties(childValue, parentValue);\n }\n\n return function() {\n const child = childIsFn ? callDataFunction(childValue, this) : childValue;\n const parent = parentIsFn ? callDataFunction(parentValue, this) : parentValue;\n\n return fromProperties(child, parent);\n };\n}\n\nfunction callDataFunction(fn, context) {\n const data = fn.call(context);\n\n if (!data) return;\n\n if (!isObjectType(data)) {\n fatal('Data function must return an object');\n }\n\n if (data.constructor !== Object) {\n warnOnceIfDebug(\n 'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged'\n );\n }\n\n return data;\n}\n\nfunction fromProperties(primary, secondary) {\n if (primary && secondary) {\n for (const key in secondary) {\n if (!(key in primary)) {\n primary[key] = secondary[key];\n }\n }\n\n return primary;\n }\n\n return primary || secondary;\n}\n","import { TEMPLATE_VERSION } from 'config/template';\nimport { addFunctions } from 'shared/getFunction';\nimport parser from '../runtime-parser';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isNumber, isString } from 'utils/is';\n\nexport default {\n name: 'template',\n\n extend(Parent, proto, options) {\n // only assign if exists\n if ('template' in options) {\n const template = options.template;\n\n if (isFunction(template)) {\n proto.template = template;\n } else {\n proto.template = parseTemplate(template, proto);\n }\n }\n },\n\n init(Parent, ractive, options) {\n // TODO because of prototypal inheritance, we might just be able to use\n // ractive.template, and not bother passing through the Parent object.\n // At present that breaks the test mocks' expectations\n let template = 'template' in options ? options.template : Parent.prototype.template;\n template = template || { v: TEMPLATE_VERSION, t: [] };\n\n if (isFunction(template)) {\n const fn = template;\n template = getDynamicTemplate(ractive, fn);\n\n ractive._config.template = {\n fn,\n result: template\n };\n }\n\n template = parseTemplate(template, ractive);\n\n // TODO the naming of this is confusing - ractive.template refers to [...],\n // but Component.prototype.template refers to {v:1,t:[],p:[]}...\n // it's unnecessary, because the developer never needs to access\n // ractive.template\n ractive.template = template.t;\n\n if (template.p) {\n extendPartials(ractive.partials, template.p);\n }\n },\n\n reset(ractive) {\n const result = resetValue(ractive);\n\n if (result) {\n const parsed = parseTemplate(result, ractive);\n\n ractive.template = parsed.t;\n extendPartials(ractive.partials, parsed.p, true);\n\n return true;\n }\n }\n};\n\nfunction resetValue(ractive) {\n const initial = ractive._config.template;\n\n // If this isn't a dynamic template, there's nothing to do\n if (!initial || !initial.fn) {\n return;\n }\n\n const result = getDynamicTemplate(ractive, initial.fn);\n\n // TODO deep equality check to prevent unnecessary re-rendering\n // in the case of already-parsed templates\n if (result !== initial.result) {\n initial.result = result;\n return result;\n }\n}\n\nfunction getDynamicTemplate(ractive, fn) {\n return fn.call(ractive, {\n fromId: parser.fromId,\n isParsed: parser.isParsed,\n parse(template, options = parser.getParseOptions(ractive)) {\n return parser.parse(template, options);\n }\n });\n}\n\nfunction parseTemplate(template, ractive) {\n if (isString(template)) {\n // parse will validate and add expression functions\n template = parseAsString(template, ractive);\n } else {\n // need to validate and add exp for already parsed template\n validate(template);\n addFunctions(template);\n }\n\n return template;\n}\n\nfunction parseAsString(template, ractive) {\n // ID of an element containing the template?\n if (template[0] === '#') {\n template = parser.fromId(template);\n }\n\n return parser.parseFor(template, ractive);\n}\n\nfunction validate(template) {\n // Check that the template even exists\n if (template == undefined) {\n throw new Error(`The template cannot be ${template}.`);\n } else if (!isNumber(template.v)) {\n // Check the parsed template has a version at all\n throw new Error(\n \"The template parser was passed a non-string template, but the template doesn't have a version. Make sure you're passing in the template you think you are.\"\n );\n } else if (template.v !== TEMPLATE_VERSION) {\n // Check we're using the correct version\n throw new Error(\n `Mismatched template version (expected ${TEMPLATE_VERSION}, got ${\n template.v\n }) Please ensure you are using the latest version of Ractive.js in your build process as well as in your app`\n );\n }\n}\n\nfunction extendPartials(existingPartials, newPartials, overwrite) {\n if (!newPartials) return;\n\n // TODO there's an ambiguity here - we need to overwrite in the `reset()`\n // case, but not initially...\n\n for (const key in newPartials) {\n if (overwrite || !hasOwn(existingPartials, key)) {\n existingPartials[key] = newPartials[key];\n }\n }\n}\n","import { assign, create, keys } from 'utils/object';\n\nconst registryNames = [\n 'adaptors',\n 'components',\n 'computed',\n 'decorators',\n 'easing',\n 'events',\n 'helpers',\n 'interpolators',\n 'partials',\n 'transitions'\n];\n\nconst registriesOnDefaults = ['computed', 'helpers'];\n\nclass Registry {\n constructor(name, useDefaults) {\n this.name = name;\n this.useDefaults = useDefaults;\n }\n\n extend(Parent, proto, options) {\n const parent = this.useDefaults ? Parent.defaults : Parent;\n const target = this.useDefaults ? proto : proto.constructor;\n this.configure(parent, target, options);\n }\n\n init() {\n // noop\n }\n\n configure(Parent, target, options) {\n const name = this.name;\n const option = options[name];\n\n const registry = create(Parent[name]);\n\n assign(registry, option);\n\n target[name] = registry;\n }\n\n reset(ractive) {\n const registry = ractive[this.name];\n let changed = false;\n\n keys(registry).forEach(key => {\n const item = registry[key];\n\n if (item._fn) {\n if (item._fn.isOwner) {\n registry[key] = item._fn;\n } else {\n delete registry[key];\n }\n changed = true;\n }\n });\n\n return changed;\n }\n}\n\nconst registries = registryNames.map(name => {\n const putInDefaults = registriesOnDefaults.indexOf(name) > -1;\n return new Registry(name, putInDefaults);\n});\n\nexport default registries;\n","import noop from 'utils/noop';\nimport { isFunction } from 'utils/is';\n\nexport default function wrap(parent, name, method) {\n if (!/_super/.test(method)) return method;\n\n function wrapper() {\n const superMethod = getSuperMethod(wrapper._parent, name);\n const hasSuper = '_super' in this;\n const oldSuper = this._super;\n\n this._super = superMethod;\n\n const result = method.apply(this, arguments);\n\n if (hasSuper) {\n this._super = oldSuper;\n } else {\n delete this._super;\n }\n\n return result;\n }\n\n wrapper._parent = parent;\n wrapper._method = method;\n\n return wrapper;\n}\n\nfunction getSuperMethod(parent, name) {\n if (name in parent) {\n const value = parent[name];\n\n return isFunction(value) ? value : () => value;\n }\n\n return noop;\n}\n","import { warnIfDebug } from 'utils/log';\nimport { isArray } from 'utils/is';\n\nfunction getMessage(deprecated, correct, isError) {\n return (\n `options.${deprecated} has been deprecated in favour of options.${correct}.` +\n (isError ? ` You cannot specify both options, please use options.${correct}.` : '')\n );\n}\n\nfunction deprecateOption(options, deprecatedOption, correct) {\n if (deprecatedOption in options) {\n if (!(correct in options)) {\n warnIfDebug(getMessage(deprecatedOption, correct));\n options[correct] = options[deprecatedOption];\n } else {\n throw new Error(getMessage(deprecatedOption, correct, true));\n }\n }\n}\n\nexport default function deprecate(options) {\n deprecateOption(options, 'beforeInit', 'onconstruct');\n deprecateOption(options, 'init', 'onrender');\n deprecateOption(options, 'complete', 'oncomplete');\n deprecateOption(options, 'eventDefinitions', 'events');\n\n // Using extend with Component instead of options,\n // like Human.extend( Spider ) means adaptors as a registry\n // gets copied to options. So we have to check if actually an array\n if (isArray(options.adaptors)) {\n deprecateOption(options, 'adaptors', 'adapt');\n }\n}\n","import { warnIfDebug } from 'utils/log';\nimport adaptConfigurator from './custom/adapt';\nimport cssConfigurator from './custom/css/css';\nimport dataConfigurator from './custom/data';\nimport templateConfigurator from './custom/template';\nimport defaults from './defaults';\nimport registries from './registries';\nimport wrapPrototype from './wrapPrototypeMethod';\nimport deprecate from './deprecate';\nimport RactiveProto from '../prototype';\nimport { hasOwn, keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\nimport hooks from 'src/events/Hook';\n\nconst config = {\n extend: (Parent, proto, options, Child) => configure('extend', Parent, proto, options, Child),\n init: (Parent, ractive, options) => configure('init', Parent, ractive, options),\n reset: ractive => order.filter(c => c.reset && c.reset(ractive)).map(c => c.name)\n};\n\nconst custom = {\n adapt: adaptConfigurator,\n computed: config,\n css: cssConfigurator,\n data: dataConfigurator,\n helpers: config,\n template: templateConfigurator\n};\n\nconst defaultKeys = keys(defaults);\n\nconst isStandardKey = makeObj(defaultKeys.filter(key => !custom[key]));\n\n// blacklisted keys that we don't double extend\nconst isBlacklisted = makeObj(\n defaultKeys.concat(registries.map(r => r.name), ['on', 'observe', 'attributes', 'cssData', 'use'])\n);\n\nconst order = [].concat(\n defaultKeys.filter(key => !registries[key] && !custom[key]),\n registries,\n //custom.data,\n custom.template,\n custom.css\n);\n\nfunction configure(method, Parent, target, options, Child) {\n deprecate(options);\n\n for (const key in options) {\n if (hasOwn(isStandardKey, key)) {\n const value = options[key];\n\n // warn the developer if they passed a function and ignore its value\n\n // NOTE: we allow some functions on \"el\" because we duck type element lists\n // and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n // function object as the result of querySelector methods\n if (key !== 'el' && isFunction(value)) {\n warnIfDebug(\n `${key} is a Ractive option that does not expect a function and will be ignored`,\n method === 'init' ? target : null\n );\n } else {\n target[key] = value;\n }\n }\n }\n\n // disallow combination of `append` and `enhance`\n if (target.append && target.enhance) {\n throw new Error('Cannot use append and enhance at the same time');\n }\n\n registries.forEach(registry => {\n registry[method](Parent, target, options, Child);\n });\n\n adaptConfigurator[method](Parent, target, options, Child);\n templateConfigurator[method](Parent, target, options, Child);\n cssConfigurator[method](Parent, target, options, Child);\n\n extendOtherMethods(Parent.prototype, target, options);\n}\n\nconst _super = /\\b_super\\b/;\nfunction extendOtherMethods(parent, target, options) {\n for (const key in options) {\n if (!isBlacklisted[key] && hasOwn(options, key)) {\n let member = options[key];\n\n // if this is a method that overwrites a method, wrap it:\n if (isFunction(member)) {\n if (\n (key in RactiveProto ||\n (key.slice(0, 2) === 'on' && key.slice(2) in hooks && key in target)) &&\n !_super.test(member.toString())\n ) {\n warnIfDebug(\n `Overriding Ractive prototype function '${key}' without calling the '${_super}' method can be very dangerous.`\n );\n }\n member = wrapPrototype(parent, key, member);\n }\n\n target[key] = member;\n }\n }\n}\n\nfunction makeObj(array) {\n const obj = {};\n array.forEach(x => (obj[x] = true));\n return obj;\n}\n\nexport default config;\n","import { createDocumentFragment } from 'utils/dom';\nimport noop from 'utils/noop';\n\nexport default class Item {\n constructor(options) {\n this.up = options.up;\n this.ractive = options.up.ractive;\n\n this.template = options.template;\n this.index = options.index;\n this.type = options.template.t;\n\n this.dirty = false;\n }\n\n bubble() {\n if (!this.dirty) {\n this.dirty = true;\n this.up.bubble();\n }\n }\n\n destroyed() {\n if (this.fragment) this.fragment.destroyed();\n }\n\n find() {\n return null;\n }\n\n findComponent() {\n return null;\n }\n\n findNextNode() {\n return this.up.findNextNode(this);\n }\n\n rebound(update) {\n if (this.fragment) this.fragment.rebound(update);\n }\n\n shuffled() {\n if (this.fragment) this.fragment.shuffled();\n }\n\n valueOf() {\n return this.toString();\n }\n}\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nexport class ContainerItem extends Item {\n constructor(options) {\n super(options);\n }\n\n detach() {\n return this.fragment ? this.fragment.detach() : createDocumentFragment();\n }\n\n find(selector) {\n if (this.fragment) {\n return this.fragment.find(selector);\n }\n }\n\n findAll(selector, options) {\n if (this.fragment) {\n this.fragment.findAll(selector, options);\n }\n }\n\n findComponent(name) {\n if (this.fragment) {\n return this.fragment.findComponent(name);\n }\n }\n\n findAllComponents(name, options) {\n if (this.fragment) {\n this.fragment.findAllComponents(name, options);\n }\n }\n\n firstNode(skipParent) {\n return this.fragment && this.fragment.firstNode(skipParent);\n }\n\n toString(escape) {\n return this.fragment ? this.fragment.toString(escape) : '';\n }\n}\n","import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark, marked } from 'shared/methodCallers';\nimport { hasOwn } from 'utils/object';\n\nexport default class ComputationChild extends Model {\n constructor(parent, key) {\n super(parent, key);\n\n this.isReadonly = !this.root.ractive.syncComputedChildren;\n this.dirty = true;\n this.isComputed = true;\n }\n\n get setRoot() {\n return this.parent.setRoot;\n }\n\n applyValue(value) {\n super.applyValue(value);\n\n if (!this.isReadonly) {\n let source = this.parent;\n // computed models don't have a shuffle method\n while (source && source.shuffle) {\n source = source.parent;\n }\n\n if (source) {\n source.dependencies.forEach(mark);\n }\n }\n\n if (this.setRoot) {\n this.setRoot.set(this.setRoot.value);\n }\n }\n\n get(shouldCapture, opts) {\n if (shouldCapture) capture(this);\n\n if (this.dirty) {\n this.dirty = false;\n const parentValue = this.parent.get();\n this.value = parentValue ? parentValue[this.key] : undefined;\n if (this.wrapper) this.newWrapperValue = this.value;\n this.adapt();\n }\n\n return (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture) && this.wrapper\n ? this.wrapperValue\n : this.value;\n }\n\n handleChange() {\n if (this.dirty) return;\n this.dirty = true;\n\n if (this.boundValue) this.boundValue = null;\n\n this.links.forEach(marked);\n this.deps.forEach(handleChange);\n this.children.forEach(handleChange);\n }\n\n joinKey(key) {\n if (key === undefined || key === '') return this;\n\n if (!hasOwn(this.childByKey, key)) {\n const child = new ComputationChild(this, key);\n this.children.push(child);\n this.childByKey[key] = child;\n }\n\n return this.childByKey[key];\n }\n}\n","/* global console */\n/* eslint no-console:\"off\" */\n\nimport { capture, startCapturing, stopCapturing } from 'src/global/capture';\nimport { warnIfDebug } from 'utils/log';\nimport Model, { shared } from './Model';\nimport { maybeBind, noVirtual } from './ModelBase';\nimport ComputationChild from './ComputationChild';\nimport { hasConsole } from 'config/environment';\nimport { isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nexport default class Computation extends Model {\n constructor(parent, signature, key) {\n super(parent, key);\n\n this.signature = signature;\n\n this.isReadonly = !this.signature.setter;\n this.isComputed = true;\n\n this.dependencies = [];\n\n this.children = [];\n this.childByKey = {};\n\n this.deps = [];\n\n this.dirty = true;\n\n // TODO: is there a less hackish way to do this?\n this.shuffle = undefined;\n }\n\n get setRoot() {\n if (this.signature.setter) return this;\n }\n\n get(shouldCapture, opts) {\n if (shouldCapture) capture(this);\n\n if (this.dirty) {\n this.dirty = false;\n const old = this.value;\n this.value = this.getValue();\n // this may cause a view somewhere to update, so it must be in a runloop\n if (!runloop.active()) {\n runloop.start();\n if (!isEqual(old, this.value)) this.notifyUpstream();\n runloop.end();\n } else {\n if (!isEqual(old, this.value)) this.notifyUpstream();\n }\n if (this.wrapper) this.newWrapperValue = this.value;\n this.adapt();\n }\n\n // if capturing, this value needs to be unwrapped because it's for external use\n return maybeBind(\n this,\n // if unwrap is supplied, it overrides capture\n this.wrapper && (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture)\n ? this.wrapperValue\n : this.value,\n !opts || opts.shouldBind !== false\n );\n }\n\n getContext() {\n return this.parent.isRoot ? this.root.ractive : this.parent.get(false, noVirtual);\n }\n\n getValue() {\n startCapturing();\n let result;\n\n try {\n result = this.signature.getter.call(this.root.ractive, this.getContext());\n } catch (err) {\n warnIfDebug(`Failed to compute ${this.getKeypath()}: ${err.message || err}`);\n\n // TODO this is all well and good in Chrome, but...\n // ...also, should encapsulate this stuff better, and only\n // show it if Ractive.DEBUG\n if (hasConsole) {\n if (console.groupCollapsed)\n console.groupCollapsed(\n '%cshow details',\n 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n );\n const sig = this.signature;\n console.error(\n `${err.name}: ${err.message}\\n\\n${sig.getterString}${\n sig.getterUseStack ? '\\n\\n' + err.stack : ''\n }`\n );\n if (console.groupCollapsed) console.groupEnd();\n }\n }\n\n const dependencies = stopCapturing();\n this.setDependencies(dependencies);\n\n return result;\n }\n\n mark() {\n this.handleChange();\n }\n\n rebind(next, previous) {\n // computations will grab all of their deps again automagically\n if (next !== previous) this.handleChange();\n }\n\n set(value) {\n if (this.isReadonly) {\n throw new Error(`Cannot set read-only computed value '${this.key}'`);\n }\n\n this.signature.setter(value);\n this.mark();\n }\n\n setDependencies(dependencies) {\n // unregister any soft dependencies we no longer have\n let i = this.dependencies.length;\n while (i--) {\n const model = this.dependencies[i];\n if (!~dependencies.indexOf(model)) model.unregister(this);\n }\n\n // and add any new ones\n i = dependencies.length;\n while (i--) {\n const model = dependencies[i];\n if (!~this.dependencies.indexOf(model)) model.register(this);\n }\n\n this.dependencies = dependencies;\n }\n\n teardown() {\n let i = this.dependencies.length;\n while (i--) {\n if (this.dependencies[i]) this.dependencies[i].unregister(this);\n }\n if (this.parent.computed[this.key] === this) delete this.parent.computed[this.key];\n super.teardown();\n }\n}\n\nconst prototype = Computation.prototype;\nconst child = ComputationChild.prototype;\nprototype.handleChange = child.handleChange;\nprototype.joinKey = child.joinKey;\n\nshared.Computation = Computation;\n","import { removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport { warnIfDebug } from 'utils/log';\nimport Model from 'src/model/Model';\nimport Computation from 'src/model/Computation';\nimport { startCapturing, stopCapturing } from 'src/global/capture';\nimport getFunction from 'shared/getFunction';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from './resolveReference';\n\nexport default class ExpressionProxy extends Model {\n constructor(fragment, template) {\n super(fragment.ractive.viewmodel, null);\n\n this.fragment = fragment;\n this.template = template;\n\n this.isReadonly = true;\n this.isComputed = true;\n this.dirty = true;\n\n this.fn =\n fragment.ractive.allowExpressions === false\n ? noop\n : getFunction(template.s, template.r.length);\n\n this.models = this.template.r.map(ref => {\n return resolveReference(this.fragment, ref);\n });\n this.dependencies = [];\n\n this.shuffle = undefined;\n\n this.bubble();\n }\n\n bubble(actuallyChanged = true) {\n // refresh the keypath\n this.keypath = undefined;\n\n if (actuallyChanged) {\n this.handleChange();\n }\n }\n\n getKeypath() {\n if (!this.template) return '@undefined';\n if (!this.keypath) {\n this.keypath =\n '@' +\n this.template.s.replace(/_(\\d+)/g, (match, i) => {\n if (i >= this.models.length) return match;\n\n const model = this.models[i];\n return model ? model.getKeypath() : '@undefined';\n });\n }\n\n return this.keypath;\n }\n\n getValue() {\n startCapturing();\n let result;\n\n try {\n const params = this.models.map(m => (m ? m.get(true) : undefined));\n result = this.fn.apply(this.fragment.ractive, params);\n } catch (err) {\n warnIfDebug(`Failed to compute ${this.getKeypath()}: ${err.message || err}`);\n }\n\n const dependencies = stopCapturing();\n // remove missing deps\n this.dependencies.filter(d => !~dependencies.indexOf(d)).forEach(d => {\n d.unregister(this);\n removeFromArray(this.dependencies, d);\n });\n // register new deps\n dependencies.filter(d => !~this.dependencies.indexOf(d)).forEach(d => {\n d.register(this);\n this.dependencies.push(d);\n });\n\n return result;\n }\n\n notifyUpstream() {}\n\n rebind(next, previous, safe) {\n const idx = this.models.indexOf(previous);\n\n if (~idx) {\n next = rebindMatch(this.template.r[idx], next, previous);\n if (next !== previous) {\n previous.unregister(this);\n this.models.splice(idx, 1, next);\n if (next) next.addShuffleRegister(this, 'mark');\n }\n }\n this.bubble(!safe);\n }\n\n rebound(update) {\n this.models = this.template.r.map(ref => resolveReference(this.fragment, ref));\n if (update) this.bubble(true);\n }\n\n retrieve() {\n return this.get();\n }\n\n teardown() {\n this.fragment = undefined;\n if (this.dependencies) this.dependencies.forEach(d => d.unregister(this));\n super.teardown();\n }\n\n unreference() {\n super.unreference();\n collect(this);\n }\n\n unregister(dep) {\n super.unregister(dep);\n collect(this);\n }\n\n unregisterLink(link) {\n super.unregisterLink(link);\n collect(this);\n }\n}\n\nconst prototype = ExpressionProxy.prototype;\nconst computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\nprototype.unbind = noop;\n\nfunction collect(model) {\n if (!model.deps.length && !model.refs && !model.links.length) model.teardown();\n}\n","import { fireShuffleTasks } from 'src/model/ModelBase';\nimport { REFERENCE } from 'config/types';\nimport { rebindMatch } from 'shared/rebind';\nimport { isArray, isString } from 'utils/is';\nimport { escapeKey } from 'shared/keypaths';\nimport ExpressionProxy from './ExpressionProxy';\nimport resolveReference from './resolveReference';\nimport resolve from './resolve';\n\nimport LinkModel, { Missing } from 'src/model/LinkModel';\n\nexport default class ReferenceExpressionProxy extends LinkModel {\n constructor(fragment, template) {\n super(null, null, null, '@undefined');\n this.root = fragment.ractive.viewmodel;\n this.template = template;\n this.rootLink = true;\n this.template = template;\n this.fragment = fragment;\n\n this.rebound();\n }\n\n getKeypath() {\n return this.model ? this.model.getKeypath() : '@undefined';\n }\n\n rebound() {\n const fragment = this.fragment;\n const template = this.template;\n\n let base = (this.base = resolve(fragment, template));\n let idx;\n\n if (this.proxy) {\n teardown(this);\n }\n\n const proxy = (this.proxy = {\n rebind: (next, previous) => {\n if (previous === base) {\n next = rebindMatch(template, next, previous);\n if (next !== base) {\n this.base = base = next;\n }\n } else if (~(idx = members.indexOf(previous))) {\n next = rebindMatch(template.m[idx].n, next, previous);\n if (next !== members[idx]) {\n members.splice(idx, 1, next || Missing);\n }\n }\n\n if (next !== previous) {\n previous.unregister(proxy);\n if (next) next.addShuffleTask(() => next.register(proxy));\n }\n },\n handleChange: () => {\n pathChanged();\n }\n });\n\n base.register(proxy);\n\n const members = (this.members = template.m.map(tpl => {\n if (isString(tpl)) {\n return { get: () => tpl };\n }\n\n let model;\n\n if (tpl.t === REFERENCE) {\n model = resolveReference(fragment, tpl.n);\n model.register(proxy);\n\n return model;\n }\n\n model = new ExpressionProxy(fragment, tpl);\n model.register(proxy);\n return model;\n }));\n\n const pathChanged = () => {\n const model = base.joinAll(\n members.reduce((list, m) => {\n const k = m.get();\n if (isArray(k)) return list.concat(k);\n else list.push(escapeKey(String(k)));\n return list;\n }, [])\n );\n\n if (model !== this.model) {\n this.model = model;\n this.relinking(model);\n fireShuffleTasks();\n refreshPathDeps(this);\n }\n };\n\n pathChanged();\n }\n\n teardown() {\n teardown(this);\n super.teardown();\n }\n\n unreference() {\n super.unreference();\n if (!this.deps.length && !this.refs) this.teardown();\n }\n\n unregister(dep) {\n super.unregister(dep);\n if (!this.deps.length && !this.refs) this.teardown();\n }\n}\n\nfunction teardown(proxy) {\n if (proxy.base) proxy.base.unregister(proxy.proxy);\n if (proxy.models) {\n proxy.models.forEach(m => {\n if (m.unregister) m.unregister(proxy);\n });\n }\n}\n\nfunction refreshPathDeps(proxy) {\n let len = proxy.deps.length;\n let i, v;\n\n for (i = 0; i < len; i++) {\n v = proxy.deps[i];\n if (v.pathChanged) v.pathChanged();\n if (v.fragment && v.fragment.pathModel) v.fragment.pathModel.applyValue(proxy.getKeypath());\n }\n\n len = proxy.children.length;\n for (i = 0; i < len; i++) {\n refreshPathDeps(proxy.children[i]);\n }\n}\n\nconst eproto = ExpressionProxy.prototype;\nconst proto = ReferenceExpressionProxy.prototype;\n\nproto.unreference = eproto.unreference;\nproto.unregister = eproto.unregister;\nproto.unregisterLink = eproto.unregisterLink;\n","import resolveReference from './resolveReference';\nimport ExpressionProxy from './ExpressionProxy';\nimport ReferenceExpressionProxy from './ReferenceExpressionProxy';\n\nexport default function resolve(fragment, template) {\n if (template.r) {\n return resolveReference(fragment, template.r);\n } else if (template.x) {\n return new ExpressionProxy(fragment, template.x);\n } else if (template.rx) {\n return new ReferenceExpressionProxy(fragment, template.rx);\n }\n}\n","import Fragment from '../Fragment';\nimport { ContainerItem } from './shared/Item';\nimport resolve from '../resolvers/resolve';\n\nexport function resolveAliases(aliases, fragment, dest = {}) {\n for (let i = 0; i < aliases.length; i++) {\n if (!dest[aliases[i].n]) {\n const m = resolve(fragment, aliases[i].x);\n dest[aliases[i].n] = m;\n m.reference();\n }\n }\n\n return dest;\n}\n\nexport default class Alias extends ContainerItem {\n constructor(options) {\n super(options);\n\n this.fragment = null;\n }\n\n bind() {\n this.fragment = new Fragment({\n owner: this,\n template: this.template.f\n });\n\n this.fragment.aliases = resolveAliases(this.template.z, this.up);\n this.fragment.bind();\n }\n\n rebound(update) {\n const aliases = this.fragment.aliases;\n for (const k in aliases) {\n if (aliases[k].rebound) aliases[k].rebound(update);\n else {\n aliases[k].unreference();\n aliases[k] = 0;\n }\n }\n\n resolveAliases(this.template.z, this.up, aliases);\n\n if (this.fragment) this.fragment.rebound(update);\n }\n\n render(target, occupants) {\n this.rendered = true;\n if (this.fragment) this.fragment.render(target, occupants);\n }\n\n unbind() {\n for (const k in this.fragment.aliases) {\n this.fragment.aliases[k].unreference();\n }\n\n this.fragment.aliases = {};\n if (this.fragment) this.fragment.unbind();\n }\n\n unrender(shouldDestroy) {\n if (this.rendered && this.fragment) this.fragment.unrender(shouldDestroy);\n this.rendered = false;\n }\n\n update() {\n if (this.dirty) {\n this.dirty = false;\n this.fragment.update();\n }\n }\n}\n","import cleanCss from 'utils/cleanCss';\nimport { isString } from 'utils/is';\n\nconst space = /\\s+/;\n\nexport function readStyle(css) {\n if (!isString(css)) return {};\n\n return cleanCss(css, (css, reconstruct) => {\n return css\n .split(';')\n .filter(rule => !!rule.trim())\n .map(reconstruct)\n .reduce((rules, rule) => {\n const i = rule.indexOf(':');\n const name = rule.substr(0, i).trim();\n rules[name] = rule.substr(i + 1).trim();\n return rules;\n }, {});\n });\n}\n\nexport function readClass(str) {\n const list = str.split(space);\n\n // remove any empty entries\n let i = list.length;\n while (i--) {\n if (!list[i]) list.splice(i, 1);\n }\n\n return list;\n}\n","import { html } from 'config/namespaces';\nimport { safeToStringValue } from 'utils/dom';\nimport { arrayContains } from 'utils/array';\nimport noop from 'utils/noop';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport { readStyle, readClass } from 'src/view/helpers/specialAttrs';\nimport { keys as objectKeys } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nconst textTypes = [\n undefined,\n 'text',\n 'search',\n 'url',\n 'email',\n 'hidden',\n 'password',\n 'search',\n 'reset',\n 'submit'\n];\n\nexport default function getUpdateDelegate(attribute) {\n const { element, name } = attribute;\n\n if (name === 'value') {\n if (attribute.interpolator) attribute.interpolator.bound = true;\n\n // special case - selects\n if (element.name === 'select' && name === 'value') {\n return element.getAttribute('multiple') ? updateMultipleSelectValue : updateSelectValue;\n }\n\n if (element.name === 'textarea') return updateStringValue;\n\n // special case - contenteditable\n if (element.getAttribute('contenteditable') != null) return updateContentEditableValue;\n\n // special case - <input>\n if (element.name === 'input') {\n const type = element.getAttribute('type');\n\n // type='file' value='{{fileList}}'>\n if (type === 'file') return noop; // read-only\n\n // type='radio' name='{{twoway}}'\n if (type === 'radio' && element.binding && element.binding.attribute.name === 'name')\n return updateRadioValue;\n\n if (~textTypes.indexOf(type)) return updateStringValue;\n }\n\n return updateValue;\n }\n\n const node = element.node;\n\n // special case - <input type='radio' name='{{twoway}}' value='foo'>\n if (attribute.isTwoway && name === 'name') {\n if (node.type === 'radio') return updateRadioName;\n if (node.type === 'checkbox') return updateCheckboxName;\n }\n\n if (name === 'style') return updateStyleAttribute;\n\n if (name.indexOf('style-') === 0) return updateInlineStyle;\n\n // special case - class names. IE fucks things up, again\n if (name === 'class' && (!node.namespaceURI || node.namespaceURI === html))\n return updateClassName;\n\n if (name.indexOf('class-') === 0) return updateInlineClass;\n\n if (attribute.isBoolean) {\n const type = element.getAttribute('type');\n if (attribute.interpolator && name === 'checked' && (type === 'checkbox' || type === 'radio'))\n attribute.interpolator.bound = true;\n return updateBoolean;\n }\n\n if (attribute.namespace && attribute.namespace !== attribute.node.namespaceURI)\n return updateNamespacedAttribute;\n\n return updateAttribute;\n}\n\nfunction updateMultipleSelectValue(reset) {\n let value = this.getValue();\n\n if (!isArray(value)) value = [value];\n\n const options = this.node.options;\n let i = options.length;\n\n if (reset) {\n while (i--) options[i].selected = false;\n } else {\n while (i--) {\n const option = options[i];\n const optionValue = option._ractive ? option._ractive.value : option.value; // options inserted via a triple don't have _ractive\n\n option.selected = arrayContains(value, optionValue);\n }\n }\n}\n\nfunction updateSelectValue(reset) {\n const value = this.getValue();\n\n if (!this.locked) {\n // TODO is locked still a thing?\n this.node._ractive.value = value;\n\n const options = this.node.options;\n let i = options.length;\n let wasSelected = false;\n\n if (reset) {\n while (i--) options[i].selected = false;\n } else {\n while (i--) {\n const option = options[i];\n const optionValue = option._ractive ? option._ractive.value : option.value; // options inserted via a triple don't have _ractive\n if (option.disabled && option.selected) wasSelected = true;\n\n if (optionValue == value) {\n // double equals as we may be comparing numbers with strings\n option.selected = true;\n return;\n }\n }\n }\n\n if (!wasSelected) this.node.selectedIndex = -1;\n }\n}\n\nfunction updateContentEditableValue(reset) {\n const value = this.getValue();\n\n if (!this.locked) {\n if (reset) this.node.innerHTML = '';\n else this.node.innerHTML = value === undefined ? '' : value;\n }\n}\n\nfunction updateRadioValue(reset) {\n const node = this.node;\n const wasChecked = node.checked;\n\n const value = this.getValue();\n\n if (reset) return (node.checked = false);\n\n //node.value = this.element.getAttribute( 'value' );\n node.value = this.node._ractive.value = value;\n node.checked = this.element.compare(value, this.element.getAttribute('name'));\n\n // This is a special case - if the input was checked, and the value\n // changed so that it's no longer checked, the twoway binding is\n // most likely out of date. To fix it we have to jump through some\n // hoops... this is a little kludgy but it works\n if (wasChecked && !node.checked && this.element.binding && this.element.binding.rendered) {\n this.element.binding.group.model.set(this.element.binding.group.getValue());\n }\n}\n\nfunction updateValue(reset) {\n if (!this.locked) {\n if (reset) {\n this.node.removeAttribute('value');\n this.node.value = this.node._ractive.value = null;\n } else {\n const value = this.getValue();\n\n this.node.value = this.node._ractive.value = value;\n this.node.setAttribute('value', safeToStringValue(value));\n }\n }\n}\n\nfunction updateStringValue(reset) {\n if (!this.locked) {\n if (reset) {\n this.node._ractive.value = '';\n this.node.removeAttribute('value');\n } else {\n const value = this.getValue();\n\n this.node._ractive.value = value;\n\n this.node.value = safeToStringValue(value);\n this.node.setAttribute('value', safeToStringValue(value));\n }\n }\n}\n\nfunction updateRadioName(reset) {\n if (reset) this.node.checked = false;\n else this.node.checked = this.element.compare(this.getValue(), this.element.binding.getValue());\n}\n\nfunction updateCheckboxName(reset) {\n const { element, node } = this;\n const binding = element.binding;\n\n const value = this.getValue();\n const valueAttribute = element.getAttribute('value');\n\n if (reset) {\n // TODO: WAT?\n }\n\n if (!isArray(value)) {\n binding.isChecked = node.checked = element.compare(value, valueAttribute);\n } else {\n let i = value.length;\n while (i--) {\n if (element.compare(valueAttribute, value[i])) {\n binding.isChecked = node.checked = true;\n return;\n }\n }\n binding.isChecked = node.checked = false;\n }\n}\n\nfunction updateStyleAttribute(reset) {\n const props = reset ? {} : readStyle(this.getValue() || '');\n const style = this.node.style;\n const keys = objectKeys(props);\n const prev = this.previous || [];\n\n let i = 0;\n while (i < keys.length) {\n if (keys[i] in style) {\n const safe = props[keys[i]].replace('!important', '');\n style.setProperty(keys[i], safe, safe.length !== props[keys[i]].length ? 'important' : '');\n }\n i++;\n }\n\n // remove now-missing attrs\n i = prev.length;\n while (i--) {\n if (!~keys.indexOf(prev[i]) && prev[i] in style) style.setProperty(prev[i], '', '');\n }\n\n this.previous = keys;\n}\n\nfunction updateInlineStyle(reset) {\n if (!this.style) {\n this.style = hyphenateCamel(this.name.substr(6));\n }\n\n if (reset && this.node.style.getPropertyValue(this.style) !== this.last) return;\n\n const value = reset ? '' : safeToStringValue(this.getValue());\n const safe = value.replace('!important', '');\n this.node.style.setProperty(this.style, safe, safe.length !== value.length ? 'important' : '');\n this.last = this.node.style.getPropertyValue(this.style);\n}\n\nfunction updateClassName(reset) {\n const value = reset ? [] : readClass(safeToStringValue(this.getValue()));\n\n // watch out for werdo svg elements\n let cls = this.node.className;\n cls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n const attr = readClass(cls);\n const prev = this.previous || [];\n\n const className = value.concat(attr.filter(c => !~prev.indexOf(c))).join(' ');\n\n if (className !== cls) {\n if (!isString(this.node.className)) {\n this.node.className.baseVal = className;\n } else {\n this.node.className = className;\n }\n }\n\n this.previous = value;\n}\n\nfunction updateInlineClass(reset) {\n const name = this.name.substr(6);\n\n // watch out for werdo svg elements\n let cls = this.node.className;\n cls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n const attr = readClass(cls);\n const value = reset ? false : this.getValue();\n\n if (!this.inlineClass) this.inlineClass = name;\n\n if (value && !~attr.indexOf(name)) attr.push(name);\n else if (!value && ~attr.indexOf(name)) attr.splice(attr.indexOf(name), 1);\n\n if (!isString(this.node.className)) {\n this.node.className.baseVal = attr.join(' ');\n } else {\n this.node.className = attr.join(' ');\n }\n}\n\nfunction updateBoolean(reset) {\n // with two-way binding, only update if the change wasn't initiated by the user\n // otherwise the cursor will often be sent to the wrong place\n if (!this.locked) {\n if (reset) {\n if (this.useProperty) this.node[this.propertyName] = false;\n this.node.removeAttribute(this.propertyName);\n } else {\n if (this.useProperty) {\n this.node[this.propertyName] = this.getValue();\n } else {\n const val = this.getValue();\n if (val) {\n this.node.setAttribute(this.propertyName, isString(val) ? val : '');\n } else {\n this.node.removeAttribute(this.propertyName);\n }\n }\n }\n }\n}\n\nexport function updateAttribute(reset) {\n if (reset) {\n if (this.node.getAttribute(this.name) === this.value) {\n this.node.removeAttribute(this.name);\n }\n } else {\n this.value = safeToStringValue(this.getString());\n this.node.setAttribute(this.name, this.value);\n }\n}\n\nexport function updateNamespacedAttribute(reset) {\n if (reset) {\n if (\n this.value ===\n this.node.getAttributeNS(this.namespace, this.name.slice(this.name.indexOf(':') + 1))\n ) {\n this.node.removeAttributeNS(this.namespace, this.name.slice(this.name.indexOf(':') + 1));\n }\n } else {\n this.value = safeToStringValue(this.getString());\n this.node.setAttributeNS(\n this.namespace,\n this.name.slice(this.name.indexOf(':') + 1),\n this.value\n );\n }\n}\n","export default {\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n bgcolor: 'bgColor',\n class: 'className',\n codebase: 'codeBase',\n colspan: 'colSpan',\n contenteditable: 'contentEditable',\n datetime: 'dateTime',\n dirname: 'dirName',\n for: 'htmlFor',\n 'http-equiv': 'httpEquiv',\n ismap: 'isMap',\n maxlength: 'maxLength',\n novalidate: 'noValidate',\n pubdate: 'pubDate',\n readonly: 'readOnly',\n rowspan: 'rowSpan',\n tabindex: 'tabIndex',\n usemap: 'useMap'\n};\n","import { doc } from 'config/environment';\nimport { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\n\nconst div = doc ? createElement('div') : null;\n\nlet attributes = false;\nexport function inAttributes() {\n return attributes;\n}\n\nexport default class ConditionalAttribute extends Item {\n constructor(options) {\n super(options);\n\n this.attributes = [];\n\n this.owner = options.owner;\n\n this.fragment = new Fragment({\n ractive: this.ractive,\n owner: this,\n template: this.template\n });\n\n // this fragment can't participate in node-y things\n this.fragment.findNextNode = noop;\n\n this.dirty = false;\n }\n\n bind() {\n this.fragment.bind();\n }\n\n bubble() {\n if (!this.dirty) {\n this.dirty = true;\n this.owner.bubble();\n }\n }\n\n destroyed() {\n this.unrender();\n }\n\n render() {\n this.node = this.owner.node;\n if (this.node) {\n this.isSvg = this.node.namespaceURI === svg;\n }\n\n attributes = true;\n if (!this.rendered) this.fragment.render();\n\n this.rendered = true;\n this.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n this.update();\n attributes = false;\n }\n\n toString() {\n return this.fragment.toString();\n }\n\n unbind() {\n this.fragment.unbind();\n }\n\n unrender() {\n this.rendered = false;\n this.fragment.unrender();\n }\n\n update() {\n let str;\n let attrs;\n\n if (this.dirty) {\n this.dirty = false;\n\n const current = attributes;\n attributes = true;\n this.fragment.update();\n\n if (this.rendered && this.node) {\n str = this.fragment.toString();\n\n attrs = parseAttributes(str, this.isSvg);\n\n // any attributes that previously existed but no longer do\n // must be removed\n this.attributes.filter(a => notIn(attrs, a)).forEach(a => {\n this.node.removeAttribute(a.name);\n });\n\n attrs.forEach(a => {\n this.node.setAttribute(a.name, a.value);\n });\n\n this.attributes = attrs;\n }\n\n attributes = current || false;\n }\n }\n}\n\nconst onlyWhitespace = /^\\s*$/;\nfunction parseAttributes(str, isSvg) {\n if (onlyWhitespace.test(str)) return [];\n const tagName = isSvg ? 'svg' : 'div';\n return str\n ? (div.innerHTML = `<${tagName} ${str}></${tagName}>`) && toArray(div.childNodes[0].attributes)\n : [];\n}\n\nfunction notIn(haystack, needle) {\n let i = haystack.length;\n\n while (i--) {\n if (haystack[i].name === needle.name) {\n return false;\n }\n }\n\n return true;\n}\n","import { INTERPOLATOR } from 'config/types';\nimport namespaces from 'config/namespaces';\nimport { safeAttributeString } from 'utils/dom';\nimport { booleanAttributes } from 'utils/html';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\nimport findElement from '../shared/findElement';\nimport getUpdateDelegate from './attribute/getUpdateDelegate';\nimport propertyNames from './attribute/propertyNames';\nimport { inAttributes } from './ConditionalAttribute';\nimport { isArray, isString } from 'utils/is';\n\nfunction lookupNamespace(node, prefix) {\n const qualified = `xmlns:${prefix}`;\n\n while (node) {\n if (node.hasAttribute && node.hasAttribute(qualified)) return node.getAttribute(qualified);\n node = node.parentNode;\n }\n\n return namespaces[prefix];\n}\n\nlet attribute = false;\nexport function inAttribute() {\n return attribute;\n}\n\nexport default class Attribute extends Item {\n constructor(options) {\n super(options);\n\n this.name = options.template.n;\n this.namespace = null;\n\n this.owner = options.owner || options.up.owner || options.element || findElement(options.up);\n this.element =\n options.element || (this.owner.attributeByName ? this.owner : findElement(options.up));\n this.up = options.up; // shared\n this.ractive = this.up.ractive;\n\n this.rendered = false;\n this.updateDelegate = null;\n this.fragment = null;\n\n this.element.attributeByName[this.name] = this;\n\n if (!isArray(options.template.f)) {\n this.value = options.template.f;\n if (this.value === 0) {\n this.value = '';\n } else if (this.value === undefined) {\n this.value = true;\n }\n return;\n } else {\n this.fragment = new Fragment({\n owner: this,\n template: options.template.f\n });\n }\n\n this.interpolator =\n this.fragment &&\n this.fragment.items.length === 1 &&\n this.fragment.items[0].type === INTERPOLATOR &&\n this.fragment.items[0];\n\n if (this.interpolator) this.interpolator.owner = this;\n }\n\n bind() {\n if (this.fragment) {\n this.fragment.bind();\n }\n }\n\n bubble() {\n if (!this.dirty) {\n this.up.bubble();\n this.element.bubble();\n this.dirty = true;\n }\n }\n\n firstNode() {}\n\n getString() {\n attribute = true;\n const value = this.fragment\n ? this.fragment.toString()\n : this.value != null\n ? '' + this.value\n : '';\n attribute = false;\n return value;\n }\n\n // TODO could getValue ever be called for a static attribute,\n // or can we assume that this.fragment exists?\n getValue() {\n attribute = true;\n const value = this.fragment\n ? this.fragment.valueOf()\n : booleanAttributes[this.name.toLowerCase()]\n ? true\n : this.value;\n attribute = false;\n return value;\n }\n\n render() {\n const node = this.element.node;\n this.node = node;\n\n // should we use direct property access, or setAttribute?\n if (!node.namespaceURI || node.namespaceURI === namespaces.html) {\n this.propertyName = propertyNames[this.name] || this.name;\n\n if (node[this.propertyName] !== undefined) {\n this.useProperty = true;\n }\n\n // is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n // node.selected = true rather than node.setAttribute( 'selected', '' )\n if (booleanAttributes[this.name.toLowerCase()] || this.isTwoway) {\n this.isBoolean = true;\n }\n\n if (this.propertyName === 'value') {\n node._ractive.value = this.value;\n }\n }\n\n if (node.namespaceURI) {\n const index = this.name.indexOf(':');\n if (index !== -1) {\n this.namespace = lookupNamespace(node, this.name.slice(0, index));\n } else {\n this.namespace = node.namespaceURI;\n }\n }\n\n this.rendered = true;\n this.updateDelegate = getUpdateDelegate(this);\n this.updateDelegate();\n }\n\n toString() {\n if (inAttributes()) return '';\n attribute = true;\n\n const value = this.getValue();\n\n // Special case - select and textarea values (should not be stringified)\n if (\n this.name === 'value' &&\n (this.element.getAttribute('contenteditable') !== undefined ||\n (this.element.name === 'select' || this.element.name === 'textarea'))\n ) {\n return;\n }\n\n // Special case – bound radio `name` attributes\n if (\n this.name === 'name' &&\n this.element.name === 'input' &&\n this.interpolator &&\n this.element.getAttribute('type') === 'radio'\n ) {\n return `name=\"{{${this.interpolator.model.getKeypath()}}}\"`;\n }\n\n // Special case - style and class attributes and directives\n if (\n this.owner === this.element &&\n (this.name === 'style' || this.name === 'class' || this.style || this.inlineClass)\n ) {\n return;\n }\n\n if (\n !this.rendered &&\n this.owner === this.element &&\n (!this.name.indexOf('style-') || !this.name.indexOf('class-'))\n ) {\n if (!this.name.indexOf('style-')) {\n this.style = hyphenateCamel(this.name.substr(6));\n } else {\n this.inlineClass = this.name.substr(6);\n }\n\n return;\n }\n\n if (booleanAttributes[this.name.toLowerCase()])\n return value\n ? isString(value)\n ? `${this.name}=\"${safeAttributeString(value)}\"`\n : this.name\n : '';\n if (value == null) return '';\n\n const str = safeAttributeString(this.getString());\n attribute = false;\n\n return str ? `${this.name}=\"${str}\"` : this.name;\n }\n\n unbind() {\n if (this.fragment) this.fragment.unbind();\n }\n\n unrender() {\n this.updateDelegate(true);\n\n this.rendered = false;\n }\n\n update() {\n if (this.dirty) {\n let binding;\n this.dirty = false;\n if (this.fragment) this.fragment.update();\n if (this.rendered) this.updateDelegate();\n if (this.isTwoway && !this.locked) {\n this.interpolator.twowayBinding.lastVal(true, this.interpolator.model.get());\n } else if (this.name === 'value' && (binding = this.element.binding)) {\n // special case: name bound element with dynamic value\n const attr = binding.attribute;\n if (attr && !attr.dirty && attr.rendered) {\n this.element.binding.attribute.updateDelegate();\n }\n }\n }\n }\n}\n","import { INTERPOLATOR, ELEMENT } from 'config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class BindingFlag extends Item {\n constructor(options) {\n super(options);\n\n this.owner = options.owner || options.up.owner || findElement(options.up);\n this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n this.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n this.bubbler = this.owner === this.element ? this.element : this.up;\n\n if (this.element.type === ELEMENT) {\n if (isArray(options.template.f)) {\n this.fragment = new Fragment({\n owner: this,\n template: options.template.f\n });\n }\n\n this.interpolator =\n this.fragment &&\n this.fragment.items.length === 1 &&\n this.fragment.items[0].type === INTERPOLATOR &&\n this.fragment.items[0];\n }\n }\n\n bind() {\n if (this.fragment) this.fragment.bind();\n set(this, this.getValue(), true);\n }\n\n bubble() {\n if (!this.dirty) {\n this.bubbler.bubble();\n this.dirty = true;\n }\n }\n\n getValue() {\n if (this.fragment) return this.fragment.valueOf();\n else if ('value' in this) return this.value;\n else if ('f' in this.template) return this.template.f;\n else return true;\n }\n\n render() {\n set(this, this.getValue(), true);\n }\n\n toString() {\n return '';\n }\n\n unbind() {\n if (this.fragment) this.fragment.unbind();\n\n delete this.element[this.flag];\n }\n\n unrender() {\n if (this.element.rendered) this.element.recreateTwowayBinding();\n }\n\n update() {\n if (this.dirty) {\n this.dirty = false;\n if (this.fragment) this.fragment.update();\n set(this, this.getValue(), true);\n }\n }\n}\n\nfunction set(flag, value, update) {\n if (value === 0) {\n flag.value = true;\n } else if (value === 'true') {\n flag.value = true;\n } else if (value === 'false' || value === '0') {\n flag.value = false;\n } else {\n flag.value = value;\n }\n\n const current = flag.element[flag.flag];\n flag.element[flag.flag] = flag.value;\n if (update && !flag.element.attributes.binding && current !== flag.value) {\n flag.element.recreateTwowayBinding();\n }\n\n return flag.value;\n}\n","import Item from './shared/Item';\nimport noop from 'utils/noop';\nimport { detachNode } from 'utils/dom';\nimport { doc } from 'config/environment';\nimport { assign, create } from 'utils/object';\n\nexport default function Comment(options) {\n Item.call(this, options);\n}\n\nconst proto = create(Item.prototype);\n\nassign(proto, {\n bind: noop,\n unbind: noop,\n update: noop,\n\n detach() {\n return detachNode(this.node);\n },\n\n firstNode() {\n return this.node;\n },\n\n render(target) {\n this.rendered = true;\n\n this.node = doc.createComment(this.template.c);\n target.appendChild(this.node);\n },\n\n toString() {\n return `<!-- ${this.template.c} -->`;\n },\n\n unrender(shouldDestroy) {\n if (this.rendered && shouldDestroy) this.detach();\n this.rendered = false;\n }\n});\n\nComment.prototype = proto;\n","import hooks from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\nimport { cancel } from 'shared/methodCallers';\nimport { warnIfDebug } from 'utils/log';\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nexport default function Ractive$teardown() {\n if (this.torndown) {\n warnIfDebug('ractive.teardown() was called on a Ractive instance that was already torn down');\n return Promise.resolve();\n }\n\n this.shouldDestroy = true;\n return teardown(this, () => (this.fragment.rendered ? this.unrender() : Promise.resolve()));\n}\n\nexport function teardown(instance, getPromise) {\n instance.torndown = true;\n instance.fragment.unbind();\n instance._observers.slice().forEach(cancel);\n\n if (instance.el && instance.el.__ractive_instances__) {\n removeFromArray(instance.el.__ractive_instances__, instance);\n }\n\n const promise = getPromise();\n\n hooks.teardown.fire(instance);\n\n promise.then(() => {\n hooks.destruct.fire(instance);\n instance.viewmodel.teardown();\n });\n\n return promise;\n}\n","import { SharedModel } from './SharedModel';\nimport { Missing } from '../LinkModel';\nimport { create } from 'utils/object';\n\nexport default class RactiveModel extends SharedModel {\n constructor(ractive) {\n super(ractive, '@this');\n this.ractive = ractive;\n }\n\n joinKey(key) {\n const model = super.joinKey(key);\n\n if ((key === 'root' || key === 'parent') && !model.isLink) return initLink(model, key);\n else if (key === 'data') return this.ractive.viewmodel;\n else if (key === 'cssData') return this.ractive.constructor._cssModel;\n\n return model;\n }\n}\n\nfunction initLink(model, key) {\n model.applyValue = function(value) {\n this.parent.value[key] = value;\n if (value && value.viewmodel) {\n this.link(value.viewmodel.getRactiveModel(), key);\n this._link.markedAll();\n } else {\n this.link(create(Missing), key);\n this._link.markedAll();\n }\n };\n\n if (key === 'root') {\n const mark = model.mark;\n model.mark = function(force) {\n if (this._marking) return;\n this._marking = true;\n mark.apply(this, force);\n this._marking = false;\n };\n }\n\n model.applyValue(model.parent.ractive[key], key);\n model._link.set = v => model.applyValue(v);\n model._link.applyValue = v => model.applyValue(v);\n\n return model._link;\n}\n","import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark } from 'shared/methodCallers';\nimport RactiveModel from './specials/RactiveModel';\nimport SharedModel, { GlobalModel, SharedModel as SharedBase } from './specials/SharedModel';\nimport { splitKeypath, unescapeKey } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\n\nconst specialModels = {\n '@this'(root) {\n return root.getRactiveModel();\n },\n '@global'() {\n return GlobalModel;\n },\n '@shared'() {\n return SharedModel;\n },\n '@style'(root) {\n return root.getRactiveModel().joinKey('cssData');\n },\n '@helpers'(root) {\n return root.getHelpers();\n }\n};\nspecialModels['@'] = specialModels['@this'];\n\nexport default class RootModel extends Model {\n constructor(options) {\n super(null, null);\n\n this.isRoot = true;\n this.root = this;\n this.ractive = options.ractive; // TODO sever this link\n\n this.value = options.data;\n this.adaptors = options.adapt;\n this.adapt();\n }\n\n attached(fragment) {\n attachImplicits(this, fragment);\n }\n\n createLink(keypath, target, targetPath, options) {\n const keys = splitKeypath(keypath);\n\n let model = this;\n while (keys.length) {\n const key = keys.shift();\n model = model.childByKey[key] || model.joinKey(key);\n }\n\n return model.link(target, targetPath, options);\n }\n\n detached() {\n detachImplicits(this);\n }\n\n get(shouldCapture, options) {\n if (shouldCapture) capture(this);\n\n if (!options || options.virtual !== false) {\n return this.getVirtual();\n } else {\n return this.value;\n }\n }\n\n getHelpers() {\n if (!this.helpers) this.helpers = new SharedBase(this.ractive.helpers, 'helpers', this.ractive);\n return this.helpers;\n }\n\n getKeypath() {\n return '';\n }\n\n getRactiveModel() {\n return this.ractiveModel || (this.ractiveModel = new RactiveModel(this.ractive));\n }\n\n getValueChildren() {\n const children = super.getValueChildren(this.value);\n\n this.children.forEach(child => {\n if (child._link) {\n const idx = children.indexOf(child);\n if (~idx) children.splice(idx, 1, child._link);\n else children.push(child._link);\n }\n });\n\n return children;\n }\n\n has(key) {\n if (key[0] === '~' && key[1] === '/') key = key.slice(2);\n if (specialModels[key] || key === '') return true;\n\n if (super.has(key)) {\n return true;\n } else {\n const unescapedKey = unescapeKey(key);\n\n // mappings/links and computations\n if (this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link) return true;\n }\n }\n\n joinKey(key, opts) {\n if (key[0] === '~' && key[1] === '/') key = key.slice(2);\n\n if (key[0] === '@') {\n const fn = specialModels[key];\n if (fn) return fn(this);\n } else {\n return super.joinKey(key, opts);\n }\n }\n\n set(value) {\n // TODO wrapping root node is a baaaad idea. We should prevent this\n const wrapper = this.wrapper;\n if (wrapper) {\n const shouldTeardown = !wrapper.reset || wrapper.reset(value) === false;\n\n if (shouldTeardown) {\n wrapper.teardown();\n this.wrapper = null;\n this.value = value;\n this.adapt();\n }\n } else {\n this.value = value;\n this.adapt();\n }\n\n this.deps.forEach(handleChange);\n this.children.forEach(mark);\n }\n\n retrieve() {\n return this.wrapper ? this.wrapper.get() : this.value;\n }\n\n teardown() {\n super.teardown();\n this.ractiveModel && this.ractiveModel.teardown();\n }\n}\nRootModel.prototype.update = noop;\n\nfunction attachImplicits(model, fragment) {\n if (model._link && model._link.implicit && model._link.isDetached()) {\n model.attach(fragment);\n }\n\n // look for virtual children to relink and cascade\n for (const k in model.childByKey) {\n if (k in model.value) {\n attachImplicits(model.childByKey[k], fragment);\n } else if (!model.childByKey[k]._link || model.childByKey[k]._link.isDetached()) {\n const mdl = resolveReference(fragment, k);\n if (mdl) {\n model.childByKey[k].link(mdl, k, { implicit: true });\n }\n }\n }\n}\n\nfunction detachImplicits(model) {\n if (model._link && model._link.implicit) {\n model.unlink();\n }\n\n for (const k in model.childByKey) {\n detachImplicits(model.childByKey[k]);\n }\n}\n","import { create, toPairs } from 'utils/object';\nimport { isFunction, isObjectType } from 'utils/is';\n\nexport default function subscribe(instance, options, type) {\n const subs = (instance.constructor[`_${type}`] || []).concat(toPairs(options[type] || []));\n const single = type === 'on' ? 'once' : `${type}Once`;\n\n subs.forEach(([target, config]) => {\n if (isFunction(config)) {\n instance[type](target, config);\n } else if (isObjectType(config) && isFunction(config.handler)) {\n instance[config.once ? single : type](target, config.handler, create(config));\n }\n });\n}\n","import { fatal, warnIfDebug, welcome } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { ensureArray, combine } from 'utils/array';\nimport { findInViewHierarchy } from 'shared/registry';\nimport dataConfigurator from './config/custom/data';\nimport RootModel from 'src/model/RootModel';\nimport hooks from 'src/events/Hook';\nimport subscribe from './helpers/subscribe';\nimport Ractive from '../Ractive';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, INTERPOLATOR, TRANSITION } from 'config/types';\nimport { assign, create, hasOwn } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\nimport { compute } from 'src/Ractive/prototype/compute';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nconst registryNames = [\n 'adaptors',\n 'components',\n 'decorators',\n 'easing',\n 'events',\n 'interpolators',\n 'partials',\n 'transitions'\n];\n\nconst protoRegistries = ['computed', 'helpers'];\n\nlet uid = 0;\n\nexport default function construct(ractive, options) {\n if (Ractive.DEBUG) welcome();\n\n initialiseProperties(ractive);\n handleAttributes(ractive);\n\n // set up event subscribers\n subscribe(ractive, options, 'on');\n\n // if there's not a delegation setting, inherit from parent if it's not default\n if (\n !hasOwn(options, 'delegate') &&\n ractive.parent &&\n ractive.parent.delegate !== ractive.delegate\n ) {\n ractive.delegate = false;\n }\n\n // plugins that need to run at construct\n if (isArray(options.use)) {\n ractive.use.apply(ractive, options.use.filter(p => p.construct));\n }\n\n hooks.construct.fire(ractive, options);\n if (options.onconstruct) options.onconstruct.call(ractive, getRactiveContext(ractive), options);\n\n // Add registries\n let i = registryNames.length;\n while (i--) {\n const name = registryNames[i];\n ractive[name] = assign(create(ractive.constructor[name] || null), options[name]);\n }\n\n i = protoRegistries.length;\n while (i--) {\n const name = protoRegistries[i];\n ractive[name] = assign(create(ractive.constructor.prototype[name]), options[name]);\n }\n\n if (ractive._attributePartial) {\n ractive.partials['extra-attributes'] = ractive._attributePartial;\n delete ractive._attributePartial;\n }\n\n // Create a viewmodel\n const viewmodel = new RootModel({\n adapt: getAdaptors(ractive, ractive.adapt, options),\n data: dataConfigurator.init(ractive.constructor, ractive, options),\n ractive\n });\n\n // once resolved, share the adaptors array between the root model and instance\n ractive.adapt = viewmodel.adaptors;\n\n ractive.viewmodel = viewmodel;\n\n for (const k in ractive.computed) {\n compute.call(ractive, k, ractive.computed[k]);\n }\n}\n\nfunction getAdaptors(ractive, protoAdapt, options) {\n protoAdapt = protoAdapt.map(lookup);\n const adapt = ensureArray(options.adapt).map(lookup);\n\n const srcs = [protoAdapt, adapt];\n if (ractive.parent && !ractive.isolated) {\n srcs.push(ractive.parent.viewmodel.adaptors);\n }\n\n return combine.apply(null, srcs);\n\n function lookup(adaptor) {\n if (isString(adaptor)) {\n adaptor = findInViewHierarchy('adaptors', ractive, adaptor);\n\n if (!adaptor) {\n fatal(missingPlugin(adaptor, 'adaptor'));\n }\n }\n\n return adaptor;\n }\n}\n\nfunction initialiseProperties(ractive) {\n // Generate a unique identifier, for places where you'd use a weak map if it\n // existed\n ractive._guid = 'r-' + uid++;\n\n // events\n ractive._subs = create(null);\n ractive._nsSubs = 0;\n\n // storage for item configuration from instantiation to reset,\n // like dynamic functions or original values\n ractive._config = {};\n\n // events\n ractive.event = null;\n ractive._eventQueue = [];\n\n // observers\n ractive._observers = [];\n\n // external children\n ractive._children = [];\n ractive._children.byName = {};\n ractive.children = ractive._children;\n\n if (!ractive.component) {\n ractive.root = ractive;\n ractive.parent = ractive.container = null; // TODO container still applicable?\n }\n}\n\nfunction handleAttributes(ractive) {\n const component = ractive.component;\n const attributes = ractive.constructor.attributes;\n\n if (attributes && component) {\n const tpl = component.template;\n const attrs = tpl.m ? tpl.m.slice() : [];\n\n // grab all of the passed attribute names\n const props = attrs.filter(a => a.t === ATTRIBUTE).map(a => a.n);\n\n // warn about missing requireds\n attributes.required.forEach(p => {\n if (!~props.indexOf(p)) {\n warnIfDebug(`Component '${component.name}' requires attribute '${p}' to be provided`);\n }\n });\n\n // set up a partial containing non-property attributes\n const all = attributes.optional.concat(attributes.required);\n const partial = [];\n let i = attrs.length;\n while (i--) {\n const a = attrs[i];\n if (a.t === ATTRIBUTE && !~all.indexOf(a.n)) {\n if (attributes.mapAll) {\n // map the attribute if requested and make the extra attribute in the partial refer to the mapping\n partial.unshift({\n t: ATTRIBUTE,\n n: a.n,\n f: [{ t: INTERPOLATOR, r: `~/${a.n}` }]\n });\n } else {\n // transfer the attribute to the extra attributes partal\n partial.unshift(attrs.splice(i, 1)[0]);\n }\n } else if (\n !attributes.mapAll &&\n (a.t === DECORATOR || a.t === TRANSITION || a.t === BINDING_FLAG)\n ) {\n partial.unshift(attrs.splice(i, 1)[0]);\n }\n }\n\n if (partial.length) component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p };\n ractive._attributePartial = partial;\n }\n}\n","import runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\nimport { bind, render as callRender, unbind, unrender, update } from 'shared/methodCallers';\nimport { teardown } from 'src/Ractive/prototype/teardown';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { warnIfDebug } from 'utils/log';\nimport { createDocumentFragment } from 'utils/dom';\nimport {\n ANCHOR,\n ATTRIBUTE,\n BINDING_FLAG,\n COMPONENT,\n DECORATOR,\n EVENT,\n TRANSITION,\n YIELDER\n} from 'config/types';\nimport construct from 'src/Ractive/construct';\nimport initialise from 'src/Ractive/initialise';\nimport render from 'src/Ractive/render';\nimport Item from './shared/Item';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { assign, create } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nexport default class Component extends Item {\n constructor(options, ComponentConstructor) {\n super(options);\n let template = options.template;\n this.isAnchor = template.t === ANCHOR;\n this.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n let attrs = template.m;\n\n const partials = template.p || {};\n if (!('content' in partials)) partials.content = template.f || [];\n this._partials = partials; // TEMP\n\n if (this.isAnchor) {\n this.name = template.n;\n\n this.addChild = addChild;\n this.removeChild = removeChild;\n } else {\n const instance = create(ComponentConstructor.prototype);\n\n this.instance = instance;\n this.name = template.e;\n\n if (instance.el || instance.target) {\n warnIfDebug(\n `The <${this.name}> component has a default '${\n instance.el ? 'el' : 'target'\n }' property; it has been disregarded`\n );\n instance.el = instance.target = null;\n }\n\n // find container\n let fragment = options.up;\n let container;\n while (fragment) {\n if (fragment.owner.type === YIELDER) {\n container = fragment.owner.container;\n break;\n }\n\n fragment = fragment.parent;\n }\n\n // add component-instance-specific properties\n instance.parent = this.up.ractive;\n instance.container = container || null;\n instance.root = instance.parent.root;\n instance.component = this;\n\n construct(this.instance, { partials });\n\n // these can be modified during construction\n template = this.template;\n attrs = template.m;\n\n // allow components that are so inclined to add programmatic mappings\n if (isArray(this.mappings)) {\n attrs = (attrs || []).concat(this.mappings);\n } else if (isString(this.mappings)) {\n attrs = (attrs || []).concat(parser.parse(this.mappings, { attributes: true }).t);\n }\n\n // for hackability, this could be an open option\n // for any ractive instance, but for now, just\n // for components and just for ractive...\n instance._inlinePartials = partials;\n }\n\n this.attributeByName = {};\n this.attributes = [];\n\n if (attrs) {\n const leftovers = [];\n attrs.forEach(template => {\n switch (template.t) {\n case ATTRIBUTE:\n case EVENT:\n this.attributes.push(\n createItem({\n owner: this,\n up: this.up,\n template\n })\n );\n break;\n\n case TRANSITION:\n case BINDING_FLAG:\n case DECORATOR:\n break;\n\n default:\n leftovers.push(template);\n break;\n }\n });\n\n if (leftovers.length) {\n this.attributes.push(\n new ConditionalAttribute({\n owner: this,\n up: this.up,\n template: leftovers\n })\n );\n }\n }\n\n this.eventHandlers = [];\n }\n\n bind() {\n if (!this.isAnchor) {\n this.attributes.forEach(bind);\n this.eventHandlers.forEach(bind);\n\n initialise(\n this.instance,\n {\n partials: this._partials\n },\n {\n cssIds: this.up.cssIds\n }\n );\n\n if (this.instance.target || this.instance.el) this.extern = true;\n\n this.bound = true;\n }\n }\n\n bubble() {\n if (!this.dirty) {\n this.dirty = true;\n this.up.bubble();\n }\n }\n\n destroyed() {\n if (!this.isAnchor && this.instance.fragment) this.instance.fragment.destroyed();\n }\n\n detach() {\n if (this.isAnchor) {\n if (this.instance) return this.instance.fragment.detach();\n return createDocumentFragment();\n }\n\n return this.instance.fragment.detach();\n }\n\n find(selector, options) {\n if (this.instance) return this.instance.fragment.find(selector, options);\n }\n\n findAll(selector, options) {\n if (this.instance) this.instance.fragment.findAll(selector, options);\n }\n\n findComponent(name, options) {\n if (!name || this.name === name) return this.instance;\n\n if (this.instance.fragment) {\n return this.instance.fragment.findComponent(name, options);\n }\n }\n\n findAllComponents(name, options) {\n const { result } = options;\n\n if (this.instance && (!name || this.name === name)) {\n result.push(this.instance);\n }\n\n if (this.instance) this.instance.findAllComponents(name, options);\n }\n\n firstNode(skipParent) {\n if (this.instance) return this.instance.fragment.firstNode(skipParent);\n }\n\n getContext(...assigns) {\n assigns.unshift(this.instance);\n return getRactiveContext.apply(null, assigns);\n }\n\n rebound(update) {\n this.attributes.forEach(x => x.rebound(update));\n }\n\n render(target, occupants) {\n if (this.isAnchor) {\n this.rendered = true;\n this.target = target;\n\n if (!checking.length) {\n checking.push(this.ractive);\n if (occupants) {\n this.occupants = occupants;\n checkAnchors();\n this.occupants = null;\n } else {\n runloop.scheduleTask(checkAnchors, true);\n }\n }\n } else {\n this.attributes.forEach(callRender);\n this.eventHandlers.forEach(callRender);\n\n if (this.extern) {\n this.instance.delegate = false;\n this.instance.render();\n } else {\n render(this.instance, target, null, occupants);\n }\n\n this.rendered = true;\n }\n }\n\n shuffled() {\n super.shuffled();\n this.instance &&\n !this.instance.isolated &&\n this.instance.fragment &&\n this.instance.fragment.shuffled();\n }\n\n toString() {\n if (this.instance) return this.instance.toHTML();\n }\n\n unbind() {\n if (!this.isAnchor) {\n this.bound = false;\n\n this.attributes.forEach(unbind);\n\n teardown(this.instance, () => runloop.promise());\n }\n }\n\n unrender(shouldDestroy) {\n this.shouldDestroy = shouldDestroy;\n\n if (this.isAnchor) {\n if (this.item) unrenderItem(this, this.item);\n this.target = null;\n if (!checking.length) {\n checking.push(this.ractive);\n runloop.scheduleTask(checkAnchors, true);\n }\n } else {\n this.instance.unrender();\n this.instance.el = this.instance.target = null;\n this.attributes.forEach(unrender);\n this.eventHandlers.forEach(unrender);\n }\n\n this.rendered = false;\n }\n\n update() {\n this.dirty = false;\n if (this.instance) {\n this.instance.fragment.update();\n this.attributes.forEach(update);\n this.eventHandlers.forEach(update);\n }\n }\n}\n\nfunction addChild(meta) {\n if (this.item) this.removeChild(this.item);\n\n const child = meta.instance;\n meta.anchor = this;\n\n meta.up = this.up;\n meta.name = meta.nameOption || this.name;\n this.name = meta.name;\n\n if (!child.isolated) child.viewmodel.attached(this.up);\n\n // render as necessary\n if (this.rendered) {\n renderItem(this, meta);\n }\n}\n\nfunction removeChild(meta) {\n // unrender as necessary\n if (this.item === meta) {\n unrenderItem(this, meta);\n this.name = this.template.n;\n }\n}\n\nfunction renderItem(anchor, meta) {\n if (!anchor.rendered) return;\n\n meta.shouldDestroy = false;\n meta.up = anchor.up;\n\n anchor.item = meta;\n anchor.instance = meta.instance;\n const nextNode = anchor.up.findNextNode(anchor);\n\n if (meta.instance.fragment.rendered) {\n meta.instance.unrender();\n }\n\n meta.partials = meta.instance.partials;\n meta.instance.partials = assign(create(meta.partials), meta.partials, anchor._partials);\n\n meta.instance.fragment.unbind();\n meta.instance.fragment.componentParent = anchor.up;\n meta.instance.fragment.bind(meta.instance.viewmodel);\n\n anchor.attributes.forEach(bind);\n anchor.eventHandlers.forEach(bind);\n anchor.attributes.forEach(callRender);\n anchor.eventHandlers.forEach(callRender);\n\n const target = anchor.up.findParentNode();\n render(meta.instance, target, target.contains(nextNode) ? nextNode : null, anchor.occupants);\n\n if (meta.lastBound !== anchor) {\n meta.lastBound = anchor;\n }\n}\n\nfunction unrenderItem(anchor, meta) {\n if (!anchor.rendered) return;\n\n meta.shouldDestroy = true;\n meta.instance.unrender();\n\n anchor.eventHandlers.forEach(unrender);\n anchor.attributes.forEach(unrender);\n anchor.eventHandlers.forEach(unbind);\n anchor.attributes.forEach(unbind);\n\n meta.instance.el = meta.instance.anchor = null;\n meta.instance.fragment.componentParent = null;\n meta.up = null;\n meta.anchor = null;\n anchor.item = null;\n anchor.instance = null;\n}\n\nlet checking = [];\nexport function checkAnchors() {\n const list = checking;\n checking = [];\n\n list.forEach(updateAnchors);\n}\n","import getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nexport function setupArgsFn(item, template, fragment, opts = {}) {\n if (template && template.f && template.f.s) {\n item.fn = getFunction(template.f.s, template.f.r.length);\n if (opts.register === true) {\n item.models = resolveArgs(item, template, fragment, opts);\n }\n }\n}\n\nexport function resolveArgs(item, template, fragment, opts = {}) {\n return template.f.r.map((ref, i) => {\n let model;\n\n if (opts.specialRef && (model = opts.specialRef(ref, i))) return model;\n\n model = resolveReference(fragment, ref);\n if (opts.register === true) {\n model.register(item);\n }\n\n return model;\n });\n}\n\nexport function teardownArgsFn(item, template) {\n if (template && template.f && template.f.s) {\n if (item.models)\n item.models.forEach(m => {\n if (m && m.unregister) m.unregister(item);\n });\n item.models = null;\n }\n}\n","import { findInViewHierarchy } from 'shared/registry';\nimport { warnOnce } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport noop from 'utils/noop';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'src/shared/rebind';\nimport findElement from '../shared/findElement';\nimport { setupArgsFn, teardownArgsFn } from '../shared/directiveArgs';\n\nconst missingDecorator = {\n update: noop,\n teardown: noop\n};\n\nexport default class Decorator {\n constructor(options) {\n this.owner = options.owner || options.up.owner || findElement(options.up);\n this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n this.up = options.up || this.owner.up;\n this.ractive = this.owner.ractive;\n const template = (this.template = options.template);\n\n this.name = template.n;\n\n this.node = null;\n this.handle = null;\n\n this.element.decorators.push(this);\n }\n\n bind() {\n setupArgsFn(this, this.template, this.up, { register: true });\n }\n\n bubble() {\n if (!this.dirty) {\n this.dirty = true;\n // decorators may be owned directly by an element or by a fragment if conditional\n this.owner.bubble();\n this.up.bubble();\n }\n }\n\n destroyed() {\n if (this.handle) {\n this.handle.teardown();\n this.handle = null;\n }\n this.shouldDestroy = true;\n }\n\n handleChange() {\n this.bubble();\n }\n\n rebind(next, previous, safe) {\n const idx = this.models.indexOf(previous);\n if (!~idx) return;\n\n next = rebindMatch(this.template.f.r[idx], next, previous);\n if (next === previous) return;\n\n previous.unregister(this);\n this.models.splice(idx, 1, next);\n if (next) next.addShuffleRegister(this, 'mark');\n\n if (!safe) this.bubble();\n }\n\n rebound(update) {\n teardownArgsFn(this, this.template);\n setupArgsFn(this, this.template, this.up, { register: true });\n if (update) this.bubble();\n }\n\n render() {\n this.shouldDestroy = false;\n if (this.handle) this.unrender();\n runloop.scheduleTask(() => {\n // bail if the host element has managed to become unrendered\n if (!this.element.rendered) return;\n\n const fn = findInViewHierarchy('decorators', this.ractive, this.name);\n\n if (!fn) {\n warnOnce(missingPlugin(this.name, 'decorator'));\n this.handle = missingDecorator;\n return;\n }\n\n this.node = this.element.node;\n\n let args;\n if (this.fn) {\n args = this.models.map(model => {\n if (!model) return undefined;\n\n return model.get();\n });\n args = this.fn.apply(this.ractive, args);\n }\n\n this.handle = fn.apply(this.ractive, [this.node].concat(args));\n\n if (!this.handle || !this.handle.teardown) {\n throw new Error(\n `The '${this.name}' decorator must return an object with a teardown method`\n );\n }\n\n // watch out for decorators that cause their host element to be unrendered\n if (this.shouldDestroy) this.destroyed();\n }, true);\n }\n\n toString() {\n return '';\n }\n\n unbind() {\n teardownArgsFn(this, this.template);\n }\n\n unrender(shouldDestroy) {\n if ((!shouldDestroy || this.element.rendered) && this.handle) {\n this.handle.teardown();\n this.handle = null;\n }\n }\n\n update() {\n const instance = this.handle;\n\n if (!this.dirty) {\n if (instance && instance.invalidate) {\n runloop.scheduleTask(() => instance.invalidate(), true);\n }\n return;\n }\n\n this.dirty = false;\n\n if (instance) {\n if (!instance.update) {\n this.unrender();\n this.render();\n } else {\n const args = this.models.map(model => model && model.get());\n instance.update.apply(this.ractive, this.fn.apply(this.ractive, args));\n }\n }\n }\n}\n\nDecorator.prototype.firstNode = noop;\n","import noop from 'utils/noop';\nimport Item from './shared/Item';\n\nexport default class Doctype extends Item {\n toString() {\n return '<!DOCTYPE' + this.template.a + '>';\n }\n}\n\nconst proto = Doctype.prototype;\nproto.bind = proto.render = proto.teardown = proto.unbind = proto.unrender = proto.update = noop;\n","import runloop from 'src/global/runloop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport noop from 'utils/noop';\nimport findElement from '../../shared/findElement';\n\nexport default class Binding {\n constructor(element, name = 'value') {\n this.element = element;\n this.ractive = element.ractive;\n this.attribute = element.attributeByName[name];\n\n const interpolator = this.attribute.interpolator;\n interpolator.twowayBinding = this;\n\n const model = interpolator.model;\n\n if (model.isReadonly && !model.setRoot) {\n const keypath = model.getKeypath().replace(/^@/, '');\n warnOnceIfDebug(\n `Cannot use two-way binding on <${\n element.name\n }> element: ${keypath} is read-only. To suppress this warning use <${\n element.name\n } twoway='false'...>`,\n { ractive: this.ractive }\n );\n return false;\n }\n\n this.attribute.isTwoway = true;\n this.model = model;\n\n // initialise value, if it's undefined\n let value = model.get();\n this.wasUndefined = value === undefined;\n\n if (value === undefined && this.getInitialValue) {\n value = this.getInitialValue();\n model.set(value);\n }\n this.lastVal(true, value);\n\n const parentForm = findElement(this.element, false, 'form');\n if (parentForm) {\n this.resetValue = value;\n parentForm.formBindings.push(this);\n }\n }\n\n bind() {\n this.model.registerTwowayBinding(this);\n }\n\n handleChange() {\n const value = this.getValue();\n if (this.lastVal() === value) return;\n\n runloop.start();\n this.attribute.locked = true;\n this.model.set(value);\n this.lastVal(true, value);\n\n // if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n if (this.model.get() !== value) this.attribute.locked = false;\n else runloop.scheduleTask(() => (this.attribute.locked = false));\n\n runloop.end();\n }\n\n lastVal(setting, value) {\n if (setting) this.lastValue = value;\n else return this.lastValue;\n }\n\n rebind(next, previous) {\n if (this.model && this.model === previous) previous.unregisterTwowayBinding(this);\n if (next) {\n this.model = next;\n runloop.scheduleTask(() => next.registerTwowayBinding(this));\n }\n }\n\n rebound() {\n if (this.model) this.model.unregisterTwowayBinding(this);\n this.model = this.attribute.interpolator.model;\n this.model.registerTwowayBinding(this);\n }\n\n render() {\n this.node = this.element.node;\n this.node._ractive.binding = this;\n this.rendered = true; // TODO is this used anywhere?\n }\n\n setFromNode(node) {\n this.model.set(node.value);\n }\n\n unbind() {\n this.model.unregisterTwowayBinding(this);\n }\n}\n\nBinding.prototype.unrender = noop;\n","// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nexport default function handleDomEvent() {\n this._ractive.binding.handleChange();\n}\n","import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class CheckboxBinding extends Binding {\n constructor(element) {\n super(element, 'checked');\n }\n\n render() {\n super.render();\n\n this.element.on('change', handleDomEvent);\n\n if (this.node.attachEvent) {\n this.element.on('click', handleDomEvent);\n }\n }\n\n unrender() {\n this.element.off('change', handleDomEvent);\n this.element.off('click', handleDomEvent);\n }\n\n getInitialValue() {\n return !!this.element.getAttribute('checked');\n }\n\n getValue() {\n return this.node.checked;\n }\n\n setFromNode(node) {\n this.model.set(node.checked);\n }\n}\n","import { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\n\nexport default function getBindingGroup(group, model, getValue) {\n const hash = `${group}-bindingGroup`;\n return model[hash] || (model[hash] = new BindingGroup(hash, model, getValue));\n}\n\nclass BindingGroup {\n constructor(hash, model, getValue) {\n this.model = model;\n this.hash = hash;\n this.getValue = () => {\n this.value = getValue.call(this);\n return this.value;\n };\n\n this.bindings = [];\n }\n\n add(binding) {\n this.bindings.push(binding);\n }\n\n bind() {\n this.value = this.model.get();\n this.model.registerTwowayBinding(this);\n this.bound = true;\n }\n\n remove(binding) {\n removeFromArray(this.bindings, binding);\n if (!this.bindings.length) {\n this.unbind();\n }\n }\n\n unbind() {\n this.model.unregisterTwowayBinding(this);\n this.bound = false;\n delete this.model[this.hash];\n }\n}\n\nBindingGroup.prototype.rebind = Binding.prototype.rebind;\n","import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\nimport { isArray } from 'utils/is';\n\nconst push = [].push;\n\nfunction getValue() {\n const all = this.bindings\n .filter(b => b.node && b.node.checked)\n .map(b => b.element.getAttribute('value'));\n const res = [];\n all.forEach(v => {\n if (!this.bindings[0].arrayContains(res, v)) res.push(v);\n });\n return res;\n}\n\nexport default class CheckboxNameBinding extends Binding {\n constructor(element) {\n super(element, 'name');\n\n this.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n // Each input has a reference to an array containing it and its\n // group, as two-way binding depends on being able to ascertain\n // the status of all inputs within the group\n this.group = getBindingGroup('checkboxes', this.model, getValue);\n this.group.add(this);\n\n if (this.noInitialValue) {\n this.group.noInitialValue = true;\n }\n\n // If no initial value was set, and this input is checked, we\n // update the model\n if (this.group.noInitialValue && this.element.getAttribute('checked')) {\n const existingValue = this.model.get();\n const bindingValue = this.element.getAttribute('value');\n\n if (!this.arrayContains(existingValue, bindingValue)) {\n push.call(existingValue, bindingValue); // to avoid triggering runloop with array adaptor\n }\n }\n }\n\n bind() {\n if (!this.group.bound) {\n this.group.bind();\n }\n }\n\n getInitialValue() {\n // This only gets called once per group (of inputs that\n // share a name), because it only gets called if there\n // isn't an initial value. By the same token, we can make\n // a note of that fact that there was no initial value,\n // and populate it using any `checked` attributes that\n // exist (which users should avoid, but which we should\n // support anyway to avoid breaking expectations)\n this.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n return [];\n }\n\n getValue() {\n return this.group.value;\n }\n\n handleChange() {\n this.isChecked = this.element.node.checked;\n this.group.value = this.model.get();\n const value = this.element.getAttribute('value');\n if (this.isChecked && !this.arrayContains(this.group.value, value)) {\n this.group.value.push(value);\n } else if (!this.isChecked && this.arrayContains(this.group.value, value)) {\n this.removeFromArray(this.group.value, value);\n }\n // make sure super knows there's a change\n this.lastValue = null;\n super.handleChange();\n }\n\n render() {\n super.render();\n\n const node = this.node;\n\n const existingValue = this.model.get();\n const bindingValue = this.element.getAttribute('value');\n\n if (isArray(existingValue)) {\n this.isChecked = this.arrayContains(existingValue, bindingValue);\n } else {\n this.isChecked = this.element.compare(existingValue, bindingValue);\n }\n node.name = '{{' + this.model.getKeypath() + '}}';\n node.checked = this.isChecked;\n\n this.element.on('change', handleDomEvent);\n\n // in case of IE emergency, bind to click event as well\n if (this.node.attachEvent) {\n this.element.on('click', handleDomEvent);\n }\n }\n\n setFromNode(node) {\n this.group.bindings.forEach(binding => (binding.wasUndefined = true));\n\n if (node.checked) {\n const valueSoFar = this.group.getValue();\n valueSoFar.push(this.element.getAttribute('value'));\n\n this.group.model.set(valueSoFar);\n }\n }\n\n unbind() {\n this.group.remove(this);\n }\n\n unrender() {\n const el = this.element;\n\n el.off('change', handleDomEvent);\n el.off('click', handleDomEvent);\n }\n\n arrayContains(selectValue, optionValue) {\n let i = selectValue.length;\n while (i--) {\n if (this.element.compare(optionValue, selectValue[i])) return true;\n }\n return false;\n }\n\n removeFromArray(array, item) {\n if (!array) return;\n let i = array.length;\n while (i--) {\n if (this.element.compare(item, array[i])) {\n array.splice(i, 1);\n }\n }\n }\n}\n","import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class ContentEditableBinding extends Binding {\n getInitialValue() {\n return this.element.fragment ? this.element.fragment.toString() : '';\n }\n\n getValue() {\n return this.element.node.innerHTML;\n }\n\n render() {\n super.render();\n\n const el = this.element;\n\n el.on('change', handleDomEvent);\n el.on('blur', handleDomEvent);\n\n if (!this.ractive.lazy) {\n el.on('input', handleDomEvent);\n\n if (this.node.attachEvent) {\n el.on('keyup', handleDomEvent);\n }\n }\n }\n\n setFromNode(node) {\n this.model.set(node.innerHTML);\n }\n\n unrender() {\n const el = this.element;\n\n el.off('blur', handleDomEvent);\n el.off('change', handleDomEvent);\n el.off('input', handleDomEvent);\n el.off('keyup', handleDomEvent);\n }\n}\n","import { isNumeric } from 'utils/is';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nfunction handleBlur() {\n handleDomEvent.call(this);\n\n const value = this._ractive.binding.model.get();\n this.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay(delay) {\n let timeout;\n\n return function() {\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n const binding = this._ractive.binding;\n if (binding.rendered) handleDomEvent.call(this);\n timeout = null;\n }, delay);\n };\n}\n\nexport default class GenericBinding extends Binding {\n getInitialValue() {\n return '';\n }\n\n getValue() {\n return this.node.value;\n }\n\n render() {\n super.render();\n\n // any lazy setting for this element overrides the root\n // if the value is a number, it's a timeout\n let lazy = this.ractive.lazy;\n let timeout = false;\n const el = this.element;\n\n if ('lazy' in this.element) {\n lazy = this.element.lazy;\n }\n\n if (isNumeric(lazy)) {\n timeout = +lazy;\n lazy = false;\n }\n\n this.handler = timeout ? handleDelay(timeout) : handleDomEvent;\n\n const node = this.node;\n\n el.on('change', handleDomEvent);\n\n if (node.type !== 'file') {\n if (!lazy) {\n el.on('input', this.handler);\n\n // IE is a special snowflake\n if (node.attachEvent) {\n el.on('keyup', this.handler);\n }\n }\n\n el.on('blur', handleBlur);\n }\n }\n\n unrender() {\n const el = this.element;\n this.rendered = false;\n\n el.off('change', handleDomEvent);\n el.off('input', this.handler);\n el.off('keyup', this.handler);\n el.off('blur', handleBlur);\n }\n}\n","import GenericBinding from './GenericBinding';\n\nexport default class FileBinding extends GenericBinding {\n getInitialValue() {\n /* istanbul ignore next */\n return undefined;\n }\n\n getValue() {\n /* istanbul ignore next */\n return this.node.files;\n }\n\n render() {\n /* istanbul ignore next */\n this.element.lazy = false;\n /* istanbul ignore next */\n super.render();\n }\n\n setFromNode(node) {\n /* istanbul ignore next */\n this.model.set(node.files);\n }\n}\n","import { toArray } from './array';\n\nexport default function getSelectedOptions(select) {\n /* istanbul ignore next */\n return select.selectedOptions\n ? toArray(select.selectedOptions)\n : select.options\n ? toArray(select.options).filter(option => option.selected)\n : [];\n}\n","import { arrayContentsMatch } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class MultipleSelectBinding extends Binding {\n getInitialValue() {\n return this.element.options\n .filter(option => option.getAttribute('selected'))\n .map(option => option.getAttribute('value'));\n }\n\n getValue() {\n const options = this.element.node.options;\n const len = options.length;\n\n const selectedValues = [];\n\n for (let i = 0; i < len; i += 1) {\n const option = options[i];\n\n if (option.selected) {\n const optionValue = option._ractive ? option._ractive.value : option.value;\n selectedValues.push(optionValue);\n }\n }\n\n return selectedValues;\n }\n\n handleChange() {\n const attribute = this.attribute;\n const previousValue = attribute.getValue();\n\n const value = this.getValue();\n\n if (previousValue === undefined || !arrayContentsMatch(value, previousValue)) {\n super.handleChange();\n }\n\n return this;\n }\n\n render() {\n super.render();\n\n this.element.on('change', handleDomEvent);\n\n if (this.model.get() === undefined) {\n // get value from DOM, if possible\n this.handleChange();\n }\n }\n\n setFromNode(node) {\n const selectedOptions = getSelectedOptions(node);\n let i = selectedOptions.length;\n const result = new Array(i);\n\n while (i--) {\n const option = selectedOptions[i];\n result[i] = option._ractive ? option._ractive.value : option.value;\n }\n\n this.model.set(result);\n }\n\n unrender() {\n this.element.off('change', handleDomEvent);\n }\n}\n","import GenericBinding from './GenericBinding';\n\nexport default class NumericBinding extends GenericBinding {\n getInitialValue() {\n return undefined;\n }\n\n getValue() {\n const value = parseFloat(this.node.value);\n return isNaN(value) ? undefined : value;\n }\n\n setFromNode(node) {\n const value = parseFloat(node.value);\n if (!isNaN(value)) this.model.set(value);\n }\n}\n","import runloop from 'src/global/runloop';\nimport { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nconst siblings = {};\n\nfunction getSiblings(hash) {\n return siblings[hash] || (siblings[hash] = []);\n}\n\nexport default class RadioBinding extends Binding {\n constructor(element) {\n super(element, 'checked');\n\n this.siblings = getSiblings(this.ractive._guid + this.element.getAttribute('name'));\n this.siblings.push(this);\n }\n\n getValue() {\n return this.node.checked;\n }\n\n handleChange() {\n runloop.start();\n\n this.siblings.forEach(binding => {\n binding.model.set(binding.getValue());\n });\n\n runloop.end();\n }\n\n render() {\n super.render();\n\n this.element.on('change', handleDomEvent);\n\n if (this.node.attachEvent) {\n this.element.on('click', handleDomEvent);\n }\n }\n\n setFromNode(node) {\n this.model.set(node.checked);\n }\n\n unbind() {\n removeFromArray(this.siblings, this);\n }\n\n unrender() {\n this.element.off('change', handleDomEvent);\n this.element.off('click', handleDomEvent);\n }\n}\n","import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\n\nfunction getValue() {\n const checked = this.bindings.filter(b => b.node.checked);\n if (checked.length > 0) {\n return checked[0].element.getAttribute('value');\n }\n}\n\nexport default class RadioNameBinding extends Binding {\n constructor(element) {\n super(element, 'name');\n\n this.group = getBindingGroup('radioname', this.model, getValue);\n this.group.add(this);\n\n if (element.checked) {\n this.group.value = this.getValue();\n }\n\n this.attribute.interpolator.pathChanged = () => this.updateName();\n }\n\n bind() {\n if (!this.group.bound) {\n this.group.bind();\n }\n }\n\n getInitialValue() {\n if (this.element.getAttribute('checked')) {\n return this.element.getAttribute('value');\n }\n }\n\n getValue() {\n return this.element.getAttribute('value');\n }\n\n handleChange() {\n // If this <input> is the one that's checked, then the value of its\n // `name` model gets set to its value\n if (this.node.checked) {\n this.group.value = this.getValue();\n super.handleChange();\n }\n\n this.updateName();\n }\n\n lastVal(setting, value) {\n if (!this.group) return;\n if (setting) this.group.lastValue = value;\n else return this.group.lastValue;\n }\n\n rebind(next, previous) {\n super.rebind(next, previous);\n this.updateName();\n }\n\n rebound(update) {\n super.rebound(update);\n this.updateName();\n }\n\n render() {\n super.render();\n\n const node = this.node;\n\n this.updateName();\n node.checked = this.element.compare(this.model.get(), this.element.getAttribute('value'));\n\n this.element.on('change', handleDomEvent);\n\n if (node.attachEvent) {\n this.element.on('click', handleDomEvent);\n }\n }\n\n setFromNode(node) {\n if (node.checked) {\n this.group.model.set(this.element.getAttribute('value'));\n }\n }\n\n unbind() {\n this.group.remove(this);\n }\n\n unrender() {\n const el = this.element;\n\n el.off('change', handleDomEvent);\n el.off('click', handleDomEvent);\n }\n\n updateName() {\n if (this.node) this.node.name = `{{${this.model.getKeypath()}}}`;\n }\n}\n","import runloop from 'src/global/runloop';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class SingleSelectBinding extends Binding {\n forceUpdate() {\n const value = this.getValue();\n\n if (value !== undefined) {\n this.attribute.locked = true;\n runloop.scheduleTask(() => (this.attribute.locked = false));\n this.model.set(value);\n }\n }\n\n getInitialValue() {\n if (this.element.getAttribute('value') !== undefined) {\n return;\n }\n\n const options = this.element.options;\n const len = options.length;\n\n if (!len) return;\n\n let value;\n let optionWasSelected;\n let i = len;\n\n // take the final selected option...\n while (i--) {\n const option = options[i];\n\n if (option.getAttribute('selected')) {\n if (!option.getAttribute('disabled')) {\n value = option.getAttribute('value');\n }\n\n optionWasSelected = true;\n break;\n }\n }\n\n // or the first non-disabled option, if none are selected\n if (!optionWasSelected) {\n while (++i < len) {\n if (!options[i].getAttribute('disabled')) {\n value = options[i].getAttribute('value');\n break;\n }\n }\n }\n\n // This is an optimisation (aka hack) that allows us to forgo some\n // other more expensive work\n // TODO does it still work? seems at odds with new architecture\n if (value !== undefined) {\n this.element.attributeByName.value.value = value;\n }\n\n return value;\n }\n\n getValue() {\n const options = this.node.options;\n const len = options.length;\n\n let i;\n for (i = 0; i < len; i += 1) {\n const option = options[i];\n\n if (options[i].selected && !options[i].disabled) {\n return option._ractive ? option._ractive.value : option.value;\n }\n }\n }\n\n render() {\n super.render();\n this.element.on('change', handleDomEvent);\n }\n\n setFromNode(node) {\n const option = getSelectedOptions(node)[0];\n this.model.set(option._ractive ? option._ractive.value : option.value);\n }\n\n unrender() {\n this.element.off('change', handleDomEvent);\n }\n}\n","import { INTERPOLATOR, TRIPLE } from 'config/types';\nimport { warnIfDebug } from 'utils/log';\nimport CheckboxBinding from './CheckboxBinding';\nimport CheckboxNameBinding from './CheckboxNameBinding';\nimport ContentEditableBinding from './ContentEditableBinding';\nimport FileBinding from './FileBinding';\nimport GenericBinding from './GenericBinding';\nimport MultipleSelectBinding from './MultipleSelectBinding';\nimport NumericBinding from './NumericBinding';\nimport RadioBinding from './RadioBinding';\nimport RadioNameBinding from './RadioNameBinding';\nimport SingleSelectBinding from './SingleSelectBinding';\n\nexport function isBindable(attribute) {\n // The fragment must be a single non-string fragment\n if (\n !attribute ||\n !attribute.template.f ||\n attribute.template.f.length !== 1 ||\n attribute.template.f[0].s\n )\n return false;\n\n // A binding is an interpolator `{{ }}`, yey.\n if (attribute.template.f[0].t === INTERPOLATOR) return true;\n\n // The above is probably the only true case. For the rest, show an appropriate\n // warning before returning false.\n\n // You can't bind a triple curly. HTML values on an attribute makes no sense.\n if (attribute.template.f[0].t === TRIPLE)\n warnIfDebug('It is not possible create a binding using a triple mustache.');\n\n return false;\n}\n\nexport default function selectBinding(element) {\n const name = element.name;\n const attributes = element.attributeByName;\n if (name !== 'input' && name !== 'textarea' && name !== 'select' && !attributes.contenteditable)\n return;\n const isBindableByValue = isBindable(attributes.value);\n const isBindableByContentEditable = isBindable(attributes.contenteditable);\n const isContentEditable = element.getAttribute('contenteditable');\n\n // contenteditable\n // Bind if the contenteditable is true or a binding that may become true.\n if ((isContentEditable || isBindableByContentEditable) && isBindableByValue)\n return ContentEditableBinding;\n\n // <input>\n if (name === 'input') {\n const type = element.getAttribute('type');\n\n if (type === 'radio') {\n const isBindableByName = isBindable(attributes.name);\n const isBindableByChecked = isBindable(attributes.checked);\n\n // For radios we can either bind the name or checked, but not both.\n // Name binding is handed instead.\n if (isBindableByName && isBindableByChecked) {\n warnIfDebug(\n 'A radio input can have two-way binding on its name attribute, or its checked attribute - not both',\n { ractive: element.root }\n );\n return RadioNameBinding;\n }\n\n if (isBindableByName) return RadioNameBinding;\n\n if (isBindableByChecked) return RadioBinding;\n\n // Dead end. Unknown binding on radio input.\n return null;\n }\n\n if (type === 'checkbox') {\n const isBindableByName = isBindable(attributes.name);\n const isBindableByChecked = isBindable(attributes.checked);\n\n // A checkbox with bindings for both name and checked. Checked treated as\n // the checkbox value, name is treated as a regular binding.\n //\n // See https://github.com/ractivejs/ractive/issues/1749\n if (isBindableByName && isBindableByChecked) return CheckboxBinding;\n\n if (isBindableByName) return CheckboxNameBinding;\n\n if (isBindableByChecked) return CheckboxBinding;\n\n // Dead end. Unknown binding on checkbox input.\n return null;\n }\n\n if (type === 'file' && isBindableByValue) return FileBinding;\n\n if (type === 'number' && isBindableByValue) return NumericBinding;\n\n if (type === 'range' && isBindableByValue) return NumericBinding;\n\n // Some input of unknown type (browser usually falls back to text).\n if (isBindableByValue) return GenericBinding;\n\n // Dead end. Some unknown input and an unbindable.\n return null;\n }\n\n // <select>\n if (name === 'select' && isBindableByValue) {\n return element.getAttribute('multiple') ? MultipleSelectBinding : SingleSelectBinding;\n }\n\n // <textarea>\n if (name === 'textarea' && isBindableByValue) return GenericBinding;\n\n // Dead end. Some unbindable element.\n return null;\n}\n","import { ATTRIBUTE, BINDING_FLAG, DECORATOR, DELEGATE_FLAG, EVENT, TRANSITION } from 'config/types';\nimport { win } from 'config/environment';\nimport { html, svg } from 'config/namespaces';\nimport { toArray, addToArray, removeFromArray } from 'utils/array';\nimport { escapeHtml, voidElements } from 'utils/html';\nimport { createElement, detachNode, matches, safeAttributeString } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport Context from 'shared/Context';\nimport { destroyed } from 'shared/methodCallers';\nimport { ContainerItem } from './shared/Item';\nimport Fragment from '../Fragment';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport findElement from './shared/findElement';\nimport selectBinding from './element/binding/selectBinding';\nimport { assign, create, defineProperty, keys } from 'utils/object';\nimport { isString } from 'utils/is';\n\nconst endsWithSemi = /;\\s*$/;\n\nexport default class Element extends ContainerItem {\n constructor(options) {\n super(options);\n\n this.name = options.template.e.toLowerCase();\n\n // find parent element\n this.parent = findElement(this.up, false);\n\n if (this.parent && this.parent.name === 'option') {\n throw new Error(\n `An <option> element cannot contain other elements (encountered <${this.name}>)`\n );\n }\n\n this.decorators = [];\n\n // create attributes\n this.attributeByName = {};\n\n let attrs;\n let n, attr, val, cls, name, template, leftovers;\n\n const m = this.template.m;\n const len = (m && m.length) || 0;\n\n for (let i = 0; i < len; i++) {\n template = m[i];\n if (template.g) {\n (this.statics || (this.statics = {}))[template.n] = isString(template.f)\n ? template.f\n : template.n;\n } else {\n switch (template.t) {\n case ATTRIBUTE:\n case BINDING_FLAG:\n case DECORATOR:\n case EVENT:\n case TRANSITION:\n attr = createItem({\n owner: this,\n up: this.up,\n template\n });\n\n n = template.n;\n\n attrs = attrs || (attrs = this.attributes = []);\n\n if (n === 'value') val = attr;\n else if (n === 'name') name = attr;\n else if (n === 'class') cls = attr;\n else attrs.push(attr);\n\n break;\n\n case DELEGATE_FLAG:\n this.delegate = false;\n break;\n\n default:\n (leftovers || (leftovers = [])).push(template);\n break;\n }\n }\n }\n\n if (val) attrs.push(val);\n if (name) attrs.push(name);\n if (cls) attrs.unshift(cls);\n\n if (leftovers) {\n (attrs || (this.attributes = [])).push(\n new ConditionalAttribute({\n owner: this,\n up: this.up,\n template: leftovers\n })\n );\n\n // empty leftovers array\n leftovers = [];\n }\n\n // create children\n if (options.template.f && !options.deferContent) {\n this.fragment = new Fragment({\n template: options.template.f,\n owner: this,\n cssIds: null\n });\n }\n\n this.binding = null; // filled in later\n }\n\n bind() {\n const attrs = this.attributes;\n if (attrs) {\n attrs.binding = true;\n const len = attrs.length;\n for (let i = 0; i < len; i++) attrs[i].bind();\n attrs.binding = false;\n }\n\n if (this.fragment) this.fragment.bind();\n\n // create two-way binding if necessary\n if (!this.binding) this.recreateTwowayBinding();\n else this.binding.bind();\n }\n\n createTwowayBinding() {\n if ('twoway' in this ? this.twoway : this.ractive.twoway) {\n const Binding = selectBinding(this);\n if (Binding) {\n const binding = new Binding(this);\n if (binding && binding.model) return binding;\n }\n }\n }\n\n destroyed() {\n if (this.attributes) this.attributes.forEach(destroyed);\n if (this.fragment) this.fragment.destroyed();\n }\n\n detach() {\n // if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n if (!this.rendered) this.destroyed();\n\n return detachNode(this.node);\n }\n\n find(selector, options) {\n if (this.node && matches(this.node, selector)) return this.node;\n if (this.fragment) {\n return this.fragment.find(selector, options);\n }\n }\n\n findAll(selector, options) {\n const { result } = options;\n\n if (matches(this.node, selector)) {\n result.push(this.node);\n }\n\n if (this.fragment) {\n this.fragment.findAll(selector, options);\n }\n }\n\n findNextNode() {\n return null;\n }\n\n firstNode() {\n return this.node;\n }\n\n getAttribute(name) {\n if (this.statics && name in this.statics) return this.statics[name];\n const attribute = this.attributeByName[name];\n return attribute ? attribute.getValue() : undefined;\n }\n\n getContext(...assigns) {\n if (this.fragment) return this.fragment.getContext(...assigns);\n\n if (!this.ctx) this.ctx = new Context(this.up, this);\n assigns.unshift(create(this.ctx));\n return assign.apply(null, assigns);\n }\n\n off(event, callback, capture = false) {\n const delegate = this.up.delegate;\n const ref = this.listeners && this.listeners[event];\n\n if (!ref) return;\n removeFromArray(ref, callback);\n\n if (delegate) {\n const listeners =\n (delegate.listeners || (delegate.listeners = [])) &&\n (delegate.listeners[event] || (delegate.listeners[event] = []));\n if (listeners.refs && !--listeners.refs) delegate.off(event, delegateHandler, true);\n } else if (this.rendered) {\n const n = this.node;\n const add = n.addEventListener;\n const rem = n.removeEventListener;\n\n if (!ref.length) {\n rem.call(n, event, handler, capture);\n } else if (ref.length && !ref.refs && capture) {\n rem.call(n, event, handler, true);\n add.call(n, event, handler, false);\n }\n }\n }\n\n on(event, callback, capture = false) {\n const delegate = this.up.delegate;\n const ref = (this.listeners || (this.listeners = {}))[event] || (this.listeners[event] = []);\n\n if (delegate) {\n const listeners =\n ((delegate.listeners || (delegate.listeners = [])) && delegate.listeners[event]) ||\n (delegate.listeners[event] = []);\n if (!listeners.refs) {\n listeners.refs = 0;\n delegate.on(event, delegateHandler, true);\n listeners.refs++;\n } else {\n listeners.refs++;\n }\n } else if (this.rendered) {\n const n = this.node;\n const add = n.addEventListener;\n const rem = n.removeEventListener;\n\n if (!ref.length) {\n add.call(n, event, handler, capture);\n } else if (ref.length && !ref.refs && capture) {\n rem.call(n, event, handler, false);\n add.call(n, event, handler, true);\n }\n }\n\n addToArray(this.listeners[event], callback);\n }\n\n recreateTwowayBinding() {\n if (this.binding) {\n this.binding.unbind();\n this.binding.unrender();\n }\n\n if ((this.binding = this.createTwowayBinding())) {\n this.binding.bind();\n if (this.rendered) this.binding.render();\n }\n }\n\n rebound(update) {\n super.rebound(update);\n if (this.attributes) this.attributes.forEach(x => x.rebound(update));\n if (this.binding) this.binding.rebound(update);\n }\n\n render(target, occupants) {\n // TODO determine correct namespace\n this.namespace = getNamespace(this);\n\n let node;\n let existing = false;\n\n if (occupants) {\n let n;\n while ((n = occupants.shift())) {\n if (\n n.nodeName.toUpperCase() === this.template.e.toUpperCase() &&\n n.namespaceURI === this.namespace\n ) {\n this.node = node = n;\n existing = true;\n break;\n } else {\n detachNode(n);\n }\n }\n }\n\n if (!existing && this.node) {\n node = this.node;\n target.appendChild(node);\n existing = true;\n }\n\n if (!node) {\n const name = this.template.e;\n node = createElement(\n this.namespace === html ? name.toLowerCase() : name,\n this.namespace,\n this.getAttribute('is')\n );\n this.node = node;\n }\n\n if (this.statics) {\n keys(this.statics).forEach(k => {\n node.setAttribute(k, this.statics[k]);\n });\n }\n\n // tie the node to this vdom element\n defineProperty(node, '_ractive', {\n value: {\n proxy: this\n },\n configurable: true\n });\n\n if (existing && this.foundNode) this.foundNode(node);\n\n // register intro before rendering content so children can find the intro\n const intro = this.intro;\n if (intro && intro.shouldFire('intro')) {\n intro.isIntro = true;\n intro.isOutro = false;\n runloop.registerTransition(intro);\n }\n\n if (this.fragment) {\n const children = existing ? toArray(node.childNodes) : undefined;\n\n this.fragment.render(node, children);\n\n // clean up leftover children\n if (children) {\n children.forEach(detachNode);\n }\n }\n\n if (existing) {\n // store initial values for two-way binding\n if (this.binding && this.binding.wasUndefined) this.binding.setFromNode(node);\n // remove unused attributes\n let i = node.attributes.length;\n while (i--) {\n const name = node.attributes[i].name;\n if (!(name in this.attributeByName) && (!this.statics || !(name in this.statics)))\n node.removeAttribute(name);\n }\n }\n\n // Is this a top-level node of a component? If so, we may need to add\n // a data-ractive-css attribute, for CSS encapsulation\n if (this.up.cssIds) {\n node.setAttribute('data-ractive-css', this.up.cssIds.map(x => `{${x}}`).join(' '));\n }\n\n if (this.attributes) {\n const len = this.attributes.length;\n for (let i = 0; i < len; i++) this.attributes[i].render();\n }\n if (this.binding) this.binding.render();\n\n if (!this.up.delegate && this.listeners) {\n const ls = this.listeners;\n for (const k in ls) {\n if (ls[k] && ls[k].length) this.node.addEventListener(k, handler, !!ls[k].refs);\n }\n }\n\n if (!existing) {\n target.appendChild(node);\n }\n\n this.rendered = true;\n }\n\n toString() {\n const tagName = this.template.e;\n\n let attrs = (this.attributes && this.attributes.map(stringifyAttribute).join('')) || '';\n\n if (this.statics)\n keys(this.statics).forEach(\n k => k !== 'class' && k !== 'style' && (attrs = ` ${k}=\"${this.statics[k]}\"` + attrs)\n );\n\n // Special case - selected options\n if (this.name === 'option' && this.isSelected()) {\n attrs += ' selected';\n }\n\n // Special case - two-way radio name bindings\n if (this.name === 'input' && inputIsCheckedRadio(this)) {\n attrs += ' checked';\n }\n\n // Special case style and class attributes and directives\n let style = this.statics ? this.statics.style : undefined;\n let cls = this.statics ? this.statics.class : undefined;\n this.attributes &&\n this.attributes.forEach(attr => {\n if (attr.name === 'class') {\n cls = (cls || '') + (cls ? ' ' : '') + safeAttributeString(attr.getString());\n } else if (attr.name === 'style') {\n style = (style || '') + (style ? ' ' : '') + safeAttributeString(attr.getString());\n if (style && !endsWithSemi.test(style)) style += ';';\n } else if (attr.style) {\n style =\n (style || '') +\n (style ? ' ' : '') +\n `${attr.style}: ${safeAttributeString(attr.getString())};`;\n } else if (attr.inlineClass && attr.getValue()) {\n cls = (cls || '') + (cls ? ' ' : '') + attr.inlineClass;\n }\n });\n // put classes first, then inline style\n if (style !== undefined) attrs = ' style' + (style ? `=\"${style}\"` : '') + attrs;\n if (cls !== undefined) attrs = ' class' + (cls ? `=\"${cls}\"` : '') + attrs;\n\n if (this.up.cssIds) {\n attrs += ` data-ractive-css=\"${this.up.cssIds.map(x => `{${x}}`).join(' ')}\"`;\n }\n\n let str = `<${tagName}${attrs}>`;\n\n if (voidElements[this.name.toLowerCase()]) return str;\n\n // Special case - textarea\n if (this.name === 'textarea' && this.getAttribute('value') !== undefined) {\n str += escapeHtml(this.getAttribute('value'));\n } else if (this.getAttribute('contenteditable') !== undefined) {\n // Special case - contenteditable\n str += this.getAttribute('value') || '';\n }\n\n if (this.fragment) {\n str += this.fragment.toString(!/^(?:script|style)$/i.test(this.template.e)); // escape text unless script/style\n }\n\n str += `</${tagName}>`;\n return str;\n }\n\n unbind() {\n const attrs = this.attributes;\n if (attrs) {\n attrs.unbinding = true;\n const len = attrs.length;\n for (let i = 0; i < len; i++) attrs[i].unbind();\n attrs.unbinding = false;\n }\n\n if (this.binding) this.binding.unbind();\n if (this.fragment) this.fragment.unbind();\n }\n\n unrender(shouldDestroy) {\n if (!this.rendered) return;\n this.rendered = false;\n\n // unrendering before intro completed? complete it now\n // TODO should be an API for aborting transitions\n const transition = this.intro;\n if (transition && transition.complete) transition.complete();\n\n // Detach as soon as we can\n if (this.name === 'option') {\n // <option> elements detach immediately, so that\n // their parent <select> element syncs correctly, and\n // since option elements can't have transitions anyway\n this.detach();\n } else if (shouldDestroy) {\n runloop.detachWhenReady(this);\n }\n\n // outro transition\n const outro = this.outro;\n if (outro && outro.shouldFire('outro')) {\n outro.isIntro = false;\n outro.isOutro = true;\n runloop.registerTransition(outro);\n }\n\n if (this.fragment) this.fragment.unrender();\n\n if (this.binding) this.binding.unrender();\n }\n\n update() {\n if (this.dirty) {\n this.dirty = false;\n\n const attrs = this.attributes;\n if (attrs) {\n const len = attrs.length;\n for (let i = 0; i < len; i++) attrs[i].update();\n }\n\n if (this.fragment) this.fragment.update();\n }\n }\n}\n\nfunction inputIsCheckedRadio(element) {\n const nameAttr = element.attributeByName.name;\n return (\n element.getAttribute('type') === 'radio' &&\n (nameAttr || {}).interpolator &&\n element.getAttribute('value') === nameAttr.interpolator.model.get()\n );\n}\n\nfunction stringifyAttribute(attribute) {\n const str = attribute.toString();\n return str ? ' ' + str : '';\n}\n\nfunction getNamespace(element) {\n // Use specified namespace...\n const xmlns = element.getAttribute('xmlns');\n if (xmlns) return xmlns;\n\n // ...or SVG namespace, if this is an <svg> element\n if (element.name === 'svg') return svg;\n\n const parent = element.parent;\n\n if (parent) {\n // ...or HTML, if the parent is a <foreignObject>\n if (parent.name === 'foreignobject') return html;\n\n // ...or inherit from the parent node\n return parent.node.namespaceURI;\n }\n\n return element.ractive.el.namespaceURI;\n}\n\nfunction delegateHandler(ev) {\n const name = ev.type;\n const end = ev.currentTarget;\n const endEl = end._ractive && end._ractive.proxy;\n let node = ev.target;\n let bubble = true;\n let listeners;\n\n // starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener\n while (bubble && node && node !== end) {\n const proxy = node._ractive && node._ractive.proxy;\n if (proxy && proxy.up.delegate === endEl && shouldFire(ev, node, end)) {\n listeners = proxy.listeners && proxy.listeners[name];\n\n if (listeners) {\n const len = listeners.length;\n for (let i = 0; i < len; i++) bubble = listeners[i].call(node, ev) !== false && bubble;\n }\n }\n\n node = node.parentNode || node.correspondingUseElement; // SVG with a <use> element in certain environments\n }\n\n return bubble;\n}\n\nconst UIEvent = win !== null ? win.UIEvent : null;\nfunction shouldFire(event, start, end) {\n if (UIEvent && event instanceof UIEvent) {\n let node = start;\n while (node && node !== end) {\n if (node.disabled) return false;\n node = node.parentNode || node.correspondingUseElement;\n }\n }\n\n return true;\n}\n\nfunction handler(ev) {\n const el = this._ractive.proxy;\n let listeners;\n if (el.listeners && (listeners = el.listeners[ev.type])) {\n const len = listeners.length;\n for (let i = 0; i < len; i++) listeners[i].call(this, ev);\n }\n}\n","import runloop from 'src/global/runloop';\nimport Element from '../../Element';\n\nexport default class Form extends Element {\n constructor(options) {\n super(options);\n this.formBindings = [];\n }\n\n render(target, occupants) {\n super.render(target, occupants);\n this.on('reset', handleReset);\n }\n\n unrender(shouldDestroy) {\n this.off('reset', handleReset);\n super.unrender(shouldDestroy);\n }\n}\n\nfunction handleReset() {\n const element = this._ractive.proxy;\n\n runloop.start();\n element.formBindings.forEach(updateModel);\n runloop.end();\n}\n\nfunction updateModel(binding) {\n binding.model.set(binding.resetValue);\n}\n","import { fatal } from 'utils/log';\nimport runloop from 'src/global/runloop';\nimport { win } from 'config/environment';\n\n// because IE\nconst whitelist = {\n animationend: 1,\n animationiteration: 1,\n animationstart: 1,\n transitioncancel: 1,\n transitionend: 1,\n transitionstart: 1,\n transitionrun: 1\n};\n\nclass DOMEvent {\n constructor(name, owner) {\n if (name.indexOf('*') !== -1) {\n fatal(\n `Only component proxy-events may contain \"*\" wildcards, <${\n owner.name\n } on-${name}=\"...\"/> is not valid`\n );\n }\n\n this.name = name;\n this.owner = owner;\n this.handler = null;\n }\n\n bind() {}\n\n render(directive) {\n const name = this.name;\n\n const register = () => {\n const node = this.owner.node;\n const on = `on${name}`;\n\n // this is probably a custom event fired from a decorator or manually\n if (!(on in node) && !(on in win) && !whitelist[name]) return;\n\n this.owner.on(\n name,\n (this.handler = event => {\n return directive.fire({\n node,\n original: event,\n event,\n name\n });\n })\n );\n };\n\n if (name !== 'load') {\n // schedule events so that they take place after twoway binding\n runloop.scheduleTask(register, true);\n } else {\n // unless its a load event\n register();\n }\n }\n\n unbind() {}\n\n unrender() {\n if (this.handler) this.owner.off(this.name, this.handler);\n }\n}\n\nclass CustomEvent {\n constructor(eventPlugin, owner, name, args) {\n this.eventPlugin = eventPlugin;\n this.owner = owner;\n this.name = name;\n this.handler = null;\n this.args = args;\n }\n\n bind() {}\n\n render(directive) {\n runloop.scheduleTask(() => {\n const node = this.owner.node;\n\n this.handler = this.eventPlugin.apply(\n this.owner.ractive,\n [\n node,\n (event = {}) => {\n if (event.original) event.event = event.original;\n else event.original = event.event;\n\n event.name = this.name;\n event.node = event.node || node;\n return directive.fire(event);\n }\n ].concat(this.args || [])\n );\n });\n }\n\n unbind() {}\n\n unrender() {\n this.handler.teardown();\n }\n}\n\nexport { DOMEvent, CustomEvent };\n","import Context from '../../../shared/Context';\n\nexport default class RactiveEvent {\n constructor(component, name) {\n this.component = component;\n this.name = name;\n this.handler = null;\n }\n\n bind(directive) {\n const ractive = this.component.instance;\n\n this.handler = ractive.on(this.name, (...args) => {\n // watch for reproxy\n if (args[0] instanceof Context) {\n const ctx = args.shift();\n ctx.component = ractive;\n directive.fire(ctx, args);\n } else {\n directive.fire({}, args);\n }\n\n // cancel bubbling\n return false;\n });\n }\n\n render() {}\n\n unbind() {\n this.handler.cancel();\n }\n\n unrender() {}\n}\n","import { ANCHOR, COMPONENT } from 'config/types';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport fireEvent from 'src/events/fireEvent';\nimport { splitKeypath } from 'shared/keypaths';\nimport { findInViewHierarchy } from 'shared/registry';\nimport findElement from './findElement';\nimport { DOMEvent, CustomEvent } from '../element/ElementEvents';\nimport RactiveEvent from '../component/RactiveEvent';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport Context from 'src/shared/Context';\nimport { isArray, isString } from 'utils/is';\nimport getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nconst specialPattern = /^(event|arguments|@node|@event|@context)(\\..+)?$/;\nconst dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nexport default class EventDirective {\n constructor(options) {\n this.owner = options.owner || options.up.owner || findElement(options.up);\n this.element = this.owner.attributeByName ? this.owner : findElement(options.up, true);\n this.template = options.template;\n this.up = options.up;\n this.ractive = options.up.ractive;\n this.events = [];\n }\n\n bind() {\n if (this.element.type === COMPONENT || this.element.type === ANCHOR) {\n this.template.n.forEach(n => {\n this.events.push(new RactiveEvent(this.element, n));\n });\n } else {\n let args;\n if ((args = this.template.a)) {\n const rs = args.r.map(r => {\n const model = resolveReference(this.up, r);\n return model ? model.get() : undefined;\n });\n try {\n args = getFunction(args.s, rs.length).apply(null, rs);\n } catch (err) {\n args = null;\n warnIfDebug(\n `Failed to compute args for event on-${this.template.n.join('- ')}: ${err.message ||\n err}`\n );\n }\n }\n\n this.template.n.forEach(n => {\n const fn = findInViewHierarchy('events', this.ractive, n);\n if (fn) {\n this.events.push(new CustomEvent(fn, this.element, n, args));\n } else {\n this.events.push(new DOMEvent(n, this.element));\n }\n });\n }\n\n // method calls\n this.models = null;\n\n addToArray(this.element.events || (this.element.events = []), this);\n\n setupArgsFn(this, this.template);\n if (!this.fn) this.action = this.template.f;\n\n this.events.forEach(e => e.bind(this));\n }\n\n destroyed() {\n this.events.forEach(e => e.unrender());\n }\n\n fire(event, args = []) {\n const context =\n event instanceof Context && event.refire ? event : this.element.getContext(event);\n\n if (this.fn) {\n const values = [];\n\n const models = resolveArgs(this, this.template, this.up, {\n specialRef(ref) {\n const specialMatch = specialPattern.exec(ref);\n if (specialMatch) {\n // on-click=\"foo(event.node)\"\n return {\n special: specialMatch[1],\n keys: specialMatch[2] ? splitKeypath(specialMatch[2].substr(1)) : []\n };\n }\n\n const dollarMatch = dollarArgsPattern.exec(ref);\n if (dollarMatch) {\n // on-click=\"foo($1)\"\n return {\n special: 'arguments',\n keys: [dollarMatch[1] - 1].concat(\n dollarMatch[2] ? splitKeypath(dollarMatch[2].substr(1)) : []\n )\n };\n }\n }\n });\n\n if (models) {\n models.forEach(model => {\n if (!model) return values.push(undefined);\n\n if (model.special) {\n const which = model.special;\n let obj;\n\n if (which === '@node') {\n obj = this.element.node;\n } else if (which === '@event') {\n obj = event && event.event;\n } else if (which === 'event') {\n warnOnceIfDebug(\n `The event reference available to event directives is deprecated and should be replaced with @context and @event`\n );\n obj = context;\n } else if (which === '@context') {\n obj = context;\n } else {\n obj = args;\n }\n\n const keys = model.keys.slice();\n\n while (obj && keys.length) obj = obj[keys.shift()];\n return values.push(obj);\n }\n\n if (model.wrapper) {\n return values.push(model.wrapperValue);\n }\n\n values.push(model.get());\n });\n }\n\n // make event available as `this.event`\n const ractive = this.ractive;\n const oldEvent = ractive.event;\n\n ractive.event = context;\n const returned = this.fn.apply(ractive, values);\n let result = returned.pop();\n\n // Auto prevent and stop if return is explicitly false\n if (result === false) {\n const original = event ? event.original : undefined;\n if (original) {\n original.preventDefault && original.preventDefault();\n original.stopPropagation && original.stopPropagation();\n } else {\n warnOnceIfDebug(\n `handler '${this.template.n.join(\n ' '\n )}' returned false, but there is no event available to cancel`\n );\n }\n } else if (!returned.length && isArray(result) && isString(result[0])) {\n // watch for proxy events\n result = fireEvent(this.ractive, result.shift(), context, result);\n }\n\n ractive.event = oldEvent;\n\n return result;\n } else {\n return fireEvent(this.ractive, this.action, context, args);\n }\n }\n\n handleChange() {}\n\n render() {\n this.events.forEach(e => e.render(this));\n }\n\n toString() {\n return '';\n }\n\n unbind() {\n removeFromArray(this.element.events, this);\n this.events.forEach(e => e.unbind());\n }\n\n unrender() {\n this.events.forEach(e => e.unrender());\n }\n}\n\nconst proto = EventDirective.prototype;\nproto.firstNode = proto.rebound = proto.update = noop;\n","import { doc } from 'config/environment';\n\nexport default function progressiveText(item, target, occupants, text) {\n if (occupants) {\n let n = occupants[0];\n if (n && n.nodeType === 3) {\n const idx = n.nodeValue.indexOf(text);\n occupants.shift();\n\n if (idx === 0) {\n if (n.nodeValue.length !== text.length) {\n occupants.unshift(n.splitText(text.length));\n }\n } else {\n n.nodeValue = text;\n }\n } else {\n n = item.node = doc.createTextNode(text);\n if (occupants[0]) {\n target.insertBefore(n, occupants[0]);\n } else {\n target.appendChild(n);\n }\n }\n\n item.node = n;\n } else {\n if (!item.node) item.node = doc.createTextNode(text);\n target.appendChild(item.node);\n }\n}\n","import { rebindMatch } from 'shared/rebind';\nimport Item, { ContainerItem } from './Item';\nimport resolve from '../../resolvers/resolve';\nimport { assign } from 'utils/object';\n\nexport default class Mustache extends Item {\n constructor(options) {\n super(options);\n\n if (options.owner) this.parent = options.owner;\n\n this.isStatic = !!options.template.s;\n\n this.model = null;\n this.dirty = false;\n }\n\n bind(pre) {\n // yield mustaches and inner contexts should resolve in container context\n const start = this.template.y\n ? this.template.y.containerFragment\n : this.containerFragment || this.up;\n // try to find a model for this view\n const model = pre || resolve(start, this.template);\n\n if (model) {\n const value = model.get();\n\n if (this.isStatic) {\n this.model = { get: () => value };\n model.unreference();\n return;\n }\n\n model.register(this);\n this.model = model;\n }\n }\n\n handleChange() {\n this.bubble();\n }\n\n rebind(next, previous, safe) {\n if (this.isStatic) return;\n\n next = rebindMatch(this.template, next, previous, this.up);\n if (next === this.model) return false;\n\n if (this.model) {\n this.model.unregister(this);\n }\n if (next) next.addShuffleRegister(this, 'mark');\n this.model = next;\n if (!safe) this.handleChange();\n return true;\n }\n\n rebound(update) {\n if (this.model) {\n if (this.model.rebound) this.model.rebound(update);\n else {\n // check to see if the model actually changed...\n // yield mustaches and inner contexts should resolve in container context\n const start = this.template.y\n ? this.template.y.containerFragment\n : this.containerFragment || this.up;\n // try to find a model for this view\n const model = resolve(start, this.template);\n if (model !== this.model) {\n this.model.unregister(this);\n this.bind(model);\n }\n }\n\n if (update) this.bubble();\n }\n if (this.fragment) this.fragment.rebound(update);\n }\n\n unbind() {\n if (!this.isStatic) {\n this.model && this.model.unregister(this);\n this.model = undefined;\n }\n }\n}\n\nexport function MustacheContainer(options) {\n Mustache.call(this, options);\n}\n\nconst proto = (MustacheContainer.prototype = Object.create(ContainerItem.prototype));\n\nassign(proto, Mustache.prototype, { constructor: MustacheContainer });\n","import progressiveText from './shared/progressiveText';\nimport { escapeHtml } from 'utils/html';\nimport { safeToStringValue } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport Mustache from './shared/Mustache';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Interpolator extends Mustache {\n bubble() {\n if (this.owner) this.owner.bubble();\n super.bubble();\n }\n\n detach() {\n return detachNode(this.node);\n }\n\n firstNode() {\n return this.node;\n }\n\n getString() {\n return this.model ? safeToStringValue(this.model.get()) : '';\n }\n\n render(target, occupants) {\n if (inAttributes()) return;\n const value = (this.value = this.getString());\n\n this.rendered = true;\n\n progressiveText(this, target, occupants, value);\n }\n\n toString(escape) {\n const string = this.getString();\n return escape ? escapeHtml(string) : string;\n }\n\n unrender(shouldDestroy) {\n if (shouldDestroy) this.detach();\n this.rendered = false;\n }\n\n update() {\n if (this.dirty) {\n this.dirty = false;\n if (this.rendered) {\n const value = this.getString();\n if (value !== this.value) this.node.data = this.value = value;\n }\n }\n }\n\n valueOf() {\n return this.model ? this.model.get() : undefined;\n }\n}\n","import Element from '../../Element';\nimport { isFunction } from 'utils/is';\n\nexport default class Input extends Element {\n render(target, occupants) {\n super.render(target, occupants);\n this.node.defaultValue = this.node.value;\n }\n compare(value, attrValue) {\n const comparator = this.getAttribute('value-comparator');\n if (comparator) {\n if (isFunction(comparator)) {\n return comparator(value, attrValue);\n }\n if (value && attrValue) {\n return value[comparator] == attrValue[comparator];\n }\n }\n return value == attrValue;\n }\n}\n","import Parser from 'parse/Parser';\nimport readStringLiteral from 'parse/converters/expressions/primary/literal/readStringLiteral';\nimport readKey from 'parse/converters/expressions/shared/readKey';\nimport { hasOwn, keys } from 'utils/object';\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nconst specials = {\n true: true,\n false: false,\n null: null,\n undefined\n};\n\nconst specialsPattern = new RegExp('^(?:' + keys(specials).join('|') + ')');\nconst numberPattern = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nconst placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nconst placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nconst onlyWhitespace = /^\\s*$/;\n\nconst JsonParser = Parser.extend({\n init(str, options) {\n this.values = options.values;\n this.sp();\n },\n\n postProcess(result) {\n if (result.length !== 1 || !onlyWhitespace.test(this.leftover)) {\n return null;\n }\n\n return { value: result[0].v };\n },\n\n converters: [\n function getPlaceholder(parser) {\n if (!parser.values) return null;\n\n const placeholder = parser.matchPattern(placeholderAtStartPattern);\n\n if (placeholder && hasOwn(parser.values, placeholder)) {\n return { v: parser.values[placeholder] };\n }\n },\n\n function getSpecial(parser) {\n const special = parser.matchPattern(specialsPattern);\n if (special) return { v: specials[special] };\n },\n\n function getNumber(parser) {\n const number = parser.matchPattern(numberPattern);\n if (number) return { v: +number };\n },\n\n function getString(parser) {\n const stringLiteral = readStringLiteral(parser);\n const values = parser.values;\n\n if (stringLiteral && values) {\n return {\n v: stringLiteral.v.replace(\n placeholderPattern,\n (match, $1) => ($1 in values ? values[$1] : $1)\n )\n };\n }\n\n return stringLiteral;\n },\n\n function getObject(parser) {\n if (!parser.matchString('{')) return null;\n\n const result = {};\n\n parser.sp();\n\n if (parser.matchString('}')) {\n return { v: result };\n }\n\n let pair;\n while ((pair = getKeyValuePair(parser))) {\n result[pair.key] = pair.value;\n\n parser.sp();\n\n if (parser.matchString('}')) {\n return { v: result };\n }\n\n if (!parser.matchString(',')) {\n return null;\n }\n }\n\n return null;\n },\n\n function getArray(parser) {\n if (!parser.matchString('[')) return null;\n\n const result = [];\n\n parser.sp();\n\n if (parser.matchString(']')) {\n return { v: result };\n }\n\n let valueToken;\n while ((valueToken = parser.read())) {\n result.push(valueToken.v);\n\n parser.sp();\n\n if (parser.matchString(']')) {\n return { v: result };\n }\n\n if (!parser.matchString(',')) {\n return null;\n }\n\n parser.sp();\n }\n\n return null;\n }\n ]\n});\n\nfunction getKeyValuePair(parser) {\n parser.sp();\n\n const key = readKey(parser);\n\n if (!key) return null;\n\n const pair = { key };\n\n parser.sp();\n if (!parser.matchString(':')) {\n return null;\n }\n parser.sp();\n\n const valueToken = parser.read();\n\n if (!valueToken) return null;\n\n pair.value = valueToken.v;\n return pair;\n}\n\nexport default function(str, values) {\n const parser = new JsonParser(str, { values });\n return parser.result;\n}\n","import { INTERPOLATOR } from '../../../config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport parseJSON from '../../../utils/parseJSON';\nimport resolve from '../../resolvers/resolve';\nimport runloop from '../../../global/runloop';\nimport { warnIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isArray, isObjectType, isString } from 'utils/is';\n\nexport default class Mapping extends Item {\n constructor(options) {\n super(options);\n\n this.name = options.template.n;\n\n this.owner = options.owner || options.up.owner || options.element || findElement(options.up);\n this.element =\n options.element || (this.owner.attributeByName ? this.owner : findElement(options.up));\n this.up = this.element.up; // shared\n this.ractive = this.up.ractive;\n\n this.element.attributeByName[this.name] = this;\n\n this.value = options.template.f;\n }\n\n bind() {\n const template = this.template.f;\n const viewmodel = this.element.instance.viewmodel;\n\n if (template === 0) {\n // empty attributes are `true`\n viewmodel.joinKey(this.name).set(true);\n } else if (isString(template)) {\n const parsed = parseJSON(template);\n viewmodel.joinKey(this.name).set(parsed ? parsed.value : template);\n } else if (isArray(template)) {\n createMapping(this, true);\n }\n }\n\n rebound(update) {\n if (this.boundFragment) this.boundFragment.rebound(update);\n if (this.link) {\n this.model = resolve(this.up, this.template.f[0]);\n const model = this.element.instance.viewmodel.joinAll(splitKeypath(this.name));\n model.link(this.model, this.name, { mapping: true });\n }\n }\n\n render() {}\n\n unbind() {\n if (this.model) this.model.unregister(this);\n if (this.boundFragment) this.boundFragment.unbind();\n\n if (this.element.bound) {\n if (this.link.target === this.model) this.link.owner.unlink();\n }\n }\n\n unrender() {}\n\n update() {\n if (this.dirty) {\n this.dirty = false;\n if (this.boundFragment) this.boundFragment.update();\n }\n }\n}\n\nfunction createMapping(item) {\n const template = item.template.f;\n const viewmodel = item.element.instance.viewmodel;\n const childData = viewmodel.value;\n\n if (template.length === 1 && template[0].t === INTERPOLATOR) {\n const model = resolve(item.up, template[0]);\n const val = model.get(false);\n\n // if the interpolator is not static\n if (!template[0].s) {\n item.model = model;\n item.link = viewmodel.createLink(item.name, model, template[0].r, {\n mapping: true\n });\n\n // initialize parent side of the mapping from child data\n if (val === undefined && !model.isReadonly && item.name in childData) {\n model.set(childData[item.name]);\n }\n } else if (!isObjectType(val) || template[0].x) {\n // copy non-object, non-computed vals through\n viewmodel.joinKey(splitKeypath(item.name)).set(val);\n } else {\n // warn about trying to copy an object\n warnIfDebug(`Cannot copy non-computed object value from static mapping '${item.name}'`);\n }\n\n // if the item isn't going to manage the model, give it a change to tear down if it's computed\n if (model !== item.model) model.unregister();\n } else {\n item.boundFragment = new Fragment({\n owner: item,\n template\n }).bind();\n\n item.model = viewmodel.joinKey(splitKeypath(item.name));\n item.model.set(item.boundFragment.valueOf());\n\n // item is a *bit* of a hack\n item.boundFragment.bubble = () => {\n Fragment.prototype.bubble.call(item.boundFragment);\n // defer this to avoid mucking around model deps if there happens to be an expression involved\n runloop.scheduleTask(() => {\n item.boundFragment.update();\n item.model.set(item.boundFragment.valueOf());\n });\n };\n }\n}\n","import { removeFromArray } from 'utils/array';\nimport Element from '../../Element';\nimport findElement from '../../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class Option extends Element {\n constructor(options) {\n const template = options.template;\n if (!template.a) template.a = {};\n\n // If the value attribute is missing, use the element's content,\n // as long as it isn't disabled\n if (template.a.value === undefined && !('disabled' in template.a)) {\n template.a.value = template.f || '';\n }\n\n super(options);\n\n this.select = findElement(this.parent || this.up, false, 'select');\n }\n\n bind() {\n if (!this.select) {\n super.bind();\n return;\n }\n\n // If the select has a value, it overrides the `selected` attribute on\n // this option - so we delete the attribute\n const selectedAttribute = this.attributeByName.selected;\n if (selectedAttribute && this.select.getAttribute('value') !== undefined) {\n const index = this.attributes.indexOf(selectedAttribute);\n this.attributes.splice(index, 1);\n delete this.attributeByName.selected;\n }\n\n super.bind();\n this.select.options.push(this);\n }\n\n bubble() {\n // if we're using content as value, may need to update here\n const value = this.getAttribute('value');\n if (this.node && this.node.value !== value) {\n this.node._ractive.value = value;\n }\n super.bubble();\n }\n\n getAttribute(name) {\n const attribute = this.attributeByName[name];\n return attribute\n ? attribute.getValue()\n : name === 'value' && this.fragment\n ? this.fragment.valueOf()\n : undefined;\n }\n\n isSelected() {\n const optionValue = this.getAttribute('value');\n\n if (optionValue === undefined || !this.select) {\n return false;\n }\n\n const selectValue = this.select.getAttribute('value');\n\n if (this.select.compare(selectValue, optionValue)) {\n return true;\n }\n\n if (this.select.getAttribute('multiple') && isArray(selectValue)) {\n let i = selectValue.length;\n while (i--) {\n if (this.select.compare(selectValue[i], optionValue)) {\n return true;\n }\n }\n }\n }\n\n render(target, occupants) {\n super.render(target, occupants);\n\n if (!this.attributeByName.value) {\n this.node._ractive.value = this.getAttribute('value');\n }\n }\n\n unbind() {\n super.unbind();\n\n if (this.select) {\n removeFromArray(this.select.options, this);\n }\n }\n}\n","import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { fillGaps, hasOwn } from 'utils/object';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { findInstance } from 'shared/registry';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default function getPartialTemplate(ractive, name, up) {\n // If the partial in instance or view heirarchy instances, great\n let partial = getPartialFromRegistry(ractive, name, up || {});\n if (partial) return partial;\n\n // Does it exist on the page as a script tag?\n partial = parser.fromId(name, { noThrow: true });\n if (partial) {\n // parse and register to this ractive instance\n const parsed = parser.parseFor(partial, ractive);\n\n // register extra partials on the ractive instance if they don't already exist\n if (parsed.p) fillGaps(ractive.partials, parsed.p);\n\n // register (and return main partial if there are others in the template)\n return (ractive.partials[name] = parsed.t);\n }\n}\n\nfunction getPartialFromRegistry(ractive, name, up) {\n // if there was an instance up-hierarchy, cool\n let partial = findParentPartial(name, up.owner);\n if (partial) return partial;\n\n // find first instance in the ractive or view hierarchy that has this partial\n const instance = findInstance('partials', ractive, name);\n\n if (!instance) {\n return;\n }\n\n partial = instance.partials[name];\n\n // partial is a function?\n let fn;\n if (isFunction(partial)) {\n fn = partial;\n // super partial\n if (fn.styleSet) return fn;\n\n fn = partial.bind(instance);\n fn.isOwner = hasOwn(instance.partials, name);\n partial = fn.call(ractive, parser);\n }\n\n if (!partial && partial !== '') {\n warnIfDebug(noRegistryFunctionReturn, name, 'partial', 'partial', {\n ractive\n });\n return;\n }\n\n // If this was added manually to the registry,\n // but hasn't been parsed, parse it now\n if (!parser.isParsed(partial)) {\n // use the parseOptions of the ractive instance on which it was found\n const parsed = parser.parseFor(partial, instance);\n\n // Partials cannot contain nested partials!\n // TODO add a test for this\n if (parsed.p) {\n warnIfDebug('Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive });\n }\n\n // if fn, use instance to store result, otherwise needs to go\n // in the correct point in prototype chain on instance or constructor\n const target = fn ? instance : findOwner(instance, name);\n\n // may be a template with partials, which need to be registered and main template extracted\n target.partials[name] = partial = parsed.t;\n }\n\n // store for reset\n if (fn) partial._fn = fn;\n\n return partial.v ? partial.t : partial;\n}\n\nfunction findOwner(ractive, key) {\n return hasOwn(ractive.partials, key) ? ractive : findConstructor(ractive.constructor, key);\n}\n\nfunction findConstructor(constructor, key) {\n if (!constructor) {\n return;\n }\n return hasOwn(constructor.partials, key) ? constructor : findConstructor(constructor.Parent, key);\n}\n\nfunction findParentPartial(name, parent) {\n if (parent) {\n if (\n parent.template &&\n parent.template.p &&\n !isArray(parent.template.p) &&\n hasOwn(parent.template.p, name)\n ) {\n return parent.template.p[name];\n } else if (parent.up && parent.up.owner) {\n return findParentPartial(name, parent.up.owner);\n }\n }\n}\n","import { ELEMENT, PARTIAL, SECTION, SECTION_WITH, YIELDER } from 'config/types';\nimport { assign, create, hasOwn, keys } from 'utils/object';\nimport { isArray, isFunction, isObjectType, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { MustacheContainer } from './shared/Mustache';\nimport Fragment from '../Fragment';\nimport getPartialTemplate from './partial/getPartialTemplate';\nimport { resolveAliases } from './Alias';\nimport { warnOnceIfDebug, warnIfDebug } from 'utils/log';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport runloop from 'src/global/runloop';\nimport { applyCSS } from 'src/global/css';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function Partial(options) {\n MustacheContainer.call(this, options);\n\n const tpl = options.template;\n\n // yielder is a special form of partial that will later require special handling\n if (tpl.t === YIELDER) {\n this.yielder = 1;\n } else if (tpl.t === ELEMENT) {\n // this is a macro partial, complete with macro constructor\n // leaving this as an element will confuse up-template searches\n this.type = PARTIAL;\n this.macro = options.macro;\n }\n}\n\nconst proto = (Partial.prototype = create(MustacheContainer.prototype));\n\nassign(proto, {\n constructor: Partial,\n\n bind() {\n const template = this.template;\n\n if (this.yielder) {\n // the container is the instance that owns this node\n this.container = this.up.ractive;\n this.component = this.container.component;\n this.containerFragment = this.up;\n\n // normal component\n if (this.component) {\n // yields skip the owning instance and go straight to the surrounding context\n this.up = this.component.up;\n\n // {{yield}} is equivalent to {{yield content}}\n if (!template.r && !template.x && !template.tx) this.refName = 'content';\n } else {\n // plain-ish instance that may be attached to a parent later\n this.fragment = new Fragment({\n owner: this,\n template: []\n });\n this.fragment.bind();\n return;\n }\n }\n\n // this is a macro/super partial\n if (this.macro) {\n this.fn = this.macro;\n } else {\n // this is a plain partial or yielder\n if (!this.refName) this.refName = template.r;\n\n // if the refName exists as a partial, this is a plain old partial reference where no model binding will happen\n if (this.refName) {\n partialFromValue(this, this.refName);\n }\n\n // this is a dynamic/inline partial\n if (!this.partial && !this.fn) {\n MustacheContainer.prototype.bind.call(this);\n if (this.model) partialFromValue(this, this.model.get());\n }\n }\n\n if (!this.partial && !this.fn) {\n warnOnceIfDebug(`Could not find template for partial '${this.name}'`);\n }\n\n createFragment(this, this.partial || []);\n\n // macro/super partial\n if (this.fn) initMacro(this);\n\n this.fragment.bind();\n },\n\n bubble() {\n if (!this.dirty) {\n this.dirty = true;\n\n if (this.yielder) {\n this.containerFragment.bubble();\n } else {\n this.up.bubble();\n }\n }\n },\n\n findNextNode() {\n return (this.containerFragment || this.up).findNextNode(this);\n },\n\n handleChange() {\n this.dirtyTemplate = true;\n this.externalChange = true;\n this.bubble();\n },\n\n rebound(update) {\n const aliases = this.fragment && this.fragment.aliases;\n if (aliases) {\n for (const k in aliases) {\n if (aliases[k].rebound) aliases[k].rebound(update);\n else {\n aliases[k].unreference();\n aliases[k] = 0;\n }\n }\n if (this.template.z) {\n resolveAliases(this.template.z, this.containerFragment || this.up, aliases);\n }\n }\n if (this._attrs) {\n keys(this._attrs).forEach(k => this._attrs[k].rebound(update));\n }\n MustacheContainer.prototype.rebound.call(this, update);\n },\n\n refreshAttrs() {\n keys(this._attrs).forEach(k => {\n this.handle.attributes[k] = !this._attrs[k].items.length || this._attrs[k].valueOf();\n });\n },\n\n resetTemplate() {\n if (this.fn && this.proxy) {\n if (this.externalChange) {\n if (isFunction(this.proxy.teardown)) this.proxy.teardown();\n this.fn = this.proxy = null;\n } else {\n this.partial = this.fnTemplate;\n return true;\n }\n }\n\n const partial = this.partial;\n this.partial = null;\n\n if (this.refName) {\n this.partial = getPartialTemplate(this.ractive, this.refName, this.up);\n }\n\n if (!this.partial && this.model) {\n partialFromValue(this, this.model.get());\n }\n\n if (!this.fn && partial === this.partial) return false;\n\n this.unbindAttrs();\n\n if (this.fn) {\n initMacro(this);\n if (isFunction(this.proxy.render)) runloop.scheduleTask(() => this.proxy.render());\n } else if (!this.partial) {\n warnOnceIfDebug(`Could not find template for partial '${this.name}'`);\n }\n\n return true;\n },\n\n render(target, occupants) {\n if (this.fn && this.fn._cssDef && !this.fn._cssDef.applied) applyCSS();\n\n this.fragment.render(target, occupants);\n\n if (this.proxy && isFunction(this.proxy.render)) this.proxy.render();\n },\n\n unbind() {\n this.fragment.unbind();\n\n this.fragment.aliases = null;\n\n this.unbindAttrs();\n\n MustacheContainer.prototype.unbind.call(this);\n },\n\n unbindAttrs() {\n if (this._attrs) {\n keys(this._attrs).forEach(k => {\n this._attrs[k].unbind();\n });\n }\n },\n\n unrender(shouldDestroy) {\n if (this.proxy && isFunction(this.proxy.teardown)) this.proxy.teardown();\n\n this.fragment.unrender(shouldDestroy);\n },\n\n update() {\n const proxy = this.proxy;\n this.updating = 1;\n\n if (this.dirtyAttrs) {\n this.dirtyAttrs = false;\n keys(this._attrs).forEach(k => this._attrs[k].update());\n this.refreshAttrs();\n if (isFunction(proxy.update)) proxy.update(this.handle.attributes);\n }\n\n if (this.dirtyTemplate) {\n this.dirtyTemplate = false;\n this.resetTemplate() && this.fragment.resetTemplate(this.partial || []);\n }\n\n if (this.dirty) {\n this.dirty = false;\n if (proxy && isFunction(proxy.invalidate)) proxy.invalidate();\n this.fragment.update();\n }\n\n this.externalChange = false;\n this.updating = 0;\n }\n});\n\nfunction createFragment(self, partial) {\n self.partial = partial;\n contextifyTemplate(self);\n\n const options = {\n owner: self,\n template: self.partial\n };\n\n if (self.yielder) options.ractive = self.container.parent;\n\n if (self.fn) options.cssIds = self.fn._cssIds;\n\n const fragment = (self.fragment = new Fragment(options));\n\n // partials may have aliases that need to be in place before binding\n if (self.template.z) {\n fragment.aliases = resolveAliases(self.template.z, self.containerFragment || self.up);\n }\n}\n\nfunction contextifyTemplate(self) {\n if (self.template.c) {\n self.partial = [{ t: SECTION, n: SECTION_WITH, f: self.partial }];\n assign(self.partial[0], self.template.c);\n if (self.yielder) self.partial[0].y = self;\n }\n}\n\nfunction partialFromValue(self, value, okToParse) {\n let tpl = value;\n\n if (isArray(tpl)) {\n self.partial = tpl;\n } else if (tpl && isObjectType(tpl)) {\n if (isArray(tpl.t)) self.partial = tpl.t;\n else if (isString(tpl.template))\n self.partial = parsePartial(tpl.template, tpl.template, self.ractive).t;\n } else if (isFunction(tpl) && tpl.styleSet) {\n self.fn = tpl;\n if (self.fragment) self.fragment.cssIds = tpl._cssIds;\n } else if (tpl != null) {\n tpl = getPartialTemplate(self.ractive, '' + tpl, self.containerFragment || self.up);\n if (tpl) {\n self.name = value;\n if (tpl.styleSet) {\n self.fn = tpl;\n if (self.fragment) self.fragment.cssIds = tpl._cssIds;\n } else self.partial = tpl;\n } else if (okToParse) {\n self.partial = parsePartial('' + value, '' + value, self.ractive).t;\n } else {\n self.name = value;\n }\n }\n\n return self.partial;\n}\n\nfunction setTemplate(template) {\n partialFromValue(this, template, true);\n\n if (!this.initing) {\n this.dirtyTemplate = true;\n this.fnTemplate = this.partial;\n\n if (this.updating) {\n this.bubble();\n runloop.promise();\n } else {\n const promise = runloop.start();\n\n this.bubble();\n runloop.end();\n\n return promise;\n }\n }\n}\n\nfunction aliasLocal(ref, name) {\n const aliases = this.fragment.aliases || (this.fragment.aliases = {});\n if (!name) {\n aliases[ref] = this._data;\n } else {\n aliases[name] = this._data.joinAll(splitKeypath(ref));\n }\n}\n\nconst extras = 'extra-attributes';\n\nfunction initMacro(self) {\n const fn = self.fn;\n const fragment = self.fragment;\n\n // defensively copy the template in case it changes\n const template = (self.template = assign({}, self.template));\n const handle = (self.handle = fragment.getContext({\n proxy: self,\n aliasLocal,\n name: self.template.e || self.name,\n attributes: {},\n setTemplate: setTemplate.bind(self),\n template\n }));\n\n if (!template.p) template.p = {};\n template.p = handle.partials = assign({}, template.p);\n if (!hasOwn(template.p, 'content')) template.p.content = template.f || [];\n\n if (isArray(fn.attributes)) {\n self._attrs = {};\n\n const invalidate = function() {\n this.dirty = true;\n self.dirtyAttrs = true;\n self.bubble();\n };\n\n if (isArray(template.m)) {\n const attrs = template.m;\n template.p[extras] = template.m = attrs.filter(a => !~fn.attributes.indexOf(a.n));\n attrs.filter(a => ~fn.attributes.indexOf(a.n)).forEach(a => {\n const fragment = new Fragment({\n template: a.f,\n owner: self\n });\n fragment.bubble = invalidate;\n fragment.findFirstNode = noop;\n self._attrs[a.n] = fragment;\n });\n } else {\n template.p[extras] = [];\n }\n } else {\n template.p[extras] = template.m;\n }\n\n if (self._attrs) {\n keys(self._attrs).forEach(k => {\n self._attrs[k].bind();\n });\n self.refreshAttrs();\n }\n\n self.initing = 1;\n self.proxy = fn(handle, handle.attributes) || {};\n if (!self.partial) self.partial = [];\n self.fnTemplate = self.partial;\n self.initing = 0;\n\n contextifyTemplate(self);\n fragment.resetTemplate(self.partial);\n}\n\nfunction parsePartial(name, partial, ractive) {\n let parsed;\n\n try {\n parsed = parser.parse(partial, parser.getParseOptions(ractive));\n } catch (e) {\n warnIfDebug(`Could not parse partial from expression '${name}'\\n${e.message}`);\n }\n\n return parsed || { t: [] };\n}\n","import { addToArray, removeFromArray } from 'utils/array';\nimport { unescapeKey } from 'shared/keypaths';\nimport { capture } from 'src/global/capture';\nimport { handleChange } from 'src/shared/methodCallers';\nimport noop from 'utils/noop';\n\nexport default class KeyModel {\n constructor(value, context, instance) {\n this.value = this.key = value;\n this.context = context;\n this.isReadonly = this.isKey = true;\n this.deps = [];\n this.links = [];\n this.children = [];\n this.instance = instance;\n }\n\n applyValue(value) {\n if (value !== this.value) {\n this.value = this.key = value;\n this.deps.forEach(handleChange);\n this.links.forEach(handleChange);\n this.children.forEach(c => {\n c.applyValue(c.context.getKeypath(c.instance));\n });\n }\n }\n\n destroyed() {\n if (this.upstream) this.upstream.unregisterChild(this);\n }\n\n get(shouldCapture) {\n if (shouldCapture) capture(this);\n return unescapeKey(this.value);\n }\n\n getKeypath() {\n return unescapeKey(this.value);\n }\n\n has() {\n return false;\n }\n\n rebind(next, previous) {\n let i = this.deps.length;\n while (i--) this.deps[i].rebind(next, previous, false);\n\n i = this.links.length;\n while (i--) this.links[i].relinking(next, false);\n }\n\n register(dependant) {\n this.deps.push(dependant);\n }\n\n registerChild(child) {\n addToArray(this.children, child);\n child.upstream = this;\n }\n\n registerLink(link) {\n addToArray(this.links, link);\n }\n\n unregister(dependant) {\n removeFromArray(this.deps, dependant);\n }\n\n unregisterChild(child) {\n removeFromArray(this.children, child);\n }\n\n unregisterLink(link) {\n removeFromArray(this.links, link);\n }\n}\n\nKeyModel.prototype.reference = noop;\nKeyModel.prototype.unreference = noop;\n","import { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectType } from 'utils/is';\nimport { findMap, buildNewIndices } from 'utils/array';\nimport { toEscapedString, toString, shuffled } from 'shared/methodCallers';\nimport Fragment, { getKeypath } from './Fragment';\nimport { ELEMENT } from 'config/types';\nimport { getContext } from 'shared/getRactiveContext';\nimport { keys } from 'utils/object';\nimport KeyModel from 'src/model/specials/KeyModel';\nimport { splitKeypath } from '../shared/keypaths';\nimport resolve from './resolvers/resolve';\n\nconst keypathString = /^\"(\\\\\"|[^\"])+\"$/;\n\nexport default class RepeatedFragment {\n constructor(options) {\n this.parent = options.owner.up;\n\n // bit of a hack, so reference resolution works without another\n // layer of indirection\n this.up = this;\n this.owner = options.owner;\n this.ractive = this.parent.ractive;\n this.delegate =\n this.ractive.delegate !== false && (this.parent.delegate || findDelegate(this.parent));\n // delegation disabled by directive\n if (this.delegate && this.delegate.delegate === false) this.delegate = false;\n // let the element know it's a delegate handler\n if (this.delegate) this.delegate.delegate = this.delegate;\n\n // encapsulated styles should be inherited until they get applied by an element\n this.cssIds = 'cssIds' in options ? options.cssIds : this.parent ? this.parent.cssIds : null;\n\n this.context = null;\n this.rendered = false;\n this.iterations = [];\n\n this.template = options.template;\n\n this.indexRef = options.indexRef;\n this.keyRef = options.keyRef;\n\n this.pendingNewIndices = null;\n this.previousIterations = null;\n\n // track array versus object so updates of type rest\n this.isArray = false;\n }\n\n bind(context) {\n this.context = context;\n this.bound = true;\n const value = context.get();\n\n const aliases = (this.aliases = this.owner.template.z && this.owner.template.z.slice());\n\n const shuffler = aliases && aliases.find(a => a.n === 'shuffle');\n if (shuffler && shuffler.x && shuffler.x.x) {\n if (shuffler.x.x.s === 'true') this.shuffler = true;\n else if (keypathString.test(shuffler.x.x.s))\n this.shuffler = splitKeypath(shuffler.x.x.s.slice(1, -1));\n }\n\n if (this.shuffler) this.values = shuffleValues(this, this.shuffler);\n\n if (this.source) this.source.model.unbind(this.source);\n const source = context.isComputed && aliases && aliases.find(a => a.n === 'source');\n if (source && source.x && source.x.r) {\n const model = resolve(this, source.x);\n this.source = {\n handleChange() {},\n rebind(next) {\n this.model.unregister(this);\n this.model = next;\n next.register(this);\n }\n };\n this.source.model = model;\n model.register(this.source);\n }\n\n // {{#each array}}...\n if ((this.isArray = isArray(value))) {\n // we can't use map, because of sparse arrays\n this.iterations = [];\n const max = (this.length = value.length);\n for (let i = 0; i < max; i += 1) {\n this.iterations[i] = this.createIteration(i, i);\n }\n } else if (isObject(value)) {\n // {{#each object}}...\n this.isArray = false;\n\n // TODO this is a dreadful hack. There must be a neater way\n if (this.indexRef) {\n const refs = this.indexRef.split(',');\n this.keyRef = refs[0];\n this.indexRef = refs[1];\n }\n\n const ks = keys(value);\n this.length = ks.length;\n\n this.iterations = ks.map((key, index) => {\n return this.createIteration(key, index);\n });\n }\n\n return this;\n }\n\n bubble(index) {\n if (!this.bubbled) this.bubbled = [];\n this.bubbled.push(index);\n\n if (!this.rebounding) this.owner.bubble();\n }\n\n createIteration(key, index) {\n const fragment = new Fragment({\n owner: this,\n template: this.template\n });\n\n fragment.isIteration = true;\n fragment.delegate = this.delegate;\n\n if (this.aliases) fragment.aliases = {};\n swizzleFragment(this, fragment, key, index);\n\n return fragment.bind(fragment.context);\n }\n\n destroyed() {\n const len = this.iterations.length;\n for (let i = 0; i < len; i++) this.iterations[i].destroyed();\n if (this.pathModel) this.pathModel.destroyed();\n if (this.rootModel) this.rootModel.destroyed();\n }\n\n detach() {\n const docFrag = createDocumentFragment();\n this.iterations.forEach(fragment => docFrag.appendChild(fragment.detach()));\n return docFrag;\n }\n\n find(selector, options) {\n return findMap(this.iterations, i => i.find(selector, options));\n }\n\n findAll(selector, options) {\n return this.iterations.forEach(i => i.findAll(selector, options));\n }\n\n findAllComponents(name, options) {\n return this.iterations.forEach(i => i.findAllComponents(name, options));\n }\n\n findComponent(name, options) {\n return findMap(this.iterations, i => i.findComponent(name, options));\n }\n\n findContext() {\n return this.context;\n }\n\n findNextNode(iteration) {\n if (iteration.index < this.iterations.length - 1) {\n for (let i = iteration.index + 1; i < this.iterations.length; i++) {\n const node = this.iterations[i].firstNode(true);\n if (node) return node;\n }\n }\n\n return this.owner.findNextNode();\n }\n\n firstNode(skipParent) {\n return this.iterations[0] ? this.iterations[0].firstNode(skipParent) : null;\n }\n\n getLast() {\n return this.lastModel || (this.lastModel = new KeyModel(this.length - 1));\n }\n\n rebind(next) {\n this.context = next;\n if (this.source) return;\n this.iterations.forEach(fragment => {\n swizzleFragment(this, fragment, fragment.key, fragment.index);\n });\n }\n\n rebound(update) {\n this.context = this.owner.model;\n this.iterations.forEach((f, i) => {\n f.context = contextFor(this, f, i);\n f.rebound(update);\n });\n }\n\n render(target, occupants) {\n const xs = this.iterations;\n if (xs) {\n const len = xs.length;\n for (let i = 0; i < len; i++) {\n xs[i].render(target, occupants);\n }\n }\n\n this.rendered = true;\n }\n\n shuffle(newIndices, merge) {\n if (!this.pendingNewIndices) this.previousIterations = this.iterations.slice();\n\n if (!this.pendingNewIndices) this.pendingNewIndices = [];\n\n this.pendingNewIndices.push(newIndices);\n\n const iterations = [];\n\n newIndices.forEach((newIndex, oldIndex) => {\n if (newIndex === -1) return;\n\n const fragment = this.iterations[oldIndex];\n iterations[newIndex] = fragment;\n\n if (newIndex !== oldIndex && fragment) {\n fragment.dirty = true;\n if (merge) fragment.shouldRebind = 1;\n }\n });\n\n this.iterations = iterations;\n\n // if merging, we're in the midst of an update already\n if (!merge) this.bubble();\n }\n\n shuffled() {\n this.iterations.forEach(shuffled);\n }\n\n toString(escape) {\n return this.iterations ? this.iterations.map(escape ? toEscapedString : toString).join('') : '';\n }\n\n unbind() {\n this.bound = false;\n if (this.source) this.source.model.unregister(this.source);\n const iterations = this.pendingNewIndices ? this.previousIterations : this.iterations;\n const len = iterations.length;\n for (let i = 0; i < len; i++) iterations[i].unbind();\n return this;\n }\n\n unrender(shouldDestroy) {\n let len = this.iterations.length;\n for (let i = 0; i < len; i++) this.iterations[i].unrender(shouldDestroy);\n if (this.pendingNewIndices && this.previousIterations) {\n len = this.previousIterations.length;\n for (let i = 0; i < len; i++) this.previousIterations[i].unrender(shouldDestroy);\n }\n this.rendered = false;\n }\n\n update() {\n if (this.pendingNewIndices) {\n this.bubbled.length = 0;\n this.updatePostShuffle();\n return;\n }\n\n if (this.updating) return;\n this.updating = true;\n\n if (this.shuffler) {\n const values = shuffleValues(this, this.shuffler);\n this.shuffle(buildNewIndices(this.values, values), true);\n this.updatePostShuffle();\n } else {\n let len = this.iterations.length;\n for (let i = 0; i < len; i++) {\n const f = this.iterations[i];\n f && f.idxModel && f.idxModel.applyValue(i);\n }\n\n const value = this.context.get();\n const wasArray = this.isArray;\n\n let toRemove;\n let oldKeys;\n let reset = true;\n let i;\n\n if ((this.isArray = isArray(value))) {\n // if there's a source to map back to, make sure everything stays bound correctly\n if (this.source) {\n this.rebounding = 1;\n const source = this.source.model.get();\n this.iterations.forEach((f, c) => {\n if (c < value.length && f.lastValue !== value[c] && ~(i = source.indexOf(value[c]))) {\n swizzleFragment(this, f, c, c);\n f.rebound(true);\n }\n });\n this.rebounding = 0;\n }\n\n if (wasArray) {\n reset = false;\n if (this.iterations.length > value.length) {\n toRemove = this.iterations.splice(value.length);\n }\n }\n } else if (isObject(value) && !wasArray) {\n reset = false;\n toRemove = [];\n oldKeys = {};\n i = this.iterations.length;\n\n while (i--) {\n const fragment = this.iterations[i];\n if (fragment.key in value) {\n oldKeys[fragment.key] = true;\n } else {\n this.iterations.splice(i, 1);\n toRemove.push(fragment);\n }\n }\n }\n\n const newLength = isArray(value) ? value.length : isObject(value) ? keys(value).length : 0;\n this.length = newLength;\n this.updateLast();\n\n if (reset) {\n toRemove = this.iterations;\n this.iterations = [];\n }\n\n if (toRemove) {\n len = toRemove.length;\n for (let i = 0; i < len; i++) toRemove[i].unbind().unrender(true);\n }\n\n // update the remaining ones\n if (!reset && this.isArray && this.bubbled && this.bubbled.length) {\n const bubbled = this.bubbled;\n this.bubbled = [];\n len = bubbled.length;\n for (let i = 0; i < len; i++)\n this.iterations[bubbled[i]] && this.iterations[bubbled[i]].update();\n } else {\n len = this.iterations.length;\n for (let i = 0; i < len; i++) this.iterations[i].update();\n }\n\n // add new iterations\n let docFrag;\n let fragment;\n\n if (newLength > this.iterations.length) {\n docFrag = this.rendered ? createDocumentFragment() : null;\n i = this.iterations.length;\n\n if (isArray(value)) {\n while (i < value.length) {\n fragment = this.createIteration(i, i);\n\n this.iterations.push(fragment);\n if (this.rendered) fragment.render(docFrag);\n\n i += 1;\n }\n } else if (isObject(value)) {\n // TODO this is a dreadful hack. There must be a neater way\n if (this.indexRef && !this.keyRef) {\n const refs = this.indexRef.split(',');\n this.keyRef = refs[0];\n this.indexRef = refs[1];\n }\n\n keys(value).forEach(key => {\n if (!oldKeys || !(key in oldKeys)) {\n fragment = this.createIteration(key, i);\n\n this.iterations.push(fragment);\n if (this.rendered) fragment.render(docFrag);\n\n i += 1;\n }\n });\n }\n\n if (this.rendered) {\n const parentNode = this.parent.findParentNode();\n const anchor = this.parent.findNextNode(this.owner);\n\n parentNode.insertBefore(docFrag, anchor);\n }\n }\n }\n\n this.updating = false;\n }\n\n updateLast() {\n if (this.lastModel) this.lastModel.applyValue(this.length - 1);\n }\n\n updatePostShuffle() {\n const newIndices = this.pendingNewIndices[0];\n const parentNode = this.rendered ? this.parent.findParentNode() : null;\n const nextNode = parentNode && this.owner.findNextNode();\n const docFrag = parentNode ? createDocumentFragment() : null;\n\n // map first shuffle through\n this.pendingNewIndices.slice(1).forEach(indices => {\n newIndices.forEach((newIndex, oldIndex) => {\n newIndices[oldIndex] = indices[newIndex];\n });\n });\n\n const len = (this.length = this.context.get().length);\n const prev = this.previousIterations;\n const iters = this.iterations;\n const value = this.context.get();\n const stash = {};\n let idx, dest, pos, next, anchor, rebound;\n\n const map = new Array(newIndices.length);\n newIndices.forEach((e, i) => (map[e] = i));\n\n this.updateLast();\n\n idx = pos = 0;\n while (idx < len) {\n dest = newIndices[pos];\n next = null;\n rebound = false;\n\n if (dest === -1) {\n // drop it like it's hot\n prev[pos].unbind().unrender(true);\n prev[pos++] = 0;\n } else if (dest > idx) {\n // need to stash or pull one up\n next = newIndices[pos + 1]; // TODO: maybe a shouldMove function that tracks multiple entries?\n if (next <= dest) {\n stash[dest] = prev[pos];\n prev[pos++] = null;\n } else {\n next = stash[idx] || prev[map[idx]];\n prev[map[idx]] = null;\n anchor = prev[nextRendered(pos, newIndices, prev)];\n anchor = (anchor && parentNode && anchor.firstNode()) || nextNode;\n\n if (next) {\n rebound = this.source && next.lastValue !== value[idx];\n swizzleFragment(this, next, idx, idx);\n if (parentNode) parentNode.insertBefore(next.detach(), anchor);\n } else {\n next = iters[idx] = this.createIteration(idx, idx);\n if (parentNode) {\n next.render(docFrag);\n parentNode.insertBefore(docFrag, anchor);\n }\n }\n\n idx++;\n }\n } else {\n // all is well\n next = iters[idx];\n anchor = prev[nextRendered(pos, newIndices, prev)];\n anchor = (anchor && parentNode && anchor.firstNode()) || nextNode;\n if (!next) {\n next = iters[idx] = this.createIteration(idx, idx);\n if (parentNode) {\n next.render(docFrag);\n parentNode.insertBefore(docFrag, anchor);\n }\n } else if (pos !== idx || stash[idx]) {\n rebound = this.source && next.lastValue !== value[idx];\n swizzleFragment(this, next, idx, idx);\n if (stash[idx] && parentNode) parentNode.insertBefore(next.detach(), anchor);\n }\n\n idx++;\n prev[pos++] = null;\n }\n\n if (next && isObjectType(next)) {\n if (next.shouldRebind || rebound) {\n next.rebound(rebound);\n next.shouldRebind = 0;\n }\n next.update();\n next.shuffled();\n }\n }\n\n // clean up any stragglers\n const plen = prev.length;\n for (let i = 0; i < plen; i++) prev[i] && prev[i].unbind().unrender(true);\n\n if (this.shuffler) this.values = shuffleValues(this, this.shuffler);\n\n this.pendingNewIndices = null;\n this.previousIterations = null;\n }\n}\n\nRepeatedFragment.prototype.getContext = getContext;\nRepeatedFragment.prototype.getKeypath = getKeypath;\n\n// find the topmost delegate\nfunction findDelegate(start) {\n let frag = start;\n let delegate, el;\n\n out: while (frag) {\n // find next element\n el = 0;\n while (!el && frag) {\n if (frag.owner.type === ELEMENT) el = frag.owner;\n if (frag.owner.ractive && frag.owner.ractive.delegate === false) break out;\n frag = frag.parent || frag.componentParent;\n }\n\n if (el.delegate === false) break out;\n delegate = el.delegate || el;\n\n // find next repeated fragment\n while (frag) {\n if (frag.iterations) break;\n if (frag.owner.ractive && frag.owner.ractive.delegate === false) break out;\n frag = frag.parent || frag.componentParent;\n }\n }\n\n return delegate;\n}\n\nfunction nextRendered(start, newIndices, frags) {\n const len = newIndices.length;\n for (let i = start; i < len; i++) {\n if (~newIndices[i] && frags[i] && frags[i].rendered) return i;\n }\n}\n\nfunction swizzleFragment(section, fragment, key, idx) {\n const model = section.context ? contextFor(section, fragment, key) : undefined;\n\n fragment.key = key;\n fragment.index = idx;\n fragment.context = model;\n if (section.source) fragment.lastValue = model && model.get();\n\n if (fragment.idxModel) fragment.idxModel.applyValue(idx);\n if (fragment.keyModel) fragment.keyModel.applyValue(key);\n if (fragment.pathModel) {\n fragment.pathModel.context = model;\n fragment.pathModel.applyValue(model.getKeypath());\n }\n if (fragment.rootModel) {\n fragment.rootModel.context = model;\n fragment.rootModel.applyValue(model.getKeypath(fragment.ractive.root));\n }\n\n // handle any aliases\n const aliases = fragment.aliases;\n section.aliases &&\n section.aliases.forEach(a => {\n if (a.x.r === '.') aliases[a.n] = model;\n else if (a.x.r === '@index') aliases[a.n] = fragment.getIndex();\n else if (a.x.r === '@key') aliases[a.n] = fragment.getKey();\n else if (a.x.r === '@keypath') aliases[a.n] = fragment.getKeypath();\n else if (a.x.r === '@rootpath') aliases[a.n] = fragment.getKeypath(true);\n });\n}\n\nfunction shuffleValues(section, shuffler) {\n if (shuffler === true) {\n return section.context.get().slice();\n } else {\n return section.context.get().map(v => shuffler.reduce((a, c) => a && a[c], v));\n }\n}\n\nfunction contextFor(section, fragment, key) {\n if (section.source) {\n let idx;\n const source = section.source.model.get();\n if (source.indexOf && ~(idx = source.indexOf(section.context.joinKey(key).get())))\n return section.source.model.joinKey(idx);\n }\n\n return section.context.joinKey(key);\n}\n","import {\n SECTION_EACH,\n SECTION_IF,\n SECTION_IF_WITH,\n SECTION_UNLESS,\n SECTION_WITH\n} from 'config/types';\nimport { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectLike } from 'utils/is';\nimport { keep } from 'shared/set';\nimport runloop from 'src/global/runloop';\nimport Fragment from '../Fragment';\nimport RepeatedFragment from '../RepeatedFragment';\nimport { MustacheContainer } from './shared/Mustache';\nimport { keys } from 'utils/object';\n\nfunction isEmpty(value) {\n return (\n !value ||\n (isArray(value) && value.length === 0) ||\n (isObject(value) && keys(value).length === 0)\n );\n}\n\nfunction getType(value, hasIndexRef) {\n if (hasIndexRef || isArray(value)) return SECTION_EACH;\n if (isObjectLike(value)) return SECTION_IF_WITH;\n if (value === undefined) return null;\n return SECTION_IF;\n}\n\nexport default class Section extends MustacheContainer {\n constructor(options) {\n super(options);\n\n this.sectionType = options.template.n || null;\n this.templateSectionType = this.sectionType;\n this.subordinate = options.template.l === 1;\n this.fragment = null;\n }\n\n bind() {\n super.bind();\n\n if (this.subordinate) {\n this.sibling = this.up.items[this.up.items.indexOf(this) - 1];\n this.sibling.nextSibling = this;\n }\n\n // if we managed to bind, we need to create children\n if (this.model) {\n this.dirty = true;\n this.update();\n } else if (\n this.sectionType &&\n this.sectionType === SECTION_UNLESS &&\n (!this.sibling || !this.sibling.isTruthy())\n ) {\n this.fragment = new Fragment({\n owner: this,\n template: this.template.f\n }).bind();\n }\n }\n\n detach() {\n const frag = this.fragment || this.detached;\n return frag ? frag.detach() : super.detach();\n }\n\n isTruthy() {\n if (this.subordinate && this.sibling.isTruthy()) return true;\n const value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n return !!value && (this.templateSectionType === SECTION_IF_WITH || !isEmpty(value));\n }\n\n rebind(next, previous, safe) {\n if (super.rebind(next, previous, safe)) {\n if (this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS) {\n this.fragment.rebind(next);\n }\n }\n }\n\n rebound(update) {\n if (this.model) {\n if (this.model.rebound) this.model.rebound(update);\n else {\n super.unbind();\n super.bind();\n if (\n this.sectionType === SECTION_WITH ||\n this.sectionType === SECTION_IF_WITH ||\n this.sectionType === SECTION_EACH\n ) {\n if (this.fragment) this.fragment.rebind(this.model);\n }\n\n if (update) this.bubble();\n }\n }\n if (this.fragment) this.fragment.rebound(update);\n }\n\n render(target, occupants) {\n this.rendered = true;\n if (this.fragment) this.fragment.render(target, occupants);\n }\n\n shuffle(newIndices) {\n if (this.fragment && this.sectionType === SECTION_EACH) {\n this.fragment.shuffle(newIndices);\n }\n }\n\n unbind() {\n super.unbind();\n if (this.fragment) this.fragment.unbind();\n }\n\n unrender(shouldDestroy) {\n if (this.rendered && this.fragment) this.fragment.unrender(shouldDestroy);\n this.rendered = false;\n }\n\n update() {\n if (!this.dirty) return;\n\n if (this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS) {\n this.fragment.context = this.model;\n }\n\n if (!this.model && this.sectionType !== SECTION_UNLESS) return;\n\n this.dirty = false;\n\n const value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n const siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n const lastType = this.sectionType;\n\n // watch for switching section types\n if (this.sectionType === null || this.templateSectionType === null)\n this.sectionType = getType(value, this.template.i);\n if (lastType && lastType !== this.sectionType && this.fragment) {\n if (this.rendered) {\n this.fragment.unbind().unrender(true);\n }\n\n this.fragment = null;\n }\n\n let newFragment;\n\n const fragmentShouldExist =\n this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n (siblingFalsey && (this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy())); // if, unless, and if-with depend on siblings and the condition\n\n if (fragmentShouldExist) {\n if (!this.fragment) this.fragment = this.detached;\n\n if (this.fragment) {\n // check for detached fragment\n if (this.detached) {\n attach(this, this.fragment);\n this.detached = false;\n this.rendered = true;\n }\n\n if (!this.fragment.bound) this.fragment.bind(this.model);\n this.fragment.update();\n } else {\n if (this.sectionType === SECTION_EACH) {\n newFragment = new RepeatedFragment({\n owner: this,\n template: this.template.f,\n indexRef: this.template.i\n }).bind(this.model);\n } else {\n // only with and if-with provide context - if and unless do not\n const context =\n this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS\n ? this.model\n : null;\n newFragment = new Fragment({\n owner: this,\n template: this.template.f\n }).bind(context);\n }\n }\n } else {\n if (this.fragment && this.rendered) {\n if (keep !== true) {\n this.fragment.unbind().unrender(true);\n } else {\n this.unrender(false);\n this.detached = this.fragment;\n runloop.promise().then(() => {\n if (this.detached) this.detach();\n });\n }\n } else if (this.fragment) {\n this.fragment.unbind();\n }\n\n this.fragment = null;\n }\n\n if (newFragment) {\n if (this.rendered) {\n attach(this, newFragment);\n }\n\n this.fragment = newFragment;\n }\n\n if (this.nextSibling) {\n this.nextSibling.dirty = true;\n this.nextSibling.update();\n }\n }\n}\n\nfunction attach(section, fragment) {\n const anchor = section.up.findNextNode(section);\n\n if (anchor) {\n const docFrag = createDocumentFragment();\n fragment.render(docFrag);\n\n anchor.parentNode.insertBefore(docFrag, anchor);\n } else {\n fragment.render(section.up.findParentNode());\n }\n}\n","import { toArray } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Element from '../../Element';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default class Select extends Element {\n constructor(options) {\n super(options);\n this.options = [];\n }\n\n foundNode(node) {\n if (this.binding) {\n const selectedOptions = getSelectedOptions(node);\n\n if (selectedOptions.length > 0) {\n this.selectedOptions = selectedOptions;\n }\n }\n }\n\n render(target, occupants) {\n super.render(target, occupants);\n this.sync();\n\n const node = this.node;\n\n let i = node.options.length;\n while (i--) {\n node.options[i].defaultSelected = node.options[i].selected;\n }\n\n this.rendered = true;\n }\n\n sync() {\n const selectNode = this.node;\n\n if (!selectNode) return;\n\n const options = toArray(selectNode.options);\n\n if (this.selectedOptions) {\n options.forEach(o => {\n if (this.selectedOptions.indexOf(o) >= 0) o.selected = true;\n else o.selected = false;\n });\n this.binding.setFromNode(selectNode);\n delete this.selectedOptions;\n return;\n }\n\n const selectValue = this.getAttribute('value');\n const isMultiple = this.getAttribute('multiple');\n const array = isMultiple && isArray(selectValue);\n\n // If the <select> has a specified value, that should override\n // these options\n if (selectValue !== undefined) {\n let optionWasSelected;\n\n options.forEach(o => {\n const optionValue = o._ractive ? o._ractive.value : o.value;\n const shouldSelect = isMultiple\n ? array && this.valueContains(selectValue, optionValue)\n : this.compare(selectValue, optionValue);\n\n if (shouldSelect) {\n optionWasSelected = true;\n }\n\n o.selected = shouldSelect;\n });\n\n if (!optionWasSelected && !isMultiple) {\n if (this.binding) {\n this.binding.forceUpdate();\n }\n }\n } else if (this.binding && this.binding.forceUpdate) {\n // Otherwise the value should be initialised according to which\n // <option> element is selected, if twoway binding is in effect\n this.binding.forceUpdate();\n }\n }\n valueContains(selectValue, optionValue) {\n let i = selectValue.length;\n while (i--) {\n if (this.compare(optionValue, selectValue[i])) return true;\n }\n }\n compare(optionValue, selectValue) {\n const comparator = this.getAttribute('value-comparator');\n if (comparator) {\n if (isFunction(comparator)) {\n return comparator(selectValue, optionValue);\n }\n if (selectValue && optionValue) {\n return selectValue[comparator] == optionValue[comparator];\n }\n }\n return selectValue == optionValue;\n }\n update() {\n const dirty = this.dirty;\n super.update();\n if (dirty) {\n this.sync();\n }\n }\n}\n","import { ATTRIBUTE } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport Input from './Input';\nimport { isBindable } from '../binding/selectBinding';\nimport createItem from '../../createItem';\nimport Fragment from '../../../Fragment';\n\nexport default class Textarea extends Input {\n constructor(options) {\n const template = options.template;\n\n options.deferContent = true;\n\n super(options);\n\n // check for single interpolator binding\n if (!this.attributeByName.value) {\n if (template.f && isBindable({ template })) {\n (this.attributes || (this.attributes = [])).push(\n createItem({\n owner: this,\n template: { t: ATTRIBUTE, f: template.f, n: 'value' },\n up: this.up\n })\n );\n } else {\n this.fragment = new Fragment({\n owner: this,\n cssIds: null,\n template: template.f\n });\n }\n }\n }\n\n bubble() {\n if (!this.dirty) {\n this.dirty = true;\n\n if (this.rendered && !this.binding && this.fragment) {\n runloop.scheduleTask(() => {\n this.dirty = false;\n this.node.value = this.fragment.toString();\n });\n }\n\n this.up.bubble(); // default behaviour\n }\n }\n}\n","import { TEXT } from 'config/types';\nimport { escapeHtml } from 'utils/html';\nimport { detachNode } from 'utils/dom';\nimport noop from 'utils/noop';\nimport Item from './shared/Item';\nimport progressiveText from './shared/progressiveText';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Text extends Item {\n constructor(options) {\n super(options);\n this.type = TEXT;\n }\n\n detach() {\n return detachNode(this.node);\n }\n\n firstNode() {\n return this.node;\n }\n\n render(target, occupants) {\n if (inAttributes()) return;\n this.rendered = true;\n\n progressiveText(this, target, occupants, this.template);\n }\n\n toString(escape) {\n return escape ? escapeHtml(this.template) : this.template;\n }\n\n unrender(shouldDestroy) {\n if (this.rendered && shouldDestroy) this.detach();\n this.rendered = false;\n }\n\n valueOf() {\n return this.template;\n }\n}\n\nconst proto = Text.prototype;\nproto.bind = proto.unbind = proto.update = noop;\n","import { win, doc, vendors } from './environment';\n\nexport let visible;\nlet hidden = 'hidden';\n\nif (doc) {\n let prefix;\n\n /* istanbul ignore next */\n if (hidden in doc) {\n prefix = '';\n } else {\n let i = vendors.length;\n while (i--) {\n const vendor = vendors[i];\n hidden = vendor + 'Hidden';\n\n if (hidden in doc) {\n prefix = vendor;\n break;\n }\n }\n }\n\n /* istanbul ignore else */\n if (prefix !== undefined) {\n doc.addEventListener(prefix + 'visibilitychange', onChange);\n onChange();\n } else {\n // gah, we're in an old browser\n if ('onfocusout' in doc) {\n doc.addEventListener('focusout', onHide);\n doc.addEventListener('focusin', onShow);\n } else {\n win.addEventListener('pagehide', onHide);\n win.addEventListener('blur', onHide);\n\n win.addEventListener('pageshow', onShow);\n win.addEventListener('focus', onShow);\n }\n\n visible = true; // until proven otherwise. Not ideal but hey\n }\n}\n\nfunction onChange() {\n visible = !doc[hidden];\n}\n\n/* istanbul ignore next */\nfunction onHide() {\n visible = false;\n}\n\n/* istanbul ignore next */\nfunction onShow() {\n visible = true;\n}\n","import { isClient, vendors } from 'config/environment';\nimport { createElement } from 'utils/dom';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nlet prefix;\n\n/* istanbul ignore next */\nif (!isClient) {\n prefix = null;\n} else {\n const prefixCache = {};\n const testStyle = createElement('div').style;\n\n // technically this also normalizes on hyphenated styles as well\n prefix = function(prop) {\n if (!prefixCache[prop]) {\n const name = hyphenateCamel(prop);\n\n if (testStyle[prop] !== undefined) {\n prefixCache[prop] = name;\n } else {\n /* istanbul ignore next */\n // test vendors...\n let i = vendors.length;\n while (i--) {\n const vendor = `-${vendors[i]}-${name}`;\n if (testStyle[vendor] !== undefined) {\n prefixCache[prop] = vendor;\n break;\n }\n }\n }\n }\n\n return prefixCache[prop];\n };\n}\n\nexport default prefix;\n","import { vendors } from 'config/environment';\n\nconst vendorPattern = new RegExp('^(?:' + vendors.join('|') + ')([A-Z])');\n\nexport default function(str) {\n /* istanbul ignore next */\n if (!str) return ''; // edge case\n\n /* istanbul ignore next */\n if (vendorPattern.test(str)) str = '-' + str;\n\n return str.replace(/[A-Z]/g, match => '-' + match.toLowerCase());\n}\n","import { missingPlugin } from 'config/errors';\nimport { isClient } from 'config/environment';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { createElement } from 'utils/dom';\nimport interpolate from 'shared/interpolate';\nimport Ticker from 'shared/Ticker';\nimport hyphenate from './hyphenate';\nimport { isFunction, isString } from 'utils/is';\n\nlet createTransitions;\n\nif (!isClient) {\n createTransitions = null;\n} else {\n const testStyle = createElement('div').style;\n const linear = x => x;\n\n const canUseCssTransitions = {};\n const cannotUseCssTransitions = {};\n\n // determine some facts about our environment\n let TRANSITION;\n let TRANSITIONEND;\n let CSS_TRANSITIONS_ENABLED;\n let TRANSITION_DURATION;\n let TRANSITION_PROPERTY;\n let TRANSITION_TIMING_FUNCTION;\n\n if (testStyle.transition !== undefined) {\n TRANSITION = 'transition';\n TRANSITIONEND = 'transitionend';\n CSS_TRANSITIONS_ENABLED = true;\n } else if (testStyle.webkitTransition !== undefined) {\n TRANSITION = 'webkitTransition';\n TRANSITIONEND = 'webkitTransitionEnd';\n CSS_TRANSITIONS_ENABLED = true;\n } else {\n CSS_TRANSITIONS_ENABLED = false;\n }\n\n if (TRANSITION) {\n TRANSITION_DURATION = TRANSITION + 'Duration';\n TRANSITION_PROPERTY = TRANSITION + 'Property';\n TRANSITION_TIMING_FUNCTION = TRANSITION + 'TimingFunction';\n }\n\n createTransitions = function(t, to, options, changedProperties, resolve) {\n // Wait a beat (otherwise the target styles will be applied immediately)\n // TODO use a fastdom-style mechanism?\n setTimeout(() => {\n let jsTransitionsComplete;\n let cssTransitionsComplete;\n let cssTimeout; // eslint-disable-line prefer-const\n\n function transitionDone() {\n clearTimeout(cssTimeout);\n }\n\n function checkComplete() {\n if (jsTransitionsComplete && cssTransitionsComplete) {\n t.unregisterCompleteHandler(transitionDone);\n // will changes to events and fire have an unexpected consequence here?\n t.ractive.fire(t.name + ':end', t.node, t.isIntro);\n resolve();\n }\n }\n\n // this is used to keep track of which elements can use CSS to animate\n // which properties\n const hashPrefix = (t.node.namespaceURI || '') + t.node.tagName;\n\n // need to reset transition properties\n const style = t.node.style;\n const previous = {\n property: style[TRANSITION_PROPERTY],\n timing: style[TRANSITION_TIMING_FUNCTION],\n duration: style[TRANSITION_DURATION]\n };\n\n function transitionEndHandler(event) {\n const index = changedProperties.indexOf(event.propertyName);\n\n if (index !== -1) {\n changedProperties.splice(index, 1);\n }\n\n if (changedProperties.length) {\n // still transitioning...\n return;\n }\n\n clearTimeout(cssTimeout);\n cssTransitionsDone();\n }\n\n function cssTransitionsDone() {\n style[TRANSITION_PROPERTY] = previous.property;\n style[TRANSITION_TIMING_FUNCTION] = previous.duration;\n style[TRANSITION_DURATION] = previous.timing;\n\n t.node.removeEventListener(TRANSITIONEND, transitionEndHandler, false);\n\n cssTransitionsComplete = true;\n checkComplete();\n }\n\n t.node.addEventListener(TRANSITIONEND, transitionEndHandler, false);\n\n // safety net in case transitionend never fires\n cssTimeout = setTimeout(() => {\n changedProperties = [];\n cssTransitionsDone();\n }, options.duration + (options.delay || 0) + 50);\n t.registerCompleteHandler(transitionDone);\n\n style[TRANSITION_PROPERTY] = changedProperties.join(',');\n const easingName = hyphenate(options.easing || 'linear');\n style[TRANSITION_TIMING_FUNCTION] = easingName;\n const cssTiming = style[TRANSITION_TIMING_FUNCTION] === easingName;\n style[TRANSITION_DURATION] = options.duration / 1000 + 's';\n\n setTimeout(() => {\n let i = changedProperties.length;\n let hash;\n let originalValue = null;\n let index;\n const propertiesToTransitionInJs = [];\n let prop;\n let suffix;\n let interpolator;\n\n while (i--) {\n prop = changedProperties[i];\n hash = hashPrefix + prop;\n\n if (cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[hash]) {\n const initial = style[prop];\n style[prop] = to[prop];\n\n // If we're not sure if CSS transitions are supported for\n // this tag/property combo, find out now\n if (!(hash in canUseCssTransitions)) {\n originalValue = t.getStyle(prop);\n\n // if this property is transitionable in this browser,\n // the current style will be different from the target style\n canUseCssTransitions[hash] = t.getStyle(prop) != to[prop];\n cannotUseCssTransitions[hash] = !canUseCssTransitions[hash];\n\n // Reset, if we're going to use timers after all\n if (cannotUseCssTransitions[hash]) {\n style[prop] = initial;\n }\n }\n }\n\n if (!cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[hash]) {\n // we need to fall back to timer-based stuff\n if (originalValue === null) originalValue = t.getStyle(prop);\n\n // need to remove this from changedProperties, otherwise transitionEndHandler\n // will get confused\n index = changedProperties.indexOf(prop);\n if (index === -1) {\n warnIfDebug(\n 'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!',\n { node: t.node }\n );\n } else {\n changedProperties.splice(index, 1);\n }\n\n // TODO Determine whether this property is animatable at all\n\n suffix = /[^\\d]*$/.exec(originalValue)[0];\n interpolator = interpolate(parseFloat(originalValue), parseFloat(to[prop]));\n\n // ...then kick off a timer-based transition\n if (interpolator) {\n propertiesToTransitionInJs.push({\n name: prop,\n interpolator,\n suffix\n });\n } else {\n style[prop] = to[prop];\n }\n\n originalValue = null;\n }\n }\n\n // javascript transitions\n if (propertiesToTransitionInJs.length) {\n let easing;\n\n if (isString(options.easing)) {\n easing = t.ractive.easing[options.easing];\n\n if (!easing) {\n warnOnceIfDebug(missingPlugin(options.easing, 'easing'));\n easing = linear;\n }\n } else if (isFunction(options.easing)) {\n easing = options.easing;\n } else {\n easing = linear;\n }\n\n new Ticker({\n duration: options.duration,\n easing,\n step(pos) {\n let i = propertiesToTransitionInJs.length;\n while (i--) {\n const prop = propertiesToTransitionInJs[i];\n style[prop.name] = prop.interpolator(pos) + prop.suffix;\n }\n },\n complete() {\n jsTransitionsComplete = true;\n checkComplete();\n }\n });\n } else {\n jsTransitionsComplete = true;\n }\n\n if (changedProperties.length) {\n style[TRANSITION_PROPERTY] = changedProperties.join(',');\n } else {\n style[TRANSITION_PROPERTY] = 'none';\n\n // We need to cancel the transitionEndHandler, and deal with\n // the fact that it will never fire\n t.node.removeEventListener(TRANSITIONEND, transitionEndHandler, false);\n cssTransitionsComplete = true;\n checkComplete();\n }\n }, 0);\n }, options.delay || 0);\n };\n}\n\nexport default createTransitions;\n","import { win } from 'config/environment';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction, isNumber, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { findInViewHierarchy } from 'shared/registry';\nimport { visible } from 'config/visibility';\nimport findElement from '../shared/findElement';\nimport prefix from './transitions/prefix';\nimport createTransitions from './transitions/createTransitions';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport { assign, hasOwn, keys } from 'utils/object';\n\nconst getComputedStyle = win && win.getComputedStyle;\nconst resolved = Promise.resolve();\n\nconst names = {\n t0: 'intro-outro',\n t1: 'intro',\n t2: 'outro'\n};\n\nexport default class Transition {\n constructor(options) {\n this.owner = options.owner || options.up.owner || findElement(options.up);\n this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n this.ractive = this.owner.ractive;\n this.template = options.template;\n this.up = options.up;\n this.options = options;\n this.onComplete = [];\n }\n\n animateStyle(style, value, options) {\n if (arguments.length === 4) {\n throw new Error(\n 't.animateStyle() returns a promise - use .then() instead of passing a callback'\n );\n }\n\n // Special case - page isn't visible. Don't animate anything, because\n // that way you'll never get CSS transitionend events\n if (!visible) {\n this.setStyle(style, value);\n return resolved;\n }\n\n let to;\n\n if (isString(style)) {\n to = {};\n to[style] = value;\n } else {\n to = style;\n\n // shuffle arguments\n options = value;\n }\n\n return new Promise(fulfil => {\n // Edge case - if duration is zero, set style synchronously and complete\n if (!options.duration) {\n this.setStyle(to);\n fulfil();\n return;\n }\n\n // Get a list of the properties we're animating\n const propertyNames = keys(to);\n const changedProperties = [];\n\n // Store the current styles\n const computedStyle = getComputedStyle(this.node);\n\n let i = propertyNames.length;\n while (i--) {\n const prop = propertyNames[i];\n const name = prefix(prop);\n\n const current = computedStyle[prefix(prop)];\n\n // record the starting points\n const init = this.node.style[name];\n if (!(name in this.originals)) this.originals[name] = this.node.style[name];\n this.node.style[name] = to[prop];\n this.targets[name] = this.node.style[name];\n this.node.style[name] = init;\n\n // we need to know if we're actually changing anything\n if (current != to[prop]) {\n // use != instead of !==, so we can compare strings with numbers\n changedProperties.push(name);\n\n // if we happened to prefix, make sure there is a properly prefixed value\n to[name] = to[prop];\n\n // make the computed style explicit, so we can animate where\n // e.g. height='auto'\n this.node.style[name] = current;\n }\n }\n\n // If we're not actually changing anything, the transitionend event\n // will never fire! So we complete early\n if (!changedProperties.length) {\n fulfil();\n return;\n }\n\n createTransitions(this, to, options, changedProperties, fulfil);\n });\n }\n\n bind() {\n const options = this.options;\n const type = options.template && options.template.v;\n if (type) {\n if (type === 't0' || type === 't1') this.element.intro = this;\n if (type === 't0' || type === 't2') this.element.outro = this;\n this.eventName = names[type];\n }\n\n const ractive = this.owner.ractive;\n\n this.name = options.name || options.template.n;\n\n if (options.params) {\n this.params = options.params;\n }\n\n if (isFunction(this.name)) {\n this._fn = this.name;\n this.name = this._fn.name;\n } else {\n this._fn = findInViewHierarchy('transitions', ractive, this.name);\n }\n\n if (!this._fn) {\n warnOnceIfDebug(missingPlugin(this.name, 'transition'), { ractive });\n }\n\n setupArgsFn(this, options.template);\n }\n\n getParams() {\n if (this.params) return this.params;\n\n // get expression args if supplied\n if (this.fn) {\n const values = resolveArgs(this, this.template, this.up).map(model => {\n if (!model) return undefined;\n\n return model.get();\n });\n return this.fn.apply(this.ractive, values);\n }\n }\n\n getStyle(props) {\n const computedStyle = getComputedStyle(this.node);\n\n if (isString(props)) {\n return computedStyle[prefix(props)];\n }\n\n if (!isArray(props)) {\n throw new Error(\n 'Transition$getStyle must be passed a string, or an array of strings representing CSS properties'\n );\n }\n\n const styles = {};\n\n let i = props.length;\n while (i--) {\n const prop = props[i];\n let value = computedStyle[prefix(prop)];\n\n if (value === '0px') value = 0;\n styles[prop] = value;\n }\n\n return styles;\n }\n\n processParams(params, defaults) {\n if (isNumber(params)) {\n params = { duration: params };\n } else if (isString(params)) {\n if (params === 'slow') {\n params = { duration: 600 };\n } else if (params === 'fast') {\n params = { duration: 200 };\n } else {\n params = { duration: 400 };\n }\n } else if (!params) {\n params = {};\n }\n\n return assign({}, defaults, params);\n }\n\n registerCompleteHandler(fn) {\n addToArray(this.onComplete, fn);\n }\n\n setStyle(style, value) {\n if (isString(style)) {\n const name = prefix(style);\n if (!hasOwn(this.originals, name)) this.originals[name] = this.node.style[name];\n this.node.style[name] = value;\n this.targets[name] = this.node.style[name];\n } else {\n let prop;\n for (prop in style) {\n if (hasOwn(style, prop)) {\n this.setStyle(prop, style[prop]);\n }\n }\n }\n\n return this;\n }\n\n shouldFire(type) {\n if (!this.ractive.transitionsEnabled) return false;\n\n // check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n if (type === 'intro' && this.ractive.rendering && nearestProp('noIntro', this.ractive, true))\n return false;\n if (type === 'outro' && this.ractive.unrendering && nearestProp('noOutro', this.ractive, false))\n return false;\n\n const params = this.getParams(); // this is an array, the params object should be the first member\n // if there's not a parent element, this can't be nested, so roll on\n if (!this.element.parent) return true;\n\n // if there is a local param, it takes precedent\n if (params && params[0] && isObject(params[0]) && 'nested' in params[0]) {\n if (params[0].nested !== false) return true;\n } else {\n // use the nearest instance setting\n // find the nearest instance that actually has a nested setting\n if (nearestProp('nestedTransitions', this.ractive) !== false) return true;\n }\n\n // check to see if this is actually a nested transition\n let el = this.element.parent;\n while (el) {\n if (el[type] && el[type].starting) return false;\n el = el.parent;\n }\n\n return true;\n }\n\n start() {\n const node = (this.node = this.element.node);\n const originals = (this.originals = {}); //= node.getAttribute( 'style' );\n const targets = (this.targets = {});\n\n let completed;\n const args = this.getParams();\n\n // create t.complete() - we don't want this on the prototype,\n // because we don't want `this` silliness when passing it as\n // an argument\n this.complete = noReset => {\n this.starting = false;\n if (completed) {\n return;\n }\n\n this.onComplete.forEach(fn => fn());\n if (!noReset && this.isIntro) {\n for (const k in targets) {\n if (node.style[k] === targets[k]) node.style[k] = originals[k];\n }\n }\n\n this._manager.remove(this);\n\n completed = true;\n };\n\n // If the transition function doesn't exist, abort\n if (!this._fn) {\n this.complete();\n return;\n }\n\n const promise = this._fn.apply(this.ractive, [this].concat(args));\n if (promise) promise.then(this.complete);\n }\n\n toString() {\n return '';\n }\n\n unbind() {\n if (!this.element.attributes.unbinding) {\n const type = this.options && this.options.template && this.options.template.v;\n if (type === 't0' || type === 't1') this.element.intro = null;\n if (type === 't0' || type === 't2') this.element.outro = null;\n }\n }\n\n unregisterCompleteHandler(fn) {\n removeFromArray(this.onComplete, fn);\n }\n}\n\nconst proto = Transition.prototype;\nproto.destroyed = proto.firstNode = proto.rebound = proto.render = proto.unrender = proto.update = noop;\n\nfunction nearestProp(prop, ractive, rendering) {\n let instance = ractive;\n while (instance) {\n if (\n hasOwn(instance, prop) &&\n (rendering === undefined || rendering ? instance.rendering : instance.unrendering)\n )\n return instance[prop];\n instance = instance.component && instance.component.ractive;\n }\n\n return ractive[prop];\n}\n","import { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\n\nconst elementCache = {};\n\nlet ieBug;\nlet ieBlacklist;\n\ntry {\n createElement('table').innerHTML = 'foo';\n} catch (/* istanbul ignore next */ err) {\n ieBug = true;\n\n ieBlacklist = {\n TABLE: ['<table class=\"x\">', '</table>'],\n THEAD: ['<table><thead class=\"x\">', '</thead></table>'],\n TBODY: ['<table><tbody class=\"x\">', '</tbody></table>'],\n TR: ['<table><tr class=\"x\">', '</tr></table>'],\n SELECT: ['<select class=\"x\">', '</select>']\n };\n}\n\nexport default function(html, node) {\n const nodes = [];\n\n // render 0 and false\n if (html == null || html === '') return nodes;\n\n let container;\n let wrapper;\n let selectedOption;\n\n /* istanbul ignore if */\n if (ieBug && (wrapper = ieBlacklist[node.tagName])) {\n container = element('DIV');\n container.innerHTML = wrapper[0] + html + wrapper[1];\n container = container.querySelector('.x');\n\n if (container.tagName === 'SELECT') {\n selectedOption = container.options[container.selectedIndex];\n }\n } else if (node.namespaceURI === svg) {\n container = element('DIV');\n container.innerHTML = '<svg class=\"x\">' + html + '</svg>';\n container = container.querySelector('.x');\n } else if (node.tagName === 'TEXTAREA') {\n container = createElement('div');\n\n if (typeof container.textContent !== 'undefined') {\n container.textContent = html;\n } else {\n container.innerHTML = html;\n }\n } else {\n container = element(node.tagName);\n container.innerHTML = html;\n\n if (container.tagName === 'SELECT') {\n selectedOption = container.options[container.selectedIndex];\n }\n }\n\n let child;\n while ((child = container.firstChild)) {\n nodes.push(child);\n container.removeChild(child);\n }\n\n // This is really annoying. Extracting <option> nodes from the\n // temporary container <select> causes the remaining ones to\n // become selected. So now we have to deselect them. IE8, you\n // amaze me. You really do\n // ...and now Chrome too\n let i;\n if (node.tagName === 'SELECT') {\n i = nodes.length;\n while (i--) {\n if (nodes[i] !== selectedOption) {\n nodes[i].selected = false;\n }\n }\n }\n\n return nodes;\n}\n\nfunction element(tagName) {\n return elementCache[tagName] || (elementCache[tagName] = createElement(tagName));\n}\n","import { createDocumentFragment, matches } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport { decodeCharacterReferences } from 'utils/html';\nimport runloop from 'src/global/runloop';\nimport Mustache from './shared/Mustache';\nimport insertHtml from './triple/insertHtml';\nimport { inAttribute } from './element/Attribute';\n\nexport default class Triple extends Mustache {\n constructor(options) {\n super(options);\n }\n\n detach() {\n const docFrag = createDocumentFragment();\n if (this.nodes) this.nodes.forEach(node => docFrag.appendChild(node));\n return docFrag;\n }\n\n find(selector) {\n const len = this.nodes.length;\n let i;\n\n for (i = 0; i < len; i += 1) {\n const node = this.nodes[i];\n\n if (node.nodeType !== 1) continue;\n\n if (matches(node, selector)) return node;\n\n const queryResult = node.querySelector(selector);\n if (queryResult) return queryResult;\n }\n\n return null;\n }\n\n findAll(selector, options) {\n const { result } = options;\n const len = this.nodes.length;\n let i;\n\n for (i = 0; i < len; i += 1) {\n const node = this.nodes[i];\n\n if (node.nodeType !== 1) continue;\n\n if (matches(node, selector)) result.push(node);\n\n const queryAllResult = node.querySelectorAll(selector);\n if (queryAllResult) {\n result.push.apply(result, queryAllResult);\n }\n }\n }\n\n findComponent() {\n return null;\n }\n\n firstNode() {\n return this.rendered && this.nodes[0];\n }\n\n render(target, occupants, anchor) {\n if (!this.nodes) {\n const html = this.model ? this.model.get() : '';\n this.nodes = insertHtml(html, target);\n }\n\n let nodes = this.nodes;\n\n // progressive enhancement\n if (occupants) {\n let i = -1;\n let next;\n\n // start with the first node that should be rendered\n while (occupants.length && (next = this.nodes[i + 1])) {\n let n;\n // look through the occupants until a matching node is found\n while ((n = occupants.shift())) {\n const t = n.nodeType;\n\n if (\n t === next.nodeType &&\n ((t === 1 && n.outerHTML === next.outerHTML) ||\n ((t === 3 || t === 8) && n.nodeValue === next.nodeValue))\n ) {\n this.nodes.splice(++i, 1, n); // replace the generated node with the existing one\n break;\n } else {\n target.removeChild(n); // remove the non-matching existing node\n }\n }\n }\n\n if (i >= 0) {\n // update the list of remaining nodes to attach, excluding any that were replaced by existing nodes\n nodes = this.nodes.slice(i);\n }\n\n // update the anchor to be the next occupant\n if (occupants.length) anchor = occupants[0];\n }\n\n // attach any remainging nodes to the parent\n if (nodes.length) {\n const frag = createDocumentFragment();\n nodes.forEach(n => frag.appendChild(n));\n\n if (anchor) {\n target.insertBefore(frag, anchor);\n } else {\n target.appendChild(frag);\n }\n }\n\n this.rendered = true;\n }\n\n toString() {\n let value = this.model && this.model.get();\n value = value != null ? '' + value : '';\n\n return inAttribute() ? decodeCharacterReferences(value) : value;\n }\n\n unrender() {\n if (this.nodes)\n this.nodes.forEach(node => {\n // defer detachment until all relevant outros are done\n runloop.detachWhenReady({\n node,\n detach() {\n detachNode(node);\n }\n });\n });\n this.rendered = false;\n this.nodes = null;\n }\n\n update() {\n if (this.rendered && this.dirty) {\n this.dirty = false;\n\n this.unrender();\n this.render(this.up.findParentNode(), null, this.up.findNextNode(this));\n } else {\n // make sure to reset the dirty flag even if not rendered\n this.dirty = false;\n }\n }\n}\n","import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { findInstance } from 'shared/registry';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isString } from 'utils/is';\n\n// finds the component constructor in the registry or view hierarchy registries\nexport default function getComponentConstructor(ractive, name) {\n const instance = findInstance('components', ractive, name);\n let Component;\n\n if (instance) {\n Component = instance.components[name];\n\n if (Component && !Component.isInstance) {\n if (Component.default && Component.default.isInstance) Component = Component.default;\n else if (!Component.then && isFunction(Component)) {\n // function option, execute and store for reset\n const fn = Component.bind(instance);\n fn.isOwner = hasOwn(instance.components, name);\n Component = fn();\n\n if (!Component) {\n warnIfDebug(noRegistryFunctionReturn, name, 'component', 'component', {\n ractive\n });\n return;\n }\n\n if (isString(Component)) {\n // allow string lookup\n Component = getComponentConstructor(ractive, Component);\n }\n\n Component._fn = fn;\n instance.components[name] = Component;\n }\n }\n }\n\n return Component;\n}\n","import Partial from './Partial';\nimport { ELEMENT } from 'config/types';\nimport { assign } from 'utils/object';\n\nexport default function asyncProxy(promise, options) {\n const partials = options.template.p || {};\n const name = options.template.e;\n\n const opts = assign({}, options, {\n template: { t: ELEMENT, e: name },\n macro(handle) {\n handle.setTemplate(partials['async-loading'] || []);\n promise.then(\n cmp => {\n options.up.ractive.components[name] = cmp;\n if (partials['async-loaded']) {\n handle.partials.component = [options.template];\n handle.setTemplate(partials['async-loaded']);\n } else {\n handle.setTemplate([options.template]);\n }\n },\n err => {\n if (partials['async-failed']) {\n handle.aliasLocal('error', 'error');\n handle.set('@local.error', err);\n handle.setTemplate(partials['async-failed']);\n } else {\n handle.setTemplate([]);\n }\n }\n );\n }\n });\n return new Partial(opts);\n}\n","import { ATTRIBUTE, CATCH, ELEMENT, ELSE, INTERPOLATOR, SECTION, THEN } from 'src/config/types';\nimport Partial from './Partial';\nimport { assign } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nfunction extract(tpl, type, name) {\n const p = tpl.f.find(s => s.t === type);\n if (p) {\n if (p.n)\n return [\n {\n t: 19,\n n: 54,\n f: p.f || [],\n z: [{ n: p.n, x: { r: `__await.${name}` } }]\n }\n ];\n else return p.f || [];\n } else return [];\n}\n\nexport default function Await(options) {\n const tpl = options.template;\n\n const success = extract(tpl, THEN, 'value');\n const error = extract(tpl, CATCH, 'error');\n const pending = extract(tpl, SECTION);\n const undef = extract(tpl, ELSE);\n\n const opts = assign({}, options, {\n template: {\n t: ELEMENT,\n m: [\n {\n t: ATTRIBUTE,\n n: 'for',\n f: [{ t: INTERPOLATOR, r: tpl.r, rx: tpl.rx, x: tpl.x }]\n }\n ]\n },\n macro(handle, attrs) {\n handle.aliasLocal('__await');\n\n function update(attrs) {\n if (attrs.for && isFunction(attrs.for.then)) {\n handle.setTemplate(pending);\n\n attrs.for.then(\n v => {\n handle.set('@local.value', v);\n handle.setTemplate(success);\n },\n e => {\n handle.set('@local.error', e);\n handle.setTemplate(error);\n }\n );\n } else if (attrs.for === undefined) {\n handle.setTemplate(undef);\n } else {\n handle.set('@local.value', attrs.for);\n handle.setTemplate(success);\n }\n }\n\n update(attrs);\n\n return {\n update\n };\n }\n });\n\n opts.macro.attributes = ['for'];\n\n return new Partial(opts);\n}\n","import {\n ALIAS,\n ANCHOR,\n AWAIT,\n COMMENT,\n COMPONENT,\n DOCTYPE,\n ELEMENT,\n INTERPOLATOR,\n PARTIAL,\n SECTION,\n TRIPLE,\n YIELDER\n} from 'config/types';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, EVENT, TRANSITION } from 'config/types';\nimport Alias from './Alias';\nimport Attribute from './element/Attribute';\nimport BindingFlag from './element/BindingFlag';\nimport Comment from './Comment';\nimport Component from './Component';\nimport Decorator from './element/Decorator';\nimport Doctype from './Doctype';\nimport Form from './element/specials/Form';\nimport Element from './Element';\nimport EventDirective from './shared/EventDirective';\nimport Interpolator from './Interpolator';\nimport Input from './element/specials/Input';\nimport Mapping from './component/Mapping';\nimport Option from './element/specials/Option';\nimport Partial from './Partial';\nimport Section from './Section';\nimport Select from './element/specials/Select';\nimport Textarea from './element/specials/Textarea';\nimport Text from './Text';\nimport Transition from './element/Transition';\nimport Triple from './Triple';\nimport getComponentConstructor from './component/getComponentConstructor';\nimport findElement from './shared/findElement';\nimport { findInstance } from 'shared/registry';\nimport asyncProxy from './asyncProxy';\nimport Await from './Await';\nimport { isString, isFunction } from 'utils/is';\n\nconst constructors = {};\nconstructors[ALIAS] = Alias;\nconstructors[ANCHOR] = Component;\nconstructors[AWAIT] = Await;\nconstructors[DOCTYPE] = Doctype;\nconstructors[INTERPOLATOR] = Interpolator;\nconstructors[PARTIAL] = Partial;\nconstructors[SECTION] = Section;\nconstructors[TRIPLE] = Triple;\nconstructors[YIELDER] = Partial;\n\nconstructors[ATTRIBUTE] = Attribute;\nconstructors[BINDING_FLAG] = BindingFlag;\nconstructors[DECORATOR] = Decorator;\nconstructors[EVENT] = EventDirective;\nconstructors[TRANSITION] = Transition;\nconstructors[COMMENT] = Comment;\n\nconst specialElements = {\n doctype: Doctype,\n form: Form,\n input: Input,\n option: Option,\n select: Select,\n textarea: Textarea\n};\n\nexport default function createItem(options) {\n if (isString(options.template)) {\n return new Text(options);\n }\n\n let ctor;\n let name;\n const type = options.template.t;\n\n if (type === ELEMENT) {\n name = options.template.e;\n\n // could be a macro partial\n ctor = findInstance('partials', options.up.ractive, name);\n if (ctor) {\n ctor = ctor.partials[name];\n if (ctor.styleSet) {\n options.macro = ctor;\n return new Partial(options);\n }\n }\n\n // could be component or element\n ctor = getComponentConstructor(options.up.ractive, name);\n if (ctor) {\n if (isFunction(ctor.then)) {\n return asyncProxy(ctor, options);\n } else if (isFunction(ctor)) {\n return new Component(options, ctor);\n }\n }\n\n ctor = specialElements[name.toLowerCase()] || Element;\n return new ctor(options);\n }\n\n let Item;\n\n // component mappings are a special case of attribute\n if (type === ATTRIBUTE) {\n let el = options.owner;\n if (!el || (el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT)) {\n el = findElement(options.up);\n }\n options.element = el;\n\n Item = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n } else {\n Item = constructors[type];\n }\n\n if (!Item) throw new Error(`Unrecognised item type ${type}`);\n\n return new Item(options);\n}\n","import { TEXT } from 'config/types';\n\n// TODO all this code needs to die\nexport default function processItems(items, values, guid, counter = 0) {\n return items\n .map(item => {\n if (item.type === TEXT) {\n return item.template;\n }\n\n if (item.fragment) {\n if (item.fragment.iterations) {\n return item.fragment.iterations\n .map(fragment => {\n return processItems(fragment.items, values, guid, counter);\n })\n .join('');\n } else {\n return processItems(item.fragment.items, values, guid, counter);\n }\n }\n\n const placeholderId = `${guid}-${counter++}`;\n const model = item.model || item.newModel;\n\n values[placeholderId] = model\n ? model.wrapper\n ? model.wrapperValue\n : model.get()\n : undefined;\n\n return '${' + placeholderId + '}';\n })\n .join('');\n}\n","import { ELEMENT, YIELDER } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport { findMap } from 'utils/array';\nimport { getContext, findParentWithContext } from 'shared/getRactiveContext';\nimport { shuffled, toEscapedString, toString } from 'shared/methodCallers';\nimport createItem from './items/createItem';\nimport processItems from './helpers/processItems';\nimport parseJSON from 'utils/parseJSON';\nimport { createDocumentFragment } from 'utils/dom';\nimport KeyModel from 'src/model/specials/KeyModel';\n\nexport default class Fragment {\n constructor(options) {\n this.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n this.isRoot = !options.owner.up;\n this.parent = this.isRoot ? null : this.owner.up;\n this.ractive = options.ractive || (this.isRoot ? options.owner : this.parent.ractive);\n\n this.componentParent = this.isRoot && this.ractive.component ? this.ractive.component.up : null;\n if (!this.isRoot || this.ractive.delegate) {\n this.delegate = this.owner.containerFragment\n ? this.owner.containerFragment && this.owner.containerFragment.delegate\n : (this.componentParent && this.componentParent.delegate) ||\n (this.parent && this.parent.delegate);\n } else {\n this.delegate = false;\n }\n\n this.context = null;\n this.rendered = false;\n\n // encapsulated styles should be inherited until they get applied by an element\n if ('cssIds' in options) {\n this.cssIds = options.cssIds && options.cssIds.length && options.cssIds;\n } else {\n this.cssIds = this.parent ? this.parent.cssIds : null;\n }\n\n this.dirty = false;\n this.dirtyValue = true; // used for attribute values\n\n this.template = options.template || [];\n this.createItems();\n }\n\n bind(context) {\n this.context = context;\n const len = this.items.length;\n for (let i = 0; i < len; i++) this.items[i].bind();\n this.bound = true;\n\n // in rare cases, a forced resolution (or similar) will cause the\n // fragment to be dirty before it's even finished binding. In those\n // cases we update immediately\n if (this.dirty) this.update();\n\n return this;\n }\n\n bubble() {\n this.dirtyValue = true;\n\n if (!this.dirty) {\n this.dirty = true;\n\n if (this.isRoot) {\n // TODO encapsulate 'is component root, but not overall root' check?\n if (this.ractive.component) {\n this.ractive.component.bubble();\n } else if (this.bound) {\n runloop.addFragment(this);\n }\n } else {\n this.owner.bubble(this.index);\n }\n }\n }\n\n createItems() {\n // this is a hot code path\n const max = this.template.length;\n this.items = [];\n for (let i = 0; i < max; i++) {\n this.items[i] = createItem({\n up: this,\n template: this.template[i],\n index: i\n });\n }\n }\n\n destroyed() {\n const len = this.items.length;\n for (let i = 0; i < len; i++) this.items[i].destroyed();\n if (this.pathModel) this.pathModel.destroyed();\n if (this.rootModel) this.rootModel.destroyed();\n }\n\n detach() {\n const docFrag = createDocumentFragment();\n const xs = this.items;\n const len = xs.length;\n for (let i = 0; i < len; i++) {\n docFrag.appendChild(xs[i].detach());\n }\n return docFrag;\n }\n\n find(selector, options) {\n return findMap(this.items, i => i.find(selector, options));\n }\n\n findAll(selector, options) {\n if (this.items) {\n this.items.forEach(i => i.findAll && i.findAll(selector, options));\n }\n }\n\n findComponent(name, options) {\n return findMap(this.items, i => i.findComponent(name, options));\n }\n\n findAllComponents(name, options) {\n if (this.items) {\n this.items.forEach(i => i.findAllComponents && i.findAllComponents(name, options));\n }\n }\n\n findContext() {\n const base = findParentWithContext(this);\n if (!base || !base.context) return this.ractive.viewmodel;\n else return base.context;\n }\n\n findNextNode(item) {\n // search for the next node going forward\n if (item) {\n let it;\n for (let i = item.index + 1; i < this.items.length; i++) {\n it = this.items[i];\n if (!it || !it.firstNode) continue;\n\n const node = it.firstNode(true);\n if (node) return node;\n }\n }\n\n // if this is the root fragment, and there are no more items,\n // it means we're at the end...\n if (this.isRoot) {\n if (this.ractive.component) {\n return this.ractive.component.up.findNextNode(this.ractive.component);\n }\n\n // TODO possible edge case with other content\n // appended to this.ractive.el?\n return null;\n }\n\n if (this.parent) return this.owner.findNextNode(this); // the argument is in case the parent is a RepeatedFragment\n }\n\n findParentNode() {\n let fragment = this;\n\n do {\n if (fragment.owner.type === ELEMENT) {\n return fragment.owner.node;\n }\n\n if (fragment.isRoot && !fragment.ractive.component) {\n // TODO encapsulate check\n return fragment.ractive.el;\n }\n\n if (fragment.owner.type === YIELDER) {\n fragment = fragment.owner.containerFragment;\n } else {\n fragment = fragment.componentParent || fragment.parent; // TODO ugh\n }\n } while (fragment);\n\n throw new Error('Could not find parent node'); // TODO link to issue tracker\n }\n\n firstNode(skipParent) {\n const node = findMap(this.items, i => i.firstNode(true));\n if (node) return node;\n if (skipParent) return null;\n\n return this.parent.findNextNode(this.owner);\n }\n\n getKey() {\n return this.keyModel || (this.keyModel = new KeyModel(this.key));\n }\n\n getIndex() {\n return this.idxModel || (this.idxModel = new KeyModel(this.index));\n }\n\n rebind(next) {\n this.context = next;\n if (this.rootModel) this.rootModel.context = this.context;\n if (this.pathModel) this.pathModel.context = this.context;\n }\n\n rebound(update) {\n this.items.forEach(x => x.rebound(update));\n if (update) {\n if (this.rootModel) this.rootModel.applyValue(this.context.getKeypath(this.ractive.root));\n if (this.pathModel) this.pathModel.applyValue(this.context.getKeypath());\n }\n }\n\n render(target, occupants) {\n if (this.rendered) throw new Error('Fragment is already rendered!');\n this.rendered = true;\n\n const xs = this.items;\n const len = xs.length;\n for (let i = 0; i < len; i++) {\n xs[i].render(target, occupants);\n }\n }\n\n resetTemplate(template) {\n const wasBound = this.bound;\n const wasRendered = this.rendered;\n\n // TODO ensure transitions are disabled globally during reset\n\n if (wasBound) {\n if (wasRendered) this.unrender(true);\n this.unbind();\n }\n\n this.template = template;\n this.createItems();\n\n if (wasBound) {\n this.bind(this.context);\n\n if (wasRendered) {\n const parentNode = this.findParentNode();\n const anchor = this.findNextNode();\n\n if (anchor) {\n const docFrag = createDocumentFragment();\n this.render(docFrag);\n parentNode.insertBefore(docFrag, anchor);\n } else {\n this.render(parentNode);\n }\n }\n }\n }\n\n shuffled() {\n this.items.forEach(shuffled);\n if (this.rootModel) this.rootModel.applyValue(this.context.getKeypath(this.ractive.root));\n if (this.pathModel) this.pathModel.applyValue(this.context.getKeypath());\n }\n\n toString(escape) {\n return this.items.map(escape ? toEscapedString : toString).join('');\n }\n\n unbind() {\n this.context = null;\n const len = this.items.length;\n for (let i = 0; i < len; i++) this.items[i].unbind();\n this.bound = false;\n\n return this;\n }\n\n unrender(shouldDestroy) {\n const len = this.items.length;\n for (let i = 0; i < len; i++) this.items[i].unrender(shouldDestroy);\n this.rendered = false;\n }\n\n update() {\n if (this.dirty) {\n if (!this.updating) {\n this.dirty = false;\n this.updating = true;\n const len = this.items.length;\n for (let i = 0; i < len; i++) this.items[i].update();\n this.updating = false;\n } else if (this.isRoot) {\n runloop.addFragmentToRoot(this);\n }\n }\n }\n\n valueOf() {\n if (this.items.length === 1) {\n return this.items[0].valueOf();\n }\n\n if (this.dirtyValue) {\n const values = {};\n const source = processItems(this.items, values, this.ractive._guid);\n const parsed = parseJSON(source, values);\n\n this.value = parsed ? parsed.value : this.toString();\n\n this.dirtyValue = false;\n }\n\n return this.value;\n }\n}\nFragment.prototype.getContext = getContext;\nFragment.prototype.getKeypath = getKeypath;\n\nexport function getKeypath(root) {\n const base = findParentWithContext(this);\n let model;\n if (root) {\n if (!this.rootModel) {\n this.rootModel = new KeyModel(\n this.context.getKeypath(this.ractive.root),\n this.context,\n this.ractive.root\n );\n model = this.rootModel;\n } else return this.rootModel;\n } else {\n if (!this.pathModel) {\n this.pathModel = new KeyModel(this.context.getKeypath(), this.context);\n model = this.pathModel;\n } else return this.pathModel;\n }\n\n if (base && base.context) base.getKeypath(root).registerChild(model);\n\n return model;\n}\n","import { logIfDebug, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { isArray } from 'utils/is';\nimport config from './config/config';\nimport Fragment from 'src/view/Fragment';\nimport hooks from 'src/events/Hook';\nimport Ractive from '../Ractive';\nimport subscribe from './helpers/subscribe';\n\nexport default function initialise(ractive, userOptions, options) {\n // initialize settable computeds\n const computed = ractive.viewmodel.computed;\n if (computed) {\n for (const k in computed) {\n if (k in ractive.viewmodel.value && computed[k] && !computed[k].isReadonly) {\n computed[k].set(ractive.viewmodel.value[k]);\n }\n }\n }\n\n // init config from Parent and options\n config.init(ractive.constructor, ractive, userOptions);\n\n hooks.config.fire(ractive);\n\n hooks.init.begin(ractive);\n\n const fragment = (ractive.fragment = createFragment(ractive, options));\n if (fragment) fragment.bind(ractive.viewmodel);\n\n hooks.init.end(ractive);\n\n // general config done, set up observers\n subscribe(ractive, userOptions, 'observe');\n\n // call any passed in plugins\n if (isArray(userOptions.use))\n ractive.use.apply(ractive, userOptions.use.filter(p => !p.construct));\n\n if (fragment) {\n // render automatically ( if `el` is specified )\n const el = (ractive.el = ractive.target = getElement(ractive.el || ractive.target));\n if (el && !ractive.component) {\n const promise = ractive.render(el, ractive.append);\n\n if (Ractive.DEBUG_PROMISES) {\n promise.catch(err => {\n warnOnceIfDebug(\n 'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n Ractive.DEBUG_PROMISES = false;'\n );\n warnIfDebug('An error happened during rendering', { ractive });\n logIfDebug(err);\n\n throw err;\n });\n }\n }\n }\n}\n\nexport function createFragment(ractive, options = {}) {\n if (ractive.template) {\n const cssIds = [].concat(ractive.constructor._cssIds || [], options.cssIds || []);\n\n return new Fragment({\n owner: ractive,\n template: ractive.template,\n cssIds\n });\n }\n}\n","import { doc } from 'config/environment';\nimport { applyCSS } from 'src/global/css';\nimport hooks from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport { createFragment } from './initialise';\n\nexport default function render(ractive, target, anchor, occupants) {\n // set a flag to let any transitions know that this instance is currently rendering\n ractive.rendering = true;\n\n const promise = runloop.start();\n runloop.scheduleTask(() => hooks.render.fire(ractive), true);\n\n if (ractive.fragment.rendered) {\n throw new Error(\n 'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first'\n );\n }\n\n if (ractive.destroyed) {\n ractive.destroyed = false;\n ractive.fragment = createFragment(ractive).bind(ractive.viewmodel);\n }\n\n anchor = getElement(anchor) || ractive.anchor;\n\n ractive.el = ractive.target = target;\n ractive.anchor = anchor;\n\n // ensure encapsulated CSS is up-to-date\n if (ractive.cssId) applyCSS();\n\n if (target) {\n (target.__ractive_instances__ || (target.__ractive_instances__ = [])).push(ractive);\n\n if (anchor) {\n const docFrag = doc.createDocumentFragment();\n ractive.fragment.render(docFrag);\n target.insertBefore(docFrag, anchor);\n } else {\n ractive.fragment.render(target, occupants);\n }\n }\n\n runloop.end();\n ractive.rendering = false;\n\n return promise.then(() => {\n if (ractive.torndown) return;\n\n hooks.complete.fire(ractive);\n });\n}\n","import { getElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport { warnIfDebug } from 'utils/log';\nimport render from '../render';\nimport { teardown } from 'shared/methodCallers';\n\nexport default function Ractive$render(target, anchor) {\n if (this.torndown) {\n warnIfDebug('ractive.render() was called on a Ractive instance that was already torn down');\n return Promise.resolve();\n }\n\n target = getElement(target) || this.el;\n\n if (!this.append && target) {\n // Teardown any existing instances *before* trying to set up the new one -\n // avoids certain weird bugs\n const others = target.__ractive_instances__;\n if (others) others.forEach(teardown);\n\n // make sure we are the only occupants\n if (!this.enhance) {\n target.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n }\n }\n\n const occupants = this.enhance ? toArray(target.childNodes) : null;\n const promise = render(this, target, anchor, occupants);\n\n if (occupants) {\n while (occupants.length) target.removeChild(occupants.pop());\n }\n\n return promise;\n}\n","import runloop from 'src/global/runloop';\nimport config from '../config/config';\nimport hooks from '../../events/Hook';\nimport dataConfigurator from '../config/custom/data';\nimport { isObjectType } from 'utils/is';\n\nconst shouldRerender = ['template', 'partials', 'components', 'decorators', 'events'];\n\nexport default function Ractive$reset(data) {\n data = data || {};\n\n if (!isObjectType(data)) {\n throw new Error('The reset method takes either no arguments, or an object containing new data');\n }\n\n // TEMP need to tidy this up\n data = dataConfigurator.init(this.constructor, this, { data });\n\n const promise = runloop.start();\n\n // If the root object is wrapped, try and use the wrapper's reset value\n const wrapper = this.viewmodel.wrapper;\n if (wrapper && wrapper.reset) {\n if (wrapper.reset(data) === false) {\n // reset was rejected, we need to replace the object\n this.viewmodel.set(data);\n }\n } else {\n this.viewmodel.set(data);\n }\n\n // reset config items and track if need to rerender\n const changes = config.reset(this);\n let rerender;\n\n let i = changes.length;\n while (i--) {\n if (shouldRerender.indexOf(changes[i]) > -1) {\n rerender = true;\n break;\n }\n }\n\n if (rerender) {\n hooks.unrender.fire(this);\n this.fragment.resetTemplate(this.template);\n hooks.render.fire(this);\n hooks.complete.fire(this);\n }\n\n runloop.end();\n\n hooks.reset.fire(this, data);\n\n return promise;\n}\n","import runloop from 'src/global/runloop';\nimport { PARTIAL, COMPONENT, ELEMENT } from 'config/types';\nimport { isArray } from 'utils/is';\nimport { handleChange } from 'shared/methodCallers';\n\nfunction collect(source, name, attr, dest) {\n source.forEach(item => {\n // queue to rerender if the item is a partial and the current name matches\n if (item.type === PARTIAL && (item.refName === name || item.name === name)) {\n item.inAttribute = attr;\n dest.push(item);\n return; // go no further\n }\n\n // if it has a fragment, process its items\n if (item.fragment) {\n collect(item.fragment.iterations || item.fragment.items, name, attr, dest);\n } else if (isArray(item.items)) {\n // or if it is itself a fragment, process its items\n collect(item.items, name, attr, dest);\n } else if (item.type === COMPONENT && item.instance) {\n // or if it is a component, step in and process its items\n // ...unless the partial is shadowed\n if (item.instance.partials[name]) return;\n collect(item.instance.fragment.items, name, attr, dest);\n }\n\n // if the item is an element, process its attributes too\n if (item.type === ELEMENT) {\n if (isArray(item.attributes)) {\n collect(item.attributes, name, true, dest);\n }\n }\n });\n}\n\nexport default function(name, partial) {\n const collection = [];\n collect(this.fragment.items, name, false, collection);\n\n const promise = runloop.start();\n\n this.partials[name] = partial;\n collection.forEach(handleChange);\n\n runloop.end();\n\n return promise;\n}\n","import { createDocumentFragment } from 'utils/dom';\nimport Fragment from 'src/view/Fragment';\nimport runloop from 'src/global/runloop';\nimport { default as templateConfigurator } from '../config/custom/template';\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nexport default function Ractive$resetTemplate(template) {\n templateConfigurator.init(null, this, { template });\n\n const transitionsEnabled = this.transitionsEnabled;\n this.transitionsEnabled = false;\n\n // Is this is a component, we need to set the `shouldDestroy`\n // flag, otherwise it will assume by default that a parent node\n // will be detached, and therefore it doesn't need to bother\n // detaching its own nodes\n const component = this.component;\n if (component) component.shouldDestroy = true;\n this.unrender();\n if (component) component.shouldDestroy = false;\n\n const promise = runloop.start();\n\n // remove existing fragment and create new one\n this.fragment.unbind().unrender(true);\n\n this.fragment = new Fragment({\n template: this.template,\n root: this,\n owner: this\n });\n\n const docFrag = createDocumentFragment();\n this.fragment.bind(this.viewmodel).render(docFrag);\n\n // if this is a component, its el may not be valid, so find a\n // target based on the component container\n if (component && !component.external) {\n this.fragment.findParentNode().insertBefore(docFrag, component.findNextNode());\n } else {\n this.el.insertBefore(docFrag, this.anchor);\n }\n\n runloop.end();\n\n this.transitionsEnabled = transitionsEnabled;\n\n return promise;\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('reverse').path;\n","import { build, set } from 'shared/set';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$set(keypath, value, options) {\n const ractive = this;\n\n const opts = isObjectType(keypath) ? value : options;\n\n return set(build(ractive, keypath, value, opts && opts.isolated), opts);\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('shift').path;\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('sort').path;\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('splice').path;\n","import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$subtract(keypath, d, options) {\n const num = isNumber(d) ? -d : -1;\n const opts = isObjectType(d) ? d : options;\n return add(this, keypath, num, opts);\n}\n","import { badArguments } from 'config/errors';\nimport { gather, set } from 'shared/set';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$toggle(keypath, options) {\n if (!isString(keypath)) {\n throw new TypeError(badArguments);\n }\n\n return set(\n gather(this, keypath, null, options && options.isolated).map(m => [m, !m.get()]),\n options\n );\n}\n","import { getCSS } from 'src/global/css';\nimport { keys } from 'utils/object';\n\nexport default function Ractive$toCSS() {\n const cssIds = [this.cssId, ...this.findAllComponents().map(c => c.cssId)];\n const uniqueCssIds = keys(cssIds.reduce((ids, id) => ((ids[id] = true), ids), {}));\n return getCSS(uniqueCssIds);\n}\n","export default function Ractive$toHTML() {\n return this.fragment.toString(true);\n}\n","export default function toText() {\n return this.fragment.toString(false);\n}\n","import runloop from 'src/global/runloop';\nimport Transition from '../../view/items/element/Transition';\nimport { fatal } from 'utils/log';\nimport { isObject } from 'utils/is';\n\nexport default function Ractive$transition(name, node, params) {\n if (node instanceof HTMLElement) {\n // good to go\n } else if (isObject(node)) {\n // omitted, use event node\n params = node;\n }\n\n // if we allow query selector, then it won't work\n // simple params like \"fast\"\n\n // else if ( typeof node === 'string' ) {\n // \t// query selector\n // \tnode = this.find( node )\n // }\n\n node = node || this.event.node;\n\n if (!node || !node._ractive) {\n fatal(`No node was supplied for transition ${name}`);\n }\n\n params = params || {};\n const owner = node._ractive.proxy;\n const transition = new Transition({ owner, up: owner.up, name, params });\n transition.bind();\n\n const promise = runloop.start();\n runloop.registerTransition(transition);\n runloop.end();\n\n promise.then(() => transition.unbind());\n return promise;\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function unlink(here) {\n const promise = runloop.start();\n this.viewmodel.joinAll(splitKeypath(here), { lastLink: false }).unlink();\n runloop.end();\n return promise;\n}\n","import hooks from 'src/events/Hook';\nimport { warnIfDebug } from 'utils/log';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$unrender() {\n if (!this.fragment.rendered) {\n warnIfDebug('ractive.unrender() was called on a Ractive instance that was not rendered');\n return Promise.resolve();\n }\n\n this.unrendering = true;\n const promise = runloop.start();\n\n hooks.unrendering.fire(this);\n\n // If this is a component, and the component isn't marked for destruction,\n // don't detach nodes from the DOM unnecessarily\n const shouldDestroy =\n !this.component ||\n (this.component.anchor || {}).shouldDestroy ||\n this.component.shouldDestroy ||\n this.shouldDestroy;\n this.fragment.unrender(shouldDestroy);\n if (shouldDestroy) this.destroyed = true;\n\n removeFromArray(this.el.__ractive_instances__, this);\n\n hooks.unrender.fire(this);\n\n runloop.end();\n this.unrendering = false;\n\n return promise;\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('unshift').path;\n","import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$updateModel(keypath, cascade) {\n const promise = runloop.start();\n\n if (!keypath) {\n this.viewmodel.updateFromBindings(true);\n } else {\n this.viewmodel.joinAll(splitKeypath(keypath)).updateFromBindings(cascade !== false);\n }\n\n runloop.end();\n\n return promise;\n}\n","export default function use(...plugins) {\n plugins.forEach(p => {\n p({\n proto: this,\n Ractive: this.constructor.Ractive,\n instance: this\n });\n });\n return this;\n}\n","import add from './prototype/add';\nimport animate from './prototype/animate';\nimport attachChild from './prototype/attachChild';\nimport compute from './prototype/compute';\nimport detach from './prototype/detach';\nimport detachChild from './prototype/detachChild';\nimport find from './prototype/find';\nimport findAll from './prototype/findAll';\nimport findAllComponents from './prototype/findAllComponents';\nimport findComponent from './prototype/findComponent';\nimport findContainer from './prototype/findContainer';\nimport findParent from './prototype/findParent';\nimport fire from './prototype/fire';\nimport get from './prototype/get';\nimport getContext from './prototype/getContext';\nimport insert from './prototype/insert';\nimport link from './prototype/link';\nimport observe from './prototype/observe';\nimport observeOnce from './prototype/observeOnce';\nimport off from './prototype/off';\nimport on from './prototype/on';\nimport once from './prototype/once';\nimport pop from './prototype/pop';\nimport push from './prototype/push';\nimport readLink from './prototype/readLink';\nimport render from './prototype/render';\nimport reset from './prototype/reset';\nimport resetPartial from './prototype/resetPartial';\nimport resetTemplate from './prototype/resetTemplate';\nimport reverse from './prototype/reverse';\nimport set from './prototype/set';\nimport shift from './prototype/shift';\nimport sort from './prototype/sort';\nimport splice from './prototype/splice';\nimport subtract from './prototype/subtract';\nimport teardown from './prototype/teardown';\nimport toggle from './prototype/toggle';\nimport toCSS from './prototype/toCSS';\nimport toHTML from './prototype/toHTML';\nimport toText from './prototype/toText';\nimport transition from './prototype/transition';\nimport unlink from './prototype/unlink';\nimport unrender from './prototype/unrender';\nimport unshift from './prototype/unshift';\nimport update from './prototype/update';\nimport updateModel from './prototype/updateModel';\nimport use from './prototype/use';\n\nconst proto = {\n add,\n animate,\n attachChild,\n compute,\n detach,\n detachChild,\n find,\n findAll,\n findAllComponents,\n findComponent,\n findContainer,\n findParent,\n fire,\n get,\n getContext,\n insert,\n link,\n observe,\n observeOnce,\n off,\n on,\n once,\n pop,\n push,\n readLink,\n render,\n reset,\n resetPartial,\n resetTemplate,\n reverse,\n set,\n shift,\n sort,\n splice,\n subtract,\n teardown,\n toggle,\n toCSS,\n toCss: toCSS,\n toHTML,\n toHtml: toHTML,\n toText,\n transition,\n unlink,\n unrender,\n unshift,\n update,\n updateModel,\n use\n};\n\nexport default proto;\n","export default function isInstance(object) {\n return object && object instanceof this;\n}\n","import { splitKeypath } from 'shared/keypaths';\n\nexport default function styleGet(keypath, opts) {\n return this._cssModel.joinAll(splitKeypath(keypath)).get(true, opts);\n}\n","import { isFunction } from 'utils/is';\nimport { addCSS, applyCSS } from 'src/global/css';\nimport { recomputeCSS } from './styleSet';\n\nconst styles = [];\n\nexport function addStyle(id, css) {\n if (styles.find(s => s.id === id))\n throw new Error(`Extra styles with the id '${id}' have already been added.`);\n styles.push({ id, css });\n\n if (!this.css) {\n Object.defineProperty(this, 'css', { configurable: false, writable: false, value: buildCSS });\n }\n\n if (!this._cssDef) {\n Object.defineProperty(this, '_cssDef', {\n configurable: true,\n writable: false,\n value: {\n transform: false,\n id: 'Ractive.addStyle'\n }\n });\n\n addCSS(this._cssDef);\n }\n\n recomputeCSS(this);\n applyCSS(true);\n}\n\nfunction buildCSS(data) {\n return styles\n .map(s => `\\n/* ---- extra style ${s.id} */\\n` + (isFunction(s.css) ? s.css(data) : s.css))\n .join('');\n}\n\nexport function hasStyle(id) {\n return !!styles.find(s => s.id === id);\n}\n","import { build, set } from '../../shared/set';\nimport SharedModel from '../../model/specials/SharedModel';\nimport { isObjectType } from 'utils/is';\n\nexport default function sharedSet(keypath, value, options) {\n const opts = isObjectType(keypath) ? value : options;\n const model = SharedModel;\n\n return set(build({ viewmodel: model }, keypath, value, true), opts);\n}\n","import SharedModel from '../../model/specials/SharedModel';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function sharedGet(keypath, opts) {\n return SharedModel.joinAll(splitKeypath(keypath)).get(true, opts);\n}\n","import { isFunction } from 'utils/is';\n\nexport default function use(...plugins) {\n plugins.forEach(p => {\n isFunction(p) &&\n p({\n proto: this.prototype,\n Ractive: this.Ractive,\n instance: this\n });\n });\n return this;\n}\n","import config from '../Ractive/config/config';\nimport dataConfigurator from '../Ractive/config/custom/data';\nimport construct from '../Ractive/construct';\nimport initialise from '../Ractive/initialise';\nimport Ractive from '../Ractive';\nimport isInstance from '../Ractive/static/isInstance';\nimport styleSet from '../Ractive/static/styleSet';\nimport styleGet from '../Ractive/static/styleGet';\nimport { addStyle, hasStyle } from '../Ractive/static/styles';\nimport sharedSet from '../Ractive/static/sharedSet';\nimport sharedGet from '../Ractive/static/sharedGet';\nimport use from '../Ractive/static/use';\nimport { create, defineProperties, toPairs, defineProperty } from 'utils/object';\nimport { isArray, isFunction } from 'utils/is';\n\nconst callsSuper = /super\\s*\\(|\\.call\\s*\\(\\s*this/;\n\nexport function extend(...options) {\n if (!options.length) {\n return extendOne(this);\n } else {\n return options.reduce(extendOne, this);\n }\n}\n\nexport function extendWith(Class, options = {}) {\n return extendOne(this, options, Class);\n}\n\nfunction extendOne(Parent, options = {}, Target) {\n let proto;\n let Child = isFunction(Target) && Target;\n\n if (options.prototype instanceof Ractive) {\n throw new Error(`Ractive no longer supports multiple inheritance.`);\n }\n\n if (Child) {\n if (!(Child.prototype instanceof Parent)) {\n throw new Error(\n `Only classes that inherit the appropriate prototype may be used with extend`\n );\n }\n if (!callsSuper.test(Child.toString())) {\n throw new Error(`Only classes that call super in their constructor may be used with extend`);\n }\n\n proto = Child.prototype;\n } else {\n Child = function(options) {\n if (!(this instanceof Child)) return new Child(options);\n\n construct(this, options || {});\n initialise(this, options || {}, {});\n };\n\n proto = create(Parent.prototype);\n proto.constructor = Child;\n\n Child.prototype = proto;\n }\n\n // Static properties\n defineProperties(Child, {\n // alias prototype as defaults\n defaults: { value: proto },\n\n extend: { value: extend, writable: true, configurable: true },\n extendWith: { value: extendWith, writable: true, configurable: true },\n extensions: { value: [] },\n use: { value: use },\n\n isInstance: { value: isInstance },\n\n Parent: { value: Parent },\n Ractive: { value: Ractive },\n\n styleGet: { value: styleGet.bind(Child), configurable: true },\n styleSet: { value: styleSet.bind(Child), configurable: true }\n });\n\n // extend configuration\n config.extend(Parent, proto, options, Child);\n\n // store event and observer registries on the constructor when extending\n Child._on = (Parent._on || []).concat(toPairs(options.on));\n Child._observe = (Parent._observe || []).concat(toPairs(options.observe));\n\n Parent.extensions.push(Child);\n\n // attribute defs are not inherited, but they need to be stored\n if (options.attributes) {\n let attrs;\n\n // allow an array of optional props or an object with arrays for optional and required props\n if (isArray(options.attributes)) {\n attrs = { optional: options.attributes, required: [] };\n } else {\n attrs = options.attributes;\n }\n\n // make sure the requisite keys actually store arrays\n if (!isArray(attrs.required)) attrs.required = [];\n if (!isArray(attrs.optional)) attrs.optional = [];\n\n Child.attributes = attrs;\n }\n\n dataConfigurator.extend(Parent, proto, options, Child);\n\n defineProperty(Child, 'helpers', { writable: true, value: proto.helpers });\n\n if (isArray(options.use)) Child.use.apply(Child, options.use);\n\n return Child;\n}\n\ndefineProperties(Ractive, {\n sharedGet: { value: sharedGet },\n sharedSet: { value: sharedSet },\n styleGet: { configurable: true, value: styleGet.bind(Ractive) },\n styleSet: { configurable: true, value: styleSet.bind(Ractive) },\n addCSS: { configurable: false, value: addStyle.bind(Ractive) },\n hasCSS: { configurable: false, value: hasStyle.bind(Ractive) }\n});\n","import styleGet from '../Ractive/static/styleGet';\nimport styleSet from '../Ractive/static/styleSet';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperties, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nimport { initCSS } from 'src/Ractive/config/custom/css/css';\n\nexport default function macro(fn, opts) {\n if (!isFunction(fn)) throw new Error(`The macro must be a function`);\n\n assign(fn, opts);\n\n defineProperties(fn, {\n extensions: { value: [] },\n _cssIds: { value: [] },\n cssData: { value: assign(create(this.cssData), fn.cssData || {}) },\n\n styleGet: { value: styleGet.bind(fn) },\n styleSet: { value: styleSet.bind(fn) }\n });\n\n defineProperty(fn, '_cssModel', { value: new CSSModel(fn) });\n\n if (fn.css) initCSS(fn, fn, fn);\n\n this.extensions.push(fn);\n\n return fn;\n}\n","import { escapeKey, splitKeypath as splitKeypathI, unescapeKey } from 'shared/keypaths';\n\nexport function joinKeys(...keys) {\n return keys.map(escapeKey).join('.');\n}\n\nexport function splitKeypath(keypath) {\n return splitKeypathI(keypath).map(unescapeKey);\n}\n","import { findInViewHierarchy } from 'shared/registry';\n\nexport function findPlugin(name, type, instance) {\n return findInViewHierarchy(type, instance, name);\n}\n","import './polyfills/Object.assign';\nimport './polyfills/array.find';\nimport './polyfills/node.contains';\nimport './polyfills/performance.now';\nimport './polyfills/Promise';\nimport './polyfills/requestAnimationFrame';\n\nimport defaults from './Ractive/config/defaults';\nimport easing from './Ractive/static/easing';\nimport interpolators from './Ractive/static/interpolators';\nimport { svg, win } from './config/environment';\nimport proto from './Ractive/prototype';\nimport { extend, extendWith } from './extend/_extend';\nimport macro from './extend/_macro';\nimport parse from './parse/_parse';\nimport getContext from './Ractive/static/getContext';\nimport isInstance from './Ractive/static/isInstance';\nimport use from './Ractive/static/use';\nimport construct from './Ractive/construct';\nimport initialise from './Ractive/initialise';\nimport { getCSS } from './global/css';\nimport { escapeKey, unescapeKey, normalise } from './shared/keypaths';\nimport { joinKeys, splitKeypath } from './Ractive/static/keypaths';\nimport shared from './Ractive/shared';\nimport { findPlugin } from './Ractive/static/findPlugin';\nimport parseJSON from './utils/parseJSON';\nimport CSSModel from './model/specials/CSSModel';\nimport { data as sharedData } from './model/specials/SharedModel';\nimport { extern } from './shared/getRactiveContext';\nimport { warn } from 'utils/log';\n\nimport { assign, defineProperty, defineProperties } from 'utils/object';\n\nexport default function Ractive(options) {\n if (!(this instanceof Ractive)) return new Ractive(options);\n\n construct(this, options || {});\n initialise(this, options || {}, {});\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif (win && !win.Ractive) {\n let opts = '';\n const script =\n document.currentScript ||\n /* istanbul ignore next */ document.querySelector('script[data-ractive-options]');\n\n if (script) opts = script.getAttribute('data-ractive-options') || '';\n\n /* istanbul ignore next */\n if (~opts.indexOf('ForceGlobal')) win.Ractive = Ractive;\n} else if (win) {\n warn(`Ractive already appears to be loaded while loading 0.10.10.`);\n}\n\nassign(Ractive.prototype, proto, defaults);\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// share defaults with the parser\nshared.defaults = Ractive.defaults;\nshared.Ractive = Ractive;\n\n// static properties\ndefineProperties(Ractive, {\n // debug flag\n DEBUG: { writable: true, value: true },\n DEBUG_PROMISES: { writable: true, value: true },\n\n // static methods:\n extend: { value: extend },\n extendWith: { value: extendWith },\n escapeKey: { value: escapeKey },\n evalObjectString: { value: parseJSON },\n findPlugin: { value: findPlugin },\n getContext: { value: getContext },\n getCSS: { value: getCSS },\n isInstance: { value: isInstance },\n joinKeys: { value: joinKeys },\n macro: { value: macro },\n normaliseKeypath: { value: normalise },\n parse: { value: parse },\n splitKeypath: { value: splitKeypath },\n // sharedSet and styleSet are in _extend because circular refs\n unescapeKey: { value: unescapeKey },\n use: { value: use },\n\n // support\n enhance: { writable: true, value: false },\n svg: { value: svg },\n\n // version\n VERSION: { value: '0.10.10' },\n\n // plugins\n adaptors: { writable: true, value: {} },\n components: { writable: true, value: {} },\n decorators: { writable: true, value: {} },\n easing: { writable: true, value: easing },\n events: { writable: true, value: {} },\n extensions: { value: [] },\n helpers: { writable: true, value: defaults.helpers },\n interpolators: { writable: true, value: interpolators },\n partials: { writable: true, value: {} },\n transitions: { writable: true, value: {} },\n\n // CSS variables\n cssData: { configurable: true, value: {} },\n\n // access to @shared without an instance\n sharedData: { value: sharedData },\n\n // for getting the source Ractive lib from a constructor\n Ractive: { value: Ractive },\n\n // to allow extending contexts\n Context: { value: extern.Context.prototype }\n});\n\n// cssData must already be in place\ndefineProperty(Ractive, '_cssModel', {\n configurable: true,\n value: new CSSModel(Ractive)\n});\n\ndefineProperty(Ractive.prototype, 'rendered', {\n get() {\n return this.fragment && this.fragment.rendered;\n }\n});\n"],"names":["keys","objectKeys","bind","toString","readNumberLiteral","stringMiddlePattern","namePattern","getKeyValuePair","readRegexpLiteral","name","readLogicalOr","readConditional","leadingWhitespace","readElement","readMustacheComment","shared","SharedModel","easing","update","sharedSet","build","protoAnimate","protoUpdate","getContext","staticContext","svg","star","updateOld","trim","transformCSS","combine","validate","RactiveProto","wrapPrototype","prototype","teardown","proto","div","set","SharedBase","registryNames","callRender","render","push","getValue","xmlns","specials","numberPattern","onlyWhitespace","prefix","createTransitions","html","createFragment","collect","add","animate","compute","detach","find","findAll","findAllComponents","findComponent","findContainer","findParent","fire","get","insert","off","on","once","reset","resetTemplate","subtract","toggle","toCSS","toHTML","transition","unrender","updateModel","use","styleSet","splitKeypath","splitKeypathI","sharedData"],"mappings":"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,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,GAAG,EAAE,GAAG;EACR,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,GAAG,EAAE,GAAG;EACR,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV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"}