aboutsummaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/utils/names.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/utils/names.js')
-rw-r--r--node_modules/csso/lib/utils/names.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/node_modules/csso/lib/utils/names.js b/node_modules/csso/lib/utils/names.js
new file mode 100644
index 00000000..27277711
--- /dev/null
+++ b/node_modules/csso/lib/utils/names.js
@@ -0,0 +1,73 @@
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var knownKeywords = Object.create(null);
+var knownProperties = Object.create(null);
+
+function getVendorPrefix(string) {
+ if (string[0] === '-') {
+ // skip 2 chars to avoid wrong match with variables names
+ var secondDashIndex = string.indexOf('-', 2);
+
+ if (secondDashIndex !== -1) {
+ return string.substr(0, secondDashIndex + 1);
+ }
+ }
+
+ return '';
+}
+
+function getKeywordInfo(keyword) {
+ if (hasOwnProperty.call(knownKeywords, keyword)) {
+ return knownKeywords[keyword];
+ }
+
+ var lowerCaseKeyword = keyword.toLowerCase();
+ var vendor = getVendorPrefix(lowerCaseKeyword);
+ var name = lowerCaseKeyword;
+
+ if (vendor) {
+ name = name.substr(vendor.length);
+ }
+
+ return knownKeywords[keyword] = Object.freeze({
+ vendor: vendor,
+ prefix: vendor,
+ name: name
+ });
+}
+
+function getPropertyInfo(property) {
+ if (hasOwnProperty.call(knownProperties, property)) {
+ return knownProperties[property];
+ }
+
+ var lowerCaseProperty = property.toLowerCase();
+ var hack = lowerCaseProperty[0];
+
+ if (hack === '*' || hack === '_' || hack === '$') {
+ lowerCaseProperty = lowerCaseProperty.substr(1);
+ } else if (hack === '/' && property[1] === '/') {
+ hack = '//';
+ lowerCaseProperty = lowerCaseProperty.substr(2);
+ } else {
+ hack = '';
+ }
+
+ var vendor = getVendorPrefix(lowerCaseProperty);
+ var name = lowerCaseProperty;
+
+ if (vendor) {
+ name = name.substr(vendor.length);
+ }
+
+ return knownProperties[property] = Object.freeze({
+ hack: hack,
+ vendor: vendor,
+ prefix: hack + vendor,
+ name: name
+ });
+}
+
+module.exports = {
+ keyword: getKeywordInfo,
+ property: getPropertyInfo
+};