aboutsummaryrefslogtreecommitdiff
path: root/node_modules/renderkid/lib/renderKid/Styles.js
blob: 52651aa01a562c36dc76795823b3b426d1f92d53 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Generated by CoffeeScript 1.9.3
var MixedDeclarationSet, StyleSheet, Styles, terminalWidth;

StyleSheet = require('./styles/StyleSheet');

MixedDeclarationSet = require('./styles/rule/MixedDeclarationSet');

terminalWidth = require('../tools').getCols();

module.exports = Styles = (function() {
  var self;

  self = Styles;

  Styles.defaultRules = {
    '*': {
      display: 'inline'
    },
    'body': {
      background: 'none',
      color: 'white',
      display: 'block',
      width: terminalWidth + ' !important'
    }
  };

  function Styles() {
    this._defaultStyles = new StyleSheet;
    this._userStyles = new StyleSheet;
    this._setDefaultStyles();
  }

  Styles.prototype._setDefaultStyles = function() {
    this._defaultStyles.setRule(self.defaultRules);
  };

  Styles.prototype.setRule = function(selector, rules) {
    this._userStyles.setRule.apply(this._userStyles, arguments);
    return this;
  };

  Styles.prototype.getStyleFor = function(el) {
    var styles;
    styles = el.styles;
    if (styles == null) {
      el.styles = styles = this._getComputedStyleFor(el);
    }
    return styles;
  };

  Styles.prototype._getRawStyleFor = function(el) {
    var def, user;
    def = this._defaultStyles.getRulesFor(el);
    user = this._userStyles.getRulesFor(el);
    return MixedDeclarationSet.mix(def, user).toObject();
  };

  Styles.prototype._getComputedStyleFor = function(el) {
    var decs, parent, prop, ref, val;
    decs = {};
    parent = el.parent;
    ref = this._getRawStyleFor(el);
    for (prop in ref) {
      val = ref[prop];
      if (val !== 'inherit') {
        decs[prop] = val;
      } else {
        throw Error("Inherited styles are not supported yet.");
      }
    }
    return decs;
  };

  return Styles;

})();