aboutsummaryrefslogtreecommitdiff
path: root/catapult/third_party/polymer/components/shadycss/src/style-cache.js
diff options
context:
space:
mode:
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.js52
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;
+ }
+ }
+ }
+}