From: Bryan Housel Date: Wed, 22 Jun 2016 12:19:13 +0000 (-0400) Subject: Refactor banner logic into BannerHelper module X-Git-Tag: live~3841^2~4 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e14ec1547e108116a57c910c938873e4155f6e9a?hp=933335a0ea28f274bc7301c18611bcd90709fd99 Refactor banner logic into BannerHelper module --- diff --git a/app/helpers/banner_helper.rb b/app/helpers/banner_helper.rb new file mode 100644 index 000000000..b96409d1e --- /dev/null +++ b/app/helpers/banner_helper.rb @@ -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 diff --git a/app/views/layouts/_banner.html.erb b/app/views/layouts/_banner.html.erb index a1091c887..6a62e1944 100644 --- a/app/views/layouts/_banner.html.erb +++ b/app/views/layouts/_banner.html.erb @@ -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] %> -
+ <% end %>