From 55718ffa7f96cef9569ea9ed86824aba819cbdcf Mon Sep 17 00:00:00 2001
From: Shachar Itzhaky <corwin.amber@gmail.com>
Date: Fri, 14 May 2021 22:58:09 +0300
Subject: [PATCH] [feature] Settings panel UI.

A standard popup panel with checkboxes and links to GitHub and Zulip.

The settings currently don't do anything.
---
 ui-css/coq-base.css         |  62 +++++++++++++++++++++++++++++++++---
 ui-images/zulip-logo.png    | Bin 0 -> 17662 bytes
 ui-js/coq-layout-classic.js |  13 ++++++--
 ui-js/jscoq-loader.js       |   1 +
 ui-js/settings.js           |  49 ++++++++++++++++++++++++++++
 5 files changed, 119 insertions(+), 6 deletions(-)
 create mode 100644 ui-images/zulip-logo.png
 create mode 100644 ui-js/settings.js

diff --git a/ui-css/coq-base.css b/ui-css/coq-base.css
index f9b2cb3a..6c481134 100644
--- a/ui-css/coq-base.css
+++ b/ui-css/coq-base.css
@@ -335,8 +335,8 @@ body.jscoq-main .CodeMirror-linenumber {
 
 #toolbar .exits.right {
   position: absolute;
-  top: 4px;
-  right: 4px;
+  top: 0px;
+  right: 0px;
   transition: opacity 620ms ease-in;
 }
 
@@ -345,16 +345,59 @@ body.jscoq-main .CodeMirror-linenumber {
   transition: opacity 120ms linear;
 }
 
+#toolbar svg.app-menu-button {
+  height: 36px;
+  fill: #ccc;
+}
+#toolbar svg.app-menu-button:hover {
+  fill: #777;
+  background-color: #f2f6f2;
+}
+#toolbar svg.app-menu-button.active {
+  background-color: #676b67;
+  fill: #f2f6f2;
+}
+#toolbar svg.app-menu-button.active:hover {
+  background-color: #757a75;
+  fill: #f2f6f2;
+}
+
+div.settings-panel {
+  position: absolute;
+  right: 0;
+  top: 35px;
+  z-index: 99;
+  background: white;
+  border: 1px solid black;
+  min-width: 200px;
+  padding: .75em .75em .2em .75em;
+}
+
+div.settings-panel div.setting {
+  line-height: 1.75em;
+}
+
+div.settings-panel input.switch {
+  float: right;
+  height: 1.75em;
+  margin: 0;
+}
+
+div.settings-panel div.links {
+  margin-top: .2em;
+  text-align: right;
+}
+
 .link-to-github {
   word-spacing: -2px; /* aren't we picky */
 }
 
-.link-to-github::after {
+.link-to-github::after,
+.link-to-zulip::after {
   content: "";
   display: inline-block;
   height: 25px;
   width: 25px;
-  background: url(../ui-images/github.png);
   background-size: 25px 25px;
   background-repeat: no-repeat;
   vertical-align: middle;
@@ -363,6 +406,17 @@ body.jscoq-main .CodeMirror-linenumber {
   box-sizing: content-box;
 }
 
+.link-to-github::after {
+  background-image: url(../ui-images/github.png);
+}
+
+.link-to-zulip::after {
+  background-image: url(../ui-images/zulip-logo.png);
+  background-size: 20px 22px;
+  background-position: 3px 2px;
+  width: 23px;
+}
+
 #buttons {
   display: inline-block;
   text-align: left;
diff --git a/ui-images/zulip-logo.png b/ui-images/zulip-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..842091c933411298c360d02a54240edb40cb9fac
GIT binary patch
literal 17662
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

literal 0
HcmV?d00001

diff --git a/ui-js/coq-layout-classic.js b/ui-js/coq-layout-classic.js
index d9828977..f817c664 100644
--- a/ui-js/coq-layout-classic.js
+++ b/ui-js/coq-layout-classic.js
@@ -47,7 +47,11 @@ class CoqLayoutClassic {
         <button name="reset"       alt="Reset worker"               title="Reset worker"></button>
       </span>
       <div class="exits right">
-        <a href="https://github.com/jscoq/jscoq" class="link-to-github"></a>
+        <svg class="app-menu-button" viewBox="0 0 80 80">
+            <circle cx="40" cy="24" r="5"></circle>
+            <circle cx="40" cy="40" r="5"></circle>
+            <circle cx="40" cy="56" r="5"></circle>
+        </svg>    
       </div> <!-- /.exits -->
     </div> <!-- /#toolbar -->
     <div class="flex-container">
@@ -107,6 +111,8 @@ class CoqLayoutClassic {
         this.query    = this.panel.querySelector('#query-panel');
         this.packages = this.panel.querySelector('#packages-panel');
         this.buttons  = this.panel.querySelector('#buttons');
+        this.menubtn  = this.panel.querySelector('.app-menu-button');
+        this.settings = new SettingsPanel();
 
         var flex_container = this.panel.getElementsByClassName('flex-container')[0];
         flex_container.addEventListener('click', evt => { this.panelClickHandler(evt); });
@@ -120,10 +126,13 @@ class CoqLayoutClassic {
         this.onAction = evt => {};
         this.buttons.addEventListener('click', evt => this.onAction(evt));
 
+        this.menubtn.addEventListener('click', () =>
+            this.menubtn.classList.toggle('active', this.settings.toggle()));
+
         // Configure log
         this.log_levels = ['Error', 'Warning', 'Notice', 'Info', 'Debug']
         $(this.panel).find('select[name=msg_filter]')
-            .change(ev => this.filterLog(parseInt(ev.target.value)));
+            .on('change', ev => this.filterLog(parseInt(ev.target.value)));
         this.filterLog(3); // Info
 
         this._preloadImages();
diff --git a/ui-js/jscoq-loader.js b/ui-js/jscoq-loader.js
index 87434c5b..32f46d2b 100644
--- a/ui-js/jscoq-loader.js
+++ b/ui-js/jscoq-loader.js
@@ -81,6 +81,7 @@ var loadJsCoq, JsCoq;
                      base_path + 'ui-js/addon/company-coq',
                      base_path + 'ui-js/cm-provider',
                      base_path + 'ui-js/format-pprint',
+                     base_path + 'ui-js/settings',
                      base_path + 'ui-js/coq-packages',
                      base_path + 'ui-js/coq-layout-classic',
                      base_path + 'ui-js/coq-manager'];
diff --git a/ui-js/settings.js b/ui-js/settings.js
new file mode 100644
index 00000000..d4412ac2
--- /dev/null
+++ b/ui-js/settings.js
@@ -0,0 +1,49 @@
+
+class SettingsPanel {
+    html() {
+        return `
+        <div class="settings-panel">
+            <div>
+                <label for="settings--theme">
+                    <div class="setting">
+                        Light switch</label>
+                        <input id="settings--theme" type="checkbox" class="switch">
+                    </div>
+                </label>
+                <label for="settings--company">
+                    <div class="setting">
+                        Enable company-coq
+                        <input id="settings--company" type="checkbox" class="switch">
+                    </div>
+                </label>
+            </div>
+            <div class="links">
+                <a href="https://coq.zulipchat.com/#narrow/stream/256336-jsCoq" title="Zulip" class="link-to-zulip"></a>
+                <a href="https://github.com/jscoq/jscoq" title="GitHub" class="link-to-github"></a>
+            </div>
+        </div>
+        `;
+    }
+
+    constructor() {
+        this.el = $(this.html());
+    }
+
+    show() {
+        $(document.body).append(this.el);
+    }
+
+    hide() {
+        this.el.remove();
+    }
+
+    toggle() {
+        if (this.isShown()) this.hide();
+        else this.show();
+        return this.isShown();
+    }
+
+    isShown() {
+        return this.el.parent().length > 0;
+    }
+}
\ No newline at end of file
-- 
GitLab