aboutsummaryrefslogtreecommitdiffstats
path: root/src/elements/Style.js
blob: fc1a27eed34c839c6a73045b90873c410b901e85 (plain)
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
import { nodeOrNew, register } from '../utils/adopter.js'
import { registerMethods } from '../utils/methods.js'
import { unCamelCase } from '../utils/utils.js'
import Element from './Element.js'

function cssRule(selector, rule) {
  if (!selector) return ''
  if (!rule) return selector

  let ret = selector + '{'

  for (const i in rule) {
    ret += unCamelCase(i) + ':' + rule[i] + ';'
  }

  ret += '}'

  return ret
}

export default class Style extends Element {
  constructor(node, attrs = node) {
    super(nodeOrNew('style', node), attrs)
  }

  addText(w = '') {
    this.node.textContent += w
    return this
  }

  font(name, src, params = {}) {
    return this.rule('@font-face', {
      fontFamily: name,
      src: src,
      ...params
    })
  }

  rule(selector, obj) {
    return this.addText(cssRule(selector, obj))
  }
}

registerMethods('Dom', {
  style(selector, obj) {
    return this.put(new Style()).rule(selector, obj)
  },
  fontface(name, src, params) {
    return this.put(new Style()).font(name, src, params)
  }
})

register(Style, 'Style')