diff options
Diffstat (limited to 'node_modules/vue/src/platforms/web/entry-runtime-with-compiler.js')
| -rw-r--r-- | node_modules/vue/src/platforms/web/entry-runtime-with-compiler.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/node_modules/vue/src/platforms/web/entry-runtime-with-compiler.js b/node_modules/vue/src/platforms/web/entry-runtime-with-compiler.js new file mode 100644 index 00000000..1ebc102d --- /dev/null +++ b/node_modules/vue/src/platforms/web/entry-runtime-with-compiler.js @@ -0,0 +1,100 @@ +/* @flow */ + +import config from 'core/config' +import { warn, cached } from 'core/util/index' +import { mark, measure } from 'core/util/perf' + +import Vue from './runtime/index' +import { query } from './util/index' +import { compileToFunctions } from './compiler/index' +import { shouldDecodeNewlines, shouldDecodeNewlinesForHref } from './util/compat' + +const idToTemplate = cached(id => { + const el = query(id) + return el && el.innerHTML +}) + +const mount = Vue.prototype.$mount +Vue.prototype.$mount = function ( + el?: string | Element, + hydrating?: boolean +): Component { + el = el && query(el) + + /* istanbul ignore if */ + if (el === document.body || el === document.documentElement) { + process.env.NODE_ENV !== 'production' && warn( + `Do not mount Vue to <html> or <body> - mount to normal elements instead.` + ) + return this + } + + const options = this.$options + // resolve template/el and convert to render function + if (!options.render) { + let template = options.template + if (template) { + if (typeof template === 'string') { + if (template.charAt(0) === '#') { + template = idToTemplate(template) + /* istanbul ignore if */ + if (process.env.NODE_ENV !== 'production' && !template) { + warn( + `Template element not found or is empty: ${options.template}`, + this + ) + } + } + } else if (template.nodeType) { + template = template.innerHTML + } else { + if (process.env.NODE_ENV !== 'production') { + warn('invalid template option:' + template, this) + } + return this + } + } else if (el) { + template = getOuterHTML(el) + } + if (template) { + /* istanbul ignore if */ + if (process.env.NODE_ENV !== 'production' && config.performance && mark) { + mark('compile') + } + + const { render, staticRenderFns } = compileToFunctions(template, { + shouldDecodeNewlines, + shouldDecodeNewlinesForHref, + delimiters: options.delimiters, + comments: options.comments + }, this) + options.render = render + options.staticRenderFns = staticRenderFns + + /* istanbul ignore if */ + if (process.env.NODE_ENV !== 'production' && config.performance && mark) { + mark('compile end') + measure(`vue ${this._name} compile`, 'compile', 'compile end') + } + } + } + return mount.call(this, el, hydrating) +} + +/** + * Get outerHTML of elements, taking care + * of SVG elements in IE as well. + */ +function getOuterHTML (el: Element): string { + if (el.outerHTML) { + return el.outerHTML + } else { + const container = document.createElement('div') + container.appendChild(el.cloneNode(true)) + return container.innerHTML + } +} + +Vue.compile = compileToFunctions + +export default Vue |
