diff --git a/priv/static/index.html b/priv/static/index.html index ee1d42efb..b4df60919 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -
, or missing
. Bailing hydration and performing ' +\n\t 'full client-side render.'\n\t );\n\t }\n\t }\n\t // either not server-rendered, or hydration failed.\n\t // create an empty node and replace it\n\t oldVnode = emptyNodeAt(oldVnode);\n\t }\n\t // replacing existing element\n\t var oldElm = oldVnode.elm;\n\t var parentElm$1 = nodeOps.parentNode(oldElm);\n\t createElm(\n\t vnode,\n\t insertedVnodeQueue,\n\t // extremely rare edge case: do not insert if old element is in a\n\t // leaving transition. Only happens when combining transition +\n\t // keep-alive + HOCs. (#4590)\n\t oldElm._leaveCb ? null : parentElm$1,\n\t nodeOps.nextSibling(oldElm)\n\t );\n\t\n\t if (isDef(vnode.parent)) {\n\t // component root element replaced.\n\t // update parent placeholder node element, recursively\n\t var ancestor = vnode.parent;\n\t while (ancestor) {\n\t ancestor.elm = vnode.elm;\n\t ancestor = ancestor.parent;\n\t }\n\t if (isPatchable(vnode)) {\n\t for (var i = 0; i < cbs.create.length; ++i) {\n\t cbs.create[i](emptyNode, vnode.parent);\n\t }\n\t }\n\t }\n\t\n\t if (isDef(parentElm$1)) {\n\t removeVnodes(parentElm$1, [oldVnode], 0, 0);\n\t } else if (isDef(oldVnode.tag)) {\n\t invokeDestroyHook(oldVnode);\n\t }\n\t }\n\t }\n\t\n\t invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n\t return vnode.elm\n\t }\n\t}\n\t\n\t/* */\n\t\n\tvar directives = {\n\t create: updateDirectives,\n\t update: updateDirectives,\n\t destroy: function unbindDirectives (vnode) {\n\t updateDirectives(vnode, emptyNode);\n\t }\n\t};\n\t\n\tfunction updateDirectives (oldVnode, vnode) {\n\t if (oldVnode.data.directives || vnode.data.directives) {\n\t _update(oldVnode, vnode);\n\t }\n\t}\n\t\n\tfunction _update (oldVnode, vnode) {\n\t var isCreate = oldVnode === emptyNode;\n\t var isDestroy = vnode === emptyNode;\n\t var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n\t var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\t\n\t var dirsWithInsert = [];\n\t var dirsWithPostpatch = [];\n\t\n\t var key, oldDir, dir;\n\t for (key in newDirs) {\n\t oldDir = oldDirs[key];\n\t dir = newDirs[key];\n\t if (!oldDir) {\n\t // new directive, bind\n\t callHook$1(dir, 'bind', vnode, oldVnode);\n\t if (dir.def && dir.def.inserted) {\n\t dirsWithInsert.push(dir);\n\t }\n\t } else {\n\t // existing directive, update\n\t dir.oldValue = oldDir.value;\n\t callHook$1(dir, 'update', vnode, oldVnode);\n\t if (dir.def && dir.def.componentUpdated) {\n\t dirsWithPostpatch.push(dir);\n\t }\n\t }\n\t }\n\t\n\t if (dirsWithInsert.length) {\n\t var callInsert = function () {\n\t for (var i = 0; i < dirsWithInsert.length; i++) {\n\t callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n\t }\n\t };\n\t if (isCreate) {\n\t mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', callInsert);\n\t } else {\n\t callInsert();\n\t }\n\t }\n\t\n\t if (dirsWithPostpatch.length) {\n\t mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'postpatch', function () {\n\t for (var i = 0; i < dirsWithPostpatch.length; i++) {\n\t callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n\t }\n\t });\n\t }\n\t\n\t if (!isCreate) {\n\t for (key in oldDirs) {\n\t if (!newDirs[key]) {\n\t // no longer present, unbind\n\t callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n\t }\n\t }\n\t }\n\t}\n\t\n\tvar emptyModifiers = Object.create(null);\n\t\n\tfunction normalizeDirectives$1 (\n\t dirs,\n\t vm\n\t) {\n\t var res = Object.create(null);\n\t if (!dirs) {\n\t return res\n\t }\n\t var i, dir;\n\t for (i = 0; i < dirs.length; i++) {\n\t dir = dirs[i];\n\t if (!dir.modifiers) {\n\t dir.modifiers = emptyModifiers;\n\t }\n\t res[getRawDirName(dir)] = dir;\n\t dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n\t }\n\t return res\n\t}\n\t\n\tfunction getRawDirName (dir) {\n\t return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n\t}\n\t\n\tfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n\t var fn = dir.def && dir.def[hook];\n\t if (fn) {\n\t try {\n\t fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n\t } catch (e) {\n\t handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n\t }\n\t }\n\t}\n\t\n\tvar baseModules = [\n\t ref,\n\t directives\n\t];\n\t\n\t/* */\n\t\n\tfunction updateAttrs (oldVnode, vnode) {\n\t if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n\t return\n\t }\n\t var key, cur, old;\n\t var elm = vnode.elm;\n\t var oldAttrs = oldVnode.data.attrs || {};\n\t var attrs = vnode.data.attrs || {};\n\t // clone observed objects, as the user probably wants to mutate it\n\t if (isDef(attrs.__ob__)) {\n\t attrs = vnode.data.attrs = extend({}, attrs);\n\t }\n\t\n\t for (key in attrs) {\n\t cur = attrs[key];\n\t old = oldAttrs[key];\n\t if (old !== cur) {\n\t setAttr(elm, key, cur);\n\t }\n\t }\n\t // #4391: in IE9, setting type can reset value for input[type=radio]\n\t /* istanbul ignore if */\n\t if (isIE9 && attrs.value !== oldAttrs.value) {\n\t setAttr(elm, 'value', attrs.value);\n\t }\n\t for (key in oldAttrs) {\n\t if (isUndef(attrs[key])) {\n\t if (isXlink(key)) {\n\t elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n\t } else if (!isEnumeratedAttr(key)) {\n\t elm.removeAttribute(key);\n\t }\n\t }\n\t }\n\t}\n\t\n\tfunction setAttr (el, key, value) {\n\t if (isBooleanAttr(key)) {\n\t // set attribute for blank value\n\t // e.g. \n\t if (isFalsyAttrValue(value)) {\n\t el.removeAttribute(key);\n\t } else {\n\t el.setAttribute(key, key);\n\t }\n\t } else if (isEnumeratedAttr(key)) {\n\t el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');\n\t } else if (isXlink(key)) {\n\t if (isFalsyAttrValue(value)) {\n\t el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n\t } else {\n\t el.setAttributeNS(xlinkNS, key, value);\n\t }\n\t } else {\n\t if (isFalsyAttrValue(value)) {\n\t el.removeAttribute(key);\n\t } else {\n\t el.setAttribute(key, value);\n\t }\n\t }\n\t}\n\t\n\tvar attrs = {\n\t create: updateAttrs,\n\t update: updateAttrs\n\t};\n\t\n\t/* */\n\t\n\tfunction updateClass (oldVnode, vnode) {\n\t var el = vnode.elm;\n\t var data = vnode.data;\n\t var oldData = oldVnode.data;\n\t if (\n\t isUndef(data.staticClass) &&\n\t isUndef(data.class) && (\n\t isUndef(oldData) || (\n\t isUndef(oldData.staticClass) &&\n\t isUndef(oldData.class)\n\t )\n\t )\n\t ) {\n\t return\n\t }\n\t\n\t var cls = genClassForVnode(vnode);\n\t\n\t // handle transition classes\n\t var transitionClass = el._transitionClasses;\n\t if (isDef(transitionClass)) {\n\t cls = concat(cls, stringifyClass(transitionClass));\n\t }\n\t\n\t // set the class\n\t if (cls !== el._prevClass) {\n\t el.setAttribute('class', cls);\n\t el._prevClass = cls;\n\t }\n\t}\n\t\n\tvar klass = {\n\t create: updateClass,\n\t update: updateClass\n\t};\n\t\n\t/* */\n\t\n\tvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\t\n\t\n\t\n\tfunction wrapFilter (exp, filter) {\n\t var i = filter.indexOf('(');\n\t if (i < 0) {\n\t // _f: resolveFilter\n\t return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n\t } else {\n\t var name = filter.slice(0, i);\n\t var args = filter.slice(i + 1);\n\t return (\"_f(\\\"\" + name + \"\\\")(\" + exp + \",\" + args)\n\t }\n\t}\n\t\n\t/* */\n\t\n\t/* */\n\t\n\t/**\n\t * Cross-platform code generation for component v-model\n\t */\n\t\n\t\n\t/**\n\t * Cross-platform codegen helper for generating v-model value assignment code.\n\t */\n\t\n\t\n\t/**\n\t * parse directive model to do the array update transform. a[idx] = val => $$a.splice($$idx, 1, val)\n\t *\n\t * for loop possible cases:\n\t *\n\t * - test\n\t * - test[idx]\n\t * - test[test1[idx]]\n\t * - test[\"a\"][idx]\n\t * - xxx.test[a[a].test1[idx]]\n\t * - test.xxx.a[\"asa\"][test1[idx]]\n\t *\n\t */\n\t\n\tvar str;\n\tvar index$1;\n\t\n\t/* */\n\t\n\t// in some cases, the event used has to be determined at runtime\n\t// so we used some reserved tokens during compile.\n\tvar RANGE_TOKEN = '__r';\n\tvar CHECKBOX_RADIO_TOKEN = '__c';\n\t\n\t/* */\n\t\n\t// normalize v-model event tokens that can only be determined at runtime.\n\t// it's important to place the event as the first in the array because\n\t// the whole point is ensuring the v-model callback gets called before\n\t// user-attached handlers.\n\tfunction normalizeEvents (on) {\n\t var event;\n\t /* istanbul ignore if */\n\t if (isDef(on[RANGE_TOKEN])) {\n\t // IE input[type=range] only supports `change` event\n\t event = isIE ? 'change' : 'input';\n\t on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n\t delete on[RANGE_TOKEN];\n\t }\n\t if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n\t // Chrome fires microtasks in between click/change, leads to #4521\n\t event = isChrome ? 'click' : 'change';\n\t on[event] = [].concat(on[CHECKBOX_RADIO_TOKEN], on[event] || []);\n\t delete on[CHECKBOX_RADIO_TOKEN];\n\t }\n\t}\n\t\n\tvar target$1;\n\t\n\tfunction add$1 (\n\t event,\n\t handler,\n\t once$$1,\n\t capture,\n\t passive\n\t) {\n\t if (once$$1) {\n\t var oldHandler = handler;\n\t var _target = target$1; // save current target element in closure\n\t handler = function (ev) {\n\t var res = arguments.length === 1\n\t ? oldHandler(ev)\n\t : oldHandler.apply(null, arguments);\n\t if (res !== null) {\n\t remove$2(event, handler, capture, _target);\n\t }\n\t };\n\t }\n\t target$1.addEventListener(\n\t event,\n\t handler,\n\t supportsPassive\n\t ? { capture: capture, passive: passive }\n\t : capture\n\t );\n\t}\n\t\n\tfunction remove$2 (\n\t event,\n\t handler,\n\t capture,\n\t _target\n\t) {\n\t (_target || target$1).removeEventListener(event, handler, capture);\n\t}\n\t\n\tfunction updateDOMListeners (oldVnode, vnode) {\n\t if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n\t return\n\t }\n\t var on = vnode.data.on || {};\n\t var oldOn = oldVnode.data.on || {};\n\t target$1 = vnode.elm;\n\t normalizeEvents(on);\n\t updateListeners(on, oldOn, add$1, remove$2, vnode.context);\n\t}\n\t\n\tvar events = {\n\t create: updateDOMListeners,\n\t update: updateDOMListeners\n\t};\n\t\n\t/* */\n\t\n\tfunction updateDOMProps (oldVnode, vnode) {\n\t if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n\t return\n\t }\n\t var key, cur;\n\t var elm = vnode.elm;\n\t var oldProps = oldVnode.data.domProps || {};\n\t var props = vnode.data.domProps || {};\n\t // clone observed objects, as the user probably wants to mutate it\n\t if (isDef(props.__ob__)) {\n\t props = vnode.data.domProps = extend({}, props);\n\t }\n\t\n\t for (key in oldProps) {\n\t if (isUndef(props[key])) {\n\t elm[key] = '';\n\t }\n\t }\n\t for (key in props) {\n\t cur = props[key];\n\t // ignore children if the node has textContent or innerHTML,\n\t // as these will throw away existing DOM nodes and cause removal errors\n\t // on subsequent patches (#3360)\n\t if (key === 'textContent' || key === 'innerHTML') {\n\t if (vnode.children) { vnode.children.length = 0; }\n\t if (cur === oldProps[key]) { continue }\n\t }\n\t\n\t if (key === 'value') {\n\t // store value as _value as well since\n\t // non-string values will be stringified\n\t elm._value = cur;\n\t // avoid resetting cursor position when value is the same\n\t var strCur = isUndef(cur) ? '' : String(cur);\n\t if (shouldUpdateValue(elm, vnode, strCur)) {\n\t elm.value = strCur;\n\t }\n\t } else {\n\t elm[key] = cur;\n\t }\n\t }\n\t}\n\t\n\t// check platforms/web/util/attrs.js acceptValue\n\t\n\t\n\tfunction shouldUpdateValue (\n\t elm,\n\t vnode,\n\t checkVal\n\t) {\n\t return (!elm.composing && (\n\t vnode.tag === 'option' ||\n\t isDirty(elm, checkVal) ||\n\t isInputChanged(elm, checkVal)\n\t ))\n\t}\n\t\n\tfunction isDirty (elm, checkVal) {\n\t // return true when textbox (.number and .trim) loses focus and its value is not equal to the updated value\n\t return document.activeElement !== elm && elm.value !== checkVal\n\t}\n\t\n\tfunction isInputChanged (elm, newVal) {\n\t var value = elm.value;\n\t var modifiers = elm._vModifiers; // injected by v-model runtime\n\t if ((isDef(modifiers) && modifiers.number) || elm.type === 'number') {\n\t return toNumber(value) !== toNumber(newVal)\n\t }\n\t if (isDef(modifiers) && modifiers.trim) {\n\t return value.trim() !== newVal.trim()\n\t }\n\t return value !== newVal\n\t}\n\t\n\tvar domProps = {\n\t create: updateDOMProps,\n\t update: updateDOMProps\n\t};\n\t\n\t/* */\n\t\n\tvar parseStyleText = cached(function (cssText) {\n\t var res = {};\n\t var listDelimiter = /;(?![^(]*\\))/g;\n\t var propertyDelimiter = /:(.+)/;\n\t cssText.split(listDelimiter).forEach(function (item) {\n\t if (item) {\n\t var tmp = item.split(propertyDelimiter);\n\t tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n\t }\n\t });\n\t return res\n\t});\n\t\n\t// merge static and dynamic style data on the same vnode\n\tfunction normalizeStyleData (data) {\n\t var style = normalizeStyleBinding(data.style);\n\t // static style is pre-processed into an object during compilation\n\t // and is always a fresh object, so it's safe to merge into it\n\t return data.staticStyle\n\t ? extend(data.staticStyle, style)\n\t : style\n\t}\n\t\n\t// normalize possible array / string values into Object\n\tfunction normalizeStyleBinding (bindingStyle) {\n\t if (Array.isArray(bindingStyle)) {\n\t return toObject(bindingStyle)\n\t }\n\t if (typeof bindingStyle === 'string') {\n\t return parseStyleText(bindingStyle)\n\t }\n\t return bindingStyle\n\t}\n\t\n\t/**\n\t * parent component style should be after child's\n\t * so that parent component's style could override it\n\t */\n\tfunction getStyle (vnode, checkChild) {\n\t var res = {};\n\t var styleData;\n\t\n\t if (checkChild) {\n\t var childNode = vnode;\n\t while (childNode.componentInstance) {\n\t childNode = childNode.componentInstance._vnode;\n\t if (childNode.data && (styleData = normalizeStyleData(childNode.data))) {\n\t extend(res, styleData);\n\t }\n\t }\n\t }\n\t\n\t if ((styleData = normalizeStyleData(vnode.data))) {\n\t extend(res, styleData);\n\t }\n\t\n\t var parentNode = vnode;\n\t while ((parentNode = parentNode.parent)) {\n\t if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n\t extend(res, styleData);\n\t }\n\t }\n\t return res\n\t}\n\t\n\t/* */\n\t\n\tvar cssVarRE = /^--/;\n\tvar importantRE = /\\s*!important$/;\n\tvar setProp = function (el, name, val) {\n\t /* istanbul ignore if */\n\t if (cssVarRE.test(name)) {\n\t el.style.setProperty(name, val);\n\t } else if (importantRE.test(val)) {\n\t el.style.setProperty(name, val.replace(importantRE, ''), 'important');\n\t } else {\n\t var normalizedName = normalize(name);\n\t if (Array.isArray(val)) {\n\t // Support values array created by autoprefixer, e.g.\n\t // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n\t // Set them one by one, and the browser will only set those it can recognize\n\t for (var i = 0, len = val.length; i < len; i++) {\n\t el.style[normalizedName] = val[i];\n\t }\n\t } else {\n\t el.style[normalizedName] = val;\n\t }\n\t }\n\t};\n\t\n\tvar prefixes = ['Webkit', 'Moz', 'ms'];\n\t\n\tvar testEl;\n\tvar normalize = cached(function (prop) {\n\t testEl = testEl || document.createElement('div');\n\t prop = camelize(prop);\n\t if (prop !== 'filter' && (prop in testEl.style)) {\n\t return prop\n\t }\n\t var upper = prop.charAt(0).toUpperCase() + prop.slice(1);\n\t for (var i = 0; i < prefixes.length; i++) {\n\t var prefixed = prefixes[i] + upper;\n\t if (prefixed in testEl.style) {\n\t return prefixed\n\t }\n\t }\n\t});\n\t\n\tfunction updateStyle (oldVnode, vnode) {\n\t var data = vnode.data;\n\t var oldData = oldVnode.data;\n\t\n\t if (isUndef(data.staticStyle) && isUndef(data.style) &&\n\t isUndef(oldData.staticStyle) && isUndef(oldData.style)\n\t ) {\n\t return\n\t }\n\t\n\t var cur, name;\n\t var el = vnode.elm;\n\t var oldStaticStyle = oldData.staticStyle;\n\t var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\t\n\t // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n\t var oldStyle = oldStaticStyle || oldStyleBinding;\n\t\n\t var style = normalizeStyleBinding(vnode.data.style) || {};\n\t\n\t // store normalized style under a different key for next diff\n\t // make sure to clone it if it's reactive, since the user likley wants\n\t // to mutate it.\n\t vnode.data.normalizedStyle = isDef(style.__ob__)\n\t ? extend({}, style)\n\t : style;\n\t\n\t var newStyle = getStyle(vnode, true);\n\t\n\t for (name in oldStyle) {\n\t if (isUndef(newStyle[name])) {\n\t setProp(el, name, '');\n\t }\n\t }\n\t for (name in newStyle) {\n\t cur = newStyle[name];\n\t if (cur !== oldStyle[name]) {\n\t // ie9 setting to null has no effect, must use empty string\n\t setProp(el, name, cur == null ? '' : cur);\n\t }\n\t }\n\t}\n\t\n\tvar style = {\n\t create: updateStyle,\n\t update: updateStyle\n\t};\n\t\n\t/* */\n\t\n\t/**\n\t * Add class with compatibility for SVG since classList is not supported on\n\t * SVG elements in IE\n\t */\n\tfunction addClass (el, cls) {\n\t /* istanbul ignore if */\n\t if (!cls || !(cls = cls.trim())) {\n\t return\n\t }\n\t\n\t /* istanbul ignore else */\n\t if (el.classList) {\n\t if (cls.indexOf(' ') > -1) {\n\t cls.split(/\\s+/).forEach(function (c) { return el.classList.add(c); });\n\t } else {\n\t el.classList.add(cls);\n\t }\n\t } else {\n\t var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n\t if (cur.indexOf(' ' + cls + ' ') < 0) {\n\t el.setAttribute('class', (cur + cls).trim());\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Remove class with compatibility for SVG since classList is not supported on\n\t * SVG elements in IE\n\t */\n\tfunction removeClass (el, cls) {\n\t /* istanbul ignore if */\n\t if (!cls || !(cls = cls.trim())) {\n\t return\n\t }\n\t\n\t /* istanbul ignore else */\n\t if (el.classList) {\n\t if (cls.indexOf(' ') > -1) {\n\t cls.split(/\\s+/).forEach(function (c) { return el.classList.remove(c); });\n\t } else {\n\t el.classList.remove(cls);\n\t }\n\t } else {\n\t var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n\t var tar = ' ' + cls + ' ';\n\t while (cur.indexOf(tar) >= 0) {\n\t cur = cur.replace(tar, ' ');\n\t }\n\t el.setAttribute('class', cur.trim());\n\t }\n\t}\n\t\n\t/* */\n\t\n\tfunction resolveTransition (def$$1) {\n\t if (!def$$1) {\n\t return\n\t }\n\t /* istanbul ignore else */\n\t if (typeof def$$1 === 'object') {\n\t var res = {};\n\t if (def$$1.css !== false) {\n\t extend(res, autoCssTransition(def$$1.name || 'v'));\n\t }\n\t extend(res, def$$1);\n\t return res\n\t } else if (typeof def$$1 === 'string') {\n\t return autoCssTransition(def$$1)\n\t }\n\t}\n\t\n\tvar autoCssTransition = cached(function (name) {\n\t return {\n\t enterClass: (name + \"-enter\"),\n\t enterToClass: (name + \"-enter-to\"),\n\t enterActiveClass: (name + \"-enter-active\"),\n\t leaveClass: (name + \"-leave\"),\n\t leaveToClass: (name + \"-leave-to\"),\n\t leaveActiveClass: (name + \"-leave-active\")\n\t }\n\t});\n\t\n\tvar hasTransition = inBrowser && !isIE9;\n\tvar TRANSITION = 'transition';\n\tvar ANIMATION = 'animation';\n\t\n\t// Transition property/event sniffing\n\tvar transitionProp = 'transition';\n\tvar transitionEndEvent = 'transitionend';\n\tvar animationProp = 'animation';\n\tvar animationEndEvent = 'animationend';\n\tif (hasTransition) {\n\t /* istanbul ignore if */\n\t if (window.ontransitionend === undefined &&\n\t window.onwebkittransitionend !== undefined\n\t ) {\n\t transitionProp = 'WebkitTransition';\n\t transitionEndEvent = 'webkitTransitionEnd';\n\t }\n\t if (window.onanimationend === undefined &&\n\t window.onwebkitanimationend !== undefined\n\t ) {\n\t animationProp = 'WebkitAnimation';\n\t animationEndEvent = 'webkitAnimationEnd';\n\t }\n\t}\n\t\n\t// binding to window is necessary to make hot reload work in IE in strict mode\n\tvar raf = inBrowser && window.requestAnimationFrame\n\t ? window.requestAnimationFrame.bind(window)\n\t : setTimeout;\n\t\n\tfunction nextFrame (fn) {\n\t raf(function () {\n\t raf(fn);\n\t });\n\t}\n\t\n\tfunction addTransitionClass (el, cls) {\n\t (el._transitionClasses || (el._transitionClasses = [])).push(cls);\n\t addClass(el, cls);\n\t}\n\t\n\tfunction removeTransitionClass (el, cls) {\n\t if (el._transitionClasses) {\n\t remove(el._transitionClasses, cls);\n\t }\n\t removeClass(el, cls);\n\t}\n\t\n\tfunction whenTransitionEnds (\n\t el,\n\t expectedType,\n\t cb\n\t) {\n\t var ref = getTransitionInfo(el, expectedType);\n\t var type = ref.type;\n\t var timeout = ref.timeout;\n\t var propCount = ref.propCount;\n\t if (!type) { return cb() }\n\t var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n\t var ended = 0;\n\t var end = function () {\n\t el.removeEventListener(event, onEnd);\n\t cb();\n\t };\n\t var onEnd = function (e) {\n\t if (e.target === el) {\n\t if (++ended >= propCount) {\n\t end();\n\t }\n\t }\n\t };\n\t setTimeout(function () {\n\t if (ended < propCount) {\n\t end();\n\t }\n\t }, timeout + 1);\n\t el.addEventListener(event, onEnd);\n\t}\n\t\n\tvar transformRE = /\\b(transform|all)(,|$)/;\n\t\n\tfunction getTransitionInfo (el, expectedType) {\n\t var styles = window.getComputedStyle(el);\n\t var transitionDelays = styles[transitionProp + 'Delay'].split(', ');\n\t var transitionDurations = styles[transitionProp + 'Duration'].split(', ');\n\t var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n\t var animationDelays = styles[animationProp + 'Delay'].split(', ');\n\t var animationDurations = styles[animationProp + 'Duration'].split(', ');\n\t var animationTimeout = getTimeout(animationDelays, animationDurations);\n\t\n\t var type;\n\t var timeout = 0;\n\t var propCount = 0;\n\t /* istanbul ignore if */\n\t if (expectedType === TRANSITION) {\n\t if (transitionTimeout > 0) {\n\t type = TRANSITION;\n\t timeout = transitionTimeout;\n\t propCount = transitionDurations.length;\n\t }\n\t } else if (expectedType === ANIMATION) {\n\t if (animationTimeout > 0) {\n\t type = ANIMATION;\n\t timeout = animationTimeout;\n\t propCount = animationDurations.length;\n\t }\n\t } else {\n\t timeout = Math.max(transitionTimeout, animationTimeout);\n\t type = timeout > 0\n\t ? transitionTimeout > animationTimeout\n\t ? TRANSITION\n\t : ANIMATION\n\t : null;\n\t propCount = type\n\t ? type === TRANSITION\n\t ? transitionDurations.length\n\t : animationDurations.length\n\t : 0;\n\t }\n\t var hasTransform =\n\t type === TRANSITION &&\n\t transformRE.test(styles[transitionProp + 'Property']);\n\t return {\n\t type: type,\n\t timeout: timeout,\n\t propCount: propCount,\n\t hasTransform: hasTransform\n\t }\n\t}\n\t\n\tfunction getTimeout (delays, durations) {\n\t /* istanbul ignore next */\n\t while (delays.length < durations.length) {\n\t delays = delays.concat(delays);\n\t }\n\t\n\t return Math.max.apply(null, durations.map(function (d, i) {\n\t return toMs(d) + toMs(delays[i])\n\t }))\n\t}\n\t\n\tfunction toMs (s) {\n\t return Number(s.slice(0, -1)) * 1000\n\t}\n\t\n\t/* */\n\t\n\tfunction enter (vnode, toggleDisplay) {\n\t var el = vnode.elm;\n\t\n\t // call leave callback now\n\t if (isDef(el._leaveCb)) {\n\t el._leaveCb.cancelled = true;\n\t el._leaveCb();\n\t }\n\t\n\t var data = resolveTransition(vnode.data.transition);\n\t if (isUndef(data)) {\n\t return\n\t }\n\t\n\t /* istanbul ignore if */\n\t if (isDef(el._enterCb) || el.nodeType !== 1) {\n\t return\n\t }\n\t\n\t var css = data.css;\n\t var type = data.type;\n\t var enterClass = data.enterClass;\n\t var enterToClass = data.enterToClass;\n\t var enterActiveClass = data.enterActiveClass;\n\t var appearClass = data.appearClass;\n\t var appearToClass = data.appearToClass;\n\t var appearActiveClass = data.appearActiveClass;\n\t var beforeEnter = data.beforeEnter;\n\t var enter = data.enter;\n\t var afterEnter = data.afterEnter;\n\t var enterCancelled = data.enterCancelled;\n\t var beforeAppear = data.beforeAppear;\n\t var appear = data.appear;\n\t var afterAppear = data.afterAppear;\n\t var appearCancelled = data.appearCancelled;\n\t var duration = data.duration;\n\t\n\t // activeInstance will always be the