Blame view

node_modules/renderkid/lib/Layout.js 2.34 KB
aaac7fed   liuqimichale   add
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  // Generated by CoffeeScript 1.9.3
  var Block, Layout, SpecialString, fn, i, len, object, prop, ref, terminalWidth;
  
  Block = require('./layout/Block');
  
  object = require('utila').object;
  
  SpecialString = require('./layout/SpecialString');
  
  terminalWidth = require('./tools').getCols();
  
  module.exports = Layout = (function() {
    var self;
  
    self = Layout;
  
    Layout._rootBlockDefaultConfig = {
      linePrependor: {
        options: {
          amount: 0
        }
      },
      lineAppendor: {
        options: {
          amount: 0
        }
      },
      blockPrependor: {
        options: {
          amount: 0
        }
      },
      blockAppendor: {
        options: {
          amount: 0
        }
      }
    };
  
    Layout._defaultConfig = {
      terminalWidth: terminalWidth
    };
  
    function Layout(config, rootBlockConfig) {
      var rootConfig;
      if (config == null) {
        config = {};
      }
      if (rootBlockConfig == null) {
        rootBlockConfig = {};
      }
      this._written = [];
      this._activeBlock = null;
      this._config = object.append(self._defaultConfig, config);
      rootConfig = object.append(self._rootBlockDefaultConfig, rootBlockConfig);
      this._root = new Block(this, null, rootConfig, '__root');
      this._root._open();
    }
  
    Layout.prototype.getRootBlock = function() {
      return this._root;
    };
  
    Layout.prototype._append = function(text) {
      return this._written.push(text);
    };
  
    Layout.prototype._appendLine = function(text) {
      var s;
      this._append(text);
      s = SpecialString(text);
      if (s.length < this._config.terminalWidth) {
        this._append('<none>\n</none>');
      }
      return this;
    };
  
    Layout.prototype.get = function() {
      this._ensureClosed();
      if (this._written[this._written.length - 1] === '<none>\n</none>') {
        this._written.pop();
      }
      return this._written.join("");
    };
  
    Layout.prototype._ensureClosed = function() {
      if (this._activeBlock !== this._root) {
        throw Error("Not all the blocks have been closed. Please call block.close() on all open blocks.");
      }
      if (this._root.isOpen()) {
        this._root.close();
      }
    };
  
    return Layout;
  
  })();
  
  ref = ['openBlock', 'write'];
  fn = function() {
    var method;
    method = prop;
    return Layout.prototype[method] = function() {
      return this._root[method].apply(this._root, arguments);
    };
  };
  for (i = 0, len = ref.length; i < len; i++) {
    prop = ref[i];
    fn();
  }