UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

1 lines 11.9 kB
{"version":3,"sources":["directive_parser.js"],"names":[],"mappings":"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","file":"angular2/src/render/dom/compiler/directive_parser.es6","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"]}