aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/@acemir/cssom/lib/CSSNamespaceRule.js
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/@acemir/cssom/lib/CSSNamespaceRule.js')
-rw-r--r--vanilla/node_modules/@acemir/cssom/lib/CSSNamespaceRule.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/vanilla/node_modules/@acemir/cssom/lib/CSSNamespaceRule.js b/vanilla/node_modules/@acemir/cssom/lib/CSSNamespaceRule.js
new file mode 100644
index 0000000..b48ef89
--- /dev/null
+++ b/vanilla/node_modules/@acemir/cssom/lib/CSSNamespaceRule.js
@@ -0,0 +1,103 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule,
+ CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see https://drafts.csswg.org/cssom/#the-cssnamespacerule-interface
+ */
+CSSOM.CSSNamespaceRule = function CSSNamespaceRule() {
+ CSSOM.CSSRule.call(this);
+ this.__prefix = "";
+ this.__namespaceURI = "";
+};
+
+CSSOM.CSSNamespaceRule.prototype = Object.create(CSSOM.CSSRule.prototype);
+CSSOM.CSSNamespaceRule.prototype.constructor = CSSOM.CSSNamespaceRule;
+
+Object.setPrototypeOf(CSSOM.CSSNamespaceRule, CSSOM.CSSRule);
+
+Object.defineProperty(CSSOM.CSSNamespaceRule.prototype, "type", {
+ value: 10,
+ writable: false
+});
+
+Object.defineProperty(CSSOM.CSSNamespaceRule.prototype, "cssText", {
+ get: function() {
+ return "@namespace" + (this.prefix && " " + this.prefix) + " url(\"" + this.namespaceURI + "\");";
+ }
+});
+
+Object.defineProperty(CSSOM.CSSNamespaceRule.prototype, "prefix", {
+ get: function() {
+ return this.__prefix;
+ }
+});
+
+Object.defineProperty(CSSOM.CSSNamespaceRule.prototype, "namespaceURI", {
+ get: function() {
+ return this.__namespaceURI;
+ }
+});
+
+
+/**
+ * NON-STANDARD
+ * Rule text parser.
+ * @param {string} cssText
+ */
+Object.defineProperty(CSSOM.CSSNamespaceRule.prototype, "parse", {
+ value: function(cssText) {
+ var newPrefix = "";
+ var newNamespaceURI = "";
+
+ // Remove @namespace and trim
+ var text = cssText.trim();
+ if (text.indexOf('@namespace') === 0) {
+ text = text.slice('@namespace'.length).trim();
+ }
+
+ // Remove trailing semicolon if present
+ if (text.charAt(text.length - 1) === ';') {
+ text = text.slice(0, -1).trim();
+ }
+
+ // Regex to match valid namespace syntax:
+ // 1. [optional prefix] url("...") or [optional prefix] url('...') or [optional prefix] url() or [optional prefix] url(unquoted)
+ // 2. [optional prefix] "..." or [optional prefix] '...'
+ // The prefix must be a valid CSS identifier (letters, digits, hyphens, underscores, starting with letter or underscore)
+ var re = /^(?:([a-zA-Z_][a-zA-Z0-9_-]*)\s+)?(?:url\(\s*(?:(['"])(.*?)\2\s*|([^)]*?))\s*\)|(['"])(.*?)\5)$/;
+ var match = text.match(re);
+
+ if (match) {
+ // If prefix is present
+ if (match[1]) {
+ newPrefix = match[1];
+ }
+ // If url(...) form with quotes
+ if (typeof match[3] !== "undefined") {
+ newNamespaceURI = match[3];
+ }
+ // If url(...) form without quotes
+ else if (typeof match[4] !== "undefined") {
+ newNamespaceURI = match[4].trim();
+ }
+ // If quoted string form
+ else if (typeof match[6] !== "undefined") {
+ newNamespaceURI = match[6];
+ }
+
+ this.__prefix = newPrefix;
+ this.__namespaceURI = newNamespaceURI;
+ } else {
+ throw new DOMException("Invalid @namespace rule", "InvalidStateError");
+ }
+ }
+});
+//.CommonJS
+exports.CSSNamespaceRule = CSSOM.CSSNamespaceRule;
+///CommonJS