dwz.alertMsg.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /**
  2. * @author ZhangHuihua@msn.com
  3. */
  4. $.setRegional("alertMsg", {
  5. title:{error:"Error", info:"Information", warn:"Warning", correct:"Successful", confirm:"Confirmation"},
  6. butMsg:{ok:"OK", yes:"Yes", no:"No", cancel:"Cancel"}
  7. });
  8. var alertMsg = {
  9. _boxId: "#alertMsgBox",
  10. _bgId: "#alertBackground",
  11. _closeTimer: null,
  12. _types: {error:"error", info:"info", warn:"warn", correct:"correct", confirm:"confirm"},
  13. _getTitle: function(key){
  14. return $.regional.alertMsg.title[key];
  15. },
  16. _keydownOk: function(event){
  17. if (event.keyCode == DWZ.keyCode.ENTER) event.data.target.trigger("click");
  18. return false;
  19. },
  20. _keydownEsc: function(event){
  21. if (event.keyCode == DWZ.keyCode.ESC) event.data.target.trigger("click");
  22. },
  23. /**
  24. *
  25. * @param {Object} type
  26. * @param {Object} msg
  27. * @param {Object} buttons [button1, button2]
  28. */
  29. _open: function(type, msg, buttons){
  30. $(this._boxId).remove();
  31. var butsHtml = "";
  32. if (buttons) {
  33. for (var i = 0; i < buttons.length; i++) {
  34. var sRel = buttons[i].call ? "callback" : "";
  35. butsHtml += DWZ.frag["alertButFrag"].replace("#butMsg#", buttons[i].name).replace("#callback#", sRel);
  36. }
  37. }
  38. var boxHtml = DWZ.frag["alertBoxFrag"].replace("#type#", type).replace("#title#", this._getTitle(type)).replace("#message#", msg).replace("#butFragment#", butsHtml);
  39. $(boxHtml).appendTo("body").css({top:-$(this._boxId).height()+"px"}).animate({top:"0px"}, 500);
  40. if (this._closeTimer) {
  41. clearTimeout(this._closeTimer);
  42. this._closeTimer = null;
  43. }
  44. if (this._types.info == type || this._types.correct == type){
  45. this._closeTimer = setTimeout(function(){alertMsg.close()}, 3500);
  46. } else {
  47. $(this._bgId).show();
  48. }
  49. var jButs = $(this._boxId).find("a.button");
  50. var jCallButs = jButs.filter("[rel=callback]");
  51. var jDoc = $(document);
  52. for (var i = 0; i < buttons.length; i++) {
  53. if (buttons[i].call) jCallButs.eq(i).click(buttons[i].call);
  54. if (buttons[i].keyCode == DWZ.keyCode.ENTER) {
  55. jDoc.bind("keydown",{target:jButs.eq(i)}, this._keydownOk);
  56. }
  57. if (buttons[i].keyCode == DWZ.keyCode.ESC) {
  58. jDoc.bind("keydown",{target:jButs.eq(i)}, this._keydownEsc);
  59. }
  60. }
  61. },
  62. close: function(){
  63. $(document).unbind("keydown", this._keydownOk).unbind("keydown", this._keydownEsc);
  64. $(this._boxId).animate({top:-$(this._boxId).height()}, 500, function(){
  65. $(this).remove();
  66. });
  67. $(this._bgId).hide();
  68. },
  69. error: function(msg, options) {
  70. this._alert(this._types.error, msg, options);
  71. },
  72. info: function(msg, options) {
  73. this._alert(this._types.info, msg, options);
  74. },
  75. warn: function(msg, options) {
  76. this._alert(this._types.warn, msg, options);
  77. },
  78. correct: function(msg, options) {
  79. this._alert(this._types.correct, msg, options);
  80. },
  81. _alert: function(type, msg, options) {
  82. var op = {okName:$.regional.alertMsg.butMsg.ok, okCall:null};
  83. $.extend(op, options);
  84. var buttons = [
  85. {name:op.okName, call: op.okCall, keyCode:DWZ.keyCode.ENTER}
  86. ];
  87. this._open(type, msg, buttons);
  88. },
  89. /**
  90. *
  91. * @param {Object} msg
  92. * @param {Object} options {okName, okCal, cancelName, cancelCall}
  93. */
  94. confirm: function(msg, options) {
  95. var op = {okName:$.regional.alertMsg.butMsg.ok, okCall:null, cancelName:$.regional.alertMsg.butMsg.cancel, cancelCall:null};
  96. $.extend(op, options);
  97. var buttons = [
  98. {name:op.okName, call: op.okCall, keyCode:DWZ.keyCode.ENTER},
  99. {name:op.cancelName, call: op.cancelCall, keyCode:DWZ.keyCode.ESC}
  100. ];
  101. this._open(this._types.confirm, msg, buttons);
  102. }
  103. };