File: /var/www/tana/frontend/node_modules/css-tree/lib/utils/names.js
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty;
var keywords = Object.create(null);
var properties = Object.create(null);
var HYPHENMINUS = 45; // '-'.charCodeAt()
function isCustomProperty(str, offset) {
return str.length - offset >= 2 &&
str.charCodeAt(offset) === HYPHENMINUS &&
str.charCodeAt(offset + 1) === HYPHENMINUS;
}
function getVendorPrefix(str, offset) {
if (str.charCodeAt(offset) === HYPHENMINUS) {
// vendor should contain at least one letter
var secondDashIndex = str.indexOf('-', offset + 2);
if (secondDashIndex !== -1) {
return str.substring(offset, secondDashIndex + 1);
}
}
return '';
}
function getKeywordInfo(keyword) {
if (hasOwnProperty.call(keywords, keyword)) {
return keywords[keyword];
}
var name = keyword.toLowerCase();
if (hasOwnProperty.call(keywords, name)) {
return keywords[keyword] = keywords[name];
}
var vendor = !isCustomProperty(name, 0) ? getVendorPrefix(name, 0) : '';
return keywords[keyword] = Object.freeze({
vendor: vendor,
prefix: vendor,
name: name.substr(vendor.length)
});
}
function getPropertyInfo(property) {
if (hasOwnProperty.call(properties, property)) {
return properties[property];
}
var name = property;
var hack = property[0];
if (hack === '/') {
hack = property[1] === '/' ? '//' : '/';
} else if (hack !== '_' &&
hack !== '*' &&
hack !== '$' &&
hack !== '#' &&
hack !== '+') {
hack = '';
}
var custom = isCustomProperty(name, hack.length);
if (!custom) {
name = name.toLowerCase();
if (hasOwnProperty.call(properties, name)) {
return properties[property] = properties[name];
}
}
var vendor = !custom ? getVendorPrefix(name, hack.length) : '';
return properties[property] = Object.freeze({
hack: hack,
vendor: vendor,
prefix: hack + vendor,
name: name.substr(hack.length + vendor.length),
custom: custom
});
}
module.exports = {
keyword: getKeywordInfo,
property: getPropertyInfo
};