bin.shen
2016-12-05 a4c9331bbfe3e8765ccdc1c54cc6931bac49cc82
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
/**
 * @author ZhangHuihua@msn.com
 */
$.setRegional("alertMsg", {
    title:{error:"Error", info:"Information", warn:"Warning", correct:"Successful", confirm:"Confirmation"},
    butMsg:{ok:"OK", yes:"Yes", no:"No", cancel:"Cancel"}
});
var alertMsg = {
    _boxId: "#alertMsgBox",
    _bgId: "#alertBackground",
    _closeTimer: null,
 
    _types: {error:"error", info:"info", warn:"warn", correct:"correct", confirm:"confirm"},
 
    _getTitle: function(key){
        return $.regional.alertMsg.title[key];
    },
 
    _keydownOk: function(event){
        if (event.keyCode == DWZ.keyCode.ENTER) event.data.target.trigger("click");
        return false;
    },
    _keydownEsc: function(event){
        if (event.keyCode == DWZ.keyCode.ESC) event.data.target.trigger("click");
    },
    /**
     * 
     * @param {Object} type
     * @param {Object} msg
     * @param {Object} buttons [button1, button2]
     */
    _open: function(type, msg, buttons){
        $(this._boxId).remove();
        var butsHtml = "";
        if (buttons) {
            for (var i = 0; i < buttons.length; i++) {
                var sRel = buttons[i].call ? "callback" : "";
                butsHtml += DWZ.frag["alertButFrag"].replace("#butMsg#", buttons[i].name).replace("#callback#", sRel);
            }
        }
        var boxHtml = DWZ.frag["alertBoxFrag"].replace("#type#", type).replace("#title#", this._getTitle(type)).replace("#message#", msg).replace("#butFragment#", butsHtml);
        $(boxHtml).appendTo("body").css({top:-$(this._boxId).height()+"px"}).animate({top:"0px"}, 500);
                
        if (this._closeTimer) {
            clearTimeout(this._closeTimer);
            this._closeTimer = null;
        }
        if (this._types.info == type || this._types.correct == type){
            this._closeTimer = setTimeout(function(){alertMsg.close()}, 3500);
        } else {
            $(this._bgId).show();
        }
        
        var jButs = $(this._boxId).find("a.button");
        var jCallButs = jButs.filter("[rel=callback]");
        var jDoc = $(document);
        
        for (var i = 0; i < buttons.length; i++) {
            if (buttons[i].call) jCallButs.eq(i).click(buttons[i].call);
            if (buttons[i].keyCode == DWZ.keyCode.ENTER) {
                jDoc.bind("keydown",{target:jButs.eq(i)}, this._keydownOk);
            }
            if (buttons[i].keyCode == DWZ.keyCode.ESC) {
                jDoc.bind("keydown",{target:jButs.eq(i)}, this._keydownEsc);
            }
        }
    },
    close: function(){
        $(document).unbind("keydown", this._keydownOk).unbind("keydown", this._keydownEsc);
        $(this._boxId).animate({top:-$(this._boxId).height()}, 500, function(){
            $(this).remove();
        });
        $(this._bgId).hide();
    },
    error: function(msg, options) {
        this._alert(this._types.error, msg, options);
    },
    info: function(msg, options) {
        this._alert(this._types.info, msg, options);
    },
    warn: function(msg, options) {
        this._alert(this._types.warn, msg, options);
    },
    correct: function(msg, options) {
        this._alert(this._types.correct, msg, options);
    },
    _alert: function(type, msg, options) {
        var op = {okName:$.regional.alertMsg.butMsg.ok, okCall:null};
        $.extend(op, options);
        var buttons = [
            {name:op.okName, call: op.okCall, keyCode:DWZ.keyCode.ENTER}
        ];
        this._open(type, msg, buttons);
    },
    /**
     * 
     * @param {Object} msg
     * @param {Object} options {okName, okCal, cancelName, cancelCall}
     */
    confirm: function(msg, options) {
        var op = {okName:$.regional.alertMsg.butMsg.ok, okCall:null, cancelName:$.regional.alertMsg.butMsg.cancel, cancelCall:null};
        $.extend(op, options);
        var buttons = [
            {name:op.okName, call: op.okCall, keyCode:DWZ.keyCode.ENTER},
            {name:op.cancelName, call: op.cancelCall, keyCode:DWZ.keyCode.ESC}
        ];
        this._open(this._types.confirm, msg, buttons);
    }
};