From 0e16aaeab9e488237fd7246d4c710dd0063386f0 Mon Sep 17 00:00:00 2001 From: Lukas Winkler <Findus23@users.noreply.github.com> Date: Sun, 19 Feb 2017 08:50:16 +0100 Subject: [PATCH] Remove Smartbanners (#11301) * remove jquery smartbanner * add related_applications to manifest.json https://developers.google.com/web/updates/2015/03/increasing-engagement-with-app-install-banners-in-chrome-for-android?hl=en#native * remove googleplay icon * remove smartbanner license --- LEGALNOTICE | 4 - libs/jquery/MIT-LICENSE-smartbanner.txt | 19 -- libs/jquery/jquery.smartbanner.js | 309 ------------------ .../jquery/stylesheets/jquery.smartbanner.css | 28 -- plugins/CoreHome/images/googleplay.png | Bin 16550 -> 0 bytes plugins/CoreHome/javascripts/manifest.json | 11 +- plugins/Login/templates/login.twig | 10 - plugins/Morpheus/templates/layout.twig | 1 - 8 files changed, 9 insertions(+), 373 deletions(-) delete mode 100644 libs/jquery/MIT-LICENSE-smartbanner.txt delete mode 100644 libs/jquery/jquery.smartbanner.js delete mode 100644 libs/jquery/stylesheets/jquery.smartbanner.css delete mode 100644 plugins/CoreHome/images/googleplay.png diff --git a/LEGALNOTICE b/LEGALNOTICE index 1714d1b720..d4b1e6d51b 100644 --- a/LEGALNOTICE +++ b/LEGALNOTICE @@ -116,10 +116,6 @@ THIRD-PARTY COMPONENTS AND LIBRARIES Link: http://mths.be/placeholder License: Dual licensed: MIT (Expat) or GPL - Name: jquery smartbanner - Link: https://github.com/jasny/jquery.smartbanner - License: Dual licensed: MIT (Expat) - Name: json2.js Link: http://json.org/ License: Public domain diff --git a/libs/jquery/MIT-LICENSE-smartbanner.txt b/libs/jquery/MIT-LICENSE-smartbanner.txt deleted file mode 100644 index 9a9270ddb2..0000000000 --- a/libs/jquery/MIT-LICENSE-smartbanner.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) Arnold Daniels <arnold@jasny.net> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/libs/jquery/jquery.smartbanner.js b/libs/jquery/jquery.smartbanner.js deleted file mode 100644 index 542242b7eb..0000000000 --- a/libs/jquery/jquery.smartbanner.js +++ /dev/null @@ -1,309 +0,0 @@ -/*! - * jQuery Smart Banner - * Copyright (c) 2012 Arnold Daniels <arnold@jasny.net> - * Based on 'jQuery Smart Web App Banner' by Kurt Zenisek @ kzeni.com - */ -!function ($) { - var SmartBanner = function (options) { - this.origHtmlMargin = parseFloat($('html').css('margin-top')) // Get the original margin-top of the HTML element so we can take that into account - this.options = $.extend({}, $.smartbanner.defaults, options) - - var standalone = navigator.standalone // Check if it's already a standalone web app or running within a webui view of an app (not mobile safari) - , UA = navigator.userAgent - - // Detect banner type (iOS or Android) - if (this.options.force) { - this.type = this.options.force - } else if (UA.match(/iPhone|iPod/i) != null || (UA.match(/iPad/) && this.options.iOSUniversalApp)) { - if (UA.match(/Safari/i) != null && - (UA.match(/CriOS/i) != null || - window.Number(UA.substr(UA.indexOf('OS ') + 3, 3).replace('_', '.')) < 6)) this.type = 'ios' // Check webview and native smart banner support (iOS 6+) - } else if (UA.match(/\bSilk\/(.*\bMobile Safari\b)?/) || UA.match(/\bKF\w/) || UA.match('Kindle Fire')) { - this.type = 'kindle' - } else if (UA.match(/Android/i) != null) { - this.type = 'android' - } else if (UA.match(/Windows NT 6.2/i) != null && UA.match(/Touch/i) !== null) { - this.type = 'windows' - } - - // Don't show banner if device isn't iOS or Android, website is loaded in app or user dismissed banner - if (!this.type || standalone || this.getCookie('sb-closed') || this.getCookie('sb-installed')) { - return - } - - // Calculate scale - this.scale = this.options.scale == 'auto' ? $(window).width() / window.screen.width : this.options.scale - if (this.scale < 1) this.scale = 1 - - // Get info from meta data - var meta = $(this.type == 'android' ? 'meta[name="google-play-app"]' : - this.type == 'ios' ? 'meta[name="apple-itunes-app"]' : - this.type == 'kindle' ? 'meta[name="kindle-fire-app"]' : 'meta[name="msApplication-ID"]'); - if (meta.length == 0) return - - // For Windows Store apps, get the PackageFamilyName for protocol launch - if (this.type == 'windows') { - this.pfn = $('meta[name="msApplication-PackageFamilyName"]').attr('content'); - this.appId = meta.attr('content')[1] - } else { - this.appId = /app-id=([^\s,]+)/.exec(meta.attr('content'))[1] - } - - this.title = this.options.title ? this.options.title : meta.data('title') || $('title').text().replace(/\s*[|\-·].*$/, '') - this.author = this.options.author ? this.options.author : meta.data('author') || ($('meta[name="author"]').length ? $('meta[name="author"]').attr('content') : window.location.hostname) - this.iconUrl = meta.data('icon-url'); - this.price = meta.data('price'); - - // Create banner - this.create() - this.show() - this.listen() - } - - SmartBanner.prototype = { - - constructor: SmartBanner - - , create: function() { - var iconURL - , link=(this.options.url ? this.options.url : (this.type == 'windows' ? 'ms-windows-store:PDP?PFN=' + this.pfn : (this.type == 'android' ? 'market://details?id=' : (this.type == 'kindle' ? 'amzn://apps/android?asin=' : 'https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id'))) + this.appId) - , price = this.price || this.options.price - , inStore=price ? price + ' - ' + (this.type == 'android' ? this.options.inGooglePlay : this.type == 'kindle' ? this.options.inAmazonAppStore : this.type == 'ios' ? this.options.inAppStore : this.options.inWindowsStore) : '' - , gloss=this.options.iconGloss === null ? (this.type=='ios') : this.options.iconGloss - if(this.options.url) - link = this.options.url - else { - if(this.type=='android') { - link = 'market://details?id=' + this.appId - if(this.options.GooglePlayParams) - link = link + '&referrer=' + this.options.GooglePlayParams - } - else - link = 'https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id' + this.appId - } - - var banner = '<div id="smartbanner" class="'+this.type+'"><div class="sb-container"><a href="#" class="sb-close">×</a><span class="sb-icon"></span><div class="sb-info"><strong>'+this.title+'</strong><span>'+this.author+'</span><span>'+inStore+'</span></div><a href="'+link+'" class="sb-button"><span>'+this.options.button+'</span></a></div></div>'; - (this.options.layer) ? $(this.options.appendToSelector).append(banner) : $(this.options.appendToSelector).prepend(banner); - - if (this.options.icon) { - iconURL = this.options.icon - } else if(this.iconUrl) { - iconURL = this.iconUrl; - } else if ($('link[rel="apple-touch-icon-precomposed"]').length > 0) { - iconURL = $('link[rel="apple-touch-icon-precomposed"]').attr('href') - if (this.options.iconGloss === null) gloss = false - } else if ($('link[rel="apple-touch-icon"]').length > 0) { - iconURL = $('link[rel="apple-touch-icon"]').attr('href') - } else if ($('meta[name="msApplication-TileImage"]').length > 0) { - iconURL = $('meta[name="msApplication-TileImage"]').attr('content') - } else if ($('meta[name="msapplication-TileImage"]').length > 0) { /* redundant because ms docs show two case usages */ - iconURL = $('meta[name="msapplication-TileImage"]').attr('content') - } - - if (iconURL) { - $('#smartbanner .sb-icon').css('background-image','url('+iconURL+')') - if (gloss) $('#smartbanner .sb-icon').addClass('gloss') - } else{ - $('#smartbanner').addClass('no-icon') - } - - this.bannerHeight = $('#smartbanner').outerHeight() + 2 - - if (this.scale > 1) { - $('#smartbanner') - .css('top', parseFloat($('#smartbanner').css('top')) * this.scale) - .css('height', parseFloat($('#smartbanner').css('height')) * this.scale) - .hide() - $('#smartbanner .sb-container') - .css('-webkit-transform', 'scale('+this.scale+')') - .css('-msie-transform', 'scale('+this.scale+')') - .css('-moz-transform', 'scale('+this.scale+')') - .css('width', $(window).width() / this.scale) - } - $('#smartbanner').css('position', (this.options.layer) ? 'absolute' : 'static') - } - - , listen: function () { - $('#smartbanner .sb-close').on('click',$.proxy(this.close, this)) - $('#smartbanner .sb-button').on('click',$.proxy(this.install, this)) - } - - , show: function(callback) { - var banner = $('#smartbanner'); - banner.stop(); - - if (this.options.layer) { - banner.animate({top: 0, display: 'block'}, this.options.speedIn).addClass('shown').show(); - $('html').animate({marginTop: this.origHtmlMargin + (this.bannerHeight * this.scale)}, this.options.speedIn, 'swing', callback); - } else { - if ($.support.transition) { - banner.animate({top:0},this.options.speedIn).addClass('shown'); - var transitionCallback = function() { - $('html').removeClass('sb-animation'); - if (callback) { - callback(); - } - }; - $('html').addClass('sb-animation').one($.support.transition.end, transitionCallback).emulateTransitionEnd(this.options.speedIn).css('margin-top', this.origHtmlMargin+(this.bannerHeight*this.scale)); - } else { - banner.slideDown(this.options.speedIn).addClass('shown'); - } - } - } - - , hide: function(callback) { - var banner = $('#smartbanner'); - banner.stop(); - - if (this.options.layer) { - banner.animate({top: -1 * this.bannerHeight * this.scale, display: 'block'}, this.options.speedIn).removeClass('shown'); - $('html').animate({marginTop: this.origHtmlMargin}, this.options.speedIn, 'swing', callback); - } else { - if ($.support.transition) { - banner.css('top', -1*this.bannerHeight*this.scale).removeClass('shown'); - var transitionCallback = function() { - $('html').removeClass('sb-animation'); - if (callback) { - callback(); - } - }; - $('html').addClass('sb-animation').one($.support.transition.end, transitionCallback).emulateTransitionEnd(this.options.speedOut).css('margin-top', this.origHtmlMargin); - } else { - banner.slideUp(this.options.speedOut).removeClass('shown'); - } - } - } - - , close: function(e) { - e.preventDefault() - this.hide() - this.setCookie('sb-closed','true',this.options.daysHidden); - } - - , install: function(e) { - if (this.options.hideOnInstall) { - this.hide() - } - this.setCookie('sb-installed','true',this.options.daysReminder) - } - - , setCookie: function(name, value, exdays) { - var exdate = new Date() - exdate.setDate(exdate.getDate()+exdays) - value=encodeURI(value)+((exdays==null)?'':'; expires='+exdate.toUTCString()) - document.cookie=name+'='+value+'; path=/;' - } - - , getCookie: function(name) { - var i,x,y,ARRcookies = document.cookie.split(";") - for(i=0;i<ARRcookies.length;i++) { - x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")) - y = ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1) - x = x.replace(/^\s+|\s+$/g,"") - if (x==name) { - return decodeURI(y) - } - } - return null - } - - // Demo only - , switchType: function() { - var that = this - - this.hide(function () { - that.type = that.type == 'android' ? 'ios' : 'android' - var meta = $(that.type == 'android' ? 'meta[name="google-play-app"]' : 'meta[name="apple-itunes-app"]').attr('content') - that.appId = /app-id=([^\s,]+)/.exec(meta)[1] - - $('#smartbanner').detach() - that.create() - that.show() - }) - } - } - - $.smartbanner = function (option) { - var $window = $(window) - , data = $window.data('smartbanner') - , options = typeof option == 'object' && option - if (!data) $window.data('smartbanner', (data = new SmartBanner(options))) - if (typeof option == 'string') data[option]() - } - - // override these globally if you like (they are all optional) - $.smartbanner.defaults = { - title: null, // What the title of the app should be in the banner (defaults to <title>) - author: null, // What the author of the app should be in the banner (defaults to <meta name="author"> or hostname) - price: 'FREE', // Price of the app - appStoreLanguage: 'us', // Language code for App Store - inAppStore: 'On the App Store', // Text of price for iOS - inGooglePlay: 'In Google Play', // Text of price for Android - inAmazonAppStore: 'In the Amazon Appstore', - inWindowsStore: 'In the Windows Store', //Text of price for Windows - GooglePlayParams: null, // Aditional parameters for the market - icon: null, // The URL of the icon (defaults to <meta name="apple-touch-icon">) - iconGloss: null, // Force gloss effect for iOS even for precomposed - button: 'VIEW', // Text for the install button - url: null, // The URL for the button. Keep null if you want the button to link to the app store. - scale: 'auto', // Scale based on viewport size (set to 1 to disable) - speedIn: 300, // Show animation speed of the banner - speedOut: 400, // Close animation speed of the banner - daysHidden: 15, // Duration to hide the banner after being closed (0 = always show banner) - daysReminder: 90, // Duration to hide the banner after "VIEW" is clicked *separate from when the close button is clicked* (0 = always show banner) - force: null, // Choose 'ios', 'android' or 'windows'. Don't do a browser check, just always show this banner - hideOnInstall: true, // Hide the banner after "VIEW" is clicked. - layer: false, // Display as overlay layer or slide down the page - iOSUniversalApp: true, // If the iOS App is a universal app for both iPad and iPhone, display Smart Banner to iPad users, too. - appendToSelector: 'body' //Append the banner to a specific selector - } - - $.smartbanner.Constructor = SmartBanner; - - - // ============================================================ - // Bootstrap transition - // Copyright 2011-2014 Twitter, Inc. - // Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - - function transitionEnd() { - var el = document.createElement('smartbanner') - - var transEndEventNames = { - WebkitTransition: 'webkitTransitionEnd', - MozTransition: 'transitionend', - OTransition: 'oTransitionEnd otransitionend', - transition: 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return {end: transEndEventNames[name]} - } - } - - return false // explicit for ie8 ( ._.) - } - - if ($.support.transition !== undefined) - return // Prevent conflict with Twitter Bootstrap - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function(duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function() { - called = true - }) - var callback = function() { - if (!called) $($el).trigger($.support.transition.end) - } - setTimeout(callback, duration) - return this - } - - $(function() { - $.support.transition = transitionEnd() - }) - // ============================================================ - -}(window.jQuery); diff --git a/libs/jquery/stylesheets/jquery.smartbanner.css b/libs/jquery/stylesheets/jquery.smartbanner.css deleted file mode 100644 index ae4dd31381..0000000000 --- a/libs/jquery/stylesheets/jquery.smartbanner.css +++ /dev/null @@ -1,28 +0,0 @@ -#smartbanner { position:absolute; left:0; top:-82px; border-bottom:1px solid #e8e8e8; width:100%; height:78px; font-family:'Helvetica Neue',sans-serif; background:-webkit-linear-gradient(top, #f4f4f4 0%,#cdcdcd 100%); background-image: -ms-linear-gradient(top, #F4F4F4 0%, #CDCDCD 100%); background-image: -moz-linear-gradient(top, #F4F4F4 0%, #CDCDCD 100%); box-shadow:0 1px 2px rgba(0,0,0,0.5); z-index:9998; -webkit-font-smoothing:antialiased; overflow:hidden; -webkit-text-size-adjust:none; } -#smartbanner, html.sb-animation {-webkit-transition: all .3s ease;} -#smartbanner .sb-container { margin: 0 auto; } -#smartbanner .sb-close { position:absolute; left:5px; top:5px; display:block; border:2px solid #fff; width:14px; height:14px; font-family:'ArialRoundedMTBold',Arial; font-size:15px; line-height:15px; text-align:center; color:#fff; background:#070707; text-decoration:none; text-shadow:none; border-radius:14px; box-shadow:0 2px 3px rgba(0,0,0,0.4); -webkit-font-smoothing:subpixel-antialiased; } -#smartbanner .sb-close:active { font-size:13px; color:#aaa; } -#smartbanner .sb-icon { position:absolute; left:30px; top:10px; display:block; width:57px; height:57px; background:rgba(0,0,0,0.6); background-size:cover; border-radius:10px; box-shadow:0 1px 3px rgba(0,0,0,0.3); } -#smartbanner.no-icon .sb-icon { display:none; } -#smartbanner .sb-info { position:absolute; left:98px; top:18px; width:44%; font-size:11px; line-height:1.2em; font-weight:bold; color:#6a6a6a; text-shadow:0 1px 0 rgba(255,255,255,0.8); } -#smartbanner #smartbanner.no-icon .sb-info { left:34px; } -#smartbanner .sb-info strong { display:block; font-size:13px; color:#4d4d4d; line-height: 18px; } -#smartbanner .sb-info > span { display:block; } -#smartbanner .sb-info em { font-style:normal; text-transform:uppercase; } -#smartbanner .sb-button { position:absolute; right:20px; top:24px; border:1px solid #bfbfbf; padding: 0 10px; min-width: 10%; height:24px; font-size:14px; line-height:24px; text-align:center; font-weight:bold; color:#6a6a6a; background:-webkit-linear-gradient(top, #efefef 0%,#dcdcdc 100%); text-transform:uppercase; text-decoration:none; text-shadow:0 1px 0 rgba(255,255,255,0.8); border-radius:3px; box-shadow:0 1px 0 rgba(255,255,255,0.6),0 1px 0 rgba(255,255,255,0.7) inset; } -#smartbanner .sb-button:active, #smartbanner .sb-button:hover { background:-webkit-linear-gradient(top, #dcdcdc 0%,#efefef 100%); } - -#smartbanner .sb-icon.gloss:after { content:''; position:absolute; left:0; top:-1px; border-top:1px solid rgba(255,255,255,0.8); width:100%; height:50%; background:-webkit-linear-gradient(top, rgba(255,255,255,0.7) 0%,rgba(255,255,255,0.2) 100%); border-radius:10px 10px 12px 12px; } - -#smartbanner.android { border-color:#212228; background: #3d3d3d url('dark_background_stripes.gif'); border-top: 5px solid #88B131; box-shadow: none; } -#smartbanner.android .sb-close { border:0; width:17px; height:17px; line-height:17px; color:#b1b1b3; background:#1c1e21; text-shadow:0 1px 1px #000; box-shadow:0 1px 2px rgba(0,0,0,0.8) inset,0 1px 1px rgba(255,255,255,0.3); } -#smartbanner.android .sb-close:active { color:#eee; } -#smartbanner.android .sb-info { color:#ccc; text-shadow:0 1px 2px #000; } -#smartbanner.android .sb-info strong { color:#fff; } -#smartbanner.android .sb-button { min-width: 12%; border:1px solid #DDDCDC; padding:1px; color:#d1d1d1; background: none; border-radius: 0; box-shadow: none; } -#smartbanner.android .sb-button span { text-align: center; display: block; padding: 0 10px; background-color: #42B6C9; background-image: -webkit-gradient(linear,0 0,0 100%,from(#42B6C9),to(#39A9BB)); background-image: -moz-linear-gradient(top,#42B6C9,#39A9BB); text-transform:none; text-shadow:none; box-shadow:none; } -#smartbanner.android .sb-button:active, #smartbanner.android .sb-button:hover { background: none; } -#smartbanner.android .sb-button:active span, #smartbanner.android .sb-button:hover span { background:#2AC7E1; } - -#smartbanner.windows .sb-icon { border-radius: 0px; } diff --git a/plugins/CoreHome/images/googleplay.png b/plugins/CoreHome/images/googleplay.png deleted file mode 100644 index fd150a6ba5cacb17c5cb9d264a54ae51477dd24b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16550 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 diff --git a/plugins/CoreHome/javascripts/manifest.json b/plugins/CoreHome/javascripts/manifest.json index 829fa0f62f..b161b3dadc 100644 --- a/plugins/CoreHome/javascripts/manifest.json +++ b/plugins/CoreHome/javascripts/manifest.json @@ -35,5 +35,12 @@ ], "start_url": "../../../", "display": "standalone", - "orientation": "portrait" -} \ No newline at end of file + "orientation": "portrait", + "prefer_related_applications": true, + "related_applications": [ + { + "platform": "play", + "id": "org.piwik.mobile2" + } + ] +} diff --git a/plugins/Login/templates/login.twig b/plugins/Login/templates/login.twig index 6a124465a1..b8c2ae7693 100644 --- a/plugins/Login/templates/login.twig +++ b/plugins/Login/templates/login.twig @@ -8,16 +8,6 @@ {{ parent() }} <script type="text/javascript" src="libs/bower_components/jquery-placeholder/jquery.placeholder.js"></script> - <script type="text/javascript" src="libs/jquery/jquery.smartbanner.js"></script> - <link rel="stylesheet" type="text/css" href="libs/jquery/stylesheets/jquery.smartbanner.css" /> - - <script type="text/javascript"> - $(function () { - $('#form_login').focus(); - $('input').placeholder(); - $.smartbanner({title: "Piwik Mobile 2", author: "Piwik team", hideOnInstall: false, layer: true, icon: "plugins/CoreHome/images/googleplay.png"}); - }); - </script> {% endblock %} {% set title %}{{ 'Login_LogIn'|translate }}{% endset %} diff --git a/plugins/Morpheus/templates/layout.twig b/plugins/Morpheus/templates/layout.twig index 524d04389c..0cfaeb3efa 100644 --- a/plugins/Morpheus/templates/layout.twig +++ b/plugins/Morpheus/templates/layout.twig @@ -15,7 +15,6 @@ <meta name="generator" content="Piwik - free/libre analytics platform"/> <meta name="description" content="{% block pageDescription %}{% endblock %}"/> <meta name="apple-itunes-app" content="app-id=737216887" /> - <meta name="google-play-app" content="app-id=org.piwik.mobile2"> {% block meta %} <meta name="robots" content="noindex,nofollow"> {% endblock %} -- GitLab