util.js 8.57 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, "danger");
                    } 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) {
        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 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('');";
        // console.log(result);

        var fn = new Function(script.join('')+result);
        return fn.call(null,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 "";
        }
    }
}
module.exports = util;