diff --git a/nativescript-angular/dom-adapter.ts b/nativescript-angular/dom-adapter.ts index 29b80f28e..d07d9cac6 100644 --- a/nativescript-angular/dom-adapter.ts +++ b/nativescript-angular/dom-adapter.ts @@ -35,6 +35,14 @@ export class NativeScriptElementSchemaRegistry extends ElementSchemaRegistry { securityContext(tagName: string, propName: string): any { return SecurityContext.NONE; } + + validateProperty(name: string): {error: boolean, msg?: string} { + return {error: false}; + } + + validateAttribute(name: string): {error: boolean, msg?: string} { + return {error: false}; + } } export class NativeScriptSanitizer extends Sanitizer { diff --git a/nativescript-angular/package.json b/nativescript-angular/package.json index f72db3902..296a2738c 100644 --- a/nativescript-angular/package.json +++ b/nativescript-angular/package.json @@ -18,18 +18,17 @@ "prepublish": "tsc" }, "dependencies": { - "nativescript-intl": "^0.0.4", - "@angular/core": "2.0.1", - "@angular/common": "2.0.1", - "@angular/compiler": "2.0.1", - "@angular/http": "2.0.1", - "@angular/platform-browser": "2.0.1", - "@angular/platform-browser-dynamic": "2.0.1", - "@angular/platform-server": "2.0.1", - "@angular/forms": "2.0.1", - "@angular/router": "3.0.1", + "nativescript-intl": "~0.0.4", + "@angular/core": "~2.0.0", + "@angular/common": "~2.0.0", + "@angular/compiler": "~2.0.0", + "@angular/http": "~2.0.0", + "@angular/platform-browser": "~2.0.0", + "@angular/platform-browser-dynamic": "~2.0.0", + "@angular/forms": "~2.0.0", + "@angular/router": "~3.0.0", "rxjs": "5.0.0-beta.12", - "reflect-metadata": "^0.1.8", + "reflect-metadata": "~0.1.8", "parse5": "1.3.2", "punycode": "1.3.2", "querystring": "0.2.0", diff --git a/nativescript-angular/parse5_adapter.ts b/nativescript-angular/parse5_adapter.ts index e6f560996..d6f40499b 100644 --- a/nativescript-angular/parse5_adapter.ts +++ b/nativescript-angular/parse5_adapter.ts @@ -6,30 +6,29 @@ * found in the LICENSE file at https://angular.io/license */ -var parse5 = require('parse5/index'); +const parse5 = require('parse5'); -import {ListWrapper, StringMapWrapper} from './collection-facade'; +import {ListWrapper} from './collection-facade'; import {DomAdapter, setRootDomAdapter} from './private_import_platform-browser'; -import {isPresent, isBlank, global, setValueOnPath, DateWrapper} from "./lang-facade"; +import {isPresent, isBlank, setValueOnPath} from "./lang-facade"; import {SelectorMatcher, CssSelector} from './private_import_compiler'; -import {Type} from '@angular/core'; -import {ResourceLoader} from '@angular/compiler'; var parser: any /** TODO #9100 */ = null; var serializer: any /** TODO #9100 */ = null; var treeAdapter: any /** TODO #9100 */ = null; -var _attrToPropMap: {[key: string]: string} = { +const _attrToPropMap: {[key: string]: string} = { 'class': 'className', 'innerHtml': 'innerHTML', 'readonly': 'readOnly', 'tabindex': 'tabIndex', }; -var defDoc: any /** TODO #9100 */ = null; -var mapProps = ['attribs', 'x-attribsNamespace', 'x-attribsPrefix']; +let defDoc: any = null; -function _notImplemented(methodName: any /** TODO #9100 */) { +const mapProps = ['attribs', 'x-attribsNamespace', 'x-attribsPrefix']; + +function _notImplemented(methodName: string) { return new Error('This method is not implemented in Parse5DomAdapter: ' + methodName); } @@ -48,12 +47,12 @@ export class Parse5DomAdapter extends DomAdapter { setRootDomAdapter(new Parse5DomAdapter()); } - hasProperty(element: any /** TODO #9100 */, name: string): boolean { + hasProperty(element: any, name: string): boolean { return _HTMLElementPropertyList.indexOf(name) > -1; } // TODO(tbosch): don't even call this method when we run the tests on server side // by not using the DomRenderer in tests. Keeping this for now to make tests happy... - setProperty(el: /*element*/ any, name: string, value: any) { + setProperty(el: any, name: string, value: any) { if (name === 'innerHTML') { this.setInnerHTML(el, value); } else if (name === 'className') { @@ -64,179 +63,158 @@ export class Parse5DomAdapter extends DomAdapter { } // TODO(tbosch): don't even call this method when we run the tests on server side // by not using the DomRenderer in tests. Keeping this for now to make tests happy... - getProperty(el: /*element*/ any, name: string): any { return el[name]; } + getProperty(el: any, name: string): any { return el[name]; } - logError(error: any /** TODO #9100 */) { console.error(error); } + logError(error: string) { console.error(error); } - log(error: any /** TODO #9100 */) { console.log(error); } + log(error: string) { console.log(error); } - logGroup(error: any /** TODO #9100 */) { console.error(error); } + logGroup(error: string) { console.error(error); } logGroupEnd() {} get attrToPropMap() { return _attrToPropMap; } - query(selector: any /** TODO #9100 */) { throw _notImplemented('query'); } - querySelector(el: any /** TODO #9100 */, selector: string): any { - return this.querySelectorAll(el, selector)[0]; - } - querySelectorAll(el: any /** TODO #9100 */, selector: string): any[] { - var res: any[] /** TODO #9100 */ = []; - var _recursive = - (result: any /** TODO #9100 */, node: any /** TODO #9100 */, - selector: any /** TODO #9100 */, matcher: any /** TODO #9100 */) => { - var cNodes = node.childNodes; - if (cNodes && cNodes.length > 0) { - for (var i = 0; i < cNodes.length; i++) { - var childNode = cNodes[i]; - if (this.elementMatches(childNode, selector, matcher)) { - result.push(childNode); - } - _recursive(result, childNode, selector, matcher); - } + query(selector: any) { throw _notImplemented('query'); } + querySelector(el: any, selector: string): any { return this.querySelectorAll(el, selector)[0]; } + querySelectorAll(el: any, selector: string): any[] { + const res: any[] = []; + const _recursive = (result: any, node: any, selector: any, matcher: any) => { + let cNodes = node.childNodes; + if (cNodes && cNodes.length > 0) { + for (let i = 0; i < cNodes.length; i++) { + const childNode = cNodes[i]; + if (this.elementMatches(childNode, selector, matcher)) { + result.push(childNode); } - }; - var matcher = new SelectorMatcher(); + _recursive(result, childNode, selector, matcher); + } + } + }; + const matcher = new SelectorMatcher(); matcher.addSelectables(CssSelector.parse(selector)); _recursive(res, el, selector, matcher); return res; } - elementMatches( - node: any /** TODO #9100 */, selector: string, - matcher: any /** TODO #9100 */ = null): boolean { + elementMatches(node: any, selector: string, matcher: any = null): boolean { if (this.isElementNode(node) && selector === '*') { return true; } - var result = false; + let result = false; if (selector && selector.charAt(0) == '#') { result = this.getAttribute(node, 'id') == selector.substring(1); } else if (selector) { - var result = false; - if (matcher == null) { + if (!matcher) { matcher = new SelectorMatcher(); matcher.addSelectables(CssSelector.parse(selector)); } - var cssSelector = new CssSelector(); + const cssSelector = new CssSelector(); cssSelector.setElement(this.tagName(node)); if (node.attribs) { - for (var attrName in node.attribs) { + for (const attrName in node.attribs) { cssSelector.addAttribute(attrName, node.attribs[attrName]); } } - var classList = this.classList(node); - for (var i = 0; i < classList.length; i++) { + const classList = this.classList(node); + for (let i = 0; i < classList.length; i++) { cssSelector.addClassName(classList[i]); } - matcher.match( - cssSelector, - function(selector: any /** TODO #9100 */, cb: any /** TODO #9100 */) { result = true; }); + matcher.match(cssSelector, function(selector: any, cb: any) { result = true; }); } return result; } - on(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */) { - var listenersMap: {[k: /*any*/ string]: any} = el._eventListenersMap; - if (isBlank(listenersMap)) { - var listenersMap: {[k: /*any*/ string]: any} = StringMapWrapper.create(); + on(el: any, evt: any, listener: any) { + let listenersMap: {[k: string]: any} = el._eventListenersMap; + if (!listenersMap) { + listenersMap = {}; el._eventListenersMap = listenersMap; } - var listeners = StringMapWrapper.get(listenersMap, evt); - if (isBlank(listeners)) { - listeners = []; - } - listeners.push(listener); - StringMapWrapper.set(listenersMap, evt, listeners); + const listeners = listenersMap[evt] || []; + listenersMap[evt] = [...listeners, listener]; } - onAndCancel( - el: any /** TODO #9100 */, evt: any /** TODO #9100 */, - listener: any /** TODO #9100 */): Function { + onAndCancel(el: any, evt: any, listener: any): Function { this.on(el, evt, listener); - return () => { - ListWrapper.remove(StringMapWrapper.get(el._eventListenersMap, evt), listener); - }; + return () => { ListWrapper.remove((el._eventListenersMap[evt]), listener); }; } - dispatchEvent(el: any /** TODO #9100 */, evt: any /** TODO #9100 */) { - if (isBlank(evt.target)) { + dispatchEvent(el: any, evt: any) { + if (!evt.target) { evt.target = el; } - if (isPresent(el._eventListenersMap)) { - var listeners: any = StringMapWrapper.get(el._eventListenersMap, evt.type); - if (isPresent(listeners)) { - for (var i = 0; i < listeners.length; i++) { + if (el._eventListenersMap) { + const listeners: any = el._eventListenersMap[evt.type]; + if (listeners) { + for (let i = 0; i < listeners.length; i++) { listeners[i](evt); } } } - if (isPresent(el.parent)) { + if (el.parent) { this.dispatchEvent(el.parent, evt); } - if (isPresent(el._window)) { + if (el._window) { this.dispatchEvent(el._window, evt); } } - createMouseEvent(eventType: any /** TODO #9100 */): Event { return this.createEvent(eventType); } + createMouseEvent(eventType: any): Event { return this.createEvent(eventType); } createEvent(eventType: string): Event { - var evt = { + let event = { type: eventType, defaultPrevented: false, - preventDefault: () => { (evt).defaultPrevented = true; } + preventDefault: () => { (event).defaultPrevented = true; } }; - return evt; - } - preventDefault(evt: any /** TODO #9100 */) { evt.returnValue = false; } - isPrevented(evt: any /** TODO #9100 */): boolean { - return isPresent(evt.returnValue) && !evt.returnValue; + return event; } - getInnerHTML(el: any /** TODO #9100 */): string { - return serializer.serialize(this.templateAwareRoot(el)); + preventDefault(event: any) { event.returnValue = false; } + isPrevented(event: any): boolean { return isPresent(event.returnValue) && !event.returnValue; } + getInnerHTML(el: any): string { + return parse5.serialize(this.templateAwareRoot(el), {treeAdapter}); } - getTemplateContent(el: any /** TODO #9100 */): Node { - return null; // no