Blame view

node_modules/renderkid/lib/tools.js 2.54 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
  // Generated by CoffeeScript 1.9.3
  var htmlparser, object, objectToDom, self;
  
  htmlparser = require('htmlparser2');
  
  object = require('utila').object;
  
  objectToDom = require('dom-converter').objectToDom;
  
  module.exports = self = {
    repeatString: function(str, times) {
      var i, j, output, ref;
      output = '';
      for (i = j = 0, ref = times; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
        output += str;
      }
      return output;
    },
    toDom: function(subject) {
      if (typeof subject === 'string') {
        return self.stringToDom(subject);
      } else if (object.isBareObject(subject)) {
        return self._objectToDom(subject);
      } else {
        throw Error("tools.toDom() only supports strings and objects");
      }
    },
    stringToDom: function(string) {
      var handler, parser;
      handler = new htmlparser.DomHandler;
      parser = new htmlparser.Parser(handler);
      parser.write(string);
      parser.end();
      return handler.dom;
    },
    _fixQuotesInDom: function(input) {
      var j, len, node;
      if (Array.isArray(input)) {
        for (j = 0, len = input.length; j < len; j++) {
          node = input[j];
          self._fixQuotesInDom(node);
        }
        return input;
      }
      node = input;
      if (node.type === 'text') {
        return node.data = self._quoteNodeText(node.data);
      } else {
        return self._fixQuotesInDom(node.children);
      }
    },
    objectToDom: function(o) {
      if (!Array.isArray(o)) {
        if (!object.isBareObject(o)) {
          throw Error("objectToDom() only accepts a bare object or an array");
        }
      }
      return self._fixQuotesInDom(objectToDom(o));
    },
    quote: function(str) {
      return String(str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/\ /g, '&sp;').replace(/\n/g, '<br />');
    },
    _quoteNodeText: function(text) {
      return String(text).replace(/\&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/\ /g, '&sp;').replace(/\n/g, "&nl;");
    },
    getCols: function() {
      var cols, tty;
      tty = require('tty');
      cols = (function() {
        try {
          if (tty.isatty(1) && tty.isatty(2)) {
            if (process.stdout.getWindowSize) {
              return process.stdout.getWindowSize(1)[0];
            } else if (tty.getWindowSize) {
              return tty.getWindowSize()[1];
            } else if (process.stdout.columns) {
              return process.stdout.columns;
            }
          }
        } catch (_error) {}
      })();
      if (typeof cols === 'number' && cols > 30) {
        return cols;
      } else {
        return 80;
      }
    }
  };