blob: 90e85aadeef0ab366f31457caa969b03f873ceb3 [file] [log] [blame]
qiaoweif044a742019-07-10 16:04:20 +08001/**
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);