From 069fd2c45477698cf5afbcb20dddb468fc45dfd5 Mon Sep 17 00:00:00 2001 From: Ori Livneh Date: Wed, 26 Aug 2015 09:16:34 -0700 Subject: [PATCH] Use localStorage to store previous languages, not cookies Automatically migrates data from uls-previous-language cookie to localStorage. See associated bug for rationale. Bug: T110353 Change-Id: Ib98499040b9edf4a1f1d9e3afd7661fc2d1f7fea --- resources/js/ext.uls.init.js | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/resources/js/ext.uls.init.js b/resources/js/ext.uls.init.js index 5a112e75..ef620444 100644 --- a/resources/js/ext.uls.init.js +++ b/resources/js/ext.uls.init.js @@ -22,7 +22,7 @@ var hasOwn = Object.prototype.hasOwnProperty; mw.uls = mw.uls || {}; - mw.uls.previousLanguagesCookie = 'uls-previous-languages'; + mw.uls.previousLanguagesStorageKey = 'uls-previous-languages'; mw.uls.previousLanguageAutonymCookie = 'uls-previous-language-autonym'; mw.uls.languageSettingsModules = [ 'ext.uls.inputsettings', 'ext.uls.displaysettings' ]; @@ -85,22 +85,33 @@ }; mw.uls.setPreviousLanguages = function ( previousLanguages ) { - $.cookie( mw.uls.previousLanguagesCookie, - JSON.stringify( previousLanguages ), { - path: '/' - } - ); + try { + localStorage.setItem( + mw.uls.previousLanguagesStorageKey, + JSON.stringify( previousLanguages.slice( -5 ) ) + ); + } catch ( e ) {} }; mw.uls.getPreviousLanguages = function () { - var previousLanguages = $.cookie( mw.uls.previousLanguagesCookie ); + var previousLanguages = $.cookie( mw.uls.previousLanguagesStorageKey ); - if ( !previousLanguages ) { - return []; + if ( $.isArray( previousLanguages ) ) { + // Migrate data from cookie to localStorage. + mw.uls.setPreviousLanguages( previousLanguages ); + $.removeCookie( mw.uls.previousLanguagesStorageKey ); + } else { + previousLanguages = []; } - // return last 5 language changes - return JSON.parse( previousLanguages ).slice( -5 ); + try { + previousLanguages.push.apply( + previousLanguages, + JSON.parse( localStorage.getItem( mw.uls.previousLanguagesStorageKey ) ) + ); + } catch ( e ) {} + + return previousLanguages.slice( -5 ); }; /**