save and load language data to/from localstorage for faster load time

the second time around.
This commit is contained in:
Georg Fischer 2015-12-30 15:20:38 +01:00
parent 39a4d99aad
commit 170951164b

View File

@ -1,7 +1,7 @@
/*global define*/ /*global define*/
define( define(
[ 'config', 'util/dom', 'util/object', 'util/string', 'util/addpublishers', 'lib/reqwest' ], [ 'config', 'util/dom', 'util/object', 'util/string', 'util/addpublishers', 'lib/reqwest', 'lib/localforage.nopromises' ],
function ( config, domHelper, objectHelper, stringHelper, addPublishers, reqwest ) { function ( config, domHelper, objectHelper, stringHelper, addPublishers, reqwest, localforage ) {
function LocalisationModel () { function LocalisationModel () {
if ( ! ( this instanceof LocalisationModel ) ) { if ( ! ( this instanceof LocalisationModel ) ) {
return new LocalisationModel(); return new LocalisationModel();
@ -20,15 +20,17 @@ define(
var linkOptions = { links: { newTab: true } }; var linkOptions = { links: { newTab: true } };
function setLanguage ( newLanguage ) { loadLanguageFromStorage();
if ( newLanguage !== currentLanguage && newLanguage in config.availableLanguages ) {
loadLanguage( newLanguage ); function setLanguage ( newLanguageName ) {
if ( newLanguageName !== currentLanguage && config.settings.language.options.indexOf( newLanguageName ) !== -1 ) {
loadLanguageFile( newLanguageName );
} }
} }
function settingUpdated ( name, value ) { function settingUpdated ( name, value ) {
if ( name === 'language' && value !== currentLanguage ) { if ( name === 'language' && value !== currentLanguage ) {
loadLanguage( value ); setLanguage( value );
} }
} }
@ -44,7 +46,7 @@ define(
updateAllTexts(); updateAllTexts();
} }
function loadLanguage ( languageName ) { function loadLanguageFile ( languageName ) {
languageWasLoaded = false; languageWasLoaded = false;
reqwest( { reqwest( {
@ -57,19 +59,34 @@ define(
publishers.error.dispatch( 'I\'m really sorry. I failed to load the language file for ' + languageName + '. This is a serious error that makes the app very hard to use. Maybe you can try reloading?' ); publishers.error.dispatch( 'I\'m really sorry. I failed to load the language file for ' + languageName + '. This is a serious error that makes the app very hard to use. Maybe you can try reloading?' );
}, },
success: function ( res ) { success: function ( res ) {
languageLoaded( languageName, res ); languageLoaded( res.lang, res );
} }
} ); } );
} }
function languageLoaded ( newLanguageName, newTexts ) { function loadLanguageFromStorage () {
localforage.getItem( config.keys.language, function ( err, loadedLanguage ) {
if ( ! err ) {
if ( loadedLanguage && loadedLanguage.lang ) {
languageLoaded( loadedLanguage.lang, loadedLanguage );
}
}
} )
}
function languageLoaded ( newLanguageName, newLanguage ) {
currentLanguage = newLanguageName; currentLanguage = newLanguageName;
languageWasLoaded = true; languageWasLoaded = true;
texts = newTexts; texts = newLanguage;
saveLanguage( newLanguage );
resetAllTexts(); resetAllTexts();
updateAllTexts(); updateAllTexts();
} }
function saveLanguage ( newLanguage ) {
localforage.setItem( config.keys.language, newLanguage );
}
function updateAllTexts () { function updateAllTexts () {
if ( languageWasLoaded ) { if ( languageWasLoaded ) {
cancelAnimationFrame( animationFrameId ); cancelAnimationFrame( animationFrameId );