You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by Sam Ruby <ru...@apache.org> on 2016/02/14 16:57:06 UTC

[whimsy.git] [1/1] Commit 6daeafa: select on search => add to list

Commit 6daeafa1e6214a681b13c7fd97c12e5fbb573426:
    select on search => add to list


Branch: refs/heads/master
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>

------------------------------------------------------------
www/roster/views/committee.js.rb                             | ++++++++ ---
www/roster/views/committerSearch.js.rb                       | +++++++++ --
------------------------------------------------------------
186 changes: 143 additions, 43 deletions.
------------------------------------------------------------


diff --git a/www/roster/views/committee.js.rb b/www/roster/views/committee.js.rb
index 4cb1b87..524e25e 100644
--- a/www/roster/views/committee.js.rb
+++ b/www/roster/views/committee.js.rb
@@ -15,14 +15,17 @@ def render
 
     _p @@committee.description
 
-    _div.alert.alert_success 'Double click on a row to edit' if auth
+    if auth
+      _div.alert.alert_success 'Double click on a row to edit.  ' +
+        "Double click on \u2795 to add."
+    end
 
     # main content
     _PMCMembers auth: @@auth, committee: @@committee
     _PMCCommitters auth: @@auth, committee: @@committee
 
-    # hidden form
-    _PMCConfirm if @@auth
+    # hidden orm
+    _PMCConfirm if auth
   end
 end
 
@@ -32,6 +35,7 @@ def render
 
 class PMCMembers < React
   def initialize
+    @roster = {}
     @state = :closed
   end
 
@@ -46,18 +50,15 @@ def render
         end
       end
 
-      roster = @@committee.roster
-
-      for id in roster
-        person = roster[id]
-        person.id = id
-
-        _PMCMember auth: @@auth, person: person, committee: @@committee
-      end
+      _tbody do
+        @roster.each do |person|
+          _PMCMember auth: @@auth, person: person, committee: @@committee
+        end
 
-      if @@auth
-        _tr onDoubleClick: self.select do
-          _td((@state == :open ? '' : '+'), colspan: 4)
+        if @@auth
+          _tr onDoubleClick: self.select do
+            _td((@state == :open ? '' : "\u2795"), colspan: 4)
+          end
         end
       end
     end
@@ -69,13 +70,34 @@ def render
    end
   end
 
-  def select
+  # update props on initial load
+  def componentWillMount()
+    self.componentWillReceiveProps()
+  end
+
+  # compute roster
+  def componentWillReceiveProps()
+    @roster = []
+    
+    for id in @@committee.roster
+      person = @@committee.roster[id]
+      person.id = id
+      @roster << person
+    end
+  end
+
+  # open search box
+  def select()
     return unless @@auth
     window.getSelection().removeAllRanges()
     @state = ( @state == :open ? :closed : :open )
   end
 
+  # add a person to the displayed list of PMC members
   def add(person)
+    person.date = 'pending'
+    @roster << person
+    @state = :closed
   end
 end
 
@@ -97,17 +119,16 @@ def render
           end
         end
 
-        committers = @@committee.committers
-
-        for id in committers
-          next if @@committee.roster[id]
-          _PMCCommitter auth: @@auth, person: {id: id, name: committers[id]},
-            committee: @@committee
-        end
+        _tbody do
+          @committers.each do |person|
+            next if @@committee.roster[person.id]
+            _PMCCommitter auth: @@auth, person: person, committee: @@committee
+          end
 
-        if @@auth
-          _tr onDoubleClick: self.select do
-            _td((@state == :open ? '' : '+'), colspan: 4)
+          if @@auth
+            _tr onDoubleClick: self.select do
+              _td((@state == :open ? '' : '+'), colspan: 4)
+            end
           end
         end
       end
@@ -120,13 +141,32 @@ def render
     end
   end
 
-  def select
+  # update props on initial load
+  def componentWillMount()
+    self.componentWillReceiveProps()
+  end
+
+  # compute list of committers
+  def componentWillReceiveProps()
+    @committers = []
+    
+    for id in @@committee.committers
+      @committers << {id: id, name: @@committee.committers[id]}
+    end
+  end
+
+  # open search box
+  def select()
     return unless @@auth
     window.getSelection().removeAllRanges()
     @state = ( @state == :open ? :closed : :open )
   end
 
+  # add a person to the displayed list of committers
   def add(person)
+    person.date = 'pending'
+    @committers << person
+    @state = :closed
   end
 end
 
@@ -147,10 +187,22 @@ def render
 
       if @state == :open
         _td do 
-          _button.btn.btn_warning 'Remove from PMC', data_target: '#confirm',
-            data_toggle: 'modal',
-            data_confirmation: "Remove #{@@person.name} from the " +
-              "#{@@committee.display_name} PMC?"
+          if @@person.date == 'pending'
+           _button.btn.btn_primary 'Add as a committer and to the PMC',
+             data_target: '#confirm', data_toggle: 'modal',
+             data_confirmation: "Add #{@@person.name} to the " +
+               "#{@@committee.display_name} PMC and grant committer access?"
+
+           _button.btn.btn_warning 'Add to PMC only', data_target: '#confirm',
+             data_toggle: 'modal',
+             data_confirmation: "Add #{@@person.name} to the " +
+               "#{@@committee.display_name} PMC?"
+          else
+            _button.btn.btn_warning 'Remove from PMC',
+              data_target: '#confirm', data_toggle: 'modal',
+              data_confirmation: "Remove #{@@person.name} from the " +
+                "#{@@committee.display_name} PMC?"
+          end
         end
       elsif @@person.id == @@committee.chair
         _td.chair 'chair'
@@ -160,7 +212,18 @@ def render
     end
   end
 
-  def select
+  # update props on initial load
+  def componentWillMount()
+    self.componentWillReceiveProps()
+  end
+
+  # automatically open pending entries
+  def componentWillReceiveProps()
+    @state = :open if @@person.date == 'pending'
+  end
+
+  # toggle display of buttons
+  def select()
     return unless @@auth
     window.getSelection().removeAllRanges()
     @state = ( @state == :open ? :closed : :open )
@@ -183,14 +246,25 @@ def render
 
       if @state == :open
         _td do
-          _button.btn.btn_warning 'Remove as Committer',
-            data_target: '#confirm', data_toggle: 'modal',
-            data_confirmation: "Remove #{@@person.name} as a Committer?"
-
-          _button.btn.btn_primary 'Add to PMC',
-            data_target: '#confirm', data_toggle: 'modal',
-            data_confirmation: "Add #{@@person.name} to the " +
-              "#{@@committee.display_name} PMC?"
+          if @@person.date == 'pending'
+             _button.btn.btn_primary 'Add as a committer only',
+               data_target: '#confirm', data_toggle: 'modal',
+               data_confirmation: "Grant #{@@person.name} committer access?"
+
+             _button.btn.btn_success 'Add as a committer and to the PMC',
+               data_target: '#confirm', data_toggle: 'modal',
+               data_confirmation: "Add #{@@person.name} to the " +
+                 "#{@@committee.display_name} PMC and grant committer access?"
+          else
+            _button.btn.btn_warning 'Remove as Committer',
+              data_target: '#confirm', data_toggle: 'modal',
+              data_confirmation: "Remove #{@@person.name} as a Committer?"
+
+            _button.btn.btn_primary 'Add to PMC',
+              data_target: '#confirm', data_toggle: 'modal',
+              data_confirmation: "Add #{@@person.name} to the " +
+                "#{@@committee.display_name} PMC?"
+          end
         end
       else
         _td ''
@@ -198,7 +272,18 @@ def render
     end
   end
 
-  def select
+  # update props on initial load
+  def componentWillMount()
+    self.componentWillReceiveProps()
+  end
+
+  # automatically open pending entries
+  def componentWillReceiveProps()
+    @state = :open if @@person.date == 'pending'
+  end
+
+  # toggle display of buttons
+  def select()
     return unless @@auth
     window.getSelection().removeAllRanges()
     @state = ( @state == :open ? :closed : :open )
diff --git a/www/roster/views/committerSearch.js.rb b/www/roster/views/committerSearch.js.rb
index bb9db6a..2ccad41 100644
--- a/www/roster/views/committerSearch.js.rb
+++ b/www/roster/views/committerSearch.js.rb
@@ -68,18 +68,18 @@ def render
         elsif list.length > 99
           _p "#{list.length} entries match"
         else
-          _table do
+          _table.table.table_hover do
             _thead do
               _tr do
                 _th 'id'
-                _th 'name'
+                _th 'public name'
                 _th 'email'
               end
             end
 
             _tbody do
               list.each do |person|
-                _tr do
+                _tr data_id: person.id, onDoubleClick: self.select do
                   _td {_a person.id, href: "committer/#{person.id}"}
 
                   if person.member
@@ -91,10 +91,25 @@ def render
                   _td person.mail.first
                 end
               end
+
+              if @@add
+                _tr.alert_success do
+                  _td 'Double click on a row to add', colspan: 3
+                end
+              end
             end
           end
+
         end
       end
     end
   end
+
+  def select(event)
+    if @@add
+      id = event.currentTarget.dataset.id
+      person = @list.find {|person| person.id == id}
+      @@add.call(person)
+    end
+  end
 end