redo adjournment state; convert self.forceUpdate calls to Vue
diff --git a/www/board/agenda/views/pages/adjournment.js.rb b/www/board/agenda/views/pages/adjournment.js.rb
index 74b027d..2dc8ea1 100644
--- a/www/board/agenda/views/pages/adjournment.js.rb
+++ b/www/board/agenda/views/pages/adjournment.js.rb
@@ -4,15 +4,38 @@
 
 class Adjournment < Vue
   def initialize
-    Todos.set({
-      add: [],
-      remove: [],
-      establish: [],
-      feedback: [],
-      minutes: {},
-      loading: true,
-      fetched: false
-    })
+    @add = []
+    @remove = []
+    @establish = []
+    @feedback = []
+    @minutes = {}
+    @loading = true
+    @fetched = false
+  end
+
+  # export self as shared state
+  def created()
+    if defined? global
+      global.Todos = self
+    else
+      window.Todos = self
+    end
+  end
+
+  # update state
+  def set(value)
+    for attr in value
+      Todos[attr] = value[attr]
+    end
+  end
+
+  # find corresponding agenda item
+  def link(title)
+    link = nil
+    Agenda.index.each do |item|
+      link = item.href if item.title == title
+    end
+    return link
   end
 
   def render
@@ -156,7 +179,7 @@
     end
     @disabled = disabled
 
-    self.forceUpdate()
+    Vue.forceUpdate()
   end
 
   def render
@@ -247,7 +270,7 @@
     end
     @disabled = disabled
 
-    self.forceUpdate()
+    Vue.forceUpdate()
   end
 
   def render
@@ -307,24 +330,3 @@
       onClick:-> {window.location.href = 'feedback'}
   end
 end
-
-########################################################################
-#                             shared state                             #
-########################################################################
-
-class Todos
-  def self.set(value)
-    for attr in value
-      Todos[attr] = value[attr]
-    end
-  end
-
-  # find corresponding agenda item
-  def self.link(title)
-    link = nil
-    Agenda.index.each do |item|
-      link = item.href if item.title == title
-    end
-    return link
-  end
-end
diff --git a/www/board/agenda/views/pages/fy22.js.rb b/www/board/agenda/views/pages/fy22.js.rb
index dab699e..e246b05 100644
--- a/www/board/agenda/views/pages/fy22.js.rb
+++ b/www/board/agenda/views/pages/fy22.js.rb
@@ -323,7 +323,7 @@
       end
     end
 
-    self.forceUpdate()
+    Vue.forceUpdate()
   end
 
   # receive updated budget values
diff --git a/www/board/agenda/views/pages/missing.js.rb b/www/board/agenda/views/pages/missing.js.rb
index 6bb81f4..d5b1a3f 100644
--- a/www/board/agenda/views/pages/missing.js.rb
+++ b/www/board/agenda/views/pages/missing.js.rb
@@ -24,7 +24,7 @@
             _input type: 'checkbox', name: 'selected', value: item.title,
               checked: @checked[item.title], onChange:-> {
                 @checked[item.title] = !@checked[item.title]
-                self.forceUpdate()
+                Vue.forceUpdate()
               }
           end
 
diff --git a/www/board/agenda/views/pages/select-actions.rb b/www/board/agenda/views/pages/select-actions.rb
index f1d524c..432fc3a 100644
--- a/www/board/agenda/views/pages/select-actions.rb
+++ b/www/board/agenda/views/pages/select-actions.rb
@@ -40,7 +40,7 @@
 class CandidateAction < Vue
   def render
     _input type: 'checkbox', checked: !@@action.complete,
-      onChange:-> {@@action.complete = !@@action.complete; self.forceUpdate()}
+      onChange:-> {@@action.complete = !@@action.complete; Vue.forceUpdate()}
     _span " "
     _span @@action.owner
     _span ": "