Code coverage report for src/helper/text.js

Statements: 100% (55 / 55)      Branches: 96.55% (28 / 29)      Functions: 100% (7 / 7)      Lines: 100% (52 / 52)      Ignored: none     

All files » src/helper/ » text.js
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 111 112 113 1141       1   265 265   265 3     265   265 15   250     265   108 59 49   5 5   5   2   3   2 2       1       5   44   44           265   265     1   74 74   74 49     74   74       1   52   52     26 26 26         6 6       2 2 2 3 3   2 2       18     52     1    
module.exports = function(Helper, utils){
  /**
   * 获取引用文本,当引用自身不存在的情况下,需要返回原来的模板字符串
   */
  function getRefText(ast){
 
    var ret = ast.leader;
    var isFn = ast.args !== undefined;
 
    if (ast.type === 'macro_call') {
      ret = '#';
    }
 
    if (ast.isWraped) ret += '{';
 
    if (isFn) {
      ret += getMethodText(ast);
    } else {
      ret += ast.id;
    }
 
    utils.forEach(ast.path, function(ref){
      //不支持method并且传递参数
      if (ref.type == 'method') {
        ret += '.' + getMethodText(ref);
      } else if (ref.type == 'index') {
 
        var text = '';
        var id = ref.id;
 
        if (id.type === 'integer') {
 
          text = id.value;
 
        } else if (id.type === 'string') {
 
          var sign = id.isEval? '"': "'";
          text = sign + id.value + sign;
 
        } else {
 
          text = getRefText(id);
 
        }
 
        ret += '[' + text + ']';
 
      } else Eif (ref.type == 'property') {
 
        ret += '.' + ref.id;
 
      }
 
    }, this);
 
    if (ast.isWraped) ret += '}';
 
    return ret;
  }
 
  function getMethodText(ref) {
 
    var args = [];
    var ret = '';
 
    utils.forEach(ref.args, function(arg){
      args.push(getLiteral(arg));
    });
 
    ret += ref.id + '(' + args.join(',') + ')';
 
    return ret;
 
  }
 
  function getLiteral(ast){
 
    var ret = '';
 
    switch(ast.type) {
 
      case 'string': {
        var sign = ast.isEval? '"': "'";
        ret = sign + ast.value + sign;
        break;
      }
 
      case 'integer':
      case 'bool'   : {
        ret = ast.value;
        break;
      }
 
      case 'array': {
        ret = '[';
        var len = ast.value.length - 1;
        utils.forEach(ast.value, function(arg, i){
          ret += getLiteral(arg);
          if (i !== len) ret += ', ';
        });
        ret += ']';
        break;
      }
 
      default:
        ret = getRefText(ast)
    }
 
    return ret;
  }
 
  Helper.getRefText = getRefText;
};