add hint to translation tool for users with unsupported language
This commit is contained in:
parent
fe4e5aa639
commit
aeeaf34c49
@ -131,6 +131,11 @@
|
|||||||
"Welcome! Looks like this is your first time here.",
|
"Welcome! Looks like this is your first time here.",
|
||||||
"To get started, you can drag the sliders below and glitch an image.",
|
"To get started, you can drag the sliders below and glitch an image.",
|
||||||
"You can also import an image from your device. Just click on the OPEN button in the menu."
|
"You can also import an image from your device. Just click on the OPEN button in the menu."
|
||||||
|
],
|
||||||
|
"newlanguage": [
|
||||||
|
"Welcome back! I hope you like the image glitcher.\n\nIt looks like you speak another language next to English.",
|
||||||
|
"Do you think you could help other users of this app and translate some text into another language?",
|
||||||
|
"Please have a look at the [Translation Tool](translation.html) if you’re interested. Thank you!"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,8 +72,8 @@ require( [
|
|||||||
var storageModel = StorageModel();
|
var storageModel = StorageModel();
|
||||||
var controlsModel = ControlsModel( config.defaultControlParams );
|
var controlsModel = ControlsModel( config.defaultControlParams );
|
||||||
var networkModel = NetworkModel();
|
var networkModel = NetworkModel();
|
||||||
var settingsModel = SettingsModel();
|
|
||||||
var localisationModel = LocalisationModel.sharedInstance;
|
var localisationModel = LocalisationModel.sharedInstance;
|
||||||
|
var settingsModel = SettingsModel();
|
||||||
|
|
||||||
var appView = AppView( document.body );
|
var appView = AppView( document.body );
|
||||||
var navView = NavView( appView.el );
|
var navView = NavView( appView.el );
|
||||||
@ -198,6 +198,7 @@ require( [
|
|||||||
.on( 'loaditem', loadEntry )
|
.on( 'loaditem', loadEntry )
|
||||||
.on( 'statusmessage', indicatorView.showMessage )
|
.on( 'statusmessage', indicatorView.showMessage )
|
||||||
.on( 'error', indicatorView.showError )
|
.on( 'error', indicatorView.showError )
|
||||||
|
.on( 'visits', welcomeView.updateVisits )
|
||||||
.on( 'firstvisit', welcomeView.show );
|
.on( 'firstvisit', welcomeView.show );
|
||||||
|
|
||||||
networkModel
|
networkModel
|
||||||
@ -216,6 +217,7 @@ require( [
|
|||||||
localisationModel
|
localisationModel
|
||||||
.on( 'error', indicatorView.showError )
|
.on( 'error', indicatorView.showError )
|
||||||
.on( 'error', hideAppLoader )
|
.on( 'error', hideAppLoader )
|
||||||
|
.on( 'newlanguage', welcomeView.showLanguageHint )
|
||||||
.on( 'update', hideAppLoader );
|
.on( 'update', hideAppLoader );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,8 +232,8 @@ require( [
|
|||||||
localforage.config( config.localForage );
|
localforage.config( config.localForage );
|
||||||
|
|
||||||
var driver = [
|
var driver = [
|
||||||
localforage.WEBSQL,
|
|
||||||
localforage.INDEXEDDB,
|
localforage.INDEXEDDB,
|
||||||
|
localforage.WEBSQL,
|
||||||
localforage.LOCALSTORAGE
|
localforage.LOCALSTORAGE
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ define(
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var publishers = addPublishers( self, 'update', 'error' );
|
var publishers = addPublishers( self, 'update', 'newlanguage', 'error' );
|
||||||
|
|
||||||
var textElData = [ ];
|
var textElData = [ ];
|
||||||
var texts = '';
|
var texts = '';
|
||||||
@ -20,6 +20,30 @@ define(
|
|||||||
|
|
||||||
var linkOptions = { links: { newTab: true } };
|
var linkOptions = { links: { newTab: true } };
|
||||||
|
|
||||||
|
var userLanguage = ( navigator.language || navigator.userLanguage || '' ).toLowerCase();
|
||||||
|
|
||||||
|
// detect user language
|
||||||
|
if ( userLanguage !== '' ) {
|
||||||
|
var matchingLanguageWasFound = false;
|
||||||
|
|
||||||
|
if ( config.settings.language.options.indexOf( userLanguage ) > -1 ) {
|
||||||
|
config.settings.language.value = userLanguage;
|
||||||
|
matchingLanguageWasFound = true;
|
||||||
|
} else {
|
||||||
|
// en-au -> en-us
|
||||||
|
config.settings.language.options.forEach( function ( languageOption ) {
|
||||||
|
if ( userLanguage.substr( 0, 2 ) === languageOption.substr( 0, 2 ) ) {
|
||||||
|
config.settings.language.value = languageOption;
|
||||||
|
matchingLanguageWasFound = true;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! matchingLanguageWasFound ) {
|
||||||
|
setTimeout( publishers.newlanguage.dispatch, 100, userLanguage );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loadLanguageFromStorage();
|
loadLanguageFromStorage();
|
||||||
|
|
||||||
// receive message from the translation tool and
|
// receive message from the translation tool and
|
||||||
|
|||||||
@ -14,21 +14,7 @@ define(
|
|||||||
var worker;
|
var worker;
|
||||||
var defaultSettings = config.settings;
|
var defaultSettings = config.settings;
|
||||||
var userLanguage = ( navigator.language || navigator.userLanguage || '' ).toLowerCase();
|
var userLanguage = ( navigator.language || navigator.userLanguage || '' ).toLowerCase();
|
||||||
|
|
||||||
// set initial user language
|
|
||||||
if ( userLanguage !== '' ) {
|
|
||||||
if ( defaultSettings.language.options.indexOf( userLanguage ) > -1 ) {
|
|
||||||
defaultSettings.language.value = userLanguage;
|
|
||||||
} else {
|
|
||||||
// en-au -> en-us
|
|
||||||
defaultSettings.language.options.forEach( function ( languageOption ) {
|
|
||||||
if ( userLanguage.substr( 0, 2 ) === languageOption.substr( 0, 2 ) ) {
|
|
||||||
defaultSettings.language.value = languageOption;
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var settings = { };
|
var settings = { };
|
||||||
|
|
||||||
if ( useLocalForage && browser.test( 'webworker' ) && browser.test( 'browserdb' ) && ! browser.test( 'safari' ) ) {
|
if ( useLocalForage && browser.test( 'webworker' ) && browser.test( 'browserdb' ) && ! browser.test( 'safari' ) ) {
|
||||||
|
|||||||
@ -16,6 +16,7 @@ define(
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var isFirstVisit = false;
|
var isFirstVisit = false;
|
||||||
|
var visitCount = 0;
|
||||||
var entries = { };
|
var entries = { };
|
||||||
var useLocalForage = browser.test( 'localforage' ) && localforage;
|
var useLocalForage = browser.test( 'localforage' ) && localforage;
|
||||||
var worker;
|
var worker;
|
||||||
@ -23,7 +24,7 @@ define(
|
|||||||
var publisherNames = [
|
var publisherNames = [
|
||||||
'update', 'save', 'loaditem',
|
'update', 'save', 'loaditem',
|
||||||
'removeall', 'removelocaldata', 'removeimgurdata',
|
'removeall', 'removelocaldata', 'removeimgurdata',
|
||||||
'firstvisit', 'error', 'statusmessage'
|
'visits', 'firstvisit', 'error', 'statusmessage'
|
||||||
];
|
];
|
||||||
|
|
||||||
var publishers = addPublishers( self, publisherNames );
|
var publishers = addPublishers( self, publisherNames );
|
||||||
@ -164,11 +165,17 @@ define(
|
|||||||
entries = loadedData && loadedData.entries ? loadedData.entries : { };
|
entries = loadedData && loadedData.entries ? loadedData.entries : { };
|
||||||
publishers.update.dispatch( entries );
|
publishers.update.dispatch( entries );
|
||||||
|
|
||||||
|
visitCount = ( loadedData && loadedData.visitCount ) ? loadedData.visitCount : 1;
|
||||||
isFirstVisit = ( loadedData && loadedData.lastVisit ) ? false : true;
|
isFirstVisit = ( loadedData && loadedData.lastVisit ) ? false : true;
|
||||||
|
|
||||||
if ( isFirstVisit ) {
|
if ( isFirstVisit ) {
|
||||||
publishers.firstvisit.dispatch();
|
publishers.firstvisit.dispatch();
|
||||||
save();
|
}
|
||||||
|
|
||||||
|
save();
|
||||||
|
|
||||||
|
if ( visitCount ) {
|
||||||
|
publishers.visitCount.dispatch( visitCount );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( typeof callback === 'function' ) {
|
if ( typeof callback === 'function' ) {
|
||||||
@ -187,7 +194,7 @@ define(
|
|||||||
if ( worker ) {
|
if ( worker ) {
|
||||||
sendMessageToWorker( 'save' );
|
sendMessageToWorker( 'save' );
|
||||||
} else {
|
} else {
|
||||||
localforage.setItem( storageKey, { entries: entries, lastVisit: Date.now() }, function ( err, savedData ) {
|
localforage.setItem( storageKey, { entries: entries, lastVisit: Date.now(), visitCount: visitCount + 1 }, function ( err, savedData ) {
|
||||||
if ( err ) {
|
if ( err ) {
|
||||||
publishers.error.dispatch( 'file.error.save' );
|
publishers.error.dispatch( 'file.error.save' );
|
||||||
console && console.log( 'localforage error', err );
|
console && console.log( 'localforage error', err );
|
||||||
|
|||||||
@ -49,8 +49,12 @@ define(
|
|||||||
function addNotification ( type, params ) {
|
function addNotification ( type, params ) {
|
||||||
var notificationEl = elHelper.createEl( 'div', 'notification notification-' + type, notificationsEl );
|
var notificationEl = elHelper.createEl( 'div', 'notification notification-' + type, notificationsEl );
|
||||||
|
|
||||||
if ( params.data && params.data.innerHTML && params.data.args && params.data.args.length ) {
|
if ( params.data && params.data.innerHTML ) {
|
||||||
loc.apply( null, [ notificationEl, 'innerHTML', params.message ].concat( params.data.args ) );
|
if ( params.data.args && params.data.args.length ) {
|
||||||
|
loc.apply( null, [ notificationEl, 'innerHTML', params.message ].concat( params.data.args ) );
|
||||||
|
} else {
|
||||||
|
loc.apply( null, [ notificationEl, 'innerHTML', params.message ] );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
loc( notificationEl, 'textContent', params.message );
|
loc( notificationEl, 'textContent', params.message );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,8 @@ define(
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var publishers = addPublishers( self, 'message' );
|
var publishers = addPublishers( self, 'message' );
|
||||||
|
var visitCount = 0;
|
||||||
|
var isOnline = false;
|
||||||
|
|
||||||
function show () {
|
function show () {
|
||||||
var messages = [
|
var messages = [
|
||||||
@ -28,7 +30,29 @@ define(
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showLanguageHint ( languageName ) {
|
||||||
|
if ( visitCount % 4 === 1 ) {
|
||||||
|
var messages = [
|
||||||
|
'welcome.newlanguage.0',
|
||||||
|
'welcome.newlanguage.1',
|
||||||
|
'welcome.newlanguage.2'
|
||||||
|
];
|
||||||
|
|
||||||
|
messages.forEach( function ( message, index ) {
|
||||||
|
setTimeout( function () {
|
||||||
|
publishers.message.dispatch( message, { innerHTML: true }, index < 2 ? 4000 : 6000 );
|
||||||
|
}, index * 2600 );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateVisits ( newVisitCount ) {
|
||||||
|
visitCount = newVisitCount;
|
||||||
|
}
|
||||||
|
|
||||||
self.show = show;
|
self.show = show;
|
||||||
|
self.updateVisits = updateVisits;
|
||||||
|
self.showLanguageHint = showLanguageHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
return WelcomeView;
|
return WelcomeView;
|
||||||
|
|||||||
@ -3,6 +3,7 @@ importScripts( '../lib/md5.js' );
|
|||||||
|
|
||||||
var storageKey = 'items';
|
var storageKey = 'items';
|
||||||
var entries = { };
|
var entries = { };
|
||||||
|
var visitCount = 0;
|
||||||
|
|
||||||
self.addEventListener( 'message', receivedMessageEvent, false );
|
self.addEventListener( 'message', receivedMessageEvent, false );
|
||||||
|
|
||||||
@ -161,11 +162,17 @@ function load ( callback ) {
|
|||||||
entries = loadedData && loadedData.entries ? loadedData.entries : { };
|
entries = loadedData && loadedData.entries ? loadedData.entries : { };
|
||||||
sendMessage( 'update', entries );
|
sendMessage( 'update', entries );
|
||||||
|
|
||||||
|
visitCount = ( loadedData && loadedData.visitCount ) ? loadedData.visitCount : 1;
|
||||||
isFirstVisit = ( loadedData && loadedData.lastVisit ) ? false : true;
|
isFirstVisit = ( loadedData && loadedData.lastVisit ) ? false : true;
|
||||||
|
|
||||||
if ( isFirstVisit ) {
|
if ( isFirstVisit ) {
|
||||||
sendMessage( 'firstvisit' );
|
sendMessage( 'firstvisit' );
|
||||||
save();
|
}
|
||||||
|
|
||||||
|
save();
|
||||||
|
|
||||||
|
if ( visitCount ) {
|
||||||
|
sendMessage( 'visits', visitCount );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( typeof callback === 'function' ) {
|
if ( typeof callback === 'function' ) {
|
||||||
@ -176,7 +183,7 @@ function load ( callback ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function save ( callback ) {
|
function save ( callback ) {
|
||||||
localforage.setItem( storageKey, { entries: entries, lastVisit: Date.now() }, function ( err, savedData ) {
|
localforage.setItem( storageKey, { entries: entries, lastVisit: Date.now(), visitCount: visitCount + 1 }, function ( err, savedData ) {
|
||||||
if ( err ) {
|
if ( err ) {
|
||||||
sendError( 'file.error.save' );
|
sendError( 'file.error.save' );
|
||||||
console && console.log( 'localforage error', err );
|
console && console.log( 'localforage error', err );
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user