0
0
mirror of https://github.com/Doodle3D/doodle3d-connect.git synced 2024-12-26 02:23:48 +01:00

Merged branch develop into master

This commit is contained in:
peteruithoven 2016-01-22 11:11:59 +01:00
commit a748495c9e
4 changed files with 258 additions and 86 deletions

View File

@ -33,14 +33,14 @@
}); });
$.mobile.document.on( "pageshow", PAGE_ID, function( event, data ) { $.mobile.document.on( "pageshow", PAGE_ID, function( event, data ) {
//console.log("Boxes page pageshow"); //console.log("Boxes page pageshow");
addToHomescreen(/*{ addToHomescreen({
debug: true, // activate debug mode in ios emulation //debug: true, // show on desktop browsers and unsupported devices
skipFirstVisit: false, // show at first access skipFirstVisit: true, // Don't show on first visit
startDelay: 0, // display the message right away //startDelay: 0, // display the message right away
lifespan: 0, // do not automatically kill the call out //lifespan: 0, // do not automatically kill the call out
displayPace: 0, // do not obey the display pace //displayPace: 0, // do not obey the display pace
maxDisplayCount: 0 // do not obey the max display count //maxDisplayCount: 0 // do not obey the max display count
}*/); });
}); });
$.mobile.document.on( "pagebeforehide", PAGE_ID, function( event, data ) { $.mobile.document.on( "pagebeforehide", PAGE_ID, function( event, data ) {
//console.log("Boxes page pagehide"); //console.log("Boxes page pagehide");

View File

@ -171,7 +171,7 @@
var fields = [ ts.substr(0, 4), ts.substr(4, 2), ts.substr(6, 2) ]; var fields = [ ts.substr(0, 4), ts.substr(4, 2), ts.substr(6, 2) ];
if (!fields || fields.length !== 3 || fields[1] > 12) { return null; } if (!fields || fields.length !== 3 || fields[1] > 12) { return null; }
var abbrMonths = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Sep', 'Aug', 'Oct', 'Nov', 'Dec' ]; var abbrMonths = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];
return abbrMonths[fields[1] - 1] + " " + fields[2] + ", " + fields[0]; return abbrMonths[fields[1] - 1] + " " + fields[2] + ", " + fields[0];
} }
function noRetainCheckboxChanged () { function noRetainCheckboxChanged () {

View File

@ -1,4 +1,4 @@
/* Add to Homescreen v3.0.4 ~ (c) 2014 Matteo Spinelli ~ @license: http://cubiq.org/license */ /* Add to Homescreen v3.2.2 ~ (c) 2015 Matteo Spinelli ~ @license: http://cubiq.org/license */
(function (window, document) { (function (window, document) {
/* /*
_ _ _____ _____ _ _ _____ _____
@ -8,9 +8,17 @@
by Matteo Spinelli ~ http://cubiq.org by Matteo Spinelli ~ http://cubiq.org
*/ */
// Check for addEventListener browser support (prevent errors in IE<9)
var _eventListener = 'addEventListener' in window;
// Check if document is loaded, needed by autostart // Check if document is loaded, needed by autostart
var _DOMReady = false; var _DOMReady = false;
window.addEventListener('load', loaded, false); if ( document.readyState === 'complete' ) {
_DOMReady = true;
} else if ( _eventListener ) {
window.addEventListener('load', loaded, false);
}
function loaded () { function loaded () {
window.removeEventListener('load', loaded, false); window.removeEventListener('load', loaded, false);
_DOMReady = true; _DOMReady = true;
@ -30,32 +38,109 @@ function ath (options) {
// message in all supported languages // message in all supported languages
ath.intl = { ath.intl = {
de_de: {
ios: 'Um diese Web-App zum Home-Bildschirm hinzuzufügen, tippen Sie auf %icon und dann <strong>Zum Home-Bildschirm</strong>.',
android: 'Um diese Web-App zum Home-Bildschirm hinzuzufügen, öffnen Sie das Menü und tippen dann auf <strong>Zum Startbildschirm hinzufügen</strong>. <small>Wenn Ihr Gerät eine Menütaste hat, lässt sich das Browsermenü über diese öffnen. Ansonsten tippen Sie auf <span class="ath-action-icon">icon</span>.</small>',
},
da_dk: {
ios: 'For at tilføje denne web app til hjemmeskærmen: Tryk %icon og derefter <strong>Føj til hjemmeskærm</strong>.',
android: 'For at tilføje denne web app til hjemmeskærmen, åbn browser egenskaber menuen og tryk på <strong>Føj til hjemmeskærm</strong>. <small>Denne menu kan tilgås ved at trykke på menu knappen, hvis din enhed har en, eller ved at trykke på det øverste højre menu ikon <span class="ath-action-icon">icon</span>.</small>',
},
en_us: { en_us: {
message: 'To add this web app to the home screen: tap %icon and then <strong>%action</strong>.', ios: 'To add this web app to the home screen: tap %icon and then <strong>Add to Home Screen</strong>.',
action: { ios: 'Add to Home Screen', android: 'Add to homescreen', windows: 'pin to start' } android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
}, },
es_es: { es_es: {
message: 'Para añadir esta aplicación web a la pantalla de inicio: pulsa %icon y selecciona <strong>%action</strong>.', ios: 'Para añadir esta aplicación web a la pantalla de inicio: pulsa %icon y selecciona <strong>Añadir a pantalla de inicio</strong>.',
action: { ios: 'Añadir a pantalla de inicio', android: 'Añadir a pantalla de inicio', windows: 'Añadir a inicio' } android: 'Para añadir esta aplicación web a la pantalla de inicio, abre las opciones y pulsa <strong>Añadir a pantalla inicio</strong>. <small>El menú se puede acceder pulsando el botón táctil en caso de tenerlo, o bien el icono de la parte superior derecha de la pantalla <span class="ath-action-icon">icon</span>.</small>',
},
fi_fi: {
ios: 'Liitä tämä sovellus kotivalikkoon: klikkaa %icon ja tämän jälkeen <strong>Lisää kotivalikkoon</strong>.',
android: 'Lisätäksesi tämän sovelluksen aloitusnäytölle, avaa selaimen valikko ja klikkaa tähti -ikonia tai <strong>Lisää aloitusnäytölle tekstiä</strong>. <small>Valikkoon pääsee myös painamalla menuvalikkoa, jos laitteessasi on sellainen tai koskettamalla oikealla yläkulmassa menu ikonia <span class="ath-action-icon">icon</span>.</small>',
},
fr_fr: {
ios: 'Pour ajouter cette application web sur l\'écran d\'accueil : Appuyez %icon et sélectionnez <strong>Ajouter sur l\'écran d\'accueil</strong>.',
android: 'Pour ajouter cette application web sur l\'écran d\'accueil : Appuyez sur le bouton "menu", puis sur <strong>Ajouter sur l\'écran d\'accueil</strong>. <small>Le menu peut-être accessible en appyant sur le bouton "menu" du téléphone s\'il en possède un <i class="fa fa-bars"></i>. Sinon, il se trouve probablement dans la coin supérieur droit du navigateur %icon.</small>',
},
he_il: {
ios: '<span dir="rtl">להוספת האפליקציה למסך הבית: ללחוץ על %icon ואז <strong>הוסף למסך הבית</strong>.</span>',
android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
}, },
it_it: { it_it: {
message: 'Per Aggiungere questa web app alla schermata iniziale: premi %icon e poi <strong>%action</strong>.', ios: 'Per aggiungere questa web app alla schermata iniziale: premi %icon e poi <strong>Aggiungi a Home</strong>.',
action: { ios: 'Aggiungi a Home', android: 'Aggiungi alla homescreen', windows: 'aggiungi a start' } android: 'Per aggiungere questa web app alla schermata iniziale, apri il menu opzioni del browser e premi su <strong>Aggiungi alla homescreen</strong>. <small>Puoi accedere al menu premendo il pulsante hardware delle opzioni se la tua device ne ha uno, oppure premendo l\'icona <span class="ath-action-icon">icon</span> in alto a destra.</small>',
},
ja_jp: {
ios: 'このウェプアプリをホーム画面に追加するために%iconを押して<strong>ホーム画面に追加</strong>。',
android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
},
ko_kr: {
ios: '홈 화면에 바로가기 생성: %icon 을 클릭한 후 <strong>홈 화면에 추가</strong>.',
android: '브라우저 옵션 메뉴의 <string>홈 화면에 추가</string>를 클릭하여 홈화면에 바로가기를 생성할 수 있습니다. <small>옵션 메뉴는 장치의 메뉴 버튼을 누르거나 오른쪽 상단의 메뉴 아이콘 <span class="ath-action-icon">icon</span>을 클릭하여 접근할 수 있습니다.</small>'
},
nb_no: {
ios: 'For å installere denne appen på hjem-skjermen: trykk på %icon og deretter <strong>Legg til på Hjem-skjerm</strong>.',
android: 'For å legge til denne webappen på startsiden åpner en nettlesermenyen og velger <strong>Legg til på startsiden</strong>. <small>Menyen åpnes ved å trykke på den fysiske menyknappen hvis enheten har det, eller ved å trykke på menyikonet øverst til høyre <span class="ath-action-icon">icon</span>.</small>',
},
pt_br: {
ios: 'Para adicionar este app à tela de início: clique %icon e então <strong>Tela de início</strong>.',
android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
},
pt_pt: {
ios: 'Para adicionar esta app ao ecrã principal: clique %icon e depois <strong>Ecrã principal</strong>.',
android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
}, },
nl_nl: { nl_nl: {
message: 'Om deze webapp op je telefoon te installeren, klik op %icon en dan <strong>%action</strong>.', ios: 'Om deze webapp op je telefoon te installeren, klik op %icon en dan <strong>Zet in beginscherm</strong>.',
action: { ios: 'Voeg toe aan beginscherm', android: 'Toevoegen aan startscherm', windows: 'Aan startscherm vastmaken' } android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
} },
ru_ru: {
ios: 'Чтобы добавить этот сайт на свой домашний экран, нажмите на иконку %icon и затем <strong>На экран "Домой"</strong>.',
android: 'Чтобы добавить сайт на свой домашний экран, откройте меню браузера и нажмите на <strong>Добавить на главный экран</strong>. <small>Меню можно вызвать, нажав на кнопку меню вашего телефона, если она есть. Или найдите иконку сверху справа <span class="ath-action-icon">иконка</span>.</small>',
},
sv_se: {
ios: 'För att lägga till denna webbapplikation på hemskärmen: tryck på %icon och därefter <strong>Lägg till på hemskärmen</strong>.',
android: 'För att lägga till den här webbappen på hemskärmen öppnar du webbläsarens alternativ-meny och väljer <strong>Lägg till på startskärmen</strong>. <small>Man hittar menyn genom att trycka på hårdvaruknappen om din enhet har en sådan, eller genom att trycka på menyikonen högst upp till höger <span class="ath-action-icon">icon</span>.</small>',
},
zh_cn: {
ios: '如要把应用程序加至主屏幕,请点击%icon, 然后<strong>添加到主屏幕</strong>',
android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
},
zh_tw: {
ios: '如要把應用程式加至主屏幕, 請點擊%icon, 然後<strong>加至主屏幕</strong>.',
android: 'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>',
},
}; };
// Add 2 characters language support (Android mostly)
for ( var lang in ath.intl ) {
ath.intl[lang.substr(0, 2)] = ath.intl[lang];
}
// default options // default options
ath.defaults = { ath.defaults = {
appID: 'org.cubiq.addtohome', // local storage name (no need to change) appID: 'org.cubiq.addtohome', // local storage name (no need to change)
fontSize: 15, // base font size, used to properly resize the popup based on viewport scale factor fontSize: 15, // base font size, used to properly resize the popup based on viewport scale factor
debug: false, // override browser checks debug: false, // override browser checks
logging: false, // log reasons for showing or not showing to js console; defaults to true when debug is true
modal: false, // prevent further actions until the message is closed modal: false, // prevent further actions until the message is closed
mandatory: false, // you can't proceed if you don't add the app to the homescreen mandatory: false, // you can't proceed if you don't add the app to the homescreen
autostart: true, // show the message automatically autostart: true, // show the message automatically
@ -72,25 +157,23 @@ ath.defaults = {
onRemove: null, // executed when the message is removed onRemove: null, // executed when the message is removed
onAdd: null, // when the application is launched the first time from the homescreen (guesstimate) onAdd: null, // when the application is launched the first time from the homescreen (guesstimate)
onPrivate: null, // executed if user is in private mode onPrivate: null, // executed if user is in private mode
privateModeOverride: false, // show the message even in private mode (very rude)
detectHomescreen: false // try to detect if the site has been added to the homescreen (false | true | 'hash' | 'queryString' | 'smartURL') detectHomescreen: false // try to detect if the site has been added to the homescreen (false | true | 'hash' | 'queryString' | 'smartURL')
}; };
// browser info and capability // browser info and capability
var _ua = window.navigator.userAgent; var _ua = window.navigator.userAgent;
var _nav = window.navigator; var _nav = window.navigator;
_extend(ath, { _extend(ath, {
hasToken: document.location.hash == '#ath' || _reSmartURL.test(document.location.href) || _reQueryString.test(document.location.search), hasToken: document.location.hash == '#ath' || _reSmartURL.test(document.location.href) || _reQueryString.test(document.location.search),
isRetina: window.devicePixelRatio && window.devicePixelRatio > 1, isRetina: window.devicePixelRatio && window.devicePixelRatio > 1,
isIDevice: (/iphone|ipod|ipad/i).test(_ua), isIDevice: (/iphone|ipod|ipad/i).test(_ua),
isMobileChrome: _ua.indexOf('Android') > -1 && (/Chrome\/[.0-9]*/).test(_ua), isMobileChrome: _ua.indexOf('Android') > -1 && (/Chrome\/[.0-9]*/).test(_ua) && _ua.indexOf("Version") == -1,
isMobileIE: _ua.indexOf('Windows Phone') > -1, isMobileIE: _ua.indexOf('Windows Phone') > -1,
language: _nav.language && _nav.language.toLowerCase().replace('-', '_') || '' language: _nav.language && _nav.language.toLowerCase().replace('-', '_') || ''
}); });
// normalize language string so it always looks like aa_bb
if ( ath.language.length == 2 ) {
ath.language += '_' + ath.language;
}
// falls back to en_us if language is unsupported // falls back to en_us if language is unsupported
ath.language = ath.language && ath.language in ath.intl ? ath.language : 'en_us'; ath.language = ath.language && ath.language in ath.intl ? ath.language : 'en_us';
@ -100,7 +183,7 @@ ath.OS = ath.isIDevice ? 'ios' : ath.isMobileChrome ? 'android' : ath.isMobileIE
ath.OSVersion = _ua.match(/(OS|Android) (\d+[_\.]\d+)/); ath.OSVersion = _ua.match(/(OS|Android) (\d+[_\.]\d+)/);
ath.OSVersion = ath.OSVersion && ath.OSVersion[2] ? +ath.OSVersion[2].replace('_', '.') : 0; ath.OSVersion = ath.OSVersion && ath.OSVersion[2] ? +ath.OSVersion[2].replace('_', '.') : 0;
ath.isStandalone = window.navigator.standalone || ( ath.isMobileChrome && ( screen.height - document.documentElement.clientHeight < 40 ) ); // TODO: check the lame polyfill ath.isStandalone = 'standalone' in window.navigator && window.navigator.standalone;
ath.isTablet = (ath.isMobileSafari && _ua.indexOf('iPad') > -1) || (ath.isMobileChrome && _ua.indexOf('Mobile') < 0); ath.isTablet = (ath.isMobileSafari && _ua.indexOf('iPad') > -1) || (ath.isMobileChrome && _ua.indexOf('Mobile') < 0);
ath.isCompatible = (ath.isMobileSafari && ath.OSVersion >= 6) || ath.isMobileChrome; // TODO: add winphone ath.isCompatible = (ath.isMobileSafari && ath.OSVersion >= 6) || ath.isMobileChrome; // TODO: add winphone
@ -115,16 +198,38 @@ var _defaultSession = {
ath.removeSession = function (appID) { ath.removeSession = function (appID) {
try { try {
if (!localStorage) {
throw new Error('localStorage is not defined');
}
localStorage.removeItem(appID || ath.defaults.appID); localStorage.removeItem(appID || ath.defaults.appID);
} catch (e) { } catch (e) {
// we are most likely in private mode // we are most likely in private mode
} }
}; };
ath.doLog = function (logStr) {
if ( this.options.logging ) {
console.log(logStr);
}
};
ath.Class = function (options) { ath.Class = function (options) {
// class methods
this.doLog = ath.doLog;
// merge default options with user config // merge default options with user config
this.options = _extend({}, ath.defaults); this.options = _extend({}, ath.defaults);
_extend(this.options, options); _extend(this.options, options);
// override defaults that are dependent on each other
if ( options && options.debug && (typeof options.logging === "undefined") ) {
this.options.logging = true;
}
// IE<9 so exit (I hate you, really)
if ( !_eventListener ) {
return;
}
// normalize some options // normalize some options
this.options.mandatory = this.options.mandatory && ( 'standalone' in window.navigator || this.options.debug ); this.options.mandatory = this.options.mandatory && ( 'standalone' in window.navigator || this.options.debug );
@ -138,14 +243,15 @@ ath.Class = function (options) {
if ( this.options.debug ) { if ( this.options.debug ) {
ath.isCompatible = true; ath.isCompatible = true;
ath.OS = typeof this.options.debug == 'string' ? this.options.debug : ath.OS == 'unsupported' ? 'android' : ath.OS; ath.OS = typeof this.options.debug == 'string' ? this.options.debug : ath.OS == 'unsupported' ? 'android' : ath.OS;
ath.OSVersion = ath.OS == 'ios' ? '7' : '4'; ath.OSVersion = ath.OS == 'ios' ? '8' : '4';
} }
// the element the message will be appended to // the element the message will be appended to
this.container = document.documentElement; this.container = document.documentElement;
// load session // load session
this.session = JSON.parse(localStorage.getItem(this.options.appID)); this.session = this.getItem(this.options.appID);
this.session = this.session ? JSON.parse(this.session) : undefined;
// user most likely came from a direct link containing our token, we don't need it and we remove it // user most likely came from a direct link containing our token, we don't need it and we remove it
if ( ath.hasToken && ( !ath.isCompatible || !this.session ) ) { if ( ath.hasToken && ( !ath.isCompatible || !this.session ) ) {
@ -155,6 +261,7 @@ ath.Class = function (options) {
// the device is not supported // the device is not supported
if ( !ath.isCompatible ) { if ( !ath.isCompatible ) {
this.doLog("Add to homescreen: not displaying callout because device not supported");
return; return;
} }
@ -162,6 +269,10 @@ ath.Class = function (options) {
// check if we can use the local storage // check if we can use the local storage
try { try {
if (!localStorage) {
throw new Error('localStorage is not defined');
}
localStorage.setItem(this.options.appID, JSON.stringify(this.session)); localStorage.setItem(this.options.appID, JSON.stringify(this.session));
ath.hasLocalStorage = true; ath.hasLocalStorage = true;
} catch (e) { } catch (e) {
@ -183,13 +294,21 @@ ath.Class = function (options) {
} }
// check compatibility with old versions of add to homescreen. Opt-out if an old session is found // check compatibility with old versions of add to homescreen. Opt-out if an old session is found
if ( localStorage.getItem('addToHome') ) { if ( this.getItem('addToHome') ) {
this.optOut(); this.optOut();
} }
// critical errors: // critical errors:
// user opted out, already added to the homescreen, not a valid location if ( this.session.optedout ) {
if ( this.session.optedout || this.session.added || !isValidLocation ) { this.doLog("Add to homescreen: not displaying callout because user opted out");
return;
}
if ( this.session.added ) {
this.doLog("Add to homescreen: not displaying callout because already added to the homescreen");
return;
}
if ( !isValidLocation ) {
this.doLog("Add to homescreen: not displaying callout because not a valid location");
return; return;
} }
@ -205,6 +324,7 @@ ath.Class = function (options) {
} }
} }
this.doLog("Add to homescreen: not displaying callout because in standalone mode");
return; return;
} }
@ -224,6 +344,7 @@ ath.Class = function (options) {
} }
} }
this.doLog("Add to homescreen: not displaying callout because URL has token, so we are likely coming from homescreen");
return; return;
} }
@ -244,12 +365,14 @@ ath.Class = function (options) {
// we do not show the message if this is your first visit // we do not show the message if this is your first visit
if ( this.options.skipFirstVisit ) { if ( this.options.skipFirstVisit ) {
this.doLog("Add to homescreen: not displaying callout because skipping first visit");
return; return;
} }
} }
// we do no show the message in private mode // we do no show the message in private mode
if ( !ath.hasLocalStorage ) { if ( !this.options.privateModeOverride && !ath.hasLocalStorage ) {
this.doLog("Add to homescreen: not displaying callout because browser is in private mode");
return; return;
} }
@ -261,6 +384,7 @@ ath.Class = function (options) {
} }
if ( this.options.autostart ) { if ( this.options.autostart ) {
this.doLog("Add to homescreen: autostart displaying callout");
this.show(); this.show();
} }
}; };
@ -291,11 +415,14 @@ ath.Class.prototype = {
// in autostart mode wait for the document to be ready // in autostart mode wait for the document to be ready
if ( this.options.autostart && !_DOMReady ) { if ( this.options.autostart && !_DOMReady ) {
setTimeout(this.show.bind(this), 50); setTimeout(this.show.bind(this), 50);
// we are not displaying callout because DOM not ready, but don't log that because
// it would log too frequently
return; return;
} }
// message already on screen // message already on screen
if ( this.shown ) { if ( this.shown ) {
this.doLog("Add to homescreen: not displaying callout because already shown on screen");
return; return;
} }
@ -305,16 +432,19 @@ ath.Class.prototype = {
if ( force !== true ) { if ( force !== true ) {
// this is needed if autostart is disabled and you programmatically call the show() method // this is needed if autostart is disabled and you programmatically call the show() method
if ( !this.ready ) { if ( !this.ready ) {
this.doLog("Add to homescreen: not displaying callout because not ready");
return; return;
} }
// we obey the display pace (prevent the message to popup too often) // we obey the display pace (prevent the message to popup too often)
if ( now - lastDisplayTime < this.options.displayPace * 60000 ) { if ( now - lastDisplayTime < this.options.displayPace * 60000 ) {
this.doLog("Add to homescreen: not displaying callout because displayed recently");
return; return;
} }
// obey the maximum number of display count // obey the maximum number of display count
if ( this.options.maxDisplayCount && this.session.displayCount >= this.options.maxDisplayCount ) { if ( this.options.maxDisplayCount && this.session.displayCount >= this.options.maxDisplayCount ) {
this.doLog("Add to homescreen: not displaying callout because displayed too many times already");
return; return;
} }
} }
@ -337,12 +467,16 @@ ath.Class.prototype = {
var message = ''; var message = '';
if ( this.options.message in ath.intl ) { // you can force the locale if ( typeof this.options.message == 'object' && ath.language in this.options.message ) { // use custom language message
message = ath.intl[this.options.message].message.replace('%action', ath.intl[this.options.message].action[ath.OS]); message = this.options.message[ath.language][ath.OS];
} else if ( this.options.message !== '' ) { // or use a custom message } else if ( typeof this.options.message == 'object' && ath.OS in this.options.message ) { // use custom os message
message = this.options.message[ath.OS];
} else if ( this.options.message in ath.intl ) { // you can force the locale
message = ath.intl[this.options.message][ath.OS];
} else if ( this.options.message !== '' ) { // use a custom message
message = this.options.message; message = this.options.message;
} else { // otherwise we use our message } else if ( ath.OS in ath.intl[ath.language] ) { // otherwise we use our message
message = ath.intl[ath.language].message.replace('%action', ath.intl[ath.language].action[ath.OS]); message = ath.intl[ath.language][ath.OS];
} }
// add the action icon // add the action icon
@ -362,9 +496,9 @@ ath.Class.prototype = {
// create the actual message element // create the actual message element
this.element = document.createElement('div'); this.element = document.createElement('div');
this.element.className = 'ath-container ath-' + ath.OS + ' ath-' + ath.OS + (ath.OSVersion + '').substr(0,1) + ' ath-' + (ath.isTablet ? 'tablet' : 'phone'); this.element.className = 'ath-container ath-' + ath.OS + ' ath-' + ath.OS + (ath.OSVersion + '').substr(0,1) + ' ath-' + (ath.isTablet ? 'tablet' : 'phone');
this.element.style.cssText = '-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0;-webkit-transform:translate3d(0,0,0);transition-property:transform,opacity;transition-duration:0;transform:translate3d(0,0,0);-webkit-transition-timing-function:ease-out'; this.element.style.cssText = '-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0s;-webkit-transition-timing-function:ease-out;transition-property:transform,opacity;transition-duration:0s;transition-timing-function:ease-out;';
this.element.style.webkitTransform = 'translate3d(0,-' + window.innerHeight + 'px,0)'; this.element.style.webkitTransform = 'translate3d(0,-' + window.innerHeight + 'px,0)';
this.element.style.webkitTransitionDuration = '0s'; this.element.style.transform = 'translate3d(0,-' + window.innerHeight + 'px,0)';
// add the application icon // add the application icon
if ( this.options.icon && this.applicationIcon ) { if ( this.options.icon && this.applicationIcon ) {
@ -388,7 +522,9 @@ ath.Class.prototype = {
this.container.appendChild(this.viewport); this.container.appendChild(this.viewport);
// if we don't have to wait for an image to load, show the message right away // if we don't have to wait for an image to load, show the message right away
if ( !this.img ) { if ( this.img ) {
this.doLog("Add to homescreen: not displaying callout because waiting for img to load");
} else {
this._delayedShow(); this._delayedShow();
} }
}, },
@ -422,8 +558,10 @@ ath.Class.prototype = {
// kick the animation // kick the animation
setTimeout(function () { setTimeout(function () {
that.element.style.webkitTransform = 'translate3d(0,0,0)';
that.element.style.webkitTransitionDuration = '1.2s'; that.element.style.webkitTransitionDuration = '1.2s';
that.element.style.transitionDuration = '1.2s';
that.element.style.webkitTransform = 'translate3d(0,0,0)';
that.element.style.transform = 'translate3d(0,0,0)';
}, 0); }, 0);
// set the destroy timer // set the destroy timer
@ -508,7 +646,9 @@ ath.Class.prototype = {
return; return;
} }
localStorage.setItem(this.options.appID, JSON.stringify(this.session)); if (localStorage) {
localStorage.setItem(this.options.appID, JSON.stringify(this.session));
}
}, },
clearSession: function () { clearSession: function () {
@ -516,6 +656,19 @@ ath.Class.prototype = {
this.updateSession(); this.updateSession();
}, },
getItem: function(item) {
try {
if (!localStorage) {
throw new Error('localStorage is not defined');
}
return localStorage.getItem(item);
} catch(e) {
// Preventing exception for some browsers when fetching localStorage key
ath.hasLocalStorage = false;
}
},
optOut: function () { optOut: function () {
this.session.optedout = true; this.session.optedout = true;
this.updateSession(); this.updateSession();

View File

@ -7,6 +7,7 @@
.ath-viewport { .ath-viewport {
position: relative; position: relative;
z-index: 2147483641; z-index: 2147483641;
pointer-events: none;
-webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-touch-callout: none; -webkit-touch-callout: none;
@ -22,6 +23,7 @@
} }
.ath-modal { .ath-modal {
pointer-events: auto !important;
background: rgba(0,0,0,0.6); background: rgba(0,0,0,0.6);
} }
@ -30,6 +32,7 @@
} }
.ath-container { .ath-container {
pointer-events: auto !important;
position: absolute; position: absolute;
z-index: 2147483641; z-index: 2147483641;
padding: 0.7em 0.6em; padding: 0.7em 0.6em;
@ -46,40 +49,56 @@
text-align: center; text-align: center;
} }
.ath-container small {
font-size: 0.8em;
line-height: 1.3em;
display: block;
margin-top: 0.5em;
}
.ath-ios.ath-phone { .ath-ios.ath-phone {
bottom: 1.8em; bottom: 1.8em;
left: 50%; left: 50%;
margin-left: -9em; margin-left: -9em;
} }
.ath-ios7.ath-tablet {
left: 0.7em;
top: 1.8em;
}
.ath-ios6.ath-tablet { .ath-ios6.ath-tablet {
left: 5em; left: 5em;
top: 1.8em; top: 1.8em;
} }
.ath-android { .ath-ios7.ath-tablet {
right: 1.5em; left: 0.7em;
top: 1.8em; top: 1.8em;
} }
.ath-ios8.ath-tablet {
right: 0.4em;
top: 1.8em;
}
.ath-android {
bottom: 1.8em;
left: 50%;
margin-left: -9em;
}
/* close icon */ /* close icon */
.ath-container:before { .ath-container:before {
content: '×'; content: '';
position: relative; position: relative;
display: block; display: block;
float: right; float: right;
margin: -0.3em -0.25em 0 0.1em; margin: -0.7em -0.6em 0 0.5em;
background-color: rgba(255,255,255,0.7); background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAMAAABmmnOVAAAAdVBMVEUAAAA5OTkzMzM7Ozs3NzdBQUFAQEA/Pz8+Pj5BQUFAQEA/Pz8+Pj5BQUFAQEA/Pz9BQUE+Pj4/Pz8/Pz8+Pj4/Pz8/Pz8/Pz8+Pj4/Pz8+Pj4/Pz8/Pz8/Pz8/Pz8/Pz8+Pj4/Pz8/Pz8/Pz8/Pz9AQEA/Pz+fdCaPAAAAJnRSTlMACQoNDjM4OTo7PEFCQ0RFS6ytsbS1tru8vcTFxu7x8vX19vf4+C5yomAAAAJESURBVHgBvdzLTsJAGEfxr4C2KBcVkQsIDsK8/yPaqIsPzVlyzrKrX/5p0kkXEz81L23otc9NpIbbWia2YVLqdnhlqFlhGWpSDHe1aopsSIpRb8gK0dC3G30b9rVmhWZIimTICsvQtx/FsuYOrWHoDjX3Gu31gzJxdki934WrAIOsAIOsAIOiAMPhPsJTgKGN0BVsYIVsYIVpYIVpYIVpYIVpYIVpYIVpYIVpYIVlAIVgEBRs8BRs8BRs8BRs8BRs8BRs8BRs8BRTNmgKNngKNngKNngKNngKNhiKGxgiOlZoBlaYBlaYBlaYBlaYBlaYBlaYBlaYBlZIBlBMfQMrVAMr2KAqBENSHFHhGEABhi5CV6gGUKgGUKgGUKgGUFwuqgEUvoEVsoEVpoEUpgEUggF+gKTKY+h1fxSlC7/Z+RrxOQ3fcEoAPPHZBlaYBlaYBlaYBlZYBlYIhvLBCstw7PgM7hkiWOEZWGEaWGEaWGEaIsakEAysmHkGVpxmvoEVqoEVpoEVpoEVpoEVpoEVpoEVkoEVgkFQsEFSsEFQsGEcoSvY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnY4CnmbNAUT2c2WAo2eAo2eAo2eAo2eAo2eArNEPFACjZ4CjZ4CjZ4CjaIird/rBvFH6llNCvewdli1URWCIakSIZesUaDoFg36dKFWk9zCZDei3TtwmCj7pC22AwikiIZPEU29IpFNliKxa/hC9DFITjQPYhcAAAAAElFTkSuQmCC);
width: 1.2em; background-color: rgba(255,255,255,0.8);
height: 1.2em; background-size: 50%;
background-repeat: no-repeat;
background-position: 50%;
width: 2.7em;
height: 2.7em;
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
font-size: 2.3em;
color: #a33; color: #a33;
z-index: 2147483642; z-index: 2147483642;
} }
@ -96,17 +115,9 @@
display: none; display: none;
} }
.ath-android:before {
line-height: 1.2em;
}
.ath-ios:before {
line-height: 1em;
}
.ath-container.ath-android:before { .ath-container.ath-android:before {
float: left; float: left;
margin: -0.3em 0.1em 0 -0.2em; margin: -0.7em 0.5em 0 -0.6em;
} }
.ath-container.ath-android.ath-icon:before { .ath-container.ath-android.ath-icon:before {
@ -132,17 +143,11 @@
overflow: hidden; overflow: hidden;
} }
.ath-android .ath-action-icon { .ath-ios7 .ath-action-icon,
width: 1.2em; .ath-ios8 .ath-action-icon {
height: 1.8em;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADUAAADcBAMAAAAig/QJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAFtDAABbQwH5xg68AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAB5QTFRFAAAA////cXFxaWlp////ZmZmnJycoaGhpqam////1D9b6wAAAAV0Uk5TAAgJERExZxYzAAAAYklEQVRYw+3WoQ2AUBAE0SsBOiBUQEIDCArA4FFoHBaJxNItFYz/x5+xz282VmwJTdM0rRzbsS1e7Pm9zdgUVn491rkFmqZpSezEjqo/Sos1HoAEjdjgFmiapiWxG7tq/igfnYteFlnOWZEAAAAASUVORK5CYII=);
background-size: auto 100%;
}
.ath-ios7 .ath-action-icon {
width: 1.6em; width: 1.6em;
height: 1.6em; height: 1.6em;
background-image:url(data:image/png;base64,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); background-image:url(data:image/png;base64,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);
margin-top: -0.3em; margin-top: -0.3em;
background-size: auto 100%; background-size: auto 100%;
} }
@ -150,11 +155,18 @@
.ath-ios6 .ath-action-icon { .ath-ios6 .ath-action-icon {
width: 1.8em; width: 1.8em;
height: 1.8em; height: 1.8em;
background-image:url(data:image/png;base64,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); background-image:url(data:image/png;base64,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);
margin-bottom: 0.4em; margin-bottom: 0.4em;
background-size: 100% auto; background-size: 100% auto;
} }
.ath-android .ath-action-icon {
width: 1.4em;
height: 1.4em;
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAANlBMVEVmZmb///9mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZW6fJrAAAAEXRSTlMAAAYHG21ub8fLz9DR8/T4+RrZ9owAAAB3SURBVHja7dNLDoAgDATQWv4gKve/rEajJOJiWLgg6WzpSyB0aHqHiNj6nL1lovb4C+hYzkSNAT7mryQFAVOeGAj4CjwEtgrWXpD/uZKtwEJApXt+Vn0flzRhgNiFZQkOXY0aADQZCOCPlsZJ46Rx0jhp3IiN2wGDHhxtldrlwQAAAABJRU5ErkJggg==);
background-size: 100% auto;
}
.ath-container p { .ath-container p {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -192,17 +204,6 @@
z-index: 2147483641; z-index: 2147483641;
} }
.ath-android:after {
content: '';
background: #eee;
background: -webkit-linear-gradient(-45deg, rgba(238,238,238,0) 0%,rgba(238,238,238,0) 50%,rgba(238,238,238,1) 50%,rgba(238,238,238,1) 100%);
position: absolute;
width: 2em;
height: 2em;
top: -1.5em;
right: 0;
}
.ath-application-icon { .ath-application-icon {
position: relative; position: relative;
padding: 0; padding: 0;
@ -213,7 +214,6 @@
z-index: 2147483642; z-index: 2147483642;
} }
/* OS specific classes */
.ath-container.ath-ios .ath-application-icon { .ath-container.ath-ios .ath-application-icon {
border-radius: 1em; border-radius: 1em;
box-shadow: 0 0.2em 0.4em rgba(0,0,0,0.3), box-shadow: 0 0.2em 0.4em rgba(0,0,0,0.3),
@ -226,6 +226,10 @@
width: 24em; width: 24em;
} }
.ath-android.ath-phone {
margin-left: -12em;
}
.ath-ios.ath-phone { .ath-ios.ath-phone {
margin-left: -12em; margin-left: -12em;
} }
@ -233,4 +237,19 @@
.ath-ios6:after { .ath-ios6:after {
left: 39%; left: 39%;
} }
.ath-ios8.ath-phone {
left: auto;
bottom: auto;
right: 0.4em;
top: 1.8em;
}
.ath-ios8.ath-phone:after {
bottom: auto;
top: -0.9em;
left: 68%;
z-index: 2147483641;
box-shadow: none;
}
} }