diff options
Diffstat (limited to 'vanilla/node_modules/@acemir/cssom/lib/CSSPageRule.js')
| -rw-r--r-- | vanilla/node_modules/@acemir/cssom/lib/CSSPageRule.js | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/vanilla/node_modules/@acemir/cssom/lib/CSSPageRule.js b/vanilla/node_modules/@acemir/cssom/lib/CSSPageRule.js new file mode 100644 index 0000000..1d75326 --- /dev/null +++ b/vanilla/node_modules/@acemir/cssom/lib/CSSPageRule.js @@ -0,0 +1,125 @@ +//.CommonJS +var CSSOM = { + CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration, + CSSRule: require("./CSSRule").CSSRule, + CSSRuleList: require("./CSSRuleList").CSSRuleList, + CSSGroupingRule: require("./CSSGroupingRule").CSSGroupingRule, +}; +var regexPatterns = require("./regexPatterns").regexPatterns; +// Use cssstyle if available +try { + CSSOM.CSSStyleDeclaration = require("cssstyle").CSSStyleDeclaration; +} catch (e) { + // ignore +} +///CommonJS + + +/** + * @constructor + * @see https://drafts.csswg.org/cssom/#the-csspagerule-interface + */ +CSSOM.CSSPageRule = function CSSPageRule() { + CSSOM.CSSGroupingRule.call(this); + this.__style = new CSSOM.CSSStyleDeclaration(); + this.__style.parentRule = this; +}; + +CSSOM.CSSPageRule.prototype = Object.create(CSSOM.CSSGroupingRule.prototype); +CSSOM.CSSPageRule.prototype.constructor = CSSOM.CSSPageRule; + +Object.setPrototypeOf(CSSOM.CSSPageRule, CSSOM.CSSGroupingRule); + +Object.defineProperty(CSSOM.CSSPageRule.prototype, "type", { + value: 6, + writable: false +}); + +Object.defineProperty(CSSOM.CSSPageRule.prototype, "selectorText", { + get: function() { + return this.__selectorText; + }, + set: function(value) { + if (typeof value === "string") { + var trimmedValue = value.trim(); + + // Empty selector is valid for @page + if (trimmedValue === '') { + this.__selectorText = ''; + return; + } + + var atPageRuleSelectorRegExp = regexPatterns.atPageRuleSelectorRegExp; + var cssCustomIdentifierRegExp = regexPatterns.cssCustomIdentifierRegExp; + var match = trimmedValue.match(atPageRuleSelectorRegExp); + if (match) { + var pageName = match[1] || ''; + var pseudoPages = match[2] || ''; + + // Validate page name if present + if (pageName) { + // Page name can be an identifier or a string + if (!cssCustomIdentifierRegExp.test(pageName)) { + return; + } + } + + // Validate pseudo-pages if present + if (pseudoPages) { + var pseudos = pseudoPages.split(':').filter(function(p) { return p; }); + var validPseudos = ['left', 'right', 'first', 'blank']; + var allValid = true; + for (var j = 0; j < pseudos.length; j++) { + if (validPseudos.indexOf(pseudos[j].toLowerCase()) === -1) { + allValid = false; + break; + } + } + + if (!allValid) { + return; // Invalid pseudo-page, do nothing + } + } + + this.__selectorText = pageName + pseudoPages.toLowerCase(); + } + } + } +}); + +Object.defineProperty(CSSOM.CSSPageRule.prototype, "style", { + get: function() { + return this.__style; + }, + set: function(value) { + if (typeof value === "string") { + this.__style.cssText = value; + } else { + this.__style = value; + } + } +}); + +Object.defineProperty(CSSOM.CSSPageRule.prototype, "cssText", { + get: function() { + var values = ""; + if (this.cssRules.length) { + var valuesArr = [" {"]; + this.style.cssText && valuesArr.push(this.style.cssText); + valuesArr.push(this.cssRules.reduce(function(acc, rule){ + if (rule.cssText !== "") { + acc.push(rule.cssText); + } + return acc; + }, []).join("\n ")); + values = valuesArr.join("\n ") + "\n}"; + } else { + values = " {" + (this.style.cssText ? " " + this.style.cssText : "") + " }"; + } + return "@page" + (this.selectorText ? " " + this.selectorText : "") + values; + } +}); + +//.CommonJS +exports.CSSPageRule = CSSOM.CSSPageRule; +///CommonJS |
