| /** |
| * aui-dialog.js |
| * @author 流浪男 |
| * @todo more things to abstract, e.g. Loading css etc. |
| * Licensed under the MIT license. |
| * http://www.opensource.org/licenses/mit-license.php |
| */ |
| (function( window, undefined ) { |
| "use strict"; |
| var auiDialog = function() { |
| }; |
| var isShow = false; |
| auiDialog.prototype = { |
| params: { |
| title:'', |
| msg:'', |
| buttons: ['取消','确定'], |
| input:false |
| }, |
| create: function(params,callback) { |
| var self = this; |
| var dialogHtml = ''; |
| var buttonsHtml = ''; |
| var headerHtml = params.title ? '<div class="aui-dialog-header">' + params.title + '</div>' : '<div class="aui-dialog-header">' + self.params.title + '</div>'; |
| if(params.input){ |
| params.text = params.text ? params.text: ''; |
| var msgHtml = '<div class="aui-dialog-body"><input type="text" placeholder="'+params.text+'"></div>'; |
| }else{ |
| var msgHtml = params.msg ? '<div class="aui-dialog-body">' + params.msg + '</div>' : '<div class="aui-dialog-body">' + self.params.msg + '</div>'; |
| } |
| var buttons = params.buttons ? params.buttons : self.params.buttons; |
| if (buttons && buttons.length > 0) { |
| for (var i = 0; i < buttons.length; i++) { |
| buttonsHtml += '<div class="aui-dialog-btn" tapmode button-index="'+i+'">'+buttons[i]+'</div>'; |
| } |
| } |
| var footerHtml = '<div class="aui-dialog-footer">'+buttonsHtml+'</div>'; |
| dialogHtml = '<div class="aui-dialog">'+headerHtml+msgHtml+footerHtml+'</div>'; |
| document.body.insertAdjacentHTML('beforeend', dialogHtml); |
| // listen buttons click |
| var dialogButtons = document.querySelectorAll(".aui-dialog-btn"); |
| if(dialogButtons && dialogButtons.length > 0){ |
| for(var ii = 0; ii < dialogButtons.length; ii++){ |
| dialogButtons[ii].onclick = function(){ |
| if(callback){ |
| if(params.input){ |
| callback({ |
| buttonIndex: parseInt(this.getAttribute("button-index"))+1, |
| text: document.querySelector("input").value |
| }); |
| }else{ |
| callback({ |
| buttonIndex: parseInt(this.getAttribute("button-index"))+1 |
| }); |
| } |
| }; |
| self.close(); |
| return; |
| } |
| } |
| } |
| self.open(); |
| }, |
| open: function(){ |
| if(!document.querySelector(".aui-dialog"))return; |
| var self = this; |
| document.querySelector(".aui-dialog").style.marginTop = "-"+Math.round(document.querySelector(".aui-dialog").offsetHeight/2)+"px"; |
| if(!document.querySelector(".aui-mask")){ |
| var maskHtml = '<div class="aui-mask"></div>'; |
| document.body.insertAdjacentHTML('beforeend', maskHtml); |
| } |
| // document.querySelector(".aui-dialog").style.display = "block"; |
| setTimeout(function(){ |
| document.querySelector(".aui-dialog").classList.add("aui-dialog-in"); |
| document.querySelector(".aui-mask").classList.add("aui-mask-in"); |
| document.querySelector(".aui-dialog").classList.add("aui-dialog-in"); |
| }, 10) |
| document.querySelector(".aui-mask").addEventListener("touchmove", function(e){ |
| e.preventDefault(); |
| }) |
| document.querySelector(".aui-dialog").addEventListener("touchmove", function(e){ |
| e.preventDefault(); |
| }) |
| return; |
| }, |
| close: function(){ |
| var self = this; |
| document.querySelector(".aui-mask").classList.remove("aui-mask-in"); |
| document.querySelector(".aui-dialog").classList.remove("aui-dialog-in"); |
| document.querySelector(".aui-dialog").classList.add("aui-dialog-out"); |
| if (document.querySelector(".aui-dialog:not(.aui-dialog-out)")) { |
| setTimeout(function(){ |
| if(document.querySelector(".aui-dialog"))document.querySelector(".aui-dialog").parentNode.removeChild(document.querySelector(".aui-dialog")); |
| self.open(); |
| return true; |
| },200) |
| }else{ |
| document.querySelector(".aui-mask").classList.add("aui-mask-out"); |
| document.querySelector(".aui-dialog").addEventListener("webkitTransitionEnd", function(){ |
| self.remove(); |
| }) |
| document.querySelector(".aui-dialog").addEventListener("transitionend", function(){ |
| self.remove(); |
| }) |
| } |
| }, |
| remove: function(){ |
| if(document.querySelector(".aui-dialog"))document.querySelector(".aui-dialog").parentNode.removeChild(document.querySelector(".aui-dialog")); |
| if(document.querySelector(".aui-mask")){ |
| document.querySelector(".aui-mask").classList.remove("aui-mask-out"); |
| } |
| return true; |
| }, |
| alert: function(params,callback){ |
| var self = this; |
| return self.create(params,callback); |
| }, |
| prompt:function(params,callback){ |
| var self = this; |
| params.input = true; |
| return self.create(params,callback); |
| } |
| }; |
| window.auiDialog = auiDialog; |
| })(window); |