diff --git a/modules/angular2/angular2.dart b/modules/angular2/angular2.dart index d0c2e10178..e66bfc81b7 100644 --- a/modules/angular2/angular2.dart +++ b/modules/angular2/angular2.dart @@ -12,4 +12,5 @@ export 'package:angular2/profile.dart'; export 'package:angular2/lifecycle_hooks.dart'; export 'package:angular2/src/core/application_tokens.dart' hide APP_COMPONENT_REF_PROMISE, APP_ID_RANDOM_PROVIDER; -export 'package:angular2/src/core/render/dom/dom_tokens.dart'; +export 'package:angular2/src/platform/dom/dom_tokens.dart'; +export 'package:angular2/compiler.dart' show UrlResolver, AppRootUrl; \ No newline at end of file diff --git a/modules/angular2/angular2.ts b/modules/angular2/angular2.ts index 54d0f5f37a..8a7c831161 100644 --- a/modules/angular2/angular2.ts +++ b/modules/angular2/angular2.ts @@ -4,3 +4,4 @@ export * from './profile'; export * from './lifecycle_hooks'; export * from './platform/browser'; export * from './upgrade'; +export {UrlResolver, AppRootUrl} from './compiler'; diff --git a/modules/angular2/compiler.ts b/modules/angular2/compiler.ts index 57856c054b..b7a776c8cc 100644 --- a/modules/angular2/compiler.ts +++ b/modules/angular2/compiler.ts @@ -5,4 +5,5 @@ */ export * from './src/compiler/url_resolver'; export * from './src/compiler/xhr'; -export * from './src/compiler/compiler'; \ No newline at end of file +export * from './src/compiler/compiler'; +export * from './src/compiler/app_root_url'; \ No newline at end of file diff --git a/modules/angular2/core.dart b/modules/angular2/core.dart index 164a4bc129..e7a55cc742 100644 --- a/modules/angular2/core.dart +++ b/modules/angular2/core.dart @@ -9,15 +9,16 @@ export 'package:angular2/src/common/pipes.dart'; export 'package:angular2/src/facade/facade.dart'; export 'package:angular2/src/core/application_ref.dart' hide ApplicationRef_, PlatformRef_; -export 'package:angular2/src/core/services.dart'; export 'package:angular2/src/core/linker.dart'; export 'package:angular2/src/core/zone.dart'; export 'package:angular2/src/core/render.dart'; export 'package:angular2/src/common/directives.dart'; export 'package:angular2/src/common/forms.dart'; -export 'package:angular2/src/core/debug.dart'; +export 'package:angular2/src/core/debug/debug_element.dart' show DebugElement, Scope, inspectElement, asNativeElements; +export 'package:angular2/src/core/testability/testability.dart'; export 'package:angular2/src/core/change_detection.dart'; export 'package:angular2/src/core/platform_directives_and_pipes.dart'; export 'package:angular2/src/core/platform_common_providers.dart'; export 'package:angular2/src/core/application_common_providers.dart'; export 'package:angular2/src/core/reflection/reflection.dart'; +export 'package:angular2/src/core/dom/dom_adapter.dart'; diff --git a/modules/angular2/core.ts b/modules/angular2/core.ts index 93286a4768..11aef8f54a 100644 --- a/modules/angular2/core.ts +++ b/modules/angular2/core.ts @@ -8,7 +8,6 @@ export * from './src/core/util'; export * from './src/core/di'; export * from './src/common/pipes'; export * from './src/facade/facade'; -export * from './src/core/services'; export * from './src/core/linker'; export {platform, createNgZone, PlatformRef, ApplicationRef} from './src/core/application_ref'; export {APP_ID, APP_COMPONENT} from './src/core/application_tokens'; @@ -16,10 +15,17 @@ export * from './src/core/zone'; export * from './src/core/render'; export * from './src/common/directives'; export * from './src/common/forms'; -export * from './src/core/debug'; +export { + DebugElement, + Scope, + inspectElement, + asNativeElements +} from './src/core/debug/debug_element'; +export * from './src/core/testability/testability'; export * from './src/core/change_detection'; export * from './src/core/platform_directives_and_pipes'; export * from './src/core/dev_mode'; export * from './src/core/reflection/reflection'; export * from './src/core/application_common_providers'; export * from './src/core/platform_common_providers'; +export * from './src/core/dom/dom_adapter'; diff --git a/modules/angular2/platform/browser.ts b/modules/angular2/platform/browser.ts index 992d0777d2..7ca4bc4681 100644 --- a/modules/angular2/platform/browser.ts +++ b/modules/angular2/platform/browser.ts @@ -1,4 +1,13 @@ -export {BROWSER_PROVIDERS} from 'angular2/src/platform/browser_common'; +export { + BROWSER_PROVIDERS, + ELEMENT_PROBE_BINDINGS, + ELEMENT_PROBE_PROVIDERS, + inspectNativeElement, + BrowserDomAdapter, + By, + Title, + DOCUMENT +} from 'angular2/src/platform/browser_common'; import {Type, isPresent, CONST_EXPR} from 'angular2/src/facade/lang'; import {Promise} from 'angular2/src/facade/promise'; diff --git a/modules/angular2/platform/browser_static.ts b/modules/angular2/platform/browser_static.ts index 0db94d21a8..bd6784301a 100644 --- a/modules/angular2/platform/browser_static.ts +++ b/modules/angular2/platform/browser_static.ts @@ -1,4 +1,12 @@ -export {BROWSER_PROVIDERS} from 'angular2/src/platform/browser_common'; +export { + BROWSER_PROVIDERS, + ELEMENT_PROBE_BINDINGS, + ELEMENT_PROBE_PROVIDERS, + inspectNativeElement, + BrowserDomAdapter, + By, + Title +} from 'angular2/src/platform/browser_common'; import {Type, isPresent, CONST_EXPR} from 'angular2/src/facade/lang'; import {Promise} from 'angular2/src/facade/promise'; diff --git a/modules/angular2/platform/common_dom.ts b/modules/angular2/platform/common_dom.ts new file mode 100644 index 0000000000..92a18bef8e --- /dev/null +++ b/modules/angular2/platform/common_dom.ts @@ -0,0 +1,7 @@ +/** + * This is a set of classes and objects that can be used both in the browser and on the server. + */ +export {DomRenderer} from 'angular2/src/platform/dom/dom_renderer'; +export {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; +export {SharedStylesHost, DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host'; +export {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events'; \ No newline at end of file diff --git a/modules/angular2/platform/server.dart b/modules/angular2/platform/server.dart new file mode 100644 index 0000000000..61ae1b6809 --- /dev/null +++ b/modules/angular2/platform/server.dart @@ -0,0 +1,2 @@ +// TODO: vsavkin add SERVER_PROVIDERS and SERVER_APP_PROVIDERS +export 'package:angular2/src/platform/server/html_adapter.dart'; diff --git a/modules/angular2/platform/server.ts b/modules/angular2/platform/server.ts new file mode 100644 index 0000000000..9270dfbef1 --- /dev/null +++ b/modules/angular2/platform/server.ts @@ -0,0 +1,2 @@ +// TODO: vsavkin add SERVER_PROVIDERS and SERVER_APP_PROVIDERS +export {Parse5DomAdapter} from 'angular2/src/platform/server/parse5_adapter'; \ No newline at end of file diff --git a/modules/angular2/render.ts b/modules/angular2/render.ts index bef53faf0c..1a6446d565 100644 --- a/modules/angular2/render.ts +++ b/modules/angular2/render.ts @@ -1,7 +1,4 @@ /** - * This file is only used for dart applications and for internal examples - * that compile with both JavaScript and Dart. - * - * JavaScript users should import from angular2/core. + * @deprecated import angular2/render/dom instead */ export * from './src/core/render'; diff --git a/modules/angular2/src/animate/animation.ts b/modules/angular2/src/animate/animation.ts index a9130d6aba..1ed6a2242d 100644 --- a/modules/angular2/src/animate/animation.ts +++ b/modules/angular2/src/animate/animation.ts @@ -6,7 +6,7 @@ import { isPresent } from 'angular2/src/facade/lang'; import {Math} from 'angular2/src/facade/math'; -import {camelCaseToDashCase} from 'angular2/src/core/render/dom/util'; +import {camelCaseToDashCase} from 'angular2/src/platform/dom/util'; import {StringMapWrapper} from 'angular2/src/facade/collection'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; diff --git a/modules/angular2/src/core/application_common_providers.ts b/modules/angular2/src/core/application_common_providers.ts index f766c2ee9d..3498b85d05 100644 --- a/modules/angular2/src/core/application_common_providers.ts +++ b/modules/angular2/src/core/application_common_providers.ts @@ -24,7 +24,7 @@ import {Compiler} from './linker/compiler'; import {Compiler_} from "./linker/compiler"; import {DynamicComponentLoader} from './linker/dynamic_component_loader'; import {DynamicComponentLoader_} from "./linker/dynamic_component_loader"; -import {EventManager} from './render/dom/events/event_manager'; +import {EventManager} from './render'; /** * A default set of providers which should be included in any Angular diff --git a/modules/angular2/src/core/debug.ts b/modules/angular2/src/core/debug.ts deleted file mode 100644 index aca1a83a94..0000000000 --- a/modules/angular2/src/core/debug.ts +++ /dev/null @@ -1,6 +0,0 @@ -export {DebugElement, asNativeElements, By, Scope, inspectElement} from './debug/debug_element'; -export { - inspectNativeElement, - ELEMENT_PROBE_PROVIDERS, - ELEMENT_PROBE_BINDINGS -} from './debug/debug_element_view_listener'; diff --git a/modules/angular2/src/core/debug/debug_element.ts b/modules/angular2/src/core/debug/debug_element.ts index 2710501401..37e7b9c6eb 100644 --- a/modules/angular2/src/core/debug/debug_element.ts +++ b/modules/angular2/src/core/debug/debug_element.ts @@ -1,9 +1,6 @@ import {Type, isPresent, isBlank} from 'angular2/src/facade/lang'; import {ListWrapper, MapWrapper, Predicate} from 'angular2/src/facade/collection'; import {unimplemented} from 'angular2/src/facade/exceptions'; - -import {DOM} from 'angular2/src/core/dom/dom_adapter'; - import {ElementInjector} from 'angular2/src/core/linker/element_injector'; import {AppView, ViewType} from 'angular2/src/core/linker/view'; import {internalView} from 'angular2/src/core/linker/view_ref'; @@ -203,18 +200,3 @@ export class Scope { return scope; } } - -export class By { - static all(): Function { return (debugElement) => true; } - - static css(selector: string): Predicate { - return (debugElement) => { - return isPresent(debugElement.nativeElement) ? - DOM.elementMatches(debugElement.nativeElement, selector) : - false; - }; - } - static directive(type: Type): Predicate { - return (debugElement) => { return debugElement.hasDirective(type); }; - } -} diff --git a/modules/angular2/src/core/di/injector.ts b/modules/angular2/src/core/di/injector.ts index c32977d194..5a41312657 100644 --- a/modules/angular2/src/core/di/injector.ts +++ b/modules/angular2/src/core/di/injector.ts @@ -20,7 +20,6 @@ import {FunctionWrapper, Type, isPresent, isBlank, CONST_EXPR} from 'angular2/sr import {Key} from './key'; import {SelfMetadata, HostMetadata, SkipSelfMetadata} from './metadata'; - // Threshold for the dynamic version const _MAX_CONSTRUCTION_COUNTER = 10; diff --git a/modules/angular2/src/core/dom/browser_adapter.dart b/modules/angular2/src/core/dom/browser_adapter.dart index 5cc33b98bb..d7de254ffa 100644 --- a/modules/angular2/src/core/dom/browser_adapter.dart +++ b/modules/angular2/src/core/dom/browser_adapter.dart @@ -1,520 +1,4 @@ -library angular.core.facade.dom; +@Deprecated('import this library from "package:angular2/platform/browser_static.dart"') +library angular2.browser_adapter_reexport; -import 'dart:html'; -import 'dom_adapter.dart' show setRootDomAdapter; -import 'generic_browser_adapter.dart' show GenericBrowserDomAdapter; -import 'package:angular2/src/facade/browser.dart'; -import 'dart:js' as js; - -// WARNING: Do not expose outside this class. Parsing HTML using this -// sanitizer is a security risk. -class _IdentitySanitizer implements NodeTreeSanitizer { - void sanitizeTree(Node node) {} -} - -final _identitySanitizer = new _IdentitySanitizer(); - -final _keyCodeToKeyMap = const { - 8: 'Backspace', - 9: 'Tab', - 12: 'Clear', - 13: 'Enter', - 16: 'Shift', - 17: 'Control', - 18: 'Alt', - 19: 'Pause', - 20: 'CapsLock', - 27: 'Escape', - 32: ' ', - 33: 'PageUp', - 34: 'PageDown', - 35: 'End', - 36: 'Home', - 37: 'ArrowLeft', - 38: 'ArrowUp', - 39: 'ArrowRight', - 40: 'ArrowDown', - 45: 'Insert', - 46: 'Delete', - 65: 'a', - 66: 'b', - 67: 'c', - 68: 'd', - 69: 'e', - 70: 'f', - 71: 'g', - 72: 'h', - 73: 'i', - 74: 'j', - 75: 'k', - 76: 'l', - 77: 'm', - 78: 'n', - 79: 'o', - 80: 'p', - 81: 'q', - 82: 'r', - 83: 's', - 84: 't', - 85: 'u', - 86: 'v', - 87: 'w', - 88: 'x', - 89: 'y', - 90: 'z', - 91: 'OS', - 93: 'ContextMenu', - 96: '0', - 97: '1', - 98: '2', - 99: '3', - 100: '4', - 101: '5', - 102: '6', - 103: '7', - 104: '8', - 105: '9', - 106: '*', - 107: '+', - 109: '-', - 110: '.', - 111: '/', - 112: 'F1', - 113: 'F2', - 114: 'F3', - 115: 'F4', - 116: 'F5', - 117: 'F6', - 118: 'F7', - 119: 'F8', - 120: 'F9', - 121: 'F10', - 122: 'F11', - 123: 'F12', - 144: 'NumLock', - 145: 'ScrollLock' -}; - -final bool _supportsTemplateElement = () { - try { - return new TemplateElement().content != null; - } catch (_) { - return false; - } -}(); - -class BrowserDomAdapter extends GenericBrowserDomAdapter { - js.JsFunction _setProperty; - js.JsFunction _getProperty; - js.JsFunction _hasProperty; - Map _hasPropertyCache; - BrowserDomAdapter() { - _hasPropertyCache = new Map(); - _setProperty = js.context.callMethod( - 'eval', ['(function(el, prop, value) { el[prop] = value; })']); - _getProperty = js.context - .callMethod('eval', ['(function(el, prop) { return el[prop]; })']); - _hasProperty = js.context - .callMethod('eval', ['(function(el, prop) { return prop in el; })']); - } - static void makeCurrent() { - setRootDomAdapter(new BrowserDomAdapter()); - } - - bool hasProperty(Element element, String name) { - // Always return true as the serverside version html_adapter.dart does so. - // TODO: change this once we have schema support. - // Note: This nees to kept in sync with html_adapter.dart! - return true; - } - - void setProperty(Element element, String name, Object value) { - var cacheKey = "${element.tagName}.${name}"; - var hasProperty = this._hasPropertyCache[cacheKey]; - if (hasProperty == null) { - hasProperty = this._hasProperty.apply([element, name]); - this._hasPropertyCache[cacheKey] = hasProperty; - } - if (hasProperty) { - _setProperty.apply([element, name, value]); - } - } - - getProperty(Element element, String name) => - _getProperty.apply([element, name]); - - invoke(Element element, String methodName, List args) => - this.getProperty(element, methodName).apply(args, thisArg: element); - - // TODO(tbosch): move this into a separate environment class once we have it - logError(error) { - window.console.error(error); - } - - log(error) { - window.console.log(error); - } - - logGroup(error) { - window.console.group(error); - this.logError(error); - } - - logGroupEnd() { - window.console.groupEnd(); - } - - @override - Map get attrToPropMap => const { - 'class': 'className', - 'innerHtml': 'innerHTML', - 'readonly': 'readOnly', - 'tabindex': 'tabIndex', - }; - - Element query(String selector) => document.querySelector(selector); - - Element querySelector(el, String selector) => el.querySelector(selector); - - ElementList querySelectorAll(el, String selector) => - el.querySelectorAll(selector); - - void on(EventTarget element, String event, callback(arg)) { - // due to https://code.google.com/p/dart/issues/detail?id=17406 - // addEventListener misses zones so we use element.on. - element.on[event].listen(callback); - } - - Function onAndCancel(EventTarget element, String event, callback(arg)) { - // due to https://code.google.com/p/dart/issues/detail?id=17406 - // addEventListener misses zones so we use element.on. - var subscription = element.on[event].listen(callback); - return subscription.cancel; - } - - void dispatchEvent(EventTarget el, Event evt) { - el.dispatchEvent(evt); - } - - MouseEvent createMouseEvent(String eventType) => - new MouseEvent(eventType, canBubble: true); - Event createEvent(String eventType) => new Event(eventType, canBubble: true); - void preventDefault(Event evt) { - evt.preventDefault(); - } - - bool isPrevented(Event evt) { - return evt.defaultPrevented; - } - - String getInnerHTML(Element el) => el.innerHtml; - String getOuterHTML(Element el) => el.outerHtml; - void setInnerHTML(Element el, String value) { - el.innerHtml = value; - } - - String nodeName(Node el) => el.nodeName; - String nodeValue(Node el) => el.nodeValue; - String type(InputElement el) => el.type; - Node content(TemplateElement el) => - _supportsTemplateElement ? el.content : el; - Node firstChild(el) => el.firstChild; - Node nextSibling(Node el) => el.nextNode; - Element parentElement(Node el) => el.parent; - List childNodes(Node el) => el.childNodes; - List childNodesAsList(Node el) => childNodes(el).toList(); - void clearNodes(Node el) { - el.nodes = const []; - } - - void appendChild(Node el, Node node) { - el.append(node); - } - - void removeChild(el, Node node) { - node.remove(); - } - - void replaceChild(Node el, Node newNode, Node oldNode) { - oldNode.replaceWith(newNode); - } - - ChildNode remove(ChildNode el) { - return el..remove(); - } - - void insertBefore(Node el, node) { - el.parentNode.insertBefore(node, el); - } - - void insertAllBefore(Node el, Iterable nodes) { - el.parentNode.insertAllBefore(nodes, el); - } - - void insertAfter(Node el, Node node) { - el.parentNode.insertBefore(node, el.nextNode); - } - - String getText(Node el) => el.text; - void setText(Node el, String value) { - el.text = value; - } - - String getValue(el) => el.value; - void setValue(el, String value) { - el.value = value; - } - - bool getChecked(InputElement el) => el.checked; - void setChecked(InputElement el, bool isChecked) { - el.checked = isChecked; - } - - Comment createComment(String text) { - return new Comment(text); - } - - TemplateElement createTemplate(String html) { - var t = new TemplateElement(); - // We do not sanitize because templates are part of the application code - // not user code. - t.setInnerHtml(html, treeSanitizer: _identitySanitizer); - return t; - } - - Element createElement(String tagName, [HtmlDocument doc = null]) { - if (doc == null) doc = document; - return doc.createElement(tagName); - } - - Element createElementNS(String ns, String tagName, [HtmlDocument doc = null]) { - if (doc == null) doc = document; - return doc.createElementNS(ns, tagName); - } - - Text createTextNode(String text, [HtmlDocument doc = null]) { - return new Text(text); - } - - createScriptTag(String attrName, String attrValue, - [HtmlDocument doc = null]) { - if (doc == null) doc = document; - var el = doc.createElement('SCRIPT'); - el.setAttribute(attrName, attrValue); - return el; - } - - StyleElement createStyleElement(String css, [HtmlDocument doc = null]) { - if (doc == null) doc = document; - var el = doc.createElement('STYLE'); - el.text = css; - return el; - } - - ShadowRoot createShadowRoot(Element el) => el.createShadowRoot(); - ShadowRoot getShadowRoot(Element el) => el.shadowRoot; - Element getHost(Element el) => (el as ShadowRoot).host; - clone(Node node) => node.clone(true); - List getElementsByClassName(Element element, String name) => - element.getElementsByClassName(name); - List getElementsByTagName(Element element, String name) => - element.querySelectorAll(name); - List classList(Element element) => element.classes.toList(); - void addClass(Element element, String classname) { - element.classes.add(classname); - } - - void removeClass(Element element, String classname) { - element.classes.remove(classname); - } - - bool hasClass(Element element, String classname) => - element.classes.contains(classname); - - void setStyle(Element element, String stylename, String stylevalue) { - element.style.setProperty(stylename, stylevalue); - } - - void removeStyle(Element element, String stylename) { - element.style.removeProperty(stylename); - } - - String getStyle(Element element, String stylename) { - return element.style.getPropertyValue(stylename); - } - - String tagName(Element element) => element.tagName; - - Map attributeMap(Element element) { - var result = {}; - result.addAll(element.attributes); - // TODO(tbosch): element.getNamespacedAttributes() somehow does not return the attribute value - var xlinkHref = element.getAttributeNS('http://www.w3.org/1999/xlink', 'href'); - if (xlinkHref != null) { - result['xlink:href'] = xlinkHref; - } - return result; - } - - bool hasAttribute(Element element, String attribute) => - element.attributes.containsKey(attribute); - - String getAttribute(Element element, String attribute) => - element.getAttribute(attribute); - - void setAttribute(Element element, String name, String value) { - element.setAttribute(name, value); - } - - void setAttributeNS(Element element, String ns, String name, String value) { - element.setAttributeNS(ns, name, value); - } - - void removeAttribute(Element element, String name) { - //there is no removeAttribute method as of now in Dart: - //https://code.google.com/p/dart/issues/detail?id=19934 - element.attributes.remove(name); - } - - Node templateAwareRoot(Element el) => el is TemplateElement ? el.content : el; - - HtmlDocument createHtmlDocument() => - document.implementation.createHtmlDocument('fakeTitle'); - - HtmlDocument defaultDoc() => document; - Rectangle getBoundingClientRect(el) => el.getBoundingClientRect(); - String getTitle() => document.title; - void setTitle(String newTitle) { - document.title = newTitle; - } - - bool elementMatches(n, String selector) => - n is Element && n.matches(selector); - bool isTemplateElement(Element el) => el is TemplateElement; - bool isTextNode(Node node) => node.nodeType == Node.TEXT_NODE; - bool isCommentNode(Node node) => node.nodeType == Node.COMMENT_NODE; - bool isElementNode(Node node) => node.nodeType == Node.ELEMENT_NODE; - bool hasShadowRoot(Node node) { - return node is Element && node.shadowRoot != null; - } - - bool isShadowRoot(Node node) { - return node is ShadowRoot; - } - - Node importIntoDoc(Node node) { - return document.importNode(node, true); - } - - Node adoptNode(Node node) { - return document.adoptNode(node); - } - - String getHref(AnchorElement element) { - return element.href; - } - - String getEventKey(KeyboardEvent event) { - int keyCode = event.keyCode; - return _keyCodeToKeyMap.containsKey(keyCode) - ? _keyCodeToKeyMap[keyCode] - : 'Unidentified'; - } - - getGlobalEventTarget(String target) { - if (target == "window") { - return window; - } else if (target == "document") { - return document; - } else if (target == "body") { - return document.body; - } - } - - getHistory() { - return window.history; - } - - getLocation() { - return window.location; - } - - String getBaseHref() { - var href = getBaseElementHref(); - if (href == null) { - return null; - } - return _relativePath(href); - } - - resetBaseElement() { - baseElement = null; - } - - String getUserAgent() { - return window.navigator.userAgent; - } - - void setData(Element element, String name, String value) { - element.dataset[name] = value; - } - - String getData(Element element, String name) { - return element.dataset[name]; - } - - getComputedStyle(elem) => elem.getComputedStyle(); - - // TODO(tbosch): move this into a separate environment class once we have it - setGlobalVar(String path, value) { - var parts = path.split('.'); - var obj = js.context; - while (parts.length > 1) { - var name = parts.removeAt(0); - if (obj.hasProperty(name)) { - obj = obj[name]; - } else { - obj = obj[name] = new js.JsObject(js.context['Object']); - } - } - obj[parts.removeAt(0)] = value; - } - - requestAnimationFrame(callback) { - return window.requestAnimationFrame(callback); - } - - cancelAnimationFrame(id) { - window.cancelAnimationFrame(id); - } - - num performanceNow() { - return window.performance.now(); - } - - parse(s) { - throw 'not implemented'; - } -} - -var baseElement = null; -String getBaseElementHref() { - if (baseElement == null) { - baseElement = document.querySelector('base'); - if (baseElement == null) { - return null; - } - } - return baseElement.getAttribute('href'); -} - -// based on urlUtils.js in AngularJS 1 -AnchorElement _urlParsingNode = null; -String _relativePath(String url) { - if (_urlParsingNode == null) { - _urlParsingNode = new AnchorElement(); - } - _urlParsingNode.href = url; - var pathname = _urlParsingNode.pathname; - return (pathname[0] == '/') ? pathname : '/${pathname}'; -} +export 'package:angular2/src/platform/browser/browser_adapter.dart'; \ No newline at end of file diff --git a/modules/angular2/src/core/dom/dom_adapter.ts b/modules/angular2/src/core/dom/dom_adapter.ts index 6bbcbee887..96e154e6d8 100644 --- a/modules/angular2/src/core/dom/dom_adapter.ts +++ b/modules/angular2/src/core/dom/dom_adapter.ts @@ -1,6 +1,6 @@ import {isBlank, Type} from 'angular2/src/facade/lang'; -export var DOM: DomAdapter; +export var DOM: DomAdapter = null; export function setRootDomAdapter(adapter: DomAdapter) { if (isBlank(DOM)) { diff --git a/modules/angular2/src/core/linker.ts b/modules/angular2/src/core/linker.ts index 19b6e6d431..b43b69776f 100644 --- a/modules/angular2/src/core/linker.ts +++ b/modules/angular2/src/core/linker.ts @@ -19,4 +19,4 @@ export {ElementRef} from './linker/element_ref'; export {TemplateRef} from './linker/template_ref'; export {ViewRef, HostViewRef, ProtoViewRef} from './linker/view_ref'; export {ViewContainerRef} from './linker/view_container_ref'; -export {ComponentRef} from './linker/dynamic_component_loader'; +export {ComponentRef} from './linker/dynamic_component_loader'; \ No newline at end of file diff --git a/modules/angular2/src/core/linker/proto_view_factory.ts b/modules/angular2/src/core/linker/proto_view_factory.ts index 67a41fd3f8..30216a44b4 100644 --- a/modules/angular2/src/core/linker/proto_view_factory.ts +++ b/modules/angular2/src/core/linker/proto_view_factory.ts @@ -30,7 +30,7 @@ import { NgContentCmd } from './template_commands'; -import {Renderer} from 'angular2/render'; +import {Renderer} from 'angular2/src/core/render/api'; import {APP_ID} from 'angular2/src/core/application_tokens'; diff --git a/modules/angular2/src/core/linker/template_commands.ts b/modules/angular2/src/core/linker/template_commands.ts index fff487c881..20d32cbfb4 100644 --- a/modules/angular2/src/core/linker/template_commands.ts +++ b/modules/angular2/src/core/linker/template_commands.ts @@ -8,7 +8,7 @@ import { RenderNgContentCmd, RenderBeginComponentCmd, RenderEmbeddedTemplateCmd -} from 'angular2/src/core/render/render'; +} from 'angular2/src/core/render/api'; import {ViewEncapsulation} from 'angular2/src/core/metadata'; // Export ViewEncapsulation so that compiled templates only need to depend // on template_commands. diff --git a/modules/angular2/src/core/linker/view.ts b/modules/angular2/src/core/linker/view.ts index 27e42ea6bd..20e10fe73b 100644 --- a/modules/angular2/src/core/linker/view.ts +++ b/modules/angular2/src/core/linker/view.ts @@ -28,7 +28,7 @@ import {RenderEventDispatcher} from 'angular2/src/core/render/api'; import {ViewRef, ProtoViewRef, internalView} from './view_ref'; import {ElementRef} from './element_ref'; import {ProtoPipes} from 'angular2/src/core/pipes/pipes'; -import {camelCaseToDashCase} from 'angular2/src/core/render/dom/util'; +import {camelCaseToDashCase} from 'angular2/src/core/render/util'; import {TemplateCmd} from './template_commands'; import {ViewRef_, ProtoViewRef_} from "./view_ref"; diff --git a/modules/angular2/src/core/render.ts b/modules/angular2/src/core/render.ts index ef3f20a69a..f58c803510 100644 --- a/modules/angular2/src/core/render.ts +++ b/modules/angular2/src/core/render.ts @@ -7,7 +7,6 @@ export { RenderProtoViewRef, RenderFragmentRef, RenderViewWithFragments, - DOCUMENT, RenderTemplateCmd, RenderCommandVisitor, RenderTextCmd, @@ -15,5 +14,8 @@ export { RenderBeginElementCmd, RenderBeginComponentCmd, RenderEmbeddedTemplateCmd, - RenderBeginCmd -} from './render/render'; + RenderBeginCmd, + RenderComponentTemplate +} from './render/api'; + +export {EventManager, EventManagerPlugin, EVENT_MANAGER_PLUGINS} from './render/event_manager'; \ No newline at end of file diff --git a/modules/angular2/src/core/render/dom/events/event_manager.ts b/modules/angular2/src/core/render/event_manager.ts similarity index 66% rename from modules/angular2/src/core/render/dom/events/event_manager.ts rename to modules/angular2/src/core/render/event_manager.ts index 5cb7f7a351..477c89079a 100644 --- a/modules/angular2/src/core/render/dom/events/event_manager.ts +++ b/modules/angular2/src/core/render/event_manager.ts @@ -1,9 +1,8 @@ import {CONST_EXPR} from 'angular2/src/facade/lang'; import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; -import {ListWrapper} from 'angular2/src/facade/collection'; -import {DOM} from 'angular2/src/core/dom/dom_adapter'; -import {NgZone} from 'angular2/src/core/zone/ng_zone'; import {Injectable, Inject, OpaqueToken} from 'angular2/src/core/di'; +import {NgZone} from 'angular2/src/core/zone/ng_zone'; +import {ListWrapper} from 'angular2/src/facade/collection'; export const EVENT_MANAGER_PLUGINS: OpaqueToken = CONST_EXPR(new OpaqueToken("EventManagerPlugins")); @@ -55,27 +54,4 @@ export class EventManagerPlugin { addGlobalEventListener(element: string, eventName: string, handler: Function): Function { throw "not implemented"; } -} - -@Injectable() -export class DomEventsPlugin extends EventManagerPlugin { - manager: EventManager; - - // This plugin should come last in the list of plugins, because it accepts all - // events. - supports(eventName: string): boolean { return true; } - - addEventListener(element: HTMLElement, eventName: string, handler: Function) { - var zone = this.manager.getZone(); - var outsideHandler = (event) => zone.run(() => handler(event)); - this.manager.getZone().runOutsideAngular(() => { DOM.on(element, eventName, outsideHandler); }); - } - - addGlobalEventListener(target: string, eventName: string, handler: Function): Function { - var element = DOM.getGlobalEventTarget(target); - var zone = this.manager.getZone(); - var outsideHandler = (event) => zone.run(() => handler(event)); - return this.manager.getZone().runOutsideAngular( - () => { return DOM.onAndCancel(element, eventName, outsideHandler); }); - } -} +} \ No newline at end of file diff --git a/modules/angular2/src/core/render/render.ts b/modules/angular2/src/core/render/render.ts deleted file mode 100644 index 9b20996cea..0000000000 --- a/modules/angular2/src/core/render/render.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @module - * @description - * This module provides advanced support for extending dom strategy. - */ - -export * from './dom/shared_styles_host'; -export * from './dom/dom_renderer'; -export * from './dom/dom_tokens'; -export * from './api'; diff --git a/modules/angular2/src/core/render/dom/util.ts b/modules/angular2/src/core/render/util.ts similarity index 100% rename from modules/angular2/src/core/render/dom/util.ts rename to modules/angular2/src/core/render/util.ts diff --git a/modules/angular2/src/core/services.ts b/modules/angular2/src/core/services.ts deleted file mode 100644 index ab85513b48..0000000000 --- a/modules/angular2/src/core/services.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Public API for Services -export {AppRootUrl} from 'angular2/src/compiler/app_root_url'; -export {UrlResolver} from 'angular2/src/compiler/url_resolver'; -export {Title} from 'angular2/src/core/services/title'; diff --git a/modules/angular2/src/core/testability/testability.ts b/modules/angular2/src/core/testability/testability.ts index 8d36b8e505..741cffb8e4 100644 --- a/modules/angular2/src/core/testability/testability.ts +++ b/modules/angular2/src/core/testability/testability.ts @@ -1,5 +1,4 @@ import {Injectable} from 'angular2/src/core/di'; -import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {Map, MapWrapper, ListWrapper} from 'angular2/src/facade/collection'; import {CONST, CONST_EXPR} from 'angular2/src/facade/lang'; import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; @@ -94,39 +93,38 @@ export class TestabilityRegistry { /** @internal */ _applications = new Map(); - constructor() { testabilityGetter.addToWindow(this); } + constructor() { _testabilityGetter.addToWindow(this); } registerApplication(token: any, testability: Testability) { this._applications.set(token, testability); } + getTestability(elem: any): Testability { return this._applications.get(elem); } + getAllTestabilities(): Testability[] { return MapWrapper.values(this._applications); } findTestabilityInTree(elem: Node, findInAncestors: boolean = true): Testability { - if (elem == null) { - return null; - } - if (this._applications.has(elem)) { - return this._applications.get(elem); - } else if (!findInAncestors) { - return null; - } - if (DOM.isShadowRoot(elem)) { - return this.findTestabilityInTree(DOM.getHost(elem)); - } - return this.findTestabilityInTree(DOM.parentElement(elem)); + return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors); } } -export interface GetTestability { addToWindow(registry: TestabilityRegistry): void; } +export interface GetTestability { + addToWindow(registry: TestabilityRegistry): void; + findTestabilityInTree(registry: TestabilityRegistry, elem: any, + findInAncestors: boolean): Testability; +} @CONST() -class NoopGetTestability implements GetTestability { +class _NoopGetTestability implements GetTestability { addToWindow(registry: TestabilityRegistry): void {} + findTestabilityInTree(registry: TestabilityRegistry, elem: any, + findInAncestors: boolean): Testability { + return null; + } } export function setTestabilityGetter(getter: GetTestability): void { - testabilityGetter = getter; + _testabilityGetter = getter; } -var testabilityGetter: GetTestability = CONST_EXPR(new NoopGetTestability()); +var _testabilityGetter: GetTestability = CONST_EXPR(new _NoopGetTestability()); diff --git a/modules/angular2/src/platform/browser/browser_adapter.dart b/modules/angular2/src/platform/browser/browser_adapter.dart new file mode 100644 index 0000000000..ce98e774b1 --- /dev/null +++ b/modules/angular2/src/platform/browser/browser_adapter.dart @@ -0,0 +1,520 @@ +library angular.core.facade.dom; + +import 'dart:html'; +import 'package:angular2/core.dart' show setRootDomAdapter; +import 'generic_browser_adapter.dart' show GenericBrowserDomAdapter; +import 'package:angular2/src/facade/browser.dart'; +import 'dart:js' as js; + +// WARNING: Do not expose outside this class. Parsing HTML using this +// sanitizer is a security risk. +class _IdentitySanitizer implements NodeTreeSanitizer { + void sanitizeTree(Node node) {} +} + +final _identitySanitizer = new _IdentitySanitizer(); + +final _keyCodeToKeyMap = const { + 8: 'Backspace', + 9: 'Tab', + 12: 'Clear', + 13: 'Enter', + 16: 'Shift', + 17: 'Control', + 18: 'Alt', + 19: 'Pause', + 20: 'CapsLock', + 27: 'Escape', + 32: ' ', + 33: 'PageUp', + 34: 'PageDown', + 35: 'End', + 36: 'Home', + 37: 'ArrowLeft', + 38: 'ArrowUp', + 39: 'ArrowRight', + 40: 'ArrowDown', + 45: 'Insert', + 46: 'Delete', + 65: 'a', + 66: 'b', + 67: 'c', + 68: 'd', + 69: 'e', + 70: 'f', + 71: 'g', + 72: 'h', + 73: 'i', + 74: 'j', + 75: 'k', + 76: 'l', + 77: 'm', + 78: 'n', + 79: 'o', + 80: 'p', + 81: 'q', + 82: 'r', + 83: 's', + 84: 't', + 85: 'u', + 86: 'v', + 87: 'w', + 88: 'x', + 89: 'y', + 90: 'z', + 91: 'OS', + 93: 'ContextMenu', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9', + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111: '/', + 112: 'F1', + 113: 'F2', + 114: 'F3', + 115: 'F4', + 116: 'F5', + 117: 'F6', + 118: 'F7', + 119: 'F8', + 120: 'F9', + 121: 'F10', + 122: 'F11', + 123: 'F12', + 144: 'NumLock', + 145: 'ScrollLock' +}; + +final bool _supportsTemplateElement = () { + try { + return new TemplateElement().content != null; + } catch (_) { + return false; + } +}(); + +class BrowserDomAdapter extends GenericBrowserDomAdapter { + js.JsFunction _setProperty; + js.JsFunction _getProperty; + js.JsFunction _hasProperty; + Map _hasPropertyCache; + BrowserDomAdapter() { + _hasPropertyCache = new Map(); + _setProperty = js.context.callMethod( + 'eval', ['(function(el, prop, value) { el[prop] = value; })']); + _getProperty = js.context + .callMethod('eval', ['(function(el, prop) { return el[prop]; })']); + _hasProperty = js.context + .callMethod('eval', ['(function(el, prop) { return prop in el; })']); + } + static void makeCurrent() { + setRootDomAdapter(new BrowserDomAdapter()); + } + + bool hasProperty(Element element, String name) { + // Always return true as the serverside version html_adapter.dart does so. + // TODO: change this once we have schema support. + // Note: This nees to kept in sync with html_adapter.dart! + return true; + } + + void setProperty(Element element, String name, Object value) { + var cacheKey = "${element.tagName}.${name}"; + var hasProperty = this._hasPropertyCache[cacheKey]; + if (hasProperty == null) { + hasProperty = this._hasProperty.apply([element, name]); + this._hasPropertyCache[cacheKey] = hasProperty; + } + if (hasProperty) { + _setProperty.apply([element, name, value]); + } + } + + getProperty(Element element, String name) => + _getProperty.apply([element, name]); + + invoke(Element element, String methodName, List args) => + this.getProperty(element, methodName).apply(args, thisArg: element); + + // TODO(tbosch): move this into a separate environment class once we have it + logError(error) { + window.console.error(error); + } + + log(error) { + window.console.log(error); + } + + logGroup(error) { + window.console.group(error); + this.logError(error); + } + + logGroupEnd() { + window.console.groupEnd(); + } + + @override + Map get attrToPropMap => const { + 'class': 'className', + 'innerHtml': 'innerHTML', + 'readonly': 'readOnly', + 'tabindex': 'tabIndex', + }; + + Element query(String selector) => document.querySelector(selector); + + Element querySelector(el, String selector) => el.querySelector(selector); + + ElementList querySelectorAll(el, String selector) => + el.querySelectorAll(selector); + + void on(EventTarget element, String event, callback(arg)) { + // due to https://code.google.com/p/dart/issues/detail?id=17406 + // addEventListener misses zones so we use element.on. + element.on[event].listen(callback); + } + + Function onAndCancel(EventTarget element, String event, callback(arg)) { + // due to https://code.google.com/p/dart/issues/detail?id=17406 + // addEventListener misses zones so we use element.on. + var subscription = element.on[event].listen(callback); + return subscription.cancel; + } + + void dispatchEvent(EventTarget el, Event evt) { + el.dispatchEvent(evt); + } + + MouseEvent createMouseEvent(String eventType) => + new MouseEvent(eventType, canBubble: true); + Event createEvent(String eventType) => new Event(eventType, canBubble: true); + void preventDefault(Event evt) { + evt.preventDefault(); + } + + bool isPrevented(Event evt) { + return evt.defaultPrevented; + } + + String getInnerHTML(Element el) => el.innerHtml; + String getOuterHTML(Element el) => el.outerHtml; + void setInnerHTML(Element el, String value) { + el.innerHtml = value; + } + + String nodeName(Node el) => el.nodeName; + String nodeValue(Node el) => el.nodeValue; + String type(InputElement el) => el.type; + Node content(TemplateElement el) => + _supportsTemplateElement ? el.content : el; + Node firstChild(el) => el.firstChild; + Node nextSibling(Node el) => el.nextNode; + Element parentElement(Node el) => el.parent; + List childNodes(Node el) => el.childNodes; + List childNodesAsList(Node el) => childNodes(el).toList(); + void clearNodes(Node el) { + el.nodes = const []; + } + + void appendChild(Node el, Node node) { + el.append(node); + } + + void removeChild(el, Node node) { + node.remove(); + } + + void replaceChild(Node el, Node newNode, Node oldNode) { + oldNode.replaceWith(newNode); + } + + ChildNode remove(ChildNode el) { + return el..remove(); + } + + void insertBefore(Node el, node) { + el.parentNode.insertBefore(node, el); + } + + void insertAllBefore(Node el, Iterable nodes) { + el.parentNode.insertAllBefore(nodes, el); + } + + void insertAfter(Node el, Node node) { + el.parentNode.insertBefore(node, el.nextNode); + } + + String getText(Node el) => el.text; + void setText(Node el, String value) { + el.text = value; + } + + String getValue(el) => el.value; + void setValue(el, String value) { + el.value = value; + } + + bool getChecked(InputElement el) => el.checked; + void setChecked(InputElement el, bool isChecked) { + el.checked = isChecked; + } + + Comment createComment(String text) { + return new Comment(text); + } + + TemplateElement createTemplate(String html) { + var t = new TemplateElement(); + // We do not sanitize because templates are part of the application code + // not user code. + t.setInnerHtml(html, treeSanitizer: _identitySanitizer); + return t; + } + + Element createElement(String tagName, [HtmlDocument doc = null]) { + if (doc == null) doc = document; + return doc.createElement(tagName); + } + + Element createElementNS(String ns, String tagName, [HtmlDocument doc = null]) { + if (doc == null) doc = document; + return doc.createElementNS(ns, tagName); + } + + Text createTextNode(String text, [HtmlDocument doc = null]) { + return new Text(text); + } + + createScriptTag(String attrName, String attrValue, + [HtmlDocument doc = null]) { + if (doc == null) doc = document; + var el = doc.createElement('SCRIPT'); + el.setAttribute(attrName, attrValue); + return el; + } + + StyleElement createStyleElement(String css, [HtmlDocument doc = null]) { + if (doc == null) doc = document; + var el = doc.createElement('STYLE'); + el.text = css; + return el; + } + + ShadowRoot createShadowRoot(Element el) => el.createShadowRoot(); + ShadowRoot getShadowRoot(Element el) => el.shadowRoot; + Element getHost(Element el) => (el as ShadowRoot).host; + clone(Node node) => node.clone(true); + List getElementsByClassName(Element element, String name) => + element.getElementsByClassName(name); + List getElementsByTagName(Element element, String name) => + element.querySelectorAll(name); + List classList(Element element) => element.classes.toList(); + void addClass(Element element, String classname) { + element.classes.add(classname); + } + + void removeClass(Element element, String classname) { + element.classes.remove(classname); + } + + bool hasClass(Element element, String classname) => + element.classes.contains(classname); + + void setStyle(Element element, String stylename, String stylevalue) { + element.style.setProperty(stylename, stylevalue); + } + + void removeStyle(Element element, String stylename) { + element.style.removeProperty(stylename); + } + + String getStyle(Element element, String stylename) { + return element.style.getPropertyValue(stylename); + } + + String tagName(Element element) => element.tagName; + + Map attributeMap(Element element) { + var result = {}; + result.addAll(element.attributes); + // TODO(tbosch): element.getNamespacedAttributes() somehow does not return the attribute value + var xlinkHref = element.getAttributeNS('http://www.w3.org/1999/xlink', 'href'); + if (xlinkHref != null) { + result['xlink:href'] = xlinkHref; + } + return result; + } + + bool hasAttribute(Element element, String attribute) => + element.attributes.containsKey(attribute); + + String getAttribute(Element element, String attribute) => + element.getAttribute(attribute); + + void setAttribute(Element element, String name, String value) { + element.setAttribute(name, value); + } + + void setAttributeNS(Element element, String ns, String name, String value) { + element.setAttributeNS(ns, name, value); + } + + void removeAttribute(Element element, String name) { + //there is no removeAttribute method as of now in Dart: + //https://code.google.com/p/dart/issues/detail?id=19934 + element.attributes.remove(name); + } + + Node templateAwareRoot(Element el) => el is TemplateElement ? el.content : el; + + HtmlDocument createHtmlDocument() => + document.implementation.createHtmlDocument('fakeTitle'); + + HtmlDocument defaultDoc() => document; + Rectangle getBoundingClientRect(el) => el.getBoundingClientRect(); + String getTitle() => document.title; + void setTitle(String newTitle) { + document.title = newTitle; + } + + bool elementMatches(n, String selector) => + n is Element && n.matches(selector); + bool isTemplateElement(Element el) => el is TemplateElement; + bool isTextNode(Node node) => node.nodeType == Node.TEXT_NODE; + bool isCommentNode(Node node) => node.nodeType == Node.COMMENT_NODE; + bool isElementNode(Node node) => node.nodeType == Node.ELEMENT_NODE; + bool hasShadowRoot(Node node) { + return node is Element && node.shadowRoot != null; + } + + bool isShadowRoot(Node node) { + return node is ShadowRoot; + } + + Node importIntoDoc(Node node) { + return document.importNode(node, true); + } + + Node adoptNode(Node node) { + return document.adoptNode(node); + } + + String getHref(AnchorElement element) { + return element.href; + } + + String getEventKey(KeyboardEvent event) { + int keyCode = event.keyCode; + return _keyCodeToKeyMap.containsKey(keyCode) + ? _keyCodeToKeyMap[keyCode] + : 'Unidentified'; + } + + getGlobalEventTarget(String target) { + if (target == "window") { + return window; + } else if (target == "document") { + return document; + } else if (target == "body") { + return document.body; + } + } + + getHistory() { + return window.history; + } + + getLocation() { + return window.location; + } + + String getBaseHref() { + var href = getBaseElementHref(); + if (href == null) { + return null; + } + return _relativePath(href); + } + + resetBaseElement() { + baseElement = null; + } + + String getUserAgent() { + return window.navigator.userAgent; + } + + void setData(Element element, String name, String value) { + element.dataset[name] = value; + } + + String getData(Element element, String name) { + return element.dataset[name]; + } + + getComputedStyle(elem) => elem.getComputedStyle(); + + // TODO(tbosch): move this into a separate environment class once we have it + setGlobalVar(String path, value) { + var parts = path.split('.'); + var obj = js.context; + while (parts.length > 1) { + var name = parts.removeAt(0); + if (obj.hasProperty(name)) { + obj = obj[name]; + } else { + obj = obj[name] = new js.JsObject(js.context['Object']); + } + } + obj[parts.removeAt(0)] = value; + } + + requestAnimationFrame(callback) { + return window.requestAnimationFrame(callback); + } + + cancelAnimationFrame(id) { + window.cancelAnimationFrame(id); + } + + num performanceNow() { + return window.performance.now(); + } + + parse(s) { + throw 'not implemented'; + } +} + +var baseElement = null; +String getBaseElementHref() { + if (baseElement == null) { + baseElement = document.querySelector('base'); + if (baseElement == null) { + return null; + } + } + return baseElement.getAttribute('href'); +} + +// based on urlUtils.js in AngularJS 1 +AnchorElement _urlParsingNode = null; +String _relativePath(String url) { + if (_urlParsingNode == null) { + _urlParsingNode = new AnchorElement(); + } + _urlParsingNode.href = url; + var pathname = _urlParsingNode.pathname; + return (pathname[0] == '/') ? pathname : '/${pathname}'; +} diff --git a/modules/angular2/src/core/dom/browser_adapter.ts b/modules/angular2/src/platform/browser/browser_adapter.ts similarity index 99% rename from modules/angular2/src/core/dom/browser_adapter.ts rename to modules/angular2/src/platform/browser/browser_adapter.ts index 6b745d343f..79af0e6a60 100644 --- a/modules/angular2/src/core/dom/browser_adapter.ts +++ b/modules/angular2/src/platform/browser/browser_adapter.ts @@ -1,6 +1,6 @@ import {MapWrapper, ListWrapper} from 'angular2/src/facade/collection'; import {isBlank, isPresent, global, setValueOnPath, DateWrapper} from 'angular2/src/facade/lang'; -import {setRootDomAdapter} from './dom_adapter'; +import {setRootDomAdapter} from 'angular2/src/core/dom/dom_adapter'; import {GenericBrowserDomAdapter} from './generic_browser_adapter'; var _attrToPropMap = { diff --git a/modules/angular2/src/platform/browser/debug/by.ts b/modules/angular2/src/platform/browser/debug/by.ts new file mode 100644 index 0000000000..8b16c8324e --- /dev/null +++ b/modules/angular2/src/platform/browser/debug/by.ts @@ -0,0 +1,19 @@ +import {Type, isPresent, isBlank} from 'angular2/src/facade/lang'; +import {Predicate} from 'angular2/src/facade/collection'; +import {DOM} from 'angular2/src/core/dom/dom_adapter'; +import {DebugElement} from 'angular2/core'; + +export class By { + static all(): Function { return (debugElement) => true; } + + static css(selector: string): Predicate { + return (debugElement) => { + return isPresent(debugElement.nativeElement) ? + DOM.elementMatches(debugElement.nativeElement, selector) : + false; + }; + } + static directive(type: Type): Predicate { + return (debugElement) => { return debugElement.hasDirective(type); }; + } +} diff --git a/modules/angular2/src/core/debug/debug_element_view_listener.ts b/modules/angular2/src/platform/browser/debug/debug_element_view_listener.ts similarity index 96% rename from modules/angular2/src/core/debug/debug_element_view_listener.ts rename to modules/angular2/src/platform/browser/debug/debug_element_view_listener.ts index 1e5ee4cc7a..1094e75389 100644 --- a/modules/angular2/src/core/debug/debug_element_view_listener.ts +++ b/modules/angular2/src/platform/browser/debug/debug_element_view_listener.ts @@ -5,7 +5,7 @@ import {AppViewListener} from 'angular2/src/core/linker/view_listener'; import {AppView} from 'angular2/src/core/linker/view'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {Renderer} from 'angular2/src/core/render/api'; -import {DebugElement, DebugElement_} from './debug_element'; +import {DebugElement, DebugElement_} from 'angular2/src/core/debug/debug_element'; const NG_ID_PROPERTY = 'ngid'; const INSPECT_GLOBAL_NAME = 'ng.probe'; diff --git a/modules/angular2/src/core/dom/generic_browser_adapter.ts b/modules/angular2/src/platform/browser/generic_browser_adapter.ts similarity index 97% rename from modules/angular2/src/core/dom/generic_browser_adapter.ts rename to modules/angular2/src/platform/browser/generic_browser_adapter.ts index 878c2a63d7..aa8f880341 100644 --- a/modules/angular2/src/core/dom/generic_browser_adapter.ts +++ b/modules/angular2/src/platform/browser/generic_browser_adapter.ts @@ -1,6 +1,6 @@ import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection'; import {isPresent, isFunction, Type} from 'angular2/src/facade/lang'; -import {DomAdapter} from './dom_adapter'; +import {DomAdapter} from 'angular2/src/core/dom/dom_adapter'; import {XHRImpl} from 'angular2/src/platform/browser/xhr_impl'; diff --git a/modules/angular2/src/core/services/ruler.ts b/modules/angular2/src/platform/browser/ruler.ts similarity index 100% rename from modules/angular2/src/core/services/ruler.ts rename to modules/angular2/src/platform/browser/ruler.ts diff --git a/modules/angular2/src/core/testability/browser_testability.dart b/modules/angular2/src/platform/browser/testability.dart similarity index 77% rename from modules/angular2/src/core/testability/browser_testability.dart rename to modules/angular2/src/platform/browser/testability.dart index 9c56d8ac72..c3683403da 100644 --- a/modules/angular2/src/core/testability/browser_testability.dart +++ b/modules/angular2/src/platform/browser/testability.dart @@ -1,6 +1,6 @@ library testability.browser_testability; -import './testability.dart'; +import 'package:angular2/core.dart'; import 'dart:html'; import 'dart:js' as js; @@ -107,20 +107,20 @@ class BrowserGetTestability implements GetTestability { js.context['ngTestabilityRegistries'] = jsRegistry = new js.JsArray(); js.context['getAngularTestability'] = _jsify((Element elem, [bool findInAncestors = true]) { - var registry = js.context['ngTestabilityRegistries']; - for (int i = 0; i < registry.length; i++) { - var result = registry[i] - .callMethod('getAngularTestability', [elem, findInAncestors]); - if (result != null) return result; - } - throw 'Could not find testability for element.'; - }); + var registry = js.context['ngTestabilityRegistries']; + for (int i = 0; i < registry.length; i++) { + var result = registry[i] + .callMethod('getAngularTestability', [elem, findInAncestors]); + if (result != null) return result; + } + throw 'Could not find testability for element.'; + }); js.context['getAllAngularTestabilities'] = _jsify(() { var registry = js.context['ngTestabilityRegistries']; var result = []; for (int i = 0; i < registry.length; i++) { var testabilities = - registry[i].callMethod('getAllAngularTestabilities'); + registry[i].callMethod('getAllAngularTestabilities'); if (testabilities != null) result.addAll(testabilities); } return _jsify(result); @@ -129,15 +129,31 @@ class BrowserGetTestability implements GetTestability { jsRegistry.add(this._createRegistry(registry)); } + findTestabilityInTree(TestabilityRegistry registry, dynamic elem, bool findInAncestors) { + if (elem == null) { + return null; + } + var t = registry.getTestability(elem); + if (t != null) { + return t; + } else if (!findInAncestors) { + return null; + } + if (DOM.isShadowRoot(elem)) { + return this.findTestabilityInTree(registry, DOM.getHost(elem), true); + } + return this.findTestabilityInTree(registry, DOM.parentElement(elem), true); + } + js.JsObject _createRegistry(TestabilityRegistry registry) { var object = new js.JsObject(js.context['Object']); object['getAngularTestability'] = _jsify((Element elem, bool findInAncestors) { - var testability = registry.findTestabilityInTree(elem, findInAncestors); - return testability == null - ? null - : _jsify(new PublicTestability(testability)); - }); + var testability = registry.findTestabilityInTree(elem, findInAncestors); + return testability == null + ? null + : _jsify(new PublicTestability(testability)); + }); object['getAllAngularTestabilities'] = _jsify(() { var publicTestabilities = registry .getAllTestabilities() @@ -146,4 +162,4 @@ class BrowserGetTestability implements GetTestability { }); return object; } -} +} \ No newline at end of file diff --git a/modules/angular2/src/core/testability/browser_testability.ts b/modules/angular2/src/platform/browser/testability.ts similarity index 54% rename from modules/angular2/src/core/testability/browser_testability.ts rename to modules/angular2/src/platform/browser/testability.ts index 7045f990dd..6c87ee8f69 100644 --- a/modules/angular2/src/core/testability/browser_testability.ts +++ b/modules/angular2/src/platform/browser/testability.ts @@ -1,10 +1,17 @@ +import {Map, MapWrapper, ListWrapper} from 'angular2/src/facade/collection'; +import {CONST, CONST_EXPR, global, isPresent} from 'angular2/src/facade/lang'; +import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; +import {PromiseWrapper, ObservableWrapper} from 'angular2/src/facade/async'; + +import {DOM} from 'angular2/src/core/dom/dom_adapter'; + import { + Injectable, TestabilityRegistry, Testability, GetTestability, setTestabilityGetter -} from 'angular2/src/core/testability/testability'; -import {global} from 'angular2/src/facade/lang'; +} from 'angular2/core'; class PublicTestability { /** @internal */ @@ -29,18 +36,34 @@ export class BrowserGetTestability implements GetTestability { static init() { setTestabilityGetter(new BrowserGetTestability()); } addToWindow(registry: TestabilityRegistry): void { - global.getAngularTestability = function(elem: Element, - findInAncestors: boolean = true): PublicTestability { + global.getAngularTestability = (elem: any, findInAncestors: boolean = true) => { var testability = registry.findTestabilityInTree(elem, findInAncestors); - if (testability == null) { throw new Error('Could not find testability for element.'); } return new PublicTestability(testability); }; - global.getAllAngularTestabilities = function(): PublicTestability[] { + + global.getAllAngularTestabilities = () => { var testabilities = registry.getAllTestabilities(); return testabilities.map((testability) => { return new PublicTestability(testability); }); }; } + + findTestabilityInTree(registry: TestabilityRegistry, elem: any, + findInAncestors: boolean): Testability { + if (elem == null) { + return null; + } + var t = registry.getTestability(elem); + if (isPresent(t)) { + return t; + } else if (!findInAncestors) { + return null; + } + if (DOM.isShadowRoot(elem)) { + return this.findTestabilityInTree(registry, DOM.getHost(elem), true); + } + return this.findTestabilityInTree(registry, DOM.parentElement(elem), true); + } } diff --git a/modules/angular2/src/core/services/title.ts b/modules/angular2/src/platform/browser/title.ts similarity index 100% rename from modules/angular2/src/core/services/title.ts rename to modules/angular2/src/platform/browser/title.ts diff --git a/modules/angular2/src/platform/browser_common.ts b/modules/angular2/src/platform/browser_common.ts index fc33b5b0b9..41804d8eb4 100644 --- a/modules/angular2/src/platform/browser_common.ts +++ b/modules/angular2/src/platform/browser_common.ts @@ -10,7 +10,8 @@ import { Reflector, reflector, APPLICATION_COMMON_PROVIDERS, - PLATFORM_COMMON_PROVIDERS + PLATFORM_COMMON_PROVIDERS, + EVENT_MANAGER_PLUGINS } from "angular2/core"; import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from "angular2/common"; import {Renderer} from 'angular2/render'; @@ -18,21 +19,28 @@ import {Testability} from 'angular2/src/core/testability/testability'; // TODO change these imports once dom_adapter is moved out of core import {DOM} from 'angular2/src/core/dom/dom_adapter'; -import { - DomEventsPlugin, - EVENT_MANAGER_PLUGINS -} from 'angular2/src/core/render/dom/events/event_manager'; -import {KeyEventsPlugin} from 'angular2/src/core/render/dom/events/key_events'; -import {HammerGesturesPlugin} from 'angular2/src/core/render/dom/events/hammer_gestures'; -import {DOCUMENT} from 'angular2/src/core/render/dom/dom_tokens'; -import {DomRenderer, DomRenderer_} from 'angular2/src/core/render/dom/dom_renderer'; -import {DomSharedStylesHost} from 'angular2/src/core/render/dom/shared_styles_host'; -import {SharedStylesHost} from "angular2/src/core/render/dom/shared_styles_host"; +import {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events'; +import {KeyEventsPlugin} from 'angular2/src/platform/dom/events/key_events'; +import {HammerGesturesPlugin} from 'angular2/src/platform/dom/events/hammer_gestures'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; +import {DomRenderer, DomRenderer_} from 'angular2/src/platform/dom/dom_renderer'; +import {DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host'; +import {SharedStylesHost} from "angular2/src/platform/dom/shared_styles_host"; import {BrowserDetails} from "angular2/src/animate/browser_details"; import {AnimationBuilder} from "angular2/src/animate/animation_builder"; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; -import {BrowserGetTestability} from 'angular2/src/core/testability/browser_testability'; +import {BrowserDomAdapter} from './browser/browser_adapter'; +import {BrowserGetTestability} from 'angular2/src/platform/browser/testability'; import {wtfInit} from 'angular2/src/core/profile/wtf_init'; +export {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; +export {Title} from 'angular2/src/platform/browser/title'; +export { + // DebugElementViewListener, + ELEMENT_PROBE_PROVIDERS, + ELEMENT_PROBE_BINDINGS, + inspectNativeElement +} from 'angular2/src/platform/browser/debug/debug_element_view_listener'; +export {By} from 'angular2/src/platform/browser/debug/by'; +export {BrowserDomAdapter} from './browser/browser_adapter'; export const BROWSER_PROVIDERS: Array = CONST_EXPR([PLATFORM_COMMON_PROVIDERS]); diff --git a/modules/angular2/src/core/render/dom/dom_renderer.ts b/modules/angular2/src/platform/dom/dom_renderer.ts similarity index 97% rename from modules/angular2/src/core/render/dom/dom_renderer.ts rename to modules/angular2/src/platform/dom/dom_renderer.ts index 633a2cb2d9..8fc869f63e 100644 --- a/modules/angular2/src/core/render/dom/dom_renderer.ts +++ b/modules/angular2/src/platform/dom/dom_renderer.ts @@ -1,5 +1,6 @@ import {Inject, Injectable, OpaqueToken} from 'angular2/src/core/di'; import {AnimationBuilder} from 'angular2/src/animate/animation_builder'; + import { isPresent, isBlank, @@ -8,14 +9,10 @@ import { stringify, StringWrapper } from 'angular2/src/facade/lang'; + import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; - -import {DOM} from 'angular2/src/core/dom/dom_adapter'; - -import {EventManager} from './events/event_manager'; - import {DomSharedStylesHost} from './shared_styles_host'; -import {WtfScopeFn, wtfLeave, wtfCreateScope} from '../../profile/profile'; +import {WtfScopeFn, wtfLeave, wtfCreateScope} from 'angular2/src/core/profile/profile'; import { Renderer, @@ -26,15 +23,28 @@ import { RenderViewWithFragments, RenderTemplateCmd, RenderEventDispatcher, - RenderComponentTemplate -} from '../api'; + RenderComponentTemplate, + EventManager +} from 'angular2/core'; import {DOCUMENT} from './dom_tokens'; -import {createRenderView, NodeFactory, encapsulateStyles} from '../view_factory'; -import {DefaultRenderView, DefaultRenderFragmentRef, DefaultProtoViewRef} from '../view'; +import { + createRenderView, + NodeFactory, + encapsulateStyles +} from 'angular2/src/core/render/view_factory'; +import { + DefaultRenderView, + DefaultRenderFragmentRef, + DefaultProtoViewRef +} from 'angular2/src/core/render/view'; import {camelCaseToDashCase} from './util'; import {ViewEncapsulation} from 'angular2/src/core/metadata'; + +// TODO move it once DomAdapter is moved +import {DOM} from 'angular2/src/core/dom/dom_adapter'; + // TODO(tbosch): solve SVG properly once https://github.com/angular/angular/issues/4417 is done const XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink'; const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; diff --git a/modules/angular2/src/core/render/dom/dom_tokens.ts b/modules/angular2/src/platform/dom/dom_tokens.ts similarity index 100% rename from modules/angular2/src/core/render/dom/dom_tokens.ts rename to modules/angular2/src/platform/dom/dom_tokens.ts diff --git a/modules/angular2/src/platform/dom/events/dom_events.ts b/modules/angular2/src/platform/dom/events/dom_events.ts new file mode 100644 index 0000000000..cb06c62e38 --- /dev/null +++ b/modules/angular2/src/platform/dom/events/dom_events.ts @@ -0,0 +1,25 @@ +import {DOM} from 'angular2/src/core/dom/dom_adapter'; +import {Injectable, EventManagerPlugin, EventManager} from 'angular2/core'; + +@Injectable() +export class DomEventsPlugin extends EventManagerPlugin { + manager: EventManager; + + // This plugin should come last in the list of plugins, because it accepts all + // events. + supports(eventName: string): boolean { return true; } + + addEventListener(element: HTMLElement, eventName: string, handler: Function) { + var zone = this.manager.getZone(); + var outsideHandler = (event) => zone.run(() => handler(event)); + this.manager.getZone().runOutsideAngular(() => { DOM.on(element, eventName, outsideHandler); }); + } + + addGlobalEventListener(target: string, eventName: string, handler: Function): Function { + var element = DOM.getGlobalEventTarget(target); + var zone = this.manager.getZone(); + var outsideHandler = (event) => zone.run(() => handler(event)); + return this.manager.getZone().runOutsideAngular( + () => { return DOM.onAndCancel(element, eventName, outsideHandler); }); + } +} diff --git a/modules/angular2/src/core/render/dom/events/hammer_common.ts b/modules/angular2/src/platform/dom/events/hammer_common.ts similarity index 94% rename from modules/angular2/src/core/render/dom/events/hammer_common.ts rename to modules/angular2/src/platform/dom/events/hammer_common.ts index 6b8630e6b4..0229de4bc1 100644 --- a/modules/angular2/src/core/render/dom/events/hammer_common.ts +++ b/modules/angular2/src/platform/dom/events/hammer_common.ts @@ -1,4 +1,4 @@ -import {EventManagerPlugin} from './event_manager'; +import {EventManagerPlugin} from 'angular2/core'; import {StringMapWrapper} from 'angular2/src/facade/collection'; var _eventNames = { diff --git a/modules/angular2/src/core/render/dom/events/hammer_gestures.dart b/modules/angular2/src/platform/dom/events/hammer_gestures.dart similarity index 100% rename from modules/angular2/src/core/render/dom/events/hammer_gestures.dart rename to modules/angular2/src/platform/dom/events/hammer_gestures.dart diff --git a/modules/angular2/src/core/render/dom/events/hammer_gestures.ts b/modules/angular2/src/platform/dom/events/hammer_gestures.ts similarity index 100% rename from modules/angular2/src/core/render/dom/events/hammer_gestures.ts rename to modules/angular2/src/platform/dom/events/hammer_gestures.ts diff --git a/modules/angular2/src/core/render/dom/events/key_events.ts b/modules/angular2/src/platform/dom/events/key_events.ts similarity index 98% rename from modules/angular2/src/core/render/dom/events/key_events.ts rename to modules/angular2/src/platform/dom/events/key_events.ts index 54c74db418..46217b70df 100644 --- a/modules/angular2/src/core/render/dom/events/key_events.ts +++ b/modules/angular2/src/platform/dom/events/key_events.ts @@ -7,7 +7,7 @@ import { NumberWrapper } from 'angular2/src/facade/lang'; import {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection'; -import {EventManagerPlugin} from './event_manager'; +import {EventManagerPlugin} from 'angular2/core'; import {NgZone} from 'angular2/src/core/zone/ng_zone'; import {Injectable} from 'angular2/src/core/di'; diff --git a/modules/angular2/src/core/render/dom/shared_styles_host.ts b/modules/angular2/src/platform/dom/shared_styles_host.ts similarity index 100% rename from modules/angular2/src/core/render/dom/shared_styles_host.ts rename to modules/angular2/src/platform/dom/shared_styles_host.ts diff --git a/modules/angular2/src/platform/dom/util.ts b/modules/angular2/src/platform/dom/util.ts new file mode 100644 index 0000000000..7f074e0f62 --- /dev/null +++ b/modules/angular2/src/platform/dom/util.ts @@ -0,0 +1,15 @@ +import {StringWrapper} from 'angular2/src/facade/lang'; + +var CAMEL_CASE_REGEXP = /([A-Z])/g; +var DASH_CASE_REGEXP = /-([a-z])/g; + + +export function camelCaseToDashCase(input: string): string { + return StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP, + (m) => { return '-' + m[1].toLowerCase(); }); +} + +export function dashCaseToCamelCase(input: string): string { + return StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP, + (m) => { return m[1].toUpperCase(); }); +} diff --git a/modules/angular2/src/core/dom/abstract_html_adapter.dart b/modules/angular2/src/platform/server/abstract_html_adapter.dart similarity index 99% rename from modules/angular2/src/core/dom/abstract_html_adapter.dart rename to modules/angular2/src/platform/server/abstract_html_adapter.dart index aefd31c5e6..d4b4665b28 100644 --- a/modules/angular2/src/core/dom/abstract_html_adapter.dart +++ b/modules/angular2/src/platform/server/abstract_html_adapter.dart @@ -3,7 +3,7 @@ library angular2.dom.abstractHtmlAdapter; import 'package:html/parser.dart' as parser; import 'package:html/dom.dart'; -import 'dom_adapter.dart'; +import 'package:angular2/core.dart'; import 'package:angular2/src/compiler/xhr.dart'; const _attrToPropMap = const { diff --git a/modules/angular2/src/core/dom/html_adapter.dart b/modules/angular2/src/platform/server/html_adapter.dart similarity index 88% rename from modules/angular2/src/core/dom/html_adapter.dart rename to modules/angular2/src/platform/server/html_adapter.dart index b8e1bcd3af..6ed42fe206 100644 --- a/modules/angular2/src/core/dom/html_adapter.dart +++ b/modules/angular2/src/platform/server/html_adapter.dart @@ -1,7 +1,7 @@ library angular2.dom.htmlAdapter; import 'abstract_html_adapter.dart'; -import 'dom_adapter.dart'; +import 'package:angular2/core.dart' show setRootDomAdapter; import 'dart:io'; class Html5LibDomAdapter extends AbstractHtml5LibAdapter { diff --git a/modules/angular2/src/core/dom/parse5_adapter.dart b/modules/angular2/src/platform/server/parse5_adapter.dart similarity index 100% rename from modules/angular2/src/core/dom/parse5_adapter.dart rename to modules/angular2/src/platform/server/parse5_adapter.dart diff --git a/modules/angular2/src/core/dom/parse5_adapter.ts b/modules/angular2/src/platform/server/parse5_adapter.ts similarity index 99% rename from modules/angular2/src/core/dom/parse5_adapter.ts rename to modules/angular2/src/platform/server/parse5_adapter.ts index 6c9141ada5..f038ecd0cf 100644 --- a/modules/angular2/src/core/dom/parse5_adapter.ts +++ b/modules/angular2/src/platform/server/parse5_adapter.ts @@ -4,7 +4,7 @@ var serializer = new parse5.Serializer(parse5.TreeAdapters.htmlparser2); var treeAdapter = parser.treeAdapter; import {MapWrapper, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection'; -import {DomAdapter, setRootDomAdapter} from './dom_adapter'; +import {DomAdapter, setRootDomAdapter} from 'angular2/core'; import { isPresent, isBlank, diff --git a/modules/angular2/src/core/dom/webworker_adapter.dart b/modules/angular2/src/platform/server/webworker_adapter.dart similarity index 86% rename from modules/angular2/src/core/dom/webworker_adapter.dart rename to modules/angular2/src/platform/server/webworker_adapter.dart index d56853c68e..4a48ea72b9 100644 --- a/modules/angular2/src/core/dom/webworker_adapter.dart +++ b/modules/angular2/src/platform/server/webworker_adapter.dart @@ -1,7 +1,7 @@ library angular2.dom.webWorkerAdapter; import 'abstract_html_adapter.dart'; -import 'dom_adapter.dart'; +import 'package:angular2/core.dart' show setRootDomAdapter; class WebWorkerDomAdapter extends AbstractHtml5LibAdapter { static void makeCurrent() { diff --git a/modules/angular2/src/testing/benchmark_util.ts b/modules/angular2/src/testing/benchmark_util.ts index 635d6fedbb..d744cad271 100644 --- a/modules/angular2/src/testing/benchmark_util.ts +++ b/modules/angular2/src/testing/benchmark_util.ts @@ -1,4 +1,4 @@ -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import {document, window} from 'angular2/src/facade/browser'; import {NumberWrapper, isBlank} from 'angular2/src/facade/lang'; import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; diff --git a/modules/angular2/src/testing/test_component_builder.ts b/modules/angular2/src/testing/test_component_builder.ts index 72ff6abd37..3fe5d62bcc 100644 --- a/modules/angular2/src/testing/test_component_builder.ts +++ b/modules/angular2/src/testing/test_component_builder.ts @@ -17,7 +17,7 @@ import { import {el} from './utils'; -import {DOCUMENT} from 'angular2/src/core/render/render'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {DebugElement, DebugElement_} from 'angular2/src/core/debug/debug_element'; diff --git a/modules/angular2/src/testing/test_injector.ts b/modules/angular2/src/testing/test_injector.ts index 1a05c952f1..9c97b6f9d1 100644 --- a/modules/angular2/src/testing/test_injector.ts +++ b/modules/angular2/src/testing/test_injector.ts @@ -21,12 +21,7 @@ import {NgZone} from 'angular2/src/core/zone/ng_zone'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; -import { - EventManager, - DomEventsPlugin, - EVENT_MANAGER_PLUGINS -} from 'angular2/src/core/render/dom/events/event_manager'; - +import {EventManager, EVENT_MANAGER_PLUGINS} from 'angular2/core'; import {MockDirectiveResolver} from 'angular2/src/mock/directive_resolver_mock'; import {MockViewResolver} from 'angular2/src/mock/view_resolver_mock'; import {MockLocationStrategy} from 'angular2/src/mock/mock_location_strategy'; @@ -36,7 +31,9 @@ import {MockNgZone} from 'angular2/src/mock/ng_zone_mock'; import {TestComponentBuilder} from './test_component_builder'; import {Injector} from 'angular2/src/core/di'; -import {ELEMENT_PROBE_PROVIDERS} from 'angular2/src/core/debug'; +import { + ELEMENT_PROBE_PROVIDERS +} from 'angular2/src/platform/browser/debug/debug_element_view_listener'; import {ListWrapper} from 'angular2/src/facade/collection'; import {FunctionWrapper, Type} from 'angular2/src/facade/lang'; @@ -45,17 +42,18 @@ import {AppViewPool, APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view import {AppViewManager} from 'angular2/src/core/linker/view_manager'; import {AppViewManagerUtils} from 'angular2/src/core/linker/view_manager_utils'; import {Renderer} from 'angular2/src/core/render/api'; -import { - DomRenderer, - DOCUMENT, - SharedStylesHost, - DomSharedStylesHost -} from 'angular2/src/core/render/render'; + +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; +import {DomRenderer} from 'angular2/src/platform/dom/dom_renderer'; +import {DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host'; +import {SharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host'; +import {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events'; + import {APP_ID} from 'angular2/src/core/application_tokens'; import {Serializer} from "angular2/src/web_workers/shared/serializer"; import {Log} from './utils'; import {COMPILER_PROVIDERS} from 'angular2/src/compiler/compiler'; -import {DomRenderer_} from "angular2/src/core/render/dom/dom_renderer"; +import {DomRenderer_} from "angular2/src/platform/dom/dom_renderer"; import {DynamicComponentLoader_} from "angular2/src/core/linker/dynamic_component_loader"; import {AppViewManager_} from "angular2/src/core/linker/view_manager"; diff --git a/modules/angular2/src/web_workers/ui/di_bindings.ts b/modules/angular2/src/web_workers/ui/di_bindings.ts index abfee91c4c..42aa128fbe 100644 --- a/modules/angular2/src/web_workers/ui/di_bindings.ts +++ b/modules/angular2/src/web_workers/ui/di_bindings.ts @@ -5,26 +5,21 @@ import {AnimationBuilder} from 'angular2/src/animate/animation_builder'; import {BrowserDetails} from 'angular2/src/animate/browser_details'; import {Reflector, reflector} from 'angular2/src/core/reflection/reflection'; import {Parser, Lexer} from 'angular2/src/core/change_detection/change_detection'; -import { - EventManager, - DomEventsPlugin, - EVENT_MANAGER_PLUGINS -} from 'angular2/src/core/render/dom/events/event_manager'; +import {EventManager, EVENT_MANAGER_PLUGINS} from 'angular2/core'; import {ProtoViewFactory} from 'angular2/src/core/linker/proto_view_factory'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; -import {KeyEventsPlugin} from 'angular2/src/core/render/dom/events/key_events'; -import {HammerGesturesPlugin} from 'angular2/src/core/render/dom/events/hammer_gestures'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; +import {KeyEventsPlugin} from 'angular2/src/platform/dom/events/key_events'; +import {HammerGesturesPlugin} from 'angular2/src/platform/dom/events/hammer_gestures'; import {AppViewPool, APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view_pool'; import {Renderer} from 'angular2/src/core/render/api'; import {AppRootUrl} from 'angular2/src/compiler/app_root_url'; -import {DomRenderer, DomRenderer_, DOCUMENT} from 'angular2/src/core/render/render'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; +import {DomRenderer, DomRenderer_} from 'angular2/src/platform/dom/dom_renderer'; +import {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events'; import {APP_ID_RANDOM_PROVIDER} from 'angular2/src/core/application_tokens'; import {ElementSchemaRegistry} from 'angular2/src/compiler/schema/element_schema_registry'; import {DomElementSchemaRegistry} from 'angular2/src/compiler/schema/dom_element_schema_registry'; -import { - SharedStylesHost, - DomSharedStylesHost -} from 'angular2/src/core/render/dom/shared_styles_host'; +import {SharedStylesHost, DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {NgZone} from 'angular2/src/core/zone/ng_zone'; import {AppViewManager, AppViewManager_} from 'angular2/src/core/linker/view_manager'; diff --git a/modules/angular2/src/web_workers/ui/impl.ts b/modules/angular2/src/web_workers/ui/impl.ts index 92abec8901..a237c13dec 100644 --- a/modules/angular2/src/web_workers/ui/impl.ts +++ b/modules/angular2/src/web_workers/ui/impl.ts @@ -9,7 +9,7 @@ import {createInjector} from "./di_bindings"; import {MessageBus, MessageBusSink} from "angular2/src/web_workers/shared/message_bus"; import {createNgZone} from 'angular2/src/core/application_ref'; import {Injectable} from 'angular2/src/core/di'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import {wtfInit} from 'angular2/src/core/profile/wtf_init'; import {WebWorkerSetup} from 'angular2/src/web_workers/ui/setup'; import {MessageBasedRenderer} from 'angular2/src/web_workers/ui/renderer'; diff --git a/modules/angular2/src/web_workers/worker/application.dart b/modules/angular2/src/web_workers/worker/application.dart index 18b753d805..8703716330 100644 --- a/modules/angular2/src/web_workers/worker/application.dart +++ b/modules/angular2/src/web_workers/worker/application.dart @@ -10,7 +10,7 @@ import "package:angular2/src/core/linker/dynamic_component_loader.dart" import "dart:isolate"; import "dart:async"; import 'dart:core'; -import 'package:angular2/src/core/dom/webworker_adapter.dart'; +import 'package:angular2/src/platform/server/webworker_adapter.dart'; /** * Bootstrapping a Webworker Application diff --git a/modules/angular2/src/web_workers/worker/application.ts b/modules/angular2/src/web_workers/worker/application.ts index b3c29ca74c..7eec9d15a6 100644 --- a/modules/angular2/src/web_workers/worker/application.ts +++ b/modules/angular2/src/web_workers/worker/application.ts @@ -10,7 +10,7 @@ import {Promise} from 'angular2/src/facade/async'; import {bootstrapWebWorkerCommon} from "angular2/src/web_workers/worker/application_common"; import {ComponentRef} from "angular2/src/core/linker/dynamic_component_loader"; export * from "angular2/src/web_workers/shared/message_bus"; -import {Parse5DomAdapter} from 'angular2/src/core/dom/parse5_adapter'; +import {Parse5DomAdapter} from 'angular2/src/platform/server/parse5_adapter'; // TODO(jteplitz602) remove this and compile with lib.webworker.d.ts (#3492) interface PostMessageInterface { diff --git a/modules/angular2/test/common/forms/integration_spec.ts b/modules/angular2/test/common/forms/integration_spec.ts index 677c9b11f9..9560c83a0f 100644 --- a/modules/angular2/test/common/forms/integration_spec.ts +++ b/modules/angular2/test/common/forms/integration_spec.ts @@ -36,7 +36,7 @@ import { forwardRef, Validator } from 'angular2/core'; -import {By} from 'angular2/src/core/debug'; +import {By} from 'angular2/platform/browser'; import {ListWrapper} from 'angular2/src/facade/collection'; import {ObservableWrapper} from 'angular2/src/facade/async'; import {CONST_EXPR} from 'angular2/src/facade/lang'; diff --git a/modules/angular2/test/core/debug/debug_element_spec.ts b/modules/angular2/test/core/debug/debug_element_spec.ts index 0550a8b010..5f3806a7ea 100644 --- a/modules/angular2/test/core/debug/debug_element_spec.ts +++ b/modules/angular2/test/core/debug/debug_element_spec.ts @@ -19,7 +19,8 @@ import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {PromiseWrapper, EventEmitter, ObservableWrapper} from 'angular2/src/facade/async'; import {Injectable, NgFor, NgIf} from 'angular2/core'; -import {By, Scope} from 'angular2/src/core/debug'; +import {Scope} from 'angular2/core'; +import {By} from 'angular2/platform/browser'; import { Directive, diff --git a/modules/angular2/test/core/dom/html5lib_adapter.server.spec.dart b/modules/angular2/test/core/dom/html5lib_adapter.server.spec.dart index c044adc29e..5b8e1af2df 100644 --- a/modules/angular2/test/core/dom/html5lib_adapter.server.spec.dart +++ b/modules/angular2/test/core/dom/html5lib_adapter.server.spec.dart @@ -2,7 +2,7 @@ library angular2.dom.html5lib_adapter.test; import 'package:guinness/guinness.dart'; import 'package:unittest/unittest.dart' hide expect; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; // A smoke-test of the adapter. It is primarily tested by the compiler. main() { diff --git a/modules/angular2/test/core/forward_ref_integration_spec.ts b/modules/angular2/test/core/forward_ref_integration_spec.ts index 0e898f5fe4..fe80304bd5 100644 --- a/modules/angular2/test/core/forward_ref_integration_spec.ts +++ b/modules/angular2/test/core/forward_ref_integration_spec.ts @@ -24,7 +24,7 @@ import { View } from 'angular2/core'; import {Type} from 'angular2/src/facade/lang'; -import {asNativeElements} from 'angular2/src/core/debug'; +import {asNativeElements} from 'angular2/core'; export function main() { describe("forwardRef integration", function() { diff --git a/modules/angular2/test/core/linker/dynamic_component_loader_spec.ts b/modules/angular2/test/core/linker/dynamic_component_loader_spec.ts index 72fdbbe22e..fdf3b88736 100644 --- a/modules/angular2/test/core/linker/dynamic_component_loader_spec.ts +++ b/modules/angular2/test/core/linker/dynamic_component_loader_spec.ts @@ -17,12 +17,12 @@ import { } from 'angular2/testing_internal'; import {OnDestroy} from 'angular2/lifecycle_hooks'; -import {Injector, NgIf} from 'angular2/core'; -import {inspectElement, By} from 'angular2/src/core/debug'; +import {Injector, NgIf, inspectElement} from 'angular2/core'; +import {By} from 'angular2/platform/browser'; import {Component, View, ViewMetadata} from 'angular2/src/core/metadata'; import {DynamicComponentLoader} from 'angular2/src/core/linker/dynamic_component_loader'; import {ElementRef} from 'angular2/src/core/linker/element_ref'; -import {DOCUMENT} from 'angular2/src/core/render/render'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {ComponentFixture_} from "angular2/src/testing/test_component_builder"; diff --git a/modules/angular2/test/core/linker/integration_dart_spec.dart b/modules/angular2/test/core/linker/integration_dart_spec.dart index 6abfbdfd0d..685253041f 100644 --- a/modules/angular2/test/core/linker/integration_dart_spec.dart +++ b/modules/angular2/test/core/linker/integration_dart_spec.dart @@ -3,7 +3,7 @@ library angular2.test.di.integration_dart_spec; import 'package:angular2/angular2.dart'; import 'package:angular2/core.dart'; -import 'package:angular2/src/core/debug.dart'; +import 'package:angular2/src/core/debug/debug_element.dart'; import 'package:angular2/testing_internal.dart'; import 'package:observe/observe.dart'; import 'package:angular2/src/core/change_detection/differs/default_iterable_differ.dart'; diff --git a/modules/angular2/test/core/linker/integration_spec.ts b/modules/angular2/test/core/linker/integration_spec.ts index f12b41d07f..86f90232d0 100644 --- a/modules/angular2/test/core/linker/integration_spec.ts +++ b/modules/angular2/test/core/linker/integration_spec.ts @@ -91,7 +91,7 @@ import {Compiler} from 'angular2/src/core/linker/compiler'; import {ElementRef} from 'angular2/src/core/linker/element_ref'; import {TemplateRef} from 'angular2/src/core/linker/template_ref'; -import {DomRenderer} from 'angular2/src/core/render/dom/dom_renderer'; +import {DomRenderer} from 'angular2/src/platform/dom/dom_renderer'; import {IS_DART} from 'angular2/src/facade/lang'; const ANCHOR_ELEMENT = CONST_EXPR(new OpaqueToken('AnchorElement')); diff --git a/modules/angular2/test/core/linker/projection_integration_spec.ts b/modules/angular2/test/core/linker/projection_integration_spec.ts index df4031ddea..731e68d982 100644 --- a/modules/angular2/test/core/linker/projection_integration_spec.ts +++ b/modules/angular2/test/core/linker/projection_integration_spec.ts @@ -9,7 +9,7 @@ import { expect, iit, inject, - beforeEachBindings, + beforeEachProviders, it, xit, containsRegexp, @@ -36,11 +36,11 @@ import { ViewEncapsulation, ViewMetadata } from 'angular2/core'; -import {By} from 'angular2/src/core/debug'; +import {By} from 'angular2/platform/browser'; export function main() { describe('projection', () => { - beforeEachBindings(() => [provide(AppViewListener, {useClass: AppViewListener})]); + beforeEachProviders(() => [provide(AppViewListener, {useClass: AppViewListener})]); it('should support simple components', inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { diff --git a/modules/angular2/test/core/linker/query_integration_spec.ts b/modules/angular2/test/core/linker/query_integration_spec.ts index bab6fd1763..5636b719bd 100644 --- a/modules/angular2/test/core/linker/query_integration_spec.ts +++ b/modules/angular2/test/core/linker/query_integration_spec.ts @@ -37,9 +37,8 @@ import { AfterViewChecked } from 'angular2/core'; -import {asNativeElements} from 'angular2/src/core/debug'; - -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {asNativeElements} from 'angular2/core'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; export function main() { BrowserDomAdapter.makeCurrent(); diff --git a/modules/angular2/test/core/linker/view_manager_utils_spec.ts b/modules/angular2/test/core/linker/view_manager_utils_spec.ts index d755b0f803..23c9182ff2 100644 --- a/modules/angular2/test/core/linker/view_manager_utils_spec.ts +++ b/modules/angular2/test/core/linker/view_manager_utils_spec.ts @@ -42,7 +42,7 @@ import { import {DirectiveResolver} from 'angular2/src/core/linker/directive_resolver'; import {Component} from 'angular2/src/core/metadata'; import {AppViewManagerUtils} from 'angular2/src/core/linker/view_manager_utils'; -import {RenderViewWithFragments} from 'angular2/src/core/render/render'; +import {RenderViewWithFragments} from 'angular2/render'; export function main() { // TODO(tbosch): add more tests here! diff --git a/modules/angular2/test/core/render/dom/events/event_manager_spec.ts b/modules/angular2/test/core/render/dom/events/event_manager_spec.ts index 9835780170..b09680308b 100644 --- a/modules/angular2/test/core/render/dom/events/event_manager_spec.ts +++ b/modules/angular2/test/core/render/dom/events/event_manager_spec.ts @@ -9,11 +9,8 @@ import { beforeEach, el } from 'angular2/testing_internal'; -import { - EventManager, - EventManagerPlugin, - DomEventsPlugin -} from 'angular2/src/core/render/dom/events/event_manager'; +import {EventManager, EventManagerPlugin} from 'angular2/core'; +import {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events'; import {NgZone} from 'angular2/src/core/zone/ng_zone'; import {ListWrapper, Map, MapWrapper} from 'angular2/src/facade/collection'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; diff --git a/modules/angular2/test/core/render/dom/events/key_events_spec.ts b/modules/angular2/test/core/render/dom/events/key_events_spec.ts index 4f7d7f2784..b09be3df04 100644 --- a/modules/angular2/test/core/render/dom/events/key_events_spec.ts +++ b/modules/angular2/test/core/render/dom/events/key_events_spec.ts @@ -9,7 +9,7 @@ import { beforeEach, el } from 'angular2/testing_internal'; -import {KeyEventsPlugin} from 'angular2/src/core/render/dom/events/key_events'; +import {KeyEventsPlugin} from 'angular2/src/platform/dom/events/key_events'; export function main() { describe('KeyEvents', () => { diff --git a/modules/angular2/test/core/render/dom/shared_styles_host_spec.ts b/modules/angular2/test/core/render/dom/shared_styles_host_spec.ts index 7d09bc93c9..26bde578a5 100644 --- a/modules/angular2/test/core/render/dom/shared_styles_host_spec.ts +++ b/modules/angular2/test/core/render/dom/shared_styles_host_spec.ts @@ -17,7 +17,7 @@ import { } from 'angular2/testing_internal'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; -import {DomSharedStylesHost} from 'angular2/src/core/render/dom/shared_styles_host'; +import {DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host'; export function main() { describe('DomSharedStylesHost', () => { diff --git a/modules/angular2/test/platform/bootstrap_spec.ts b/modules/angular2/test/platform/bootstrap_spec.ts index f751d15624..f6fb51b8bc 100644 --- a/modules/angular2/test/platform/bootstrap_spec.ts +++ b/modules/angular2/test/platform/bootstrap_spec.ts @@ -16,7 +16,7 @@ import {ApplicationRef} from 'angular2/src/core/application_ref'; import {Component, Directive, View, OnDestroy, platform} from 'angular2/core'; import {BROWSER_PROVIDERS, BROWSER_APP_PROVIDERS} from 'angular2/platform/browser'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; -import {DOCUMENT} from 'angular2/render'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; import {PromiseWrapper} from 'angular2/src/facade/async'; import {provide, Inject, Injector} from 'angular2/core'; import {ExceptionHandler} from 'angular2/src/facade/exceptions'; diff --git a/modules/angular2/test/core/debug/debug_element_view_listener_spec.ts b/modules/angular2/test/platform/browser/debug/debug_element_view_listener_spec.ts similarity index 92% rename from modules/angular2/test/core/debug/debug_element_view_listener_spec.ts rename to modules/angular2/test/platform/browser/debug/debug_element_view_listener_spec.ts index bc538e3ea1..4c545d6148 100644 --- a/modules/angular2/test/core/debug/debug_element_view_listener_spec.ts +++ b/modules/angular2/test/platform/browser/debug/debug_element_view_listener_spec.ts @@ -8,7 +8,7 @@ import { expect, iit, inject, - beforeEachBindings, + beforeEachProviders, it, xit, TestComponentBuilder, @@ -16,7 +16,7 @@ import { import {global} from 'angular2/src/facade/lang'; import {APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view_pool'; import {provide, Component, Directive, Injectable, View} from 'angular2/core'; -import {inspectNativeElement} from 'angular2/src/core/debug'; +import {inspectNativeElement} from 'angular2/platform/browser'; import {IS_DART} from 'angular2/src/facade/lang'; @Component({selector: 'my-comp'}) @@ -28,7 +28,7 @@ class MyComp { export function main() { describe('element probe', function() { - beforeEachBindings(() => [provide(APP_VIEW_POOL_CAPACITY, {useValue: 0})]); + beforeEachProviders(() => [provide(APP_VIEW_POOL_CAPACITY, {useValue: 0})]); it('should return a TestElement from a dom element', inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { diff --git a/modules/angular2/test/core/services/rectangle_mock.dart b/modules/angular2/test/platform/browser/rectangle_mock.dart similarity index 100% rename from modules/angular2/test/core/services/rectangle_mock.dart rename to modules/angular2/test/platform/browser/rectangle_mock.dart diff --git a/modules/angular2/test/core/services/rectangle_mock.ts b/modules/angular2/test/platform/browser/rectangle_mock.ts similarity index 100% rename from modules/angular2/test/core/services/rectangle_mock.ts rename to modules/angular2/test/platform/browser/rectangle_mock.ts diff --git a/modules/angular2/test/core/services/ruler_spec.ts b/modules/angular2/test/platform/browser/ruler_spec.ts similarity index 92% rename from modules/angular2/test/core/services/ruler_spec.ts rename to modules/angular2/test/platform/browser/ruler_spec.ts index 2d12d1782b..f3ec7c0b96 100644 --- a/modules/angular2/test/core/services/ruler_spec.ts +++ b/modules/angular2/test/platform/browser/ruler_spec.ts @@ -9,11 +9,11 @@ import { expect, SpyObject } from 'angular2/testing_internal'; -import {SpyElementRef, SpyDomAdapter} from '../spies'; +import {SpyElementRef, SpyDomAdapter} from '../../core/spies'; import {DOM, DomAdapter} from 'angular2/src/core/dom/dom_adapter'; -import {Ruler, Rectangle} from 'angular2/src/core/services/ruler'; +import {Ruler, Rectangle} from 'angular2/src/platform/browser/ruler'; import {createRectangle} from './rectangle_mock'; function assertDimensions(rect: Rectangle, left, right, top, bottom, width, height) { diff --git a/modules/angular2/test/core/services/static_assets/200.html b/modules/angular2/test/platform/browser/static_assets/200.html similarity index 100% rename from modules/angular2/test/core/services/static_assets/200.html rename to modules/angular2/test/platform/browser/static_assets/200.html diff --git a/modules/angular2/test/core/services/title_spec.ts b/modules/angular2/test/platform/browser/title_spec.ts similarity index 93% rename from modules/angular2/test/core/services/title_spec.ts rename to modules/angular2/test/platform/browser/title_spec.ts index 647c628ffb..b8eda62cb9 100644 --- a/modules/angular2/test/core/services/title_spec.ts +++ b/modules/angular2/test/platform/browser/title_spec.ts @@ -1,7 +1,6 @@ import {ddescribe, describe, it, iit, xit, expect, afterEach} from 'angular2/testing_internal'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; - -import {Title} from 'angular2/src/core/services/title'; +import {Title} from 'angular2/platform/browser'; export function main() { describe('title service', () => { diff --git a/modules/angular2/test/platform/xhr_impl_spec.ts b/modules/angular2/test/platform/xhr_impl_spec.ts index 91906410c0..80a782d654 100644 --- a/modules/angular2/test/platform/xhr_impl_spec.ts +++ b/modules/angular2/test/platform/xhr_impl_spec.ts @@ -16,8 +16,8 @@ import {PromiseWrapper} from 'angular2/src/facade/async'; export function main() { describe('XHRImpl', () => { var xhr: XHRImpl; - var url200 = '/base/modules/angular2/test/core/services/static_assets/200.html'; - var url404 = '/base/modules/angular2/test/core/services/static_assets/404.html'; + var url200 = '/base/modules/angular2/test/platform/browser/static_assets/200.html'; + var url404 = '/base/modules/angular2/test/platform/browser/static_assets/404.html'; beforeEach(() => { xhr = new XHRImpl(); }); diff --git a/modules/angular2/test/public_api_spec.ts b/modules/angular2/test/public_api_spec.ts index 884fa6fd78..4e4dfa14c7 100644 --- a/modules/angular2/test/public_api_spec.ts +++ b/modules/angular2/test/public_api_spec.ts @@ -129,6 +129,121 @@ var NG_ALL = [ 'Binding.toValue', 'BROWSER_APP_PROVIDERS:js', 'BROWSER_PROVIDERS:js', + + 'BrowserDomAdapter:js', + 'BrowserDomAdapter#makeCurrent():js', + 'BrowserDomAdapter.addClass():js', + 'BrowserDomAdapter.adoptNode():js', + 'BrowserDomAdapter.appendChild():js', + 'BrowserDomAdapter.attrToPropMap:js', + 'BrowserDomAdapter.attributeMap():js', + 'BrowserDomAdapter.cancelAnimationFrame():js', + 'BrowserDomAdapter.childNodes():js', + 'BrowserDomAdapter.childNodesAsList():js', + 'BrowserDomAdapter.classList():js', + 'BrowserDomAdapter.clearNodes():js', + 'BrowserDomAdapter.clone():js', + 'BrowserDomAdapter.content():js', + 'BrowserDomAdapter.createComment():js', + 'BrowserDomAdapter.createElement():js', + 'BrowserDomAdapter.createElementNS():js', + 'BrowserDomAdapter.createEvent():js', + 'BrowserDomAdapter.createHtmlDocument():js', + 'BrowserDomAdapter.createMouseEvent():js', + 'BrowserDomAdapter.createScriptTag():js', + 'BrowserDomAdapter.createShadowRoot():js', + 'BrowserDomAdapter.createStyleElement():js', + 'BrowserDomAdapter.createTemplate():js', + 'BrowserDomAdapter.createTextNode():js', + 'BrowserDomAdapter.defaultDoc():js', + 'BrowserDomAdapter.dispatchEvent():js', + 'BrowserDomAdapter.elementMatches():js', + 'BrowserDomAdapter.firstChild():js', + 'BrowserDomAdapter.getAnimationPrefix():js', + 'BrowserDomAdapter.getAttribute():js', + 'BrowserDomAdapter.getBaseHref():js', + 'BrowserDomAdapter.getBoundingClientRect():js', + 'BrowserDomAdapter.getChecked():js', + 'BrowserDomAdapter.getComputedStyle():js', + 'BrowserDomAdapter.getData():js', + 'BrowserDomAdapter.getDistributedNodes():js', + 'BrowserDomAdapter.getElementsByClassName():js', + 'BrowserDomAdapter.getElementsByTagName():js', + 'BrowserDomAdapter.getEventKey():js', + 'BrowserDomAdapter.getGlobalEventTarget():js', + 'BrowserDomAdapter.getHistory():js', + 'BrowserDomAdapter.getHost():js', + 'BrowserDomAdapter.getHref():js', + 'BrowserDomAdapter.getInnerHTML():js', + 'BrowserDomAdapter.getLocation():js', + 'BrowserDomAdapter.getOuterHTML():js', + 'BrowserDomAdapter.getProperty():js', + 'BrowserDomAdapter.getShadowRoot():js', + 'BrowserDomAdapter.getStyle():js', + 'BrowserDomAdapter.getText():js', + 'BrowserDomAdapter.getTitle():js', + 'BrowserDomAdapter.getTransitionEnd():js', + 'BrowserDomAdapter.getUserAgent():js', + 'BrowserDomAdapter.getValue():js', + 'BrowserDomAdapter.getXHR():js', + 'BrowserDomAdapter.hasAttribute():js', + 'BrowserDomAdapter.hasClass():js', + 'BrowserDomAdapter.hasProperty():js', + 'BrowserDomAdapter.hasShadowRoot():js', + 'BrowserDomAdapter.importIntoDoc():js', + 'BrowserDomAdapter.insertAfter():js', + 'BrowserDomAdapter.insertAllBefore():js', + 'BrowserDomAdapter.insertBefore():js', + 'BrowserDomAdapter.invoke():js', + 'BrowserDomAdapter.isCommentNode():js', + 'BrowserDomAdapter.isElementNode():js', + 'BrowserDomAdapter.isPrevented():js', + 'BrowserDomAdapter.isShadowRoot():js', + 'BrowserDomAdapter.isTemplateElement():js', + 'BrowserDomAdapter.isTextNode():js', + 'BrowserDomAdapter.log():js', + 'BrowserDomAdapter.logError():js', + 'BrowserDomAdapter.logGroup():js', + 'BrowserDomAdapter.logGroupEnd():js', + 'BrowserDomAdapter.nextSibling():js', + 'BrowserDomAdapter.nodeName():js', + 'BrowserDomAdapter.nodeValue():js', + 'BrowserDomAdapter.on():js', + 'BrowserDomAdapter.onAndCancel():js', + 'BrowserDomAdapter.parentElement():js', + 'BrowserDomAdapter.parse():js', + 'BrowserDomAdapter.performanceNow():js', + 'BrowserDomAdapter.preventDefault():js', + 'BrowserDomAdapter.query():js', + 'BrowserDomAdapter.querySelector():js', + 'BrowserDomAdapter.querySelectorAll():js', + 'BrowserDomAdapter.remove():js', + 'BrowserDomAdapter.removeAttribute():js', + 'BrowserDomAdapter.removeChild():js', + 'BrowserDomAdapter.removeClass():js', + 'BrowserDomAdapter.removeStyle():js', + 'BrowserDomAdapter.replaceChild():js', + 'BrowserDomAdapter.requestAnimationFrame():js', + 'BrowserDomAdapter.resetBaseElement():js', + 'BrowserDomAdapter.resolveAndSetHref():js', + 'BrowserDomAdapter.setAttribute():js', + 'BrowserDomAdapter.setAttributeNS():js', + 'BrowserDomAdapter.setChecked():js', + 'BrowserDomAdapter.setData():js', + 'BrowserDomAdapter.setGlobalVar():js', + 'BrowserDomAdapter.setInnerHTML():js', + 'BrowserDomAdapter.setProperty():js', + 'BrowserDomAdapter.setStyle():js', + 'BrowserDomAdapter.setText():js', + 'BrowserDomAdapter.setTitle():js', + 'BrowserDomAdapter.setValue():js', + 'BrowserDomAdapter.supportsAnimation():js', + 'BrowserDomAdapter.supportsDOMEvents():js', + 'BrowserDomAdapter.supportsNativeShadowDOM():js', + 'BrowserDomAdapter.tagName():js', + 'BrowserDomAdapter.templateAwareRoot():js', + 'BrowserDomAdapter.type():js', + 'Provider', 'Provider.dependencies', 'Provider.multi', @@ -144,10 +259,10 @@ var NG_ALL = [ 'ProviderBuilder.toValue()', 'ProviderBuilder.token', 'ProviderBuilder.token=', - 'By#all()', - 'By#css()', - 'By#directive()', - 'By', + 'By#all():js', + 'By#css():js', + 'By#directive():js', + 'By:js', 'CORE_DIRECTIVES', 'COMMON_DIRECTIVES', 'PLATFORM_DIRECTIVES:js', @@ -479,14 +594,19 @@ var NG_ALL = [ 'DirectiveResolver', 'DirectiveResolver.resolve()', 'DynamicComponentLoader', + 'DomAdapter', + 'DomAdapter.attrToPropMap:dart', + 'DomAdapter.attrToPropMap=:dart', + 'setRootDomAdapter()', + 'DOM', /* Abstract methods 'DynamicComponentLoader.loadAsRoot()', 'DynamicComponentLoader.loadIntoLocation()', 'DynamicComponentLoader.loadNextToLocation()', */ - 'ELEMENT_PROBE_PROVIDERS', - 'ELEMENT_PROBE_BINDINGS', + 'ELEMENT_PROBE_PROVIDERS:js', + 'ELEMENT_PROBE_BINDINGS:js', 'ElementRef', 'ElementRef.boundElementIndex', 'ElementRef.boundElementIndex=', @@ -494,6 +614,17 @@ var NG_ALL = [ 'ElementRef.parentView', 'ElementRef.parentView=', 'ElementRef.renderView', + 'EVENT_MANAGER_PLUGINS', + 'EventManager', + 'EventManager.addEventListener()', + 'EventManager.addGlobalEventListener()', + 'EventManager.getZone()', + 'EventManagerPlugin', + 'EventManagerPlugin.addEventListener()', + 'EventManagerPlugin.addGlobalEventListener()', + 'EventManagerPlugin.supports()', + 'EventManagerPlugin.manager:dart', + 'EventManagerPlugin.manager=:dart', 'ErrorHandlingFn:dart', 'Output', 'Output.bindingPropertyName', @@ -1112,10 +1243,27 @@ var NG_ALL = [ Abstract method 'TemplateRef.hasLocal()', */ + 'Testability', + 'Testability.decreasePendingRequestCount()', + 'Testability.findBindings()', + 'Testability.findProviders()', + 'Testability.getPendingRequestCount()', + 'Testability.increasePendingRequestCount()', + 'Testability.isAngularEventPending()', + 'Testability.isStable()', + 'Testability.whenStable()', + 'TestabilityRegistry', + 'TestabilityRegistry.findTestabilityInTree()', + 'TestabilityRegistry.getAllTestabilities()', + 'TestabilityRegistry.getTestability()', + 'TestabilityRegistry.registerApplication()', + 'GetTestability:dart', + 'setTestabilityGetter()', + 'Type:js', - 'Title', - 'Title.getTitle()', - 'Title.setTitle()', + 'Title:js', + 'Title.getTitle():js', + 'Title.setTitle():js', 'TypeLiteral', 'TypeLiteral.type', 'UpperCasePipe', @@ -1242,7 +1390,7 @@ var NG_ALL = [ 'createNgZone()', 'forwardRef():js', 'inspectElement()', - 'inspectNativeElement()', + 'inspectNativeElement():js', 'platform():js', 'resolveForwardRef():js', 'wtfCreateScope():js', @@ -1313,6 +1461,17 @@ var NG_ALL = [ 'RenderElementRef.renderView=', 'RenderEventDispatcher:dart', 'RenderNgContentCmd.index', + 'RenderComponentTemplate', + 'RenderComponentTemplate.commands', + 'RenderComponentTemplate.commands=', + 'RenderComponentTemplate.encapsulation', + 'RenderComponentTemplate.encapsulation=', + 'RenderComponentTemplate.id', + 'RenderComponentTemplate.id=', + 'RenderComponentTemplate.shortId', + 'RenderComponentTemplate.shortId=', + 'RenderComponentTemplate.styles', + 'RenderComponentTemplate.styles=', 'Stream:dart', 'Stream.any():dart', 'Stream.asBroadcastStream():dart', diff --git a/modules/angular2/test/router/integration/router_integration_spec.ts b/modules/angular2/test/router/integration/router_integration_spec.ts index 4e85d2c06d..a17bed2d60 100644 --- a/modules/angular2/test/router/integration/router_integration_spec.ts +++ b/modules/angular2/test/router/integration/router_integration_spec.ts @@ -18,7 +18,7 @@ import {bootstrap} from 'angular2/bootstrap'; import {Component, Directive, View} from 'angular2/src/core/metadata'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {provide} from 'angular2/core'; -import {DOCUMENT} from 'angular2/src/core/render/render'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; import {RouteConfig, Route, Redirect} from 'angular2/src/router/route_config_decorator'; import {PromiseWrapper} from 'angular2/src/facade/async'; import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; diff --git a/modules/angular2/test/router/route_config_spec.ts b/modules/angular2/test/router/route_config_spec.ts index 4876f62a73..9b9d455bcd 100644 --- a/modules/angular2/test/router/route_config_spec.ts +++ b/modules/angular2/test/router/route_config_spec.ts @@ -15,7 +15,7 @@ import {bootstrap} from 'angular2/bootstrap'; import {Component, Directive, View} from 'angular2/src/core/metadata'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {provide} from 'angular2/core'; -import {DOCUMENT} from 'angular2/src/core/render/render'; +import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens'; import {Type} from 'angular2/src/facade/lang'; import { diff --git a/modules/angular2/test/router/router_link_spec.ts b/modules/angular2/test/router/router_link_spec.ts index 5e5a6e5c6d..f6e1816568 100644 --- a/modules/angular2/test/router/router_link_spec.ts +++ b/modules/angular2/test/router/router_link_spec.ts @@ -17,7 +17,7 @@ import { import {SpyRouter, SpyLocation} from './spies'; import {provide, Component, View} from 'angular2/core'; -import {By} from 'angular2/src/core/debug'; +import {By} from 'angular2/platform/browser'; import { Location, diff --git a/modules/angular2/test/web_workers/debug_tools/bootstrap.server.spec.dart b/modules/angular2/test/web_workers/debug_tools/bootstrap.server.spec.dart index e6e479f3b4..cc41581663 100644 --- a/modules/angular2/test/web_workers/debug_tools/bootstrap.server.spec.dart +++ b/modules/angular2/test/web_workers/debug_tools/bootstrap.server.spec.dart @@ -1,6 +1,6 @@ library angular2.test.web_workers.debug_tools.bootstrap; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import "package:angular2/testing_internal.dart"; import "package:angular2/src/core/reflection/reflection_capabilities.dart"; import "package:angular2/src/core/reflection/reflection.dart"; diff --git a/modules/angular2/test/web_workers/worker/renderer_integration_spec.ts b/modules/angular2/test/web_workers/worker/renderer_integration_spec.ts index 9beff59314..a7286027b7 100644 --- a/modules/angular2/test/web_workers/worker/renderer_integration_spec.ts +++ b/modules/angular2/test/web_workers/worker/renderer_integration_spec.ts @@ -39,7 +39,7 @@ import { RenderFragmentRef, Renderer } from "angular2/src/core/render/api"; -import {DomRenderer, DomRenderer_} from 'angular2/src/core/render/dom/dom_renderer'; +import {DomRenderer, DomRenderer_} from 'angular2/src/platform/dom/dom_renderer'; import {DefaultRenderView} from 'angular2/src/core/render/view'; import { RenderProtoViewRefStore, diff --git a/modules/angular2/web_worker/worker.ts b/modules/angular2/web_worker/worker.ts index 884a9ceca0..4850b68b65 100644 --- a/modules/angular2/web_worker/worker.ts +++ b/modules/angular2/web_worker/worker.ts @@ -8,7 +8,9 @@ export * from 'angular2/src/facade/facade'; // web_worker exports its own // export * from '../src/core/application'; export * from '../src/core/application_ref'; -export * from '../src/core/services'; +export * from '../src/platform/browser/ruler'; +export * from '../src/platform/browser/title'; +export * from '../src/compiler/url_resolver'; export * from '../src/core/linker'; export * from '../src/core/zone'; // Do not export render in web_worker @@ -31,10 +33,10 @@ export { RenderBeginComponentCmd, RenderEmbeddedTemplateCmd, RenderBeginCmd -} from '../src/core/render/render'; +} from '../src/core/render/api'; export * from '../src/common/directives'; export * from '../src/common/forms'; -export * from '../src/core/debug'; +export {DebugElement} from '../src/core/debug/debug_element'; export * from '../src/core/change_detection'; export * from '../profile'; diff --git a/modules/angular2_material/test/button_spec.ts b/modules/angular2_material/test/button_spec.ts index 1ddbe04ff7..cd51d97f01 100644 --- a/modules/angular2_material/test/button_spec.ts +++ b/modules/angular2_material/test/button_spec.ts @@ -2,7 +2,7 @@ import { AsyncTestCompleter, TestComponentBuilder, beforeEach, - beforeEachBindings, + beforeEachProviders, ddescribe, describe, el, @@ -14,7 +14,8 @@ import { } from 'angular2/testing_internal'; import {DebugElement} from 'angular2/src/core/debug/debug_element'; -import {Component, View, ViewMetadata, UrlResolver, bind, provide} from 'angular2/core'; +import {Component, View, ViewMetadata, bind, provide} from 'angular2/core'; +import {UrlResolver} from 'angular2/compiler'; import {MdButton, MdAnchor} from 'angular2_material/src/components/button/button'; @@ -25,11 +26,10 @@ export function main() { describe('MdButton', () => { let builder: TestComponentBuilder; - beforeEachBindings(() => [ + beforeEachProviders(() => [ // Need a custom URL resolver for ng-material template files in order for them to work // with both JS and Dart output. - bind(UrlResolver) - .toValue(new TestUrlResolver()), + provide(UrlResolver, {useValue: new TestUrlResolver()}) ]); beforeEach(inject([TestComponentBuilder], (tcb) => { builder = tcb; })); diff --git a/modules/angular2_material/test/test_url_resolver.dart b/modules/angular2_material/test/test_url_resolver.dart index cbc582def7..4d6e6304bb 100644 --- a/modules/angular2_material/test/test_url_resolver.dart +++ b/modules/angular2_material/test/test_url_resolver.dart @@ -1,6 +1,6 @@ library ng_material.test_url_resolver; -import 'package:angular2/src/core/dom/browser_adapter.dart'; +import 'package:angular2/src/platform/browser/browser_adapter.dart'; import 'package:angular2/src/compiler/url_resolver.dart'; void commonDemoSetup() { diff --git a/modules/benchmarks/src/change_detection/change_detection_benchmark.ts b/modules/benchmarks/src/change_detection/change_detection_benchmark.ts index 4a3c437915..00e9152d69 100644 --- a/modules/benchmarks/src/change_detection/change_detection_benchmark.ts +++ b/modules/benchmarks/src/change_detection/change_detection_benchmark.ts @@ -1,7 +1,7 @@ import {reflector} from 'angular2/src/core/reflection/reflection'; import {isPresent} from 'angular2/src/facade/lang'; import {getIntParameter, bindAction, microBenchmark} from 'angular2/src/testing/benchmark_util'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import { Lexer, diff --git a/modules/benchmarks/src/compiler/compiler_benchmark.ts b/modules/benchmarks/src/compiler/compiler_benchmark.ts index 7fc8b433d4..4050be058b 100644 --- a/modules/benchmarks/src/compiler/compiler_benchmark.ts +++ b/modules/benchmarks/src/compiler/compiler_benchmark.ts @@ -1,5 +1,5 @@ import {bootstrap} from 'angular2/bootstrap'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {PromiseWrapper} from 'angular2/src/facade/async'; import {ListWrapper, Map, MapWrapper} from 'angular2/src/facade/collection'; diff --git a/modules/benchmarks/src/compiler/selector_benchmark.ts b/modules/benchmarks/src/compiler/selector_benchmark.ts index b197c7c9e1..3ff9ec546a 100644 --- a/modules/benchmarks/src/compiler/selector_benchmark.ts +++ b/modules/benchmarks/src/compiler/selector_benchmark.ts @@ -2,7 +2,7 @@ import {SelectorMatcher} from "angular2/src/compiler/selector"; import {CssSelector} from "angular2/src/compiler/selector"; import {StringWrapper, Math} from 'angular2/src/facade/lang'; import {getIntParameter, bindAction} from 'angular2/src/testing/benchmark_util'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; export function main() { BrowserDomAdapter.makeCurrent(); diff --git a/modules/benchmarks/src/di/di_benchmark.ts b/modules/benchmarks/src/di/di_benchmark.ts index 010f71c233..8d9b673bf2 100644 --- a/modules/benchmarks/src/di/di_benchmark.ts +++ b/modules/benchmarks/src/di/di_benchmark.ts @@ -2,7 +2,7 @@ import {Injectable, Injector, Key, bind, provide} from "angular2/core"; import {reflector} from 'angular2/src/core/reflection/reflection'; import {ReflectionCapabilities} from 'angular2/src/core/reflection/reflection_capabilities'; import {getIntParameter, bindAction, microBenchmark} from 'angular2/src/testing/benchmark_util'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; var count = 0; diff --git a/modules/benchmarks/src/element_injector/element_injector_benchmark.ts b/modules/benchmarks/src/element_injector/element_injector_benchmark.ts index 8c8efe931c..3c674c3c34 100644 --- a/modules/benchmarks/src/element_injector/element_injector_benchmark.ts +++ b/modules/benchmarks/src/element_injector/element_injector_benchmark.ts @@ -3,7 +3,7 @@ import {ReflectionCapabilities} from 'angular2/src/core/reflection/reflection_ca import {Injectable, Injector} from 'angular2/core'; import {ProtoElementInjector, DirectiveProvider} from 'angular2/src/core/linker/element_injector'; import {getIntParameter, bindAction, microBenchmark} from 'angular2/src/testing/benchmark_util'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; var count = 0; diff --git a/modules/benchmarks/src/largetable/largetable_benchmark.ts b/modules/benchmarks/src/largetable/largetable_benchmark.ts index 417b2703d3..0832aa9e5a 100644 --- a/modules/benchmarks/src/largetable/largetable_benchmark.ts +++ b/modules/benchmarks/src/largetable/largetable_benchmark.ts @@ -20,7 +20,7 @@ import { NgSwitchDefault } from 'angular2/core'; import {ApplicationRef} from 'angular2/src/core/application_ref'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import {APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view_pool'; import {ListWrapper} from 'angular2/src/facade/collection'; diff --git a/modules/benchmarks/src/static_tree/tree_benchmark.ts b/modules/benchmarks/src/static_tree/tree_benchmark.ts index 581f50692e..c3ac1f9023 100644 --- a/modules/benchmarks/src/static_tree/tree_benchmark.ts +++ b/modules/benchmarks/src/static_tree/tree_benchmark.ts @@ -23,7 +23,7 @@ import { windowProfile, windowProfileEnd } from 'angular2/src/testing/benchmark_util'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import {APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view_pool'; function createBindings(): Provider[] { diff --git a/modules/benchmarks/src/tree/tree_benchmark.ts b/modules/benchmarks/src/tree/tree_benchmark.ts index 80ca59a83f..12d0a008bf 100644 --- a/modules/benchmarks/src/tree/tree_benchmark.ts +++ b/modules/benchmarks/src/tree/tree_benchmark.ts @@ -22,7 +22,7 @@ import { windowProfile, windowProfileEnd } from 'angular2/src/testing/benchmark_util'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; import {APP_VIEW_POOL_CAPACITY} from 'angular2/src/core/linker/view_pool'; function createProviders(): Provider[] { diff --git a/modules/playground/src/key_events/index.ts b/modules/playground/src/key_events/index.ts index c750946140..73af757b7e 100644 --- a/modules/playground/src/key_events/index.ts +++ b/modules/playground/src/key_events/index.ts @@ -1,6 +1,6 @@ import {bootstrap} from 'angular2/bootstrap'; import {Component, View} from 'angular2/core'; -import {KeyEventsPlugin} from 'angular2/src/core/render/dom/events/key_events'; +import {KeyEventsPlugin} from 'angular2/src/platform/dom/events/key_events'; @Component({selector: 'key-events-app'}) @View({ diff --git a/modules/playground/src/material/button/index.ts b/modules/playground/src/material/button/index.ts index 55a9dfbff0..7d0fe545d4 100644 --- a/modules/playground/src/material/button/index.ts +++ b/modules/playground/src/material/button/index.ts @@ -1,5 +1,6 @@ import {bootstrap} from 'angular2/bootstrap'; -import {bind, provide, Component, NgFor, UrlResolver, View, ViewEncapsulation} from 'angular2/core'; +import {bind, provide, Component, NgFor, View, ViewEncapsulation} from 'angular2/core'; +import {UrlResolver} from 'angular2/compiler'; import {MdButton, MdAnchor} from 'angular2_material/src/components/button/button'; import {commonDemoSetup, DemoUrlResolver} from '../demo_common'; diff --git a/modules/playground/src/material/checkbox/index.ts b/modules/playground/src/material/checkbox/index.ts index c2346e27c2..7e0d705a1b 100644 --- a/modules/playground/src/material/checkbox/index.ts +++ b/modules/playground/src/material/checkbox/index.ts @@ -1,13 +1,6 @@ import {bootstrap} from 'angular2/bootstrap'; -import { - bind, - provide, - Component, - Directive, - UrlResolver, - View, - ViewEncapsulation -} from 'angular2/core'; +import {bind, provide, Component, Directive, View, ViewEncapsulation} from 'angular2/core'; +import {UrlResolver} from 'angular2/compiler'; import {MdCheckbox} from 'angular2_material/src/components/checkbox/checkbox'; import {commonDemoSetup, DemoUrlResolver} from '../demo_common'; diff --git a/modules/playground/src/material/demo_common.dart b/modules/playground/src/material/demo_common.dart index 7101fd5a3a..b8a5f095a4 100644 --- a/modules/playground/src/material/demo_common.dart +++ b/modules/playground/src/material/demo_common.dart @@ -1,6 +1,6 @@ library angular2_examples.material.demo_common; -import 'package:angular2/src/core/dom/browser_adapter.dart'; +import 'package:angular2/src/platform/browser/browser_adapter.dart'; import 'package:angular2/src/compiler/url_resolver.dart'; void commonDemoSetup() { diff --git a/modules/playground/src/material/demo_common.ts b/modules/playground/src/material/demo_common.ts index 8ccbd2a0bd..c378cda53d 100644 --- a/modules/playground/src/material/demo_common.ts +++ b/modules/playground/src/material/demo_common.ts @@ -3,7 +3,7 @@ import {UrlResolver} from 'angular2/src/compiler/url_resolver'; import {isPresent, isBlank, RegExpWrapper, StringWrapper} from 'angular2/src/facade/lang'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {Injectable} from 'angular2/core'; -import {BrowserDomAdapter} from 'angular2/src/core/dom/browser_adapter'; +import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'; export function commonDemoSetup(): void { diff --git a/modules/playground/src/material/dialog/index.ts b/modules/playground/src/material/dialog/index.ts index 65f8aaeb42..af7df74fd1 100644 --- a/modules/playground/src/material/dialog/index.ts +++ b/modules/playground/src/material/dialog/index.ts @@ -5,10 +5,10 @@ import { ElementRef, ComponentRef, Component, - UrlResolver, View, ViewEncapsulation } from 'angular2/core'; +import {UrlResolver} from 'angular2/compiler'; import { MdDialog, MdDialogRef, diff --git a/modules/playground/src/material/grid_list/index.ts b/modules/playground/src/material/grid_list/index.ts index b29fa934e7..1bbb17f48f 100644 --- a/modules/playground/src/material/grid_list/index.ts +++ b/modules/playground/src/material/grid_list/index.ts @@ -1,6 +1,7 @@ import {bootstrap} from 'angular2/bootstrap'; -import {bind, provide, Component, UrlResolver, View, ViewEncapsulation} from 'angular2/core'; +import {bind, provide, Component, View, ViewEncapsulation} from 'angular2/core'; import {MdGridList, MdGridTile} from 'angular2_material/src/components/grid_list/grid_list'; +import {UrlResolver} from 'angular2/compiler'; import {commonDemoSetup, DemoUrlResolver} from '../demo_common'; diff --git a/modules/playground/src/material/input/index.ts b/modules/playground/src/material/input/index.ts index 8f70546ed2..38a55ff721 100644 --- a/modules/playground/src/material/input/index.ts +++ b/modules/playground/src/material/input/index.ts @@ -1,6 +1,7 @@ import {bootstrap} from 'angular2/bootstrap'; -import {bind, provide, Component, UrlResolver, View, ViewEncapsulation} from 'angular2/core'; +import {bind, provide, Component, View, ViewEncapsulation} from 'angular2/core'; import {MdInputContainer, MdInput} from 'angular2_material/src/components/input/input'; +import {UrlResolver} from 'angular2/compiler'; import {commonDemoSetup, DemoUrlResolver} from '../demo_common'; @Component({selector: 'demo-app'}) diff --git a/modules/playground/src/material/radio/index.ts b/modules/playground/src/material/radio/index.ts index 4ecdd7a8c9..9f7a5f275b 100644 --- a/modules/playground/src/material/radio/index.ts +++ b/modules/playground/src/material/radio/index.ts @@ -1,5 +1,6 @@ import {bootstrap} from 'angular2/bootstrap'; -import {bind, provide, Component, UrlResolver, View, ViewEncapsulation} from 'angular2/core'; +import {bind, provide, Component, View, ViewEncapsulation} from 'angular2/core'; +import {UrlResolver} from 'angular2/compiler'; import {MdRadioButton, MdRadioGroup} from 'angular2_material/src/components/radio/radio_button'; import {MdRadioDispatcher} from 'angular2_material/src/components/radio/radio_dispatcher'; import {commonDemoSetup, DemoUrlResolver} from '../demo_common'; diff --git a/modules/playground/src/web_workers/todo/server_index.dart b/modules/playground/src/web_workers/todo/server_index.dart index 21416aa5a5..295e034a49 100644 --- a/modules/playground/src/web_workers/todo/server_index.dart +++ b/modules/playground/src/web_workers/todo/server_index.dart @@ -6,7 +6,7 @@ import "package:angular2/src/web_workers/worker/application_common.dart" import 'dart:io'; import "package:angular2/src/core/reflection/reflection_capabilities.dart"; import "package:angular2/src/core/reflection/reflection.dart"; -import "package:angular2/src/core/dom/html_adapter.dart"; +import "package:angular2/src/platform/server/html_adapter.dart"; void main() { Html5LibDomAdapter.makeCurrent(); diff --git a/modules_dart/transform/lib/src/transform/common/url_resolver.dart b/modules_dart/transform/lib/src/transform/common/url_resolver.dart index b8613f334f..494202bc55 100644 --- a/modules_dart/transform/lib/src/transform/common/url_resolver.dart +++ b/modules_dart/transform/lib/src/transform/common/url_resolver.dart @@ -1,6 +1,6 @@ library angular2.transform.template_compiler.url_resolver; -import 'package:angular2/src/core/services.dart'; +import 'package:angular2/compiler.dart'; import 'package:barback/barback.dart'; class TransformerUrlResolver implements UrlResolver { diff --git a/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart b/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart index 88a8733d5f..143e9ebe4f 100644 --- a/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart +++ b/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart @@ -2,7 +2,7 @@ library angular2.transform.directive_metadata_linker.ng_deps_linker; import 'dart:async'; -import 'package:angular2/src/core/services.dart'; +import 'package:angular2/compiler.dart' show UrlResolver; import 'package:angular2/src/transform/common/asset_reader.dart'; import 'package:angular2/src/transform/common/logging.dart'; import 'package:angular2/src/transform/common/names.dart'; diff --git a/modules_dart/transform/lib/src/transform/directive_processor/transformer.dart b/modules_dart/transform/lib/src/transform/directive_processor/transformer.dart index 47b68cc56d..de31b4ea24 100644 --- a/modules_dart/transform/lib/src/transform/directive_processor/transformer.dart +++ b/modules_dart/transform/lib/src/transform/directive_processor/transformer.dart @@ -5,7 +5,7 @@ import 'dart:convert'; import 'package:barback/barback.dart'; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import 'package:angular2/src/transform/common/asset_reader.dart'; import 'package:angular2/src/transform/common/names.dart'; import 'package:angular2/src/transform/common/options.dart'; diff --git a/modules_dart/transform/lib/src/transform/stylesheet_compiler/transformer.dart b/modules_dart/transform/lib/src/transform/stylesheet_compiler/transformer.dart index d3b8f28551..ec52a41bd0 100644 --- a/modules_dart/transform/lib/src/transform/stylesheet_compiler/transformer.dart +++ b/modules_dart/transform/lib/src/transform/stylesheet_compiler/transformer.dart @@ -4,7 +4,7 @@ import 'dart:async'; import 'package:barback/barback.dart'; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import 'package:angular2/src/transform/common/asset_reader.dart'; import 'package:angular2/src/transform/common/names.dart'; import 'package:angular2/src/transform/common/zone.dart' as zone; diff --git a/modules_dart/transform/lib/src/transform/template_compiler/transformer.dart b/modules_dart/transform/lib/src/transform/template_compiler/transformer.dart index 49a3d92c96..b2ee438233 100644 --- a/modules_dart/transform/lib/src/transform/template_compiler/transformer.dart +++ b/modules_dart/transform/lib/src/transform/template_compiler/transformer.dart @@ -4,7 +4,7 @@ import 'dart:async'; import 'package:barback/barback.dart'; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import 'package:angular2/src/transform/common/asset_reader.dart'; import 'package:angular2/src/transform/common/code/ng_deps_code.dart'; import 'package:angular2/src/transform/common/formatter.dart'; diff --git a/modules_dart/transform/test/transform/directive_processor/all_tests.dart b/modules_dart/transform/test/transform/directive_processor/all_tests.dart index 3adae444b6..5075ac2789 100644 --- a/modules_dart/transform/test/transform/directive_processor/all_tests.dart +++ b/modules_dart/transform/test/transform/directive_processor/all_tests.dart @@ -7,7 +7,7 @@ import 'package:dart_style/dart_style.dart'; import 'package:guinness/guinness.dart'; import 'package:angular2/src/core/change_detection/change_detection.dart'; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import 'package:angular2/src/core/linker/interfaces.dart' show LifecycleHooks; import 'package:angular2/src/transform/common/annotation_matcher.dart'; import 'package:angular2/src/transform/common/asset_reader.dart'; diff --git a/modules_dart/transform/test/transform/integration/all_tests.dart b/modules_dart/transform/test/transform/integration/all_tests.dart index 5a54b5743b..dc6e4a561f 100644 --- a/modules_dart/transform/test/transform/integration/all_tests.dart +++ b/modules_dart/transform/test/transform/integration/all_tests.dart @@ -1,6 +1,6 @@ library angular2.test.transform.integration; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import 'package:angular2/transformer.dart'; import 'package:code_transformers/tests.dart'; import 'package:dart_style/dart_style.dart'; diff --git a/modules_dart/transform/test/transform/template_compiler/all_tests.dart b/modules_dart/transform/test/transform/template_compiler/all_tests.dart index 469e5a7109..57a0fcbab9 100644 --- a/modules_dart/transform/test/transform/template_compiler/all_tests.dart +++ b/modules_dart/transform/test/transform/template_compiler/all_tests.dart @@ -10,7 +10,7 @@ import 'package:guinness/guinness.dart'; import 'package:angular2/src/core/change_detection/codegen_name_util.dart' show CONTEXT_ACCESSOR; -import 'package:angular2/src/core/dom/html_adapter.dart'; +import 'package:angular2/src/platform/server/html_adapter.dart'; import 'package:angular2/src/transform/template_compiler/generator.dart'; import 'package:angular2/src/transform/common/zone.dart' as zone; diff --git a/test-init.dart b/test-init.dart index 232c8568c5..c820485f9c 100644 --- a/test-init.dart +++ b/test-init.dart @@ -1,4 +1,4 @@ -import 'package:angular2/src/core/dom/browser_adapter.dart'; +import 'package:angular2/src/platform/browser/browser_adapter.dart'; main() { BrowserDomAdapter.makeCurrent(); diff --git a/test-main.js b/test-main.js index 144930c51e..49a9fabd1d 100644 --- a/test-main.js +++ b/test-main.js @@ -21,7 +21,7 @@ System.config({ window.angularDevMode = true; // Import all the specs, execute their `main()` method and kick off Karma (Jasmine). -System.import('angular2/src/core/dom/browser_adapter').then(function(browser_adapter) { +System.import('angular2/src/platform/browser/browser_adapter').then(function(browser_adapter) { browser_adapter.BrowserDomAdapter.makeCurrent(); }).then(function() { return Promise.all( diff --git a/tools/broccoli/broccoli-check-imports.ts b/tools/broccoli/broccoli-check-imports.ts new file mode 100644 index 0000000000..0844607ba3 --- /dev/null +++ b/tools/broccoli/broccoli-check-imports.ts @@ -0,0 +1,113 @@ +import fs = require('fs'); +import fse = require('fs-extra'); +import path = require('path'); +import {wrapDiffingPlugin, DiffingBroccoliPlugin, DiffResult} from './diffing-broccoli-plugin'; + +/** + * Checks that modules do not import files that are not supposed to import. + * + * This guarantees that platform-independent modules remain platoform-independent. + */ +class CheckImports implements DiffingBroccoliPlugin { + static IMPORT_DECL_REGEXP = new RegExp(`^import[^;]+;`, "mg"); + static IMPORT_PATH_REGEXP = new RegExp(`['"]([^'"]+)+['"]`, "m"); + + static ALLOWED_IMPORTS = { + "angular2/src/core": [ + "angular2/src/core", + "angular2/src/facade", + ], + "angular2/src/facade": ["angular2/src/facade", "@reactivex/rxjs"], + // enable these + //"angular2/src/common": [ + // "angular2/core", + // "angular2/src/facade", + // "angular2/src/common" + //], + //"angular2/src/render": [ + // "angular2/animate", + // "angular2/core", + // "angular2/src/facade", + //] + }; + + private initRun = true; + + constructor(private inputPath, private cachePath, private options) {} + + rebuild(treeDiff: DiffResult) { + const errors = this.checkAllPaths(treeDiff); + if (errors.length > 0) { + throw new Error( + `The following imports are not allowed because they break barrel boundaries:\n${errors.join("\n")}`); + } + this.symlinkInputAndCacheIfNeeded(); + return treeDiff; + } + + private checkAllPaths(treeDiff: DiffResult) { + const changesFiles = treeDiff.addedPaths.concat(treeDiff.changedPaths); + return flatMap(changesFiles, _ => this.checkFilePath(_)); + } + + private symlinkInputAndCacheIfNeeded() { + if (this.initRun) { + fs.rmdirSync(this.cachePath); + fs.symlinkSync(this.inputPath, this.cachePath); + } + this.initRun = false; + } + + private checkFilePath(filePath: string) { + const sourceFilePath = path.join(this.inputPath, filePath); + if (endsWith(sourceFilePath, ".ts") && fs.existsSync(sourceFilePath)) { + const content = fs.readFileSync(sourceFilePath, "UTF-8"); + const imports = content.match(CheckImports.IMPORT_DECL_REGEXP); + if (imports) { + return imports.filter(i => !this.isAllowedImport(filePath, i)) + .map(i => this.formatError(filePath, i)); + } else { + return []; + } + } + return []; + } + + private isAllowedImport(sourceFile: string, importDecl: string): boolean { + const res = CheckImports.IMPORT_PATH_REGEXP.exec(importDecl); + if (!res || res.length < 2) return true; // non-es6 import + const importPath = res[1]; + + if (startsWith(importPath, "./") || startsWith(importPath, "../")) return true; + + const c = CheckImports.ALLOWED_IMPORTS; + for (var prop in c) { + if (c.hasOwnProperty(prop) && startsWith(sourceFile, prop)) { + const allowedPaths = c[prop]; + return allowedPaths.filter(p => startsWith(importPath, p)).length > 0; + } + } + + return true; + } + + private formatError(filePath: string, importPath: string): string { + const i = importPath.replace(new RegExp(`\n`, 'g'), "\\n"); + return `${filePath}: ${i}`; + } +} + + +function startsWith(str: string, substring: string): boolean { + return str.substring(0, substring.length) === substring; +} + +function endsWith(str: string, substring: string): boolean { + return str.indexOf(substring, str.length - substring.length) !== -1; +} + +function flatMap(arr: T[], fn: (t: T) => U[]): U[] { + return [].concat(...arr.map(fn)); +} + +export default wrapDiffingPlugin(CheckImports); diff --git a/tools/broccoli/trees/browser_tree.ts b/tools/broccoli/trees/browser_tree.ts index c72665954b..e7976db0ab 100644 --- a/tools/broccoli/trees/browser_tree.ts +++ b/tools/broccoli/trees/browser_tree.ts @@ -11,6 +11,7 @@ import destCopy from '../broccoli-dest-copy'; import flatten from '../broccoli-flatten'; import mergeTrees from '../broccoli-merge-trees'; import replace from '../broccoli-replace'; +import checkImports from '../broccoli-check-imports'; const kServedPaths = [ @@ -133,6 +134,9 @@ module.exports = function makeBrowserTree(options, destinationPath) { } }; + // Check that imports do not break barrel boundaries + modulesTree = checkImports(modulesTree); + modulesTree = replace(modulesTree, { files: ["playground*/**/*.js"], patterns: [{match: /\$SCRIPTS\$/, replacement: jsReplace('SCRIPTS')}] diff --git a/tools/broccoli/trees/node_tree.ts b/tools/broccoli/trees/node_tree.ts index ef45433c5c..4e2f9f4d29 100644 --- a/tools/broccoli/trees/node_tree.ts +++ b/tools/broccoli/trees/node_tree.ts @@ -89,8 +89,9 @@ module.exports = function makeNodeTree(projects, destinationPath) { { match: /^/, replacement: - () => `var parse5Adapter = require('angular2/src/core/dom/parse5_adapter');\r\n` + - `parse5Adapter.Parse5DomAdapter.makeCurrent();` + () => + `var parse5Adapter = require('angular2/src/platform/server/parse5_adapter');\r\n` + + `parse5Adapter.Parse5DomAdapter.makeCurrent();` }, {match: /$/, replacement: (_, relativePath) => "\r\n main(); \r\n"} ]