You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by ru...@apache.org on 2017/12/08 02:10:03 UTC

[whimsy] branch master updated: message notes

This is an automated email from the ASF dual-hosted git repository.

rubys pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
     new bc96980  message notes
bc96980 is described below

commit bc969805038b606d1b34c8d0b616ac2691cd0e09
Author: Sam Ruby <ru...@intertwingly.net>
AuthorDate: Thu Dec 7 21:09:35 2017 -0500

    message notes
---
 www/board/agenda/views/sw.js.rb                    | 20 +++++++++++++
 www/secretary/workbench/views/actions/note.json.rb | 13 +++++++++
 www/secretary/workbench/views/app.js.rb            |  5 ++--
 www/secretary/workbench/views/forms/note.js.rb     | 34 ++++++++++++++++++++++
 www/secretary/workbench/views/parts.js.rb          | 24 ++++++++++++++-
 5 files changed, 93 insertions(+), 3 deletions(-)

diff --git a/www/board/agenda/views/sw.js.rb b/www/board/agenda/views/sw.js.rb
index e24e1b0..4a277d7 100644
--- a/www/board/agenda/views/sw.js.rb
+++ b/www/board/agenda/views/sw.js.rb
@@ -99,6 +99,18 @@ def fetch_from_cache(event)
   end
 end
 
+# fetch from network with timeout
+def fetch_from_network(event, timeout)
+  return Promise.new do |fulfill, reject|
+    timeout = setTimeout(reject, timeout)
+    fetch(event.request).then(lambda {|response|
+      clearTimeout(timeout)
+      cache_replace(cache, event.request, response.clone())
+      fulfill(response)
+    }, reject)
+  end
+end
+
 # Return a bootstrap.html page within 0.5 seconds.  If the network responds
 # in time, go with that response, otherwise respond with a cached version.
 def bootstrap(event, request)
@@ -183,6 +195,14 @@ self.addEventListener :fetch do |event|
       # cache and respond to js and css requests
       event.respondWith(fetch_from_cache(event))
 
+    elsif url == '/' or url == ''
+      console.log '=' + url.inspect
+      # respond from network, with 1 second timeout; else use cache
+      event.respondWith(fetch_from_network(event, 1_000).catch {
+        return fetch_from_cache(event)
+      })
+    else
+      console.log '?' + url.inspect
     end
   end
 end
diff --git a/www/secretary/workbench/views/actions/note.json.rb b/www/secretary/workbench/views/actions/note.json.rb
new file mode 100644
index 0000000..a10132c
--- /dev/null
+++ b/www/secretary/workbench/views/actions/note.json.rb
@@ -0,0 +1,13 @@
+#
+# Add/replace a note
+#
+
+# extract message
+message = Mailbox.find(@message)
+
+# update notes
+message.headers[:secmail] ||= {}
+message.headers[:secmail][:notes] = @notes
+
+# update message
+message.write_headers
diff --git a/www/secretary/workbench/views/app.js.rb b/www/secretary/workbench/views/app.js.rb
index 1da7f7b..92b2944 100644
--- a/www/secretary/workbench/views/app.js.rb
+++ b/www/secretary/workbench/views/app.js.rb
@@ -12,6 +12,7 @@ require_relative 'forms/icla'
 require_relative 'forms/icla2'
 require_relative 'forms/grant'
 require_relative 'forms/ccla'
-require_relative 'forms/nda'
-require_relative 'forms/memapp'
 require_relative 'forms/forward'
+require_relative 'forms/memapp'
+require_relative 'forms/nda'
+require_relative 'forms/note'
diff --git a/www/secretary/workbench/views/forms/note.js.rb b/www/secretary/workbench/views/forms/note.js.rb
new file mode 100644
index 0000000..b1f3149
--- /dev/null
+++ b/www/secretary/workbench/views/forms/note.js.rb
@@ -0,0 +1,34 @@
+#
+# Add/edit message notes
+#
+
+class Note < Vue
+  def render
+    _div.partmail! do
+      _h3 'Note'
+      _textarea value: @notes, name: 'notes'
+
+      _input.btn.btn_primary value: 'Save', type: 'submit', 
+        onClick: submit
+    end
+  end
+
+  def created()
+    @@headers.secmail ||= {}
+    @@headers.secmail.notes ||= ''
+    @notes = @@headers.secmail.notes
+  end
+
+  def submit()
+    data = {
+      message: window.parent.location.pathname,
+      notes: @notes
+    }
+
+    HTTP.post('../../actions/note', data).then {|result|
+      window.location.reload()
+    }.catch {|message|
+      alert message
+    }
+  end
+end
diff --git a/www/secretary/workbench/views/parts.js.rb b/www/secretary/workbench/views/parts.js.rb
index c27b7bf..e5c21eb 100644
--- a/www/secretary/workbench/views/parts.js.rb
+++ b/www/secretary/workbench/views/parts.js.rb
@@ -65,6 +65,13 @@ class Parts < Vue
       _div.alert.alert_info @headers.secmail.status
     end
 
+    if @headers and @headers.secmail and @headers.secmail.notes
+      _div.alert.alert_warning do
+        _h5 'Notes:'
+        _span @headers.secmail.notes
+      end
+    end
+
     # context menu that displays when you 'right click' an attachment
     _ul.contextMenu do
       _li "\u2704 burst", onMousedown: self.burst
@@ -173,6 +180,18 @@ class Parts < Vue
               onClick: -> {@form = Forward}
             _span 'forward email'
           end
+
+          _hr
+
+          _label do
+            _input type: 'radio', name: 'doctype', value: 'forward',
+              onClick: -> {@form = Note}
+            if @headers and @headers.secmail and @headers.secmail.notes
+              _span 'edit note'
+            else
+              _span 'add note'
+            end
+          end
         end
 
       elsif @form == :edit
@@ -239,7 +258,10 @@ class Parts < Vue
     window.parent.onkeydown = self.keydown
     frames = window.parent.frames
     for i in 0...frames.length
-      frames[i].onkeydown=self.keydown
+      begin
+        frames[i].onkeydown=self.keydown
+      rescue => error
+      end
     end
 
     self.hideMenu()

-- 
To stop receiving notification emails like this one, please contact
['"commits@whimsical.apache.org" <co...@whimsical.apache.org>'].