all files / dui/src/core/ util.js

77.36% Statements 41/53
61.9% Branches 26/42
88.89% Functions 8/9
77.36% Lines 41/53
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146                                                    40× 39×                       49× 10×   49× 49×   48× 47×   48×                                                         44× 10×   34× 34× 34×                   11× 11× 11×                 68× 68×                         91×              
/**
 * 工具箱
 *
 * @file 工具箱,与tool不同,这里存放的工具仅限于本项目,util默认集成tool中所有方法
 * @author Brian Li(lbxxlht@163.com)
 */
var define = typeof define === 'function' && define.amd ? define : function (factory) {
    typeof module === 'object' ? (module.exports = factory(require)) : '';
};
 
define(function (require) {
 
    var tool = require('./tool');
    var Picker = require('./picker');
    var util = {};
 
    /**
     * 栅格尺寸
     * @CONST
     */
    util.LATTICESIZE = 10;
 
    /**
     * 模板操作工具
     */
    util.Picker = Picker;
 
    /**
     * 获取函数名,对匿名函数无效
     *
     * @param {Function} func 声明函数
     * @return {string} 函数名
     */
    util.getFunctionName = function (func) {
        // NOT IE
        if (func.name) {
            return func.name;
        }
        // IE
        return /function\s*(\w*)/i.exec(func.toString())[1];
    };
 
    /**
     * 在原className上拼接一个新
     *
     * @param {string} className 原串
     * @param {?string} append 拼接串
     * @return {string} 拼接好的串
     */
    util.joinClassName = function (className, append) {
        if (typeof className !== 'string') {
            className = '';
        }
        var arr = className.split(' ');
        if (arr.indexOf(append) > -1) {
            return className;
        }
        if (typeof append === 'string' && append.length > 0) {
            arr.push(append);
        }
        return arr.join(' ').trim();
    };
 
    /**
     * 从原className上移除一个class
     *
     * @param {string} className 原串
     * @param {?string} remove 待移除传
     * @return {string} 拼接好的串
     */
    util.removeClassName = function (className, remove) {
        className = typeof className !== 'string' ? '' : className;
        remove = remove || '';
        var arr = className.split(' ');
        var result = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] === remove || arr[i] === '') {
                continue;
            }
            result.push(arr[i]);
        }
        return result.join(' ');
    };
 
    /**
     * 计算栅格尺寸
     *
     * @param {number} size 原先尺寸
     * @return {?number} 计算后对应的栅格尺寸
     */
    util.calcLatticeSize = function (size) {
        if (isNaN(size)) {
            return null;
        }
        size = ~~size;
        var result = parseInt(~~size / this.LATTICESIZE, 10) * this.LATTICESIZE;
        return result < size ? result + this.LATTICESIZE : result;
    };
 
    /**
     * 向事件hash中添加新事件
     *
     * @param {Object} param ui实例初始化对象
     * @param {string} type 事件的类型
     * @param {Function} handler 将要被添加的事件
     */
    util.appendHandler = function (param, type, handler) {
        param.events = param.events || {};
        param.events[type] = param.events[type] instanceof Array ? param.events[type] : [param.events[type]];
        param.events[type].push(handler);
    };
 
    /**
     * 是否为浏览器DOM对象
     *
     * @param {Object} obj 传入对象
     * @return {boolean} 该对象是否为浏览器DOM
     */
    util.isDOM = function (obj) {
        Eif (this.inNode()) {
            return false;
        }
        if (obj instanceof HTMLElement) {
            return true;
        }
        return false;
    };
 
    /**
     * 是否在node环境下运行
     *
     * @return {boolean} 当前是否在node.js环境下运行
     */
    util.inNode = function () {
        return typeof module !== 'undefined' && typeof module.exports !== 'undefined';
    };
 
    for (var key in tool) {
        Eif (typeof tool[key] === 'function' && typeof util[key] !== 'function') {
            util[key] = tool[key];
        }
    }
 
    return util;
});