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 9481eee0be7c3190376eb21a565fd7d11cdd3646..68b593d8b5c85d4d4a269cfe1ef246007fbe0745 100644 |
--- a/pkg/web_components/lib/platform.concat.js |
+++ b/pkg/web_components/lib/platform.concat.js |
@@ -407,8 +407,9 @@ if (typeof WeakMap === 'undefined') { |
if (privateToken !== constructorIsPrivate) |
throw Error('Use Path.get to retrieve path objects'); |
- if (parts.length) |
- Array.prototype.push.apply(this, parts.slice()); |
+ for (var i = 0; i < parts.length; i++) { |
+ this.push(String(parts[i])); |
+ } |
if (hasEval && this.length) { |
this.getValueFrom = this.compiledGetValueFromFn(); |
@@ -894,7 +895,7 @@ if (typeof WeakMap === 'undefined') { |
var runningMicrotaskCheckpoint = false; |
- var hasDebugForceFullDelivery = hasObserve && (function() { |
+ var hasDebugForceFullDelivery = hasObserve && hasEval && (function() { |
try { |
eval('%RunMicrotasks()'); |
return true; |
@@ -5454,7 +5455,6 @@ window.ShadowDOMPolyfill = {}; |
var registerWrapper = scope.registerWrapper; |
var wrapHTMLCollection = scope.wrapHTMLCollection; |
var unwrap = scope.unwrap; |
- var wrap = scope.wrap; |
var OriginalHTMLFormElement = window.HTMLFormElement; |
@@ -6692,6 +6692,9 @@ window.ShadowDOMPolyfill = {}; |
invalidate: function() { |
if (!this.dirty) { |
this.dirty = true; |
+ var parentRenderer = this.parentRenderer; |
+ if (parentRenderer) |
+ parentRenderer.invalidate(); |
pendingDirtyRenderers.push(this); |
if (renderTimer) |
return; |
@@ -7605,9 +7608,35 @@ window.ShadowDOMPolyfill = {}; |
var OriginalDataTransferSetDragImage = |
OriginalDataTransfer.prototype.setDragImage; |
- OriginalDataTransfer.prototype.setDragImage = function(image, x, y) { |
- OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y); |
- }; |
+ if (OriginalDataTransferSetDragImage) { |
+ OriginalDataTransfer.prototype.setDragImage = function(image, x, y) { |
+ OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y); |
+ }; |
+ } |
+ |
+})(window.ShadowDOMPolyfill); |
+ |
+/** |
+ * Copyright 2014 The Polymer Authors. All rights reserved. |
+ * Use of this source code is goverened by a BSD-style |
+ * license that can be found in the LICENSE file. |
+ */ |
+ |
+(function(scope) { |
+ 'use strict'; |
+ |
+ var registerWrapper = scope.registerWrapper; |
+ var unwrap = scope.unwrap; |
+ |
+ var OriginalFormData = window.FormData; |
+ |
+ function FormData(formElement) { |
+ this.impl = new OriginalFormData(formElement && unwrap(formElement)); |
+ } |
+ |
+ registerWrapper(OriginalFormData, FormData, new OriginalFormData()); |
+ |
+ scope.wrappers.FormData = FormData; |
})(window.ShadowDOMPolyfill); |
@@ -8113,7 +8142,7 @@ var ShadowCSS = { |
cssText = this.insertPolyfillHostInCssText(cssText); |
cssText = this.convertColonHost(cssText); |
cssText = this.convertColonHostContext(cssText); |
- cssText = this.convertCombinators(cssText); |
+ cssText = this.convertShadowDOMSelectors(cssText); |
if (scopeSelector) { |
var self = this, cssText; |
withCssRules(cssText, function(rules) { |
@@ -8206,11 +8235,12 @@ var ShadowCSS = { |
return host + part.replace(polyfillHost, '') + suffix; |
}, |
/* |
- * Convert ^ and ^^ combinators by replacing with space. |
+ * Convert combinators like ::shadow and pseudo-elements like ::content |
+ * by replacing with space. |
*/ |
- convertCombinators: function(cssText) { |
- for (var i=0; i < combinatorsRe.length; i++) { |
- cssText = cssText.replace(combinatorsRe[i], ' '); |
+ convertShadowDOMSelectors: function(cssText) { |
+ for (var i=0; i < shadowDOMSelectorsRe.length; i++) { |
+ cssText = cssText.replace(shadowDOMSelectorsRe[i], ' '); |
} |
return cssText; |
}, |
@@ -8365,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]*'([^']*)'[^}]*}([^{]*?){/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]*'([^']*)'[^;]*;)[^}]*}/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]*'([^']*)'[^;]*;)[^}]*}/gim, |
+ cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\:[\s]*['|"]([^'"]*)['|"][^;]*;)[^}]*}/gim, |
cssPseudoRe = /::(x-[^\s{,(]*)/gim, |
cssPartRe = /::part\(([^)]*)\)/gim, |
// note: :host pre-processed to -shadowcsshost. |
@@ -8390,13 +8420,14 @@ var selectorRe = /([^{]*)({[\s\S]*?})/gim, |
polyfillHostNoCombinator = polyfillHost + '-no-combinator', |
polyfillHostRe = new RegExp(polyfillHost, 'gim'), |
polyfillHostContextRe = new RegExp(polyfillHostContext, 'gim'), |
- combinatorsRe = [ |
+ shadowDOMSelectorsRe = [ |
/\^\^/g, |
/\^/g, |
/\/shadow\//g, |
/\/shadow-deep\//g, |
/::shadow/g, |
- /\/deep\//g |
+ /\/deep\//g, |
+ /::content/g |
]; |
function stylesToCssText(styles, preserveComments) { |
@@ -10858,15 +10889,16 @@ function nodeIsImport(elt) { |
} |
function generateScriptDataUrl(script) { |
- var scriptContent = generateScriptContent(script), b64; |
+ var scriptContent = generateScriptContent(script); |
+ var b64 = 'data:text/javascript'; |
+ // base64 may be smaller, but does not handle unicode characters |
+ // attempt base64 first, fall back to escaped text |
try { |
- b64 = btoa(scriptContent); |
+ b64 += (';base64,' + btoa(scriptContent)); |
} catch(e) { |
- b64 = btoa(unescape(encodeURIComponent(scriptContent))); |
- console.warn('Script contained non-latin characters that were forced ' + |
- 'to latin. Some characters may be wrong.', script); |
+ b64 += (';charset=utf-8,' + encodeURIComponent(scriptContent)); |
} |
- return 'data:text/javascript;base64,' + b64; |
+ return b64; |
} |
function generateScriptContent(script) { |
@@ -11224,10 +11256,13 @@ if (useNative) { |
scope.hasNative = hasNative; |
scope.useNative = useNative; |
scope.importer = importer; |
-scope.whenImportsReady = whenImportsReady; |
scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE; |
scope.isImportLoaded = isImportLoaded; |
scope.importLoader = importLoader; |
+scope.whenReady = whenImportsReady; |
+ |
+// deprecated |
+scope.whenImportsReady = whenImportsReady; |
})(window.HTMLImports); |