qiaowei | f044a74 | 2019-07-10 16:04:20 +0800 | [diff] [blame^] | 1 | /** |
| 2 | * aui-dialog.js |
| 3 | * @author 流浪男 |
| 4 | * @todo more things to abstract, e.g. Loading css etc. |
| 5 | * Licensed under the MIT license. |
| 6 | * http://www.opensource.org/licenses/mit-license.php |
| 7 | */ |
| 8 | (function( window, undefined ) { |
| 9 | "use strict"; |
| 10 | var auiDialog = function() { |
| 11 | }; |
| 12 | var isShow = false; |
| 13 | auiDialog.prototype = { |
| 14 | params: { |
| 15 | title:'', |
| 16 | msg:'', |
| 17 | buttons: ['取消','确定'], |
| 18 | input:false |
| 19 | }, |
| 20 | create: function(params,callback) { |
| 21 | var self = this; |
| 22 | var dialogHtml = ''; |
| 23 | var buttonsHtml = ''; |
| 24 | var headerHtml = params.title ? '<div class="aui-dialog-header">' + params.title + '</div>' : '<div class="aui-dialog-header">' + self.params.title + '</div>'; |
| 25 | if(params.input){ |
| 26 | params.text = params.text ? params.text: ''; |
| 27 | var msgHtml = '<div class="aui-dialog-body"><input type="text" placeholder="'+params.text+'"></div>'; |
| 28 | }else{ |
| 29 | var msgHtml = params.msg ? '<div class="aui-dialog-body">' + params.msg + '</div>' : '<div class="aui-dialog-body">' + self.params.msg + '</div>'; |
| 30 | } |
| 31 | var buttons = params.buttons ? params.buttons : self.params.buttons; |
| 32 | if (buttons && buttons.length > 0) { |
| 33 | for (var i = 0; i < buttons.length; i++) { |
| 34 | buttonsHtml += '<div class="aui-dialog-btn" tapmode button-index="'+i+'">'+buttons[i]+'</div>'; |
| 35 | } |
| 36 | } |
| 37 | var footerHtml = '<div class="aui-dialog-footer">'+buttonsHtml+'</div>'; |
| 38 | dialogHtml = '<div class="aui-dialog">'+headerHtml+msgHtml+footerHtml+'</div>'; |
| 39 | document.body.insertAdjacentHTML('beforeend', dialogHtml); |
| 40 | // listen buttons click |
| 41 | var dialogButtons = document.querySelectorAll(".aui-dialog-btn"); |
| 42 | if(dialogButtons && dialogButtons.length > 0){ |
| 43 | for(var ii = 0; ii < dialogButtons.length; ii++){ |
| 44 | dialogButtons[ii].onclick = function(){ |
| 45 | if(callback){ |
| 46 | if(params.input){ |
| 47 | callback({ |
| 48 | buttonIndex: parseInt(this.getAttribute("button-index"))+1, |
| 49 | text: document.querySelector("input").value |
| 50 | }); |
| 51 | }else{ |
| 52 | callback({ |
| 53 | buttonIndex: parseInt(this.getAttribute("button-index"))+1 |
| 54 | }); |
| 55 | } |
| 56 | }; |
| 57 | self.close(); |
| 58 | return; |
| 59 | } |
| 60 | } |
| 61 | } |
| 62 | self.open(); |
| 63 | }, |
| 64 | open: function(){ |
| 65 | if(!document.querySelector(".aui-dialog"))return; |
| 66 | var self = this; |
| 67 | document.querySelector(".aui-dialog").style.marginTop = "-"+Math.round(document.querySelector(".aui-dialog").offsetHeight/2)+"px"; |
| 68 | if(!document.querySelector(".aui-mask")){ |
| 69 | var maskHtml = '<div class="aui-mask"></div>'; |
| 70 | document.body.insertAdjacentHTML('beforeend', maskHtml); |
| 71 | } |
| 72 | // document.querySelector(".aui-dialog").style.display = "block"; |
| 73 | setTimeout(function(){ |
| 74 | document.querySelector(".aui-dialog").classList.add("aui-dialog-in"); |
| 75 | document.querySelector(".aui-mask").classList.add("aui-mask-in"); |
| 76 | document.querySelector(".aui-dialog").classList.add("aui-dialog-in"); |
| 77 | }, 10) |
| 78 | document.querySelector(".aui-mask").addEventListener("touchmove", function(e){ |
| 79 | e.preventDefault(); |
| 80 | }) |
| 81 | document.querySelector(".aui-dialog").addEventListener("touchmove", function(e){ |
| 82 | e.preventDefault(); |
| 83 | }) |
| 84 | return; |
| 85 | }, |
| 86 | close: function(){ |
| 87 | var self = this; |
| 88 | document.querySelector(".aui-mask").classList.remove("aui-mask-in"); |
| 89 | document.querySelector(".aui-dialog").classList.remove("aui-dialog-in"); |
| 90 | document.querySelector(".aui-dialog").classList.add("aui-dialog-out"); |
| 91 | if (document.querySelector(".aui-dialog:not(.aui-dialog-out)")) { |
| 92 | setTimeout(function(){ |
| 93 | if(document.querySelector(".aui-dialog"))document.querySelector(".aui-dialog").parentNode.removeChild(document.querySelector(".aui-dialog")); |
| 94 | self.open(); |
| 95 | return true; |
| 96 | },200) |
| 97 | }else{ |
| 98 | document.querySelector(".aui-mask").classList.add("aui-mask-out"); |
| 99 | document.querySelector(".aui-dialog").addEventListener("webkitTransitionEnd", function(){ |
| 100 | self.remove(); |
| 101 | }) |
| 102 | document.querySelector(".aui-dialog").addEventListener("transitionend", function(){ |
| 103 | self.remove(); |
| 104 | }) |
| 105 | } |
| 106 | }, |
| 107 | remove: function(){ |
| 108 | if(document.querySelector(".aui-dialog"))document.querySelector(".aui-dialog").parentNode.removeChild(document.querySelector(".aui-dialog")); |
| 109 | if(document.querySelector(".aui-mask")){ |
| 110 | document.querySelector(".aui-mask").classList.remove("aui-mask-out"); |
| 111 | } |
| 112 | return true; |
| 113 | }, |
| 114 | alert: function(params,callback){ |
| 115 | var self = this; |
| 116 | return self.create(params,callback); |
| 117 | }, |
| 118 | prompt:function(params,callback){ |
| 119 | var self = this; |
| 120 | params.input = true; |
| 121 | return self.create(params,callback); |
| 122 | } |
| 123 | }; |
| 124 | window.auiDialog = auiDialog; |
| 125 | })(window); |