/* * 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 */ (function(scope) { // imports var log = window.WebComponents ? WebComponents.flags.log : {}; var api = scope.api.instance.styles; var STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE; var hasShadowDOMPolyfill = window.ShadowDOMPolyfill; // magic words var STYLE_SELECTOR = 'style'; var STYLE_LOADABLE_MATCH = '@import'; var SHEET_SELECTOR = 'link[rel=stylesheet]'; var STYLE_GLOBAL_SCOPE = 'global'; var SCOPE_ATTR = 'polymer-scope'; var styles = { // returns true if resources are loading loadStyles: function(callback) { var template = this.fetchTemplate(); var content = template && this.templateContent(); if (content) { this.convertSheetsToStyles(content); var styles = this.findLoadableStyles(content); if (styles.length) { var templateUrl = template.ownerDocument.baseURI; return Polymer.styleResolver.loadStyles(styles, templateUrl, callback); } } if (callback) { callback(); } }, convertSheetsToStyles: function(root) { var s$ = root.querySelectorAll(SHEET_SELECTOR); for (var i=0, l=s$.length, s, c; (i elements into the * element's template. * @param elementElement The element to style. */ installSheets: function() { this.cacheSheets(); this.cacheStyles(); this.installLocalSheets(); this.installGlobalStyles(); }, /** * Remove all sheets from element and store for later use. */ cacheSheets: function() { this.sheets = this.findNodes(SHEET_SELECTOR); this.sheets.forEach(function(s) { if (s.parentNode) { s.parentNode.removeChild(s); } }); }, cacheStyles: function() { this.styles = this.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']'); this.styles.forEach(function(s) { if (s.parentNode) { s.parentNode.removeChild(s); } }); }, /** * Takes external stylesheets loaded in an element and moves * their content into a