diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2015-12-20 09:00:55 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2015-12-20 09:00:55 +0100 |
commit | a2190ac74dd4d7080b12bab90e552d7aa81209ef (patch) | |
tree | 8b31f38de9882d18df54cf8d9e0de74167a094eb /extensions/WikiEditor/modules/jquery.wikiEditor.js | |
parent | 15e69f7b20b6596b9148030acce5b59993b95a45 (diff) | |
parent | 257401d8b2cf661adf36c84b0e3fd1cf85e33c22 (diff) |
Merge branch 'mw-1.26'
Diffstat (limited to 'extensions/WikiEditor/modules/jquery.wikiEditor.js')
-rw-r--r-- | extensions/WikiEditor/modules/jquery.wikiEditor.js | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.js index 7c8e4c35..8df115fc 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.js @@ -11,7 +11,25 @@ /*jshint onevar:false, boss:true */ ( function ( $, mw ) { -var hasOwn = Object.prototype.hasOwnProperty; +var hasOwn = Object.prototype.hasOwnProperty, + +/** + * Array of language codes. + */ +fallbackChain = ( function () { + var isRTL = $( 'body' ).hasClass( 'rtl' ), + chain = mw.language.getFallbackLanguageChain(); + + // Do not fallback to 'en' + if ( chain.length >= 2 && !/^en-/.test( chain[chain.length - 2] ) ) { + chain.pop(); + } + if ( isRTL ) { + chain.push( 'default-rtl' ); + } + chain.push( 'default' ); + return chain; +} )(); /** * Global static object for wikiEditor that provides generally useful functionality to all modules and contexts. @@ -165,12 +183,17 @@ $.wikiEditor = { * with a default. * * @param object Object to extract property from - * @param lang Language code, defaults to wgUserLanguage */ - autoLang: function ( object, lang ) { - var defaultKey = $( 'body' ).hasClass( 'rtl' ) ? 'default-rtl' : 'default'; - lang = lang || mw.config.get( 'wgUserLanguage' ); - return hasOwn.call( object, lang ) ? object[lang] : ( object[defaultKey] || object['default'] || object ); + autoLang: function ( object ) { + var i, key; + + for ( i = 0; i < fallbackChain.length; i++ ) { + key = fallbackChain[i]; + if ( hasOwn.call( object, key ) ) { + return object[key]; + } + } + return object; }, /** @@ -179,10 +202,9 @@ $.wikiEditor = { * * @param icon Icon object from e.g. toolbar config * @param path Default icon path, defaults to $.wikiEditor.imgPath - * @param lang Language code, defaults to wgUserLanguage */ - autoIcon: function ( icon, path, lang ) { - var src = $.wikiEditor.autoLang( icon, lang ); + autoIcon: function ( icon, path ) { + var src = $.wikiEditor.autoLang( icon ); path = path || $.wikiEditor.imgPath; // Prepend path if src is not absolute if ( src.substr( 0, 7 ) !== 'http://' && src.substr( 0, 8 ) !== 'https://' && src[0] !== '/' ) { @@ -197,17 +219,27 @@ $.wikiEditor = { * @param icon Icon object, see autoIcon() * @param offset Offset object * @param path Icon path, see autoIcon() - * @param lang Language code, defaults to wgUserLanguage */ - autoIconOrOffset: function ( icon, offset, path, lang ) { - lang = lang || mw.config.get( 'wgUserLanguage' ); - if ( typeof offset === 'object' && hasOwn.call( offset, lang ) ) { - return offset[lang]; - } else if ( typeof icon === 'object' && hasOwn.call( icon, lang ) ) { - return $.wikiEditor.autoIcon( icon, undefined, lang ); - } else { - return $.wikiEditor.autoLang( offset, lang ); + autoIconOrOffset: function ( icon, offset, path ) { + var i, key, src; + + path = path || $.wikiEditor.imgPath; + + for ( i = 0; i < fallbackChain.length; i++ ) { + key = fallbackChain[i]; + if ( offset && hasOwn.call( offset, key ) ) { + return offset[key]; + } + if ( icon && hasOwn.call( icon, key ) ) { + src = icon[key]; + // Prepend path if src is not absolute + if ( src.substr( 0, 7 ) !== 'http://' && src.substr( 0, 8 ) !== 'https://' && src[0] !== '/' ) { + src = path + src; + } + return src + '?' + mw.loader.getVersion( 'jquery.wikiEditor' ); + } } + return offset || icon; } }; |