diff options
author | Devaev Maxim <[email protected]> | 2018-08-27 13:13:49 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2018-08-27 13:13:49 +0300 |
commit | a8773eab1e8f82a7bd862492e5520dcb9690a5e0 (patch) | |
tree | 77c8caeaf749073e26ef50e83c44b784312dd79b | |
parent | 47a077a3b7d7ccadf8a1adcd608ffe61ac5bf818 (diff) |
own modals - first implementation
-rw-r--r-- | kvmd/eslintrc.yaml | 1 | ||||
-rw-r--r-- | kvmd/web/css/main.css | 23 | ||||
-rw-r--r-- | kvmd/web/css/mobile.css | 4 | ||||
-rw-r--r-- | kvmd/web/css/modals.css | 31 | ||||
-rw-r--r-- | kvmd/web/css/vars.css | 1 | ||||
-rw-r--r-- | kvmd/web/index.html | 25 | ||||
-rw-r--r-- | kvmd/web/js/atx.js | 22 | ||||
-rw-r--r-- | kvmd/web/js/hid.js | 51 | ||||
-rw-r--r-- | kvmd/web/js/modal.js | 65 | ||||
-rw-r--r-- | kvmd/web/js/msd.js | 6 | ||||
-rw-r--r-- | kvmd/web/js/stream.js | 4 |
11 files changed, 167 insertions, 66 deletions
diff --git a/kvmd/eslintrc.yaml b/kvmd/eslintrc.yaml index 74240a54..477dea69 100644 --- a/kvmd/eslintrc.yaml +++ b/kvmd/eslintrc.yaml @@ -8,6 +8,7 @@ globals: Stream: true Ui: true tools: true + modal: true "$": true "$$": true diff --git a/kvmd/web/css/main.css b/kvmd/web/css/main.css index 289730b1..d8477ed5 100644 --- a/kvmd/web/css/main.css +++ b/kvmd/web/css/main.css @@ -70,6 +70,18 @@ select:active { background-image: url("../svg/select-arrow-intensive.svg") !important; } +.row50 { + display: inline-block; + width: 50%; +} +.row25 { + display: inline-block; + width: 25%; +} +.row50:not(:first-child), .row25:not(:first-child) { + border-left: var(--dark-border); +} + img#logo { -webkit-filter: invert(0.7); filter: invert(0.7); @@ -142,17 +154,6 @@ div.ctl-dropdown-content div.buttons-row { padding: 0; font-size: 0; } -div.ctl-dropdown-content .row50 { - display: inline-block; - width: 50%; -} -div.ctl-dropdown-content .row25 { - display: inline-block; - width: 25%; -} -div.ctl-dropdown-content .row50:not(:first-child), .row25:not(:first-child) { - border-left: var(--dark-border); -} div.ctl-dropdown-content hr { margin: 0; display: block; diff --git a/kvmd/web/css/mobile.css b/kvmd/web/css/mobile.css index f12e1f8c..24bf9ca8 100644 --- a/kvmd/web/css/mobile.css +++ b/kvmd/web/css/mobile.css @@ -36,6 +36,10 @@ background-color: var(--bg-color-normal) !important; } + div.modal div.modal-window div.modal-buttons button { + height: 50px !important; + } + div#stream-window { padding-top: 9px !important; border-top: 0 !important; diff --git a/kvmd/web/css/modals.css b/kvmd/web/css/modals.css index eedb4ef6..441c065f 100644 --- a/kvmd/web/css/modals.css +++ b/kvmd/web/css/modals.css @@ -10,16 +10,39 @@ div.modal { z-index: 2147483647; } -div.modal-content { +div.modal div.modal-window { display: table; outline: none; margin: 15% auto; overflow: hidden; - border: var(--important-border); + border: var(--intensive-border); border-radius: 8px; box-sizing: border-box; box-shadow: var(--big-shadow); - white-space: nowrap; background-color: var(--bg-color-light); - padding: 9px; + padding: 0; +} + +div.modal div.modal-window div.modal-header { + text-align: center; + font-weight: bold; + padding: 3px 9px 3px 9px; + border-bottom: var(--normal-border); +} + +div.modal div.modal-window div.modal-content { + max-width: 500px; + max-height: 500px; + padding: 16px 9px 16px 9px; +} + +div.modal div.modal-window div.modal-buttons { + border-top: var(--dark-border); + margin: 0; + padding: 0; + font-size: 0; +} + +div.modal div.modal-window div.modal-buttons button { + height: 40px; } diff --git a/kvmd/web/css/vars.css b/kvmd/web/css/vars.css index 35d68c26..d6d5a604 100644 --- a/kvmd/web/css/vars.css +++ b/kvmd/web/css/vars.css @@ -28,7 +28,6 @@ --black-border: thin solid black; --intensive-border: 2px solid var(--border-color-intensive); --thin-intensive-border: thin solid var(--border-color-intensive); - --important-border: 2px solid var(--border-color-important); --micro-shadow: 1px 2px 4px 0 rgba(0, 0, 0, 0.4); --small-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2); diff --git a/kvmd/web/index.html b/kvmd/web/index.html index 8ae5d250..6f64c7d7 100644 --- a/kvmd/web/index.html +++ b/kvmd/web/index.html @@ -21,6 +21,7 @@ <link rel="stylesheet" href="css/mobile.css"> <script src="js/tools.js"></script> + <script src="js/modal.js"></script> <script src="js/stream.js"></script> <script src="js/atx.js"></script> <script src="js/keyboard.js"></script> @@ -36,17 +37,19 @@ <body> <div id="bad-browser-modal" class="modal"> - <div class="modal-content"> - You are using an incompatible or legacy browser.<br> - Please use one of the following browsers:<br> - <hr> - <ul> - <li><a target="_blank" href="https://www.google.com/chrome">Google Chrome</a> <sup><i>recommended</i></sup></li> - <li><a target="_blank" href="https://www.chromium.org/Home">Chromium</a> <sup><i>recommended</i></sup></li> - <li><a target="_blank" href="https://www.mozilla.org/firefox">Mozilla Firefox</a></li> - <li><a target="_blank" href="https://www.apple.com/safari">Apple Safari</a></li> - <li><a target="_blank" href="https://www.opera.com">Opera</a></li> - </ul> + <div class="modal-window"> + <div class="modal-content"> + Hello. You are using an incompatible or legacy browser.<br> + Please use one of the following browsers: + <hr> + <ul> + <li><a target="_blank" href="https://www.google.com/chrome">Google Chrome</a> <sup><i>recommended</i></sup></li> + <li><a target="_blank" href="https://www.chromium.org/Home">Chromium</a> <sup><i>recommended</i></sup></li> + <li><a target="_blank" href="https://www.mozilla.org/firefox">Mozilla Firefox</a></li> + <li><a target="_blank" href="https://www.apple.com/safari">Apple Safari</a></li> + <li><a target="_blank" href="https://www.opera.com">Opera</a></li> + </ul> + </div> </div> </div> diff --git a/kvmd/web/js/atx.js b/kvmd/web/js/atx.js index cb0163ed..7e047176 100644 --- a/kvmd/web/js/atx.js +++ b/kvmd/web/js/atx.js @@ -38,17 +38,19 @@ function Atx() { }; var __clickButton = function(button, timeout, confirm_msg) { - if (confirm(confirm_msg)) { - var http = tools.makeRequest("POST", "/kvmd/atx/click?button=" + button, function() { - if (http.readyState === 4) { - if (http.status === 409) { - alert("Performing another ATX operation for other client, please try again later"); - } else if (http.status !== 200) { - alert("Click error:", http.responseText); + modal.confirm(confirm_msg).then(function(ok) { + if (ok) { + var http = tools.makeRequest("POST", "/kvmd/atx/click?button=" + button, function() { + if (http.readyState === 4) { + if (http.status === 409) { + modal.error("Performing another ATX operation for other client.<br>Please try again later"); + } else if (http.status !== 200) { + modal.error("Click error:<br>", http.responseText); + } } - } - }, timeout); - } + }, timeout); + } + }); }; var __setButtonsBusy = function(busy) { diff --git a/kvmd/web/js/hid.js b/kvmd/web/js/hid.js index 319b0327..eef503d1 100644 --- a/kvmd/web/js/hid.js +++ b/kvmd/web/js/hid.js @@ -123,32 +123,35 @@ function Hid() { var confirm_msg = ( "You are going to automatically type " + codes_count - + " characters from the system clipboard.\nAre you sure you want to continue?\n" - + "It will take " + (__codes_delay * codes_count * 2 / 1000) + " seconds." + + " characters from the system clipboard." + + "It will take " + (__codes_delay * codes_count * 2 / 1000) + " seconds.<br>" + + "<br>Are you sure you want to continue?<br>" ); - if (codes_count <= 256 || confirm(confirm_msg)) { - $("pak-button").disabled = true; - $("pak-led").className = "led-pak-typing"; - $("pak-led").title = "Autotyping..."; - - tools.debug("Paste-as-keys:", clipboard_text); - - var index = 0; - var iterate = function() { - __emitShortcut(clipboard_codes[index]).then(function() { - ++index; - if (index < clipboard_codes.length && __ws) { - iterate(); - } else { - $("pak-button").disabled = false; - $("pak-led").className = "led-off"; - $("pak-led").title = ""; - } - }); - }; - iterate(); - } + modal.confirm(confirm_msg).then(function(ok) { + if (ok) { + $("pak-button").disabled = true; + $("pak-led").className = "led-pak-typing"; + $("pak-led").title = "Autotyping..."; + + tools.debug("Paste-as-keys:", clipboard_text); + + var index = 0; + var iterate = function() { + __emitShortcut(clipboard_codes[index]).then(function() { + ++index; + if (index < clipboard_codes.length && __ws) { + iterate(); + } else { + $("pak-button").disabled = false; + $("pak-led").className = "led-off"; + $("pak-led").title = ""; + } + }); + }; + iterate(); + } + }); } }); }; diff --git a/kvmd/web/js/modal.js b/kvmd/web/js/modal.js new file mode 100644 index 00000000..b838a609 --- /dev/null +++ b/kvmd/web/js/modal.js @@ -0,0 +1,65 @@ +var modal = new function() { + this.error = (...args) => __modalDialog("Error", args.join(" "), true, false); + this.confirm = (...args) => __modalDialog("Question", args.join(" "), true, true); + + var __modalDialog = function(header, text, ok, cancel) { + var el_modal = document.createElement("div"); + el_modal.className = "modal"; + el_modal.style.visibility = "visible"; + el_modal.setAttribute("data-dont-hide-menu", ""); + + var el_window = document.createElement("div"); + el_window.className = "modal-window"; + el_window.setAttribute("tabindex", "-1"); + el_modal.appendChild(el_window); + + var el_header = document.createElement("div"); + el_header.className = "modal-header"; + el_header.innerHTML = header; + el_window.appendChild(el_header); + + var el_content = document.createElement("div"); + el_content.className = "modal-content"; + el_content.innerHTML = text; + el_window.appendChild(el_content); + + var promise = null; + if (ok || cancel) { + promise = new Promise(function(resolve) { + var el_buttons = document.createElement("div"); + el_buttons.className = "modal-buttons"; + el_window.appendChild(el_buttons); + + if (cancel) { + var el_cancel_button = document.createElement("button"); + el_cancel_button.innerHTML = "Cancel"; + el_cancel_button.setAttribute("data-force-hide-menu", ""); + el_cancel_button.onclick = function() { + el_modal.outerHTML = ""; + resolve(false); + }; + el_buttons.appendChild(el_cancel_button); + } + if (ok) { + var el_ok_button = document.createElement("button"); + el_ok_button.innerHTML = "OK"; + el_ok_button.setAttribute("data-force-hide-menu", ""); + el_ok_button.onclick = function() { + el_modal.outerHTML = ""; + resolve(true); + }; + el_buttons.appendChild(el_ok_button); + } + if (ok && cancel) { + el_ok_button.className = "row50"; + el_cancel_button.className = "row50"; + } + }); + } + + document.body.appendChild(el_modal); + el_window.focus(); + + return promise; + }; +}; diff --git a/kvmd/web/js/msd.js b/kvmd/web/js/msd.js index 1dfdd1d3..7652d4fe 100644 --- a/kvmd/web/js/msd.js +++ b/kvmd/web/js/msd.js @@ -65,7 +65,7 @@ function Msd() { var http = tools.makeRequest("POST", "/kvmd/msd/connect?to=" + to, function() { if (http.readyState === 4) { if (http.status !== 200) { - alert("Switch error:", http.responseText); + modal.error("Switch error:<br>", http.responseText); } } __applyState(); @@ -78,7 +78,7 @@ function Msd() { var el_input = $("msd-select-new-image-file"); var image_file = (el_input.files.length ? el_input.files[0] : null); if (image_file && image_file.size > __state.info.size) { - alert("New image is too big for your Mass Storage Device; maximum: " + __formatSize(__state.info.size)); + modal.error("New image is too big for your Mass Storage Device.<br>Maximum:", __formatSize(__state.info.size)); el_input.value = ""; image_file = null; } @@ -143,7 +143,7 @@ function Msd() { var __uploadStateChange = function() { if (__upload_http.readyState === 4) { if (__upload_http.status !== 200) { - alert("Can't upload image to the Mass Storage Device:", __upload_http.responseText); + modal.error("Can't upload image to the Mass Storage Device:<br>", __upload_http.responseText); } $("msd-select-new-image-file").value = ""; __image_file = null; diff --git a/kvmd/web/js/stream.js b/kvmd/web/js/stream.js index baee87c1..d6147310 100644 --- a/kvmd/web/js/stream.js +++ b/kvmd/web/js/stream.js @@ -60,7 +60,7 @@ function Stream(ui) { var http = tools.makeRequest("POST", "/kvmd/streamer/reset", function() { if (http.readyState === 4) { if (http.status !== 200) { - alert("Can't reset stream:", http.responseText); + modal.error("Can't reset stream:<br>", http.responseText); } } }); @@ -73,7 +73,7 @@ function Stream(ui) { var http = tools.makeRequest("POST", "/kvmd/streamer/set_params?resolution=" + resolution, function() { if (http.readyState === 4) { if (http.status !== 200) { - alert("Can't change stream:", http.responseText); + modal.error("Can't configure stream:<br>", http.responseText); } } }); |