{"version":3,"sources":["view_splitter.js"],"names":[],"mappings":"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","file":"angular2/src/render/dom/compiler/view_splitter.js","sourcesContent":["import {isBlank, isPresent, BaseException, StringWrapper} from 'angular2/src/facade/lang';\nimport {DOM} from 'angular2/src/dom/dom_adapter';\nimport {MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {Parser} from 'angular2/change_detection';\n\nimport {CompileStep} from './compile_step';\nimport {CompileElement} from './compile_element';\nimport {CompileControl} from './compile_control';\n\nimport {dashCaseToCamelCase} from '../util';\n\n/**\n * Splits views at `<template>` elements or elements with `template` attribute:\n * For `<template>` elements:\n * - moves the content into a new and disconnected `<template>` element\n *   that is marked as view root.\n *\n * For elements with a `template` attribute:\n * - replaces the element with an empty `<template>` element,\n *   parses the content of the `template` attribute and adds the information to that\n *   `<template>` element. Marks the elements as view root.\n *\n * Note: In both cases the root of the nested view is disconnected from its parent element.\n * This is needed for browsers that don't support the `<template>` element\n * as we want to do locate elements with bindings using `getElementsByClassName` later on,\n * which should not descend into the nested view.\n */\nexport class ViewSplitter extends CompileStep {\n  _parser:Parser;\n\n  constructor(parser:Parser) {\n    super();\n    this._parser = parser;\n  }\n\n  process(parent:CompileElement, current:CompileElement, control:CompileControl) {\n    var attrs = current.attrs();\n    var templateBindings = MapWrapper.get(attrs, 'template');\n    var hasTemplateBinding = isPresent(templateBindings);\n\n    // look for template shortcuts such as *if=\"condition\" and treat them as template=\"if condition\"\n    MapWrapper.forEach(attrs, (attrValue, attrName) => {\n      if (StringWrapper.startsWith(attrName, '*')) {\n        var key = StringWrapper.substring(attrName, 1);  // remove the star\n        if (hasTemplateBinding) {\n          // 2nd template binding detected\n          throw new BaseException(`Only one template directive per element is allowed: ` +\n            `${templateBindings} and ${key} cannot be used simultaneously ` +\n            `in ${current.elementDescription}`);\n        } else {\n          templateBindings = (attrValue.length == 0) ? key : key + ' ' + attrValue;\n          hasTemplateBinding = true;\n        }\n      }\n    });\n\n    if (isPresent(parent)) {\n      if (DOM.isTemplateElement(current.element)) {\n        if (!current.isViewRoot) {\n          var viewRoot = new CompileElement(DOM.createTemplate(''));\n          viewRoot.inheritedProtoView = current.bindElement().bindNestedProtoView(viewRoot.element);\n          // viewRoot doesn't appear in the original template, so we associate\n          // the current element description to get a more meaningful message in case of error\n          viewRoot.elementDescription = current.elementDescription;\n          viewRoot.isViewRoot = true;\n\n          this._moveChildNodes(DOM.content(current.element), DOM.content(viewRoot.element));\n          control.addChild(viewRoot);\n        }\n      } if (hasTemplateBinding) {\n        var newParent = new CompileElement(DOM.createTemplate(''));\n        newParent.inheritedProtoView = current.inheritedProtoView;\n        newParent.inheritedElementBinder = current.inheritedElementBinder;\n        newParent.distanceToInheritedBinder = current.distanceToInheritedBinder;\n        // newParent doesn't appear in the original template, so we associate\n        // the current element description to get a more meaningful message in case of error\n        newParent.elementDescription = current.elementDescription;\n\n        current.inheritedProtoView = newParent.bindElement().bindNestedProtoView(current.element);\n        current.inheritedElementBinder = null;\n        current.distanceToInheritedBinder = 0;\n        current.isViewRoot = true;\n        this._parseTemplateBindings(templateBindings, newParent);\n\n        this._addParentElement(current.element, newParent.element);\n        control.addParent(newParent);\n        DOM.remove(current.element);\n      }\n    }\n  }\n\n  _moveChildNodes(source, target) {\n    var next = DOM.firstChild(source);\n    while (isPresent(next)) {\n      DOM.appendChild(target, next);\n      next = DOM.firstChild(source);\n    }\n  }\n\n  _addParentElement(currentElement, newParentElement) {\n    DOM.insertBefore(currentElement, newParentElement);\n    DOM.appendChild(newParentElement, currentElement);\n  }\n\n  _parseTemplateBindings(templateBindings:string, compileElement:CompileElement) {\n    var bindings = this._parser.parseTemplateBindings(templateBindings, compileElement.elementDescription);\n    for (var i=0; i<bindings.length; i++) {\n      var binding = bindings[i];\n      if (binding.keyIsVar) {\n        compileElement.bindElement().bindVariable(\n          dashCaseToCamelCase(binding.key), binding.name\n        );\n        MapWrapper.set(compileElement.attrs(), binding.key, binding.name);\n      } else if (isPresent(binding.expression)) {\n        compileElement.bindElement().bindProperty(\n          dashCaseToCamelCase(binding.key), binding.expression\n        );\n        MapWrapper.set(compileElement.attrs(), binding.key, binding.expression.source);\n      } else {\n        DOM.setAttribute(compileElement.element, binding.key, '');\n      }\n    }\n  }\n}\n"]}