Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattab <matthieu.aubry@gmail.com>2014-01-16 02:20:04 +0400
committermattab <matthieu.aubry@gmail.com>2014-01-16 02:20:04 +0400
commite7a46bb237cb19bf5aed1f293ea24658e3fe452b (patch)
tree7527a002afa2babd9557ac2fcb1ff6f2fffe91cb /libs/jquery
parentc9fa2fa8b77e36bb842ac161d4ead6cc910c2f30 (diff)
Moving files to the jquery lib directory Refs #201
Diffstat (limited to 'libs/jquery')
-rw-r--r--libs/jquery/jquery.smartbanner.js197
-rw-r--r--libs/jquery/stylesheets/jquery.smartbanner.css27
2 files changed, 224 insertions, 0 deletions
diff --git a/libs/jquery/jquery.smartbanner.js b/libs/jquery/jquery.smartbanner.js
new file mode 100644
index 0000000000..912084cf5c
--- /dev/null
+++ b/libs/jquery/jquery.smartbanner.js
@@ -0,0 +1,197 @@
+/*!
+ * 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(/iPad|iPhone|iPod/i) != null) {
+ if (UA.match(/Safari/i) != null &&
+ (UA.match(/CriOS/i) != null ||
+ window.Number(navigator.userAgent.substr(navigator.userAgent.indexOf('OS ') + 3, 3).replace('_', '.')) < 6)) this.type = 'ios' // Check webview and native smart banner support (iOS 6+)
+ } 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"]' : '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 : $('title').text().replace(/\s*[|\-ยท].*$/, '')
+ this.author = this.options.author ? this.options.author : ($('meta[name="author"]').length ? $('meta[name="author"]').attr('content') : window.location.hostname)
+
+ // 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=' : 'https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id')) + this.appId)
+ , inStore=this.options.price ? this.options.price + ' - ' + (this.type == 'android' ? this.options.inGooglePlay : this.type == 'ios' ? this.options.inAppStore : this.options.inWindowsStore) : ''
+ , gloss=this.options.iconGloss === null ? (this.type=='ios') : this.options.iconGloss
+
+ $('body').append('<div id="smartbanner" class="'+this.type+'"><div class="sb-container"><a href="#" class="sb-close">&times;</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>')
+
+ if (this.options.icon) {
+ iconURL = this.options.icon
+ } 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)
+ $('#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)
+ }
+ }
+
+ , listen: function () {
+ $('#smartbanner .sb-close').on('click',$.proxy(this.close, this))
+ $('#smartbanner .sb-button').on('click',$.proxy(this.install, this))
+ }
+
+ , show: function(callback) {
+ $('#smartbanner').stop().animate({top:0},this.options.speedIn).addClass('shown')
+ $('html').animate({marginTop:this.origHtmlMargin+(this.bannerHeight*this.scale)},this.options.speedIn,'swing',callback)
+ }
+
+ , hide: function(callback) {
+ $('#smartbanner').stop().animate({top:-1*this.bannerHeight*this.scale},this.options.speedOut).removeClass('shown')
+ $('html').animate({marginTop:this.origHtmlMargin},this.options.speedOut,'swing',callback)
+ }
+
+ , close: function(e) {
+ e.preventDefault()
+ this.hide()
+ this.setCookie('sb-closed','true',this.options.daysHidden)
+ }
+
+ , install: function(e) {
+ 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=escape(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 unescape(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('typeahead')
+ , options = typeof option == 'object' && option
+ if (!data) $window.data('typeahead', (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
+ inWindowsStore: 'In the Windows Store', //Text of price for Windows
+ 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
+ }
+
+ $.smartbanner.Constructor = SmartBanner
+
+}(window.jQuery);
diff --git a/libs/jquery/stylesheets/jquery.smartbanner.css b/libs/jquery/stylesheets/jquery.smartbanner.css
new file mode 100644
index 0000000000..7ad1a69394
--- /dev/null
+++ b/libs/jquery/stylesheets/jquery.smartbanner.css
@@ -0,0 +1,27 @@
+#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 .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; 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; }