feat(compiler): DOM adapters + html5lib implementation; misc fixes
This commit is contained in:
4
modules/angular2/src/core/application.js
vendored
4
modules/angular2/src/core/application.js
vendored
@ -1,6 +1,7 @@
|
||||
import {Injector, bind, OpaqueToken} from 'angular2/di';
|
||||
import {Type, FIELD, isBlank, isPresent, BaseException, assertionsEnabled, print} from 'angular2/src/facade/lang';
|
||||
import {DOM, Element} from 'angular2/src/facade/dom';
|
||||
import {BrowserDomAdapter} from 'angular2/src/dom/browser_adapter';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {Compiler, CompilerCache} from './compiler/compiler';
|
||||
import {ProtoView} from './compiler/view';
|
||||
import {Reflector, reflector} from 'angular2/src/reflection/reflection';
|
||||
@ -117,6 +118,7 @@ function _createVmZone(givenReporter:Function): VmTurnZone {
|
||||
// Multiple calls to this method are allowed. Each application would only share
|
||||
// _rootInjector, which is not user-configurable by design, thus safe to share.
|
||||
export function bootstrap(appComponentType: Type, bindings: List<Binding>=null, givenBootstrapErrorReporter: Function=null): Promise {
|
||||
BrowserDomAdapter.makeCurrent();
|
||||
var bootstrapProcess = PromiseWrapper.completer();
|
||||
|
||||
var zone = _createVmZone(givenBootstrapErrorReporter);
|
||||
|
@ -1,7 +1,6 @@
|
||||
import {Type, isBlank, isPresent, BaseException, normalizeBlank, stringify} from 'angular2/src/facade/lang';
|
||||
import {Promise, PromiseWrapper} from 'angular2/src/facade/async';
|
||||
import {List, ListWrapper, Map, MapWrapper} from 'angular2/src/facade/collection';
|
||||
import {DOM, Element} from 'angular2/src/facade/dom';
|
||||
|
||||
import {ChangeDetection, Parser} from 'angular2/change_detection';
|
||||
|
||||
@ -149,7 +148,7 @@ export class Compiler {
|
||||
}
|
||||
|
||||
// TODO(vicb): union type return ProtoView or Promise<ProtoView>
|
||||
_compileTemplate(template: Template, tplElement: Element, component: Type) {
|
||||
_compileTemplate(template: Template, tplElement, component: Type) {
|
||||
var pipeline = new CompilePipeline(this.createSteps(component, template));
|
||||
var compilationCtxtDescription = stringify(this._reader.read(component).type);
|
||||
var compileElements;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {List, Map, ListWrapper, MapWrapper} from 'angular2/src/facade/collection';
|
||||
import {Element, DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {int, isBlank, isPresent, Type, StringJoiner, assertionsEnabled} from 'angular2/src/facade/lang';
|
||||
import {DirectiveMetadata} from '../directive_metadata';
|
||||
import {Decorator, Component, Viewport} from '../../annotations/annotations';
|
||||
@ -15,7 +15,7 @@ import {AST} from 'angular2/change_detection';
|
||||
* by the CompileSteps starting out with the pure HTMLElement.
|
||||
*/
|
||||
export class CompileElement {
|
||||
element:Element;
|
||||
element;
|
||||
_attrs:Map;
|
||||
_classList:List;
|
||||
textNodeBindings:Map;
|
||||
@ -40,7 +40,7 @@ export class CompileElement {
|
||||
ignoreBindings: boolean;
|
||||
elementDescription: string; // e.g. '<div [class]="foo">' : used to provide context in case of error
|
||||
|
||||
constructor(element:Element, compilationUnit = '') {
|
||||
constructor(element, compilationUnit = '') {
|
||||
this.element = element;
|
||||
this._attrs = null;
|
||||
this._classList = null;
|
||||
@ -177,7 +177,7 @@ export class CompileElement {
|
||||
|
||||
// return an HTML representation of an element start tag - without its content
|
||||
// this is used to give contextual information in case of errors
|
||||
function getElementDescription(domElement:Element):string {
|
||||
function getElementDescription(domElement):string {
|
||||
var buf = new StringJoiner();
|
||||
var atts = DOM.attributeMap(domElement);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {isPresent} from 'angular2/src/facade/lang';
|
||||
import {List, ListWrapper} from 'angular2/src/facade/collection';
|
||||
import {Element, DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {CompileElement} from './compile_element';
|
||||
import {CompileControl} from './compile_control';
|
||||
import {CompileStep} from './compile_step';
|
||||
@ -15,7 +15,7 @@ export class CompilePipeline {
|
||||
this._control = new CompileControl(steps);
|
||||
}
|
||||
|
||||
process(rootElement:Element, compilationCtxtDescription:string = ''):List {
|
||||
process(rootElement, compilationCtxtDescription:string = ''):List {
|
||||
var results = ListWrapper.create();
|
||||
this._process(results, null, new CompileElement(rootElement, compilationCtxtDescription), compilationCtxtDescription);
|
||||
return results;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {isPresent, isBlank, BaseException, assertionsEnabled, RegExpWrapper} from 'angular2/src/facade/lang';
|
||||
import {List, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
|
||||
import {DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {SelectorMatcher} from '../selector';
|
||||
import {CssSelector} from '../selector';
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {int, isPresent, isBlank, Type, BaseException, StringWrapper, RegExpWrapper, isString, stringify} from 'angular2/src/facade/lang';
|
||||
import {Element, DOM, attrToPropMap} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {ListWrapper, List, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
|
||||
|
||||
import {reflector} from 'angular2/src/reflection/reflection';
|
||||
@ -21,7 +21,7 @@ function ariaSetterFactory(attrName:string) {
|
||||
var setterFn = StringMapWrapper.get(ariaSettersCache, attrName);
|
||||
|
||||
if (isBlank(setterFn)) {
|
||||
setterFn = function(element:Element, value) {
|
||||
setterFn = function(element, value) {
|
||||
if (isPresent(value)) {
|
||||
DOM.setAttribute(element, attrName, stringify(value));
|
||||
} else {
|
||||
@ -42,7 +42,7 @@ function classSetterFactory(className:string) {
|
||||
var setterFn = StringMapWrapper.get(classSettersCache, className);
|
||||
|
||||
if (isBlank(setterFn)) {
|
||||
setterFn = function(element:Element, value) {
|
||||
setterFn = function(element, value) {
|
||||
if (value) {
|
||||
DOM.addClass(element, className);
|
||||
} else {
|
||||
@ -64,7 +64,7 @@ function styleSetterFactory(styleName:string, stylesuffix:string) {
|
||||
var setterFn = StringMapWrapper.get(styleSettersCache, cacheKey);
|
||||
|
||||
if (isBlank(setterFn)) {
|
||||
setterFn = function(element:Element, value) {
|
||||
setterFn = function(element, value) {
|
||||
var valAsStr;
|
||||
if (isPresent(value)) {
|
||||
valAsStr = stringify(value);
|
||||
@ -80,7 +80,7 @@ function styleSetterFactory(styleName:string, stylesuffix:string) {
|
||||
}
|
||||
|
||||
const ROLE_ATTR = 'role';
|
||||
function roleSetter(element:Element, value) {
|
||||
function roleSetter(element, value) {
|
||||
if (isString(value)) {
|
||||
DOM.setAttribute(element, ROLE_ATTR, value);
|
||||
} else {
|
||||
@ -92,18 +92,25 @@ function roleSetter(element:Element, value) {
|
||||
}
|
||||
|
||||
// special mapping for cases where attribute name doesn't match property name
|
||||
var attrToProp = StringMapWrapper.merge({
|
||||
"inner-html": "innerHTML",
|
||||
"readonly": "readOnly",
|
||||
"tabindex": "tabIndex",
|
||||
}, attrToPropMap);
|
||||
var _lazyAttrToProp;
|
||||
|
||||
function attrToProp() {
|
||||
if (!isPresent(_lazyAttrToProp)) {
|
||||
_lazyAttrToProp = StringMapWrapper.merge({
|
||||
"inner-html": "innerHTML",
|
||||
"readonly": "readOnly",
|
||||
"tabindex": "tabIndex",
|
||||
}, DOM.attrToPropMap);
|
||||
}
|
||||
return _lazyAttrToProp;
|
||||
}
|
||||
|
||||
// tells if an attribute is handled by the ElementBinderBuilder step
|
||||
export function isSpecialProperty(propName:string) {
|
||||
return StringWrapper.startsWith(propName, ARIA_PREFIX)
|
||||
|| StringWrapper.startsWith(propName, CLASS_PREFIX)
|
||||
|| StringWrapper.startsWith(propName, STYLE_PREFIX)
|
||||
|| StringMapWrapper.contains(attrToProp, propName);
|
||||
|| StringMapWrapper.contains(attrToProp(), propName);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -250,7 +257,7 @@ export class ElementBinderBuilder extends CompileStep {
|
||||
}
|
||||
|
||||
_resolvePropertyName(attrName:string) {
|
||||
var mappedPropName = StringMapWrapper.get(attrToProp, attrName);
|
||||
var mappedPropName = StringMapWrapper.get(attrToProp(), attrName);
|
||||
return isPresent(mappedPropName) ? mappedPropName : attrName;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {isPresent} from 'angular2/src/facade/lang';
|
||||
import {MapWrapper} from 'angular2/src/facade/collection';
|
||||
import {DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
|
||||
import {CompileStep} from './compile_step';
|
||||
import {CompileElement} from './compile_element';
|
||||
|
@ -5,7 +5,7 @@ import {CompileControl} from './compile_control';
|
||||
import {DirectiveMetadata} from 'angular2/src/core/compiler/directive_metadata';
|
||||
import {ShadowDomStrategy} from 'angular2/src/core/compiler/shadow_dom_strategy';
|
||||
|
||||
import {DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {Type} from 'angular2/src/facade/lang';
|
||||
import {PromiseWrapper} from 'angular2/src/facade/async';
|
||||
import {ListWrapper} from 'angular2/src/facade/collection';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {RegExpWrapper, StringWrapper, isPresent} from 'angular2/src/facade/lang';
|
||||
import {DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
|
||||
import {Parser} from 'angular2/change_detection';
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {isBlank, isPresent, BaseException} from 'angular2/src/facade/lang';
|
||||
import {DOM, TemplateElement} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {MapWrapper, ListWrapper} from 'angular2/src/facade/collection';
|
||||
|
||||
import {Parser} from 'angular2/change_detection';
|
||||
@ -64,8 +64,8 @@ export class ViewSplitter extends CompileStep {
|
||||
if (DOM.isTemplateElement(current.element)) {
|
||||
if (!current.isViewRoot) {
|
||||
var viewRoot = new CompileElement(DOM.createTemplate(''));
|
||||
var currentElement:TemplateElement = current.element;
|
||||
var viewRootElement:TemplateElement = viewRoot.element;
|
||||
var currentElement = current.element;
|
||||
var viewRootElement = viewRoot.element;
|
||||
this._moveChildNodes(DOM.content(currentElement), DOM.content(viewRootElement));
|
||||
// viewRoot doesn't appear in the original template, so we associate
|
||||
// the current element description to get a more meaningful message in case of error
|
||||
|
@ -1,16 +1,14 @@
|
||||
import {Decorator} from '../../annotations/annotations';
|
||||
import {SourceLightDom, DestinationLightDom, LightDom} from './light_dom';
|
||||
import {Inject} from 'angular2/di';
|
||||
import {Element, Node, DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {isPresent} from 'angular2/src/facade/lang';
|
||||
import {List, ListWrapper} from 'angular2/src/facade/collection';
|
||||
import {NgElement} from 'angular2/src/core/dom/element';
|
||||
|
||||
var _scriptTemplate = DOM.createScriptTag('type', 'ng/content')
|
||||
|
||||
class ContentStrategy {
|
||||
nodes: List<Node>;
|
||||
insert(nodes:List<Node>){}
|
||||
nodes:List;
|
||||
insert(nodes:List){}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -19,34 +17,42 @@ class ContentStrategy {
|
||||
* and thus does not affect redistribution.
|
||||
*/
|
||||
class RenderedContent extends ContentStrategy {
|
||||
beginScript:Element;
|
||||
endScript:Element;
|
||||
static _lazyScriptTemplate;
|
||||
beginScript;
|
||||
endScript;
|
||||
|
||||
constructor(contentEl:Element) {
|
||||
constructor(contentEl) {
|
||||
super();
|
||||
this._replaceContentElementWithScriptTags(contentEl);
|
||||
this.nodes = [];
|
||||
}
|
||||
|
||||
_scriptTemplate() {
|
||||
if (!isPresent(RenderedContent._lazyScriptTemplate)) {
|
||||
RenderedContent._lazyScriptTemplate = DOM.createScriptTag('type', 'ng/content');
|
||||
}
|
||||
return RenderedContent._lazyScriptTemplate;
|
||||
}
|
||||
|
||||
// Inserts the nodes in between the start and end scripts.
|
||||
// Previous content is removed.
|
||||
insert(nodes:List<Node>) {
|
||||
insert(nodes:List) {
|
||||
this.nodes = nodes;
|
||||
DOM.insertAllBefore(this.endScript, nodes);
|
||||
this._removeNodesUntil(ListWrapper.isEmpty(nodes) ? this.endScript : nodes[0]);
|
||||
}
|
||||
|
||||
// Replaces the content tag with a pair of script tags
|
||||
_replaceContentElementWithScriptTags(contentEl:Element) {
|
||||
this.beginScript = DOM.clone(_scriptTemplate);
|
||||
this.endScript = DOM.clone(_scriptTemplate);
|
||||
_replaceContentElementWithScriptTags(contentEl) {
|
||||
this.beginScript = DOM.clone(this._scriptTemplate());
|
||||
this.endScript = DOM.clone(this._scriptTemplate());
|
||||
|
||||
DOM.insertBefore(contentEl, this.beginScript);
|
||||
DOM.insertBefore(contentEl, this.endScript);
|
||||
DOM.removeChild(DOM.parentElement(contentEl), contentEl);
|
||||
}
|
||||
|
||||
_removeNodesUntil(node:Node) {
|
||||
_removeNodesUntil(node) {
|
||||
var p = DOM.parentElement(this.beginScript);
|
||||
for (var next = DOM.nextSibling(this.beginScript);
|
||||
next !== node;
|
||||
@ -70,7 +76,7 @@ class IntermediateContent extends ContentStrategy {
|
||||
this.nodes = [];
|
||||
}
|
||||
|
||||
insert(nodes:List<Node>) {
|
||||
insert(nodes:List) {
|
||||
this.nodes = nodes;
|
||||
this.destinationLightDom.redistribute();
|
||||
}
|
||||
@ -91,11 +97,11 @@ export class Content {
|
||||
new RenderedContent(contentEl.domElement);
|
||||
}
|
||||
|
||||
nodes():List<Node> {
|
||||
nodes():List {
|
||||
return this._strategy.nodes;
|
||||
}
|
||||
|
||||
insert(nodes:List<Node>) {
|
||||
insert(nodes:List) {
|
||||
this._strategy.insert(nodes);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import {Element, Node, DOM} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {List, ListWrapper} from 'angular2/src/facade/collection';
|
||||
import {isBlank, isPresent} from 'angular2/src/facade/lang';
|
||||
|
||||
@ -12,7 +12,7 @@ export class DestinationLightDom {}
|
||||
|
||||
|
||||
class _Root {
|
||||
node:Node;
|
||||
node;
|
||||
injector:ElementInjector;
|
||||
|
||||
constructor(node, injector) {
|
||||
@ -29,10 +29,10 @@ export class LightDom {
|
||||
// The shadow DOM
|
||||
shadowDomView:View;
|
||||
// The nodes of the light DOM
|
||||
nodes:List<Node>;
|
||||
nodes:List;
|
||||
roots:List<_Root>;
|
||||
|
||||
constructor(lightDomView:View, shadowDomView:View, element:Element) {
|
||||
constructor(lightDomView:View, shadowDomView:View, element) {
|
||||
this.lightDomView = lightDomView;
|
||||
this.shadowDomView = shadowDomView;
|
||||
this.nodes = DOM.childNodesAsList(element);
|
||||
@ -113,7 +113,7 @@ export class LightDom {
|
||||
}
|
||||
|
||||
// Projects the light DOM into the shadow DOM
|
||||
function redistributeNodes(contents:List<Content>, nodes:List<Node>) {
|
||||
function redistributeNodes(contents:List<Content>, nodes:List) {
|
||||
for (var i = 0; i < contents.length; ++i) {
|
||||
var content = contents[i];
|
||||
var select = content.select;
|
||||
|
@ -1,10 +1,4 @@
|
||||
import {
|
||||
StyleElement,
|
||||
DOM,
|
||||
CssRule,
|
||||
CssKeyframesRule,
|
||||
CSSRuleWrapper
|
||||
} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {List, ListWrapper} from 'angular2/src/facade/collection';
|
||||
import {
|
||||
StringWrapper,
|
||||
@ -153,7 +147,7 @@ export class ShadowCss {
|
||||
* Shim a style element with the given selector. Returns cssText that can
|
||||
* be included in the document via WebComponents.ShadowCSS.addCssToDocument(css).
|
||||
*/
|
||||
shimStyle(style: StyleElement, selector: string, hostSelector: string = ''): string {
|
||||
shimStyle(style, selector: string, hostSelector: string = ''): string {
|
||||
var cssText = DOM.getText(style);
|
||||
return this.shimCssText(cssText, selector, hostSelector);
|
||||
}
|
||||
@ -353,11 +347,11 @@ export class ShadowCss {
|
||||
if (isPresent(cssRules)) {
|
||||
for (var i = 0; i < cssRules.length; i++) {
|
||||
var rule = cssRules[i];
|
||||
if (CSSRuleWrapper.isStyleRule(rule) || CSSRuleWrapper.isPageRule(rule)) {
|
||||
if (DOM.isStyleRule(rule) || DOM.isPageRule(rule)) {
|
||||
cssText += this._scopeSelector(rule.selectorText, scopeSelector, hostSelector,
|
||||
this.strictStyling) + ' {\n';
|
||||
cssText += this._propertiesFromRule(rule) + '\n}\n\n';
|
||||
} else if (CSSRuleWrapper.isMediaRule(rule)) {
|
||||
} else if (DOM.isMediaRule(rule)) {
|
||||
cssText += '@media ' + rule.media.mediaText + ' {\n';
|
||||
cssText += this._scopeRules(rule.cssRules, scopeSelector, hostSelector);
|
||||
cssText += '\n}\n\n';
|
||||
@ -372,7 +366,7 @@ export class ShadowCss {
|
||||
cssText += rule.cssText + '\n\n';
|
||||
}
|
||||
} catch(x) {
|
||||
if (CSSRuleWrapper.isKeyframesRule(rule) && isPresent(rule.cssRules)) {
|
||||
if (DOM.isKeyframesRule(rule) && isPresent(rule.cssRules)) {
|
||||
cssText += this._ieSafeCssTextFromKeyFrameRule(rule);
|
||||
}
|
||||
}
|
||||
@ -382,7 +376,7 @@ export class ShadowCss {
|
||||
return cssText;
|
||||
}
|
||||
|
||||
_ieSafeCssTextFromKeyFrameRule(rule: CssKeyframesRule): string {
|
||||
_ieSafeCssTextFromKeyFrameRule(rule): string {
|
||||
var cssText = '@keyframes ' + rule.name + ' {';
|
||||
for (var i = 0; i < rule.cssRules.length; i++) {
|
||||
var r = rule.cssRules[i];
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {Type, isBlank, isPresent, int} from 'angular2/src/facade/lang';
|
||||
import {DOM, Element, StyleElement} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {List, ListWrapper, MapWrapper, Map} from 'angular2/src/facade/collection';
|
||||
import {PromiseWrapper} from 'angular2/src/facade/async';
|
||||
|
||||
@ -13,14 +13,14 @@ import {StyleInliner} from './style_inliner';
|
||||
import {StyleUrlResolver} from './style_url_resolver';
|
||||
|
||||
export class ShadowDomStrategy {
|
||||
attachTemplate(el:Element, view:View) {}
|
||||
constructLightDom(lightDomView:View, shadowDomView:View, el:Element) {}
|
||||
attachTemplate(el, view:View) {}
|
||||
constructLightDom(lightDomView:View, shadowDomView:View, el) {}
|
||||
polyfillDirectives():List<Type> { return null; }
|
||||
// TODO(vicb): union types: return either a string or a Promise<string>
|
||||
transformStyleText(cssText: string, baseUrl: string, component: Type) {}
|
||||
handleStyleElement(styleEl: StyleElement) {};
|
||||
shimContentElement(component: Type, element: Element) {}
|
||||
shimHostElement(component: Type, element: Element) {}
|
||||
handleStyleElement(styleEl) {};
|
||||
shimContentElement(component: Type, element) {}
|
||||
shimHostElement(component: Type, element) {}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -34,21 +34,21 @@ export class ShadowDomStrategy {
|
||||
*/
|
||||
export class EmulatedUnscopedShadowDomStrategy extends ShadowDomStrategy {
|
||||
_styleUrlResolver: StyleUrlResolver;
|
||||
_lastInsertedStyle: StyleElement;
|
||||
_styleHost: Element;
|
||||
_lastInsertedStyle;
|
||||
_styleHost;
|
||||
|
||||
constructor(styleUrlResolver: StyleUrlResolver, styleHost: Element) {
|
||||
constructor(styleUrlResolver: StyleUrlResolver, styleHost) {
|
||||
super();
|
||||
this._styleUrlResolver = styleUrlResolver;
|
||||
this._styleHost = styleHost;
|
||||
}
|
||||
|
||||
attachTemplate(el:Element, view:View){
|
||||
attachTemplate(el, view:View){
|
||||
DOM.clearNodes(el);
|
||||
_moveViewNodesIntoParent(el, view);
|
||||
}
|
||||
|
||||
constructLightDom(lightDomView:View, shadowDomView:View, el:Element){
|
||||
constructLightDom(lightDomView:View, shadowDomView:View, el) {
|
||||
return new LightDom(lightDomView, shadowDomView, el);
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ export class EmulatedUnscopedShadowDomStrategy extends ShadowDomStrategy {
|
||||
return this._styleUrlResolver.resolveUrls(cssText, baseUrl);
|
||||
}
|
||||
|
||||
handleStyleElement(styleEl: StyleElement) {
|
||||
handleStyleElement(styleEl) {
|
||||
DOM.remove(styleEl);
|
||||
|
||||
var cssText = DOM.getText(styleEl);
|
||||
@ -73,7 +73,7 @@ export class EmulatedUnscopedShadowDomStrategy extends ShadowDomStrategy {
|
||||
}
|
||||
};
|
||||
|
||||
_insertStyleElement(host: Element, style: StyleElement) {
|
||||
_insertStyleElement(host, style) {
|
||||
if (isBlank(this._lastInsertedStyle)) {
|
||||
var firstChild = DOM.firstChild(host);
|
||||
if (isPresent(firstChild)) {
|
||||
@ -103,7 +103,7 @@ export class EmulatedUnscopedShadowDomStrategy extends ShadowDomStrategy {
|
||||
export class EmulatedScopedShadowDomStrategy extends EmulatedUnscopedShadowDomStrategy {
|
||||
_styleInliner: StyleInliner;
|
||||
|
||||
constructor(styleInliner: StyleInliner, styleUrlResolver: StyleUrlResolver, styleHost: Element) {
|
||||
constructor(styleInliner: StyleInliner, styleUrlResolver: StyleUrlResolver, styleHost) {
|
||||
super(styleUrlResolver, styleHost);
|
||||
this._styleInliner = styleInliner;
|
||||
}
|
||||
@ -118,18 +118,18 @@ export class EmulatedScopedShadowDomStrategy extends EmulatedUnscopedShadowDomSt
|
||||
}
|
||||
}
|
||||
|
||||
handleStyleElement(styleEl: StyleElement) {
|
||||
handleStyleElement(styleEl) {
|
||||
DOM.remove(styleEl);
|
||||
this._insertStyleElement(this._styleHost, styleEl);
|
||||
};
|
||||
|
||||
shimContentElement(component: Type, element: Element) {
|
||||
shimContentElement(component: Type, element) {
|
||||
var id = _getComponentId(component);
|
||||
var attrName = _getContentAttribute(id);
|
||||
DOM.setAttribute(element, attrName, '');
|
||||
}
|
||||
|
||||
shimHostElement(component: Type, element: Element) {
|
||||
shimHostElement(component: Type, element) {
|
||||
var id = _getComponentId(component);
|
||||
var attrName = _getHostAttribute(id);
|
||||
DOM.setAttribute(element, attrName, '');
|
||||
@ -150,11 +150,11 @@ export class NativeShadowDomStrategy extends ShadowDomStrategy {
|
||||
this._styleUrlResolver = styleUrlResolver;
|
||||
}
|
||||
|
||||
attachTemplate(el:Element, view:View){
|
||||
attachTemplate(el, view:View){
|
||||
_moveViewNodesIntoParent(DOM.createShadowRoot(el), view);
|
||||
}
|
||||
|
||||
constructLightDom(lightDomView:View, shadowDomView:View, el:Element){
|
||||
constructLightDom(lightDomView:View, shadowDomView:View, el) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {isBlank, isPresent, BaseException, stringify} from 'angular2/src/facade/lang';
|
||||
import {DOM, Element} from 'angular2/src/facade/dom';
|
||||
import {Map, MapWrapper, StringMapWrapper, StringMap} from 'angular2/src/facade/collection';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
|
||||
import {XHR} from './xhr/xhr';
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
import {isPresent, isBlank, RegExpWrapper, BaseException} from 'angular2/src/facade/lang';
|
||||
import {DOM, AnchorElement} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
|
||||
export class UrlResolver {
|
||||
static a: AnchorElement;
|
||||
static a;
|
||||
|
||||
constructor() {
|
||||
if (isBlank(UrlResolver.a)) {
|
||||
|
18
modules/angular2/src/core/compiler/view.js
vendored
18
modules/angular2/src/core/compiler/view.js
vendored
@ -1,4 +1,4 @@
|
||||
import {DOM, Element, Node, Text, DocumentFragment} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {Promise} from 'angular2/src/facade/async';
|
||||
import {ListWrapper, MapWrapper, StringMapWrapper, List} from 'angular2/src/facade/collection';
|
||||
import {AST, ContextWithVariableBindings, ChangeDispatcher, ProtoChangeDetector, ChangeDetector, ChangeRecord}
|
||||
@ -33,12 +33,12 @@ export class View {
|
||||
/// This list matches the _nodes list. It is sparse, since only Elements have ElementInjector
|
||||
rootElementInjectors:List<ElementInjector>;
|
||||
elementInjectors:List<ElementInjector>;
|
||||
bindElements:List<Element>;
|
||||
textNodes:List<Text>;
|
||||
bindElements:List;
|
||||
textNodes:List;
|
||||
changeDetector:ChangeDetector;
|
||||
/// When the view is part of render tree, the DocumentFragment is empty, which is why we need
|
||||
/// to keep track of the nodes.
|
||||
nodes:List<Node>;
|
||||
nodes:List;
|
||||
componentChildViews: List<View>;
|
||||
viewContainers: List<ViewContainer>;
|
||||
preBuiltObjects: List<PreBuiltObjects>;
|
||||
@ -46,7 +46,7 @@ export class View {
|
||||
context: any;
|
||||
contextWithLocals:ContextWithVariableBindings;
|
||||
|
||||
constructor(proto:ProtoView, nodes:List<Node>, protoChangeDetector:ProtoChangeDetector, protoContextLocals:Map) {
|
||||
constructor(proto:ProtoView, nodes:List, protoChangeDetector:ProtoChangeDetector, protoContextLocals:Map) {
|
||||
this.proto = proto;
|
||||
this.nodes = nodes;
|
||||
this.changeDetector = protoChangeDetector.instantiate(this);
|
||||
@ -262,7 +262,7 @@ export class View {
|
||||
}
|
||||
|
||||
export class ProtoView {
|
||||
element:Element;
|
||||
element;
|
||||
elementBinders:List<ElementBinder>;
|
||||
protoChangeDetector:ProtoChangeDetector;
|
||||
variableBindings: Map;
|
||||
@ -277,7 +277,7 @@ export class ProtoView {
|
||||
stylePromises: List<Promise>;
|
||||
|
||||
constructor(
|
||||
template:Element,
|
||||
template,
|
||||
protoChangeDetector:ProtoChangeDetector,
|
||||
shadowDomStrategy: ShadowDomStrategy) {
|
||||
this.element = template;
|
||||
@ -558,8 +558,8 @@ export class ElementBindingMemento {
|
||||
this._setter = setter;
|
||||
}
|
||||
|
||||
invoke(record:ChangeRecord, bindElements:List<Element>) {
|
||||
var element:Element = bindElements[this._elementIndex];
|
||||
invoke(record:ChangeRecord, bindElements:List) {
|
||||
var element = bindElements[this._elementIndex];
|
||||
this._setter(element, record.currentValue);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as viewModule from './view';
|
||||
import {DOM, Node, Element} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {ListWrapper, MapWrapper, List} from 'angular2/src/facade/collection';
|
||||
import {BaseException} from 'angular2/src/facade/lang';
|
||||
import {Injector} from 'angular2/di';
|
||||
@ -9,7 +9,7 @@ import {EventManager} from 'angular2/src/core/events/event_manager';
|
||||
|
||||
export class ViewContainer {
|
||||
parentView: viewModule.View;
|
||||
templateElement: Element;
|
||||
templateElement;
|
||||
defaultProtoView: viewModule.ProtoView;
|
||||
_views: List<viewModule.View>;
|
||||
_lightDom: any;
|
||||
@ -18,7 +18,7 @@ export class ViewContainer {
|
||||
appInjector: Injector;
|
||||
hostElementInjector: eiModule.ElementInjector;
|
||||
|
||||
constructor(parentView: viewModule.View, templateElement: Element, defaultProtoView: viewModule.ProtoView,
|
||||
constructor(parentView: viewModule.View, templateElement, defaultProtoView: viewModule.ProtoView,
|
||||
elementInjector: eiModule.ElementInjector, eventManager: EventManager, lightDom = null) {
|
||||
this.parentView = parentView;
|
||||
this.templateElement = templateElement;
|
||||
@ -124,7 +124,7 @@ export class ViewContainer {
|
||||
return this._views;
|
||||
}
|
||||
|
||||
nodes():List<Node> {
|
||||
nodes():List {
|
||||
var r = [];
|
||||
for (var i = 0; i < this._views.length; ++i) {
|
||||
r = ListWrapper.concat(r, this._views[i].nodes);
|
||||
|
6
modules/angular2/src/core/dom/element.js
vendored
6
modules/angular2/src/core/dom/element.js
vendored
@ -1,9 +1,9 @@
|
||||
import {DOM, Element} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {normalizeBlank} from 'angular2/src/facade/lang';
|
||||
|
||||
export class NgElement {
|
||||
domElement:Element;
|
||||
constructor(domElement:Element) {
|
||||
domElement;
|
||||
constructor(domElement) {
|
||||
this.domElement = domElement;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {isBlank, BaseException, isPresent, StringWrapper} from 'angular2/src/facade/lang';
|
||||
import {DOM, Element} from 'angular2/src/facade/dom';
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
import {List, ListWrapper, MapWrapper} from 'angular2/src/facade/collection';
|
||||
import {VmTurnZone} from 'angular2/src/core/zone/vm_turn_zone';
|
||||
|
||||
@ -17,7 +17,7 @@ export class EventManager {
|
||||
}
|
||||
}
|
||||
|
||||
addEventListener(element: Element, eventName: string, handler: Function) {
|
||||
addEventListener(element, eventName: string, handler: Function) {
|
||||
var shouldSupportBubble = eventName[0] == BUBBLE_SYMBOL;
|
||||
if (shouldSupportBubble) {
|
||||
eventName = StringWrapper.substring(eventName, 1);
|
||||
@ -54,7 +54,7 @@ export class EventManagerPlugin {
|
||||
return false;
|
||||
}
|
||||
|
||||
addEventListener(element: Element, eventName: string, handler: Function,
|
||||
addEventListener(element, eventName: string, handler: Function,
|
||||
shouldSupportBubble: boolean) {
|
||||
throw "not implemented";
|
||||
}
|
||||
@ -69,7 +69,7 @@ export class DomEventsPlugin extends EventManagerPlugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
addEventListener(element: Element, eventName: string, handler: Function,
|
||||
addEventListener(element, eventName: string, handler: Function,
|
||||
shouldSupportBubble: boolean) {
|
||||
var outsideHandler = shouldSupportBubble ?
|
||||
DomEventsPlugin.bubbleCallback(element, handler, this.manager._zone) :
|
||||
|
@ -2,7 +2,6 @@ library angular.events;
|
||||
|
||||
import 'dart:html';
|
||||
import './hammer_common.dart';
|
||||
import '../../facade/dom.dart' show Element;
|
||||
import '../../facade/lang.dart' show BaseException;
|
||||
|
||||
import 'dart:js' as js;
|
||||
|
@ -1,5 +1,4 @@
|
||||
import {HammerGesturesPluginCommon} from './hammer_common';
|
||||
import {Element} from 'angular2/src/facade/dom';
|
||||
import {isPresent, BaseException} from 'angular2/src/facade/lang';
|
||||
|
||||
export class HammerGesturesPlugin extends HammerGesturesPluginCommon {
|
||||
@ -17,7 +16,7 @@ export class HammerGesturesPlugin extends HammerGesturesPluginCommon {
|
||||
return true;
|
||||
}
|
||||
|
||||
addEventListener(element:Element, eventName:string, handler:Function, shouldSupportBubble: boolean) {
|
||||
addEventListener(element, eventName:string, handler:Function, shouldSupportBubble: boolean) {
|
||||
if (shouldSupportBubble) throw new BaseException('Hammer.js plugin does not support bubbling gestures.');
|
||||
var zone = this.manager.getZone();
|
||||
eventName = eventName.toLowerCase();
|
||||
|
Reference in New Issue
Block a user