Commit 3fa92b2aef17a1a5a70f89525c3ba5f801b73537: brute force an item page Branch: refs/heads/master Author: Sam Ruby Committer: Sam Ruby Pusher: rubys ------------------------------------------------------------ main.rb | + spec/item_spec.rb | ++++++++++++++ views/agenda.js.rb | +++++++++ - views/main.html.rb | + - views/main.js.rb | +++++++ --- ------------------------------------------------------------ 75 changes: 61 additions, 14 deletions. ------------------------------------------------------------ diff --git a/main.rb b/main.rb index b133516..2597c32 100755 --- a/main.rb +++ b/main.rb @@ -31,6 +31,7 @@ Dir.chdir(FOUNDATION_BOARD) {@agendas = Dir['board_agenda_*.txt'].sort} Dir.chdir(FOUNDATION_BOARD) {@drafts = Dir['board_minutes_*.txt'].sort} @base = env['PATH_INFO'].chomp(path).untaint + @path = path @agenda = "board_agenda_#{date.gsub('-','_')}.txt" if AGENDA_CACHE[@agenda][:mtime] == 0 diff --git a/spec/item_spec.rb b/spec/item_spec.rb new file mode 100644 index 0000000..be7a89b --- /dev/null +++ b/spec/item_spec.rb @@ -0,0 +1,14 @@ +require_relative 'spec_helper' + +feature 'item' do + it "should show the Secretary report" do + visit '/2014-02-19/Secretary' + expect(page).to have_selector '.navbar-fixed-top .navbar-brand', + text: 'Secretary' + expect(page).to have_selector 'pre', text: /December doldrums/ + expect(page).to have_selector '.backlink[href="Treasurer"]', + text: 'Treasurer' + expect(page).to have_selector '.nextlink[href="Executive-Vice-President"]', + text: 'Executive Vice President' + end +end diff --git a/views/agenda.js.rb b/views/agenda.js.rb index e1df46a..bcbbbc5 100644 --- a/views/agenda.js.rb +++ b/views/agenda.js.rb @@ -3,12 +3,25 @@ class Agenda def self.load(list) @@index.clear() + prev = nil list.each do |item| - @@index << Agenda.new(item) + item = Agenda.new(item) + item.prev = prev + prev.next = item if prev + prev = item + @@index << item end return @@index end + def self.find(path) + result = nil + @@index.each do |item| + result = item if item.href == path + end + return result + end + def initialize(entry) for name in entry self["_#{name}"] = entry[name] @@ -21,6 +34,10 @@ def href @title.gsub(/[^a-zA-Z0-9]+/, '-') end + def text + @text || @report + end + def color if not @title 'blank' diff --git a/views/main.html.rb b/views/main.html.rb index 78f7b5d..21fec60 100755 --- a/views/main.html.rb +++ b/views/main.html.rb @@ -13,6 +13,6 @@ _script src: '../app.js' _.render '#main' do - _Main parsed: @parsed, agenda: @agenda, agendas: @agendas + _Main parsed: @parsed, agenda: @agenda, agendas: @agendas, path: @path end end diff --git a/views/main.js.rb b/views/main.js.rb index 7a94785..862c77b 100644 --- a/views/main.js.rb +++ b/views/main.js.rb @@ -1,26 +1,36 @@ class Main < React def initialize @agenda = Agenda.load(@@parsed) - @date = @@agenda[/(\d+_\d+_\d+)/, 1].gsub('_', '-') @next = {text: 'Help', link: 'help'} @prev = {text: 'Help', link: 'help'} - @@agendas.each do |agenda| - date = agenda[/(\d+_\d+_\d+)/, 1].gsub('_', '-') + if @@path + @item = Agenda.find(@@path) + @prev = {text: @item.prev.title, link: @item.prev.href} if @item.prev + @next = {text: @item.next.title, link: @item.next.href} if @item.next + @color = @item.color + @title = @item.title + else + @date = @@agenda[/(\d+_\d+_\d+)/, 1].gsub('_', '-') + @title = @date + @color = 'blank' + @@agendas.each do |agenda| + date = agenda[/(\d+_\d+_\d+)/, 1].gsub('_', '-') - if date > @date and (@next.text == 'Help' or date < @next.text) - @next = {text: date, link: "../#{date}/"} - end + if date > @date and (@next.text == 'Help' or date < @next.text) + @next = {text: date, link: "../#{date}/"} + end - if date < @date and (@prev.text == 'Help' or date > @prev.text) - @prev = {text: date, link: "../#{date}/"} + if date < @date and (@prev.text == 'Help' or date > @prev.text) + @prev = {text: date, link: "../#{date}/"} + end end end end def render - _header.navbar.navbar_fixed_top.blank do - _div.navbar_brand @date + _header.navbar.navbar_fixed_top class: @color do + _div.navbar_brand @title _ul.nav.nav_pills.navbar_right do _li.dropdown do _a.dropdown_toggle.nav! 'navigation' @@ -29,10 +39,14 @@ def render end _main do - React.createElement(Index, agenda: @agenda) + if @item + _pre @item.text + else + React.createElement(Index, agenda: @agenda) + end end - _footer.navbar.navbar_fixed_bottom.blank do + _footer.navbar.navbar_fixed_bottom class: @color do _a.backlink.navbar_brand @prev.text, rel: 'prev', href: @prev.link _a.nextlink.navbar_brand @next.text, rel: 'next', href: @next.link end @@ -47,6 +61,7 @@ def window.onresize() main.style.marginBottom = "#{footer.clientHeight}px" end + document.getElementsByTagName('title')[0].textContent = @title window.onresize() end