Skip to content

Commit

Permalink
Refactor banner logic into BannerHelper module
Browse files Browse the repository at this point in the history
  • Loading branch information
bhousel committed Jun 22, 2016
1 parent 933335a commit e14ec15
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 39 deletions.
54 changes: 54 additions & 0 deletions app/helpers/banner_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
module BannerHelper

# returns the least recently seen banner that is not hidden
def next_banner()
active_banners = {
:sotmus2016 => {
:id => 'sotmus2016',
:alt => 'State of the Map US 2016',
:link => 'http://stateofthemap.us/',
:img => 'banners/sotmus-2016.jpg'
},
:sotm2016 => {
:id => 'sotm2016',
:alt => 'State of the Map 2016',
:link => 'http://2016.stateofthemap.org/',
:img => 'banners/sotm-2016.jpg'
}
}

bannerKey = nil
cookieKey = nil
queuePos = 9999

active_banners.each do |k, v|
ckey = cookie_id(v[:id]).to_sym
cval = cookies[ckey] || 0
next if cval == 'hide'


# rotate all banner queue positions
index = cval.to_i
if index > 0
cookies[ckey] = index - 1
end

# pick banner with mininum queue position
if index <= queuePos
bannerKey = k
cookieKey = ckey
queuePos = index
end
end

unless bannerKey.nil?
cookies[cookieKey] = active_banners.length # bump to end of queue
active_banners[bannerKey]
end
end

def cookie_id(key)
"_osm_banner_#{key}"
end

end
41 changes: 2 additions & 39 deletions app/views/layouts/_banner.html.erb
Original file line number Diff line number Diff line change
@@ -1,41 +1,4 @@
<% active_banners = {
:sotmus2016 => {
:alt => 'State of the Map US 2016',
:link => 'http://stateofthemap.us/',
:img => 'banners/sotmus-2016.jpg'
},
:sotm2016 => {
:alt => 'State of the Map 2016',
:link => 'http://2016.stateofthemap.org/',
:img => 'banners/sotm-2016.jpg'
}
}

bannerSym = nil
cookieStr = nil
queuePos = 9999

# pick least recently seen banner that is not hidden
active_banners.each_key do |k|
c = '_osm_banner_' + k.to_s
val = cookies[c.to_sym] || 0
next if val == 'hide'

if val.to_i > 0
cookies[c.to_sym] = val.to_i - 1
end

if val.to_i <= queuePos
bannerSym = k
cookieStr = c
queuePos = val.to_i
end
end

unless bannerSym.nil?
banner = active_banners[bannerSym]
cookies[cookieStr.to_sym] = active_banners.length # bump to end of queue
%>
<% unless (banner = next_banner()).nil? %>
<%= link_to (image_tag banner[:img], :alt => banner[:alt], :title => banner[:alt]), banner[:link] %>
<div class="close-wrap" id="<%= cookieStr %>"><span class="icon close"></span></div>
<div class="close-wrap" id="<%= cookie_id(banner[:id]) %>"><span class="icon close"></span></div>
<% end %>

0 comments on commit e14ec15

Please sign in to comment.