Skip to content

Commit 04965d2

Browse files
committed
feat: basic snake addon implementation
1 parent 5ddd5bb commit 04965d2

2 files changed

Lines changed: 76 additions & 1 deletion

File tree

addon/atoms.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
var atoms = {
3+
var atoms = exports.atoms = {
44
d: 'display',
55

66
mar: 'margin',

addon/snake.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
'use strict';
2+
3+
var atoms = require('./atoms').atoms;
4+
5+
var createSnake = function (renderer, rules) {
6+
rules = rules || {};
7+
8+
var defaultRules = renderer.assign({}, atoms, {
9+
bgWhite: function () {
10+
defaultRules.bg.call(this, '#fff');
11+
},
12+
13+
bgBlack: function () {
14+
defaultRules.bg.call(this, '#000');
15+
},
16+
});
17+
18+
rules = renderer.assign({}, defaultRules, rules);
19+
20+
var snake = {
21+
start: function () {
22+
var instance = Object.create(snake);
23+
24+
instance.obj = {};
25+
instance.toString = function () {
26+
return renderer.cache(instance.obj);
27+
};
28+
29+
return instance;
30+
}
31+
};
32+
33+
var onRule = function (name) {
34+
var rule = rules[name];
35+
36+
if (typeof rule === 'function') {
37+
if (!rule.length) {
38+
Object.defineProperty(snake, name, {
39+
get: function () {
40+
rule.call(this.obj);
41+
return this;
42+
}
43+
});
44+
} else {
45+
snake[name] = function () {
46+
rule.apply(this.obj, arguments);
47+
return this;
48+
};
49+
}
50+
} else {
51+
snake[name] = function (value) {
52+
this.obj['' + rule] = value;
53+
return this;
54+
};
55+
}
56+
};
57+
58+
for (var name in rules) onRule(name);
59+
60+
return snake;
61+
};
62+
63+
exports.addon = function (renderer) {
64+
if (process.env.NODE_ENV !== 'production') {
65+
require('./__dev__/warnOnMissingDependencies')('sheet', renderer, ['cache']);
66+
}
67+
68+
var snake = createSnake(renderer);
69+
70+
Object.defineProperty(renderer, 's', {
71+
get: function () {
72+
return snake.start();
73+
}
74+
});
75+
};

0 commit comments

Comments
 (0)