aboutsummaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/compressor/compress/Attribute.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/compressor/compress/Attribute.js')
-rw-r--r--node_modules/csso/lib/compressor/compress/Attribute.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/node_modules/csso/lib/compressor/compress/Attribute.js b/node_modules/csso/lib/compressor/compress/Attribute.js
new file mode 100644
index 00000000..99cafdce
--- /dev/null
+++ b/node_modules/csso/lib/compressor/compress/Attribute.js
@@ -0,0 +1,33 @@
+// Can unquote attribute detection
+// Adopted implementation of Mathias Bynens
+// https://github.com/mathiasbynens/mothereff.in/blob/master/unquoted-attributes/eff.js
+var escapesRx = /\\([0-9A-Fa-f]{1,6})[ \t\n\f\r]?|\\./g;
+var blockUnquoteRx = /^(-?\d|--)|[\u0000-\u002c\u002e\u002f\u003A-\u0040\u005B-\u005E\u0060\u007B-\u009f]/;
+
+function canUnquote(value) {
+ if (value === '' || value === '-') {
+ return;
+ }
+
+ // Escapes are valid, so replace them with a valid non-empty string
+ value = value.replace(escapesRx, 'a');
+
+ return !blockUnquoteRx.test(value);
+}
+
+module.exports = function(node) {
+ var attrValue = node.value;
+
+ if (!attrValue || attrValue.type !== 'String') {
+ return;
+ }
+
+ var unquotedValue = attrValue.value.replace(/^(.)(.*)\1$/, '$2');
+ if (canUnquote(unquotedValue)) {
+ node.value = {
+ type: 'Identifier',
+ info: attrValue.info,
+ name: unquotedValue
+ };
+ }
+};