Skip to content

Commit 3652338

Browse files
committed
removeRule() method created
1 parent dafe43d commit 3652338

File tree

6 files changed

+116
-1
lines changed

6 files changed

+116
-1
lines changed

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,28 @@
1616
- [CSS AST reference](#css-ast-reference)
1717
- [Methods list](#methods-list)
1818
- [Stylesheet Level - root](#stylesheet-level-root)
19+
- findAllRules
20+
- findAllRulesByType
21+
- findAllRulesByType
22+
- findAllRulesByType
23+
- findAllRulesBySelectors
24+
- addRule
25+
- removeRule
26+
- findAllSelectors
27+
- findAllImport
28+
- findAllDeclarations
29+
- findAllDeclarationsBySelectors
30+
- findAllDeclarationsByProperty
31+
- findAllDeclarationsByValue
1932
- [Rule Level](#rule-level)
33+
- findDeclarations
34+
- findDeclarationsBySelectors
35+
- findDeclarationsByProperty
36+
- findDeclarationsByValue
2037
- [Declarations Level](#declarations-level)
38+
- addDeclaration
39+
- removeDeclaration
40+
- getParam
2141
- [Development](#development)
2242
- [Code Style](#code-style)
2343
- [Tests](#tests)
@@ -97,6 +117,11 @@ stylesheet.findAllRulesBySelectors('.foo', (rule, ruleIndex) => {
97117
});
98118
```
99119

120+
*Add a single rule:*
121+
```js
122+
stylesheet.addRule(newRule, 0); //Rule position
123+
```
124+
100125
*Remove a single rule:*
101126
```js
102127
stylesheet.removeRule(0); //Rule position

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "css-ast-iterations",
33
"description": "Provide a very simple API for complex iterations on the CSS abstract syntax tree (AST).",
4-
"version": "0.3.0",
4+
"version": "0.4.0",
55
"author": {
66
"name": "afonsopacifer",
77
"email": "[email protected]"

src/core/addRule.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const addRule = (astRoot) => {
2+
3+
const isObject = typeof astRoot === 'object';
4+
5+
if(isObject) {
6+
7+
astRoot.addRule = function (newRule, index) {
8+
const rules = astRoot.stylesheet.rules;
9+
rules.splice(index, 0, newRule);
10+
};
11+
12+
}
13+
14+
};
15+
16+
module.exports = addRule;

src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
const findAllRules = require('./core/findAllRules');
55
const findAllRulesByType = require('./core/findAllRulesByType');
66
const findAllRulesBySelectors = require('./core/findAllRulesBySelectors');
7+
const addRule = require('./core/addRule');
78
const removeRule = require('./core/removeRule');
89
const findAllSelectors = require('./core/findAllSelectors');
910
const findAllImport = require('./core/findAllImport');
@@ -29,6 +30,7 @@ const addIterations = (astRoot) => {
2930
findAllRules(astRoot);
3031
findAllRulesByType(astRoot);
3132
findAllRulesBySelectors(astRoot);
33+
addRule(astRoot);
3234
removeRule(astRoot);
3335
findAllSelectors(astRoot);
3436
findAllImport(astRoot);

test/addRule.test.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/* eslint max-len: ["error", 120, 2] */
2+
3+
const assert = require('assert');
4+
const css = require('css');
5+
const addRule = require('../src/core/addRule');
6+
7+
describe('addRule()', () => {
8+
9+
// --------------------------
10+
11+
it('Should return a CSS with one rule added.', () => {
12+
13+
const ast = css.parse(`
14+
.a {
15+
width: 10px;
16+
}
17+
18+
.b {
19+
color: #000;
20+
}
21+
`);
22+
23+
// Add removeDeclaration method on Object
24+
addRule(ast);
25+
26+
const newRule = css.parse(`
27+
.foo {
28+
height: 40px;
29+
}
30+
`);
31+
32+
ast.addRule(newRule, 0);
33+
34+
const result = css.stringify(ast);
35+
const expect = '.foo {\n height: 40px;\n}\n\n.a {\n width: 10px;\n}\n\n.b {\n color: #000;\n}';
36+
assert.equal(result, expect);
37+
38+
});
39+
40+
// --------------------------
41+
42+
it('Should return a CSS with one rule added on position 1.', () => {
43+
44+
const ast = css.parse(`
45+
.a {
46+
width: 10px;
47+
}
48+
49+
.b {
50+
color: #000;
51+
}
52+
`);
53+
54+
// Add removeDeclaration method on Object
55+
addRule(ast);
56+
57+
const newRule = css.parse(`
58+
.foo {
59+
height: 40px;
60+
}
61+
`);
62+
63+
ast.addRule(newRule, 1);
64+
65+
const result = css.stringify(ast);
66+
const expect = '.a {\n width: 10px;\n}\n\n.foo {\n height: 40px;\n}\n\n.b {\n color: #000;\n}';
67+
assert.equal(result, expect);
68+
69+
});
70+
71+
});

test/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
require('./findAllRules.test.js');
33
require('./findAllRulesByType.test.js');
44
require('./findAllRulesBySelectors.test.js');
5+
require('./addRule.test.js');
56
require('./removeRule.test.js');
67
require('./findAllSelectors.test.js');
78
require('./findAllImport.test.js');

0 commit comments

Comments
 (0)