util.js 6.52 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){
        // console.log(str);
    var result="";
    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('}');
    result=script.join('')+";\n";

    var formstr=function (code) {
                return "'" + code
                .replace(/('|\\)/g, '\\$1')
                .replace(/\r/g, '\\r')
                .replace(/\n/g, '\\n') + "'";
            }
    //获取参数
    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]));
        }
        
    }

    result+="var "+keys.join(',')+";";
    var html="";
    html=str.replace(/\[\[(.*?)\]\]/igm,function(name,$1){
        var trim=$1.replace(/^\s+|\s+$/,'');
        if(/^each/.test(trim))
        {
            trim=trim.replace(/^each\s+(\w+)\s+as\s+(\w+)\s+(\w+)/,'each\( $1,function($3,$2){');
            return "[["+trim+"]]";
        }else
        if(/^\/each/.test(trim)){
            trim=trim.replace(/^\/each/,'});')
            return "[["+trim+"]]";
        }
        else if(/^if/.test(trim)){
            trim=trim.replace(/^if(.+)/,'if($1){');
            return "[["+trim+"]]";
        }
        else if(/^\/if/.test(trim)){
            trim=trim.replace(/^\/if/,'};')
            return "[["+trim+"]]";
        }
        else if(/^else$/.test(trim)){
            trim=trim.replace(/else/,'}else{');
            return "[["+trim+"]]";
        }
        else{
            return "[[+"+trim+"+]]";
        }
    });
    html=html.replace(/(^|\]\])(.*?)(\[\[|$)/igm,function(name,$1,$2){
        var trim=$2.replace(/^\s+|\s+$/,'');
        return trim?formstr($2):'';
    });
    // var result="var result='';result+=";
    var arr=html.split(/\n+/igm);
    result+="var p=[];\n";
    for(var i=0;i<arr.length;i++){
        if(/^'/.test(arr[i])){
            result+="p.push("+(arr[i])+");\n";
        }else{
            result+=(arr[i]);
        }
    }
    result+="return p.join('');\n";


    var fn=new Function(result);
    var b=fn.call(source);
    return b;
    },
    __input:function(id){
        return !!~$.trim($('#'+id).val())?$('#'+id).val():""
    }
}
module.exports=util;