/**
|
* 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);
|