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

Unified Diff: appengine/config_service/ui/bower_components/shadycss/src/apply-shim-utils.js

Issue 2923973003: Added base template for config ui. (Closed)
Patch Set: Created 3 years, 6 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
Index: appengine/config_service/ui/bower_components/shadycss/src/apply-shim-utils.js
diff --git a/appengine/config_service/ui/bower_components/shadycss/src/apply-shim-utils.js b/appengine/config_service/ui/bower_components/shadycss/src/apply-shim-utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..df245f797e4961fd0bcc43c69ea3dc55270592a2
--- /dev/null
+++ b/appengine/config_service/ui/bower_components/shadycss/src/apply-shim-utils.js
@@ -0,0 +1,149 @@
+/**
+@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';
+import templateMap from './template-map.js'
+import {StyleNode} from './css-parse.js' // eslint-disable-line no-unused-vars
+
+/*
+ * Utilities for handling invalidating apply-shim mixins for a given template.
+ *
+ * The invalidation strategy involves keeping track of the "current" version of a template's mixins, and updating that count when a mixin is invalidated.
+ * The template
+ */
+
+/** @const {string} */
+const CURRENT_VERSION = '_applyShimCurrentVersion';
+
+/** @const {string} */
+const NEXT_VERSION = '_applyShimNextVersion';
+
+/** @const {string} */
+const VALIDATING_VERSION = '_applyShimValidatingVersion';
+
+/**
+ * @const {Promise<void>}
+ */
+const promise = Promise.resolve();
+
+/**
+ * @param {string} elementName
+ */
+export function invalidate(elementName){
+ let template = templateMap[elementName];
+ if (template) {
+ invalidateTemplate(template);
+ }
+}
+
+/**
+ * This function can be called multiple times to mark a template invalid
+ * and signal that the style inside must be regenerated.
+ *
+ * Use `startValidatingTemplate` to begin an asynchronous validation cycle.
+ * During that cycle, call `templateIsValidating` to see if the template must
+ * be revalidated
+ * @param {HTMLTemplateElement} template
+ */
+export function invalidateTemplate(template) {
+ // default the current version to 0
+ template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;
+ // ensure the "validating for" flag exists
+ template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;
+ // increment the next version
+ template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;
+}
+
+/**
+ * @param {string} elementName
+ * @return {boolean}
+ */
+export function isValid(elementName) {
+ let template = templateMap[elementName];
+ if (template) {
+ return templateIsValid(template);
+ }
+ return true;
+}
+
+/**
+ * @param {HTMLTemplateElement} template
+ * @return {boolean}
+ */
+export function templateIsValid(template) {
+ return template[CURRENT_VERSION] === template[NEXT_VERSION];
+}
+
+/**
+ * @param {string} elementName
+ * @return {boolean}
+ */
+export function isValidating(elementName) {
+ let template = templateMap[elementName];
+ if (template) {
+ return templateIsValidating(template);
+ }
+ return false;
+}
+
+/**
+ * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.
+ * If false, the template must be validated.
+ * @param {HTMLTemplateElement} template
+ * @return {boolean}
+ */
+export function templateIsValidating(template) {
+ return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];
+}
+
+/**
+ * the template is marked as `validating` for one microtask so that all instances
+ * found in the tree crawl of `applyStyle` will update themselves,
+ * but the template will only be updated once.
+ * @param {string} elementName
+*/
+export function startValidating(elementName) {
+ let template = templateMap[elementName];
+ startValidatingTemplate(template);
+}
+
+/**
+ * Begin an asynchronous invalidation cycle.
+ * This should be called after every validation of a template
+ *
+ * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`
+ * @param {HTMLTemplateElement} template
+ */
+export function startValidatingTemplate(template) {
+ // remember that the current "next version" is the reason for this validation cycle
+ template[VALIDATING_VERSION] = template[NEXT_VERSION];
+ // however, there only needs to be one async task to clear the counters
+ if (!template._validating) {
+ template._validating = true;
+ promise.then(function() {
+ // sync the current version to let future invalidations cause a refresh cycle
+ template[CURRENT_VERSION] = template[NEXT_VERSION];
+ template._validating = false;
+ });
+ }
+}
+
+/**
+ * @return {boolean}
+ */
+export function elementsAreInvalid() {
+ for (let elementName in templateMap) {
+ let template = templateMap[elementName];
+ if (!templateIsValid(template)) {
+ return true;
+ }
+ }
+ return false;
+}

Powered by Google App Engine
This is Rietveld 408576698