diff --git a/LEGALNOTICE b/LEGALNOTICE index 1714d1b7204cbbe6f7e704cbbaf68d6926802c86..d4b1e6d51b4e36c5641cbbf86a1abfceb698e44b 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 9a9270ddb20dc8ccd55b7a4c13bc52bf430031f7..0000000000000000000000000000000000000000 --- 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 542242b7eb472a3de85c1a7f9e40af8dcc2f227f..0000000000000000000000000000000000000000 --- 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 ae4dd3138149a511d052e141d01ad9e750efdb3d..0000000000000000000000000000000000000000 --- 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 Binary files a/plugins/CoreHome/images/googleplay.png and /dev/null differ diff --git a/plugins/CoreHome/javascripts/manifest.json b/plugins/CoreHome/javascripts/manifest.json index 829fa0f62f0e2d81c57f1cb90150e2f929f985d1..b161b3dadccb5ad212f27d4cd4b117d1dae2f10a 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 6a124465a129bc6bfaf57a30e2c5471ec13e764a..b8c2ae7693e809a4e8413a86be9b1b400a232213 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 524d04389c3d1fe309e1fc2ac8466991db33331c..0cfaeb3efa7f034093b990ae596972fa83aafcf0 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 %}