diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2023-11-27 12:48:14 -0500 | 
|---|---|---|
| committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2023-11-27 12:48:14 -0500 | 
| commit | 4da4827bcbcdd1ef163f635d9b29416ff272b0bb (patch) | |
| tree | a8a0f1a8befdb78a554e1be91f2c6059ca3ad5f9 /ext/js/dom/sandbox/css-style-applier.js | |
| parent | fd6bba8a2a869eaf2b2c1fa49001f933fce3c618 (diff) | |
Add JSDoc type annotations to project (rebased)
Diffstat (limited to 'ext/js/dom/sandbox/css-style-applier.js')
| -rw-r--r-- | ext/js/dom/sandbox/css-style-applier.js | 43 | 
1 files changed, 12 insertions, 31 deletions
| diff --git a/ext/js/dom/sandbox/css-style-applier.js b/ext/js/dom/sandbox/css-style-applier.js index 4f570bb7..332ca4f2 100644 --- a/ext/js/dom/sandbox/css-style-applier.js +++ b/ext/js/dom/sandbox/css-style-applier.js @@ -22,40 +22,20 @@   */  export class CssStyleApplier {      /** -     * A CSS rule. -     * @typedef {object} CssRule -     * @property {string} selectors A CSS selector string representing one or more selectors. -     * @property {CssDeclaration[]} styles A list of CSS property and value pairs. -     */ - -    /** -     * A single CSS property declaration. -     * @typedef {object} CssDeclaration -     * @property {string} property A CSS property's name, using kebab-case. -     * @property {string} value The property's value. -     */ - -    /* eslint-disable jsdoc/check-line-alignment */ -    /**       * Creates a new instance of the class. -     * @param {string} styleDataUrl The local URL to the JSON file containing the style rules. -     *   The style rules should be of the format: -     *   ``` -     *   [ -     *     { -     *       selectors: [(selector:string)...], -     *       styles: [ -     *         [(property:string), (value:string)]... -     *       ] -     *     }... -     *   ] -     *   ``` +     * @param {string} styleDataUrl The local URL to the JSON file continaing the style rules. +     *   The style rules should follow the format of {@link CssStyleApplierRawStyleData}.       */      constructor(styleDataUrl) { +        /** @type {string} */          this._styleDataUrl = styleDataUrl; +        /** @type {import('css-style-applier').CssRule[]} */          this._styleData = []; +        /** @type {Map<string, import('css-style-applier').CssRule[]>} */          this._cachedRules = new Map(); +        /** @type {RegExp} */          this._patternHtmlWhitespace = /[\t\r\n\f ]+/g; +        /** @type {RegExp} */          this._patternClassNameCharacter = /[0-9a-zA-Z-_]/;      }      /* eslint-enable jsdoc/check-line-alignment */ @@ -64,7 +44,8 @@ export class CssStyleApplier {       * Loads the data file for use.       */      async prepare() { -        let rawData; +        /** @type {import('css-style-applier').RawStyleData} */ +        let rawData = [];          try {              rawData = await this._fetchJsonAsset(this._styleDataUrl);          } catch (e) { @@ -94,7 +75,7 @@ export class CssStyleApplier {          const elementStyles = [];          for (const element of elements) {              const className = element.getAttribute('class'); -            if (className.length === 0) { continue; } +            if (className === null || className.length === 0) { continue; }              let cssTextNew = '';              for (const {selectors, styles} of this._getCandidateCssRulesForClass(className)) {                  if (!element.matches(selectors)) { continue; } @@ -139,7 +120,7 @@ export class CssStyleApplier {      /**       * Gets an array of candidate CSS rules which might match a specific class.       * @param {string} className A whitespace-separated list of classes. -     * @returns {CssRule[]} An array of candidate CSS rules. +     * @returns {import('css-style-applier').CssRule[]} An array of candidate CSS rules.       */      _getCandidateCssRulesForClass(className) {          let rules = this._cachedRules.get(className); @@ -159,7 +140,7 @@ export class CssStyleApplier {      /**       * Converts an array of CSS rules to a CSS string. -     * @param {CssRule[]} styles An array of CSS rules. +     * @param {import('css-style-applier').CssDeclaration[]} styles An array of CSS rules.       * @returns {string} The CSS string.       */      _getCssText(styles) { |