Author: humbedooh
Date: Wed Aug  7 15:02:33 2019
New Revision: 1864627

URL: http://svn.apache.org/viewvc?rev=1864627&view=rev
Log:
Add a 'save checker' that reminds you to save when you have unsaved changes to 
your report.

At the same time, rework the stepper a bit, to cut down on the number of times 
we redraw the helper panel.

Modified:
    comdev/reporter.apache.org/trunk/site/wizard/css/wizard.css
    comdev/reporter.apache.org/trunk/site/wizard/index.html
    comdev/reporter.apache.org/trunk/site/wizard/js/source/drafts.js
    comdev/reporter.apache.org/trunk/site/wizard/js/source/stepper.js
    comdev/reporter.apache.org/trunk/site/wizard/js/source/unified.js
    comdev/reporter.apache.org/trunk/site/wizard/js/wizard.js

Modified: comdev/reporter.apache.org/trunk/site/wizard/css/wizard.css
URL: 
http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/site/wizard/css/wizard.css?rev=1864627&r1=1864626&r2=1864627&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/site/wizard/css/wizard.css (original)
+++ comdev/reporter.apache.org/trunk/site/wizard/css/wizard.css Wed Aug  7 
15:02:33 2019
@@ -16,6 +16,21 @@ body {
     vertical-align:top;
 }
 
+#unified-saver {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ width: 100%;
+ height: 32px;
+ padding: 4px;
+ z-index: 1000;
+ background: #333B;
+ color: #FFF;
+ font-weight: 600;
+ line-height: 24px;
+}
+
 .wizard-step {
     width: 64px !important;
     height: 64px;
@@ -172,6 +187,7 @@ body {
  
 
 #unified-helper {
+  position: relative;
   border-top-right-radius: 5px;
   border-bottom-right-radius: 5px;
   display: inline-block;

Modified: comdev/reporter.apache.org/trunk/site/wizard/index.html
URL: 
http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/site/wizard/index.html?rev=1864627&r1=1864626&r2=1864627&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/site/wizard/index.html (original)
+++ comdev/reporter.apache.org/trunk/site/wizard/index.html Wed Aug  7 15:02:33 
2019
@@ -13,8 +13,8 @@
 
 <title>ASF Board Report Wizard</title>
 <link rel="stylesheet" media="screen" 
href="https://fontlibrary.org/face/selawik"; type="text/css"/> 
-<link rel="stylesheet" href="css/wizard.css?unified-1.0"/>
-<link rel="stylesheet" href="highlighter/highlighter.css?unified-1.0"/>
+<link rel="stylesheet" href="css/wizard.css?unified-1.1"/>
+<link rel="stylesheet" href="highlighter/highlighter.css?unified-1.1"/>
 <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"; 
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
 crossorigin="anonymous">
 </head>
 <body onload="init_wizard(false);">
@@ -62,7 +62,7 @@
 <script 
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"; 
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
 crossorigin="anonymous"></script>
 <script 
src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js";></script>
 <script src="highlighter/highlighter.js" type="text/javascript"></script>
-<script src="js/wizard.js" type="text/javascript"></script>
+<script src="js/wizard.js?unified-1.1" type="text/javascript"></script>
 </body>
 </html>
 

Modified: comdev/reporter.apache.org/trunk/site/wizard/js/source/drafts.js
URL: 
http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/site/wizard/js/source/drafts.js?rev=1864627&r1=1864626&r2=1864627&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/site/wizard/js/source/drafts.js (original)
+++ comdev/reporter.apache.org/trunk/site/wizard/js/source/drafts.js Wed Aug  7 
15:02:33 2019
@@ -31,6 +31,7 @@ function draft_saved(state, json) {
     document.getElementById("pname").style.display = 'block';
     
     if (json.filename) {
+        draft_stepper.editor.check_changes(true);
         modal("Draft was saved in the reporter database as <kbd>%s</kbd>. You 
can revisit this draft at any time by loading it from the base data tab. Drafts 
are kept for up to two months.".format(json.filename));
         let obj = {
           yours: true,
@@ -55,6 +56,7 @@ function read_draft(state, json) {
         draft_stepper.editor.report = json.report;
         window.setTimeout(() => { draft_stepper.editor.highlight() }, 250);
         draft_stepper.build(0, false, false);
+        draft_stepper.editor.check_changes(true);
         modal("Draft was successfully loaded and is ready.");
     } else {
         modal("Could not load report draft :/");
@@ -159,6 +161,7 @@ function report_published(state, json) {
   
   if (json && json.okay) {
     modal("Your report was successfully posted to the board agenda!");
+    draft_stepper.editor.check_changes(true);
   } else {
     modal("Something went wrong, and we couldn't publish your 
report.<br/>Please check with the Whimsy tool to see if there is already a 
report posted!");
   }

Modified: comdev/reporter.apache.org/trunk/site/wizard/js/source/stepper.js
URL: 
http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/site/wizard/js/source/stepper.js?rev=1864627&r1=1864626&r2=1864627&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/site/wizard/js/source/stepper.js (original)
+++ comdev/reporter.apache.org/trunk/site/wizard/js/source/stepper.js Wed Aug  
7 15:02:33 2019
@@ -29,10 +29,14 @@ function ReportStepper(div, editor, layo
         
         if (start) {
             this.editor.reset();
+            this.editor.report_saved = this.editor.report;
         }
         
         
         if (this.changed) this.editor.highlight();
+        // skip building if nothing changed
+        if (!this.changed && !start && this.editor.report == 
this.editor.last_cursor_report) return;
+        this.editor.last_cursor_report = this.editor.report;
         
         // build the step div
         this.object.innerHTML = '';

Modified: comdev/reporter.apache.org/trunk/site/wizard/js/source/unified.js
URL: 
http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/site/wizard/js/source/unified.js?rev=1864627&r1=1864626&r2=1864627&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/site/wizard/js/source/unified.js (original)
+++ comdev/reporter.apache.org/trunk/site/wizard/js/source/unified.js Wed Aug  
7 15:02:33 2019
@@ -65,6 +65,7 @@ function UnifiedEditor_highlight_section
             );
         $(this.object).focus();
     }
+    
 }
 
 
@@ -158,6 +159,8 @@ function UnifiedEditor_parse_report(quie
       }
       
     }
+    
+    this.check_changes();
 }
 
 
@@ -269,6 +272,27 @@ function UnifiedEditor_compile() {
     return text;
 }
 
+function UnifiedEditor_check_changes(force) {
+    if (force) {
+        this.report_saved = this.report;
+    }
+    let saver = document.getElementById('unified-saver');
+    if (!saver && this.stepper && this.stepper.helper) {
+        saver = new HTML('div', {id: 'unified-saver'});
+        this.stepper.helper.inject(saver);
+    }
+    if (this.report != this.report_saved) {
+        if (saver) {
+            saver.innerText = "Current changes not saved yet - ";
+            let btn = new HTML('button', { onclick: 'save_draft();', class: 
'btn btn-warning btn-sm'}, 'Save draft');
+            saver.inject(btn);
+            saver.style.display = 'inline-block';
+        }
+    } else if (saver) {
+        saver.style.display = 'none';
+    }
+}
+
 
 // This is the Unfied Editor for reports.
 function UnifiedEditor(div, layout) {
@@ -294,6 +318,7 @@ function UnifiedEditor(div, layout) {
     this.reset = UnifiedEditor_reset;
     this.find_section = UnifiedEditor_find_section;
     this.compile = UnifiedEditor_compile;
+    this.check_changes = UnifiedEditor_check_changes;
     
     // set div events
     this.object.addEventListener('keyup', () => { this.find_section(true); });

Modified: comdev/reporter.apache.org/trunk/site/wizard/js/wizard.js
URL: 
http://svn.apache.org/viewvc/comdev/reporter.apache.org/trunk/site/wizard/js/wizard.js?rev=1864627&r1=1864626&r2=1864627&view=diff
==============================================================================
--- comdev/reporter.apache.org/trunk/site/wizard/js/wizard.js (original)
+++ comdev/reporter.apache.org/trunk/site/wizard/js/wizard.js Wed Aug  7 
15:02:33 2019
@@ -1046,6 +1046,7 @@ function draft_saved(state, json) {
     document.getElementById("pname").style.display = 'block';
     
     if (json.filename) {
+        draft_stepper.editor.check_changes(true);
         modal("Draft was saved in the reporter database as <kbd>%s</kbd>. You 
can revisit this draft at any time by loading it from the base data tab. Drafts 
are kept for up to two months.".format(json.filename));
         let obj = {
           yours: true,
@@ -1070,6 +1071,7 @@ function read_draft(state, json) {
         draft_stepper.editor.report = json.report;
         window.setTimeout(() => { draft_stepper.editor.highlight() }, 250);
         draft_stepper.build(0, false, false);
+        draft_stepper.editor.check_changes(true);
         modal("Draft was successfully loaded and is ready.");
     } else {
         modal("Could not load report draft :/");
@@ -1174,6 +1176,7 @@ function report_published(state, json) {
   
   if (json && json.okay) {
     modal("Your report was successfully posted to the board agenda!");
+    draft_stepper.editor.check_changes(true);
   } else {
     modal("Something went wrong, and we couldn't publish your 
report.<br/>Please check with the Whimsy tool to see if there is already a 
report posted!");
   }
@@ -3141,10 +3144,14 @@ function ReportStepper(div, editor, layo
         
         if (start) {
             this.editor.reset();
+            this.editor.report_saved = this.editor.report;
         }
         
         
         if (this.changed) this.editor.highlight();
+        // skip building if nothing changed
+        if (!this.changed && !start && this.editor.report == 
this.editor.last_cursor_report) return;
+        this.editor.last_cursor_report = this.editor.report;
         
         // build the step div
         this.object.innerHTML = '';
@@ -3308,6 +3315,7 @@ function UnifiedEditor_highlight_section
             );
         $(this.object).focus();
     }
+    
 }
 
 
@@ -3401,6 +3409,8 @@ function UnifiedEditor_parse_report(quie
       }
       
     }
+    
+    this.check_changes();
 }
 
 
@@ -3512,6 +3522,27 @@ function UnifiedEditor_compile() {
     return text;
 }
 
+function UnifiedEditor_check_changes(force) {
+    if (force) {
+        this.report_saved = this.report;
+    }
+    let saver = document.getElementById('unified-saver');
+    if (!saver && this.stepper && this.stepper.helper) {
+        saver = new HTML('div', {id: 'unified-saver'});
+        this.stepper.helper.inject(saver);
+    }
+    if (this.report != this.report_saved) {
+        if (saver) {
+            saver.innerText = "Current changes not saved yet - ";
+            let btn = new HTML('button', { onclick: 'save_draft();', class: 
'btn btn-warning btn-sm'}, 'Save draft');
+            saver.inject(btn);
+            saver.style.display = 'inline-block';
+        }
+    } else if (saver) {
+        saver.style.display = 'none';
+    }
+}
+
 
 // This is the Unfied Editor for reports.
 function UnifiedEditor(div, layout) {
@@ -3537,6 +3568,7 @@ function UnifiedEditor(div, layout) {
     this.reset = UnifiedEditor_reset;
     this.find_section = UnifiedEditor_find_section;
     this.compile = UnifiedEditor_compile;
+    this.check_changes = UnifiedEditor_check_changes;
     
     // set div events
     this.object.addEventListener('keyup', () => { this.find_section(true); });


Reply via email to