This repository was archived by the owner on Nov 22, 2024. It is now read-only.
File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,3 +4,9 @@ declare module "xhr2" {
44 nodejsSet ( url : any ) : any ;
55 }
66}
7+
8+ declare module NodeJS {
9+ interface Global {
10+ window : any | Window ;
11+ }
12+ }
Original file line number Diff line number Diff line change 1+ var window = require ( './dist/server/src/node/mock/window' ) ;
2+ global . window = window ;
Original file line number Diff line number Diff line change 1+ import { DOM } from 'angular2/src/platform/dom/dom_adapter' ;
2+ import { provide } from 'angular2/core' ;
3+
4+ // the overloaded "window" must extend node's "global"
5+ // see: https://github.com/angular/angular/blob/master/modules/angular2/src/facade/lang.ts#L38
6+ var win = Object . create ( global ) ;
7+
8+ /**
9+ * Warn the developer about direct access to Window props
10+ * @param {String } prop The property being accessed
11+ */
12+ function beDefensive ( prop ) {
13+ return ( < any > win ) . __defineGetter__ ( prop , ( ) => {
14+ console . warn ( `[WARNING] Property/method "${ prop } " should not be called directly. Use DomAdapter instead.` ) ;
15+
16+ // TODO(wassim): find a generic solution to proxify DomAdapter
17+ // let doc = DOM.defaultDoc();
18+ // return DOM.querySelector(doc, ...args);
19+ return prop ;
20+ } ) ;
21+ }
22+
23+ let unforgeableAttributes = [
24+ "window" ,
25+ "document" ,
26+ "location" ,
27+ "top"
28+ ] . map ( beDefensive ) ;
29+
30+ let replaceableAttributes = [
31+ "self" ,
32+ "locationbar" ,
33+ "menubar" ,
34+ "personalbar" ,
35+ "scrollbars" ,
36+ "statusbar" ,
37+ "toolbar" ,
38+ "frames" ,
39+ "parent" ,
40+ "external" ,
41+ "length" ,
42+
43+ // CSSOM-View
44+ "screen" ,
45+ "scrollX" ,
46+ "scrollY" ,
47+ "pageXOffset" ,
48+ "pageYOffset" ,
49+ "innerWidth" ,
50+ "innerHeight" ,
51+ "screenX" ,
52+ "screenY" ,
53+ "outerWidth" ,
54+ "outerHeight" ,
55+ "devicePixelRatio" ,
56+ ] . map ( beDefensive ) ;
57+
58+ let methods = [
59+ "close" ,
60+ "stop" ,
61+ "focus" ,
62+ "blur" ,
63+ "open" ,
64+ "alert" ,
65+ "confirm" ,
66+ "prompt" ,
67+ "print" ,
68+ "postMessage" ,
69+
70+ // WindowBase64
71+ "btoa" ,
72+ "atob" ,
73+
74+ // WindowTimers
75+ "setTimeout" ,
76+ "clearTimeout" ,
77+ "setInterval" ,
78+ "clearInterval" ,
79+
80+ // HTML Editing APIs
81+ "getSelection" ,
82+
83+ // CSSOM
84+ "getComputedStyle" ,
85+
86+ // CSSOM-View
87+ "matchMedia" ,
88+ "scroll" ,
89+ "scrollTo" ,
90+ "scrollBy"
91+ ] . map ( beDefensive ) ;
92+
93+ let readonlyAttributes = [
94+ "history" ,
95+ "frameElement" ,
96+ "navigator" ,
97+ "applicationCache" ,
98+
99+ // WindowSessionStorage
100+ "sessionStorage" ,
101+
102+ // WindowLocalStorage
103+ "localStorage" ,
104+ ] . map ( beDefensive ) ;
105+
106+ let writableAttributes = [
107+ "name" ,
108+ "status" ,
109+ "opener" ,
110+ "onabort" ,
111+ "onafterprint" ,
112+ "onbeforeprint" ,
113+ "onbeforeunload" ,
114+ "onblur" ,
115+ "oncancel" ,
116+ "oncanplay" ,
117+ "oncanplaythrough" ,
118+ "onchange" ,
119+ "onclick" ,
120+ "onclose" ,
121+ "oncontextmenu" ,
122+ "oncuechange" ,
123+ "ondblclick" ,
124+ "ondrag" ,
125+ "ondragend" ,
126+ "ondragenter" ,
127+ "ondragleave" ,
128+ "ondragover" ,
129+ "ondragstart" ,
130+ "ondrop" ,
131+ "ondurationchange" ,
132+ "onemptied" ,
133+ "onended" ,
134+ "onerror" ,
135+ "onfocus" ,
136+ "onhashchange" ,
137+ "oninput" ,
138+ "oninvalid" ,
139+ "onkeydown" ,
140+ "onkeypress" ,
141+ "onkeyup" ,
142+ "onload" ,
143+ "onloadeddata" ,
144+ "onloadedmetadata" ,
145+ "onloadstart" ,
146+ "onmessage" ,
147+ "onmousedown" ,
148+ "onmousemove" ,
149+ "onmouseout" ,
150+ "onmouseover" ,
151+ "onmouseup" ,
152+ "onmousewheel" ,
153+ "onoffline" ,
154+ "ononline" ,
155+ "onpause" ,
156+ "onplay" ,
157+ "onplaying" ,
158+ "onpagehide" ,
159+ "onpageshow" ,
160+ "onpopstate" ,
161+ "onprogress" ,
162+ "onratechange" ,
163+ "onreset" ,
164+ "onresize" ,
165+ "onscroll" ,
166+ "onseeked" ,
167+ "onseeking" ,
168+ "onselect" ,
169+ "onshow" ,
170+ "onstalled" ,
171+ "onstorage" ,
172+ "onsubmit" ,
173+ "onsuspend" ,
174+ "ontimeupdate" ,
175+ "onunload" ,
176+ "onvolumechange" ,
177+ "onwaiting"
178+ ] . map ( beDefensive ) ;
179+
180+ export var window = win ;
181+ global . window = win ;
182+ GLOBAL . window = win ;
You can’t perform that action at this time.
0 commit comments