diff --git a/web/Gemfile.lock b/web/Gemfile.lock index 03fcf0042..ec30059e5 100644 --- a/web/Gemfile.lock +++ b/web/Gemfile.lock @@ -936,7 +936,7 @@ DEPENDENCIES zip-codes RUBY VERSION - ruby 2.4.1p111 + ruby 2.3.1p112 BUNDLED WITH 1.17.3 diff --git a/web/app/assets/images/content/button_download_mac_intel.png b/web/app/assets/images/content/button_download_mac_intel.png new file mode 100644 index 000000000..20ef7405c Binary files /dev/null and b/web/app/assets/images/content/button_download_mac_intel.png differ diff --git a/web/app/assets/images/content/button_download_mac_mx.png b/web/app/assets/images/content/button_download_mac_mx.png new file mode 100644 index 000000000..585ae5b64 Binary files /dev/null and b/web/app/assets/images/content/button_download_mac_mx.png differ diff --git a/web/app/assets/images/content/button_download_windows.png b/web/app/assets/images/content/button_download_windows.png index fd240ee35..b55ccdc13 100644 Binary files a/web/app/assets/images/content/button_download_windows.png and b/web/app/assets/images/content/button_download_windows.png differ diff --git a/web/app/assets/javascripts/web/downloads.js b/web/app/assets/javascripts/web/downloads.js index 598c8edde..1937b77c6 100644 --- a/web/app/assets/javascripts/web/downloads.js +++ b/web/app/assets/javascripts/web/downloads.js @@ -9,6 +9,18 @@ var downloadUris = {}; // map of platform > uri var rest = context.JK.Rest(); + + // We use this method to detect M1 macs and set appropriate API values to prevent sites from detecting fingerprinting protections + function isAppleSilicon () { + var canvas = document.createElement('canvas'); + var gl = canvas.getContext('webgl'); + + // Best guess if the device is an Apple Silicon + // https://stackoverflow.com/a/65412357 + // @ts-expect-error - Object is possibly 'null' + return gl.getSupportedExtensions().indexOf('WEBGL_compressed_texture_etc') !== -1 + } + function selectPlatform(selectedPlatform) { //console.log("selectedPlatform", selectedPlatform); var platformName; // mac, windows, linux @@ -18,33 +30,34 @@ var uri = downloadUris[selectedPlatform]; // prepare template varaibles - if (selectedPlatform == "Unix") { - platformName = "linux"; - platformDisplay = "Linux" - platformName1 = "mac"; - platformDisplay1 = "Mac"; + if (selectedPlatform == "MacOSX-M") { + platformName = "mac_mx"; + platformDisplay = "Mac/M1,M2...MX"; + platformName1 = "mac_intel"; + platformDisplay1 = "Mac/Intel"; platformName2 = "windows"; platformDisplay2 = "Windows"; - platform1 = "MacOSX"; + platform1 = "MacOSX-Intel"; platform2 = "Win32" } else if(selectedPlatform == "Win32") { platformName = "windows"; platformDisplay = "Windows"; - platformName1 = "mac"; - platformDisplay1 = "Mac"; - platformName2 = "linux" - platformDisplay2 = "Linux"; - platform1 = "MacOSX"; - platform2 = "Unix"; - } else if(selectedPlatform == "MacOSX") { - platformName = "mac"; - platformDisplay = "Mac"; + platformName1 = "mac_intel"; + platformDisplay1 = "Mac/Intel"; + platformName2 = "mac_mx" + platformDisplay2 = "Mac/M1,M2...MX"; + platform1 = "MacOSX-Intel"; + platform2 = "MacOSX-M"; + } else if(selectedPlatform == "MacOSX-Intel") { + console.log("IM MACOSXINTEL"); + platformName = "mac_intel"; + platformDisplay = "Mac/Intel"; platformName1 = "windows"; platformDisplay1 = "Windows"; - platformName2 = "linux"; - platformDisplay2 = "Linux"; + platformName2 = "mac_mx"; + platformDisplay2 = "Mac/M1,M2...MX"; platform1 = "Win32"; - platform2 = "Unix"; + platform2 = "MacOSX-M"; } else { alert("unknown platform: " + selectedPlatform); @@ -75,7 +88,6 @@ $('div.hidden-images img[data-purpose=' + platformName1 + ']', selectOthers).remove().appendTo($('a[data-order=1]', selectOthers)); $('div.hidden-images img[data-purpose=' + platformName2 + ']', selectOthers).remove().appendTo($('a[data-order=2]', selectOthers)); - // install click handler for change selection $('a', selectOthers).click(function() { var platform = $(this).attr('data-platform'); @@ -104,6 +116,8 @@ // update blurb $('body.web .downloads-blurb').empty().append(blurb); + context.JK.popExternalLinks(blurb); + // update the 'download other platforms' buttons $('body.web .downloads-container').empty().append(selectOthers); // update system requirements @@ -144,13 +158,25 @@ var currentOS = context.JK.detectOS(); var downloads = $('.downloads'); + if(currentOS == "MacOSX") { + var silicon = isAppleSilicon(); + if(silicon == true) { + currentOS = "MacOSX-M"; + } + else { + currentOS = "MacOSX-Intel"; + } + } + console.log("CURRENT OS ", currentOS) + + rest.getClientDownloads() .done(function(data) { //console.log('getClientDownloads', data); removeSpinner(); $.each(data, function(key, item) { - var platform = key.substring('JamClient/'.length); + var platform = key.substring('JamClientModern/'.length); downloadUris[platform] = item.uri; }); diff --git a/web/app/assets/javascripts/web/downloads_legacy.js b/web/app/assets/javascripts/web/downloads_legacy.js new file mode 100644 index 000000000..e52fd006b --- /dev/null +++ b/web/app/assets/javascripts/web/downloads_legacy.js @@ -0,0 +1,174 @@ +(function(context,$) { + + "use strict"; + + context.JK = context.JK || {}; + + var downloads = {}; + var isCongratulations; + var downloadUris = {}; // map of platform > uri + var rest = context.JK.Rest(); + + function selectPlatform(selectedPlatform) { + //console.log("selectedPlatform", selectedPlatform); + var platformName; // mac, windows, linux + var platformDisplay; // Mac, Windows, Linux + var platform = selectedPlatform; //MacOSX, Win32, Unix + var platformName1, platformName2, platform1, platform2, platformDisplay1, platformDisplay2; + var uri = downloadUris[selectedPlatform]; + + // prepare template varaibles + if (selectedPlatform == "Unix") { + platformName = "linux"; + platformDisplay = "Linux" + platformName1 = "mac_intel"; + platformDisplay1 = "Mac/Intel"; + platformName2 = "windows"; + platformDisplay2 = "Windows"; + platform1 = "MacOSX"; + platform2 = "Win32" + } else if(selectedPlatform == "Win32") { + platformName = "windows"; + platformDisplay = "Windows"; + platformName1 = "mac_intel"; + platformDisplay1 = "Mac/Intel"; + platformName2 = "linux" + platformDisplay2 = "Linux"; + platform1 = "MacOSX"; + platform2 = "Unix"; + } else if(selectedPlatform == "MacOSX") { + platformName = "mac_intel"; + platformDisplay = "Mac/Intel"; + platformName1 = "windows"; + platformDisplay1 = "Windows"; + platformName2 = "linux"; + platformDisplay2 = "Linux"; + platform1 = "Win32"; + platform2 = "Unix"; + } + else { + alert("unknown platform: " + selectedPlatform); + } + + var options = { + platform : platform, + platformName : platformName, + platformDisplay : platformDisplay, + platformName1 : platformName1, + platformDisplay1 : platformDisplay1, + platformName2 : platformName2, + platformDisplay2 : platformDisplay2, + platform1: platform1, + platform2: platform2, + uri : uri ? uri : '#', + isCongratulations : isCongratulations + }; + + var blurb = $(context._.template($('#client-download-legacy-blurb-contents').html(), options, { variable: 'data' })); + + // isolate active image for blurb + $('div.hidden-images img[data-purpose=' + platformName + ']', blurb).remove().appendTo($('a.current-os-download', blurb)); + + var selectOthers = $(context._.template($('#client-download-legacy-select-others').html(), options, { variable: 'data' })); + + // isolate active images for selectOthers + $('div.hidden-images img[data-purpose=' + platformName1 + ']', selectOthers).remove().appendTo($('a[data-order=1]', selectOthers)); + $('div.hidden-images img[data-purpose=' + platformName2 + ']', selectOthers).remove().appendTo($('a[data-order=2]', selectOthers)); + + + // install click handler for change selection + $('a.choose-other-platform', selectOthers).click(function() { + var platform = $(this).attr('data-platform'); + selectPlatform(platform); + return false; + }); + + $('a', blurb).click(function() { + //console.log("download clicked"); + var clicked = $(this); + var href = clicked.attr('href'); + if(href != "#") { + context.JK.GA.trackDownload(clicked.attr('data-platform')); + rest.userDownloadedClient().always(function() { + $('body').append('