-
Notifications
You must be signed in to change notification settings - Fork 40
/
stack-sprite.js
56 lines (49 loc) · 1.29 KB
/
stack-sprite.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const merge = require('merge-options');
const Sprite = require('./sprite');
const { generateSpriteTree } = require('./utils');
class StackSprite extends Sprite {
/**
* @typedef {SpriteConfig} StackSpriteConfig
* @property {string} usageClassName
* @property {string} styles
* @return {StackSpriteConfig}
*/
static get defaultConfig() {
return merge(super.defaultConfig, {
usageClassName: 'sprite-symbol-usage',
get styles() {
return [
`.${this.usageClassName} {display: none;}`,
`.${this.usageClassName}:target {display: inline;}`
].join('\n');
}
});
}
static get TYPE() {
return 'stack';
}
/**
* @return {Promise<PostSvgTree>}
*/
generate() {
const { symbols } = this;
/** @type StackSpriteConfig */
const config = this.config;
return Promise.all(symbols.map(s => s.generate()))
.then(symbolsTrees => {
symbolsTrees.forEach(({ root }) => {
root.tag = 'svg';
root.attrs.class = config.usageClassName;
});
return generateSpriteTree({
attrs: config.attrs,
defs: [{
tag: 'style',
content: config.styles
}],
content: symbolsTrees
});
});
}
}
module.exports = StackSprite;