| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | 
							- /* @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, {
 
-         outputSourceRange: process.env.NODE_ENV !== 'production',
 
-         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
 
 
  |