diff --git a/resources/js/ext.uls.compactlinks.js b/resources/js/ext.uls.compactlinks.js index 5fddbbb8..9bcd2fb0 100644 --- a/resources/js/ext.uls.compactlinks.js +++ b/resources/js/ext.uls.compactlinks.js @@ -121,13 +121,8 @@ * @param {string} language language code */ onSelect: function ( language ) { - var previousLanguages = mw.uls.getPreviousLanguages(); - self.$trigger.removeClass( 'selector-open' ); - - previousLanguages.push( language ); - previousLanguages = unique( previousLanguages ); - mw.uls.setPreviousLanguages( previousLanguages ); + mw.uls.addPreviousLanguage( language ); location.href = self.interlanguageList[ language ].href; }, onVisible: function () { diff --git a/resources/js/ext.uls.init.js b/resources/js/ext.uls.init.js index 6cf4eeed..1f704486 100644 --- a/resources/js/ext.uls.init.js +++ b/resources/js/ext.uls.init.js @@ -72,7 +72,7 @@ try { localStorage.setItem( mw.uls.previousLanguagesStorageKey, - JSON.stringify( previousLanguages.slice( -5 ) ) + JSON.stringify( previousLanguages.slice( 0, 5 ) ) ); } catch ( e ) {} }; @@ -87,7 +87,24 @@ ); } catch ( e ) {} - return previousLanguages.slice( -5 ); + return previousLanguages.slice( 0, 5 ); + }; + + /** + * Add a selected language to the list of previously selected languages. + * + * @param {string} language Language code. + * @since 2016.05 + */ + mw.uls.addPreviousLanguage = function ( language ) { + var languages = mw.uls.getPreviousLanguages(); + + // Avoid duplicates + languages = $.map( languages, function ( element ) { + return element === language ? undefined : element; + } ); + languages.unshift( language ); + mw.uls.setPreviousLanguages( languages ); }; /** diff --git a/resources/js/ext.uls.interface.js b/resources/js/ext.uls.interface.js index db6e662e..5f9ed096 100644 --- a/resources/js/ext.uls.interface.js +++ b/resources/js/ext.uls.interface.js @@ -203,14 +203,14 @@ } function userHasChangedLanguage() { - var previousLang = mw.uls.getPreviousLanguages().slice( -1 )[ 0 ], + var previousLang = mw.uls.getPreviousLanguages()[ 0 ], currentLang = mw.config.get( 'wgUserLanguage' ); // Changed language is saved in showUndoTooltip, which is never // called if previousLang is not defined, which will never be // defined unless we do it now. if ( previousLang === undefined ) { - mw.uls.setPreviousLanguages( [ currentLang ] ); + mw.uls.addPreviousLanguage( currentLang ); } return previousLang && previousLang !== currentLang; @@ -275,10 +275,9 @@ } previousLanguages = mw.uls.getPreviousLanguages(); - previousLang = previousLanguages.slice( -1 )[ 0 ]; + previousLang = previousLanguages[ 0 ]; - previousLanguages.push( currentLang ); - mw.uls.setPreviousLanguages( previousLanguages ); + mw.uls.addPreviousLanguage( currentLang ); getUndoAutonym( previousLang ).done( function ( autonym ) { // Attach a tipsy tooltip to the trigger