aui-dialog.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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);