diff options
Diffstat (limited to 'catapult/third_party/polymer/components/shadycss/src/style-cache.js')
-rw-r--r-- | catapult/third_party/polymer/components/shadycss/src/style-cache.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/shadycss/src/style-cache.js b/catapult/third_party/polymer/components/shadycss/src/style-cache.js new file mode 100644 index 00000000..0006a0bc --- /dev/null +++ b/catapult/third_party/polymer/components/shadycss/src/style-cache.js @@ -0,0 +1,52 @@ +/** +@license +Copyright (c) 2017 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 +*/ +'use strict'; + +export default class StyleCache { + constructor(typeMax = 100) { + // map element name -> [{properties, styleElement, scopeSelector}] + this.cache = {}; + /** @type {number} */ + this.typeMax = typeMax; + } + + _validate(cacheEntry, properties, ownPropertyNames) { + for (let idx = 0; idx < ownPropertyNames.length; idx++) { + let pn = ownPropertyNames[idx]; + if (cacheEntry.properties[pn] !== properties[pn]) { + return false; + } + } + return true; + } + + store(tagname, properties, styleElement, scopeSelector) { + let list = this.cache[tagname] || []; + list.push({properties, styleElement, scopeSelector}); + if (list.length > this.typeMax) { + list.shift(); + } + this.cache[tagname] = list; + } + + fetch(tagname, properties, ownPropertyNames) { + let list = this.cache[tagname]; + if (!list) { + return; + } + // reverse list for most-recent lookups + for (let idx = list.length - 1; idx >= 0; idx--) { + let entry = list[idx]; + if (this._validate(entry, properties, ownPropertyNames)) { + return entry; + } + } + } +} |