From 8e5aa5093ab6e67db4f603a44bb7027245b91a21 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 15 Oct 2013 14:31:52 +0200 Subject: detect os in browser and show proper download link We add a class to the html element based on the detected os and use that to pick which download link should be visible. If we detect an os that is not supported we display a deactivated download link instead with all alternatives. --- core/app/assets/javascripts/platform.js | 92 ++++++++++++++++++++++ core/app/helpers/core_helper.rb | 38 ++++++++- core/app/views/common/_download_for_os.html.haml | 16 ++++ core/app/views/common/_home_page_buttons.html.haml | 5 +- 4 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 core/app/assets/javascripts/platform.js create mode 100644 core/app/views/common/_download_for_os.html.haml (limited to 'core/app') diff --git a/core/app/assets/javascripts/platform.js b/core/app/assets/javascripts/platform.js new file mode 100644 index 0000000..3ab77d7 --- /dev/null +++ b/core/app/assets/javascripts/platform.js @@ -0,0 +1,92 @@ +/* Inspired by mozillas platform detection: + https://github.com/mozilla/bedrock/tree/master/media/js/base +*/ + (function () { + 'use strict'; + function getPlatform() { + var ua = navigator.userAgent, + pf = navigator.platform; + if (/Win(16|9[x58]|NT( [1234]| 5\.0| [^0-9]|[^ -]|$))/.test(ua) || + /Windows ([MC]E|9[x58]|3\.1|4\.10|NT( [1234]| 5\.0| [^0-9]|[^ ]|$))/.test(ua) || + /Windows_95/.test(ua)) { + /** + * Officially unsupported platforms are Windows 95, 98, ME, NT 4.x, 2000 + * These regular expressions match: + * - Win16 + * - Win9x + * - Win95 + * - Win98 + * - WinNT (not followed by version or followed by version <= 5) + * - Windows ME + * - Windows CE + * - Windows 9x + * - Windows 95 + * - Windows 98 + * - Windows 3.1 + * - Windows 4.10 + * - Windows NT (not followed by version or followed by version <= 5) + * - Windows_95 + */ + return 'oldwin'; + } + if (ua.indexOf("MSIE 6.0") !== -1 && + ua.indexOf("Windows NT 5.1") !== -1 && + ua.indexOf("SV1") === -1) { + // Windows XP SP1 + return 'oldwin'; + } + if (pf.indexOf("Win32") !== -1 || + pf.indexOf("Win64") !== -1) { + return 'windows'; + } + if (/android/i.test(ua)) { + return 'android'; + } + if (/armv[6-7]l/.test(pf)) { + return 'android'; + } + if (pf.indexOf("Linux") !== -1) { + if (pf.indexOf("64") !== -1) { + return 'linux64'; + } else { + return 'linux32'; + } + } + if (pf.indexOf("MacPPC") !== -1) { + return 'oldmac'; + } + if (/Mac OS X 10.[0-5]/.test(ua)) { + return 'oldmac'; + } + if (pf.indexOf('iPhone') !== -1 || + pf.indexOf('iPad') !== -1 || + pf.indexOf('iPod') !== -1 ) { + return 'ios'; + } + if (ua.indexOf("Mac OS X") !== -1) { + return 'osx'; + } + if (ua.indexOf("MSIE 5.2") !== -1) { + return 'oldmac'; + } + if (pf.indexOf("Mac") !== -1) { + return 'oldmac'; + } + if (navigator.platform === '' && + navigator.userAgent.indexOf("Firefox") !== -1 && + navigator.userAgent.indexOf("Mobile") !== -1) { + return 'fxos'; + } + + return 'other'; + } + (function () { + // Immediately set the platform classname on the html-element + // to avoid lots of flickering + var h = document.documentElement; + window.site = { + platform : getPlatform() + }; + h.className = window.site.platform; + })(); + })(); diff --git a/core/app/helpers/core_helper.rb b/core/app/helpers/core_helper.rb index a496144..29a4700 100644 --- a/core/app/helpers/core_helper.rb +++ b/core/app/helpers/core_helper.rb @@ -10,4 +10,40 @@ module CoreHelper render 'common/home_page_buttons' end -end \ No newline at end of file + def available_clients + CLIENT_AVAILABILITY + end + + def alternative_client_links(os = nil) + alternative_clients(os).map do |client| + link_to(client.capitalize, client_download_url(client)) + end + end + + def alternative_clients(os = nil) + CLIENT_AVAILABILITY - [os] + end + + def client_download_url(os = nil) + client_download_domain(os) + client_download_path(os) + end + + def client_download_domain(os) + "https://downloads.leap.se" + end + + def client_download_path(os) + CLIENT_DOWNLOAD_PATHS[os] || '/client' + end + + + CLIENT_AVAILABILITY = %w/linux32 linux64 mac windows android/ + CLIENT_DOWNLOAD_PATHS = { + android: '/client/android', + linux: '/client/linux', + linux32: '/client/linux/Bitmask-linux32-latest.tar.bz2', + linux64: '/client/linux/Bitmask-linux64-latest.tar.bz2', + osx: '/client/osx/Bitmask-OSC-latest.dmg', + windows: '/client/windows' + }.with_indifferent_access +end diff --git a/core/app/views/common/_download_for_os.html.haml b/core/app/views/common/_download_for_os.html.haml new file mode 100644 index 0000000..b7c88ba --- /dev/null +++ b/core/app/views/common/_download_for_os.html.haml @@ -0,0 +1,16 @@ +- os = download_for_os +%div{:class => "os-#{os}"} + %span.link + - btn_class = (os == "other") ? "disabled" : "btn-primary" + = link_to client_download_url(os), :class => "btn btn-large #{btn_class}" do + .pull-left= huge_icon('mask') + = t(:download_client) + %br/ + %small= I18n.t("os.#{os}") + %span.info + = t(:client_info, :provider => content_tag(:b,APP_CONFIG[:domain])).html_safe + %br/ + - if os == "other" + = t(:all_downloads_info, :clients => alternative_client_links(os).to_sentence).html_safe + - else + = t(:other_downloads_info, :clients => alternative_client_links(os).to_sentence).html_safe diff --git a/core/app/views/common/_home_page_buttons.html.haml b/core/app/views/common/_home_page_buttons.html.haml index 7eb4c40..b87c867 100644 --- a/core/app/views/common/_home_page_buttons.html.haml +++ b/core/app/views/common/_home_page_buttons.html.haml @@ -1,11 +1,10 @@ - icon_color = :black -.home-buttons +.home-buttons.linux64 .row-fluid.first .span3 .download.span6 - %span.link= link_to(big_icon('arrow-down', icon_color) + t(:download_client), "https://downloads.leap.se/client", :class => 'btn btn-large') - %span.info= t(:download_client_info, :provider => content_tag(:b,APP_CONFIG[:domain])).html_safe + = render partial: 'common/download_for_os', collection: available_clients + ['other'] .span3 .row-fluid.second .login.span4 -- cgit v1.2.3 From 4618bf296e735f47561dc1ddcccaaa701cae9daa Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 16 Oct 2013 11:25:58 +0200 Subject: remove leftover from testing os specific sections --- core/app/views/common/_home_page_buttons.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/app') diff --git a/core/app/views/common/_home_page_buttons.html.haml b/core/app/views/common/_home_page_buttons.html.haml index b87c867..e10fd38 100644 --- a/core/app/views/common/_home_page_buttons.html.haml +++ b/core/app/views/common/_home_page_buttons.html.haml @@ -1,6 +1,6 @@ - icon_color = :black -.home-buttons.linux64 +.home-buttons .row-fluid.first .span3 .download.span6 -- cgit v1.2.3 From 1384f6c43dde6a19f270416e34e39130a3d0a53d Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 18 Oct 2013 09:50:37 +0200 Subject: Make download links configurable This way we won't have to redeploy once the new links to the windows and the android version are there. Also this obviously offers more flexibility for providers. --- core/app/helpers/core_helper.rb | 36 ------------------------------------ core/app/helpers/download_helper.rb | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 36 deletions(-) create mode 100644 core/app/helpers/download_helper.rb (limited to 'core/app') diff --git a/core/app/helpers/core_helper.rb b/core/app/helpers/core_helper.rb index 29a4700..4126906 100644 --- a/core/app/helpers/core_helper.rb +++ b/core/app/helpers/core_helper.rb @@ -10,40 +10,4 @@ module CoreHelper render 'common/home_page_buttons' end - def available_clients - CLIENT_AVAILABILITY - end - - def alternative_client_links(os = nil) - alternative_clients(os).map do |client| - link_to(client.capitalize, client_download_url(client)) - end - end - - def alternative_clients(os = nil) - CLIENT_AVAILABILITY - [os] - end - - def client_download_url(os = nil) - client_download_domain(os) + client_download_path(os) - end - - def client_download_domain(os) - "https://downloads.leap.se" - end - - def client_download_path(os) - CLIENT_DOWNLOAD_PATHS[os] || '/client' - end - - - CLIENT_AVAILABILITY = %w/linux32 linux64 mac windows android/ - CLIENT_DOWNLOAD_PATHS = { - android: '/client/android', - linux: '/client/linux', - linux32: '/client/linux/Bitmask-linux32-latest.tar.bz2', - linux64: '/client/linux/Bitmask-linux64-latest.tar.bz2', - osx: '/client/osx/Bitmask-OSC-latest.dmg', - windows: '/client/windows' - }.with_indifferent_access end diff --git a/core/app/helpers/download_helper.rb b/core/app/helpers/download_helper.rb new file mode 100644 index 0000000..f9c6c40 --- /dev/null +++ b/core/app/helpers/download_helper.rb @@ -0,0 +1,33 @@ +module DownloadHelper + + def alternative_client_links(os = nil) + alternative_clients(os).map do |client| + link_to(client.capitalize, client_download_url(client)) + end + end + + def alternative_clients(os = nil) + available_clients - [os] + end + + def client_download_url(os = nil) + client_download_domain + client_download_path(os) + end + + def client_download_path(os) + download_paths[os.to_s] || download_paths['other'] || '' + end + + def available_clients + APP_CONFIG[:available_clients] || [] + end + + def client_download_domain + APP_CONFIG[:client_download_domain] || '' + end + + def download_paths + APP_CONFIG[:download_paths] || {} + end + +end -- cgit v1.2.3 From 108938615ff7490080f80ea2d6bd1cd8037cdd84 Mon Sep 17 00:00:00 2001 From: elijah Date: Thu, 14 Nov 2013 02:19:57 -0800 Subject: minor improvements to the download button (proper localization, better image, better hooks for customization) --- core/app/helpers/download_helper.rb | 2 +- core/app/views/common/_download_for_os.html.haml | 4 ++-- core/app/views/common/_home_page_buttons.html.haml | 10 +++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'core/app') diff --git a/core/app/helpers/download_helper.rb b/core/app/helpers/download_helper.rb index f9c6c40..ee0fe73 100644 --- a/core/app/helpers/download_helper.rb +++ b/core/app/helpers/download_helper.rb @@ -2,7 +2,7 @@ module DownloadHelper def alternative_client_links(os = nil) alternative_clients(os).map do |client| - link_to(client.capitalize, client_download_url(client)) + link_to(I18n.t("os."+client), client_download_url(client)) end end diff --git a/core/app/views/common/_download_for_os.html.haml b/core/app/views/common/_download_for_os.html.haml index b7c88ba..4c096ce 100644 --- a/core/app/views/common/_download_for_os.html.haml +++ b/core/app/views/common/_download_for_os.html.haml @@ -8,8 +8,8 @@ %br/ %small= I18n.t("os.#{os}") %span.info - = t(:client_info, :provider => content_tag(:b,APP_CONFIG[:domain])).html_safe - %br/ + %div= t(:client_info, :provider => content_tag(:b,APP_CONFIG[:domain])).html_safe + %div - if os == "other" = t(:all_downloads_info, :clients => alternative_client_links(os).to_sentence).html_safe - else diff --git a/core/app/views/common/_home_page_buttons.html.haml b/core/app/views/common/_home_page_buttons.html.haml index e10fd38..3be12e2 100644 --- a/core/app/views/common/_home_page_buttons.html.haml +++ b/core/app/views/common/_home_page_buttons.html.haml @@ -2,10 +2,14 @@ .home-buttons .row-fluid.first - .span3 - .download.span6 + .span2 + .download.span8 = render partial: 'common/download_for_os', collection: available_clients + ['other'] - .span3 + .span2 + - if local_assigns[:divider] + .row-fluid + .span12 + = render local_assigns[:divider] .row-fluid.second .login.span4 %span.link= link_to(icon('ok-sign', icon_color) + t(:login), login_path, :class => 'btn') -- cgit v1.2.3