1 | import {
|
2 | objectToRules
|
3 | } from './utils.js'
|
4 |
|
5 | const document = window.document
|
6 | const styleSheet = document && document.createElement('style')
|
7 | styleSheet && document.head.appendChild(styleSheet)
|
8 | const sheet = styleSheet && styleSheet.sheet
|
9 |
|
10 | let debug = false
|
11 | let classes = Object.create(null, {})
|
12 | let rules = []
|
13 | let count = 0
|
14 |
|
15 | export const classPrefix = 'b' + ('000' + ((Math.random() * 46656) | 0).toString(36)).slice(-3) +
|
16 | ('000' + ((Math.random() * 46656) | 0).toString(36)).slice(-3)
|
17 |
|
18 | export function setDebug(d) {
|
19 | debug = d
|
20 | }
|
21 |
|
22 | export function getSheet() {
|
23 | const content = rules.join('')
|
24 | rules = []
|
25 | classes = Object.create(null, {})
|
26 | count = 0
|
27 | return content
|
28 | }
|
29 |
|
30 | export function insert(rule, index) {
|
31 | rules.push(rule)
|
32 |
|
33 | if (debug)
|
34 | return styleSheet.textContent = rules.join('\n')
|
35 |
|
36 | sheet && sheet.insertRule(rule, arguments.length > 1
|
37 | ? index
|
38 | : sheet.cssRules.length
|
39 | )
|
40 | }
|
41 |
|
42 | export function createClass(style) {
|
43 | const json = JSON.stringify(style)
|
44 |
|
45 | if (json in classes)
|
46 | return classes[json]
|
47 |
|
48 | const className = classPrefix + (++count)
|
49 | , rules = objectToRules(style, '.' + className)
|
50 |
|
51 | for (let i = 0; i < rules.length; i++)
|
52 | insert(rules[i])
|
53 |
|
54 | classes[json] = className
|
55 |
|
56 | return className
|
57 | }
|