UNPKG

1.26 kBJavaScriptView Raw
1import {
2 objectToRules
3} from './utils.js'
4
5const document = window.document
6const styleSheet = document && document.createElement('style')
7styleSheet && document.head.appendChild(styleSheet)
8const sheet = styleSheet && styleSheet.sheet
9
10let debug = false
11let classes = Object.create(null, {})
12let rules = []
13let count = 0
14
15export const classPrefix = 'b' + ('000' + ((Math.random() * 46656) | 0).toString(36)).slice(-3) +
16 ('000' + ((Math.random() * 46656) | 0).toString(36)).slice(-3)
17
18export function setDebug(d) {
19 debug = d
20}
21
22export function getSheet() {
23 const content = rules.join('')
24 rules = []
25 classes = Object.create(null, {})
26 count = 0
27 return content
28}
29
30export 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
42export 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}