mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-02 10:49:31 +08:00
55 lines
1.5 KiB
Text
Executable file
55 lines
1.5 KiB
Text
Executable file
'use strict';
|
|
const BasePlugin = require('../plugin');
|
|
const { IE_5_5, IE_6, IE_7 } = require('../dictionary/browsers');
|
|
const { PROPERTY } = require('../dictionary/identifiers');
|
|
const { ATRULE, DECL } = require('../dictionary/postcss');
|
|
|
|
const hacks = '!_$_&_*_)_=_%_+_,_._/_`_]_#_~_?_:_|'.split('_');
|
|
|
|
module.exports = class LeadingStar extends BasePlugin {
|
|
/** @param {import('postcss').Result=} result */
|
|
constructor(result) {
|
|
super([IE_5_5, IE_6, IE_7], [ATRULE, DECL], result);
|
|
}
|
|
|
|
/**
|
|
* @param {import('postcss').Declaration | import('postcss').AtRule} node
|
|
* @return {void}
|
|
*/
|
|
detect(node) {
|
|
if (node.type === DECL) {
|
|
// some values are not picked up by before, so ensure they are
|
|
// at the beginning of the value
|
|
hacks.forEach((hack) => {
|
|
if (!node.prop.indexOf(hack)) {
|
|
this.push(node, {
|
|
identifier: PROPERTY,
|
|
hack: node.prop,
|
|
});
|
|
}
|
|
});
|
|
const { before } = node.raws;
|
|
if (!before) {
|
|
return;
|
|
}
|
|
hacks.forEach((hack) => {
|
|
if (before.includes(hack)) {
|
|
this.push(node, {
|
|
identifier: PROPERTY,
|
|
hack: `${before.trim()}${node.prop}`,
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
// test for the @property: value; hack
|
|
const { name } = node;
|
|
const len = name.length - 1;
|
|
if (name.lastIndexOf(':') === len) {
|
|
this.push(node, {
|
|
identifier: PROPERTY,
|
|
hack: `@${name.substr(0, len)}`,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|