util.js 8.95 KB
var $ = require('jquery');
var util = {
    __ajax: function(options, callback, notip) {
        if (typeof options.data == "string") {
            util.__tip(options.data, "warning");
            return false;
        } else {
            $.ajax({
                type: options.type || 'POST',
                url: options.url,
                async: options.async,
                dataType: 'json',
                data: options.data || {},
                success: function(res) {
                    res = res.data;
                    if (("" + res.code) === "200") {
                        notip ? (callback && callback.bind(this, res)()) : util.__tip(res.message, "success", callback && callback.bind(this, res)());
                        return true;
                    } else {
                        (!notip) && util.__tip(res.message, "danger");
                        return false;
                    }
                },
                error: function(err) {
                    console.log("ajax.ERROR", err);
                    return false;
                }
            });
        }
    },
    __ajax2: function(options, callback) {
        if (typeof options.data == "string") {
            util.__tip(options.data, "warning");
        } else {
            $.ajax({
                type: 'POST',
                url: options.url,
                async: options.async,
                dataType: 'json',
                data: options.data || {},
                success: function(res) {
                    res = res.data;
                    if (res.code != 200) {
                        util.__tip(res.message, "warning");
                    } else {
                        return callback.bind(this, res)();
                    }
                }
            });
        }
    },
    __tip: function(message, callback) {
        //danger
        var options = {};
        options.class_name = "growl-danger";
        options.title = arguments[0];
        if (arguments.length > 1) {
            if (typeof(arguments[1]) === "string") {
                options.class_name = "growl-" + arguments[1];
            } else {
                options.class_name = "growl-success";
            }
            var lastargs = Array.prototype.slice.call(arguments, arguments.length - 1);
            lastargs = lastargs[0];
            if (typeof lastargs === "function") {
                options.after_open = setTimeout(function() {
                    lastargs && lastargs();
                }, 600);
            }
        }
        options.sticky = false;
        options.time = 1000;

        $.gritter.add(options);
    },
    __template: function() {
        var args = arguments,
            result;
        if (args.length > 0) {
            if (typeof args[0] === "string") {
                result = args[0];
                if (args.length == 2 && typeof args[1] == "object") {
                    for (var key in args[1]) {
                        if (args[1][key] != undefined) {
                            var regkey = ((+key) == (+key)) ? "[" + key + "]" : key;
                            var reg = new RegExp("({" + regkey + "})", "g");
                            result = result.replace(reg, args[1][key]);
                        }
                    }
                }
                var reg = new RegExp("({.*})", "g");
                result = result.replace(reg, '');
            }
        }
        return result;
    },
    __template2: function(str, source) {
        // console.log(str);
        var script = [];
        script.push('var each=function(obj,fn){');
        script.push('            var that=this;');
        script.push('            if({}.toString.call(obj)=="[object Array]"){');
        script.push('                for(var i=0;i<obj.length;i++){');
        script.push('                    fn.call(i,i,obj[i]);');
        script.push('                }');
        script.push('                return;');
        script.push('            }');
        script.push('            if(typeof obj=="function"||typeof obj=="object"&&!!obj){');
        script.push('                for(var i in obj){');
        script.push('                    fn.call(i,i,obj[i]);');
        script.push('               }');
        script.push('               return;');
        script.push('            }');
        script.push('};');

        var formstr = function(code) {
            return "'" + code
                .replace(/('|\\)/g, '\\$1')
                .replace(/\r/g, '\\r')
                .replace(/\n/g, '\\n') + "'";
        }
        var formJs = function(code) {
                var trim = code.replace(/^\s+|\s+$/, '');
                //each goodsSizeList as item __index
                if (/^each/.test(trim)) {
                    return trim.replace(/^each\b([\w\W]+)\bas\b([\w\W]+)\b([\w\W]+)/, function($0, $1, $2, $3) {
                        return 'each\( ' + $1 + ',function(' + $3 + ',' + $2 + '){';
                    });
                } else if (/^\/each/.test(trim)) {
                    return trim.replace(/^\/each/, '});')
                } else if (/^if/.test(trim)) {
                    return trim.replace(/^if(.+)/, function($0, $1) {
                        return 'if(' + $1 + '){';
                    });
                } else if (/^\/if/.test(trim)) {
                    return trim.replace(/^\/if/, '};')
                } else if (/^else$/.test(trim)) {
                    return trim.replace(/else/, '}else{');
                } else {
                    return "result.push(" + code + ")";
                }
            }
            // var PARAMS={};
        var OBJECT = /\.\w+|'.*'|".*"/g;
        var KEYWORDS = 'for,if,else,each,as';
        var SPECHAR = /\W/g;
        var NUMBER = /^\d[^,]*|,\d[^,]*/g;
        var SPLIT2_RE = /^$|,+/;
        var REGEXKEYWORDS = new RegExp("\\b" + [KEYWORDS.replace(/,/g, '\\b|\\b')].join('|'), 'g');
        var getVar = function(code) {
            var strArr = code.replace(OBJECT, '')
                .replace(SPECHAR, ',')
                .replace(REGEXKEYWORDS, '')
                .replace(NUMBER, '')
                .split(SPLIT2_RE);
            for (var key in strArr) {
                if (strArr[key] && !source.hasOwnProperty(strArr[key])) {
                    source[strArr[key]] = "";
                }
            }
        }

        var code = [],
            params = {};
        var arr = str.split(/\[\[|\]\]/).map(function(item, index) {
            if (index % 2) {
                return {
                    value: item,
                    regex: true
                };
            } else {
                return {
                    value: item,
                    regex: false
                };
            }
        });

        arr.forEach(function(item, index) {
            if (item.regex) {
                getVar(item.value);
                code.push(formJs(item.value));
            } else {
                code.push("result.push(" + formstr(item.value) + ");");
            }
        });
        // var header="var result=[],";
        // header+=Object.keys(source).join(',')+";"

        var keys = [];
        for (var key in source) {
            if (typeof source[key] == "boolean") {
                keys.push(key + "=" + source[key]);
            } else {
                keys.push(key + "=" + JSON.stringify(source[key]));
            }
        }
        var header = "var result=[]," + keys.join(',') + ";";



        var result = header + code.join('\n') + "return result.join('');";

        var fn = new Function(script.join('') + result);
        return fn.call(source);
    },
    __input: function(id) {
        return !!~$.trim($('#' + id).val()) ? $('#' + id).val() : ""
    },
    __dateFormat: function(data, format) {
        if (!isNaN(data)) {
            var date = {
                "M+": data.getMonth() + 1,
                "d+": data.getDate(),
                "h+": data.getHours(),
                "m+": data.getMinutes(),
                "s+": data.getSeconds(),
                "q+": Math.floor((data.getMonth() + 3) / 3),
                "S+": data.getMilliseconds()
            };
            if (/(y+)/i.test(format)) {
                format = format.replace(RegExp.$1, (data.getFullYear() + '').substr(4 - RegExp.$1.length));
            }
            for (var k in date) {
                if (new RegExp("(" + k + ")").test(format)) {
                    format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
                }
            }

            return format;
        } else {
            return "";
        }

    },
    __filterNull: function(obj, prop) {
        // 判断item里面 instr属性是不是为空
        if (obj[prop]) {
            return obj[prop];
        } else {
            return "";
        }
    },

    // 判断是否是有效的json字串
    __isJsonString: function (str) {
        try {
            JSON.parse(str);
        } catch (e) {
            return false;
        }

        return true;
    }
}
module.exports = util;