aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue/src/platforms/web/entry-runtime-with-compiler.js
diff options
context:
space:
mode:
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.js100
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