@samitouri / QOS-React / commits / 2baa3b7d2f

Update examples for v15

- Update commonjs example to use Babel 6 - Update click counter example to match other examples - Update jquery example - Stop shipping webcomponents.js in starter kit

Paul O’Shannessy committed Mar 24, 2016 at 16:40 UTC 2baa3b7d2f1655f792b86599220bea7888276666
7 files changed +56 -6402
examples/basic-click-counter/index.html
+31 -10
@@ -2,31 +2,52 @@
2 <html>
3 <head>
4 <meta charset="utf-8">
5 - <title>Basic Example with Click Counter</title>
5 + <title>Basic Click Counter Example with JSX</title>
6 + <link rel="stylesheet" href="../shared/css/base.css" />
7 + </head>
8 + <body>
9 + <h1>Basic Click Counter Example with JSX</h1>
10 + <div id="container">
11 + <p>
12 + To install React, follow the instructions on
13 + <a href="https://github.com/facebook/react/">GitHub</a>.
14 + </p>
15 + <p>
16 + If you can see this, React is <strong>not</strong> working right.
17 + If you checked out the source from GitHub make sure to run <code>grunt</code>.
18 + </p>
19 + </div>
20 + <h4>Example Details</h4>
21 + <p>This is written with JSX and transformed in the browser.</p>
22 + <p>This example uses events and state to track clicks and update the rendered output.</p>
23 + <p>
24 + Learn more about React at
25 + <a href="https://facebook.github.io/react" target="_blank">facebook.github.io/react</a>.
26 + </p>
27 <script src="../../build/react.js"></script>
28 <script src="../../build/react-dom.js"></script>
29 <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
9 - </head>
10 - <body>
11 - <div id="message" align="center"></div>
12 -
30 <script type="text/babel">
31 var Counter = React.createClass({
32 getInitialState: function () {
16 - return { clickCount: 0 };
33 + return { count: 0 };
34 },
35 handleClick: function () {
19 - this.setState(function(state) {
20 - return {clickCount: state.clickCount + 1};
36 + this.setState({
37 + count: this.state.count + 1,
38 });
39 },
40 render: function () {
24 - return (<h2 onClick={this.handleClick}>Click me! Number of clicks: {this.state.clickCount}</h2>);
41 + return (
42 + <button onClick={this.handleClick}>
43 + Click me! Number of clicks: {this.state.count}
44 + </button>
45 + );
46 }
47 });
48 ReactDOM.render(
49 <Counter />,
29 - document.getElementById('message')
50 + document.getElementById('container')
51 );
52 </script>
53 </body>
examples/basic-commonjs/.babelrc new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "presets": ["react", "es2015"]
3 +}
examples/basic-commonjs/package.json
+6 -3
@@ -1,12 +1,15 @@
1 {
2 "name": "react-basic-commonjs-example",
3 "description": "Basic example of using React with CommonJS",
4 + "private": true,
5 "main": "index.js",
6 "dependencies": {
6 - "babelify": "^6.3.0",
7 + "babel-preset-es2015": "^6.6.0",
8 + "babel-preset-react": "^6.5.0",
9 + "babelify": "^7.2.0",
10 "browserify": "^11.0.1",
8 - "react": "^0.14.0-rc1",
9 - "react-dom": "^0.14.0-rc1",
11 + "react": "15.0.0-rc.2",
12 + "react-dom": "15.0.0-rc.2",
13 "watchify": "^3.4.0"
14 },
15 "scripts": {
examples/jquery-bootstrap/index.html
+13 -12
@@ -1,19 +1,20 @@
1 <!doctype html>
2 <html lang="en">
3 -<head>
4 - <meta charset="utf-8">
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6 - <title>jQuery Integration</title>
7 - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" type="text/css" />
8 - <link rel="stylesheet" href="css/example.css" type="text/css" />
9 -</head>
10 -<body>
3 + <head>
4 + <meta charset="utf-8">
5 + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6 + <title>jQuery Integration</title>
7 + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
8 + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
9 + <link rel="stylesheet" href="css/example.css" type="text/css" />
10 + </head>
11 + <body>
12 <div id="jqueryexample"></div>
13 <script src="../../build/react.js"></script>
13 - <script src="../../build/react-dom.js"></script>
14 + <script src="../../build/react-dom.js"></script>
15 <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
15 - <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js" charset="utf-8"></script>
16 - <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js" charset="utf-8"></script>
16 + <script src="http://code.jquery.com/jquery-2.2.2.min.js"></script>
17 + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
18 <script type="text/babel" src="js/app.js"></script>
18 -</body>
19 + </body>
20 </html>
examples/jquery-mobile/index.html
+1 -1
@@ -10,7 +10,7 @@
10 </head>
11 <body class="ui-mobile-viewport ui-overlay-a">
12 <div id="content"></div>
13 - <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
13 + <script src="http://code.jquery.com/jquery-2.2.2.min.js"></script>
14 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mobile/1.4.5/jquery.mobile.min.js"></script>
15 <script src="../../build/react.js"></script>
16 <script src="../../build/react-dom.js"></script>
examples/shared/thirdparty/webcomponents.js deleted
-6374
@@ -1,6374 +0,0 @@
1 -/**
2 - * @license
3 - * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
4 - * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
5 - * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
6 - * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
7 - * Code distributed by Google as part of the polymer project is also
8 - * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
9 - */
10 -// @version 0.5.1
11 -window.WebComponents = window.WebComponents || {};
12 -
13 -(function(scope) {
14 - var flags = scope.flags || {};
15 - var file = "webcomponents.js";
16 - var script = document.querySelector('script[src*="' + file + '"]');
17 - var flags = {};
18 - if (!flags.noOpts) {
19 - location.search.slice(1).split("&").forEach(function(o) {
20 - o = o.split("=");
21 - o[0] && (flags[o[0]] = o[1] || true);
22 - });
23 - if (script) {
24 - for (var i = 0, a; a = script.attributes[i]; i++) {
25 - if (a.name !== "src") {
26 - flags[a.name] = a.value || true;
27 - }
28 - }
29 - }
30 - if (flags.log) {
31 - var parts = flags.log.split(",");
32 - flags.log = {};
33 - parts.forEach(function(f) {
34 - flags.log[f] = true;
35 - });
36 - } else {
37 - flags.log = {};
38 - }
39 - }
40 - flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;
41 - if (flags.shadow === "native") {
42 - flags.shadow = false;
43 - } else {
44 - flags.shadow = flags.shadow || !HTMLElement.prototype.createShadowRoot;
45 - }
46 - if (flags.register) {
47 - window.CustomElements = window.CustomElements || {
48 - flags: {}
49 - };
50 - window.CustomElements.flags.register = flags.register;
51 - }
52 - scope.flags = flags;
53 -})(WebComponents);
54 -
55 -if (WebComponents.flags.shadow) {
56 - if (typeof WeakMap === "undefined") {
57 - (function() {
58 - var defineProperty = Object.defineProperty;
59 - var counter = Date.now() % 1e9;
60 - var WeakMap = function() {
61 - this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
62 - };
63 - WeakMap.prototype = {
64 - set: function(key, value) {
65 - var entry = key[this.name];
66 - if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
67 - value: [ key, value ],
68 - writable: true
69 - });
70 - return this;
71 - },
72 - get: function(key) {
73 - var entry;
74 - return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
75 - },
76 - "delete": function(key) {
77 - var entry = key[this.name];
78 - if (!entry || entry[0] !== key) return false;
79 - entry[0] = entry[1] = undefined;
80 - return true;
81 - },
82 - has: function(key) {
83 - var entry = key[this.name];
84 - if (!entry) return false;
85 - return entry[0] === key;
86 - }
87 - };
88 - window.WeakMap = WeakMap;
89 - })();
90 - }
91 - window.ShadowDOMPolyfill = {};
92 - (function(scope) {
93 - "use strict";
94 - var constructorTable = new WeakMap();
95 - var nativePrototypeTable = new WeakMap();
96 - var wrappers = Object.create(null);
97 - function detectEval() {
98 - if (typeof chrome !== "undefined" && chrome.app && chrome.app.runtime) {
99 - return false;
100 - }
101 - if (navigator.getDeviceStorage) {
102 - return false;
103 - }
104 - try {
105 - var f = new Function("return true;");
106 - return f();
107 - } catch (ex) {
108 - return false;
109 - }
110 - }
111 - var hasEval = detectEval();
112 - function assert(b) {
113 - if (!b) throw new Error("Assertion failed");
114 - }
115 - var defineProperty = Object.defineProperty;
116 - var getOwnPropertyNames = Object.getOwnPropertyNames;
117 - var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
118 - function mixin(to, from) {
119 - var names = getOwnPropertyNames(from);
120 - for (var i = 0; i < names.length; i++) {
121 - var name = names[i];
122 - defineProperty(to, name, getOwnPropertyDescriptor(from, name));
123 - }
124 - return to;
125 - }
126 - function mixinStatics(to, from) {
127 - var names = getOwnPropertyNames(from);
128 - for (var i = 0; i < names.length; i++) {
129 - var name = names[i];
130 - switch (name) {
131 - case "arguments":
132 - case "caller":
133 - case "length":
134 - case "name":
135 - case "prototype":
136 - case "toString":
137 - continue;
138 - }
139 - defineProperty(to, name, getOwnPropertyDescriptor(from, name));
140 - }
141 - return to;
142 - }
143 - function oneOf(object, propertyNames) {
144 - for (var i = 0; i < propertyNames.length; i++) {
145 - if (propertyNames[i] in object) return propertyNames[i];
146 - }
147 - }
148 - var nonEnumerableDataDescriptor = {
149 - value: undefined,
150 - configurable: true,
151 - enumerable: false,
152 - writable: true
153 - };
154 - function defineNonEnumerableDataProperty(object, name, value) {
155 - nonEnumerableDataDescriptor.value = value;
156 - defineProperty(object, name, nonEnumerableDataDescriptor);
157 - }
158 - getOwnPropertyNames(window);
159 - function getWrapperConstructor(node) {
160 - var nativePrototype = node.__proto__ || Object.getPrototypeOf(node);
161 - var wrapperConstructor = constructorTable.get(nativePrototype);
162 - if (wrapperConstructor) return wrapperConstructor;
163 - var parentWrapperConstructor = getWrapperConstructor(nativePrototype);
164 - var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);
165 - registerInternal(nativePrototype, GeneratedWrapper, node);
166 - return GeneratedWrapper;
167 - }
168 - function addForwardingProperties(nativePrototype, wrapperPrototype) {
169 - installProperty(nativePrototype, wrapperPrototype, true);
170 - }
171 - function registerInstanceProperties(wrapperPrototype, instanceObject) {
172 - installProperty(instanceObject, wrapperPrototype, false);
173 - }
174 - var isFirefox = /Firefox/.test(navigator.userAgent);
175 - var dummyDescriptor = {
176 - get: function() {},
177 - set: function(v) {},
178 - configurable: true,
179 - enumerable: true
180 - };
181 - function isEventHandlerName(name) {
182 - return /^on[a-z]+$/.test(name);
183 - }
184 - function isIdentifierName(name) {
185 - return /^\w[a-zA-Z_0-9]*$/.test(name);
186 - }
187 - function getGetter(name) {
188 - return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name) : function() {
189 - return this.__impl4cf1e782hg__[name];
190 - };
191 - }
192 - function getSetter(name) {
193 - return hasEval && isIdentifierName(name) ? new Function("v", "this.__impl4cf1e782hg__." + name + " = v") : function(v) {
194 - this.__impl4cf1e782hg__[name] = v;
195 - };
196 - }
197 - function getMethod(name) {
198 - return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name + ".apply(this.__impl4cf1e782hg__, arguments)") : function() {
199 - return this.__impl4cf1e782hg__[name].apply(this.__impl4cf1e782hg__, arguments);
200 - };
201 - }
202 - function getDescriptor(source, name) {
203 - try {
204 - return Object.getOwnPropertyDescriptor(source, name);
205 - } catch (ex) {
206 - return dummyDescriptor;
207 - }
208 - }
209 - var isBrokenSafari = function() {
210 - var descr = Object.getOwnPropertyDescriptor(Node.prototype, "nodeType");
211 - return descr && !descr.get && !descr.set;
212 - }();
213 - function installProperty(source, target, allowMethod, opt_blacklist) {
214 - var names = getOwnPropertyNames(source);
215 - for (var i = 0; i < names.length; i++) {
216 - var name = names[i];
217 - if (name === "polymerBlackList_") continue;
218 - if (name in target) continue;
219 - if (source.polymerBlackList_ && source.polymerBlackList_[name]) continue;
220 - if (isFirefox) {
221 - source.__lookupGetter__(name);
222 - }
223 - var descriptor = getDescriptor(source, name);
224 - var getter, setter;
225 - if (allowMethod && typeof descriptor.value === "function") {
226 - target[name] = getMethod(name);
227 - continue;
228 - }
229 - var isEvent = isEventHandlerName(name);
230 - if (isEvent) getter = scope.getEventHandlerGetter(name); else getter = getGetter(name);
231 - if (descriptor.writable || descriptor.set || isBrokenSafari) {
232 - if (isEvent) setter = scope.getEventHandlerSetter(name); else setter = getSetter(name);
233 - }
234 - defineProperty(target, name, {
235 - get: getter,
236 - set: setter,
237 - configurable: descriptor.configurable,
238 - enumerable: descriptor.enumerable
239 - });
240 - }
241 - }
242 - function register(nativeConstructor, wrapperConstructor, opt_instance) {
243 - var nativePrototype = nativeConstructor.prototype;
244 - registerInternal(nativePrototype, wrapperConstructor, opt_instance);
245 - mixinStatics(wrapperConstructor, nativeConstructor);
246 - }
247 - function registerInternal(nativePrototype, wrapperConstructor, opt_instance) {
248 - var wrapperPrototype = wrapperConstructor.prototype;
249 - assert(constructorTable.get(nativePrototype) === undefined);
250 - constructorTable.set(nativePrototype, wrapperConstructor);
251 - nativePrototypeTable.set(wrapperPrototype, nativePrototype);
252 - addForwardingProperties(nativePrototype, wrapperPrototype);
253 - if (opt_instance) registerInstanceProperties(wrapperPrototype, opt_instance);
254 - defineNonEnumerableDataProperty(wrapperPrototype, "constructor", wrapperConstructor);
255 - wrapperConstructor.prototype = wrapperPrototype;
256 - }
257 - function isWrapperFor(wrapperConstructor, nativeConstructor) {
258 - return constructorTable.get(nativeConstructor.prototype) === wrapperConstructor;
259 - }
260 - function registerObject(object) {
261 - var nativePrototype = Object.getPrototypeOf(object);
262 - var superWrapperConstructor = getWrapperConstructor(nativePrototype);
263 - var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);
264 - registerInternal(nativePrototype, GeneratedWrapper, object);
265 - return GeneratedWrapper;
266 - }
267 - function createWrapperConstructor(superWrapperConstructor) {
268 - function GeneratedWrapper(node) {
269 - superWrapperConstructor.call(this, node);
270 - }
271 - var p = Object.create(superWrapperConstructor.prototype);
272 - p.constructor = GeneratedWrapper;
273 - GeneratedWrapper.prototype = p;
274 - return GeneratedWrapper;
275 - }
276 - function isWrapper(object) {
277 - return object && object.__impl4cf1e782hg__;
278 - }
279 - function isNative(object) {
280 - return !isWrapper(object);
281 - }
282 - function wrap(impl) {
283 - if (impl === null) return null;
284 - assert(isNative(impl));
285 - return impl.__wrapper8e3dd93a60__ || (impl.__wrapper8e3dd93a60__ = new (getWrapperConstructor(impl))(impl));
286 - }
287 - function unwrap(wrapper) {
288 - if (wrapper === null) return null;
289 - assert(isWrapper(wrapper));
290 - return wrapper.__impl4cf1e782hg__;
291 - }
292 - function unsafeUnwrap(wrapper) {
293 - return wrapper.__impl4cf1e782hg__;
294 - }
295 - function setWrapper(impl, wrapper) {
296 - wrapper.__impl4cf1e782hg__ = impl;
297 - impl.__wrapper8e3dd93a60__ = wrapper;
298 - }
299 - function unwrapIfNeeded(object) {
300 - return object && isWrapper(object) ? unwrap(object) : object;
301 - }
302 - function wrapIfNeeded(object) {
303 - return object && !isWrapper(object) ? wrap(object) : object;
304 - }
305 - function rewrap(node, wrapper) {
306 - if (wrapper === null) return;
307 - assert(isNative(node));
308 - assert(wrapper === undefined || isWrapper(wrapper));
309 - node.__wrapper8e3dd93a60__ = wrapper;
310 - }
311 - var getterDescriptor = {
312 - get: undefined,
313 - configurable: true,
314 - enumerable: true
315 - };
316 - function defineGetter(constructor, name, getter) {
317 - getterDescriptor.get = getter;
318 - defineProperty(constructor.prototype, name, getterDescriptor);
319 - }
320 - function defineWrapGetter(constructor, name) {
321 - defineGetter(constructor, name, function() {
322 - return wrap(this.__impl4cf1e782hg__[name]);
323 - });
324 - }
325 - function forwardMethodsToWrapper(constructors, names) {
326 - constructors.forEach(function(constructor) {
327 - names.forEach(function(name) {
328 - constructor.prototype[name] = function() {
329 - var w = wrapIfNeeded(this);
330 - return w[name].apply(w, arguments);
331 - };
332 - });
333 - });
334 - }
335 - scope.assert = assert;
336 - scope.constructorTable = constructorTable;
337 - scope.defineGetter = defineGetter;
338 - scope.defineWrapGetter = defineWrapGetter;
339 - scope.forwardMethodsToWrapper = forwardMethodsToWrapper;
340 - scope.isWrapper = isWrapper;
341 - scope.isWrapperFor = isWrapperFor;
342 - scope.mixin = mixin;
343 - scope.nativePrototypeTable = nativePrototypeTable;
344 - scope.oneOf = oneOf;
345 - scope.registerObject = registerObject;
346 - scope.registerWrapper = register;
347 - scope.rewrap = rewrap;
348 - scope.setWrapper = setWrapper;
349 - scope.unsafeUnwrap = unsafeUnwrap;
350 - scope.unwrap = unwrap;
351 - scope.unwrapIfNeeded = unwrapIfNeeded;
352 - scope.wrap = wrap;
353 - scope.wrapIfNeeded = wrapIfNeeded;
354 - scope.wrappers = wrappers;
355 - })(window.ShadowDOMPolyfill);
356 - (function(scope) {
357 - "use strict";
358 - function newSplice(index, removed, addedCount) {
359 - return {
360 - index: index,
361 - removed: removed,
362 - addedCount: addedCount
363 - };
364 - }
365 - var EDIT_LEAVE = 0;
366 - var EDIT_UPDATE = 1;
367 - var EDIT_ADD = 2;
368 - var EDIT_DELETE = 3;
369 - function ArraySplice() {}
370 - ArraySplice.prototype = {
371 - calcEditDistances: function(current, currentStart, currentEnd, old, oldStart, oldEnd) {
372 - var rowCount = oldEnd - oldStart + 1;
373 - var columnCount = currentEnd - currentStart + 1;
374 - var distances = new Array(rowCount);
375 - for (var i = 0; i < rowCount; i++) {
376 - distances[i] = new Array(columnCount);
377 - distances[i][0] = i;
378 - }
379 - for (var j = 0; j < columnCount; j++) distances[0][j] = j;
380 - for (var i = 1; i < rowCount; i++) {
381 - for (var j = 1; j < columnCount; j++) {
382 - if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1])) distances[i][j] = distances[i - 1][j - 1]; else {
383 - var north = distances[i - 1][j] + 1;
384 - var west = distances[i][j - 1] + 1;
385 - distances[i][j] = north < west ? north : west;
386 - }
387 - }
388 - }
389 - return distances;
390 - },
391 - spliceOperationsFromEditDistances: function(distances) {
392 - var i = distances.length - 1;
393 - var j = distances[0].length - 1;
394 - var current = distances[i][j];
395 - var edits = [];
396 - while (i > 0 || j > 0) {
397 - if (i == 0) {
398 - edits.push(EDIT_ADD);
399 - j--;
400 - continue;
401 - }
402 - if (j == 0) {
403 - edits.push(EDIT_DELETE);
404 - i--;
405 - continue;
406 - }
407 - var northWest = distances[i - 1][j - 1];
408 - var west = distances[i - 1][j];
409 - var north = distances[i][j - 1];
410 - var min;
411 - if (west < north) min = west < northWest ? west : northWest; else min = north < northWest ? north : northWest;
412 - if (min == northWest) {
413 - if (northWest == current) {
414 - edits.push(EDIT_LEAVE);
415 - } else {
416 - edits.push(EDIT_UPDATE);
417 - current = northWest;
418 - }
419 - i--;
420 - j--;
421 - } else if (min == west) {
422 - edits.push(EDIT_DELETE);
423 - i--;
424 - current = west;
425 - } else {
426 - edits.push(EDIT_ADD);
427 - j--;
428 - current = north;
429 - }
430 - }
431 - edits.reverse();
432 - return edits;
433 - },
434 - calcSplices: function(current, currentStart, currentEnd, old, oldStart, oldEnd) {
435 - var prefixCount = 0;
436 - var suffixCount = 0;
437 - var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
438 - if (currentStart == 0 && oldStart == 0) prefixCount = this.sharedPrefix(current, old, minLength);
439 - if (currentEnd == current.length && oldEnd == old.length) suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);
440 - currentStart += prefixCount;
441 - oldStart += prefixCount;
442 - currentEnd -= suffixCount;
443 - oldEnd -= suffixCount;
444 - if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0) return [];
445 - if (currentStart == currentEnd) {
446 - var splice = newSplice(currentStart, [], 0);
447 - while (oldStart < oldEnd) splice.removed.push(old[oldStart++]);
448 - return [ splice ];
449 - } else if (oldStart == oldEnd) return [ newSplice(currentStart, [], currentEnd - currentStart) ];
450 - var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));
451 - var splice = undefined;
452 - var splices = [];
453 - var index = currentStart;
454 - var oldIndex = oldStart;
455 - for (var i = 0; i < ops.length; i++) {
456 - switch (ops[i]) {
457 - case EDIT_LEAVE:
458 - if (splice) {
459 - splices.push(splice);
460 - splice = undefined;
461 - }
462 - index++;
463 - oldIndex++;
464 - break;
465 -
466 - case EDIT_UPDATE:
467 - if (!splice) splice = newSplice(index, [], 0);
468 - splice.addedCount++;
469 - index++;
470 - splice.removed.push(old[oldIndex]);
471 - oldIndex++;
472 - break;
473 -
474 - case EDIT_ADD:
475 - if (!splice) splice = newSplice(index, [], 0);
476 - splice.addedCount++;
477 - index++;
478 - break;
479 -
480 - case EDIT_DELETE:
481 - if (!splice) splice = newSplice(index, [], 0);
482 - splice.removed.push(old[oldIndex]);
483 - oldIndex++;
484 - break;
485 - }
486 - }
487 - if (splice) {
488 - splices.push(splice);
489 - }
490 - return splices;
491 - },
492 - sharedPrefix: function(current, old, searchLength) {
493 - for (var i = 0; i < searchLength; i++) if (!this.equals(current[i], old[i])) return i;
494 - return searchLength;
495 - },
496 - sharedSuffix: function(current, old, searchLength) {
497 - var index1 = current.length;
498 - var index2 = old.length;
499 - var count = 0;
500 - while (count < searchLength && this.equals(current[--index1], old[--index2])) count++;
501 - return count;
502 - },
503 - calculateSplices: function(current, previous) {
504 - return this.calcSplices(current, 0, current.length, previous, 0, previous.length);
505 - },
506 - equals: function(currentValue, previousValue) {
507 - return currentValue === previousValue;
508 - }
509 - };
510 - scope.ArraySplice = ArraySplice;
511 - })(window.ShadowDOMPolyfill);
512 - (function(context) {
513 - "use strict";
514 - var OriginalMutationObserver = window.MutationObserver;
515 - var callbacks = [];
516 - var pending = false;
517 - var timerFunc;
518 - function handle() {
519 - pending = false;
520 - var copies = callbacks.slice(0);
521 - callbacks = [];
522 - for (var i = 0; i < copies.length; i++) {
523 - (0, copies[i])();
524 - }
525 - }
526 - if (OriginalMutationObserver) {
527 - var counter = 1;
528 - var observer = new OriginalMutationObserver(handle);
529 - var textNode = document.createTextNode(counter);
530 - observer.observe(textNode, {
531 - characterData: true
532 - });
533 - timerFunc = function() {
534 - counter = (counter + 1) % 2;
535 - textNode.data = counter;
536 - };
537 - } else {
538 - timerFunc = window.setTimeout;
539 - }
540 - function setEndOfMicrotask(func) {
541 - callbacks.push(func);
542 - if (pending) return;
543 - pending = true;
544 - timerFunc(handle, 0);
545 - }
546 - context.setEndOfMicrotask = setEndOfMicrotask;
547 - })(window.ShadowDOMPolyfill);
548 - (function(scope) {
549 - "use strict";
550 - var setEndOfMicrotask = scope.setEndOfMicrotask;
551 - var wrapIfNeeded = scope.wrapIfNeeded;
552 - var wrappers = scope.wrappers;
553 - var registrationsTable = new WeakMap();
554 - var globalMutationObservers = [];
555 - var isScheduled = false;
556 - function scheduleCallback(observer) {
557 - if (observer.scheduled_) return;
558 - observer.scheduled_ = true;
559 - globalMutationObservers.push(observer);
560 - if (isScheduled) return;
561 - setEndOfMicrotask(notifyObservers);
562 - isScheduled = true;
563 - }
564 - function notifyObservers() {
565 - isScheduled = false;
566 - while (globalMutationObservers.length) {
567 - var notifyList = globalMutationObservers;
568 - globalMutationObservers = [];
569 - notifyList.sort(function(x, y) {
570 - return x.uid_ - y.uid_;
571 - });
572 - for (var i = 0; i < notifyList.length; i++) {
573 - var mo = notifyList[i];
574 - mo.scheduled_ = false;
575 - var queue = mo.takeRecords();
576 - removeTransientObserversFor(mo);
577 - if (queue.length) {
578 - mo.callback_(queue, mo);
579 - }
580 - }
581 - }
582 - }
583 - function MutationRecord(type, target) {
584 - this.type = type;
585 - this.target = target;
586 - this.addedNodes = new wrappers.NodeList();
587 - this.removedNodes = new wrappers.NodeList();
588 - this.previousSibling = null;
589 - this.nextSibling = null;
590 - this.attributeName = null;
591 - this.attributeNamespace = null;
592 - this.oldValue = null;
593 - }
594 - function registerTransientObservers(ancestor, node) {
595 - for (;ancestor; ancestor = ancestor.parentNode) {
596 - var registrations = registrationsTable.get(ancestor);
597 - if (!registrations) continue;
598 - for (var i = 0; i < registrations.length; i++) {
599 - var registration = registrations[i];
600 - if (registration.options.subtree) registration.addTransientObserver(node);
601 - }
602 - }
603 - }
604 - function removeTransientObserversFor(observer) {
605 - for (var i = 0; i < observer.nodes_.length; i++) {
606 - var node = observer.nodes_[i];
607 - var registrations = registrationsTable.get(node);
608 - if (!registrations) return;
609 - for (var j = 0; j < registrations.length; j++) {
610 - var registration = registrations[j];
611 - if (registration.observer === observer) registration.removeTransientObservers();
612 - }
613 - }
614 - }
615 - function enqueueMutation(target, type, data) {
616 - var interestedObservers = Object.create(null);
617 - var associatedStrings = Object.create(null);
618 - for (var node = target; node; node = node.parentNode) {
619 - var registrations = registrationsTable.get(node);
620 - if (!registrations) continue;
621 - for (var j = 0; j < registrations.length; j++) {
622 - var registration = registrations[j];
623 - var options = registration.options;
624 - if (node !== target && !options.subtree) continue;
625 - if (type === "attributes" && !options.attributes) continue;
626 - if (type === "attributes" && options.attributeFilter && (data.namespace !== null || options.attributeFilter.indexOf(data.name) === -1)) {
627 - continue;
628 - }
629 - if (type === "characterData" && !options.characterData) continue;
630 - if (type === "childList" && !options.childList) continue;
631 - var observer = registration.observer;
632 - interestedObservers[observer.uid_] = observer;
633 - if (type === "attributes" && options.attributeOldValue || type === "characterData" && options.characterDataOldValue) {
634 - associatedStrings[observer.uid_] = data.oldValue;
635 - }
636 - }
637 - }
638 - for (var uid in interestedObservers) {
639 - var observer = interestedObservers[uid];
640 - var record = new MutationRecord(type, target);
641 - if ("name" in data && "namespace" in data) {
642 - record.attributeName = data.name;
643 - record.attributeNamespace = data.namespace;
644 - }
645 - if (data.addedNodes) record.addedNodes = data.addedNodes;
646 - if (data.removedNodes) record.removedNodes = data.removedNodes;
647 - if (data.previousSibling) record.previousSibling = data.previousSibling;
648 - if (data.nextSibling) record.nextSibling = data.nextSibling;
649 - if (associatedStrings[uid] !== undefined) record.oldValue = associatedStrings[uid];
650 - scheduleCallback(observer);
651 - observer.records_.push(record);
652 - }
653 - }
654 - var slice = Array.prototype.slice;
655 - function MutationObserverOptions(options) {
656 - this.childList = !!options.childList;
657 - this.subtree = !!options.subtree;
658 - if (!("attributes" in options) && ("attributeOldValue" in options || "attributeFilter" in options)) {
659 - this.attributes = true;
660 - } else {
661 - this.attributes = !!options.attributes;
662 - }
663 - if ("characterDataOldValue" in options && !("characterData" in options)) this.characterData = true; else this.characterData = !!options.characterData;
664 - if (!this.attributes && (options.attributeOldValue || "attributeFilter" in options) || !this.characterData && options.characterDataOldValue) {
665 - throw new TypeError();
666 - }
667 - this.characterData = !!options.characterData;
668 - this.attributeOldValue = !!options.attributeOldValue;
669 - this.characterDataOldValue = !!options.characterDataOldValue;
670 - if ("attributeFilter" in options) {
671 - if (options.attributeFilter == null || typeof options.attributeFilter !== "object") {
672 - throw new TypeError();
673 - }
674 - this.attributeFilter = slice.call(options.attributeFilter);
675 - } else {
676 - this.attributeFilter = null;
677 - }
678 - }
679 - var uidCounter = 0;
680 - function MutationObserver(callback) {
681 - this.callback_ = callback;
682 - this.nodes_ = [];
683 - this.records_ = [];
684 - this.uid_ = ++uidCounter;
685 - this.scheduled_ = false;
686 - }
687 - MutationObserver.prototype = {
688 - constructor: MutationObserver,
689 - observe: function(target, options) {
690 - target = wrapIfNeeded(target);
691 - var newOptions = new MutationObserverOptions(options);
692 - var registration;
693 - var registrations = registrationsTable.get(target);
694 - if (!registrations) registrationsTable.set(target, registrations = []);
695 - for (var i = 0; i < registrations.length; i++) {
696 - if (registrations[i].observer === this) {
697 - registration = registrations[i];
698 - registration.removeTransientObservers();
699 - registration.options = newOptions;
700 - }
701 - }
702 - if (!registration) {
703 - registration = new Registration(this, target, newOptions);
704 - registrations.push(registration);
705 - this.nodes_.push(target);
706 - }
707 - },
708 - disconnect: function() {
709 - this.nodes_.forEach(function(node) {
710 - var registrations = registrationsTable.get(node);
711 - for (var i = 0; i < registrations.length; i++) {
712 - var registration = registrations[i];
713 - if (registration.observer === this) {
714 - registrations.splice(i, 1);
715 - break;
716 - }
717 - }
718 - }, this);
719 - this.records_ = [];
720 - },
721 - takeRecords: function() {
722 - var copyOfRecords = this.records_;
723 - this.records_ = [];
724 - return copyOfRecords;
725 - }
726 - };
727 - function Registration(observer, target, options) {
728 - this.observer = observer;
729 - this.target = target;
730 - this.options = options;
731 - this.transientObservedNodes = [];
732 - }
733 - Registration.prototype = {
734 - addTransientObserver: function(node) {
735 - if (node === this.target) return;
736 - scheduleCallback(this.observer);
737 - this.transientObservedNodes.push(node);
738 - var registrations = registrationsTable.get(node);
739 - if (!registrations) registrationsTable.set(node, registrations = []);
740 - registrations.push(this);
741 - },
742 - removeTransientObservers: function() {
743 - var transientObservedNodes = this.transientObservedNodes;
744 - this.transientObservedNodes = [];
745 - for (var i = 0; i < transientObservedNodes.length; i++) {
746 - var node = transientObservedNodes[i];
747 - var registrations = registrationsTable.get(node);
748 - for (var j = 0; j < registrations.length; j++) {
749 - if (registrations[j] === this) {
750 - registrations.splice(j, 1);
751 - break;
752 - }
753 - }
754 - }
755 - }
756 - };
757 - scope.enqueueMutation = enqueueMutation;
758 - scope.registerTransientObservers = registerTransientObservers;
759 - scope.wrappers.MutationObserver = MutationObserver;
760 - scope.wrappers.MutationRecord = MutationRecord;
761 - })(window.ShadowDOMPolyfill);
762 - (function(scope) {
763 - "use strict";
764 - function TreeScope(root, parent) {
765 - this.root = root;
766 - this.parent = parent;
767 - }
768 - TreeScope.prototype = {
769 - get renderer() {
770 - if (this.root instanceof scope.wrappers.ShadowRoot) {
771 - return scope.getRendererForHost(this.root.host);
772 - }
773 - return null;
774 - },
775 - contains: function(treeScope) {
776 - for (;treeScope; treeScope = treeScope.parent) {
777 - if (treeScope === this) return true;
778 - }
779 - return false;
780 - }
781 - };
782 - function setTreeScope(node, treeScope) {
783 - if (node.treeScope_ !== treeScope) {
784 - node.treeScope_ = treeScope;
785 - for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {
786 - sr.treeScope_.parent = treeScope;
787 - }
788 - for (var child = node.firstChild; child; child = child.nextSibling) {
789 - setTreeScope(child, treeScope);
790 - }
791 - }
792 - }
793 - function getTreeScope(node) {
794 - if (node instanceof scope.wrappers.Window) {
795 - debugger;
796 - }
797 - if (node.treeScope_) return node.treeScope_;
798 - var parent = node.parentNode;
799 - var treeScope;
800 - if (parent) treeScope = getTreeScope(parent); else treeScope = new TreeScope(node, null);
801 - return node.treeScope_ = treeScope;
802 - }
803 - scope.TreeScope = TreeScope;
804 - scope.getTreeScope = getTreeScope;
805 - scope.setTreeScope = setTreeScope;
806 - })(window.ShadowDOMPolyfill);
807 - (function(scope) {
808 - "use strict";
809 - var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
810 - var getTreeScope = scope.getTreeScope;
811 - var mixin = scope.mixin;
812 - var registerWrapper = scope.registerWrapper;
813 - var setWrapper = scope.setWrapper;
814 - var unsafeUnwrap = scope.unsafeUnwrap;
815 - var unwrap = scope.unwrap;
816 - var wrap = scope.wrap;
817 - var wrappers = scope.wrappers;
818 - var wrappedFuns = new WeakMap();
819 - var listenersTable = new WeakMap();
820 - var handledEventsTable = new WeakMap();
821 - var currentlyDispatchingEvents = new WeakMap();
822 - var targetTable = new WeakMap();
823 - var currentTargetTable = new WeakMap();
824 - var relatedTargetTable = new WeakMap();
825 - var eventPhaseTable = new WeakMap();
826 - var stopPropagationTable = new WeakMap();
827 - var stopImmediatePropagationTable = new WeakMap();
828 - var eventHandlersTable = new WeakMap();
829 - var eventPathTable = new WeakMap();
830 - function isShadowRoot(node) {
831 - return node instanceof wrappers.ShadowRoot;
832 - }
833 - function rootOfNode(node) {
834 - return getTreeScope(node).root;
835 - }
836 - function getEventPath(node, event) {
837 - var path = [];
838 - var current = node;
839 - path.push(current);
840 - while (current) {
841 - var destinationInsertionPoints = getDestinationInsertionPoints(current);
842 - if (destinationInsertionPoints && destinationInsertionPoints.length > 0) {
843 - for (var i = 0; i < destinationInsertionPoints.length; i++) {
844 - var insertionPoint = destinationInsertionPoints[i];
845 - if (isShadowInsertionPoint(insertionPoint)) {
846 - var shadowRoot = rootOfNode(insertionPoint);
847 - var olderShadowRoot = shadowRoot.olderShadowRoot;
848 - if (olderShadowRoot) path.push(olderShadowRoot);
849 - }
850 - path.push(insertionPoint);
851 - }
852 - current = destinationInsertionPoints[destinationInsertionPoints.length - 1];
853 - } else {
854 - if (isShadowRoot(current)) {
855 - if (inSameTree(node, current) && eventMustBeStopped(event)) {
856 - break;
857 - }
858 - current = current.host;
859 - path.push(current);
860 - } else {
861 - current = current.parentNode;
862 - if (current) path.push(current);
863 - }
864 - }
865 - }
866 - return path;
867 - }
868 - function eventMustBeStopped(event) {
869 - if (!event) return false;
870 - switch (event.type) {
871 - case "abort":
872 - case "error":
873 - case "select":
874 - case "change":
875 - case "load":
876 - case "reset":
877 - case "resize":
878 - case "scroll":
879 - case "selectstart":
880 - return true;
881 - }
882 - return false;
883 - }
884 - function isShadowInsertionPoint(node) {
885 - return node instanceof HTMLShadowElement;
886 - }
887 - function getDestinationInsertionPoints(node) {
888 - return scope.getDestinationInsertionPoints(node);
889 - }
890 - function eventRetargetting(path, currentTarget) {
891 - if (path.length === 0) return currentTarget;
892 - if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document;
893 - var currentTargetTree = getTreeScope(currentTarget);
894 - var originalTarget = path[0];
895 - var originalTargetTree = getTreeScope(originalTarget);
896 - var relativeTargetTree = lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);
897 - for (var i = 0; i < path.length; i++) {
898 - var node = path[i];
899 - if (getTreeScope(node) === relativeTargetTree) return node;
900 - }
901 - return path[path.length - 1];
902 - }
903 - function getTreeScopeAncestors(treeScope) {
904 - var ancestors = [];
905 - for (;treeScope; treeScope = treeScope.parent) {
906 - ancestors.push(treeScope);
907 - }
908 - return ancestors;
909 - }
910 - function lowestCommonInclusiveAncestor(tsA, tsB) {
911 - var ancestorsA = getTreeScopeAncestors(tsA);
912 - var ancestorsB = getTreeScopeAncestors(tsB);
913 - var result = null;
914 - while (ancestorsA.length > 0 && ancestorsB.length > 0) {
915 - var a = ancestorsA.pop();
916 - var b = ancestorsB.pop();
917 - if (a === b) result = a; else break;
918 - }
919 - return result;
920 - }
921 - function getTreeScopeRoot(ts) {
922 - if (!ts.parent) return ts;
923 - return getTreeScopeRoot(ts.parent);
924 - }
925 - function relatedTargetResolution(event, currentTarget, relatedTarget) {
926 - if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document;
927 - var currentTargetTree = getTreeScope(currentTarget);
928 - var relatedTargetTree = getTreeScope(relatedTarget);
929 - var relatedTargetEventPath = getEventPath(relatedTarget, event);
930 - var lowestCommonAncestorTree;
931 - var lowestCommonAncestorTree = lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree);
932 - if (!lowestCommonAncestorTree) lowestCommonAncestorTree = relatedTargetTree.root;
933 - for (var commonAncestorTree = lowestCommonAncestorTree; commonAncestorTree; commonAncestorTree = commonAncestorTree.parent) {
934 - var adjustedRelatedTarget;
935 - for (var i = 0; i < relatedTargetEventPath.length; i++) {
936 - var node = relatedTargetEventPath[i];
937 - if (getTreeScope(node) === commonAncestorTree) return node;
938 - }
939 - }
940 - return null;
941 - }
942 - function inSameTree(a, b) {
943 - return getTreeScope(a) === getTreeScope(b);
944 - }
945 - var NONE = 0;
946 - var CAPTURING_PHASE = 1;
947 - var AT_TARGET = 2;
948 - var BUBBLING_PHASE = 3;
949 - var pendingError;
950 - function dispatchOriginalEvent(originalEvent) {
951 - if (handledEventsTable.get(originalEvent)) return;
952 - handledEventsTable.set(originalEvent, true);
953 - dispatchEvent(wrap(originalEvent), wrap(originalEvent.target));
954 - if (pendingError) {
955 - var err = pendingError;
956 - pendingError = null;
957 - throw err;
958 - }
959 - }
960 - function isLoadLikeEvent(event) {
961 - switch (event.type) {
962 - case "load":
963 - case "beforeunload":
964 - case "unload":
965 - return true;
966 - }
967 - return false;
968 - }
969 - function dispatchEvent(event, originalWrapperTarget) {
970 - if (currentlyDispatchingEvents.get(event)) throw new Error("InvalidStateError");
971 - currentlyDispatchingEvents.set(event, true);
972 - scope.renderAllPending();
973 - var eventPath;
974 - var overrideTarget;
975 - var win;
976 - if (isLoadLikeEvent(event) && !event.bubbles) {
977 - var doc = originalWrapperTarget;
978 - if (doc instanceof wrappers.Document && (win = doc.defaultView)) {
979 - overrideTarget = doc;
980 - eventPath = [];
981 - }
982 - }
983 - if (!eventPath) {
984 - if (originalWrapperTarget instanceof wrappers.Window) {
985 - win = originalWrapperTarget;
986 - eventPath = [];
987 - } else {
988 - eventPath = getEventPath(originalWrapperTarget, event);
989 - if (!isLoadLikeEvent(event)) {
990 - var doc = eventPath[eventPath.length - 1];
991 - if (doc instanceof wrappers.Document) win = doc.defaultView;
992 - }
993 - }
994 - }
995 - eventPathTable.set(event, eventPath);
996 - if (dispatchCapturing(event, eventPath, win, overrideTarget)) {
997 - if (dispatchAtTarget(event, eventPath, win, overrideTarget)) {
998 - dispatchBubbling(event, eventPath, win, overrideTarget);
999 - }
1000 - }
1001 - eventPhaseTable.set(event, NONE);
1002 - currentTargetTable.delete(event, null);
1003 - currentlyDispatchingEvents.delete(event);
1004 - return event.defaultPrevented;
1005 - }
1006 - function dispatchCapturing(event, eventPath, win, overrideTarget) {
1007 - var phase = CAPTURING_PHASE;
1008 - if (win) {
1009 - if (!invoke(win, event, phase, eventPath, overrideTarget)) return false;
1010 - }
1011 - for (var i = eventPath.length - 1; i > 0; i--) {
1012 - if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return false;
1013 - }
1014 - return true;
1015 - }
1016 - function dispatchAtTarget(event, eventPath, win, overrideTarget) {
1017 - var phase = AT_TARGET;
1018 - var currentTarget = eventPath[0] || win;
1019 - return invoke(currentTarget, event, phase, eventPath, overrideTarget);
1020 - }
1021 - function dispatchBubbling(event, eventPath, win, overrideTarget) {
1022 - var phase = BUBBLING_PHASE;
1023 - for (var i = 1; i < eventPath.length; i++) {
1024 - if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return;
1025 - }
1026 - if (win && eventPath.length > 0) {
1027 - invoke(win, event, phase, eventPath, overrideTarget);
1028 - }
1029 - }
1030 - function invoke(currentTarget, event, phase, eventPath, overrideTarget) {
1031 - var listeners = listenersTable.get(currentTarget);
1032 - if (!listeners) return true;
1033 - var target = overrideTarget || eventRetargetting(eventPath, currentTarget);
1034 - if (target === currentTarget) {
1035 - if (phase === CAPTURING_PHASE) return true;
1036 - if (phase === BUBBLING_PHASE) phase = AT_TARGET;
1037 - } else if (phase === BUBBLING_PHASE && !event.bubbles) {
1038 - return true;
1039 - }
1040 - if ("relatedTarget" in event) {
1041 - var originalEvent = unwrap(event);
1042 - var unwrappedRelatedTarget = originalEvent.relatedTarget;
1043 - if (unwrappedRelatedTarget) {
1044 - if (unwrappedRelatedTarget instanceof Object && unwrappedRelatedTarget.addEventListener) {
1045 - var relatedTarget = wrap(unwrappedRelatedTarget);
1046 - var adjusted = relatedTargetResolution(event, currentTarget, relatedTarget);
1047 - if (adjusted === target) return true;
1048 - } else {
1049 - adjusted = null;
1050 - }
1051 - relatedTargetTable.set(event, adjusted);
1052 - }
1053 - }
1054 - eventPhaseTable.set(event, phase);
1055 - var type = event.type;
1056 - var anyRemoved = false;
1057 - targetTable.set(event, target);
1058 - currentTargetTable.set(event, currentTarget);
1059 - listeners.depth++;
1060 - for (var i = 0, len = listeners.length; i < len; i++) {
1061 - var listener = listeners[i];
1062 - if (listener.removed) {
1063 - anyRemoved = true;
1064 - continue;
1065 - }
1066 - if (listener.type !== type || !listener.capture && phase === CAPTURING_PHASE || listener.capture && phase === BUBBLING_PHASE) {
1067 - continue;
1068 - }
1069 - try {
1070 - if (typeof listener.handler === "function") listener.handler.call(currentTarget, event); else listener.handler.handleEvent(event);
1071 - if (stopImmediatePropagationTable.get(event)) return false;
1072 - } catch (ex) {
1073 - if (!pendingError) pendingError = ex;
1074 - }
1075 - }
1076 - listeners.depth--;
1077 - if (anyRemoved && listeners.depth === 0) {
1078 - var copy = listeners.slice();
1079 - listeners.length = 0;
1080 - for (var i = 0; i < copy.length; i++) {
1081 - if (!copy[i].removed) listeners.push(copy[i]);
1082 - }
1083 - }
1084 - return !stopPropagationTable.get(event);
1085 - }
1086 - function Listener(type, handler, capture) {
1087 - this.type = type;
1088 - this.handler = handler;
1089 - this.capture = Boolean(capture);
1090 - }
1091 - Listener.prototype = {
1092 - equals: function(that) {
1093 - return this.handler === that.handler && this.type === that.type && this.capture === that.capture;
1094 - },
1095 - get removed() {
1096 - return this.handler === null;
1097 - },
1098 - remove: function() {
1099 - this.handler = null;
1100 - }
1101 - };
1102 - var OriginalEvent = window.Event;
1103 - OriginalEvent.prototype.polymerBlackList_ = {
1104 - returnValue: true,
1105 - keyLocation: true
1106 - };
1107 - function Event(type, options) {
1108 - if (type instanceof OriginalEvent) {
1109 - var impl = type;
1110 - if (!OriginalBeforeUnloadEvent && impl.type === "beforeunload" && !(this instanceof BeforeUnloadEvent)) {
1111 - return new BeforeUnloadEvent(impl);
1112 - }
1113 - setWrapper(impl, this);
1114 - } else {
1115 - return wrap(constructEvent(OriginalEvent, "Event", type, options));
1116 - }
1117 - }
1118 - Event.prototype = {
1119 - get target() {
1120 - return targetTable.get(this);
1121 - },
1122 - get currentTarget() {
1123 - return currentTargetTable.get(this);
1124 - },
1125 - get eventPhase() {
1126 - return eventPhaseTable.get(this);
1127 - },
1128 - get path() {
1129 - var eventPath = eventPathTable.get(this);
1130 - if (!eventPath) return [];
1131 - return eventPath.slice();
1132 - },
1133 - stopPropagation: function() {
1134 - stopPropagationTable.set(this, true);
1135 - },
1136 - stopImmediatePropagation: function() {
1137 - stopPropagationTable.set(this, true);
1138 - stopImmediatePropagationTable.set(this, true);
1139 - }
1140 - };
1141 - registerWrapper(OriginalEvent, Event, document.createEvent("Event"));
1142 - function unwrapOptions(options) {
1143 - if (!options || !options.relatedTarget) return options;
1144 - return Object.create(options, {
1145 - relatedTarget: {
1146 - value: unwrap(options.relatedTarget)
1147 - }
1148 - });
1149 - }
1150 - function registerGenericEvent(name, SuperEvent, prototype) {
1151 - var OriginalEvent = window[name];
1152 - var GenericEvent = function(type, options) {
1153 - if (type instanceof OriginalEvent) setWrapper(type, this); else return wrap(constructEvent(OriginalEvent, name, type, options));
1154 - };
1155 - GenericEvent.prototype = Object.create(SuperEvent.prototype);
1156 - if (prototype) mixin(GenericEvent.prototype, prototype);
1157 - if (OriginalEvent) {
1158 - try {
1159 - registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent("temp"));
1160 - } catch (ex) {
1161 - registerWrapper(OriginalEvent, GenericEvent, document.createEvent(name));
1162 - }
1163 - }
1164 - return GenericEvent;
1165 - }
1166 - var UIEvent = registerGenericEvent("UIEvent", Event);
1167 - var CustomEvent = registerGenericEvent("CustomEvent", Event);
1168 - var relatedTargetProto = {
1169 - get relatedTarget() {
1170 - var relatedTarget = relatedTargetTable.get(this);
1171 - if (relatedTarget !== undefined) return relatedTarget;
1172 - return wrap(unwrap(this).relatedTarget);
1173 - }
1174 - };
1175 - function getInitFunction(name, relatedTargetIndex) {
1176 - return function() {
1177 - arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);
1178 - var impl = unwrap(this);
1179 - impl[name].apply(impl, arguments);
1180 - };
1181 - }
1182 - var mouseEventProto = mixin({
1183 - initMouseEvent: getInitFunction("initMouseEvent", 14)
1184 - }, relatedTargetProto);
1185 - var focusEventProto = mixin({
1186 - initFocusEvent: getInitFunction("initFocusEvent", 5)
1187 - }, relatedTargetProto);
1188 - var MouseEvent = registerGenericEvent("MouseEvent", UIEvent, mouseEventProto);
1189 - var FocusEvent = registerGenericEvent("FocusEvent", UIEvent, focusEventProto);
1190 - var defaultInitDicts = Object.create(null);
1191 - var supportsEventConstructors = function() {
1192 - try {
1193 - new window.FocusEvent("focus");
1194 - } catch (ex) {
1195 - return false;
1196 - }
1197 - return true;
1198 - }();
1199 - function constructEvent(OriginalEvent, name, type, options) {
1200 - if (supportsEventConstructors) return new OriginalEvent(type, unwrapOptions(options));
1201 - var event = unwrap(document.createEvent(name));
1202 - var defaultDict = defaultInitDicts[name];
1203 - var args = [ type ];
1204 - Object.keys(defaultDict).forEach(function(key) {
1205 - var v = options != null && key in options ? options[key] : defaultDict[key];
1206 - if (key === "relatedTarget") v = unwrap(v);
1207 - args.push(v);
1208 - });
1209 - event["init" + name].apply(event, args);
1210 - return event;
1211 - }
1212 - if (!supportsEventConstructors) {
1213 - var configureEventConstructor = function(name, initDict, superName) {
1214 - if (superName) {
1215 - var superDict = defaultInitDicts[superName];
1216 - initDict = mixin(mixin({}, superDict), initDict);
1217 - }
1218 - defaultInitDicts[name] = initDict;
1219 - };
1220 - configureEventConstructor("Event", {
1221 - bubbles: false,
1222 - cancelable: false
1223 - });
1224 - configureEventConstructor("CustomEvent", {
1225 - detail: null
1226 - }, "Event");
1227 - configureEventConstructor("UIEvent", {
1228 - view: null,
1229 - detail: 0
1230 - }, "Event");
1231 - configureEventConstructor("MouseEvent", {
1232 - screenX: 0,
1233 - screenY: 0,
1234 - clientX: 0,
1235 - clientY: 0,
1236 - ctrlKey: false,
1237 - altKey: false,
1238 - shiftKey: false,
1239 - metaKey: false,
1240 - button: 0,
1241 - relatedTarget: null
1242 - }, "UIEvent");
1243 - configureEventConstructor("FocusEvent", {
1244 - relatedTarget: null
1245 - }, "UIEvent");
1246 - }
1247 - var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;
1248 - function BeforeUnloadEvent(impl) {
1249 - Event.call(this, impl);
1250 - }
1251 - BeforeUnloadEvent.prototype = Object.create(Event.prototype);
1252 - mixin(BeforeUnloadEvent.prototype, {
1253 - get returnValue() {
1254 - return unsafeUnwrap(this).returnValue;
1255 - },
1256 - set returnValue(v) {
1257 - unsafeUnwrap(this).returnValue = v;
1258 - }
1259 - });
1260 - if (OriginalBeforeUnloadEvent) registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);
1261 - function isValidListener(fun) {
1262 - if (typeof fun === "function") return true;
1263 - return fun && fun.handleEvent;
1264 - }
1265 - function isMutationEvent(type) {
1266 - switch (type) {
1267 - case "DOMAttrModified":
1268 - case "DOMAttributeNameChanged":
1269 - case "DOMCharacterDataModified":
1270 - case "DOMElementNameChanged":
1271 - case "DOMNodeInserted":
1272 - case "DOMNodeInsertedIntoDocument":
1273 - case "DOMNodeRemoved":
1274 - case "DOMNodeRemovedFromDocument":
1275 - case "DOMSubtreeModified":
1276 - return true;
1277 - }
1278 - return false;
1279 - }
1280 - var OriginalEventTarget = window.EventTarget;
1281 - function EventTarget(impl) {
1282 - setWrapper(impl, this);
1283 - }
1284 - var methodNames = [ "addEventListener", "removeEventListener", "dispatchEvent" ];
1285 - [ Node, Window ].forEach(function(constructor) {
1286 - var p = constructor.prototype;
1287 - methodNames.forEach(function(name) {
1288 - Object.defineProperty(p, name + "_", {
1289 - value: p[name]
1290 - });
1291 - });
1292 - });
1293 - function getTargetToListenAt(wrapper) {
1294 - if (wrapper instanceof wrappers.ShadowRoot) wrapper = wrapper.host;
1295 - return unwrap(wrapper);
1296 - }
1297 - EventTarget.prototype = {
1298 - addEventListener: function(type, fun, capture) {
1299 - if (!isValidListener(fun) || isMutationEvent(type)) return;
1300 - var listener = new Listener(type, fun, capture);
1301 - var listeners = listenersTable.get(this);
1302 - if (!listeners) {
1303 - listeners = [];
1304 - listeners.depth = 0;
1305 - listenersTable.set(this, listeners);
1306 - } else {
1307 - for (var i = 0; i < listeners.length; i++) {
1308 - if (listener.equals(listeners[i])) return;
1309 - }
1310 - }
1311 - listeners.push(listener);
1312 - var target = getTargetToListenAt(this);
1313 - target.addEventListener_(type, dispatchOriginalEvent, true);
1314 - },
1315 - removeEventListener: function(type, fun, capture) {
1316 - capture = Boolean(capture);
1317 - var listeners = listenersTable.get(this);
1318 - if (!listeners) return;
1319 - var count = 0, found = false;
1320 - for (var i = 0; i < listeners.length; i++) {
1321 - if (listeners[i].type === type && listeners[i].capture === capture) {
1322 - count++;
1323 - if (listeners[i].handler === fun) {
1324 - found = true;
1325 - listeners[i].remove();
1326 - }
1327 - }
1328 - }
1329 - if (found && count === 1) {
1330 - var target = getTargetToListenAt(this);
1331 - target.removeEventListener_(type, dispatchOriginalEvent, true);
1332 - }
1333 - },
1334 - dispatchEvent: function(event) {
1335 - var nativeEvent = unwrap(event);
1336 - var eventType = nativeEvent.type;
1337 - handledEventsTable.set(nativeEvent, false);
1338 - scope.renderAllPending();
1339 - var tempListener;
1340 - if (!hasListenerInAncestors(this, eventType)) {
1341 - tempListener = function() {};
1342 - this.addEventListener(eventType, tempListener, true);
1343 - }
1344 - try {
1345 - return unwrap(this).dispatchEvent_(nativeEvent);
1346 - } finally {
1347 - if (tempListener) this.removeEventListener(eventType, tempListener, true);
1348 - }
1349 - }
1350 - };
1351 - function hasListener(node, type) {
1352 - var listeners = listenersTable.get(node);
1353 - if (listeners) {
1354 - for (var i = 0; i < listeners.length; i++) {
1355 - if (!listeners[i].removed && listeners[i].type === type) return true;
1356 - }
1357 - }
1358 - return false;
1359 - }
1360 - function hasListenerInAncestors(target, type) {
1361 - for (var node = unwrap(target); node; node = node.parentNode) {
1362 - if (hasListener(wrap(node), type)) return true;
1363 - }
1364 - return false;
1365 - }
1366 - if (OriginalEventTarget) registerWrapper(OriginalEventTarget, EventTarget);
1367 - function wrapEventTargetMethods(constructors) {
1368 - forwardMethodsToWrapper(constructors, methodNames);
1369 - }
1370 - var originalElementFromPoint = document.elementFromPoint;
1371 - function elementFromPoint(self, document, x, y) {
1372 - scope.renderAllPending();
1373 - var element = wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));
1374 - if (!element) return null;
1375 - var path = getEventPath(element, null);
1376 - var idx = path.lastIndexOf(self);
1377 - if (idx == -1) return null; else path = path.slice(0, idx);
1378 - return eventRetargetting(path, self);
1379 - }
1380 - function getEventHandlerGetter(name) {
1381 - return function() {
1382 - var inlineEventHandlers = eventHandlersTable.get(this);
1383 - return inlineEventHandlers && inlineEventHandlers[name] && inlineEventHandlers[name].value || null;
1384 - };
1385 - }
1386 - function getEventHandlerSetter(name) {
1387 - var eventType = name.slice(2);
1388 - return function(value) {
1389 - var inlineEventHandlers = eventHandlersTable.get(this);
1390 - if (!inlineEventHandlers) {
1391 - inlineEventHandlers = Object.create(null);
1392 - eventHandlersTable.set(this, inlineEventHandlers);
1393 - }
1394 - var old = inlineEventHandlers[name];
1395 - if (old) this.removeEventListener(eventType, old.wrapped, false);
1396 - if (typeof value === "function") {
1397 - var wrapped = function(e) {
1398 - var rv = value.call(this, e);
1399 - if (rv === false) e.preventDefault(); else if (name === "onbeforeunload" && typeof rv === "string") e.returnValue = rv;
1400 - };
1401 - this.addEventListener(eventType, wrapped, false);
1402 - inlineEventHandlers[name] = {
1403 - value: value,
1404 - wrapped: wrapped
1405 - };
1406 - }
1407 - };
1408 - }
1409 - scope.elementFromPoint = elementFromPoint;
1410 - scope.getEventHandlerGetter = getEventHandlerGetter;
1411 - scope.getEventHandlerSetter = getEventHandlerSetter;
1412 - scope.wrapEventTargetMethods = wrapEventTargetMethods;
1413 - scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;
1414 - scope.wrappers.CustomEvent = CustomEvent;
1415 - scope.wrappers.Event = Event;
1416 - scope.wrappers.EventTarget = EventTarget;
1417 - scope.wrappers.FocusEvent = FocusEvent;
1418 - scope.wrappers.MouseEvent = MouseEvent;
1419 - scope.wrappers.UIEvent = UIEvent;
1420 - })(window.ShadowDOMPolyfill);
1421 - (function(scope) {
1422 - "use strict";
1423 - var UIEvent = scope.wrappers.UIEvent;
1424 - var mixin = scope.mixin;
1425 - var registerWrapper = scope.registerWrapper;
1426 - var setWrapper = scope.setWrapper;
1427 - var unsafeUnwrap = scope.unsafeUnwrap;
1428 - var wrap = scope.wrap;
1429 - var OriginalTouchEvent = window.TouchEvent;
1430 - if (!OriginalTouchEvent) return;
1431 - var nativeEvent;
1432 - try {
1433 - nativeEvent = document.createEvent("TouchEvent");
1434 - } catch (ex) {
1435 - return;
1436 - }
1437 - var nonEnumDescriptor = {
1438 - enumerable: false
1439 - };
1440 - function nonEnum(obj, prop) {
1441 - Object.defineProperty(obj, prop, nonEnumDescriptor);
1442 - }
1443 - function Touch(impl) {
1444 - setWrapper(impl, this);
1445 - }
1446 - Touch.prototype = {
1447 - get target() {
1448 - return wrap(unsafeUnwrap(this).target);
1449 - }
1450 - };
1451 - var descr = {
1452 - configurable: true,
1453 - enumerable: true,
1454 - get: null
1455 - };
1456 - [ "clientX", "clientY", "screenX", "screenY", "pageX", "pageY", "identifier", "webkitRadiusX", "webkitRadiusY", "webkitRotationAngle", "webkitForce" ].forEach(function(name) {
1457 - descr.get = function() {
1458 - return unsafeUnwrap(this)[name];
1459 - };
1460 - Object.defineProperty(Touch.prototype, name, descr);
1461 - });
1462 - function TouchList() {
1463 - this.length = 0;
1464 - nonEnum(this, "length");
1465 - }
1466 - TouchList.prototype = {
1467 - item: function(index) {
1468 - return this[index];
1469 - }
1470 - };
1471 - function wrapTouchList(nativeTouchList) {
1472 - var list = new TouchList();
1473 - for (var i = 0; i < nativeTouchList.length; i++) {
1474 - list[i] = new Touch(nativeTouchList[i]);
1475 - }
1476 - list.length = i;
1477 - return list;
1478 - }
1479 - function TouchEvent(impl) {
1480 - UIEvent.call(this, impl);
1481 - }
1482 - TouchEvent.prototype = Object.create(UIEvent.prototype);
1483 - mixin(TouchEvent.prototype, {
1484 - get touches() {
1485 - return wrapTouchList(unsafeUnwrap(this).touches);
1486 - },
1487 - get targetTouches() {
1488 - return wrapTouchList(unsafeUnwrap(this).targetTouches);
1489 - },
1490 - get changedTouches() {
1491 - return wrapTouchList(unsafeUnwrap(this).changedTouches);
1492 - },
1493 - initTouchEvent: function() {
1494 - throw new Error("Not implemented");
1495 - }
1496 - });
1497 - registerWrapper(OriginalTouchEvent, TouchEvent, nativeEvent);
1498 - scope.wrappers.Touch = Touch;
1499 - scope.wrappers.TouchEvent = TouchEvent;
1500 - scope.wrappers.TouchList = TouchList;
1501 - })(window.ShadowDOMPolyfill);
1502 - (function(scope) {
1503 - "use strict";
1504 - var unsafeUnwrap = scope.unsafeUnwrap;
1505 - var wrap = scope.wrap;
1506 - var nonEnumDescriptor = {
1507 - enumerable: false
1508 - };
1509 - function nonEnum(obj, prop) {
1510 - Object.defineProperty(obj, prop, nonEnumDescriptor);
1511 - }
1512 - function NodeList() {
1513 - this.length = 0;
1514 - nonEnum(this, "length");
1515 - }
1516 - NodeList.prototype = {
1517 - item: function(index) {
1518 - return this[index];
1519 - }
1520 - };
1521 - nonEnum(NodeList.prototype, "item");
1522 - function wrapNodeList(list) {
1523 - if (list == null) return list;
1524 - var wrapperList = new NodeList();
1525 - for (var i = 0, length = list.length; i < length; i++) {
1526 - wrapperList[i] = wrap(list[i]);
1527 - }
1528 - wrapperList.length = length;
1529 - return wrapperList;
1530 - }
1531 - function addWrapNodeListMethod(wrapperConstructor, name) {
1532 - wrapperConstructor.prototype[name] = function() {
1533 - return wrapNodeList(unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments));
1534 - };
1535 - }
1536 - scope.wrappers.NodeList = NodeList;
1537 - scope.addWrapNodeListMethod = addWrapNodeListMethod;
1538 - scope.wrapNodeList = wrapNodeList;
1539 - })(window.ShadowDOMPolyfill);
1540 - (function(scope) {
1541 - "use strict";
1542 - scope.wrapHTMLCollection = scope.wrapNodeList;
1543 - scope.wrappers.HTMLCollection = scope.wrappers.NodeList;
1544 - })(window.ShadowDOMPolyfill);
1545 - (function(scope) {
1546 - "use strict";
1547 - var EventTarget = scope.wrappers.EventTarget;
1548 - var NodeList = scope.wrappers.NodeList;
1549 - var TreeScope = scope.TreeScope;
1550 - var assert = scope.assert;
1551 - var defineWrapGetter = scope.defineWrapGetter;
1552 - var enqueueMutation = scope.enqueueMutation;
1553 - var getTreeScope = scope.getTreeScope;
1554 - var isWrapper = scope.isWrapper;
1555 - var mixin = scope.mixin;
1556 - var registerTransientObservers = scope.registerTransientObservers;
1557 - var registerWrapper = scope.registerWrapper;
1558 - var setTreeScope = scope.setTreeScope;
1559 - var unsafeUnwrap = scope.unsafeUnwrap;
1560 - var unwrap = scope.unwrap;
1561 - var unwrapIfNeeded = scope.unwrapIfNeeded;
1562 - var wrap = scope.wrap;
1563 - var wrapIfNeeded = scope.wrapIfNeeded;
1564 - var wrappers = scope.wrappers;
1565 - function assertIsNodeWrapper(node) {
1566 - assert(node instanceof Node);
1567 - }
1568 - function createOneElementNodeList(node) {
1569 - var nodes = new NodeList();
1570 - nodes[0] = node;
1571 - nodes.length = 1;
1572 - return nodes;
1573 - }
1574 - var surpressMutations = false;
1575 - function enqueueRemovalForInsertedNodes(node, parent, nodes) {
1576 - enqueueMutation(parent, "childList", {
1577 - removedNodes: nodes,
1578 - previousSibling: node.previousSibling,
1579 - nextSibling: node.nextSibling
1580 - });
1581 - }
1582 - function enqueueRemovalForInsertedDocumentFragment(df, nodes) {
1583 - enqueueMutation(df, "childList", {
1584 - removedNodes: nodes
1585 - });
1586 - }
1587 - function collectNodes(node, parentNode, previousNode, nextNode) {
1588 - if (node instanceof DocumentFragment) {
1589 - var nodes = collectNodesForDocumentFragment(node);
1590 - surpressMutations = true;
1591 - for (var i = nodes.length - 1; i >= 0; i--) {
1592 - node.removeChild(nodes[i]);
1593 - nodes[i].parentNode_ = parentNode;
1594 - }
1595 - surpressMutations = false;
1596 - for (var i = 0; i < nodes.length; i++) {
1597 - nodes[i].previousSibling_ = nodes[i - 1] || previousNode;
1598 - nodes[i].nextSibling_ = nodes[i + 1] || nextNode;
1599 - }
1600 - if (previousNode) previousNode.nextSibling_ = nodes[0];
1601 - if (nextNode) nextNode.previousSibling_ = nodes[nodes.length - 1];
1602 - return nodes;
1603 - }
1604 - var nodes = createOneElementNodeList(node);
1605 - var oldParent = node.parentNode;
1606 - if (oldParent) {
1607 - oldParent.removeChild(node);
1608 - }
1609 - node.parentNode_ = parentNode;
1610 - node.previousSibling_ = previousNode;
1611 - node.nextSibling_ = nextNode;
1612 - if (previousNode) previousNode.nextSibling_ = node;
1613 - if (nextNode) nextNode.previousSibling_ = node;
1614 - return nodes;
1615 - }
1616 - function collectNodesNative(node) {
1617 - if (node instanceof DocumentFragment) return collectNodesForDocumentFragment(node);
1618 - var nodes = createOneElementNodeList(node);
1619 - var oldParent = node.parentNode;
1620 - if (oldParent) enqueueRemovalForInsertedNodes(node, oldParent, nodes);
1621 - return nodes;
1622 - }
1623 - function collectNodesForDocumentFragment(node) {
1624 - var nodes = new NodeList();
1625 - var i = 0;
1626 - for (var child = node.firstChild; child; child = child.nextSibling) {
1627 - nodes[i++] = child;
1628 - }
1629 - nodes.length = i;
1630 - enqueueRemovalForInsertedDocumentFragment(node, nodes);
1631 - return nodes;
1632 - }
1633 - function snapshotNodeList(nodeList) {
1634 - return nodeList;
1635 - }
1636 - function nodeWasAdded(node, treeScope) {
1637 - setTreeScope(node, treeScope);
1638 - node.nodeIsInserted_();
1639 - }
1640 - function nodesWereAdded(nodes, parent) {
1641 - var treeScope = getTreeScope(parent);
1642 - for (var i = 0; i < nodes.length; i++) {
1643 - nodeWasAdded(nodes[i], treeScope);
1644 - }
1645 - }
1646 - function nodeWasRemoved(node) {
1647 - setTreeScope(node, new TreeScope(node, null));
1648 - }
1649 - function nodesWereRemoved(nodes) {
1650 - for (var i = 0; i < nodes.length; i++) {
1651 - nodeWasRemoved(nodes[i]);
1652 - }
1653 - }
1654 - function ensureSameOwnerDocument(parent, child) {
1655 - var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ? parent : parent.ownerDocument;
1656 - if (ownerDoc !== child.ownerDocument) ownerDoc.adoptNode(child);
1657 - }
1658 - function adoptNodesIfNeeded(owner, nodes) {
1659 - if (!nodes.length) return;
1660 - var ownerDoc = owner.ownerDocument;
1661 - if (ownerDoc === nodes[0].ownerDocument) return;
1662 - for (var i = 0; i < nodes.length; i++) {
1663 - scope.adoptNodeNoRemove(nodes[i], ownerDoc);
1664 - }
1665 - }
1666 - function unwrapNodesForInsertion(owner, nodes) {
1667 - adoptNodesIfNeeded(owner, nodes);
1668 - var length = nodes.length;
1669 - if (length === 1) return unwrap(nodes[0]);
1670 - var df = unwrap(owner.ownerDocument.createDocumentFragment());
1671 - for (var i = 0; i < length; i++) {
1672 - df.appendChild(unwrap(nodes[i]));
1673 - }
1674 - return df;
1675 - }
1676 - function clearChildNodes(wrapper) {
1677 - if (wrapper.firstChild_ !== undefined) {
1678 - var child = wrapper.firstChild_;
1679 - while (child) {
1680 - var tmp = child;
1681 - child = child.nextSibling_;
1682 - tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;
1683 - }
1684 - }
1685 - wrapper.firstChild_ = wrapper.lastChild_ = undefined;
1686 - }
1687 - function removeAllChildNodes(wrapper) {
1688 - if (wrapper.invalidateShadowRenderer()) {
1689 - var childWrapper = wrapper.firstChild;
1690 - while (childWrapper) {
1691 - assert(childWrapper.parentNode === wrapper);
1692 - var nextSibling = childWrapper.nextSibling;
1693 - var childNode = unwrap(childWrapper);
1694 - var parentNode = childNode.parentNode;
1695 - if (parentNode) originalRemoveChild.call(parentNode, childNode);
1696 - childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = null;
1697 - childWrapper = nextSibling;
1698 - }
1699 - wrapper.firstChild_ = wrapper.lastChild_ = null;
1700 - } else {
1701 - var node = unwrap(wrapper);
1702 - var child = node.firstChild;
1703 - var nextSibling;
1704 - while (child) {
1705 - nextSibling = child.nextSibling;
1706 - originalRemoveChild.call(node, child);
1707 - child = nextSibling;
1708 - }
1709 - }
1710 - }
1711 - function invalidateParent(node) {
1712 - var p = node.parentNode;
1713 - return p && p.invalidateShadowRenderer();
1714 - }
1715 - function cleanupNodes(nodes) {
1716 - for (var i = 0, n; i < nodes.length; i++) {
1717 - n = nodes[i];
1718 - n.parentNode.removeChild(n);
1719 - }
1720 - }
1721 - var originalImportNode = document.importNode;
1722 - var originalCloneNode = window.Node.prototype.cloneNode;
1723 - function cloneNode(node, deep, opt_doc) {
1724 - var clone;
1725 - if (opt_doc) clone = wrap(originalImportNode.call(opt_doc, unsafeUnwrap(node), false)); else clone = wrap(originalCloneNode.call(unsafeUnwrap(node), false));
1726 - if (deep) {
1727 - for (var child = node.firstChild; child; child = child.nextSibling) {
1728 - clone.appendChild(cloneNode(child, true, opt_doc));
1729 - }
1730 - if (node instanceof wrappers.HTMLTemplateElement) {
1731 - var cloneContent = clone.content;
1732 - for (var child = node.content.firstChild; child; child = child.nextSibling) {
1733 - cloneContent.appendChild(cloneNode(child, true, opt_doc));
1734 - }
1735 - }
1736 - }
1737 - return clone;
1738 - }
1739 - function contains(self, child) {
1740 - if (!child || getTreeScope(self) !== getTreeScope(child)) return false;
1741 - for (var node = child; node; node = node.parentNode) {
1742 - if (node === self) return true;
1743 - }
1744 - return false;
1745 - }
1746 - var OriginalNode = window.Node;
1747 - function Node(original) {
1748 - assert(original instanceof OriginalNode);
1749 - EventTarget.call(this, original);
1750 - this.parentNode_ = undefined;
1751 - this.firstChild_ = undefined;
1752 - this.lastChild_ = undefined;
1753 - this.nextSibling_ = undefined;
1754 - this.previousSibling_ = undefined;
1755 - this.treeScope_ = undefined;
1756 - }
1757 - var OriginalDocumentFragment = window.DocumentFragment;
1758 - var originalAppendChild = OriginalNode.prototype.appendChild;
1759 - var originalCompareDocumentPosition = OriginalNode.prototype.compareDocumentPosition;
1760 - var originalInsertBefore = OriginalNode.prototype.insertBefore;
1761 - var originalRemoveChild = OriginalNode.prototype.removeChild;
1762 - var originalReplaceChild = OriginalNode.prototype.replaceChild;
1763 - var isIe = /Trident/.test(navigator.userAgent);
1764 - var removeChildOriginalHelper = isIe ? function(parent, child) {
1765 - try {
1766 - originalRemoveChild.call(parent, child);
1767 - } catch (ex) {
1768 - if (!(parent instanceof OriginalDocumentFragment)) throw ex;
1769 - }
1770 - } : function(parent, child) {
1771 - originalRemoveChild.call(parent, child);
1772 - };
1773 - Node.prototype = Object.create(EventTarget.prototype);
1774 - mixin(Node.prototype, {
1775 - appendChild: function(childWrapper) {
1776 - return this.insertBefore(childWrapper, null);
1777 - },
1778 - insertBefore: function(childWrapper, refWrapper) {
1779 - assertIsNodeWrapper(childWrapper);
1780 - var refNode;
1781 - if (refWrapper) {
1782 - if (isWrapper(refWrapper)) {
1783 - refNode = unwrap(refWrapper);
1784 - } else {
1785 - refNode = refWrapper;
1786 - refWrapper = wrap(refNode);
1787 - }
1788 - } else {
1789 - refWrapper = null;
1790 - refNode = null;
1791 - }
1792 - refWrapper && assert(refWrapper.parentNode === this);
1793 - var nodes;
1794 - var previousNode = refWrapper ? refWrapper.previousSibling : this.lastChild;
1795 - var useNative = !this.invalidateShadowRenderer() && !invalidateParent(childWrapper);
1796 - if (useNative) nodes = collectNodesNative(childWrapper); else nodes = collectNodes(childWrapper, this, previousNode, refWrapper);
1797 - if (useNative) {
1798 - ensureSameOwnerDocument(this, childWrapper);
1799 - clearChildNodes(this);
1800 - originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode);
1801 - } else {
1802 - if (!previousNode) this.firstChild_ = nodes[0];
1803 - if (!refWrapper) {
1804 - this.lastChild_ = nodes[nodes.length - 1];
1805 - if (this.firstChild_ === undefined) this.firstChild_ = this.firstChild;
1806 - }
1807 - var parentNode = refNode ? refNode.parentNode : unsafeUnwrap(this);
1808 - if (parentNode) {
1809 - originalInsertBefore.call(parentNode, unwrapNodesForInsertion(this, nodes), refNode);
1810 - } else {
1811 - adoptNodesIfNeeded(this, nodes);
1812 - }
1813 - }
1814 - enqueueMutation(this, "childList", {
1815 - addedNodes: nodes,
1816 - nextSibling: refWrapper,
1817 - previousSibling: previousNode
1818 - });
1819 - nodesWereAdded(nodes, this);
1820 - return childWrapper;
1821 - },
1822 - removeChild: function(childWrapper) {
1823 - assertIsNodeWrapper(childWrapper);
1824 - if (childWrapper.parentNode !== this) {
1825 - var found = false;
1826 - var childNodes = this.childNodes;
1827 - for (var ieChild = this.firstChild; ieChild; ieChild = ieChild.nextSibling) {
1828 - if (ieChild === childWrapper) {
1829 - found = true;
1830 - break;
1831 - }
1832 - }
1833 - if (!found) {
1834 - throw new Error("NotFoundError");
1835 - }
1836 - }
1837 - var childNode = unwrap(childWrapper);
1838 - var childWrapperNextSibling = childWrapper.nextSibling;
1839 - var childWrapperPreviousSibling = childWrapper.previousSibling;
1840 - if (this.invalidateShadowRenderer()) {
1841 - var thisFirstChild = this.firstChild;
1842 - var thisLastChild = this.lastChild;
1843 - var parentNode = childNode.parentNode;
1844 - if (parentNode) removeChildOriginalHelper(parentNode, childNode);
1845 - if (thisFirstChild === childWrapper) this.firstChild_ = childWrapperNextSibling;
1846 - if (thisLastChild === childWrapper) this.lastChild_ = childWrapperPreviousSibling;
1847 - if (childWrapperPreviousSibling) childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;
1848 - if (childWrapperNextSibling) {
1849 - childWrapperNextSibling.previousSibling_ = childWrapperPreviousSibling;
1850 - }
1851 - childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = undefined;
1852 - } else {
1853 - clearChildNodes(this);
1854 - removeChildOriginalHelper(unsafeUnwrap(this), childNode);
1855 - }
1856 - if (!surpressMutations) {
1857 - enqueueMutation(this, "childList", {
1858 - removedNodes: createOneElementNodeList(childWrapper),
1859 - nextSibling: childWrapperNextSibling,
1860 - previousSibling: childWrapperPreviousSibling
1861 - });
1862 - }
1863 - registerTransientObservers(this, childWrapper);
1864 - return childWrapper;
1865 - },
1866 - replaceChild: function(newChildWrapper, oldChildWrapper) {
1867 - assertIsNodeWrapper(newChildWrapper);
1868 - var oldChildNode;
1869 - if (isWrapper(oldChildWrapper)) {
1870 - oldChildNode = unwrap(oldChildWrapper);
1871 - } else {
1872 - oldChildNode = oldChildWrapper;
1873 - oldChildWrapper = wrap(oldChildNode);
1874 - }
1875 - if (oldChildWrapper.parentNode !== this) {
1876 - throw new Error("NotFoundError");
1877 - }
1878 - var nextNode = oldChildWrapper.nextSibling;
1879 - var previousNode = oldChildWrapper.previousSibling;
1880 - var nodes;
1881 - var useNative = !this.invalidateShadowRenderer() && !invalidateParent(newChildWrapper);
1882 - if (useNative) {
1883 - nodes = collectNodesNative(newChildWrapper);
1884 - } else {
1885 - if (nextNode === newChildWrapper) nextNode = newChildWrapper.nextSibling;
1886 - nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);
1887 - }
1888 - if (!useNative) {
1889 - if (this.firstChild === oldChildWrapper) this.firstChild_ = nodes[0];
1890 - if (this.lastChild === oldChildWrapper) this.lastChild_ = nodes[nodes.length - 1];
1891 - oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ = oldChildWrapper.parentNode_ = undefined;
1892 - if (oldChildNode.parentNode) {
1893 - originalReplaceChild.call(oldChildNode.parentNode, unwrapNodesForInsertion(this, nodes), oldChildNode);
1894 - }
1895 - } else {
1896 - ensureSameOwnerDocument(this, newChildWrapper);
1897 - clearChildNodes(this);
1898 - originalReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper), oldChildNode);
1899 - }
1900 - enqueueMutation(this, "childList", {
1901 - addedNodes: nodes,
1902 - removedNodes: createOneElementNodeList(oldChildWrapper),
1903 - nextSibling: nextNode,
1904 - previousSibling: previousNode
1905 - });
1906 - nodeWasRemoved(oldChildWrapper);
1907 - nodesWereAdded(nodes, this);
1908 - return oldChildWrapper;
1909 - },
1910 - nodeIsInserted_: function() {
1911 - for (var child = this.firstChild; child; child = child.nextSibling) {
1912 - child.nodeIsInserted_();
1913 - }
1914 - },
1915 - hasChildNodes: function() {
1916 - return this.firstChild !== null;
1917 - },
1918 - get parentNode() {
1919 - return this.parentNode_ !== undefined ? this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);
1920 - },
1921 - get firstChild() {
1922 - return this.firstChild_ !== undefined ? this.firstChild_ : wrap(unsafeUnwrap(this).firstChild);
1923 - },
1924 - get lastChild() {
1925 - return this.lastChild_ !== undefined ? this.lastChild_ : wrap(unsafeUnwrap(this).lastChild);
1926 - },
1927 - get nextSibling() {
1928 - return this.nextSibling_ !== undefined ? this.nextSibling_ : wrap(unsafeUnwrap(this).nextSibling);
1929 - },
1930 - get previousSibling() {
1931 - return this.previousSibling_ !== undefined ? this.previousSibling_ : wrap(unsafeUnwrap(this).previousSibling);
1932 - },
1933 - get parentElement() {
1934 - var p = this.parentNode;
1935 - while (p && p.nodeType !== Node.ELEMENT_NODE) {
1936 - p = p.parentNode;
1937 - }
1938 - return p;
1939 - },
1940 - get textContent() {
1941 - var s = "";
1942 - for (var child = this.firstChild; child; child = child.nextSibling) {
1943 - if (child.nodeType != Node.COMMENT_NODE) {
1944 - s += child.textContent;
1945 - }
1946 - }
1947 - return s;
1948 - },
1949 - set textContent(textContent) {
1950 - if (textContent == null) textContent = "";
1951 - var removedNodes = snapshotNodeList(this.childNodes);
1952 - if (this.invalidateShadowRenderer()) {
1953 - removeAllChildNodes(this);
1954 - if (textContent !== "") {
1955 - var textNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent);
1956 - this.appendChild(textNode);
1957 - }
1958 - } else {
1959 - clearChildNodes(this);
1960 - unsafeUnwrap(this).textContent = textContent;
1961 - }
1962 - var addedNodes = snapshotNodeList(this.childNodes);
1963 - enqueueMutation(this, "childList", {
1964 - addedNodes: addedNodes,
1965 - removedNodes: removedNodes
1966 - });
1967 - nodesWereRemoved(removedNodes);
1968 - nodesWereAdded(addedNodes, this);
1969 - },
1970 - get childNodes() {
1971 - var wrapperList = new NodeList();
1972 - var i = 0;
1973 - for (var child = this.firstChild; child; child = child.nextSibling) {
1974 - wrapperList[i++] = child;
1975 - }
1976 - wrapperList.length = i;
1977 - return wrapperList;
1978 - },
1979 - cloneNode: function(deep) {
1980 - return cloneNode(this, deep);
1981 - },
1982 - contains: function(child) {
1983 - return contains(this, wrapIfNeeded(child));
1984 - },
1985 - compareDocumentPosition: function(otherNode) {
1986 - return originalCompareDocumentPosition.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode));
1987 - },
1988 - normalize: function() {
1989 - var nodes = snapshotNodeList(this.childNodes);
1990 - var remNodes = [];
1991 - var s = "";
1992 - var modNode;
1993 - for (var i = 0, n; i < nodes.length; i++) {
1994 - n = nodes[i];
1995 - if (n.nodeType === Node.TEXT_NODE) {
1996 - if (!modNode && !n.data.length) this.removeNode(n); else if (!modNode) modNode = n; else {
1997 - s += n.data;
1998 - remNodes.push(n);
1999 - }
2000 - } else {
2001 - if (modNode && remNodes.length) {
2002 - modNode.data += s;
2003 - cleanupNodes(remNodes);
2004 - }
2005 - remNodes = [];
2006 - s = "";
2007 - modNode = null;
2008 - if (n.childNodes.length) n.normalize();
2009 - }
2010 - }
2011 - if (modNode && remNodes.length) {
2012 - modNode.data += s;
2013 - cleanupNodes(remNodes);
2014 - }
2015 - }
2016 - });
2017 - defineWrapGetter(Node, "ownerDocument");
2018 - registerWrapper(OriginalNode, Node, document.createDocumentFragment());
2019 - delete Node.prototype.querySelector;
2020 - delete Node.prototype.querySelectorAll;
2021 - Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype);
2022 - scope.cloneNode = cloneNode;
2023 - scope.nodeWasAdded = nodeWasAdded;
2024 - scope.nodeWasRemoved = nodeWasRemoved;
2025 - scope.nodesWereAdded = nodesWereAdded;
2026 - scope.nodesWereRemoved = nodesWereRemoved;
2027 - scope.originalInsertBefore = originalInsertBefore;
2028 - scope.originalRemoveChild = originalRemoveChild;
2029 - scope.snapshotNodeList = snapshotNodeList;
2030 - scope.wrappers.Node = Node;
2031 - })(window.ShadowDOMPolyfill);
2032 - (function(scope) {
2033 - "use strict";
2034 - var HTMLCollection = scope.wrappers.HTMLCollection;
2035 - var NodeList = scope.wrappers.NodeList;
2036 - var getTreeScope = scope.getTreeScope;
2037 - var unsafeUnwrap = scope.unsafeUnwrap;
2038 - var wrap = scope.wrap;
2039 - var originalDocumentQuerySelector = document.querySelector;
2040 - var originalElementQuerySelector = document.documentElement.querySelector;
2041 - var originalDocumentQuerySelectorAll = document.querySelectorAll;
2042 - var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;
2043 - var originalDocumentGetElementsByTagName = document.getElementsByTagName;
2044 - var originalElementGetElementsByTagName = document.documentElement.getElementsByTagName;
2045 - var originalDocumentGetElementsByTagNameNS = document.getElementsByTagNameNS;
2046 - var originalElementGetElementsByTagNameNS = document.documentElement.getElementsByTagNameNS;
2047 - var OriginalElement = window.Element;
2048 - var OriginalDocument = window.HTMLDocument || window.Document;
2049 - function filterNodeList(list, index, result, deep) {
2050 - var wrappedItem = null;
2051 - var root = null;
2052 - for (var i = 0, length = list.length; i < length; i++) {
2053 - wrappedItem = wrap(list[i]);
2054 - if (!deep && (root = getTreeScope(wrappedItem).root)) {
2055 - if (root instanceof scope.wrappers.ShadowRoot) {
2056 - continue;
2057 - }
2058 - }
2059 - result[index++] = wrappedItem;
2060 - }
2061 - return index;
2062 - }
2063 - function shimSelector(selector) {
2064 - return String(selector).replace(/\/deep\//g, " ");
2065 - }
2066 - function findOne(node, selector) {
2067 - var m, el = node.firstElementChild;
2068 - while (el) {
2069 - if (el.matches(selector)) return el;
2070 - m = findOne(el, selector);
2071 - if (m) return m;
2072 - el = el.nextElementSibling;
2073 - }
2074 - return null;
2075 - }
2076 - function matchesSelector(el, selector) {
2077 - return el.matches(selector);
2078 - }
2079 - var XHTML_NS = "http://www.w3.org/1999/xhtml";
2080 - function matchesTagName(el, localName, localNameLowerCase) {
2081 - var ln = el.localName;
2082 - return ln === localName || ln === localNameLowerCase && el.namespaceURI === XHTML_NS;
2083 - }
2084 - function matchesEveryThing() {
2085 - return true;
2086 - }
2087 - function matchesLocalNameOnly(el, ns, localName) {
2088 - return el.localName === localName;
2089 - }
2090 - function matchesNameSpace(el, ns) {
2091 - return el.namespaceURI === ns;
2092 - }
2093 - function matchesLocalNameNS(el, ns, localName) {
2094 - return el.namespaceURI === ns && el.localName === localName;
2095 - }
2096 - function findElements(node, index, result, p, arg0, arg1) {
2097 - var el = node.firstElementChild;
2098 - while (el) {
2099 - if (p(el, arg0, arg1)) result[index++] = el;
2100 - index = findElements(el, index, result, p, arg0, arg1);
2101 - el = el.nextElementSibling;
2102 - }
2103 - return index;
2104 - }
2105 - function querySelectorAllFiltered(p, index, result, selector, deep) {
2106 - var target = unsafeUnwrap(this);
2107 - var list;
2108 - var root = getTreeScope(this).root;
2109 - if (root instanceof scope.wrappers.ShadowRoot) {
2110 - return findElements(this, index, result, p, selector, null);
2111 - } else if (target instanceof OriginalElement) {
2112 - list = originalElementQuerySelectorAll.call(target, selector);
2113 - } else if (target instanceof OriginalDocument) {
2114 - list = originalDocumentQuerySelectorAll.call(target, selector);
2115 - } else {
2116 - return findElements(this, index, result, p, selector, null);
2117 - }
2118 - return filterNodeList(list, index, result, deep);
2119 - }
2120 - var SelectorsInterface = {
2121 - querySelector: function(selector) {
2122 - var shimmed = shimSelector(selector);
2123 - var deep = shimmed !== selector;
2124 - selector = shimmed;
2125 - var target = unsafeUnwrap(this);
2126 - var wrappedItem;
2127 - var root = getTreeScope(this).root;
2128 - if (root instanceof scope.wrappers.ShadowRoot) {
2129 - return findOne(this, selector);
2130 - } else if (target instanceof OriginalElement) {
2131 - wrappedItem = wrap(originalElementQuerySelector.call(target, selector));
2132 - } else if (target instanceof OriginalDocument) {
2133 - wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));
2134 - } else {
2135 - return findOne(this, selector);
2136 - }
2137 - if (!wrappedItem) {
2138 - return wrappedItem;
2139 - } else if (!deep && (root = getTreeScope(wrappedItem).root)) {
2140 - if (root instanceof scope.wrappers.ShadowRoot) {
2141 - return findOne(this, selector);
2142 - }
2143 - }
2144 - return wrappedItem;
2145 - },
2146 - querySelectorAll: function(selector) {
2147 - var shimmed = shimSelector(selector);
2148 - var deep = shimmed !== selector;
2149 - selector = shimmed;
2150 - var result = new NodeList();
2151 - result.length = querySelectorAllFiltered.call(this, matchesSelector, 0, result, selector, deep);
2152 - return result;
2153 - }
2154 - };
2155 - function getElementsByTagNameFiltered(p, index, result, localName, lowercase) {
2156 - var target = unsafeUnwrap(this);
2157 - var list;
2158 - var root = getTreeScope(this).root;
2159 - if (root instanceof scope.wrappers.ShadowRoot) {
2160 - return findElements(this, index, result, p, localName, lowercase);
2161 - } else if (target instanceof OriginalElement) {
2162 - list = originalElementGetElementsByTagName.call(target, localName, lowercase);
2163 - } else if (target instanceof OriginalDocument) {
2164 - list = originalDocumentGetElementsByTagName.call(target, localName, lowercase);
2165 - } else {
2166 - return findElements(this, index, result, p, localName, lowercase);
2167 - }
2168 - return filterNodeList(list, index, result, false);
2169 - }
2170 - function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {
2171 - var target = unsafeUnwrap(this);
2172 - var list;
2173 - var root = getTreeScope(this).root;
2174 - if (root instanceof scope.wrappers.ShadowRoot) {
2175 - return findElements(this, index, result, p, ns, localName);
2176 - } else if (target instanceof OriginalElement) {
2177 - list = originalElementGetElementsByTagNameNS.call(target, ns, localName);
2178 - } else if (target instanceof OriginalDocument) {
2179 - list = originalDocumentGetElementsByTagNameNS.call(target, ns, localName);
2180 - } else {
2181 - return findElements(this, index, result, p, ns, localName);
2182 - }
2183 - return filterNodeList(list, index, result, false);
2184 - }
2185 - var GetElementsByInterface = {
2186 - getElementsByTagName: function(localName) {
2187 - var result = new HTMLCollection();
2188 - var match = localName === "*" ? matchesEveryThing : matchesTagName;
2189 - result.length = getElementsByTagNameFiltered.call(this, match, 0, result, localName, localName.toLowerCase());
2190 - return result;
2191 - },
2192 - getElementsByClassName: function(className) {
2193 - return this.querySelectorAll("." + className);
2194 - },
2195 - getElementsByTagNameNS: function(ns, localName) {
2196 - var result = new HTMLCollection();
2197 - var match = null;
2198 - if (ns === "*") {
2199 - match = localName === "*" ? matchesEveryThing : matchesLocalNameOnly;
2200 - } else {
2201 - match = localName === "*" ? matchesNameSpace : matchesLocalNameNS;
2202 - }
2203 - result.length = getElementsByTagNameNSFiltered.call(this, match, 0, result, ns || null, localName);
2204 - return result;
2205 - }
2206 - };
2207 - scope.GetElementsByInterface = GetElementsByInterface;
2208 - scope.SelectorsInterface = SelectorsInterface;
2209 - })(window.ShadowDOMPolyfill);
2210 - (function(scope) {
2211 - "use strict";
2212 - var NodeList = scope.wrappers.NodeList;
2213 - function forwardElement(node) {
2214 - while (node && node.nodeType !== Node.ELEMENT_NODE) {
2215 - node = node.nextSibling;
2216 - }
2217 - return node;
2218 - }
2219 - function backwardsElement(node) {
2220 - while (node && node.nodeType !== Node.ELEMENT_NODE) {
2221 - node = node.previousSibling;
2222 - }
2223 - return node;
2224 - }
2225 - var ParentNodeInterface = {
2226 - get firstElementChild() {
2227 - return forwardElement(this.firstChild);
2228 - },
2229 - get lastElementChild() {
2230 - return backwardsElement(this.lastChild);
2231 - },
2232 - get childElementCount() {
2233 - var count = 0;
2234 - for (var child = this.firstElementChild; child; child = child.nextElementSibling) {
2235 - count++;
2236 - }
2237 - return count;
2238 - },
2239 - get children() {
2240 - var wrapperList = new NodeList();
2241 - var i = 0;
2242 - for (var child = this.firstElementChild; child; child = child.nextElementSibling) {
2243 - wrapperList[i++] = child;
2244 - }
2245 - wrapperList.length = i;
2246 - return wrapperList;
2247 - },
2248 - remove: function() {
2249 - var p = this.parentNode;
2250 - if (p) p.removeChild(this);
2251 - }
2252 - };
2253 - var ChildNodeInterface = {
2254 - get nextElementSibling() {
2255 - return forwardElement(this.nextSibling);
2256 - },
2257 - get previousElementSibling() {
2258 - return backwardsElement(this.previousSibling);
2259 - }
2260 - };
2261 - scope.ChildNodeInterface = ChildNodeInterface;
2262 - scope.ParentNodeInterface = ParentNodeInterface;
2263 - })(window.ShadowDOMPolyfill);
2264 - (function(scope) {
2265 - "use strict";
2266 - var ChildNodeInterface = scope.ChildNodeInterface;
2267 - var Node = scope.wrappers.Node;
2268 - var enqueueMutation = scope.enqueueMutation;
2269 - var mixin = scope.mixin;
2270 - var registerWrapper = scope.registerWrapper;
2271 - var unsafeUnwrap = scope.unsafeUnwrap;
2272 - var OriginalCharacterData = window.CharacterData;
2273 - function CharacterData(node) {
2274 - Node.call(this, node);
2275 - }
2276 - CharacterData.prototype = Object.create(Node.prototype);
2277 - mixin(CharacterData.prototype, {
2278 - get textContent() {
2279 - return this.data;
2280 - },
2281 - set textContent(value) {
2282 - this.data = value;
2283 - },
2284 - get data() {
2285 - return unsafeUnwrap(this).data;
2286 - },
2287 - set data(value) {
2288 - var oldValue = unsafeUnwrap(this).data;
2289 - enqueueMutation(this, "characterData", {
2290 - oldValue: oldValue
2291 - });
2292 - unsafeUnwrap(this).data = value;
2293 - }
2294 - });
2295 - mixin(CharacterData.prototype, ChildNodeInterface);
2296 - registerWrapper(OriginalCharacterData, CharacterData, document.createTextNode(""));
2297 - scope.wrappers.CharacterData = CharacterData;
2298 - })(window.ShadowDOMPolyfill);
2299 - (function(scope) {
2300 - "use strict";
2301 - var CharacterData = scope.wrappers.CharacterData;
2302 - var enqueueMutation = scope.enqueueMutation;
2303 - var mixin = scope.mixin;
2304 - var registerWrapper = scope.registerWrapper;
2305 - function toUInt32(x) {
2306 - return x >>> 0;
2307 - }
2308 - var OriginalText = window.Text;
2309 - function Text(node) {
2310 - CharacterData.call(this, node);
2311 - }
2312 - Text.prototype = Object.create(CharacterData.prototype);
2313 - mixin(Text.prototype, {
2314 - splitText: function(offset) {
2315 - offset = toUInt32(offset);
2316 - var s = this.data;
2317 - if (offset > s.length) throw new Error("IndexSizeError");
2318 - var head = s.slice(0, offset);
2319 - var tail = s.slice(offset);
2320 - this.data = head;
2321 - var newTextNode = this.ownerDocument.createTextNode(tail);
2322 - if (this.parentNode) this.parentNode.insertBefore(newTextNode, this.nextSibling);
2323 - return newTextNode;
2324 - }
2325 - });
2326 - registerWrapper(OriginalText, Text, document.createTextNode(""));
2327 - scope.wrappers.Text = Text;
2328 - })(window.ShadowDOMPolyfill);
2329 - (function(scope) {
2330 - "use strict";
2331 - var setWrapper = scope.setWrapper;
2332 - var unsafeUnwrap = scope.unsafeUnwrap;
2333 - function invalidateClass(el) {
2334 - scope.invalidateRendererBasedOnAttribute(el, "class");
2335 - }
2336 - function DOMTokenList(impl, ownerElement) {
2337 - setWrapper(impl, this);
2338 - this.ownerElement_ = ownerElement;
2339 - }
2340 - DOMTokenList.prototype = {
2341 - constructor: DOMTokenList,
2342 - get length() {
2343 - return unsafeUnwrap(this).length;
2344 - },
2345 - item: function(index) {
2346 - return unsafeUnwrap(this).item(index);
2347 - },
2348 - contains: function(token) {
2349 - return unsafeUnwrap(this).contains(token);
2350 - },
2351 - add: function() {
2352 - unsafeUnwrap(this).add.apply(unsafeUnwrap(this), arguments);
2353 - invalidateClass(this.ownerElement_);
2354 - },
2355 - remove: function() {
2356 - unsafeUnwrap(this).remove.apply(unsafeUnwrap(this), arguments);
2357 - invalidateClass(this.ownerElement_);
2358 - },
2359 - toggle: function(token) {
2360 - var rv = unsafeUnwrap(this).toggle.apply(unsafeUnwrap(this), arguments);
2361 - invalidateClass(this.ownerElement_);
2362 - return rv;
2363 - },
2364 - toString: function() {
2365 - return unsafeUnwrap(this).toString();
2366 - }
2367 - };
2368 - scope.wrappers.DOMTokenList = DOMTokenList;
2369 - })(window.ShadowDOMPolyfill);
2370 - (function(scope) {
2371 - "use strict";
2372 - var ChildNodeInterface = scope.ChildNodeInterface;
2373 - var GetElementsByInterface = scope.GetElementsByInterface;
2374 - var Node = scope.wrappers.Node;
2375 - var DOMTokenList = scope.wrappers.DOMTokenList;
2376 - var ParentNodeInterface = scope.ParentNodeInterface;
2377 - var SelectorsInterface = scope.SelectorsInterface;
2378 - var addWrapNodeListMethod = scope.addWrapNodeListMethod;
2379 - var enqueueMutation = scope.enqueueMutation;
2380 - var mixin = scope.mixin;
2381 - var oneOf = scope.oneOf;
2382 - var registerWrapper = scope.registerWrapper;
2383 - var unsafeUnwrap = scope.unsafeUnwrap;
2384 - var wrappers = scope.wrappers;
2385 - var OriginalElement = window.Element;
2386 - var matchesNames = [ "matches", "mozMatchesSelector", "msMatchesSelector", "webkitMatchesSelector" ].filter(function(name) {
2387 - return OriginalElement.prototype[name];
2388 - });
2389 - var matchesName = matchesNames[0];
2390 - var originalMatches = OriginalElement.prototype[matchesName];
2391 - function invalidateRendererBasedOnAttribute(element, name) {
2392 - var p = element.parentNode;
2393 - if (!p || !p.shadowRoot) return;
2394 - var renderer = scope.getRendererForHost(p);
2395 - if (renderer.dependsOnAttribute(name)) renderer.invalidate();
2396 - }
2397 - function enqueAttributeChange(element, name, oldValue) {
2398 - enqueueMutation(element, "attributes", {
2399 - name: name,
2400 - namespace: null,
2401 - oldValue: oldValue
2402 - });
2403 - }
2404 - var classListTable = new WeakMap();
2405 - function Element(node) {
2406 - Node.call(this, node);
2407 - }
2408 - Element.prototype = Object.create(Node.prototype);
2409 - mixin(Element.prototype, {
2410 - createShadowRoot: function() {
2411 - var newShadowRoot = new wrappers.ShadowRoot(this);
2412 - unsafeUnwrap(this).polymerShadowRoot_ = newShadowRoot;
2413 - var renderer = scope.getRendererForHost(this);
2414 - renderer.invalidate();
2415 - return newShadowRoot;
2416 - },
2417 - get shadowRoot() {
2418 - return unsafeUnwrap(this).polymerShadowRoot_ || null;
2419 - },
2420 - setAttribute: function(name, value) {
2421 - var oldValue = unsafeUnwrap(this).getAttribute(name);
2422 - unsafeUnwrap(this).setAttribute(name, value);
2423 - enqueAttributeChange(this, name, oldValue);
2424 - invalidateRendererBasedOnAttribute(this, name);
2425 - },
2426 - removeAttribute: function(name) {
2427 - var oldValue = unsafeUnwrap(this).getAttribute(name);
2428 - unsafeUnwrap(this).removeAttribute(name);
2429 - enqueAttributeChange(this, name, oldValue);
2430 - invalidateRendererBasedOnAttribute(this, name);
2431 - },
2432 - matches: function(selector) {
2433 - return originalMatches.call(unsafeUnwrap(this), selector);
2434 - },
2435 - get classList() {
2436 - var list = classListTable.get(this);
2437 - if (!list) {
2438 - classListTable.set(this, list = new DOMTokenList(unsafeUnwrap(this).classList, this));
2439 - }
2440 - return list;
2441 - },
2442 - get className() {
2443 - return unsafeUnwrap(this).className;
2444 - },
2445 - set className(v) {
2446 - this.setAttribute("class", v);
2447 - },
2448 - get id() {
2449 - return unsafeUnwrap(this).id;
2450 - },
2451 - set id(v) {
2452 - this.setAttribute("id", v);
2453 - }
2454 - });
2455 - matchesNames.forEach(function(name) {
2456 - if (name !== "matches") {
2457 - Element.prototype[name] = function(selector) {
2458 - return this.matches(selector);
2459 - };
2460 - }
2461 - });
2462 - if (OriginalElement.prototype.webkitCreateShadowRoot) {
2463 - Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRoot;
2464 - }
2465 - mixin(Element.prototype, ChildNodeInterface);
2466 - mixin(Element.prototype, GetElementsByInterface);
2467 - mixin(Element.prototype, ParentNodeInterface);
2468 - mixin(Element.prototype, SelectorsInterface);
2469 - registerWrapper(OriginalElement, Element, document.createElementNS(null, "x"));
2470 - scope.invalidateRendererBasedOnAttribute = invalidateRendererBasedOnAttribute;
2471 - scope.matchesNames = matchesNames;
2472 - scope.wrappers.Element = Element;
2473 - })(window.ShadowDOMPolyfill);
2474 - (function(scope) {
2475 - "use strict";
2476 - var Element = scope.wrappers.Element;
2477 - var defineGetter = scope.defineGetter;
2478 - var enqueueMutation = scope.enqueueMutation;
2479 - var mixin = scope.mixin;
2480 - var nodesWereAdded = scope.nodesWereAdded;
2481 - var nodesWereRemoved = scope.nodesWereRemoved;
2482 - var registerWrapper = scope.registerWrapper;
2483 - var snapshotNodeList = scope.snapshotNodeList;
2484 - var unsafeUnwrap = scope.unsafeUnwrap;
2485 - var unwrap = scope.unwrap;
2486 - var wrap = scope.wrap;
2487 - var wrappers = scope.wrappers;
2488 - var escapeAttrRegExp = /[&\u00A0"]/g;
2489 - var escapeDataRegExp = /[&\u00A0<>]/g;
2490 - function escapeReplace(c) {
2491 - switch (c) {
2492 - case "&":
2493 - return "&amp;";
2494 -
2495 - case "<":
2496 - return "&lt;";
2497 -
2498 - case ">":
2499 - return "&gt;";
2500 -
2501 - case '"':
2502 - return "&quot;";
2503 -
2504 - case " ":
2505 - return "&nbsp;";
2506 - }
2507 - }
2508 - function escapeAttr(s) {
2509 - return s.replace(escapeAttrRegExp, escapeReplace);
2510 - }
2511 - function escapeData(s) {
2512 - return s.replace(escapeDataRegExp, escapeReplace);
2513 - }
2514 - function makeSet(arr) {
2515 - var set = {};
2516 - for (var i = 0; i < arr.length; i++) {
2517 - set[arr[i]] = true;
2518 - }
2519 - return set;
2520 - }
2521 - var voidElements = makeSet([ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]);
2522 - var plaintextParents = makeSet([ "style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript" ]);
2523 - function getOuterHTML(node, parentNode) {
2524 - switch (node.nodeType) {
2525 - case Node.ELEMENT_NODE:
2526 - var tagName = node.tagName.toLowerCase();
2527 - var s = "<" + tagName;
2528 - var attrs = node.attributes;
2529 - for (var i = 0, attr; attr = attrs[i]; i++) {
2530 - s += " " + attr.name + '="' + escapeAttr(attr.value) + '"';
2531 - }
2532 - s += ">";
2533 - if (voidElements[tagName]) return s;
2534 - return s + getInnerHTML(node) + "</" + tagName + ">";
2535 -
2536 - case Node.TEXT_NODE:
2537 - var data = node.data;
2538 - if (parentNode && plaintextParents[parentNode.localName]) return data;
2539 - return escapeData(data);
2540 -
2541 - case Node.COMMENT_NODE:
2542 - return "<!--" + node.data + "-->";
2543 -
2544 - default:
2545 - console.error(node);
2546 - throw new Error("not implemented");
2547 - }
2548 - }
2549 - function getInnerHTML(node) {
2550 - if (node instanceof wrappers.HTMLTemplateElement) node = node.content;
2551 - var s = "";
2552 - for (var child = node.firstChild; child; child = child.nextSibling) {
2553 - s += getOuterHTML(child, node);
2554 - }
2555 - return s;
2556 - }
2557 - function setInnerHTML(node, value, opt_tagName) {
2558 - var tagName = opt_tagName || "div";
2559 - node.textContent = "";
2560 - var tempElement = unwrap(node.ownerDocument.createElement(tagName));
2561 - tempElement.innerHTML = value;
2562 - var firstChild;
2563 - while (firstChild = tempElement.firstChild) {
2564 - node.appendChild(wrap(firstChild));
2565 - }
2566 - }
2567 - var oldIe = /MSIE/.test(navigator.userAgent);
2568 - var OriginalHTMLElement = window.HTMLElement;
2569 - var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
2570 - function HTMLElement(node) {
2571 - Element.call(this, node);
2572 - }
2573 - HTMLElement.prototype = Object.create(Element.prototype);
2574 - mixin(HTMLElement.prototype, {
2575 - get innerHTML() {
2576 - return getInnerHTML(this);
2577 - },
2578 - set innerHTML(value) {
2579 - if (oldIe && plaintextParents[this.localName]) {
2580 - this.textContent = value;
2581 - return;
2582 - }
2583 - var removedNodes = snapshotNodeList(this.childNodes);
2584 - if (this.invalidateShadowRenderer()) {
2585 - if (this instanceof wrappers.HTMLTemplateElement) setInnerHTML(this.content, value); else setInnerHTML(this, value, this.tagName);
2586 - } else if (!OriginalHTMLTemplateElement && this instanceof wrappers.HTMLTemplateElement) {
2587 - setInnerHTML(this.content, value);
2588 - } else {
2589 - unsafeUnwrap(this).innerHTML = value;
2590 - }
2591 - var addedNodes = snapshotNodeList(this.childNodes);
2592 - enqueueMutation(this, "childList", {
2593 - addedNodes: addedNodes,
2594 - removedNodes: removedNodes
2595 - });
2596 - nodesWereRemoved(removedNodes);
2597 - nodesWereAdded(addedNodes, this);
2598 - },
2599 - get outerHTML() {
2600 - return getOuterHTML(this, this.parentNode);
2601 - },
2602 - set outerHTML(value) {
2603 - var p = this.parentNode;
2604 - if (p) {
2605 - p.invalidateShadowRenderer();
2606 - var df = frag(p, value);
2607 - p.replaceChild(df, this);
2608 - }
2609 - },
2610 - insertAdjacentHTML: function(position, text) {
2611 - var contextElement, refNode;
2612 - switch (String(position).toLowerCase()) {
2613 - case "beforebegin":
2614 - contextElement = this.parentNode;
2615 - refNode = this;
2616 - break;
2617 -
2618 - case "afterend":
2619 - contextElement = this.parentNode;
2620 - refNode = this.nextSibling;
2621 - break;
2622 -
2623 - case "afterbegin":
2624 - contextElement = this;
2625 - refNode = this.firstChild;
2626 - break;
2627 -
2628 - case "beforeend":
2629 - contextElement = this;
2630 - refNode = null;
2631 - break;
2632 -
2633 - default:
2634 - return;
2635 - }
2636 - var df = frag(contextElement, text);
2637 - contextElement.insertBefore(df, refNode);
2638 - },
2639 - get hidden() {
2640 - return this.hasAttribute("hidden");
2641 - },
2642 - set hidden(v) {
2643 - if (v) {
2644 - this.setAttribute("hidden", "");
2645 - } else {
2646 - this.removeAttribute("hidden");
2647 - }
2648 - }
2649 - });
2650 - function frag(contextElement, html) {
2651 - var p = unwrap(contextElement.cloneNode(false));
2652 - p.innerHTML = html;
2653 - var df = unwrap(document.createDocumentFragment());
2654 - var c;
2655 - while (c = p.firstChild) {
2656 - df.appendChild(c);
2657 - }
2658 - return wrap(df);
2659 - }
2660 - function getter(name) {
2661 - return function() {
2662 - scope.renderAllPending();
2663 - return unsafeUnwrap(this)[name];
2664 - };
2665 - }
2666 - function getterRequiresRendering(name) {
2667 - defineGetter(HTMLElement, name, getter(name));
2668 - }
2669 - [ "clientHeight", "clientLeft", "clientTop", "clientWidth", "offsetHeight", "offsetLeft", "offsetTop", "offsetWidth", "scrollHeight", "scrollWidth" ].forEach(getterRequiresRendering);
2670 - function getterAndSetterRequiresRendering(name) {
2671 - Object.defineProperty(HTMLElement.prototype, name, {
2672 - get: getter(name),
2673 - set: function(v) {
2674 - scope.renderAllPending();
2675 - unsafeUnwrap(this)[name] = v;
2676 - },
2677 - configurable: true,
2678 - enumerable: true
2679 - });
2680 - }
2681 - [ "scrollLeft", "scrollTop" ].forEach(getterAndSetterRequiresRendering);
2682 - function methodRequiresRendering(name) {
2683 - Object.defineProperty(HTMLElement.prototype, name, {
2684 - value: function() {
2685 - scope.renderAllPending();
2686 - return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);
2687 - },
2688 - configurable: true,
2689 - enumerable: true
2690 - });
2691 - }
2692 - [ "getBoundingClientRect", "getClientRects", "scrollIntoView" ].forEach(methodRequiresRendering);
2693 - registerWrapper(OriginalHTMLElement, HTMLElement, document.createElement("b"));
2694 - scope.wrappers.HTMLElement = HTMLElement;
2695 - scope.getInnerHTML = getInnerHTML;
2696 - scope.setInnerHTML = setInnerHTML;
2697 - })(window.ShadowDOMPolyfill);
2698 - (function(scope) {
2699 - "use strict";
2700 - var HTMLElement = scope.wrappers.HTMLElement;
2701 - var mixin = scope.mixin;
2702 - var registerWrapper = scope.registerWrapper;
2703 - var unsafeUnwrap = scope.unsafeUnwrap;
2704 - var wrap = scope.wrap;
2705 - var OriginalHTMLCanvasElement = window.HTMLCanvasElement;
2706 - function HTMLCanvasElement(node) {
2707 - HTMLElement.call(this, node);
2708 - }
2709 - HTMLCanvasElement.prototype = Object.create(HTMLElement.prototype);
2710 - mixin(HTMLCanvasElement.prototype, {
2711 - getContext: function() {
2712 - var context = unsafeUnwrap(this).getContext.apply(unsafeUnwrap(this), arguments);
2713 - return context && wrap(context);
2714 - }
2715 - });
2716 - registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement, document.createElement("canvas"));
2717 - scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;
2718 - })(window.ShadowDOMPolyfill);
2719 - (function(scope) {
2720 - "use strict";
2721 - var HTMLElement = scope.wrappers.HTMLElement;
2722 - var mixin = scope.mixin;
2723 - var registerWrapper = scope.registerWrapper;
2724 - var OriginalHTMLContentElement = window.HTMLContentElement;
2725 - function HTMLContentElement(node) {
2726 - HTMLElement.call(this, node);
2727 - }
2728 - HTMLContentElement.prototype = Object.create(HTMLElement.prototype);
2729 - mixin(HTMLContentElement.prototype, {
2730 - constructor: HTMLContentElement,
2731 - get select() {
2732 - return this.getAttribute("select");
2733 - },
2734 - set select(value) {
2735 - this.setAttribute("select", value);
2736 - },
2737 - setAttribute: function(n, v) {
2738 - HTMLElement.prototype.setAttribute.call(this, n, v);
2739 - if (String(n).toLowerCase() === "select") this.invalidateShadowRenderer(true);
2740 - }
2741 - });
2742 - if (OriginalHTMLContentElement) registerWrapper(OriginalHTMLContentElement, HTMLContentElement);
2743 - scope.wrappers.HTMLContentElement = HTMLContentElement;
2744 - })(window.ShadowDOMPolyfill);
2745 - (function(scope) {
2746 - "use strict";
2747 - var HTMLElement = scope.wrappers.HTMLElement;
2748 - var mixin = scope.mixin;
2749 - var registerWrapper = scope.registerWrapper;
2750 - var wrapHTMLCollection = scope.wrapHTMLCollection;
2751 - var unwrap = scope.unwrap;
2752 - var OriginalHTMLFormElement = window.HTMLFormElement;
2753 - function HTMLFormElement(node) {
2754 - HTMLElement.call(this, node);
2755 - }
2756 - HTMLFormElement.prototype = Object.create(HTMLElement.prototype);
2757 - mixin(HTMLFormElement.prototype, {
2758 - get elements() {
2759 - return wrapHTMLCollection(unwrap(this).elements);
2760 - }
2761 - });
2762 - registerWrapper(OriginalHTMLFormElement, HTMLFormElement, document.createElement("form"));
2763 - scope.wrappers.HTMLFormElement = HTMLFormElement;
2764 - })(window.ShadowDOMPolyfill);
2765 - (function(scope) {
2766 - "use strict";
2767 - var HTMLElement = scope.wrappers.HTMLElement;
2768 - var registerWrapper = scope.registerWrapper;
2769 - var unwrap = scope.unwrap;
2770 - var rewrap = scope.rewrap;
2771 - var OriginalHTMLImageElement = window.HTMLImageElement;
2772 - function HTMLImageElement(node) {
2773 - HTMLElement.call(this, node);
2774 - }
2775 - HTMLImageElement.prototype = Object.create(HTMLElement.prototype);
2776 - registerWrapper(OriginalHTMLImageElement, HTMLImageElement, document.createElement("img"));
2777 - function Image(width, height) {
2778 - if (!(this instanceof Image)) {
2779 - throw new TypeError("DOM object constructor cannot be called as a function.");
2780 - }
2781 - var node = unwrap(document.createElement("img"));
2782 - HTMLElement.call(this, node);
2783 - rewrap(node, this);
2784 - if (width !== undefined) node.width = width;
2785 - if (height !== undefined) node.height = height;
2786 - }
2787 - Image.prototype = HTMLImageElement.prototype;
2788 - scope.wrappers.HTMLImageElement = HTMLImageElement;
2789 - scope.wrappers.Image = Image;
2790 - })(window.ShadowDOMPolyfill);
2791 - (function(scope) {
2792 - "use strict";
2793 - var HTMLElement = scope.wrappers.HTMLElement;
2794 - var mixin = scope.mixin;
2795 - var NodeList = scope.wrappers.NodeList;
2796 - var registerWrapper = scope.registerWrapper;
2797 - var OriginalHTMLShadowElement = window.HTMLShadowElement;
2798 - function HTMLShadowElement(node) {
2799 - HTMLElement.call(this, node);
2800 - }
2801 - HTMLShadowElement.prototype = Object.create(HTMLElement.prototype);
2802 - HTMLShadowElement.prototype.constructor = HTMLShadowElement;
2803 - if (OriginalHTMLShadowElement) registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement);
2804 - scope.wrappers.HTMLShadowElement = HTMLShadowElement;
2805 - })(window.ShadowDOMPolyfill);
2806 - (function(scope) {
2807 - "use strict";
2808 - var HTMLElement = scope.wrappers.HTMLElement;
2809 - var mixin = scope.mixin;
2810 - var registerWrapper = scope.registerWrapper;
2811 - var unsafeUnwrap = scope.unsafeUnwrap;
2812 - var unwrap = scope.unwrap;
2813 - var wrap = scope.wrap;
2814 - var contentTable = new WeakMap();
2815 - var templateContentsOwnerTable = new WeakMap();
2816 - function getTemplateContentsOwner(doc) {
2817 - if (!doc.defaultView) return doc;
2818 - var d = templateContentsOwnerTable.get(doc);
2819 - if (!d) {
2820 - d = doc.implementation.createHTMLDocument("");
2821 - while (d.lastChild) {
2822 - d.removeChild(d.lastChild);
2823 - }
2824 - templateContentsOwnerTable.set(doc, d);
2825 - }
2826 - return d;
2827 - }
2828 - function extractContent(templateElement) {
2829 - var doc = getTemplateContentsOwner(templateElement.ownerDocument);
2830 - var df = unwrap(doc.createDocumentFragment());
2831 - var child;
2832 - while (child = templateElement.firstChild) {
2833 - df.appendChild(child);
2834 - }
2835 - return df;
2836 - }
2837 - var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
2838 - function HTMLTemplateElement(node) {
2839 - HTMLElement.call(this, node);
2840 - if (!OriginalHTMLTemplateElement) {
2841 - var content = extractContent(node);
2842 - contentTable.set(this, wrap(content));
2843 - }
2844 - }
2845 - HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);
2846 - mixin(HTMLTemplateElement.prototype, {
2847 - constructor: HTMLTemplateElement,
2848 - get content() {
2849 - if (OriginalHTMLTemplateElement) return wrap(unsafeUnwrap(this).content);
2850 - return contentTable.get(this);
2851 - }
2852 - });
2853 - if (OriginalHTMLTemplateElement) registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);
2854 - scope.wrappers.HTMLTemplateElement = HTMLTemplateElement;
2855 - })(window.ShadowDOMPolyfill);
2856 - (function(scope) {
2857 - "use strict";
2858 - var HTMLElement = scope.wrappers.HTMLElement;
2859 - var registerWrapper = scope.registerWrapper;
2860 - var OriginalHTMLMediaElement = window.HTMLMediaElement;
2861 - if (!OriginalHTMLMediaElement) return;
2862 - function HTMLMediaElement(node) {
2863 - HTMLElement.call(this, node);
2864 - }
2865 - HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
2866 - registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement, document.createElement("audio"));
2867 - scope.wrappers.HTMLMediaElement = HTMLMediaElement;
2868 - })(window.ShadowDOMPolyfill);
2869 - (function(scope) {
2870 - "use strict";
2871 - var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
2872 - var registerWrapper = scope.registerWrapper;
2873 - var unwrap = scope.unwrap;
2874 - var rewrap = scope.rewrap;
2875 - var OriginalHTMLAudioElement = window.HTMLAudioElement;
2876 - if (!OriginalHTMLAudioElement) return;
2877 - function HTMLAudioElement(node) {
2878 - HTMLMediaElement.call(this, node);
2879 - }
2880 - HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
2881 - registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement, document.createElement("audio"));
2882 - function Audio(src) {
2883 - if (!(this instanceof Audio)) {
2884 - throw new TypeError("DOM object constructor cannot be called as a function.");
2885 - }
2886 - var node = unwrap(document.createElement("audio"));
2887 - HTMLMediaElement.call(this, node);
2888 - rewrap(node, this);
2889 - node.setAttribute("preload", "auto");
2890 - if (src !== undefined) node.setAttribute("src", src);
2891 - }
2892 - Audio.prototype = HTMLAudioElement.prototype;
2893 - scope.wrappers.HTMLAudioElement = HTMLAudioElement;
2894 - scope.wrappers.Audio = Audio;
2895 - })(window.ShadowDOMPolyfill);
2896 - (function(scope) {
2897 - "use strict";
2898 - var HTMLElement = scope.wrappers.HTMLElement;
2899 - var mixin = scope.mixin;
2900 - var registerWrapper = scope.registerWrapper;
2901 - var rewrap = scope.rewrap;
2902 - var unwrap = scope.unwrap;
2903 - var wrap = scope.wrap;
2904 - var OriginalHTMLOptionElement = window.HTMLOptionElement;
2905 - function trimText(s) {
2906 - return s.replace(/\s+/g, " ").trim();
2907 - }
2908 - function HTMLOptionElement(node) {
2909 - HTMLElement.call(this, node);
2910 - }
2911 - HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
2912 - mixin(HTMLOptionElement.prototype, {
2913 - get text() {
2914 - return trimText(this.textContent);
2915 - },
2916 - set text(value) {
2917 - this.textContent = trimText(String(value));
2918 - },
2919 - get form() {
2920 - return wrap(unwrap(this).form);
2921 - }
2922 - });
2923 - registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement, document.createElement("option"));
2924 - function Option(text, value, defaultSelected, selected) {
2925 - if (!(this instanceof Option)) {
2926 - throw new TypeError("DOM object constructor cannot be called as a function.");
2927 - }
2928 - var node = unwrap(document.createElement("option"));
2929 - HTMLElement.call(this, node);
2930 - rewrap(node, this);
2931 - if (text !== undefined) node.text = text;
2932 - if (value !== undefined) node.setAttribute("value", value);
2933 - if (defaultSelected === true) node.setAttribute("selected", "");
2934 - node.selected = selected === true;
2935 - }
2936 - Option.prototype = HTMLOptionElement.prototype;
2937 - scope.wrappers.HTMLOptionElement = HTMLOptionElement;
2938 - scope.wrappers.Option = Option;
2939 - })(window.ShadowDOMPolyfill);
2940 - (function(scope) {
2941 - "use strict";
2942 - var HTMLElement = scope.wrappers.HTMLElement;
2943 - var mixin = scope.mixin;
2944 - var registerWrapper = scope.registerWrapper;
2945 - var unwrap = scope.unwrap;
2946 - var wrap = scope.wrap;
2947 - var OriginalHTMLSelectElement = window.HTMLSelectElement;
2948 - function HTMLSelectElement(node) {
2949 - HTMLElement.call(this, node);
2950 - }
2951 - HTMLSelectElement.prototype = Object.create(HTMLElement.prototype);
2952 - mixin(HTMLSelectElement.prototype, {
2953 - add: function(element, before) {
2954 - if (typeof before === "object") before = unwrap(before);
2955 - unwrap(this).add(unwrap(element), before);
2956 - },
2957 - remove: function(indexOrNode) {
2958 - if (indexOrNode === undefined) {
2959 - HTMLElement.prototype.remove.call(this);
2960 - return;
2961 - }
2962 - if (typeof indexOrNode === "object") indexOrNode = unwrap(indexOrNode);
2963 - unwrap(this).remove(indexOrNode);
2964 - },
2965 - get form() {
2966 - return wrap(unwrap(this).form);
2967 - }
2968 - });
2969 - registerWrapper(OriginalHTMLSelectElement, HTMLSelectElement, document.createElement("select"));
2970 - scope.wrappers.HTMLSelectElement = HTMLSelectElement;
2971 - })(window.ShadowDOMPolyfill);
2972 - (function(scope) {
2973 - "use strict";
2974 - var HTMLElement = scope.wrappers.HTMLElement;
2975 - var mixin = scope.mixin;
2976 - var registerWrapper = scope.registerWrapper;
2977 - var unwrap = scope.unwrap;
2978 - var wrap = scope.wrap;
2979 - var wrapHTMLCollection = scope.wrapHTMLCollection;
2980 - var OriginalHTMLTableElement = window.HTMLTableElement;
2981 - function HTMLTableElement(node) {
2982 - HTMLElement.call(this, node);
2983 - }
2984 - HTMLTableElement.prototype = Object.create(HTMLElement.prototype);
2985 - mixin(HTMLTableElement.prototype, {
2986 - get caption() {
2987 - return wrap(unwrap(this).caption);
2988 - },
2989 - createCaption: function() {
2990 - return wrap(unwrap(this).createCaption());
2991 - },
2992 - get tHead() {
2993 - return wrap(unwrap(this).tHead);
2994 - },
2995 - createTHead: function() {
2996 - return wrap(unwrap(this).createTHead());
2997 - },
2998 - createTFoot: function() {
2999 - return wrap(unwrap(this).createTFoot());
3000 - },
3001 - get tFoot() {
3002 - return wrap(unwrap(this).tFoot);
3003 - },
3004 - get tBodies() {
3005 - return wrapHTMLCollection(unwrap(this).tBodies);
3006 - },
3007 - createTBody: function() {
3008 - return wrap(unwrap(this).createTBody());
3009 - },
3010 - get rows() {
3011 - return wrapHTMLCollection(unwrap(this).rows);
3012 - },
3013 - insertRow: function(index) {
3014 - return wrap(unwrap(this).insertRow(index));
3015 - }
3016 - });
3017 - registerWrapper(OriginalHTMLTableElement, HTMLTableElement, document.createElement("table"));
3018 - scope.wrappers.HTMLTableElement = HTMLTableElement;
3019 - })(window.ShadowDOMPolyfill);
3020 - (function(scope) {
3021 - "use strict";
3022 - var HTMLElement = scope.wrappers.HTMLElement;
3023 - var mixin = scope.mixin;
3024 - var registerWrapper = scope.registerWrapper;
3025 - var wrapHTMLCollection = scope.wrapHTMLCollection;
3026 - var unwrap = scope.unwrap;
3027 - var wrap = scope.wrap;
3028 - var OriginalHTMLTableSectionElement = window.HTMLTableSectionElement;
3029 - function HTMLTableSectionElement(node) {
3030 - HTMLElement.call(this, node);
3031 - }
3032 - HTMLTableSectionElement.prototype = Object.create(HTMLElement.prototype);
3033 - mixin(HTMLTableSectionElement.prototype, {
3034 - constructor: HTMLTableSectionElement,
3035 - get rows() {
3036 - return wrapHTMLCollection(unwrap(this).rows);
3037 - },
3038 - insertRow: function(index) {
3039 - return wrap(unwrap(this).insertRow(index));
3040 - }
3041 - });
3042 - registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionElement, document.createElement("thead"));
3043 - scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement;
3044 - })(window.ShadowDOMPolyfill);
3045 - (function(scope) {
3046 - "use strict";
3047 - var HTMLElement = scope.wrappers.HTMLElement;
3048 - var mixin = scope.mixin;
3049 - var registerWrapper = scope.registerWrapper;
3050 - var wrapHTMLCollection = scope.wrapHTMLCollection;
3051 - var unwrap = scope.unwrap;
3052 - var wrap = scope.wrap;
3053 - var OriginalHTMLTableRowElement = window.HTMLTableRowElement;
3054 - function HTMLTableRowElement(node) {
3055 - HTMLElement.call(this, node);
3056 - }
3057 - HTMLTableRowElement.prototype = Object.create(HTMLElement.prototype);
3058 - mixin(HTMLTableRowElement.prototype, {
3059 - get cells() {
3060 - return wrapHTMLCollection(unwrap(this).cells);
3061 - },
3062 - insertCell: function(index) {
3063 - return wrap(unwrap(this).insertCell(index));
3064 - }
3065 - });
3066 - registerWrapper(OriginalHTMLTableRowElement, HTMLTableRowElement, document.createElement("tr"));
3067 - scope.wrappers.HTMLTableRowElement = HTMLTableRowElement;
3068 - })(window.ShadowDOMPolyfill);
3069 - (function(scope) {
3070 - "use strict";
3071 - var HTMLContentElement = scope.wrappers.HTMLContentElement;
3072 - var HTMLElement = scope.wrappers.HTMLElement;
3073 - var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
3074 - var HTMLTemplateElement = scope.wrappers.HTMLTemplateElement;
3075 - var mixin = scope.mixin;
3076 - var registerWrapper = scope.registerWrapper;
3077 - var OriginalHTMLUnknownElement = window.HTMLUnknownElement;
3078 - function HTMLUnknownElement(node) {
3079 - switch (node.localName) {
3080 - case "content":
3081 - return new HTMLContentElement(node);
3082 -
3083 - case "shadow":
3084 - return new HTMLShadowElement(node);
3085 -
3086 - case "template":
3087 - return new HTMLTemplateElement(node);
3088 - }
3089 - HTMLElement.call(this, node);
3090 - }
3091 - HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype);
3092 - registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement);
3093 - scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;
3094 - })(window.ShadowDOMPolyfill);
3095 - (function(scope) {
3096 - "use strict";
3097 - var Element = scope.wrappers.Element;
3098 - var HTMLElement = scope.wrappers.HTMLElement;
3099 - var registerObject = scope.registerObject;
3100 - var SVG_NS = "http://www.w3.org/2000/svg";
3101 - var svgTitleElement = document.createElementNS(SVG_NS, "title");
3102 - var SVGTitleElement = registerObject(svgTitleElement);
3103 - var SVGElement = Object.getPrototypeOf(SVGTitleElement.prototype).constructor;
3104 - if (!("classList" in svgTitleElement)) {
3105 - var descr = Object.getOwnPropertyDescriptor(Element.prototype, "classList");
3106 - Object.defineProperty(HTMLElement.prototype, "classList", descr);
3107 - delete Element.prototype.classList;
3108 - }
3109 - scope.wrappers.SVGElement = SVGElement;
3110 - })(window.ShadowDOMPolyfill);
3111 - (function(scope) {
3112 - "use strict";
3113 - var mixin = scope.mixin;
3114 - var registerWrapper = scope.registerWrapper;
3115 - var unwrap = scope.unwrap;
3116 - var wrap = scope.wrap;
3117 - var OriginalSVGUseElement = window.SVGUseElement;
3118 - var SVG_NS = "http://www.w3.org/2000/svg";
3119 - var gWrapper = wrap(document.createElementNS(SVG_NS, "g"));
3120 - var useElement = document.createElementNS(SVG_NS, "use");
3121 - var SVGGElement = gWrapper.constructor;
3122 - var parentInterfacePrototype = Object.getPrototypeOf(SVGGElement.prototype);
3123 - var parentInterface = parentInterfacePrototype.constructor;
3124 - function SVGUseElement(impl) {
3125 - parentInterface.call(this, impl);
3126 - }
3127 - SVGUseElement.prototype = Object.create(parentInterfacePrototype);
3128 - if ("instanceRoot" in useElement) {
3129 - mixin(SVGUseElement.prototype, {
3130 - get instanceRoot() {
3131 - return wrap(unwrap(this).instanceRoot);
3132 - },
3133 - get animatedInstanceRoot() {
3134 - return wrap(unwrap(this).animatedInstanceRoot);
3135 - }
3136 - });
3137 - }
3138 - registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement);
3139 - scope.wrappers.SVGUseElement = SVGUseElement;
3140 - })(window.ShadowDOMPolyfill);
3141 - (function(scope) {
3142 - "use strict";
3143 - var EventTarget = scope.wrappers.EventTarget;
3144 - var mixin = scope.mixin;
3145 - var registerWrapper = scope.registerWrapper;
3146 - var unsafeUnwrap = scope.unsafeUnwrap;
3147 - var wrap = scope.wrap;
3148 - var OriginalSVGElementInstance = window.SVGElementInstance;
3149 - if (!OriginalSVGElementInstance) return;
3150 - function SVGElementInstance(impl) {
3151 - EventTarget.call(this, impl);
3152 - }
3153 - SVGElementInstance.prototype = Object.create(EventTarget.prototype);
3154 - mixin(SVGElementInstance.prototype, {
3155 - get correspondingElement() {
3156 - return wrap(unsafeUnwrap(this).correspondingElement);
3157 - },
3158 - get correspondingUseElement() {
3159 - return wrap(unsafeUnwrap(this).correspondingUseElement);
3160 - },
3161 - get parentNode() {
3162 - return wrap(unsafeUnwrap(this).parentNode);
3163 - },
3164 - get childNodes() {
3165 - throw new Error("Not implemented");
3166 - },
3167 - get firstChild() {
3168 - return wrap(unsafeUnwrap(this).firstChild);
3169 - },
3170 - get lastChild() {
3171 - return wrap(unsafeUnwrap(this).lastChild);
3172 - },
3173 - get previousSibling() {
3174 - return wrap(unsafeUnwrap(this).previousSibling);
3175 - },
3176 - get nextSibling() {
3177 - return wrap(unsafeUnwrap(this).nextSibling);
3178 - }
3179 - });
3180 - registerWrapper(OriginalSVGElementInstance, SVGElementInstance);
3181 - scope.wrappers.SVGElementInstance = SVGElementInstance;
3182 - })(window.ShadowDOMPolyfill);
3183 - (function(scope) {
3184 - "use strict";
3185 - var mixin = scope.mixin;
3186 - var registerWrapper = scope.registerWrapper;
3187 - var setWrapper = scope.setWrapper;
3188 - var unsafeUnwrap = scope.unsafeUnwrap;
3189 - var unwrap = scope.unwrap;
3190 - var unwrapIfNeeded = scope.unwrapIfNeeded;
3191 - var wrap = scope.wrap;
3192 - var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;
3193 - function CanvasRenderingContext2D(impl) {
3194 - setWrapper(impl, this);
3195 - }
3196 - mixin(CanvasRenderingContext2D.prototype, {
3197 - get canvas() {
3198 - return wrap(unsafeUnwrap(this).canvas);
3199 - },
3200 - drawImage: function() {
3201 - arguments[0] = unwrapIfNeeded(arguments[0]);
3202 - unsafeUnwrap(this).drawImage.apply(unsafeUnwrap(this), arguments);
3203 - },
3204 - createPattern: function() {
3205 - arguments[0] = unwrap(arguments[0]);
3206 - return unsafeUnwrap(this).createPattern.apply(unsafeUnwrap(this), arguments);
3207 - }
3208 - });
3209 - registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D, document.createElement("canvas").getContext("2d"));
3210 - scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D;
3211 - })(window.ShadowDOMPolyfill);
3212 - (function(scope) {
3213 - "use strict";
3214 - var mixin = scope.mixin;
3215 - var registerWrapper = scope.registerWrapper;
3216 - var setWrapper = scope.setWrapper;
3217 - var unsafeUnwrap = scope.unsafeUnwrap;
3218 - var unwrapIfNeeded = scope.unwrapIfNeeded;
3219 - var wrap = scope.wrap;
3220 - var OriginalWebGLRenderingContext = window.WebGLRenderingContext;
3221 - if (!OriginalWebGLRenderingContext) return;
3222 - function WebGLRenderingContext(impl) {
3223 - setWrapper(impl, this);
3224 - }
3225 - mixin(WebGLRenderingContext.prototype, {
3226 - get canvas() {
3227 - return wrap(unsafeUnwrap(this).canvas);
3228 - },
3229 - texImage2D: function() {
3230 - arguments[5] = unwrapIfNeeded(arguments[5]);
3231 - unsafeUnwrap(this).texImage2D.apply(unsafeUnwrap(this), arguments);
3232 - },
3233 - texSubImage2D: function() {
3234 - arguments[6] = unwrapIfNeeded(arguments[6]);
3235 - unsafeUnwrap(this).texSubImage2D.apply(unsafeUnwrap(this), arguments);
3236 - }
3237 - });
3238 - var instanceProperties = /WebKit/.test(navigator.userAgent) ? {
3239 - drawingBufferHeight: null,
3240 - drawingBufferWidth: null
3241 - } : {};
3242 - registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext, instanceProperties);
3243 - scope.wrappers.WebGLRenderingContext = WebGLRenderingContext;
3244 - })(window.ShadowDOMPolyfill);
3245 - (function(scope) {
3246 - "use strict";
3247 - var registerWrapper = scope.registerWrapper;
3248 - var setWrapper = scope.setWrapper;
3249 - var unsafeUnwrap = scope.unsafeUnwrap;
3250 - var unwrap = scope.unwrap;
3251 - var unwrapIfNeeded = scope.unwrapIfNeeded;
3252 - var wrap = scope.wrap;
3253 - var OriginalRange = window.Range;
3254 - function Range(impl) {
3255 - setWrapper(impl, this);
3256 - }
3257 - Range.prototype = {
3258 - get startContainer() {
3259 - return wrap(unsafeUnwrap(this).startContainer);
3260 - },
3261 - get endContainer() {
3262 - return wrap(unsafeUnwrap(this).endContainer);
3263 - },
3264 - get commonAncestorContainer() {
3265 - return wrap(unsafeUnwrap(this).commonAncestorContainer);
3266 - },
3267 - setStart: function(refNode, offset) {
3268 - unsafeUnwrap(this).setStart(unwrapIfNeeded(refNode), offset);
3269 - },
3270 - setEnd: function(refNode, offset) {
3271 - unsafeUnwrap(this).setEnd(unwrapIfNeeded(refNode), offset);
3272 - },
3273 - setStartBefore: function(refNode) {
3274 - unsafeUnwrap(this).setStartBefore(unwrapIfNeeded(refNode));
3275 - },
3276 - setStartAfter: function(refNode) {
3277 - unsafeUnwrap(this).setStartAfter(unwrapIfNeeded(refNode));
3278 - },
3279 - setEndBefore: function(refNode) {
3280 - unsafeUnwrap(this).setEndBefore(unwrapIfNeeded(refNode));
3281 - },
3282 - setEndAfter: function(refNode) {
3283 - unsafeUnwrap(this).setEndAfter(unwrapIfNeeded(refNode));
3284 - },
3285 - selectNode: function(refNode) {
3286 - unsafeUnwrap(this).selectNode(unwrapIfNeeded(refNode));
3287 - },
3288 - selectNodeContents: function(refNode) {
3289 - unsafeUnwrap(this).selectNodeContents(unwrapIfNeeded(refNode));
3290 - },
3291 - compareBoundaryPoints: function(how, sourceRange) {
3292 - return unsafeUnwrap(this).compareBoundaryPoints(how, unwrap(sourceRange));
3293 - },
3294 - extractContents: function() {
3295 - return wrap(unsafeUnwrap(this).extractContents());
3296 - },
3297 - cloneContents: function() {
3298 - return wrap(unsafeUnwrap(this).cloneContents());
3299 - },
3300 - insertNode: function(node) {
3301 - unsafeUnwrap(this).insertNode(unwrapIfNeeded(node));
3302 - },
3303 - surroundContents: function(newParent) {
3304 - unsafeUnwrap(this).surroundContents(unwrapIfNeeded(newParent));
3305 - },
3306 - cloneRange: function() {
3307 - return wrap(unsafeUnwrap(this).cloneRange());
3308 - },
3309 - isPointInRange: function(node, offset) {
3310 - return unsafeUnwrap(this).isPointInRange(unwrapIfNeeded(node), offset);
3311 - },
3312 - comparePoint: function(node, offset) {
3313 - return unsafeUnwrap(this).comparePoint(unwrapIfNeeded(node), offset);
3314 - },
3315 - intersectsNode: function(node) {
3316 - return unsafeUnwrap(this).intersectsNode(unwrapIfNeeded(node));
3317 - },
3318 - toString: function() {
3319 - return unsafeUnwrap(this).toString();
3320 - }
3321 - };
3322 - if (OriginalRange.prototype.createContextualFragment) {
3323 - Range.prototype.createContextualFragment = function(html) {
3324 - return wrap(unsafeUnwrap(this).createContextualFragment(html));
3325 - };
3326 - }
3327 - registerWrapper(window.Range, Range, document.createRange());
3328 - scope.wrappers.Range = Range;
3329 - })(window.ShadowDOMPolyfill);
3330 - (function(scope) {
3331 - "use strict";
3332 - var GetElementsByInterface = scope.GetElementsByInterface;
3333 - var ParentNodeInterface = scope.ParentNodeInterface;
3334 - var SelectorsInterface = scope.SelectorsInterface;
3335 - var mixin = scope.mixin;
3336 - var registerObject = scope.registerObject;
3337 - var DocumentFragment = registerObject(document.createDocumentFragment());
3338 - mixin(DocumentFragment.prototype, ParentNodeInterface);
3339 - mixin(DocumentFragment.prototype, SelectorsInterface);
3340 - mixin(DocumentFragment.prototype, GetElementsByInterface);
3341 - var Comment = registerObject(document.createComment(""));
3342 - scope.wrappers.Comment = Comment;
3343 - scope.wrappers.DocumentFragment = DocumentFragment;
3344 - })(window.ShadowDOMPolyfill);
3345 - (function(scope) {
3346 - "use strict";
3347 - var DocumentFragment = scope.wrappers.DocumentFragment;
3348 - var TreeScope = scope.TreeScope;
3349 - var elementFromPoint = scope.elementFromPoint;
3350 - var getInnerHTML = scope.getInnerHTML;
3351 - var getTreeScope = scope.getTreeScope;
3352 - var mixin = scope.mixin;
3353 - var rewrap = scope.rewrap;
3354 - var setInnerHTML = scope.setInnerHTML;
3355 - var unsafeUnwrap = scope.unsafeUnwrap;
3356 - var unwrap = scope.unwrap;
3357 - var shadowHostTable = new WeakMap();
3358 - var nextOlderShadowTreeTable = new WeakMap();
3359 - var spaceCharRe = /[ \t\n\r\f]/;
3360 - function ShadowRoot(hostWrapper) {
3361 - var node = unwrap(unsafeUnwrap(hostWrapper).ownerDocument.createDocumentFragment());
3362 - DocumentFragment.call(this, node);
3363 - rewrap(node, this);
3364 - var oldShadowRoot = hostWrapper.shadowRoot;
3365 - nextOlderShadowTreeTable.set(this, oldShadowRoot);
3366 - this.treeScope_ = new TreeScope(this, getTreeScope(oldShadowRoot || hostWrapper));
3367 - shadowHostTable.set(this, hostWrapper);
3368 - }
3369 - ShadowRoot.prototype = Object.create(DocumentFragment.prototype);
3370 - mixin(ShadowRoot.prototype, {
3371 - constructor: ShadowRoot,
3372 - get innerHTML() {
3373 - return getInnerHTML(this);
3374 - },
3375 - set innerHTML(value) {
3376 - setInnerHTML(this, value);
3377 - this.invalidateShadowRenderer();
3378 - },
3379 - get olderShadowRoot() {
3380 - return nextOlderShadowTreeTable.get(this) || null;
3381 - },
3382 - get host() {
3383 - return shadowHostTable.get(this) || null;
3384 - },
3385 - invalidateShadowRenderer: function() {
3386 - return shadowHostTable.get(this).invalidateShadowRenderer();
3387 - },
3388 - elementFromPoint: function(x, y) {
3389 - return elementFromPoint(this, this.ownerDocument, x, y);
3390 - },
3391 - getElementById: function(id) {
3392 - if (spaceCharRe.test(id)) return null;
3393 - return this.querySelector('[id="' + id + '"]');
3394 - }
3395 - });
3396 - scope.wrappers.ShadowRoot = ShadowRoot;
3397 - })(window.ShadowDOMPolyfill);
3398 - (function(scope) {
3399 - "use strict";
3400 - var Element = scope.wrappers.Element;
3401 - var HTMLContentElement = scope.wrappers.HTMLContentElement;
3402 - var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
3403 - var Node = scope.wrappers.Node;
3404 - var ShadowRoot = scope.wrappers.ShadowRoot;
3405 - var assert = scope.assert;
3406 - var getTreeScope = scope.getTreeScope;
3407 - var mixin = scope.mixin;
3408 - var oneOf = scope.oneOf;
3409 - var unsafeUnwrap = scope.unsafeUnwrap;
3410 - var unwrap = scope.unwrap;
3411 - var wrap = scope.wrap;
3412 - var ArraySplice = scope.ArraySplice;
3413 - function updateWrapperUpAndSideways(wrapper) {
3414 - wrapper.previousSibling_ = wrapper.previousSibling;
3415 - wrapper.nextSibling_ = wrapper.nextSibling;
3416 - wrapper.parentNode_ = wrapper.parentNode;
3417 - }
3418 - function updateWrapperDown(wrapper) {
3419 - wrapper.firstChild_ = wrapper.firstChild;
3420 - wrapper.lastChild_ = wrapper.lastChild;
3421 - }
3422 - function updateAllChildNodes(parentNodeWrapper) {
3423 - assert(parentNodeWrapper instanceof Node);
3424 - for (var childWrapper = parentNodeWrapper.firstChild; childWrapper; childWrapper = childWrapper.nextSibling) {
3425 - updateWrapperUpAndSideways(childWrapper);
3426 - }
3427 - updateWrapperDown(parentNodeWrapper);
3428 - }
3429 - function insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) {
3430 - var parentNode = unwrap(parentNodeWrapper);
3431 - var newChild = unwrap(newChildWrapper);
3432 - var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;
3433 - remove(newChildWrapper);
3434 - updateWrapperUpAndSideways(newChildWrapper);
3435 - if (!refChildWrapper) {
3436 - parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild;
3437 - if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild) parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;
3438 - var lastChildWrapper = wrap(parentNode.lastChild);
3439 - if (lastChildWrapper) lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;
3440 - } else {
3441 - if (parentNodeWrapper.firstChild === refChildWrapper) parentNodeWrapper.firstChild_ = refChildWrapper;
3442 - refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;
3443 - }
3444 - scope.originalInsertBefore.call(parentNode, newChild, refChild);
3445 - }
3446 - function remove(nodeWrapper) {
3447 - var node = unwrap(nodeWrapper);
3448 - var parentNode = node.parentNode;
3449 - if (!parentNode) return;
3450 - var parentNodeWrapper = wrap(parentNode);
3451 - updateWrapperUpAndSideways(nodeWrapper);
3452 - if (nodeWrapper.previousSibling) nodeWrapper.previousSibling.nextSibling_ = nodeWrapper;
3453 - if (nodeWrapper.nextSibling) nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;
3454 - if (parentNodeWrapper.lastChild === nodeWrapper) parentNodeWrapper.lastChild_ = nodeWrapper;
3455 - if (parentNodeWrapper.firstChild === nodeWrapper) parentNodeWrapper.firstChild_ = nodeWrapper;
3456 - scope.originalRemoveChild.call(parentNode, node);
3457 - }
3458 - var distributedNodesTable = new WeakMap();
3459 - var destinationInsertionPointsTable = new WeakMap();
3460 - var rendererForHostTable = new WeakMap();
3461 - function resetDistributedNodes(insertionPoint) {
3462 - distributedNodesTable.set(insertionPoint, []);
3463 - }
3464 - function getDistributedNodes(insertionPoint) {
3465 - var rv = distributedNodesTable.get(insertionPoint);
3466 - if (!rv) distributedNodesTable.set(insertionPoint, rv = []);
3467 - return rv;
3468 - }
3469 - function getChildNodesSnapshot(node) {
3470 - var result = [], i = 0;
3471 - for (var child = node.firstChild; child; child = child.nextSibling) {
3472 - result[i++] = child;
3473 - }
3474 - return result;
3475 - }
3476 - var request = oneOf(window, [ "requestAnimationFrame", "mozRequestAnimationFrame", "webkitRequestAnimationFrame", "setTimeout" ]);
3477 - var pendingDirtyRenderers = [];
3478 - var renderTimer;
3479 - function renderAllPending() {
3480 - for (var i = 0; i < pendingDirtyRenderers.length; i++) {
3481 - var renderer = pendingDirtyRenderers[i];
3482 - var parentRenderer = renderer.parentRenderer;
3483 - if (parentRenderer && parentRenderer.dirty) continue;
3484 - renderer.render();
3485 - }
3486 - pendingDirtyRenderers = [];
3487 - }
3488 - function handleRequestAnimationFrame() {
3489 - renderTimer = null;
3490 - renderAllPending();
3491 - }
3492 - function getRendererForHost(host) {
3493 - var renderer = rendererForHostTable.get(host);
3494 - if (!renderer) {
3495 - renderer = new ShadowRenderer(host);
3496 - rendererForHostTable.set(host, renderer);
3497 - }
3498 - return renderer;
3499 - }
3500 - function getShadowRootAncestor(node) {
3501 - var root = getTreeScope(node).root;
3502 - if (root instanceof ShadowRoot) return root;
3503 - return null;
3504 - }
3505 - function getRendererForShadowRoot(shadowRoot) {
3506 - return getRendererForHost(shadowRoot.host);
3507 - }
3508 - var spliceDiff = new ArraySplice();
3509 - spliceDiff.equals = function(renderNode, rawNode) {
3510 - return unwrap(renderNode.node) === rawNode;
3511 - };
3512 - function RenderNode(node) {
3513 - this.skip = false;
3514 - this.node = node;
3515 - this.childNodes = [];
3516 - }
3517 - RenderNode.prototype = {
3518 - append: function(node) {
3519 - var rv = new RenderNode(node);
3520 - this.childNodes.push(rv);
3521 - return rv;
3522 - },
3523 - sync: function(opt_added) {
3524 - if (this.skip) return;
3525 - var nodeWrapper = this.node;
3526 - var newChildren = this.childNodes;
3527 - var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));
3528 - var added = opt_added || new WeakMap();
3529 - var splices = spliceDiff.calculateSplices(newChildren, oldChildren);
3530 - var newIndex = 0, oldIndex = 0;
3531 - var lastIndex = 0;
3532 - for (var i = 0; i < splices.length; i++) {
3533 - var splice = splices[i];
3534 - for (;lastIndex < splice.index; lastIndex++) {
3535 - oldIndex++;
3536 - newChildren[newIndex++].sync(added);
3537 - }
3538 - var removedCount = splice.removed.length;
3539 - for (var j = 0; j < removedCount; j++) {
3540 - var wrapper = wrap(oldChildren[oldIndex++]);
3541 - if (!added.get(wrapper)) remove(wrapper);
3542 - }
3543 - var addedCount = splice.addedCount;
3544 - var refNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]);
3545 - for (var j = 0; j < addedCount; j++) {
3546 - var newChildRenderNode = newChildren[newIndex++];
3547 - var newChildWrapper = newChildRenderNode.node;
3548 - insertBefore(nodeWrapper, newChildWrapper, refNode);
3549 - added.set(newChildWrapper, true);
3550 - newChildRenderNode.sync(added);
3551 - }
3552 - lastIndex += addedCount;
3553 - }
3554 - for (var i = lastIndex; i < newChildren.length; i++) {
3555 - newChildren[i].sync(added);
3556 - }
3557 - }
3558 - };
3559 - function ShadowRenderer(host) {
3560 - this.host = host;
3561 - this.dirty = false;
3562 - this.invalidateAttributes();
3563 - this.associateNode(host);
3564 - }
3565 - ShadowRenderer.prototype = {
3566 - render: function(opt_renderNode) {
3567 - if (!this.dirty) return;
3568 - this.invalidateAttributes();
3569 - var host = this.host;
3570 - this.distribution(host);
3571 - var renderNode = opt_renderNode || new RenderNode(host);
3572 - this.buildRenderTree(renderNode, host);
3573 - var topMostRenderer = !opt_renderNode;
3574 - if (topMostRenderer) renderNode.sync();
3575 - this.dirty = false;
3576 - },
3577 - get parentRenderer() {
3578 - return getTreeScope(this.host).renderer;
3579 - },
3580 - invalidate: function() {
3581 - if (!this.dirty) {
3582 - this.dirty = true;
3583 - var parentRenderer = this.parentRenderer;
3584 - if (parentRenderer) parentRenderer.invalidate();
3585 - pendingDirtyRenderers.push(this);
3586 - if (renderTimer) return;
3587 - renderTimer = window[request](handleRequestAnimationFrame, 0);
3588 - }
3589 - },
3590 - distribution: function(root) {
3591 - this.resetAllSubtrees(root);
3592 - this.distributionResolution(root);
3593 - },
3594 - resetAll: function(node) {
3595 - if (isInsertionPoint(node)) resetDistributedNodes(node); else resetDestinationInsertionPoints(node);
3596 - this.resetAllSubtrees(node);
3597 - },
3598 - resetAllSubtrees: function(node) {
3599 - for (var child = node.firstChild; child; child = child.nextSibling) {
3600 - this.resetAll(child);
3601 - }
3602 - if (node.shadowRoot) this.resetAll(node.shadowRoot);
3603 - if (node.olderShadowRoot) this.resetAll(node.olderShadowRoot);
3604 - },
3605 - distributionResolution: function(node) {
3606 - if (isShadowHost(node)) {
3607 - var shadowHost = node;
3608 - var pool = poolPopulation(shadowHost);
3609 - var shadowTrees = getShadowTrees(shadowHost);
3610 - for (var i = 0; i < shadowTrees.length; i++) {
3611 - this.poolDistribution(shadowTrees[i], pool);
3612 - }
3613 - for (var i = shadowTrees.length - 1; i >= 0; i--) {
3614 - var shadowTree = shadowTrees[i];
3615 - var shadow = getShadowInsertionPoint(shadowTree);
3616 - if (shadow) {
3617 - var olderShadowRoot = shadowTree.olderShadowRoot;
3618 - if (olderShadowRoot) {
3619 - pool = poolPopulation(olderShadowRoot);
3620 - }
3621 - for (var j = 0; j < pool.length; j++) {
3622 - destributeNodeInto(pool[j], shadow);
3623 - }
3624 - }
3625 - this.distributionResolution(shadowTree);
3626 - }
3627 - }
3628 - for (var child = node.firstChild; child; child = child.nextSibling) {
3629 - this.distributionResolution(child);
3630 - }
3631 - },
3632 - poolDistribution: function(node, pool) {
3633 - if (node instanceof HTMLShadowElement) return;
3634 - if (node instanceof HTMLContentElement) {
3635 - var content = node;
3636 - this.updateDependentAttributes(content.getAttribute("select"));
3637 - var anyDistributed = false;
3638 - for (var i = 0; i < pool.length; i++) {
3639 - var node = pool[i];
3640 - if (!node) continue;
3641 - if (matches(node, content)) {
3642 - destributeNodeInto(node, content);
3643 - pool[i] = undefined;
3644 - anyDistributed = true;
3645 - }
3646 - }
3647 - if (!anyDistributed) {
3648 - for (var child = content.firstChild; child; child = child.nextSibling) {
3649 - destributeNodeInto(child, content);
3650 - }
3651 - }
3652 - return;
3653 - }
3654 - for (var child = node.firstChild; child; child = child.nextSibling) {
3655 - this.poolDistribution(child, pool);
3656 - }
3657 - },
3658 - buildRenderTree: function(renderNode, node) {
3659 - var children = this.compose(node);
3660 - for (var i = 0; i < children.length; i++) {
3661 - var child = children[i];
3662 - var childRenderNode = renderNode.append(child);
3663 - this.buildRenderTree(childRenderNode, child);
3664 - }
3665 - if (isShadowHost(node)) {
3666 - var renderer = getRendererForHost(node);
3667 - renderer.dirty = false;
3668 - }
3669 - },
3670 - compose: function(node) {
3671 - var children = [];
3672 - var p = node.shadowRoot || node;
3673 - for (var child = p.firstChild; child; child = child.nextSibling) {
3674 - if (isInsertionPoint(child)) {
3675 - this.associateNode(p);
3676 - var distributedNodes = getDistributedNodes(child);
3677 - for (var j = 0; j < distributedNodes.length; j++) {
3678 - var distributedNode = distributedNodes[j];
3679 - if (isFinalDestination(child, distributedNode)) children.push(distributedNode);
3680 - }
3681 - } else {
3682 - children.push(child);
3683 - }
3684 - }
3685 - return children;
3686 - },
3687 - invalidateAttributes: function() {
3688 - this.attributes = Object.create(null);
3689 - },
3690 - updateDependentAttributes: function(selector) {
3691 - if (!selector) return;
3692 - var attributes = this.attributes;
3693 - if (/\.\w+/.test(selector)) attributes["class"] = true;
3694 - if (/#\w+/.test(selector)) attributes["id"] = true;
3695 - selector.replace(/\[\s*([^\s=\|~\]]+)/g, function(_, name) {
3696 - attributes[name] = true;
3697 - });
3698 - },
3699 - dependsOnAttribute: function(name) {
3700 - return this.attributes[name];
3701 - },
3702 - associateNode: function(node) {
3703 - unsafeUnwrap(node).polymerShadowRenderer_ = this;
3704 - }
3705 - };
3706 - function poolPopulation(node) {
3707 - var pool = [];
3708 - for (var child = node.firstChild; child; child = child.nextSibling) {
3709 - if (isInsertionPoint(child)) {
3710 - pool.push.apply(pool, getDistributedNodes(child));
3711 - } else {
3712 - pool.push(child);
3713 - }
3714 - }
3715 - return pool;
3716 - }
3717 - function getShadowInsertionPoint(node) {
3718 - if (node instanceof HTMLShadowElement) return node;
3719 - if (node instanceof HTMLContentElement) return null;
3720 - for (var child = node.firstChild; child; child = child.nextSibling) {
3721 - var res = getShadowInsertionPoint(child);
3722 - if (res) return res;
3723 - }
3724 - return null;
3725 - }
3726 - function destributeNodeInto(child, insertionPoint) {
3727 - getDistributedNodes(insertionPoint).push(child);
3728 - var points = destinationInsertionPointsTable.get(child);
3729 - if (!points) destinationInsertionPointsTable.set(child, [ insertionPoint ]); else points.push(insertionPoint);
3730 - }
3731 - function getDestinationInsertionPoints(node) {
3732 - return destinationInsertionPointsTable.get(node);
3733 - }
3734 - function resetDestinationInsertionPoints(node) {
3735 - destinationInsertionPointsTable.set(node, undefined);
3736 - }
3737 - var selectorStartCharRe = /^(:not\()?[*.#[a-zA-Z_|]/;
3738 - function matches(node, contentElement) {
3739 - var select = contentElement.getAttribute("select");
3740 - if (!select) return true;
3741 - select = select.trim();
3742 - if (!select) return true;
3743 - if (!(node instanceof Element)) return false;
3744 - if (!selectorStartCharRe.test(select)) return false;
3745 - try {
3746 - return node.matches(select);
3747 - } catch (ex) {
3748 - return false;
3749 - }
3750 - }
3751 - function isFinalDestination(insertionPoint, node) {
3752 - var points = getDestinationInsertionPoints(node);
3753 - return points && points[points.length - 1] === insertionPoint;
3754 - }
3755 - function isInsertionPoint(node) {
3756 - return node instanceof HTMLContentElement || node instanceof HTMLShadowElement;
3757 - }
3758 - function isShadowHost(shadowHost) {
3759 - return shadowHost.shadowRoot;
3760 - }
3761 - function getShadowTrees(host) {
3762 - var trees = [];
3763 - for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {
3764 - trees.push(tree);
3765 - }
3766 - return trees;
3767 - }
3768 - function render(host) {
3769 - new ShadowRenderer(host).render();
3770 - }
3771 - Node.prototype.invalidateShadowRenderer = function(force) {
3772 - var renderer = unsafeUnwrap(this).polymerShadowRenderer_;
3773 - if (renderer) {
3774 - renderer.invalidate();
3775 - return true;
3776 - }
3777 - return false;
3778 - };
3779 - HTMLContentElement.prototype.getDistributedNodes = HTMLShadowElement.prototype.getDistributedNodes = function() {
3780 - renderAllPending();
3781 - return getDistributedNodes(this);
3782 - };
3783 - Element.prototype.getDestinationInsertionPoints = function() {
3784 - renderAllPending();
3785 - return getDestinationInsertionPoints(this) || [];
3786 - };
3787 - HTMLContentElement.prototype.nodeIsInserted_ = HTMLShadowElement.prototype.nodeIsInserted_ = function() {
3788 - this.invalidateShadowRenderer();
3789 - var shadowRoot = getShadowRootAncestor(this);
3790 - var renderer;
3791 - if (shadowRoot) renderer = getRendererForShadowRoot(shadowRoot);
3792 - unsafeUnwrap(this).polymerShadowRenderer_ = renderer;
3793 - if (renderer) renderer.invalidate();
3794 - };
3795 - scope.getRendererForHost = getRendererForHost;
3796 - scope.getShadowTrees = getShadowTrees;
3797 - scope.renderAllPending = renderAllPending;
3798 - scope.getDestinationInsertionPoints = getDestinationInsertionPoints;
3799 - scope.visual = {
3800 - insertBefore: insertBefore,
3801 - remove: remove
3802 - };
3803 - })(window.ShadowDOMPolyfill);
3804 - (function(scope) {
3805 - "use strict";
3806 - var HTMLElement = scope.wrappers.HTMLElement;
3807 - var assert = scope.assert;
3808 - var mixin = scope.mixin;
3809 - var registerWrapper = scope.registerWrapper;
3810 - var unwrap = scope.unwrap;
3811 - var wrap = scope.wrap;
3812 - var elementsWithFormProperty = [ "HTMLButtonElement", "HTMLFieldSetElement", "HTMLInputElement", "HTMLKeygenElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLObjectElement", "HTMLOutputElement", "HTMLTextAreaElement" ];
3813 - function createWrapperConstructor(name) {
3814 - if (!window[name]) return;
3815 - assert(!scope.wrappers[name]);
3816 - var GeneratedWrapper = function(node) {
3817 - HTMLElement.call(this, node);
3818 - };
3819 - GeneratedWrapper.prototype = Object.create(HTMLElement.prototype);
3820 - mixin(GeneratedWrapper.prototype, {
3821 - get form() {
3822 - return wrap(unwrap(this).form);
3823 - }
3824 - });
3825 - registerWrapper(window[name], GeneratedWrapper, document.createElement(name.slice(4, -7)));
3826 - scope.wrappers[name] = GeneratedWrapper;
3827 - }
3828 - elementsWithFormProperty.forEach(createWrapperConstructor);
3829 - })(window.ShadowDOMPolyfill);
3830 - (function(scope) {
3831 - "use strict";
3832 - var registerWrapper = scope.registerWrapper;
3833 - var setWrapper = scope.setWrapper;
3834 - var unsafeUnwrap = scope.unsafeUnwrap;
3835 - var unwrap = scope.unwrap;
3836 - var unwrapIfNeeded = scope.unwrapIfNeeded;
3837 - var wrap = scope.wrap;
3838 - var OriginalSelection = window.Selection;
3839 - function Selection(impl) {
3840 - setWrapper(impl, this);
3841 - }
3842 - Selection.prototype = {
3843 - get anchorNode() {
3844 - return wrap(unsafeUnwrap(this).anchorNode);
3845 - },
3846 - get focusNode() {
3847 - return wrap(unsafeUnwrap(this).focusNode);
3848 - },
3849 - addRange: function(range) {
3850 - unsafeUnwrap(this).addRange(unwrap(range));
3851 - },
3852 - collapse: function(node, index) {
3853 - unsafeUnwrap(this).collapse(unwrapIfNeeded(node), index);
3854 - },
3855 - containsNode: function(node, allowPartial) {
3856 - return unsafeUnwrap(this).containsNode(unwrapIfNeeded(node), allowPartial);
3857 - },
3858 - extend: function(node, offset) {
3859 - unsafeUnwrap(this).extend(unwrapIfNeeded(node), offset);
3860 - },
3861 - getRangeAt: function(index) {
3862 - return wrap(unsafeUnwrap(this).getRangeAt(index));
3863 - },
3864 - removeRange: function(range) {
3865 - unsafeUnwrap(this).removeRange(unwrap(range));
3866 - },
3867 - selectAllChildren: function(node) {
3868 - unsafeUnwrap(this).selectAllChildren(unwrapIfNeeded(node));
3869 - },
3870 - toString: function() {
3871 - return unsafeUnwrap(this).toString();
3872 - }
3873 - };
3874 - registerWrapper(window.Selection, Selection, window.getSelection());
3875 - scope.wrappers.Selection = Selection;
3876 - })(window.ShadowDOMPolyfill);
3877 - (function(scope) {
3878 - "use strict";
3879 - var GetElementsByInterface = scope.GetElementsByInterface;
3880 - var Node = scope.wrappers.Node;
3881 - var ParentNodeInterface = scope.ParentNodeInterface;
3882 - var Selection = scope.wrappers.Selection;
3883 - var SelectorsInterface = scope.SelectorsInterface;
3884 - var ShadowRoot = scope.wrappers.ShadowRoot;
3885 - var TreeScope = scope.TreeScope;
3886 - var cloneNode = scope.cloneNode;
3887 - var defineWrapGetter = scope.defineWrapGetter;
3888 - var elementFromPoint = scope.elementFromPoint;
3889 - var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
3890 - var matchesNames = scope.matchesNames;
3891 - var mixin = scope.mixin;
3892 - var registerWrapper = scope.registerWrapper;
3893 - var renderAllPending = scope.renderAllPending;
3894 - var rewrap = scope.rewrap;
3895 - var setWrapper = scope.setWrapper;
3896 - var unsafeUnwrap = scope.unsafeUnwrap;
3897 - var unwrap = scope.unwrap;
3898 - var wrap = scope.wrap;
3899 - var wrapEventTargetMethods = scope.wrapEventTargetMethods;
3900 - var wrapNodeList = scope.wrapNodeList;
3901 - var implementationTable = new WeakMap();
3902 - function Document(node) {
3903 - Node.call(this, node);
3904 - this.treeScope_ = new TreeScope(this, null);
3905 - }
3906 - Document.prototype = Object.create(Node.prototype);
3907 - defineWrapGetter(Document, "documentElement");
3908 - defineWrapGetter(Document, "body");
3909 - defineWrapGetter(Document, "head");
3910 - function wrapMethod(name) {
3911 - var original = document[name];
3912 - Document.prototype[name] = function() {
3913 - return wrap(original.apply(unsafeUnwrap(this), arguments));
3914 - };
3915 - }
3916 - [ "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode", "getElementById" ].forEach(wrapMethod);
3917 - var originalAdoptNode = document.adoptNode;
3918 - function adoptNodeNoRemove(node, doc) {
3919 - originalAdoptNode.call(unsafeUnwrap(doc), unwrap(node));
3920 - adoptSubtree(node, doc);
3921 - }
3922 - function adoptSubtree(node, doc) {
3923 - if (node.shadowRoot) doc.adoptNode(node.shadowRoot);
3924 - if (node instanceof ShadowRoot) adoptOlderShadowRoots(node, doc);
3925 - for (var child = node.firstChild; child; child = child.nextSibling) {
3926 - adoptSubtree(child, doc);
3927 - }
3928 - }
3929 - function adoptOlderShadowRoots(shadowRoot, doc) {
3930 - var oldShadowRoot = shadowRoot.olderShadowRoot;
3931 - if (oldShadowRoot) doc.adoptNode(oldShadowRoot);
3932 - }
3933 - var originalGetSelection = document.getSelection;
3934 - mixin(Document.prototype, {
3935 - adoptNode: function(node) {
3936 - if (node.parentNode) node.parentNode.removeChild(node);
3937 - adoptNodeNoRemove(node, this);
3938 - return node;
3939 - },
3940 - elementFromPoint: function(x, y) {
3941 - return elementFromPoint(this, this, x, y);
3942 - },
3943 - importNode: function(node, deep) {
3944 - return cloneNode(node, deep, unsafeUnwrap(this));
3945 - },
3946 - getSelection: function() {
3947 - renderAllPending();
3948 - return new Selection(originalGetSelection.call(unwrap(this)));
3949 - },
3950 - getElementsByName: function(name) {
3951 - return SelectorsInterface.querySelectorAll.call(this, "[name=" + JSON.stringify(String(name)) + "]");
3952 - }
3953 - });
3954 - if (document.registerElement) {
3955 - var originalRegisterElement = document.registerElement;
3956 - Document.prototype.registerElement = function(tagName, object) {
3957 - var prototype, extendsOption;
3958 - if (object !== undefined) {
3959 - prototype = object.prototype;
3960 - extendsOption = object.extends;
3961 - }
3962 - if (!prototype) prototype = Object.create(HTMLElement.prototype);
3963 - if (scope.nativePrototypeTable.get(prototype)) {
3964 - throw new Error("NotSupportedError");
3965 - }
3966 - var proto = Object.getPrototypeOf(prototype);
3967 - var nativePrototype;
3968 - var prototypes = [];
3969 - while (proto) {
3970 - nativePrototype = scope.nativePrototypeTable.get(proto);
3971 - if (nativePrototype) break;
3972 - prototypes.push(proto);
3973 - proto = Object.getPrototypeOf(proto);
3974 - }
3975 - if (!nativePrototype) {
3976 - throw new Error("NotSupportedError");
3977 - }
3978 - var newPrototype = Object.create(nativePrototype);
3979 - for (var i = prototypes.length - 1; i >= 0; i--) {
3980 - newPrototype = Object.create(newPrototype);
3981 - }
3982 - [ "createdCallback", "attachedCallback", "detachedCallback", "attributeChangedCallback" ].forEach(function(name) {
3983 - var f = prototype[name];
3984 - if (!f) return;
3985 - newPrototype[name] = function() {
3986 - if (!(wrap(this) instanceof CustomElementConstructor)) {
3987 - rewrap(this);
3988 - }
3989 - f.apply(wrap(this), arguments);
3990 - };
3991 - });
3992 - var p = {
3993 - prototype: newPrototype
3994 - };
3995 - if (extendsOption) p.extends = extendsOption;
3996 - function CustomElementConstructor(node) {
3997 - if (!node) {
3998 - if (extendsOption) {
3999 - return document.createElement(extendsOption, tagName);
4000 - } else {
4001 - return document.createElement(tagName);
4002 - }
4003 - }
4004 - setWrapper(node, this);
4005 - }
4006 - CustomElementConstructor.prototype = prototype;
4007 - CustomElementConstructor.prototype.constructor = CustomElementConstructor;
4008 - scope.constructorTable.set(newPrototype, CustomElementConstructor);
4009 - scope.nativePrototypeTable.set(prototype, newPrototype);
4010 - var nativeConstructor = originalRegisterElement.call(unwrap(this), tagName, p);
4011 - return CustomElementConstructor;
4012 - };
4013 - forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "registerElement" ]);
4014 - }
4015 - forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement, window.HTMLHtmlElement ], [ "appendChild", "compareDocumentPosition", "contains", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "insertBefore", "querySelector", "querySelectorAll", "removeChild", "replaceChild" ].concat(matchesNames));
4016 - forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "adoptNode", "importNode", "contains", "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode", "elementFromPoint", "getElementById", "getElementsByName", "getSelection" ]);
4017 - mixin(Document.prototype, GetElementsByInterface);
4018 - mixin(Document.prototype, ParentNodeInterface);
4019 - mixin(Document.prototype, SelectorsInterface);
4020 - mixin(Document.prototype, {
4021 - get implementation() {
4022 - var implementation = implementationTable.get(this);
4023 - if (implementation) return implementation;
4024 - implementation = new DOMImplementation(unwrap(this).implementation);
4025 - implementationTable.set(this, implementation);
4026 - return implementation;
4027 - },
4028 - get defaultView() {
4029 - return wrap(unwrap(this).defaultView);
4030 - }
4031 - });
4032 - registerWrapper(window.Document, Document, document.implementation.createHTMLDocument(""));
4033 - if (window.HTMLDocument) registerWrapper(window.HTMLDocument, Document);
4034 - wrapEventTargetMethods([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement ]);
4035 - function DOMImplementation(impl) {
4036 - setWrapper(impl, this);
4037 - }
4038 - function wrapImplMethod(constructor, name) {
4039 - var original = document.implementation[name];
4040 - constructor.prototype[name] = function() {
4041 - return wrap(original.apply(unsafeUnwrap(this), arguments));
4042 - };
4043 - }
4044 - function forwardImplMethod(constructor, name) {
4045 - var original = document.implementation[name];
4046 - constructor.prototype[name] = function() {
4047 - return original.apply(unsafeUnwrap(this), arguments);
4048 - };
4049 - }
4050 - wrapImplMethod(DOMImplementation, "createDocumentType");
4051 - wrapImplMethod(DOMImplementation, "createDocument");
4052 - wrapImplMethod(DOMImplementation, "createHTMLDocument");
4053 - forwardImplMethod(DOMImplementation, "hasFeature");
4054 - registerWrapper(window.DOMImplementation, DOMImplementation);
4055 - forwardMethodsToWrapper([ window.DOMImplementation ], [ "createDocumentType", "createDocument", "createHTMLDocument", "hasFeature" ]);
4056 - scope.adoptNodeNoRemove = adoptNodeNoRemove;
4057 - scope.wrappers.DOMImplementation = DOMImplementation;
4058 - scope.wrappers.Document = Document;
4059 - })(window.ShadowDOMPolyfill);
4060 - (function(scope) {
4061 - "use strict";
4062 - var EventTarget = scope.wrappers.EventTarget;
4063 - var Selection = scope.wrappers.Selection;
4064 - var mixin = scope.mixin;
4065 - var registerWrapper = scope.registerWrapper;
4066 - var renderAllPending = scope.renderAllPending;
4067 - var unwrap = scope.unwrap;
4068 - var unwrapIfNeeded = scope.unwrapIfNeeded;
4069 - var wrap = scope.wrap;
4070 - var OriginalWindow = window.Window;
4071 - var originalGetComputedStyle = window.getComputedStyle;
4072 - var originalGetDefaultComputedStyle = window.getDefaultComputedStyle;
4073 - var originalGetSelection = window.getSelection;
4074 - function Window(impl) {
4075 - EventTarget.call(this, impl);
4076 - }
4077 - Window.prototype = Object.create(EventTarget.prototype);
4078 - OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {
4079 - return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);
4080 - };
4081 - if (originalGetDefaultComputedStyle) {
4082 - OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseudo) {
4083 - return wrap(this || window).getDefaultComputedStyle(unwrapIfNeeded(el), pseudo);
4084 - };
4085 - }
4086 - OriginalWindow.prototype.getSelection = function() {
4087 - return wrap(this || window).getSelection();
4088 - };
4089 - delete window.getComputedStyle;
4090 - delete window.getDefaultComputedStyle;
4091 - delete window.getSelection;
4092 - [ "addEventListener", "removeEventListener", "dispatchEvent" ].forEach(function(name) {
4093 - OriginalWindow.prototype[name] = function() {
4094 - var w = wrap(this || window);
4095 - return w[name].apply(w, arguments);
4096 - };
4097 - delete window[name];
4098 - });
4099 - mixin(Window.prototype, {
4100 - getComputedStyle: function(el, pseudo) {
4101 - renderAllPending();
4102 - return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo);
4103 - },
4104 - getSelection: function() {
4105 - renderAllPending();
4106 - return new Selection(originalGetSelection.call(unwrap(this)));
4107 - },
4108 - get document() {
4109 - return wrap(unwrap(this).document);
4110 - }
4111 - });
4112 - if (originalGetDefaultComputedStyle) {
4113 - Window.prototype.getDefaultComputedStyle = function(el, pseudo) {
4114 - renderAllPending();
4115 - return originalGetDefaultComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo);
4116 - };
4117 - }
4118 - registerWrapper(OriginalWindow, Window, window);
4119 - scope.wrappers.Window = Window;
4120 - })(window.ShadowDOMPolyfill);
4121 - (function(scope) {
4122 - "use strict";
4123 - var unwrap = scope.unwrap;
4124 - var OriginalDataTransfer = window.DataTransfer || window.Clipboard;
4125 - var OriginalDataTransferSetDragImage = OriginalDataTransfer.prototype.setDragImage;
4126 - if (OriginalDataTransferSetDragImage) {
4127 - OriginalDataTransfer.prototype.setDragImage = function(image, x, y) {
4128 - OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y);
4129 - };
4130 - }
4131 - })(window.ShadowDOMPolyfill);
4132 - (function(scope) {
4133 - "use strict";
4134 - var registerWrapper = scope.registerWrapper;
4135 - var setWrapper = scope.setWrapper;
4136 - var unwrap = scope.unwrap;
4137 - var OriginalFormData = window.FormData;
4138 - if (!OriginalFormData) return;
4139 - function FormData(formElement) {
4140 - var impl;
4141 - if (formElement instanceof OriginalFormData) {
4142 - impl = formElement;
4143 - } else {
4144 - impl = new OriginalFormData(formElement && unwrap(formElement));
4145 - }
4146 - setWrapper(impl, this);
4147 - }
4148 - registerWrapper(OriginalFormData, FormData, new OriginalFormData());
4149 - scope.wrappers.FormData = FormData;
4150 - })(window.ShadowDOMPolyfill);
4151 - (function(scope) {
4152 - "use strict";
4153 - var unwrapIfNeeded = scope.unwrapIfNeeded;
4154 - var originalSend = XMLHttpRequest.prototype.send;
4155 - XMLHttpRequest.prototype.send = function(obj) {
4156 - return originalSend.call(this, unwrapIfNeeded(obj));
4157 - };
4158 - })(window.ShadowDOMPolyfill);
4159 - (function(scope) {
4160 - "use strict";
4161 - var isWrapperFor = scope.isWrapperFor;
4162 - var elements = {
4163 - a: "HTMLAnchorElement",
4164 - area: "HTMLAreaElement",
4165 - audio: "HTMLAudioElement",
4166 - base: "HTMLBaseElement",
4167 - body: "HTMLBodyElement",
4168 - br: "HTMLBRElement",
4169 - button: "HTMLButtonElement",
4170 - canvas: "HTMLCanvasElement",
4171 - caption: "HTMLTableCaptionElement",
4172 - col: "HTMLTableColElement",
4173 - content: "HTMLContentElement",
4174 - data: "HTMLDataElement",
4175 - datalist: "HTMLDataListElement",
4176 - del: "HTMLModElement",
4177 - dir: "HTMLDirectoryElement",
4178 - div: "HTMLDivElement",
4179 - dl: "HTMLDListElement",
4180 - embed: "HTMLEmbedElement",
4181 - fieldset: "HTMLFieldSetElement",
4182 - font: "HTMLFontElement",
4183 - form: "HTMLFormElement",
4184 - frame: "HTMLFrameElement",
4185 - frameset: "HTMLFrameSetElement",
4186 - h1: "HTMLHeadingElement",
4187 - head: "HTMLHeadElement",
4188 - hr: "HTMLHRElement",
4189 - html: "HTMLHtmlElement",
4190 - iframe: "HTMLIFrameElement",
4191 - img: "HTMLImageElement",
4192 - input: "HTMLInputElement",
4193 - keygen: "HTMLKeygenElement",
4194 - label: "HTMLLabelElement",
4195 - legend: "HTMLLegendElement",
4196 - li: "HTMLLIElement",
4197 - link: "HTMLLinkElement",
4198 - map: "HTMLMapElement",
4199 - marquee: "HTMLMarqueeElement",
4200 - menu: "HTMLMenuElement",
4201 - menuitem: "HTMLMenuItemElement",
4202 - meta: "HTMLMetaElement",
4203 - meter: "HTMLMeterElement",
4204 - object: "HTMLObjectElement",
4205 - ol: "HTMLOListElement",
4206 - optgroup: "HTMLOptGroupElement",
4207 - option: "HTMLOptionElement",
4208 - output: "HTMLOutputElement",
4209 - p: "HTMLParagraphElement",
4210 - param: "HTMLParamElement",
4211 - pre: "HTMLPreElement",
4212 - progress: "HTMLProgressElement",
4213 - q: "HTMLQuoteElement",
4214 - script: "HTMLScriptElement",
4215 - select: "HTMLSelectElement",
4216 - shadow: "HTMLShadowElement",
4217 - source: "HTMLSourceElement",
4218 - span: "HTMLSpanElement",
4219 - style: "HTMLStyleElement",
4220 - table: "HTMLTableElement",
4221 - tbody: "HTMLTableSectionElement",
4222 - template: "HTMLTemplateElement",
4223 - textarea: "HTMLTextAreaElement",
4224 - thead: "HTMLTableSectionElement",
4225 - time: "HTMLTimeElement",
4226 - title: "HTMLTitleElement",
4227 - tr: "HTMLTableRowElement",
4228 - track: "HTMLTrackElement",
4229 - ul: "HTMLUListElement",
4230 - video: "HTMLVideoElement"
4231 - };
4232 - function overrideConstructor(tagName) {
4233 - var nativeConstructorName = elements[tagName];
4234 - var nativeConstructor = window[nativeConstructorName];
4235 - if (!nativeConstructor) return;
4236 - var element = document.createElement(tagName);
4237 - var wrapperConstructor = element.constructor;
4238 - window[nativeConstructorName] = wrapperConstructor;
4239 - }
4240 - Object.keys(elements).forEach(overrideConstructor);
4241 - Object.getOwnPropertyNames(scope.wrappers).forEach(function(name) {
4242 - window[name] = scope.wrappers[name];
4243 - });
4244 - })(window.ShadowDOMPolyfill);
4245 - (function(scope) {
4246 - var ShadowCSS = {
4247 - strictStyling: false,
4248 - registry: {},
4249 - shimStyling: function(root, name, extendsName) {
4250 - var scopeStyles = this.prepareRoot(root, name, extendsName);
4251 - var typeExtension = this.isTypeExtension(extendsName);
4252 - var scopeSelector = this.makeScopeSelector(name, typeExtension);
4253 - var cssText = stylesToCssText(scopeStyles, true);
4254 - cssText = this.scopeCssText(cssText, scopeSelector);
4255 - if (root) {
4256 - root.shimmedStyle = cssText;
4257 - }
4258 - this.addCssToDocument(cssText, name);
4259 - },
4260 - shimStyle: function(style, selector) {
4261 - return this.shimCssText(style.textContent, selector);
4262 - },
4263 - shimCssText: function(cssText, selector) {
4264 - cssText = this.insertDirectives(cssText);
4265 - return this.scopeCssText(cssText, selector);
4266 - },
4267 - makeScopeSelector: function(name, typeExtension) {
4268 - if (name) {
4269 - return typeExtension ? "[is=" + name + "]" : name;
4270 - }
4271 - return "";
4272 - },
4273 - isTypeExtension: function(extendsName) {
4274 - return extendsName && extendsName.indexOf("-") < 0;
4275 - },
4276 - prepareRoot: function(root, name, extendsName) {
4277 - var def = this.registerRoot(root, name, extendsName);
4278 - this.replaceTextInStyles(def.rootStyles, this.insertDirectives);
4279 - this.removeStyles(root, def.rootStyles);
4280 - if (this.strictStyling) {
4281 - this.applyScopeToContent(root, name);
4282 - }
4283 - return def.scopeStyles;
4284 - },
4285 - removeStyles: function(root, styles) {
4286 - for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
4287 - s.parentNode.removeChild(s);
4288 - }
4289 - },
4290 - registerRoot: function(root, name, extendsName) {
4291 - var def = this.registry[name] = {
4292 - root: root,
4293 - name: name,
4294 - extendsName: extendsName
4295 - };
4296 - var styles = this.findStyles(root);
4297 - def.rootStyles = styles;
4298 - def.scopeStyles = def.rootStyles;
4299 - var extendee = this.registry[def.extendsName];
4300 - if (extendee) {
4301 - def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);
4302 - }
4303 - return def;
4304 - },
4305 - findStyles: function(root) {
4306 - if (!root) {
4307 - return [];
4308 - }
4309 - var styles = root.querySelectorAll("style");
4310 - return Array.prototype.filter.call(styles, function(s) {
4311 - return !s.hasAttribute(NO_SHIM_ATTRIBUTE);
4312 - });
4313 - },
4314 - applyScopeToContent: function(root, name) {
4315 - if (root) {
4316 - Array.prototype.forEach.call(root.querySelectorAll("*"), function(node) {
4317 - node.setAttribute(name, "");
4318 - });
4319 - Array.prototype.forEach.call(root.querySelectorAll("template"), function(template) {
4320 - this.applyScopeToContent(template.content, name);
4321 - }, this);
4322 - }
4323 - },
4324 - insertDirectives: function(cssText) {
4325 - cssText = this.insertPolyfillDirectivesInCssText(cssText);
4326 - return this.insertPolyfillRulesInCssText(cssText);
4327 - },
4328 - insertPolyfillDirectivesInCssText: function(cssText) {
4329 - cssText = cssText.replace(cssCommentNextSelectorRe, function(match, p1) {
4330 - return p1.slice(0, -2) + "{";
4331 - });
4332 - return cssText.replace(cssContentNextSelectorRe, function(match, p1) {
4333 - return p1 + " {";
4334 - });
4335 - },
4336 - insertPolyfillRulesInCssText: function(cssText) {
4337 - cssText = cssText.replace(cssCommentRuleRe, function(match, p1) {
4338 - return p1.slice(0, -1);
4339 - });
4340 - return cssText.replace(cssContentRuleRe, function(match, p1, p2, p3) {
4341 - var rule = match.replace(p1, "").replace(p2, "");
4342 - return p3 + rule;
4343 - });
4344 - },
4345 - scopeCssText: function(cssText, scopeSelector) {
4346 - var unscoped = this.extractUnscopedRulesFromCssText(cssText);
4347 - cssText = this.insertPolyfillHostInCssText(cssText);
4348 - cssText = this.convertColonHost(cssText);
4349 - cssText = this.convertColonHostContext(cssText);
4350 - cssText = this.convertShadowDOMSelectors(cssText);
4351 - if (scopeSelector) {
4352 - var self = this, cssText;
4353 - withCssRules(cssText, function(rules) {
4354 - cssText = self.scopeRules(rules, scopeSelector);
4355 - });
4356 - }
4357 - cssText = cssText + "\n" + unscoped;
4358 - return cssText.trim();
4359 - },
4360 - extractUnscopedRulesFromCssText: function(cssText) {
4361 - var r = "", m;
4362 - while (m = cssCommentUnscopedRuleRe.exec(cssText)) {
4363 - r += m[1].slice(0, -1) + "\n\n";
4364 - }
4365 - while (m = cssContentUnscopedRuleRe.exec(cssText)) {
4366 - r += m[0].replace(m[2], "").replace(m[1], m[3]) + "\n\n";
4367 - }
4368 - return r;
4369 - },
4370 - convertColonHost: function(cssText) {
4371 - return this.convertColonRule(cssText, cssColonHostRe, this.colonHostPartReplacer);
4372 - },
4373 - convertColonHostContext: function(cssText) {
4374 - return this.convertColonRule(cssText, cssColonHostContextRe, this.colonHostContextPartReplacer);
4375 - },
4376 - convertColonRule: function(cssText, regExp, partReplacer) {
4377 - return cssText.replace(regExp, function(m, p1, p2, p3) {
4378 - p1 = polyfillHostNoCombinator;
4379 - if (p2) {
4380 - var parts = p2.split(","), r = [];
4381 - for (var i = 0, l = parts.length, p; i < l && (p = parts[i]); i++) {
4382 - p = p.trim();
4383 - r.push(partReplacer(p1, p, p3));
4384 - }
4385 - return r.join(",");
4386 - } else {
4387 - return p1 + p3;
4388 - }
4389 - });
4390 - },
4391 - colonHostContextPartReplacer: function(host, part, suffix) {
4392 - if (part.match(polyfillHost)) {
4393 - return this.colonHostPartReplacer(host, part, suffix);
4394 - } else {
4395 - return host + part + suffix + ", " + part + " " + host + suffix;
4396 - }
4397 - },
4398 - colonHostPartReplacer: function(host, part, suffix) {
4399 - return host + part.replace(polyfillHost, "") + suffix;
4400 - },
4401 - convertShadowDOMSelectors: function(cssText) {
4402 - for (var i = 0; i < shadowDOMSelectorsRe.length; i++) {
4403 - cssText = cssText.replace(shadowDOMSelectorsRe[i], " ");
4404 - }
4405 - return cssText;
4406 - },
4407 - scopeRules: function(cssRules, scopeSelector) {
4408 - var cssText = "";
4409 - if (cssRules) {
4410 - Array.prototype.forEach.call(cssRules, function(rule) {
4411 - if (rule.selectorText && (rule.style && rule.style.cssText !== undefined)) {
4412 - cssText += this.scopeSelector(rule.selectorText, scopeSelector, this.strictStyling) + " {\n ";
4413 - cssText += this.propertiesFromRule(rule) + "\n}\n\n";
4414 - } else if (rule.type === CSSRule.MEDIA_RULE) {
4415 - cssText += "@media " + rule.media.mediaText + " {\n";
4416 - cssText += this.scopeRules(rule.cssRules, scopeSelector);
4417 - cssText += "\n}\n\n";
4418 - } else {
4419 - try {
4420 - if (rule.cssText) {
4421 - cssText += rule.cssText + "\n\n";
4422 - }
4423 - } catch (x) {
4424 - if (rule.type === CSSRule.KEYFRAMES_RULE && rule.cssRules) {
4425 - cssText += this.ieSafeCssTextFromKeyFrameRule(rule);
4426 - }
4427 - }
4428 - }
4429 - }, this);
4430 - }
4431 - return cssText;
4432 - },
4433 - ieSafeCssTextFromKeyFrameRule: function(rule) {
4434 - var cssText = "@keyframes " + rule.name + " {";
4435 - Array.prototype.forEach.call(rule.cssRules, function(rule) {
4436 - cssText += " " + rule.keyText + " {" + rule.style.cssText + "}";
4437 - });
4438 - cssText += " }";
4439 - return cssText;
4440 - },
4441 - scopeSelector: function(selector, scopeSelector, strict) {
4442 - var r = [], parts = selector.split(",");
4443 - parts.forEach(function(p) {
4444 - p = p.trim();
4445 - if (this.selectorNeedsScoping(p, scopeSelector)) {
4446 - p = strict && !p.match(polyfillHostNoCombinator) ? this.applyStrictSelectorScope(p, scopeSelector) : this.applySelectorScope(p, scopeSelector);
4447 - }
4448 - r.push(p);
4449 - }, this);
4450 - return r.join(", ");
4451 - },
4452 - selectorNeedsScoping: function(selector, scopeSelector) {
4453 - if (Array.isArray(scopeSelector)) {
4454 - return true;
4455 - }
4456 - var re = this.makeScopeMatcher(scopeSelector);
4457 - return !selector.match(re);
4458 - },
4459 - makeScopeMatcher: function(scopeSelector) {
4460 - scopeSelector = scopeSelector.replace(/\[/g, "\\[").replace(/\[/g, "\\]");
4461 - return new RegExp("^(" + scopeSelector + ")" + selectorReSuffix, "m");
4462 - },
4463 - applySelectorScope: function(selector, selectorScope) {
4464 - return Array.isArray(selectorScope) ? this.applySelectorScopeList(selector, selectorScope) : this.applySimpleSelectorScope(selector, selectorScope);
4465 - },
4466 - applySelectorScopeList: function(selector, scopeSelectorList) {
4467 - var r = [];
4468 - for (var i = 0, s; s = scopeSelectorList[i]; i++) {
4469 - r.push(this.applySimpleSelectorScope(selector, s));
4470 - }
4471 - return r.join(", ");
4472 - },
4473 - applySimpleSelectorScope: function(selector, scopeSelector) {
4474 - if (selector.match(polyfillHostRe)) {
4475 - selector = selector.replace(polyfillHostNoCombinator, scopeSelector);
4476 - return selector.replace(polyfillHostRe, scopeSelector + " ");
4477 - } else {
4478 - return scopeSelector + " " + selector;
4479 - }
4480 - },
4481 - applyStrictSelectorScope: function(selector, scopeSelector) {
4482 - scopeSelector = scopeSelector.replace(/\[is=([^\]]*)\]/g, "$1");
4483 - var splits = [ " ", ">", "+", "~" ], scoped = selector, attrName = "[" + scopeSelector + "]";
4484 - splits.forEach(function(sep) {
4485 - var parts = scoped.split(sep);
4486 - scoped = parts.map(function(p) {
4487 - var t = p.trim().replace(polyfillHostRe, "");
4488 - if (t && splits.indexOf(t) < 0 && t.indexOf(attrName) < 0) {
4489 - p = t.replace(/([^:]*)(:*)(.*)/, "$1" + attrName + "$2$3");
4490 - }
4491 - return p;
4492 - }).join(sep);
4493 - });
4494 - return scoped;
4495 - },
4496 - insertPolyfillHostInCssText: function(selector) {
4497 - return selector.replace(colonHostContextRe, polyfillHostContext).replace(colonHostRe, polyfillHost);
4498 - },
4499 - propertiesFromRule: function(rule) {
4500 - var cssText = rule.style.cssText;
4501 - if (rule.style.content && !rule.style.content.match(/['"]+|attr/)) {
4502 - cssText = cssText.replace(/content:[^;]*;/g, "content: '" + rule.style.content + "';");
4503 - }
4504 - var style = rule.style;
4505 - for (var i in style) {
4506 - if (style[i] === "initial") {
4507 - cssText += i + ": initial; ";
4508 - }
4509 - }
4510 - return cssText;
4511 - },
4512 - replaceTextInStyles: function(styles, action) {
4513 - if (styles && action) {
4514 - if (!(styles instanceof Array)) {
4515 - styles = [ styles ];
4516 - }
4517 - Array.prototype.forEach.call(styles, function(s) {
4518 - s.textContent = action.call(this, s.textContent);
4519 - }, this);
4520 - }
4521 - },
4522 - addCssToDocument: function(cssText, name) {
4523 - if (cssText.match("@import")) {
4524 - addOwnSheet(cssText, name);
4525 - } else {
4526 - addCssToDocument(cssText);
4527 - }
4528 - }
4529 - };
4530 - var selectorRe = /([^{]*)({[\s\S]*?})/gim, cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim, cssCommentNextSelectorRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim, cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim, cssCommentRuleRe = /\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim, cssContentRuleRe = /(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim, cssCommentUnscopedRuleRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim, cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim, cssPseudoRe = /::(x-[^\s{,(]*)/gim, cssPartRe = /::part\(([^)]*)\)/gim, polyfillHost = "-shadowcsshost", polyfillHostContext = "-shadowcsscontext", parenSuffix = ")(?:\\((" + "(?:\\([^)(]*\\)|[^)(]*)+?" + ")\\))?([^,{]*)";
4531 - var cssColonHostRe = new RegExp("(" + polyfillHost + parenSuffix, "gim"), cssColonHostContextRe = new RegExp("(" + polyfillHostContext + parenSuffix, "gim"), selectorReSuffix = "([>\\s~+[.,{:][\\s\\S]*)?$", colonHostRe = /\:host/gim, colonHostContextRe = /\:host-context/gim, polyfillHostNoCombinator = polyfillHost + "-no-combinator", polyfillHostRe = new RegExp(polyfillHost, "gim"), polyfillHostContextRe = new RegExp(polyfillHostContext, "gim"), shadowDOMSelectorsRe = [ /\^\^/g, /\^/g, /\/shadow\//g, /\/shadow-deep\//g, /::shadow/g, /\/deep\//g, /::content/g ];
4532 - function stylesToCssText(styles, preserveComments) {
4533 - var cssText = "";
4534 - Array.prototype.forEach.call(styles, function(s) {
4535 - cssText += s.textContent + "\n\n";
4536 - });
4537 - if (!preserveComments) {
4538 - cssText = cssText.replace(cssCommentRe, "");
4539 - }
4540 - return cssText;
4541 - }
4542 - function cssTextToStyle(cssText) {
4543 - var style = document.createElement("style");
4544 - style.textContent = cssText;
4545 - return style;
4546 - }
4547 - function cssToRules(cssText) {
4548 - var style = cssTextToStyle(cssText);
4549 - document.head.appendChild(style);
4550 - var rules = [];
4551 - if (style.sheet) {
4552 - try {
4553 - rules = style.sheet.cssRules;
4554 - } catch (e) {}
4555 - } else {
4556 - console.warn("sheet not found", style);
4557 - }
4558 - style.parentNode.removeChild(style);
4559 - return rules;
4560 - }
4561 - var frame = document.createElement("iframe");
4562 - frame.style.display = "none";
4563 - function initFrame() {
4564 - frame.initialized = true;
4565 - document.body.appendChild(frame);
4566 - var doc = frame.contentDocument;
4567 - var base = doc.createElement("base");
4568 - base.href = document.baseURI;
4569 - doc.head.appendChild(base);
4570 - }
4571 - function inFrame(fn) {
4572 - if (!frame.initialized) {
4573 - initFrame();
4574 - }
4575 - document.body.appendChild(frame);
4576 - fn(frame.contentDocument);
4577 - document.body.removeChild(frame);
4578 - }
4579 - var isChrome = navigator.userAgent.match("Chrome");
4580 - function withCssRules(cssText, callback) {
4581 - if (!callback) {
4582 - return;
4583 - }
4584 - var rules;
4585 - if (cssText.match("@import") && isChrome) {
4586 - var style = cssTextToStyle(cssText);
4587 - inFrame(function(doc) {
4588 - doc.head.appendChild(style.impl);
4589 - rules = Array.prototype.slice.call(style.sheet.cssRules, 0);
4590 - callback(rules);
4591 - });
4592 - } else {
4593 - rules = cssToRules(cssText);
4594 - callback(rules);
4595 - }
4596 - }
4597 - function rulesToCss(cssRules) {
4598 - for (var i = 0, css = []; i < cssRules.length; i++) {
4599 - css.push(cssRules[i].cssText);
4600 - }
4601 - return css.join("\n\n");
4602 - }
4603 - function addCssToDocument(cssText) {
4604 - if (cssText) {
4605 - getSheet().appendChild(document.createTextNode(cssText));
4606 - }
4607 - }
4608 - function addOwnSheet(cssText, name) {
4609 - var style = cssTextToStyle(cssText);
4610 - style.setAttribute(name, "");
4611 - style.setAttribute(SHIMMED_ATTRIBUTE, "");
4612 - document.head.appendChild(style);
4613 - }
4614 - var SHIM_ATTRIBUTE = "shim-shadowdom";
4615 - var SHIMMED_ATTRIBUTE = "shim-shadowdom-css";
4616 - var NO_SHIM_ATTRIBUTE = "no-shim";
4617 - var sheet;
4618 - function getSheet() {
4619 - if (!sheet) {
4620 - sheet = document.createElement("style");
4621 - sheet.setAttribute(SHIMMED_ATTRIBUTE, "");
4622 - sheet[SHIMMED_ATTRIBUTE] = true;
4623 - }
4624 - return sheet;
4625 - }
4626 - if (window.ShadowDOMPolyfill) {
4627 - addCssToDocument("style { display: none !important; }\n");
4628 - var doc = ShadowDOMPolyfill.wrap(document);
4629 - var head = doc.querySelector("head");
4630 - head.insertBefore(getSheet(), head.childNodes[0]);
4631 - document.addEventListener("DOMContentLoaded", function() {
4632 - var urlResolver = scope.urlResolver;
4633 - if (window.HTMLImports && !HTMLImports.useNative) {
4634 - var SHIM_SHEET_SELECTOR = "link[rel=stylesheet]" + "[" + SHIM_ATTRIBUTE + "]";
4635 - var SHIM_STYLE_SELECTOR = "style[" + SHIM_ATTRIBUTE + "]";
4636 - HTMLImports.importer.documentPreloadSelectors += "," + SHIM_SHEET_SELECTOR;
4637 - HTMLImports.importer.importsPreloadSelectors += "," + SHIM_SHEET_SELECTOR;
4638 - HTMLImports.parser.documentSelectors = [ HTMLImports.parser.documentSelectors, SHIM_SHEET_SELECTOR, SHIM_STYLE_SELECTOR ].join(",");
4639 - var originalParseGeneric = HTMLImports.parser.parseGeneric;
4640 - HTMLImports.parser.parseGeneric = function(elt) {
4641 - if (elt[SHIMMED_ATTRIBUTE]) {
4642 - return;
4643 - }
4644 - var style = elt.__importElement || elt;
4645 - if (!style.hasAttribute(SHIM_ATTRIBUTE)) {
4646 - originalParseGeneric.call(this, elt);
4647 - return;
4648 - }
4649 - if (elt.__resource) {
4650 - style = elt.ownerDocument.createElement("style");
4651 - style.textContent = elt.__resource;
4652 - }
4653 - HTMLImports.path.resolveUrlsInStyle(style);
4654 - style.textContent = ShadowCSS.shimStyle(style);
4655 - style.removeAttribute(SHIM_ATTRIBUTE, "");
4656 - style.setAttribute(SHIMMED_ATTRIBUTE, "");
4657 - style[SHIMMED_ATTRIBUTE] = true;
4658 - if (style.parentNode !== head) {
4659 - if (elt.parentNode === head) {
4660 - head.replaceChild(style, elt);
4661 - } else {
4662 - this.addElementToDocument(style);
4663 - }
4664 - }
4665 - style.__importParsed = true;
4666 - this.markParsingComplete(elt);
4667 - this.parseNext();
4668 - };
4669 - var hasResource = HTMLImports.parser.hasResource;
4670 - HTMLImports.parser.hasResource = function(node) {
4671 - if (node.localName === "link" && node.rel === "stylesheet" && node.hasAttribute(SHIM_ATTRIBUTE)) {
4672 - return node.__resource;
4673 - } else {
4674 - return hasResource.call(this, node);
4675 - }
4676 - };
4677 - }
4678 - });
4679 - }
4680 - scope.ShadowCSS = ShadowCSS;
4681 - })(window.WebComponents);
4682 -}
4683 -
4684 -(function(scope) {
4685 - if (window.ShadowDOMPolyfill) {
4686 - window.wrap = ShadowDOMPolyfill.wrapIfNeeded;
4687 - window.unwrap = ShadowDOMPolyfill.unwrapIfNeeded;
4688 - } else {
4689 - window.wrap = window.unwrap = function(n) {
4690 - return n;
4691 - };
4692 - }
4693 -})(window.WebComponents);
4694 -
4695 -(function(global) {
4696 - var registrationsTable = new WeakMap();
4697 - var setImmediate;
4698 - if (/Trident/.test(navigator.userAgent)) {
4699 - setImmediate = setTimeout;
4700 - } else if (window.setImmediate) {
4701 - setImmediate = window.setImmediate;
4702 - } else {
4703 - var setImmediateQueue = [];
4704 - var sentinel = String(Math.random());
4705 - window.addEventListener("message", function(e) {
4706 - if (e.data === sentinel) {
4707 - var queue = setImmediateQueue;
4708 - setImmediateQueue = [];
4709 - queue.forEach(function(func) {
4710 - func();
4711 - });
4712 - }
4713 - });
4714 - setImmediate = function(func) {
4715 - setImmediateQueue.push(func);
4716 - window.postMessage(sentinel, "*");
4717 - };
4718 - }
4719 - var isScheduled = false;
4720 - var scheduledObservers = [];
4721 - function scheduleCallback(observer) {
4722 - scheduledObservers.push(observer);
4723 - if (!isScheduled) {
4724 - isScheduled = true;
4725 - setImmediate(dispatchCallbacks);
4726 - }
4727 - }
4728 - function wrapIfNeeded(node) {
4729 - return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
4730 - }
4731 - function dispatchCallbacks() {
4732 - isScheduled = false;
4733 - var observers = scheduledObservers;
4734 - scheduledObservers = [];
4735 - observers.sort(function(o1, o2) {
4736 - return o1.uid_ - o2.uid_;
4737 - });
4738 - var anyNonEmpty = false;
4739 - observers.forEach(function(observer) {
4740 - var queue = observer.takeRecords();
4741 - removeTransientObserversFor(observer);
4742 - if (queue.length) {
4743 - observer.callback_(queue, observer);
4744 - anyNonEmpty = true;
4745 - }
4746 - });
4747 - if (anyNonEmpty) dispatchCallbacks();
4748 - }
4749 - function removeTransientObserversFor(observer) {
4750 - observer.nodes_.forEach(function(node) {
4751 - var registrations = registrationsTable.get(node);
4752 - if (!registrations) return;
4753 - registrations.forEach(function(registration) {
4754 - if (registration.observer === observer) registration.removeTransientObservers();
4755 - });
4756 - });
4757 - }
4758 - function forEachAncestorAndObserverEnqueueRecord(target, callback) {
4759 - for (var node = target; node; node = node.parentNode) {
4760 - var registrations = registrationsTable.get(node);
4761 - if (registrations) {
4762 - for (var j = 0; j < registrations.length; j++) {
4763 - var registration = registrations[j];
4764 - var options = registration.options;
4765 - if (node !== target && !options.subtree) continue;
4766 - var record = callback(options);
4767 - if (record) registration.enqueue(record);
4768 - }
4769 - }
4770 - }
4771 - }
4772 - var uidCounter = 0;
4773 - function JsMutationObserver(callback) {
4774 - this.callback_ = callback;
4775 - this.nodes_ = [];
4776 - this.records_ = [];
4777 - this.uid_ = ++uidCounter;
4778 - }
4779 - JsMutationObserver.prototype = {
4780 - observe: function(target, options) {
4781 - target = wrapIfNeeded(target);
4782 - if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
4783 - throw new SyntaxError();
4784 - }
4785 - var registrations = registrationsTable.get(target);
4786 - if (!registrations) registrationsTable.set(target, registrations = []);
4787 - var registration;
4788 - for (var i = 0; i < registrations.length; i++) {
4789 - if (registrations[i].observer === this) {
4790 - registration = registrations[i];
4791 - registration.removeListeners();
4792 - registration.options = options;
4793 - break;
4794 - }
4795 - }
4796 - if (!registration) {
4797 - registration = new Registration(this, target, options);
4798 - registrations.push(registration);
4799 - this.nodes_.push(target);
4800 - }
4801 - registration.addListeners();
4802 - },
4803 - disconnect: function() {
4804 - this.nodes_.forEach(function(node) {
4805 - var registrations = registrationsTable.get(node);
4806 - for (var i = 0; i < registrations.length; i++) {
4807 - var registration = registrations[i];
4808 - if (registration.observer === this) {
4809 - registration.removeListeners();
4810 - registrations.splice(i, 1);
4811 - break;
4812 - }
4813 - }
4814 - }, this);
4815 - this.records_ = [];
4816 - },
4817 - takeRecords: function() {
4818 - var copyOfRecords = this.records_;
4819 - this.records_ = [];
4820 - return copyOfRecords;
4821 - }
4822 - };
4823 - function MutationRecord(type, target) {
4824 - this.type = type;
4825 - this.target = target;
4826 - this.addedNodes = [];
4827 - this.removedNodes = [];
4828 - this.previousSibling = null;
4829 - this.nextSibling = null;
4830 - this.attributeName = null;
4831 - this.attributeNamespace = null;
4832 - this.oldValue = null;
4833 - }
4834 - function copyMutationRecord(original) {
4835 - var record = new MutationRecord(original.type, original.target);
4836 - record.addedNodes = original.addedNodes.slice();
4837 - record.removedNodes = original.removedNodes.slice();
4838 - record.previousSibling = original.previousSibling;
4839 - record.nextSibling = original.nextSibling;
4840 - record.attributeName = original.attributeName;
4841 - record.attributeNamespace = original.attributeNamespace;
4842 - record.oldValue = original.oldValue;
4843 - return record;
4844 - }
4845 - var currentRecord, recordWithOldValue;
4846 - function getRecord(type, target) {
4847 - return currentRecord = new MutationRecord(type, target);
4848 - }
4849 - function getRecordWithOldValue(oldValue) {
4850 - if (recordWithOldValue) return recordWithOldValue;
4851 - recordWithOldValue = copyMutationRecord(currentRecord);
4852 - recordWithOldValue.oldValue = oldValue;
4853 - return recordWithOldValue;
4854 - }
4855 - function clearRecords() {
4856 - currentRecord = recordWithOldValue = undefined;
4857 - }
4858 - function recordRepresentsCurrentMutation(record) {
4859 - return record === recordWithOldValue || record === currentRecord;
4860 - }
4861 - function selectRecord(lastRecord, newRecord) {
4862 - if (lastRecord === newRecord) return lastRecord;
4863 - if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
4864 - return null;
4865 - }
4866 - function Registration(observer, target, options) {
4867 - this.observer = observer;
4868 - this.target = target;
4869 - this.options = options;
4870 - this.transientObservedNodes = [];
4871 - }
4872 - Registration.prototype = {
4873 - enqueue: function(record) {
4874 - var records = this.observer.records_;
4875 - var length = records.length;
4876 - if (records.length > 0) {
4877 - var lastRecord = records[length - 1];
4878 - var recordToReplaceLast = selectRecord(lastRecord, record);
4879 - if (recordToReplaceLast) {
4880 - records[length - 1] = recordToReplaceLast;
4881 - return;
4882 - }
4883 - } else {
4884 - scheduleCallback(this.observer);
4885 - }
4886 - records[length] = record;
4887 - },
4888 - addListeners: function() {
4889 - this.addListeners_(this.target);
4890 - },
4891 - addListeners_: function(node) {
4892 - var options = this.options;
4893 - if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
4894 - if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
4895 - if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
4896 - if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
4897 - },
4898 - removeListeners: function() {
4899 - this.removeListeners_(this.target);
4900 - },
4901 - removeListeners_: function(node) {
4902 - var options = this.options;
4903 - if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
4904 - if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
4905 - if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
4906 - if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
4907 - },
4908 - addTransientObserver: function(node) {
4909 - if (node === this.target) return;
4910 - this.addListeners_(node);
4911 - this.transientObservedNodes.push(node);
4912 - var registrations = registrationsTable.get(node);
4913 - if (!registrations) registrationsTable.set(node, registrations = []);
4914 - registrations.push(this);
4915 - },
4916 - removeTransientObservers: function() {
4917 - var transientObservedNodes = this.transientObservedNodes;
4918 - this.transientObservedNodes = [];
4919 - transientObservedNodes.forEach(function(node) {
4920 - this.removeListeners_(node);
4921 - var registrations = registrationsTable.get(node);
4922 - for (var i = 0; i < registrations.length; i++) {
4923 - if (registrations[i] === this) {
4924 - registrations.splice(i, 1);
4925 - break;
4926 - }
4927 - }
4928 - }, this);
4929 - },
4930 - handleEvent: function(e) {
4931 - e.stopImmediatePropagation();
4932 - switch (e.type) {
4933 - case "DOMAttrModified":
4934 - var name = e.attrName;
4935 - var namespace = e.relatedNode.namespaceURI;
4936 - var target = e.target;
4937 - var record = new getRecord("attributes", target);
4938 - record.attributeName = name;
4939 - record.attributeNamespace = namespace;
4940 - var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
4941 - forEachAncestorAndObserverEnqueueRecord(target, function(options) {
4942 - if (!options.attributes) return;
4943 - if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
4944 - return;
4945 - }
4946 - if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
4947 - return record;
4948 - });
4949 - break;
4950 -
4951 - case "DOMCharacterDataModified":
4952 - var target = e.target;
4953 - var record = getRecord("characterData", target);
4954 - var oldValue = e.prevValue;
4955 - forEachAncestorAndObserverEnqueueRecord(target, function(options) {
4956 - if (!options.characterData) return;
4957 - if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
4958 - return record;
4959 - });
4960 - break;
4961 -
4962 - case "DOMNodeRemoved":
4963 - this.addTransientObserver(e.target);
4964 -
4965 - case "DOMNodeInserted":
4966 - var target = e.relatedNode;
4967 - var changedNode = e.target;
4968 - var addedNodes, removedNodes;
4969 - if (e.type === "DOMNodeInserted") {
4970 - addedNodes = [ changedNode ];
4971 - removedNodes = [];
4972 - } else {
4973 - addedNodes = [];
4974 - removedNodes = [ changedNode ];
4975 - }
4976 - var previousSibling = changedNode.previousSibling;
4977 - var nextSibling = changedNode.nextSibling;
4978 - var record = getRecord("childList", target);
4979 - record.addedNodes = addedNodes;
4980 - record.removedNodes = removedNodes;
4981 - record.previousSibling = previousSibling;
4982 - record.nextSibling = nextSibling;
4983 - forEachAncestorAndObserverEnqueueRecord(target, function(options) {
4984 - if (!options.childList) return;
4985 - return record;
4986 - });
4987 - }
4988 - clearRecords();
4989 - }
4990 - };
4991 - global.JsMutationObserver = JsMutationObserver;
4992 - if (!global.MutationObserver) global.MutationObserver = JsMutationObserver;
4993 -})(this);
4994 -
4995 -window.HTMLImports = window.HTMLImports || {
4996 - flags: {}
4997 -};
4998 -
4999 -(function(scope) {

This file is too large to show in full.

examples/webcomponents/index.html
+2 -2
@@ -1,7 +1,7 @@
1 <!DOCTYPE html>
2 <html>
3 <head>
4 - <meta http-equiv='Content-type' content='text/html; charset=utf-8'>
4 + <meta charset="utf-8">
5 <title>Basic Example with WebComponents</title>
6 <link rel="stylesheet" href="../shared/css/base.css" />
7 </head>
@@ -28,7 +28,7 @@
28 Learn more about React at
29 <a href="http://facebook.github.io/react" target="_blank">facebook.github.io/react</a>.
30 </p>
31 - <script src="../shared/thirdparty/webcomponents.js"></script>
31 + <script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/0.7.21/webcomponents.js"></script>
32 <script src="../../build/react.js"></script>
33 <script src="../../build/react-dom.js"></script>
34 <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>