--- /dev/null
+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
-<% 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 %>