]> WPIA git - gigi.git/blob - static/static/js/expert.js
add: modal javascript-dialogs for confirming dangerous action.
[gigi.git] / static / static / js / expert.js
1 (function() {
2         var modal = undefined;
3         
4         function showModal(content){
5                 var HTML = `<div class="modal fade" id="confirmation-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
6   <div class="modal-dialog" role="document">
7     <div class="modal-content">
8       <div class="modal-header">
9         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&#x1F5D9;</span></button>
10         <h4 class="modal-title" id="myModalLabel">&nbsp;</h4>
11       </div>
12       <div class="modal-body">
13         Body
14       </div>
15       <div class="modal-footer">
16         <button type="button" class="btn btn-default btn-cancel" data-dismiss="modal">&#x1F5D9;</button>
17         <button type="button" class="btn btn-danger btn-confirm">&checkmark;</button>
18       </div>
19     </div>
20   </div>
21 </div>`;
22                 if(modal === undefined) {
23                         modal = $(HTML);
24                         modal.action = function(){};
25                         modal.appendTo("body");
26                         $(modal.get(0)).find(".modal-footer .btn-confirm").click(function(){
27                                 modal.action();
28                                 modal.modal("hide");
29                         });
30                 }
31                 var m = $(modal.get(0));
32                 m.find(".modal-body").text($(content).attr("data-confirm"));
33                 var reply = $(content).attr("data-reply").split(",");
34                 m.find(".modal-footer .btn-cancel").text(reply[0]);
35                 m.find(".modal-footer .btn-confirm").text(reply[1]);
36                 modal.action=function(){
37                         content.confirmed=true;
38                         $(content).click();
39                 };
40                 modal.modal("show");
41         }
42         function initConfirm() {
43                 $(".btn-confirm").click(function(){
44                         if(this.confirmed === true){
45                                 return true;
46                         }
47                         showModal(this);
48                         return false;
49                 });
50         }
51         function showExpert(isExpert)
52         {
53           var elements = document.getElementsByClassName("expert");
54           for(var i = 0; elements.length > i; i++)
55           {
56             if(!isExpert) {
57                 elements[i].setAttribute("class","expert experthidden");
58             } else {
59                 elements[i].setAttribute("class","expert");
60             }
61           }
62         }
63         function init(){
64                 showExpert(false);
65                 var expert = document.getElementById("expertbox");
66                 if(expert !== null) {
67                         expert.onchange = (function(expert){return function(){showExpert(expert.checked)}})(expert);
68                 }
69                 $(".panel-activatable").map(function() {
70                         var panel = $(this);
71                         var refresh = function(){
72                                 var radio = this.type == "radio";
73                                 if(radio && this.form.currentRadios === undefined) {
74                                         this.form.currentRadios = {};
75                                 }
76                                 if(this.checked) {
77                                         panel.find(".panel-body").removeClass("hidden");
78                                         if(radio) {
79                                                 var rds = this.form.currentRadios;
80                                                 if(rds[this.name] !== undefined){
81                                                         $(rds[this.name]).trigger("change");
82                                                 }
83                                                 rds[this.name] = this;
84                                         }
85                                 } else {
86                                         panel.find(".panel-body").addClass("hidden");
87                                 }
88                         };
89                         panel.find(".panel-heading [type=\"checkbox\"]").map(refresh);
90                         panel.find(".panel-heading [type=\"checkbox\"]").change(refresh);
91                         panel.find(".panel-heading [type=\"radio\"]").map(refresh);
92                         panel.find(".panel-heading [type=\"radio\"]").change(refresh);
93                         return this.id;
94                 });
95                 initConfirm();
96         }
97         (function(oldLoad) {
98                 if (oldLoad == undefined) {
99                         window.onload = init;
100                 } else {
101                         window.onload = function() {
102                                 init();
103                                 oldLoad();
104                         }
105                 }
106         })(window.onload);
107
108 })();