{"version":3,"sources":["directive_parser.js"],"names":[],"mappings":"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","file":"angular2/src/render/dom/compiler/directive_parser.js","sourcesContent":["import {isPresent, isBlank, BaseException, assertionsEnabled, RegExpWrapper, StringWrapper} from 'angular2/src/facade/lang';\nimport {List, MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {DOM} from 'angular2/src/dom/dom_adapter';\nimport {Parser} from 'angular2/change_detection';\n\nimport {SelectorMatcher, CssSelector} from 'angular2/src/render/dom/compiler/selector';\n\nimport {CompileStep} from './compile_step';\nimport {CompileElement} from './compile_element';\nimport {CompileControl} from './compile_control';\n\nimport {DirectiveMetadata} from '../../api';\nimport {dashCaseToCamelCase, camelCaseToDashCase, EVENT_TARGET_SEPARATOR} from '../util';\n\n/**\n * Parses the directives on a single element. Assumes ViewSplitter has already created\n * <template> elements for template directives.\n */\nexport class DirectiveParser extends CompileStep {\n  _selectorMatcher:SelectorMatcher;\n  _directives:List<DirectiveMetadata>;\n  _parser:Parser;\n\n  constructor(parser: Parser, directives:List<DirectiveMetadata>) {\n    super();\n    this._parser = parser;\n    this._selectorMatcher = new SelectorMatcher();\n    this._directives = directives;\n    for (var i=0; i<directives.length; i++) {\n      var selector = CssSelector.parse(directives[i].selector);\n      this._selectorMatcher.addSelectables(selector, i);\n    }\n  }\n\n  process(parent:CompileElement, current:CompileElement, control:CompileControl) {\n    var attrs = current.attrs();\n    var classList = current.classList();\n\n    var cssSelector = new CssSelector();\n    var nodeName = DOM.nodeName(current.element);\n    cssSelector.setElement(nodeName);\n    for (var i=0; i < classList.length; i++) {\n      cssSelector.addClassName(classList[i]);\n    }\n\n    MapWrapper.forEach(attrs, (attrValue, attrName) => {\n      cssSelector.addAttribute(attrName, attrValue);\n    });\n\n    var viewportDirective;\n    var componentDirective;\n    // Note: We assume that the ViewSplitter already did its work, i.e. template directive should\n    // only be present on <template> elements!\n    var isTemplateElement = DOM.isTemplateElement(current.element);\n\n    this._selectorMatcher.match(cssSelector, (selector, directiveIndex) => {\n      var elementBinder = current.bindElement();\n      var directive = this._directives[directiveIndex];\n      var directiveBinder = elementBinder.bindDirective(directiveIndex);\n      current.compileChildren = current.compileChildren && directive.compileChildren;\n      if (isPresent(directive.properties)) {\n        MapWrapper.forEach(directive.properties, (bindConfig, dirProperty) => {\n          this._bindDirectiveProperty(dirProperty, bindConfig, current, directiveBinder);\n        });\n      }\n      if (isPresent(directive.hostListeners)) {\n        MapWrapper.forEach(directive.hostListeners, (action, eventName) => {\n          this._bindDirectiveEvent(eventName, action, current, directiveBinder);\n        });\n      }\n      if (isPresent(directive.setters)) {\n        ListWrapper.forEach(directive.setters, (propertyName) => {\n          elementBinder.bindPropertySetter(propertyName);\n        });\n      }\n      if (isPresent(directive.readAttributes)) {\n        ListWrapper.forEach(directive.readAttributes, (attrName) => {\n          elementBinder.readAttribute(attrName);\n        });\n      }\n      if (directive.type === DirectiveMetadata.VIEWPORT_TYPE) {\n        if (!isTemplateElement) {\n          throw new BaseException(`Viewport directives need to be placed on <template> elements or elements ` +\n            `with template attribute - check ${current.elementDescription}`);\n        }\n        if (isPresent(viewportDirective)) {\n          throw new BaseException(`Only one viewport directive is allowed per element - check ${current.elementDescription}`);\n        }\n        viewportDirective = directive;\n      } else {\n        if (isTemplateElement) {\n          throw new BaseException(`Only template directives are allowed on template elements - check ${current.elementDescription}`);\n        }\n        if (directive.type === DirectiveMetadata.COMPONENT_TYPE) {\n          if (isPresent(componentDirective)) {\n            throw new BaseException(`Only one component directive is allowed per element - check ${current.elementDescription}`);\n          }\n          componentDirective = directive;\n          elementBinder.setComponentId(directive.id);\n        }\n      }\n    });\n  }\n\n  _bindDirectiveProperty(dirProperty, bindConfig, compileElement, directiveBinder) {\n    var pipes = this._splitBindConfig(bindConfig);\n    var elProp = ListWrapper.removeAt(pipes, 0);\n\n    var bindingAst = MapWrapper.get(\n      compileElement.bindElement().propertyBindings,\n      dashCaseToCamelCase(elProp)\n    );\n\n    if (isBlank(bindingAst)) {\n      var attributeValue = MapWrapper.get(compileElement.attrs(), camelCaseToDashCase(elProp));\n      if (isPresent(attributeValue)) {\n        bindingAst = this._parser.wrapLiteralPrimitive(\n          attributeValue,\n          compileElement.elementDescription\n        );\n      }\n    }\n\n    // Bindings are optional, so this binding only needs to be set up if an expression is given.\n    if (isPresent(bindingAst)) {\n      var fullExpAstWithBindPipes = this._parser.addPipes(bindingAst, pipes);\n      directiveBinder.bindProperty(\n        dirProperty, fullExpAstWithBindPipes\n      );\n    }\n  }\n\n  _bindDirectiveEvent(eventName, action, compileElement, directiveBinder) {\n    var ast = this._parser.parseAction(action, compileElement.elementDescription);\n    if (StringWrapper.contains(eventName, EVENT_TARGET_SEPARATOR)) {\n      var parts = eventName.split(EVENT_TARGET_SEPARATOR);\n      directiveBinder.bindEvent(parts[1], ast, parts[0]);\n    } else {\n      directiveBinder.bindEvent(eventName, ast);\n    }\n    \n  }\n\n  _splitBindConfig(bindConfig:string) {\n    return ListWrapper.map(bindConfig.split('|'), (s) => s.trim());\n  }\n}\n\n"]}