Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(611)

Unified Diff: pkg/web_components/lib/platform.concat.js

Issue 482763002: Revert "Roll polymer to 0.3.5" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/web_components/lib/platform.js ('k') | pkg/web_components/lib/platform.concat.js.map » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/web_components/lib/platform.concat.js
diff --git a/pkg/web_components/lib/platform.concat.js b/pkg/web_components/lib/platform.concat.js
index 0572d8abc53c7fd63f2b276caf1d43b3c68168fc..68b593d8b5c85d4d4a269cfe1ef246007fbe0745 100644
--- a/pkg/web_components/lib/platform.concat.js
+++ b/pkg/web_components/lib/platform.concat.js
@@ -95,16 +95,7 @@ if (typeof WeakMap === 'undefined') {
entry[1] : undefined;
},
delete: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- var hasValue = entry[0] === key;
- entry[0] = entry[1] = undefined;
- return hasValue;
- },
- has: function(key) {
- var entry = key[this.name];
- if (!entry) return false;
- return entry[0] === key;
+ this.set(key, undefined);
}
};
@@ -129,8 +120,6 @@ if (typeof WeakMap === 'undefined') {
(function(global) {
'use strict';
- var testingExposeCycleCount = global.testingExposeCycleCount;
-
// Detect and do basic sanity checking on Object/Array.observe.
function detectObjectObserve() {
if (typeof Object.observe !== 'function' ||
@@ -181,13 +170,6 @@ if (typeof WeakMap === 'undefined') {
return false;
}
- // Firefox OS Apps do not allow eval. This feature detection is very hacky
- // but even if some other platform adds support for this function this code
- // will continue to work.
- if (navigator.getDeviceStorage) {
- return false;
- }
-
try {
var f = new Function('', 'return true;');
return f();
@@ -562,7 +544,7 @@ if (typeof WeakMap === 'undefined') {
while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {
cycles++;
}
- if (testingExposeCycleCount)
+ if (global.testingExposeCycleCount)
global.dirtyCheckCycleCount = cycles;
return cycles > 0;
@@ -961,7 +943,7 @@ if (typeof WeakMap === 'undefined') {
anyChanged = true;
} while (cycles < MAX_DIRTY_CHECK_CYCLES && anyChanged);
- if (testingExposeCycleCount)
+ if (global.testingExposeCycleCount)
global.dirtyCheckCycleCount = cycles;
runningMicrotaskCheckpoint = false;
@@ -1863,13 +1845,6 @@ window.ShadowDOMPolyfill = {};
return false;
}
- // Firefox OS Apps do not allow eval. This feature detection is very hacky
- // but even if some other platform adds support for this function this code
- // will continue to work.
- if (navigator.getDeviceStorage) {
- return false;
- }
-
try {
var f = new Function('return true;');
return f();
@@ -2127,15 +2102,13 @@ window.ShadowDOMPolyfill = {};
var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;
var OriginalWebGLRenderingContext = window.WebGLRenderingContext;
var OriginalSVGElementInstance = window.SVGElementInstance;
- var OriginalFormData = window.FormData;
-
+
function isWrapper(object) {
return object instanceof wrappers.EventTarget ||
object instanceof wrappers.Event ||
object instanceof wrappers.Range ||
object instanceof wrappers.DOMImplementation ||
object instanceof wrappers.CanvasRenderingContext2D ||
- object instanceof wrappers.FormData ||
wrappers.WebGLRenderingContext &&
object instanceof wrappers.WebGLRenderingContext;
}
@@ -2148,7 +2121,6 @@ window.ShadowDOMPolyfill = {};
object instanceof OriginalRange ||
object instanceof OriginalDOMImplementation ||
object instanceof OriginalCanvasRenderingContext2D ||
- object instanceof OriginalFormData ||
OriginalWebGLRenderingContext &&
object instanceof OriginalWebGLRenderingContext ||
OriginalSVGElementInstance &&
@@ -4612,39 +4584,6 @@ window.ShadowDOMPolyfill = {};
var HTMLCollection = scope.wrappers.HTMLCollection;
var NodeList = scope.wrappers.NodeList;
- var getTreeScope = scope.getTreeScope;
- var wrap = scope.wrap;
-
- var originalDocumentQuerySelector = document.querySelector;
- var originalElementQuerySelector = document.documentElement.querySelector;
-
- var originalDocumentQuerySelectorAll = document.querySelectorAll;
- var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;
-
- var originalDocumentGetElementsByTagName = document.getElementsByTagName;
- var originalElementGetElementsByTagName = document.documentElement.getElementsByTagName;
-
- var originalDocumentGetElementsByTagNameNS = document.getElementsByTagNameNS;
- var originalElementGetElementsByTagNameNS = document.documentElement.getElementsByTagNameNS;
-
- var OriginalElement = window.Element;
- var OriginalDocument = window.HTMLDocument;
-
- function filterNodeList(list, index, result) {
- var wrappedItem = null;
- var root = null;
- for (var i = 0, length = list.length; i < length; i++) {
- wrappedItem = wrap(list[i]);
- if (root = getTreeScope(wrappedItem).root) {
- if (root instanceof scope.wrappers.ShadowRoot) {
- continue;
- }
- }
- result[index++] = wrappedItem;
- }
-
- return index;
- }
function findOne(node, selector) {
var m, el = node.firstElementChild;
@@ -4675,7 +4614,7 @@ window.ShadowDOMPolyfill = {};
return true;
}
- function matchesLocalNameOnly(el, ns, localName) {
+ function matchesLocalName(el, localName) {
return el.localName === localName;
}
@@ -4687,143 +4626,40 @@ window.ShadowDOMPolyfill = {};
return el.namespaceURI === ns && el.localName === localName;
}
- function findElements(node, index, result, p, arg0, arg1) {
+ function findElements(node, result, p, arg0, arg1) {
var el = node.firstElementChild;
while (el) {
if (p(el, arg0, arg1))
- result[index++] = el;
- index = findElements(el, index, result, p, arg0, arg1);
+ result[result.length++] = el;
+ findElements(el, result, p, arg0, arg1);
el = el.nextElementSibling;
}
- return index;
+ return result;
}
// find and findAll will only match Simple Selectors,
// Structural Pseudo Classes are not guarenteed to be correct
// http://www.w3.org/TR/css3-selectors/#simple-selectors
- function querySelectorAllFiltered (p, index, result, selector) {
- var target = this.impl;
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- // We are in the shadow tree and the logical tree is
- // going to be disconnected so we do a manual tree traversal
- return findElements(this, index, result, p, selector, null);
- } else if (target instanceof OriginalElement) {
- list = originalElementQuerySelectorAll.call(target, selector);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentQuerySelectorAll.call(target, selector);
- } else {
- // When we get a ShadowRoot the logical tree is going to be disconnected
- // so we do a manual tree traversal
- return findElements(this, index, result, p, selector, null);
- }
-
- return filterNodeList(list, index, result);
- }
-
var SelectorsInterface = {
querySelector: function(selector) {
- var target = this.impl;
- var wrappedItem;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- // We are in the shadow tree and the logical tree is
- // going to be disconnected so we do a manual tree traversal
- return findOne(this, selector);
- } else if (target instanceof OriginalElement) {
- wrappedItem = wrap(originalElementQuerySelector.call(target, selector));
- } else if (target instanceof OriginalDocument) {
- wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));
- } else {
- // When we get a ShadowRoot the logical tree is going to be disconnected
- // so we do a manual tree traversal
- return findOne(this, selector);
- }
-
- if (!wrappedItem) {
- // When the original query returns nothing
- // we return nothing (to be consistent with the other wrapped calls)
- return wrappedItem;
- } else if (root = getTreeScope(wrappedItem).root) {
- if (root instanceof scope.wrappers.ShadowRoot) {
- // When the original query returns an element in the ShadowDOM
- // we must do a manual tree traversal
- return findOne(this, selector);
- }
- }
-
- return wrappedItem;
+ return findOne(this, selector);
},
querySelectorAll: function(selector) {
- var result = new NodeList();
-
- result.length = querySelectorAllFiltered.call(this,
- matchesSelector,
- 0,
- result,
- selector);
-
- return result;
+ return findElements(this, new NodeList(), matchesSelector, selector);
}
};
- function getElementsByTagNameFiltered (p, index, result, localName, lowercase) {
- var target = this.impl;
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- // We are in the shadow tree and the logical tree is
- // going to be disconnected so we do a manual tree traversal
- return findElements(this, index, result, p, localName, lowercase);
- } else if (target instanceof OriginalElement) {
- list = originalElementGetElementsByTagName.call(target, localName, lowercase);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentGetElementsByTagName.call(target, localName, lowercase);
- } else {
- // When we get a ShadowRoot the logical tree is going to be disconnected
- // so we do a manual tree traversal
- return findElements(this, index, result, p, localName, lowercase);
- }
-
- return filterNodeList(list, index, result);
- }
-
- function getElementsByTagNameNSFiltered (p, index, result, ns, localName) {
- var target = this.impl;
- var list;
- var root = getTreeScope(this).root;
- if (root instanceof scope.wrappers.ShadowRoot) {
- // We are in the shadow tree and the logical tree is
- // going to be disconnected so we do a manual tree traversal
- return findElements(this, index, result, p, ns, localName);
- } else if (target instanceof OriginalElement) {
- list = originalElementGetElementsByTagNameNS.call(target, ns, localName);
- } else if (target instanceof OriginalDocument) {
- list = originalDocumentGetElementsByTagNameNS.call(target, ns, localName);
- } else {
- // When we get a ShadowRoot the logical tree is going to be disconnected
- // so we do a manual tree traversal
- return findElements(this, index, result, p, ns, localName);
- }
-
- return filterNodeList(list, index, result);
- }
-
var GetElementsByInterface = {
getElementsByTagName: function(localName) {
var result = new HTMLCollection();
- var match = localName === '*' ? matchesEveryThing : matchesTagName;
+ if (localName === '*')
+ return findElements(this, result, matchesEveryThing);
- result.length = getElementsByTagNameFiltered.call(this,
- match,
- 0,
- result,
+ return findElements(this, result,
+ matchesTagName,
localName,
localName.toLowerCase());
-
- return result;
},
getElementsByClassName: function(className) {
@@ -4833,22 +4669,19 @@ window.ShadowDOMPolyfill = {};
getElementsByTagNameNS: function(ns, localName) {
var result = new HTMLCollection();
- var match = null;
- if (ns === '*') {
- match = localName === '*' ? matchesEveryThing : matchesLocalNameOnly;
- } else {
- match = localName === '*' ? matchesNameSpace : matchesLocalNameNS;
+ if (ns === '') {
+ ns = null;
+ } else if (ns === '*') {
+ if (localName === '*')
+ return findElements(this, result, matchesEveryThing);
+ return findElements(this, result, matchesLocalName, localName);
}
-
- result.length = getElementsByTagNameNSFiltered.call(this,
- match,
- 0,
- result,
- ns || null,
- localName);
- return result;
+ if (localName === '*')
+ return findElements(this, result, matchesNameSpace, ns);
+
+ return findElements(this, result, matchesLocalNameNS, ns, localName);
}
};
@@ -5452,17 +5285,6 @@ window.ShadowDOMPolyfill = {};
var df = frag(contextElement, text);
contextElement.insertBefore(df, refNode);
- },
-
- get hidden() {
- return this.hasAttribute('hidden');
- },
- set hidden(v) {
- if (v) {
- this.setAttribute('hidden', '');
- } else {
- this.removeAttribute('hidden');
- }
}
});
@@ -7715,7 +7537,6 @@ window.ShadowDOMPolyfill = {};
var OriginalWindow = window.Window;
var originalGetComputedStyle = window.getComputedStyle;
- var originalGetDefaultComputedStyle = window.getDefaultComputedStyle;
var originalGetSelection = window.getSelection;
function Window(impl) {
@@ -7727,14 +7548,6 @@ window.ShadowDOMPolyfill = {};
return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);
};
- // Mozilla proprietary extension.
- if (originalGetDefaultComputedStyle) {
- OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseudo) {
- return wrap(this || window).getDefaultComputedStyle(
- unwrapIfNeeded(el), pseudo);
- };
- }
-
OriginalWindow.prototype.getSelection = function() {
return wrap(this || window).getSelection();
};
@@ -7770,15 +7583,6 @@ window.ShadowDOMPolyfill = {};
}
});
- // Mozilla proprietary extension.
- if (originalGetDefaultComputedStyle) {
- Window.prototype.getDefaultComputedStyle = function(el, pseudo) {
- renderAllPending();
- return originalGetDefaultComputedStyle.call(unwrap(this),
- unwrapIfNeeded(el),pseudo);
- };
- }
-
registerWrapper(OriginalWindow, Window, window);
scope.wrappers.Window = Window;
@@ -7827,10 +7631,7 @@ window.ShadowDOMPolyfill = {};
var OriginalFormData = window.FormData;
function FormData(formElement) {
- if (formElement instanceof OriginalFormData)
- this.impl = formElement;
- else
- this.impl = new OriginalFormData(formElement && unwrap(formElement));
+ this.impl = new OriginalFormData(formElement && unwrap(formElement));
}
registerWrapper(OriginalFormData, FormData, new OriginalFormData());
@@ -8594,13 +8395,13 @@ var selectorRe = /([^{]*)({[\s\S]*?})/gim,
cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
// TODO(sorvell): remove either content or comment
cssCommentNextSelectorRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
- cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim,
+ cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\:[\s]*['|"]([^'"]*)['|"][^}]*}([^{]*?){/gim,
// TODO(sorvell): remove either content or comment
cssCommentRuleRe = /\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
- cssContentRuleRe = /(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,
+ cssContentRuleRe = /(polyfill-rule)[^}]*(content\:[\s]*['|"]([^'"]*)['|"][^;]*;)[^}]*}/gim,
// TODO(sorvell): remove either content or comment
cssCommentUnscopedRuleRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
- cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,
+ cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\:[\s]*['|"]([^'"]*)['|"][^;]*;)[^}]*}/gim,
cssPseudoRe = /::(x-[^\s{,(]*)/gim,
cssPartRe = /::part\(([^)]*)\)/gim,
// note: :host pre-processed to -shadowcsshost.
@@ -8796,7 +8597,7 @@ if (window.ShadowDOMPolyfill) {
if (elt.parentNode === head) {
head.replaceChild(style, elt);
} else {
- this.addElementToDocument(style);
+ head.appendChild(style);
}
}
style.__importParsed = true;
@@ -8871,6 +8672,572 @@ scope.ShadowCSS = ShadowCSS;
})(window.Platform);
}
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+(function(scope) {
+ 'use strict';
+
+ // feature detect for URL constructor
+ var hasWorkingUrl = false;
+ if (!scope.forceJURL) {
+ try {
+ var u = new URL('b', 'http://a');
+ hasWorkingUrl = u.href === 'http://a/b';
+ } catch(e) {}
+ }
+
+ if (hasWorkingUrl)
+ return;
+
+ var relative = Object.create(null);
+ relative['ftp'] = 21;
+ relative['file'] = 0;
+ relative['gopher'] = 70;
+ relative['http'] = 80;
+ relative['https'] = 443;
+ relative['ws'] = 80;
+ relative['wss'] = 443;
+
+ var relativePathDotMapping = Object.create(null);
+ relativePathDotMapping['%2e'] = '.';
+ relativePathDotMapping['.%2e'] = '..';
+ relativePathDotMapping['%2e.'] = '..';
+ relativePathDotMapping['%2e%2e'] = '..';
+
+ function isRelativeScheme(scheme) {
+ return relative[scheme] !== undefined;
+ }
+
+ function invalid() {
+ clear.call(this);
+ this._isInvalid = true;
+ }
+
+ function IDNAToASCII(h) {
+ if ('' == h) {
+ invalid.call(this)
+ }
+ // XXX
+ return h.toLowerCase()
+ }
+
+ function percentEscape(c) {
+ var unicode = c.charCodeAt(0);
+ if (unicode > 0x20 &&
+ unicode < 0x7F &&
+ // " # < > ? `
+ [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) == -1
+ ) {
+ return c;
+ }
+ return encodeURIComponent(c);
+ }
+
+ function percentEscapeQuery(c) {
+ // XXX This actually needs to encode c using encoding and then
+ // convert the bytes one-by-one.
+
+ var unicode = c.charCodeAt(0);
+ if (unicode > 0x20 &&
+ unicode < 0x7F &&
+ // " # < > ` (do not escape '?')
+ [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1
+ ) {
+ return c;
+ }
+ return encodeURIComponent(c);
+ }
+
+ var EOF = undefined,
+ ALPHA = /[a-zA-Z]/,
+ ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/;
+
+ function parse(input, stateOverride, base) {
+ function err(message) {
+ errors.push(message)
+ }
+
+ var state = stateOverride || 'scheme start',
+ cursor = 0,
+ buffer = '',
+ seenAt = false,
+ seenBracket = false,
+ errors = [];
+
+ loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) {
+ var c = input[cursor];
+ switch (state) {
+ case 'scheme start':
+ if (c && ALPHA.test(c)) {
+ buffer += c.toLowerCase(); // ASCII-safe
+ state = 'scheme';
+ } else if (!stateOverride) {
+ buffer = '';
+ state = 'no scheme';
+ continue;
+ } else {
+ err('Invalid scheme.');
+ break loop;
+ }
+ break;
+
+ case 'scheme':
+ if (c && ALPHANUMERIC.test(c)) {
+ buffer += c.toLowerCase(); // ASCII-safe
+ } else if (':' == c) {
+ this._scheme = buffer;
+ buffer = '';
+ if (stateOverride) {
+ break loop;
+ }
+ if (isRelativeScheme(this._scheme)) {
+ this._isRelative = true;
+ }
+ if ('file' == this._scheme) {
+ state = 'relative';
+ } else if (this._isRelative && base && base._scheme == this._scheme) {
+ state = 'relative or authority';
+ } else if (this._isRelative) {
+ state = 'authority first slash';
+ } else {
+ state = 'scheme data';
+ }
+ } else if (!stateOverride) {
+ buffer = '';
+ cursor = 0;
+ state = 'no scheme';
+ continue;
+ } else if (EOF == c) {
+ break loop;
+ } else {
+ err('Code point not allowed in scheme: ' + c)
+ break loop;
+ }
+ break;
+
+ case 'scheme data':
+ if ('?' == c) {
+ query = '?';
+ state = 'query';
+ } else if ('#' == c) {
+ this._fragment = '#';
+ state = 'fragment';
+ } else {
+ // XXX error handling
+ if (EOF != c && '\t' != c && '\n' != c && '\r' != c) {
+ this._schemeData += percentEscape(c);
+ }
+ }
+ break;
+
+ case 'no scheme':
+ if (!base || !(isRelativeScheme(base._scheme))) {
+ err('Missing scheme.');
+ invalid.call(this);
+ } else {
+ state = 'relative';
+ continue;
+ }
+ break;
+
+ case 'relative or authority':
+ if ('/' == c && '/' == input[cursor+1]) {
+ state = 'authority ignore slashes';
+ } else {
+ err('Expected /, got: ' + c);
+ state = 'relative';
+ continue
+ }
+ break;
+
+ case 'relative':
+ this._isRelative = true;
+ if ('file' != this._scheme)
+ this._scheme = base._scheme;
+ if (EOF == c) {
+ this._host = base._host;
+ this._port = base._port;
+ this._path = base._path.slice();
+ this._query = base._query;
+ break loop;
+ } else if ('/' == c || '\\' == c) {
+ if ('\\' == c)
+ err('\\ is an invalid code point.');
+ state = 'relative slash';
+ } else if ('?' == c) {
+ this._host = base._host;
+ this._port = base._port;
+ this._path = base._path.slice();
+ this._query = '?';
+ state = 'query';
+ } else if ('#' == c) {
+ this._host = base._host;
+ this._port = base._port;
+ this._path = base._path.slice();
+ this._query = base._query;
+ this._fragment = '#';
+ state = 'fragment';
+ } else {
+ var nextC = input[cursor+1]
+ var nextNextC = input[cursor+2]
+ if (
+ 'file' != this._scheme || !ALPHA.test(c) ||
+ (nextC != ':' && nextC != '|') ||
+ (EOF != nextNextC && '/' != nextNextC && '\\' != nextNextC && '?' != nextNextC && '#' != nextNextC)) {
+ this._host = base._host;
+ this._port = base._port;
+ this._path = base._path.slice();
+ this._path.pop();
+ }
+ state = 'relative path';
+ continue;
+ }
+ break;
+
+ case 'relative slash':
+ if ('/' == c || '\\' == c) {
+ if ('\\' == c) {
+ err('\\ is an invalid code point.');
+ }
+ if ('file' == this._scheme) {
+ state = 'file host';
+ } else {
+ state = 'authority ignore slashes';
+ }
+ } else {
+ if ('file' != this._scheme) {
+ this._host = base._host;
+ this._port = base._port;
+ }
+ state = 'relative path';
+ continue;
+ }
+ break;
+
+ case 'authority first slash':
+ if ('/' == c) {
+ state = 'authority second slash';
+ } else {
+ err("Expected '/', got: " + c);
+ state = 'authority ignore slashes';
+ continue;
+ }
+ break;
+
+ case 'authority second slash':
+ state = 'authority ignore slashes';
+ if ('/' != c) {
+ err("Expected '/', got: " + c);
+ continue;
+ }
+ break;
+
+ case 'authority ignore slashes':
+ if ('/' != c && '\\' != c) {
+ state = 'authority';
+ continue;
+ } else {
+ err('Expected authority, got: ' + c);
+ }
+ break;
+
+ case 'authority':
+ if ('@' == c) {
+ if (seenAt) {
+ err('@ already seen.');
+ buffer += '%40';
+ }
+ seenAt = true;
+ for (var i = 0; i < buffer.length; i++) {
+ var cp = buffer[i];
+ if ('\t' == cp || '\n' == cp || '\r' == cp) {
+ err('Invalid whitespace in authority.');
+ continue;
+ }
+ // XXX check URL code points
+ if (':' == cp && null === this._password) {
+ this._password = '';
+ continue;
+ }
+ var tempC = percentEscape(cp);
+ (null !== this._password) ? this._password += tempC : this._username += tempC;
+ }
+ buffer = '';
+ } else if (EOF == c || '/' == c || '\\' == c || '?' == c || '#' == c) {
+ cursor -= buffer.length;
+ buffer = '';
+ state = 'host';
+ continue;
+ } else {
+ buffer += c;
+ }
+ break;
+
+ case 'file host':
+ if (EOF == c || '/' == c || '\\' == c || '?' == c || '#' == c) {
+ if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {
+ state = 'relative path';
+ } else if (buffer.length == 0) {
+ state = 'relative path start';
+ } else {
+ this._host = IDNAToASCII.call(this, buffer);
+ buffer = '';
+ state = 'relative path start';
+ }
+ continue;
+ } else if ('\t' == c || '\n' == c || '\r' == c) {
+ err('Invalid whitespace in file host.');
+ } else {
+ buffer += c;
+ }
+ break;
+
+ case 'host':
+ case 'hostname':
+ if (':' == c && !seenBracket) {
+ // XXX host parsing
+ this._host = IDNAToASCII.call(this, buffer);
+ buffer = '';
+ state = 'port';
+ if ('hostname' == stateOverride) {
+ break loop;
+ }
+ } else if (EOF == c || '/' == c || '\\' == c || '?' == c || '#' == c) {
+ this._host = IDNAToASCII.call(this, buffer);
+ buffer = '';
+ state = 'relative path start';
+ if (stateOverride) {
+ break loop;
+ }
+ continue;
+ } else if ('\t' != c && '\n' != c && '\r' != c) {
+ if ('[' == c) {
+ seenBracket = true;
+ } else if (']' == c) {
+ seenBracket = false;
+ }
+ buffer += c;
+ } else {
+ err('Invalid code point in host/hostname: ' + c);
+ }
+ break;
+
+ case 'port':
+ if (/[0-9]/.test(c)) {
+ buffer += c;
+ } else if (EOF == c || '/' == c || '\\' == c || '?' == c || '#' == c || stateOverride) {
+ if ('' != buffer) {
+ var temp = parseInt(buffer, 10);
+ if (temp != relative[this._scheme]) {
+ this._port = temp + '';
+ }
+ buffer = '';
+ }
+ if (stateOverride) {
+ break loop;
+ }
+ state = 'relative path start';
+ continue;
+ } else if ('\t' == c || '\n' == c || '\r' == c) {
+ err('Invalid code point in port: ' + c);
+ } else {
+ invalid.call(this);
+ }
+ break;
+
+ case 'relative path start':
+ if ('\\' == c)
+ err("'\\' not allowed in path.");
+ state = 'relative path';
+ if ('/' != c && '\\' != c) {
+ continue;
+ }
+ break;
+
+ case 'relative path':
+ if (EOF == c || '/' == c || '\\' == c || (!stateOverride && ('?' == c || '#' == c))) {
+ if ('\\' == c) {
+ err('\\ not allowed in relative path.');
+ }
+ var tmp;
+ if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {
+ buffer = tmp;
+ }
+ if ('..' == buffer) {
+ this._path.pop();
+ if ('/' != c && '\\' != c) {
+ this._path.push('');
+ }
+ } else if ('.' == buffer && '/' != c && '\\' != c) {
+ this._path.push('');
+ } else if ('.' != buffer) {
+ if ('file' == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {
+ buffer = buffer[0] + ':';
+ }
+ this._path.push(buffer);
+ }
+ buffer = '';
+ if ('?' == c) {
+ this._query = '?';
+ state = 'query';
+ } else if ('#' == c) {
+ this._fragment = '#';
+ state = 'fragment';
+ }
+ } else if ('\t' != c && '\n' != c && '\r' != c) {
+ buffer += percentEscape(c);
+ }
+ break;
+
+ case 'query':
+ if (!stateOverride && '#' == c) {
+ this._fragment = '#';
+ state = 'fragment';
+ } else if (EOF != c && '\t' != c && '\n' != c && '\r' != c) {
+ this._query += percentEscapeQuery(c);
+ }
+ break;
+
+ case 'fragment':
+ if (EOF != c && '\t' != c && '\n' != c && '\r' != c) {
+ this._fragment += c;
+ }
+ break;
+ }
+
+ cursor++;
+ }
+ }
+
+ function clear() {
+ this._scheme = '';
+ this._schemeData = '';
+ this._username = '';
+ this._password = null;
+ this._host = '';
+ this._port = '';
+ this._path = [];
+ this._query = '';
+ this._fragment = '';
+ this._isInvalid = false;
+ this._isRelative = false;
+ }
+
+ // Does not process domain names or IP addresses.
+ // Does not handle encoding for the query parameter.
+ function jURL(url, base /* , encoding */) {
+ if (base !== undefined && !(base instanceof jURL))
+ base = new jURL(String(base));
+
+ this._url = url;
+ clear.call(this);
+
+ var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, '');
+ // encoding = encoding || 'utf-8'
+
+ parse.call(this, input, null, base);
+ }
+
+ jURL.prototype = {
+ get href() {
+ if (this._isInvalid)
+ return this._url;
+
+ var authority = '';
+ if ('' != this._username || null != this._password) {
+ authority = this._username +
+ (null != this._password ? ':' + this._password : '') + '@';
+ }
+
+ return this.protocol +
+ (this._isRelative ? '//' + authority + this.host : '') +
+ this.pathname + this._query + this._fragment;
+ },
+ set href(href) {
+ clear.call(this);
+ parse.call(this, href);
+ },
+
+ get protocol() {
+ return this._scheme + ':';
+ },
+ set protocol(protocol) {
+ if (this._isInvalid)
+ return;
+ parse.call(this, protocol + ':', 'scheme start');
+ },
+
+ get host() {
+ return this._isInvalid ? '' : this._port ?
+ this._host + ':' + this._port : this._host;
+ },
+ set host(host) {
+ if (this._isInvalid || !this._isRelative)
+ return;
+ parse.call(this, host, 'host');
+ },
+
+ get hostname() {
+ return this._host;
+ },
+ set hostname(hostname) {
+ if (this._isInvalid || !this._isRelative)
+ return;
+ parse.call(this, hostname, 'hostname');
+ },
+
+ get port() {
+ return this._port;
+ },
+ set port(port) {
+ if (this._isInvalid || !this._isRelative)
+ return;
+ parse.call(this, port, 'port');
+ },
+
+ get pathname() {
+ return this._isInvalid ? '' : this._isRelative ?
+ '/' + this._path.join('/') : this._schemeData;
+ },
+ set pathname(pathname) {
+ if (this._isInvalid || !this._isRelative)
+ return;
+ this._path = [];
+ parse.call(this, pathname, 'relative path start');
+ },
+
+ get search() {
+ return this._isInvalid || !this._query || '?' == this._query ?
+ '' : this._query;
+ },
+ set search(search) {
+ if (this._isInvalid || !this._isRelative)
+ return;
+ this._query = '?';
+ if ('?' == search[0])
+ search = search.slice(1);
+ parse.call(this, search, 'query');
+ },
+
+ get hash() {
+ return this._isInvalid || !this._fragment || '#' == this._fragment ?
+ '' : this._fragment;
+ },
+ set hash(hash) {
+ if (this._isInvalid)
+ return;
+ this._fragment = '#';
+ if ('#' == hash[0])
+ hash = hash.slice(1);
+ parse.call(this, hash, 'fragment');
+ }
+ };
+
+ scope.URL = jURL;
+
+})(window);
+
/*
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
@@ -10424,23 +10791,7 @@ var importParser = {
},
parseGeneric: function(elt) {
this.trackElement(elt);
- this.addElementToDocument(elt);
- },
- rootImportForElement: function(elt) {
- var n = elt;
- while (n.ownerDocument.__importLink) {
- n = n.ownerDocument.__importLink;
- }
- return n;
- },
- addElementToDocument: function(elt) {
- var port = this.rootImportForElement(elt.__importElement || elt);
- var l = port.__insertedElements = port.__insertedElements || 0;
- var refNode = port.nextElementSibling;
- for (var i=0; i < l; i++) {
- refNode = refNode && refNode.nextElementSibling;
- }
- port.parentNode.insertBefore(elt, refNode);
+ document.head.appendChild(elt);
},
// tracks when a loadable element has loaded
trackElement: function(elt, callback) {
@@ -10497,7 +10848,7 @@ var importParser = {
script.parentNode.removeChild(script);
scope.currentScript = null;
});
- this.addElementToDocument(script);
+ document.head.appendChild(script);
},
// determine the next element in the tree which should be parsed
nextToParse: function() {
@@ -11043,22 +11394,16 @@ if (!HTMLImports.useNative) {
})();
/*
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
*/
window.CustomElements = window.CustomElements || {flags:{}};
-/*
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
- */
+ /*
+Copyright 2013 The Polymer Authors. All rights reserved.
+Use of this source code is governed by a BSD-style
+license that can be found in the LICENSE file.
+*/
(function(scope){
@@ -11400,16 +11745,13 @@ scope.takeRecords = takeRecords;
})(window.CustomElements);
/*
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
*/
/**
- * Implements `document.registerElement`
+ * Implements `document.register`
* @module CustomElements
*/
@@ -11641,6 +11983,8 @@ if (useNative) {
if (definition.is) {
element.setAttribute('is', definition.is);
}
+ // remove 'unresolved' attr, which is a standin for :unresolved.
+ element.removeAttribute('unresolved');
// make 'element' implement definition.prototype
implement(element, definition);
// flag as upgraded
@@ -11878,12 +12222,9 @@ scope.useNative = useNative;
})(window.CustomElements);
/*
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
*/
(function(scope) {
@@ -11945,12 +12286,9 @@ scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;
})(window.CustomElements);
/*
- * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
- * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
- * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
- * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
- * Code distributed by Google as part of the polymer project is also
- * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
*/
(function(scope){
@@ -11989,13 +12327,11 @@ function bootstrap() {
// CustomEvent shim for IE
if (typeof window.CustomEvent !== 'function') {
- window.CustomEvent = function(inType, params) {
- params = params || {};
- var e = document.createEvent('CustomEvent');
- e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);
+ window.CustomEvent = function(inType) {
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent(inType, true, true);
return e;
};
- window.CustomEvent.prototype = window.Event.prototype;
}
// When loading at readyState complete time (or via flag), boot custom elements
@@ -13160,7 +13496,7 @@ scope.styleResolver = styleResolver;
this.refContent_ = undefined;
this.iterator_.valueChanged();
- this.iterator_.updateIteratedValue(this.iterator_.getUpdatedValue());
+ this.iterator_.updateIteratedValue();
},
clear: function() {
@@ -13564,22 +13900,19 @@ scope.styleResolver = styleResolver;
var deps = this.deps = {};
var template = this.templateElement_;
- var ifValue = true;
if (directives.if) {
deps.hasIf = true;
deps.ifOneTime = directives.if.onlyOneTime;
deps.ifValue = processBinding(IF, directives.if, template, model);
- ifValue = deps.ifValue;
-
// oneTime if & predicate is false. nothing else to do.
- if (deps.ifOneTime && !ifValue) {
- this.valueChanged();
+ if (deps.ifOneTime && !deps.ifValue) {
+ this.updateIteratedValue();
return;
}
if (!deps.ifOneTime)
- ifValue = ifValue.open(this.updateIfValue, this);
+ deps.ifValue.open(this.updateIteratedValue, this);
}
if (directives.repeat) {
@@ -13592,40 +13925,13 @@ scope.styleResolver = styleResolver;
deps.value = processBinding(BIND, directives.bind, template, model);
}
- var value = deps.value;
if (!deps.oneTime)
- value = value.open(this.updateIteratedValue, this);
-
- if (!ifValue) {
- this.valueChanged();
- return;
- }
-
- this.updateValue(value);
- },
+ deps.value.open(this.updateIteratedValue, this);
- /**
- * Gets the updated value of the bind/repeat. This can potentially call
- * user code (if a bindingDelegate is set up) so we try to avoid it if we
- * already have the value in hand (from Observer.open).
- */
- getUpdatedValue: function() {
- var value = this.deps.value;
- if (!this.deps.oneTime)
- value = value.discardChanges();
- return value;
+ this.updateIteratedValue();
},
- updateIfValue: function(ifValue) {
- if (!ifValue) {
- this.valueChanged();
- return;
- }
-
- this.updateValue(this.getUpdatedValue());
- },
-
- updateIteratedValue: function(value) {
+ updateIteratedValue: function() {
if (this.deps.hasIf) {
var ifValue = this.deps.ifValue;
if (!this.deps.ifOneTime)
@@ -13636,10 +13942,9 @@ scope.styleResolver = styleResolver;
}
}
- this.updateValue(value);
- },
-
- updateValue: function(value) {
+ var value = this.deps.value;
+ if (!this.deps.oneTime)
+ value = value.discardChanges();
if (!this.deps.repeat)
value = [value];
var observe = this.deps.repeat &&
« no previous file with comments | « pkg/web_components/lib/platform.js ('k') | pkg/web_components/lib/platform.concat.js.map » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698