From 410dce2ffc8dc46d35d5b4eed32f2f1c349c7025 Mon Sep 17 00:00:00 2001 From: "James D. Forrester" Date: Tue, 17 Nov 2015 17:25:01 -0800 Subject: [PATCH] Update OOjs UI to v0.13.3 Release notes: https://git.wikimedia.org/blob/oojs%2Fui.git/v0.13.3/History.md Change-Id: If131ec0d7663d6493f23b00c9451544767b7807a --- composer.json | 2 +- resources/lib/oojs-ui/i18n/ca.json | 2 +- resources/lib/oojs-ui/i18n/hu.json | 4 +- .../lib/oojs-ui/oojs-ui-apex-noimages.css | 13 +- resources/lib/oojs-ui/oojs-ui-apex.js | 4 +- .../oojs-ui/oojs-ui-mediawiki-noimages.css | 25 +- resources/lib/oojs-ui/oojs-ui-mediawiki.js | 4 +- resources/lib/oojs-ui/oojs-ui.js | 401 +++++++++++------- .../lib/oojs-ui/themes/apex/icons-media.json | 15 + resources/lib/oojs-ui/themes/apex/icons.json | 2 +- .../images/icons/{picture.png => image.png} | Bin .../images/icons/image.svg} | 2 +- .../apex/images/icons/imageGallery-ltr.png | Bin 0 -> 307 bytes .../apex/images/icons/imageGallery-ltr.svg | 6 + .../apex/images/icons/imageGallery-rtl.png | Bin 0 -> 304 bytes .../apex/images/icons/imageGallery-rtl.svg | 6 + .../themes/apex/images/icons/picture.svg | 8 - .../oojs-ui/themes/mediawiki/icons-media.json | 8 +- .../lib/oojs-ui/themes/mediawiki/icons.json | 7 +- .../images/icons/cancel-destructive.png | Bin 0 -> 588 bytes .../images/icons/cancel-destructive.svg | 6 + .../images/icons/image-ltr-invert.png | Bin 229 -> 213 bytes .../images/icons/image-ltr-invert.svg | 4 +- .../mediawiki/images/icons/image-ltr.png | Bin 212 -> 199 bytes .../mediawiki/images/icons/image-ltr.svg | 4 +- .../images/icons/image-rtl-invert.png | Bin 221 -> 208 bytes .../images/icons/image-rtl-invert.svg | 4 +- .../mediawiki/images/icons/image-rtl.png | Bin 207 -> 196 bytes .../mediawiki/images/icons/image-rtl.svg | 4 +- .../images/icons/imageAdd-ltr-invert.png | Bin 268 -> 257 bytes .../images/icons/imageAdd-ltr-invert.svg | 6 +- .../mediawiki/images/icons/imageAdd-ltr.png | Bin 253 -> 242 bytes .../mediawiki/images/icons/imageAdd-ltr.svg | 6 +- .../images/icons/imageAdd-rtl-invert.png | Bin 254 -> 247 bytes .../images/icons/imageAdd-rtl-invert.svg | 6 +- .../mediawiki/images/icons/imageAdd-rtl.png | Bin 237 -> 231 bytes .../mediawiki/images/icons/imageAdd-rtl.svg | 6 +- .../images/icons/imageGallery-ltr-invert.png | Bin 0 -> 243 bytes ...invert.svg => imageGallery-ltr-invert.svg} | 4 +- .../images/icons/imageGallery-ltr.png | Bin 0 -> 223 bytes ...toGallery-ltr.svg => imageGallery-ltr.svg} | 4 +- .../images/icons/imageGallery-rtl-invert.png | Bin 0 -> 236 bytes ...invert.svg => imageGallery-rtl-invert.svg} | 4 +- .../images/icons/imageGallery-rtl.png | Bin 0 -> 217 bytes ...toGallery-rtl.svg => imageGallery-rtl.svg} | 4 +- .../images/icons/imageLock-ltr-invert.png | Bin 310 -> 299 bytes .../images/icons/imageLock-ltr-invert.svg | 5 +- .../mediawiki/images/icons/imageLock-ltr.png | Bin 281 -> 270 bytes .../mediawiki/images/icons/imageLock-ltr.svg | 5 +- .../images/icons/imageLock-rtl-invert.png | Bin 311 -> 298 bytes .../images/icons/imageLock-rtl-invert.svg | 5 +- .../mediawiki/images/icons/imageLock-rtl.png | Bin 288 -> 275 bytes .../mediawiki/images/icons/imageLock-rtl.svg | 5 +- .../images/icons/photoGallery-ltr-invert.png | Bin 238 -> 0 bytes .../images/icons/photoGallery-ltr.png | Bin 220 -> 0 bytes .../images/icons/photoGallery-rtl-invert.png | Bin 232 -> 0 bytes .../images/icons/photoGallery-rtl.png | Bin 213 -> 0 bytes .../mediawiki/images/icons/picture-invert.png | Bin 335 -> 0 bytes .../mediawiki/images/icons/picture-invert.svg | 8 - .../themes/mediawiki/images/icons/picture.png | Bin 308 -> 0 bytes 60 files changed, 366 insertions(+), 233 deletions(-) create mode 100644 resources/lib/oojs-ui/themes/apex/icons-media.json rename resources/lib/oojs-ui/themes/apex/images/icons/{picture.png => image.png} (100%) rename resources/lib/oojs-ui/themes/{mediawiki/images/icons/picture.svg => apex/images/icons/image.svg} (94%) create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.svg delete mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/picture.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr-invert.png rename resources/lib/oojs-ui/themes/mediawiki/images/icons/{photoGallery-ltr-invert.svg => imageGallery-ltr-invert.svg} (62%) create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.png rename resources/lib/oojs-ui/themes/mediawiki/images/icons/{photoGallery-ltr.svg => imageGallery-ltr.svg} (57%) create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.png rename resources/lib/oojs-ui/themes/mediawiki/images/icons/{photoGallery-rtl-invert.svg => imageGallery-rtl-invert.svg} (60%) create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl.png rename resources/lib/oojs-ui/themes/mediawiki/images/icons/{photoGallery-rtl.svg => imageGallery-rtl.svg} (55%) delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png diff --git a/composer.json b/composer.json index bf4d40267c..6d90d3e036 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "ext-iconv": "*", "liuggio/statsd-php-client": "1.0.16", "mediawiki/at-ease": "1.1.0", - "oojs/oojs-ui": "0.13.2", + "oojs/oojs-ui": "0.13.3", "oyejorge/less.php": "1.7.0.9", "php": ">=5.3.3", "psr/log": "1.0.0", diff --git a/resources/lib/oojs-ui/i18n/ca.json b/resources/lib/oojs-ui/i18n/ca.json index 3077b60537..96d782ee21 100644 --- a/resources/lib/oojs-ui/i18n/ca.json +++ b/resources/lib/oojs-ui/i18n/ca.json @@ -31,5 +31,5 @@ "ooui-selectfile-button-select": "Seleccioneu un fitxer", "ooui-selectfile-not-supported": "El tipus de fitxer no és compatible", "ooui-selectfile-placeholder": "No s'ha seleccionat cap fitxer", - "ooui-selectfile-dragdrop-placeholder": "Deixeu-hi anar el fitxer (o feu clic a navega)" + "ooui-selectfile-dragdrop-placeholder": "Deseu els arxius aquí" } diff --git a/resources/lib/oojs-ui/i18n/hu.json b/resources/lib/oojs-ui/i18n/hu.json index acd9d3b531..cf26cc1aaf 100644 --- a/resources/lib/oojs-ui/i18n/hu.json +++ b/resources/lib/oojs-ui/i18n/hu.json @@ -22,6 +22,8 @@ "ooui-dialog-process-dismiss": "Elrejt", "ooui-dialog-process-retry": "Próbáld újra", "ooui-dialog-process-continue": "Folytatás", + "ooui-selectfile-button-select": "Fájl kiválasztása", "ooui-selectfile-not-supported": "A fájl kiválasztása nincs támogatva", - "ooui-selectfile-placeholder": "Nincs fájl kiválasztva" + "ooui-selectfile-placeholder": "Nincs fájl kiválasztva", + "ooui-selectfile-dragdrop-placeholder": "Dobd ide a fájlt" } diff --git a/resources/lib/oojs-ui/oojs-ui-apex-noimages.css b/resources/lib/oojs-ui/oojs-ui-apex-noimages.css index 15cd4bee1d..4a04b48cba 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex-noimages.css +++ b/resources/lib/oojs-ui/oojs-ui-apex-noimages.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.13.2 + * OOjs UI v0.13.3 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-11-10T23:33:07Z + * Date: 2015-11-18T01:09:30Z */ @-webkit-keyframes oo-ui-progressBarWidget-slide { from { @@ -165,7 +165,6 @@ color: #cccccc; } .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { - margin: 0.1em 0; padding: 0.2em 0.8em; border-radius: 0.3em; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); @@ -2033,7 +2032,7 @@ margin-right: 0; } .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { - margin: 0 0 0 0.5em; + margin-left: 0.5em; } .oo-ui-selectFileWidget-info { height: 2.4em; @@ -2516,9 +2515,7 @@ .oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { box-sizing: border-box; } -.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget, -.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { - margin: 0; +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget { width: 2.5em; } .oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { @@ -2910,7 +2907,7 @@ -moz-transition: all 250ms ease; transition: all 250ms ease; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { opacity: 1; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js index 145bca3e80..1c7db1df73 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex.js +++ b/resources/lib/oojs-ui/oojs-ui-apex.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.13.2 + * OOjs UI v0.13.3 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-11-10T23:32:59Z + * Date: 2015-11-18T01:09:23Z */ /** * @class diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css index f5b431cda0..9b82a2919a 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.13.2 + * OOjs UI v0.13.3 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-11-10T23:33:07Z + * Date: 2015-11-18T01:09:30Z */ @-webkit-keyframes oo-ui-progressBarWidget-slide { from { @@ -198,7 +198,6 @@ padding-left: 2.4em; } .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { - margin: 0.1em 0; padding: 0.5em 1em; min-height: 1.2em; min-width: 1em; @@ -547,19 +546,19 @@ .oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { width: 60%; } +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline { + margin-bottom: 1.25em; +} .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - padding: 0.5em; + padding: 0.25em; padding-left: 1em; } -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { - padding: 0.5em 0; -} .oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - padding: 0.5em 0; + padding-top: 0.25em; + padding-bottom: 0.5em; } .oo-ui-fieldLayout > .oo-ui-popupButtonWidget { margin-right: 0; - margin-top: 0.25em; } .oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child { margin-right: 0; @@ -2265,7 +2264,7 @@ margin-right: 0; } .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { - margin: 0 0 0 0.5em; + margin-left: 0.5em; } .oo-ui-selectFileWidget-info { height: 2.4em; @@ -2734,9 +2733,7 @@ .oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { box-sizing: border-box; } -.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget, -.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { - margin: 0; +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget { width: 2.5em; } .oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { @@ -3106,7 +3103,7 @@ -moz-transition: all 250ms ease; transition: all 250ms ease; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { opacity: 1; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index 757a9655fa..8894ef7fdd 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.js +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.13.2 + * OOjs UI v0.13.3 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-11-10T23:32:59Z + * Date: 2015-11-18T01:09:23Z */ /** * @class diff --git a/resources/lib/oojs-ui/oojs-ui.js b/resources/lib/oojs-ui/oojs-ui.js index 511ec94bff..2565fb5ea2 100644 --- a/resources/lib/oojs-ui/oojs-ui.js +++ b/resources/lib/oojs-ui/oojs-ui.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.13.2 + * OOjs UI v0.13.3 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-11-10T23:32:59Z + * Date: 2015-11-18T01:09:23Z */ ( function ( OO ) { @@ -350,7 +350,6 @@ OO.ui.infuse = function ( idOrNode ) { * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as * they support unnamed, ordered message parameters. * - * @abstract * @param {string} key Message key * @param {Mixed...} [params] Message parameters * @return {string} Translated message with parameters substituted @@ -2407,7 +2406,6 @@ OO.ui.Window.prototype.getDir = function () { * To add window content that persists between openings, you may wish to use the #initialize method * instead. * - * @abstract * @param {Object} [data] Window opening data * @return {OO.ui.Process} Setup process */ @@ -2426,7 +2424,6 @@ OO.ui.Window.prototype.getSetupProcess = function () { * provides using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} * methods of OO.ui.Process. * - * @abstract * @param {Object} [data] Window opening data * @return {OO.ui.Process} Ready process */ @@ -2445,7 +2442,6 @@ OO.ui.Window.prototype.getReadyProcess = function () { * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods * of OO.ui.Process. * - * @abstract * @param {Object} [data] Window closing data * @return {OO.ui.Process} Hold process */ @@ -2464,7 +2460,6 @@ OO.ui.Window.prototype.getHoldProcess = function () { * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods * of OO.ui.Process. * - * @abstract * @param {Object} [data] Window closing data * @return {OO.ui.Process} Teardown process */ @@ -2669,22 +2664,18 @@ OO.ui.Window.prototype.close = function ( data ) { * @return {jQuery.Promise} Promise resolved when window is setup */ OO.ui.Window.prototype.setup = function ( data ) { - var win = this, - deferred = $.Deferred(); + var win = this; this.toggle( true ); this.focusTrapHandler = OO.ui.bind( this.onFocusTrapFocused, this ); this.$focusTraps.on( 'focus', this.focusTrapHandler ); - this.getSetupProcess( data ).execute().done( function () { + return this.getSetupProcess( data ).execute().then( function () { // Force redraw by asking the browser to measure the elements' widths win.$element.addClass( 'oo-ui-window-active oo-ui-window-setup' ).width(); win.$content.addClass( 'oo-ui-window-content-setup' ).width(); - deferred.resolve(); } ); - - return deferred.promise(); }; /** @@ -2697,18 +2688,14 @@ OO.ui.Window.prototype.setup = function ( data ) { * @return {jQuery.Promise} Promise resolved when window is ready */ OO.ui.Window.prototype.ready = function ( data ) { - var win = this, - deferred = $.Deferred(); + var win = this; this.$content.focus(); - this.getReadyProcess( data ).execute().done( function () { + return this.getReadyProcess( data ).execute().then( function () { // Force redraw by asking the browser to measure the elements' widths win.$element.addClass( 'oo-ui-window-ready' ).width(); win.$content.addClass( 'oo-ui-window-content-ready' ).width(); - deferred.resolve(); } ); - - return deferred.promise(); }; /** @@ -2721,10 +2708,9 @@ OO.ui.Window.prototype.ready = function ( data ) { * @return {jQuery.Promise} Promise resolved when window is held */ OO.ui.Window.prototype.hold = function ( data ) { - var win = this, - deferred = $.Deferred(); + var win = this; - this.getHoldProcess( data ).execute().done( function () { + return this.getHoldProcess( data ).execute().then( function () { // Get the focused element within the window's content var $focus = win.$content.find( OO.ui.Element.static.getDocument( win.$content ).activeElement ); @@ -2736,10 +2722,7 @@ OO.ui.Window.prototype.hold = function ( data ) { // Force redraw by asking the browser to measure the elements' widths win.$element.removeClass( 'oo-ui-window-ready' ).width(); win.$content.removeClass( 'oo-ui-window-content-ready' ).width(); - deferred.resolve(); } ); - - return deferred.promise(); }; /** @@ -2754,14 +2737,13 @@ OO.ui.Window.prototype.hold = function ( data ) { OO.ui.Window.prototype.teardown = function ( data ) { var win = this; - return this.getTeardownProcess( data ).execute() - .done( function () { - // Force redraw by asking the browser to measure the elements' widths - win.$element.removeClass( 'oo-ui-window-active oo-ui-window-setup' ).width(); - win.$content.removeClass( 'oo-ui-window-content-setup' ).width(); - win.$focusTraps.off( 'focus', win.focusTrapHandler ); - win.toggle( false ); - } ); + return this.getTeardownProcess( data ).execute().then( function () { + // Force redraw by asking the browser to measure the elements' widths + win.$element.removeClass( 'oo-ui-window-active oo-ui-window-setup' ).width(); + win.$content.removeClass( 'oo-ui-window-content-setup' ).width(); + win.$focusTraps.off( 'focus', win.focusTrapHandler ); + win.toggle( false ); + } ); }; /** @@ -2958,7 +2940,6 @@ OO.ui.Dialog.prototype.getActions = function () { * accept steps to the process the parent method provides using the {@link OO.ui.Process#first 'first'} * and {@link OO.ui.Process#next 'next'} methods of OO.ui.Process. * - * @abstract * @param {string} [action] Symbolic name of action * @return {OO.ui.Process} Action process */ @@ -3479,8 +3460,18 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) { manager.opening = null; manager.opened = $.Deferred(); opening.resolve( manager.opened.promise(), data ); + }, function () { + manager.opening = null; + manager.opened = $.Deferred(); + opening.reject(); + manager.closeWindow( win ); } ); }, manager.getReadyDelay() ); + }, function () { + manager.opening = null; + manager.opened = $.Deferred(); + opening.reject(); + manager.closeWindow( win ); } ); }, manager.getSetupDelay() ); } ); @@ -3531,7 +3522,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) { // If the window is currently opening, close it when it's done this.preparingToClose = $.when( this.opening ); // Ensure handlers get called after preparingToClose is set - this.preparingToClose.done( function () { + this.preparingToClose.always( function () { manager.closing = closing; manager.preparingToClose = null; manager.emit( 'closing', win, closing, data ); @@ -4287,6 +4278,132 @@ OO.ui.Theme.prototype.updateElementClasses = function ( element ) { .addClass( classes.on.join( ' ' ) ); }; +/** + * RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as + * the {@link OO.ui.mixin.LookupElement}. + * + * @class + * @abstract + * + * @constructor + */ +OO.ui.mixin.RequestManager = function OoUiMixinRequestManager() { + this.requestCache = {}; + this.requestQuery = null; + this.requestRequest = null; +}; + +/* Setup */ + +OO.initClass( OO.ui.mixin.RequestManager ); + +/** + * Get request results for the current query. + * + * @return {jQuery.Promise} Promise object which will be passed response data as the first argument of + * the done event. If the request was aborted to make way for a subsequent request, this promise + * may not be rejected, depending on what jQuery feels like doing. + */ +OO.ui.mixin.RequestManager.prototype.getRequestData = function () { + var widget = this, + value = this.getRequestQuery(), + deferred = $.Deferred(), + ourRequest; + + this.abortRequest(); + if ( Object.prototype.hasOwnProperty.call( this.requestCache, value ) ) { + deferred.resolve( this.requestCache[ value ] ); + } else { + if ( this.pushPending ) { + this.pushPending(); + } + this.requestQuery = value; + ourRequest = this.requestRequest = this.getRequest(); + ourRequest + .always( function () { + // We need to pop pending even if this is an old request, otherwise + // the widget will remain pending forever. + // TODO: this assumes that an aborted request will fail or succeed soon after + // being aborted, or at least eventually. It would be nice if we could popPending() + // at abort time, but only if we knew that we hadn't already called popPending() + // for that request. + if ( widget.popPending ) { + widget.popPending(); + } + } ) + .done( function ( response ) { + // If this is an old request (and aborting it somehow caused it to still succeed), + // ignore its success completely + if ( ourRequest === widget.requestRequest ) { + widget.requestQuery = null; + widget.requestRequest = null; + widget.requestCache[ value ] = widget.getRequestCacheDataFromResponse( response ); + deferred.resolve( widget.requestCache[ value ] ); + } + } ) + .fail( function () { + // If this is an old request (or a request failing because it's being aborted), + // ignore its failure completely + if ( ourRequest === widget.requestRequest ) { + widget.requestQuery = null; + widget.requestRequest = null; + deferred.reject(); + } + } ); + } + return deferred.promise(); +}; + +/** + * Abort the currently pending request, if any. + * + * @private + */ +OO.ui.mixin.RequestManager.prototype.abortRequest = function () { + var oldRequest = this.requestRequest; + if ( oldRequest ) { + // First unset this.requestRequest to the fail handler will notice + // that the request is no longer current + this.requestRequest = null; + this.requestQuery = null; + oldRequest.abort(); + } +}; + +/** + * Get the query to be made. + * + * @protected + * @method + * @abstract + * @return {string} query to be used + */ +OO.ui.mixin.RequestManager.prototype.getRequestQuery = null; + +/** + * Get a new request object of the current query value. + * + * @protected + * @method + * @abstract + * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method + */ +OO.ui.mixin.RequestManager.prototype.getRequest = null; + +/** + * Pre-process data returned by the request from #getRequest. + * + * The return value of this function will be cached, and any further queries for the given value + * will use the cache rather than doing API requests. + * + * @protected + * @method + * @abstract + * @param {Mixed} response Response from server + * @return {Mixed} Cached result data + */ +OO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null; + /** * The TabIndexedElement class is an attribute mixin used to add additional functionality to an * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the @@ -5915,6 +6032,9 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) { // Configuration initialization config = $.extend( { highlightFirst: true }, config ); + // Mixin constructors + OO.ui.mixin.RequestManager.call( this, config ); + // Properties this.$overlay = config.$overlay || this.$element; this.lookupMenu = new OO.ui.FloatingMenuSelectWidget( { @@ -5925,9 +6045,6 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) { this.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false; - this.lookupCache = {}; - this.lookupQuery = null; - this.lookupRequest = null; this.lookupsDisabled = false; this.lookupInputFocused = false; this.lookupHighlightFirstItem = config.highlightFirst; @@ -5950,6 +6067,10 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) { this.$overlay.append( this.lookupMenu.$element ); }; +/* Setup */ + +OO.mixinClass( OO.ui.mixin.LookupElement, OO.ui.mixin.RequestManager ); + /* Methods */ /** @@ -6138,49 +6259,9 @@ OO.ui.mixin.LookupElement.prototype.initializeLookupMenuSelection = function () * will not be rejected: it will remain pending forever. */ OO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () { - var widget = this, - value = this.getValue(), - deferred = $.Deferred(), - ourRequest; - - this.abortLookupRequest(); - if ( Object.prototype.hasOwnProperty.call( this.lookupCache, value ) ) { - deferred.resolve( this.getLookupMenuOptionsFromData( this.lookupCache[ value ] ) ); - } else { - this.pushPending(); - this.lookupQuery = value; - ourRequest = this.lookupRequest = this.getLookupRequest(); - ourRequest - .always( function () { - // We need to pop pending even if this is an old request, otherwise - // the widget will remain pending forever. - // TODO: this assumes that an aborted request will fail or succeed soon after - // being aborted, or at least eventually. It would be nice if we could popPending() - // at abort time, but only if we knew that we hadn't already called popPending() - // for that request. - widget.popPending(); - } ) - .done( function ( response ) { - // If this is an old request (and aborting it somehow caused it to still succeed), - // ignore its success completely - if ( ourRequest === widget.lookupRequest ) { - widget.lookupQuery = null; - widget.lookupRequest = null; - widget.lookupCache[ value ] = widget.getLookupCacheDataFromResponse( response ); - deferred.resolve( widget.getLookupMenuOptionsFromData( widget.lookupCache[ value ] ) ); - } - } ) - .fail( function () { - // If this is an old request (or a request failing because it's being aborted), - // ignore its failure completely - if ( ourRequest === widget.lookupRequest ) { - widget.lookupQuery = null; - widget.lookupRequest = null; - deferred.reject(); - } - } ); - } - return deferred.promise(); + return this.getRequestData().then( function ( data ) { + return this.getLookupMenuOptionsFromData( data ); + }.bind( this ) ); }; /** @@ -6189,27 +6270,18 @@ OO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () { * @private */ OO.ui.mixin.LookupElement.prototype.abortLookupRequest = function () { - var oldRequest = this.lookupRequest; - if ( oldRequest ) { - // First unset this.lookupRequest to the fail handler will notice - // that the request is no longer current - this.lookupRequest = null; - this.lookupQuery = null; - oldRequest.abort(); - } + this.abortRequest(); }; /** * Get a new request object of the current lookup query value. * * @protected + * @method * @abstract * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method */ -OO.ui.mixin.LookupElement.prototype.getLookupRequest = function () { - // Stub, implemented in subclass - return null; -}; +OO.ui.mixin.LookupElement.prototype.getLookupRequest = null; /** * Pre-process data returned by the request from #getLookupRequest. @@ -6218,28 +6290,24 @@ OO.ui.mixin.LookupElement.prototype.getLookupRequest = function () { * will use the cache rather than doing API requests. * * @protected + * @method * @abstract * @param {Mixed} response Response from server * @return {Mixed} Cached result data */ -OO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = function () { - // Stub, implemented in subclass - return []; -}; +OO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = null; /** * Get a list of menu option widgets from the (possibly cached) data returned by * #getLookupCacheDataFromResponse. * * @protected + * @method * @abstract * @param {Mixed} data Cached result data, usually an array * @return {OO.ui.MenuOptionWidget[]} Menu items */ -OO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = function () { - // Stub, implemented in subclass - return []; -}; +OO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = null; /** * Set the read-only state of the widget. @@ -6262,6 +6330,27 @@ OO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) { return this; }; +/** + * @inheritdoc OO.ui.mixin.RequestManager + */ +OO.ui.mixin.LookupElement.prototype.getRequestQuery = function () { + return this.getValue(); +}; + +/** + * @inheritdoc OO.ui.mixin.RequestManager + */ +OO.ui.mixin.LookupElement.prototype.getRequest = function () { + return this.getLookupRequest(); +}; + +/** + * @inheritdoc OO.ui.mixin.RequestManager + */ +OO.ui.mixin.LookupElement.prototype.getRequestCacheDataFromResponse = function ( response ) { + return this.getLookupCacheDataFromResponse( response ); +}; + /** * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}. * A popup is a container for content. It is overlaid and positioned absolutely. By default, each @@ -6593,7 +6682,8 @@ OO.ui.mixin.TitledElement.prototype.setTitledElement = function ( $titled ) { * @chainable */ OO.ui.mixin.TitledElement.prototype.setTitle = function ( title ) { - title = typeof title === 'string' ? OO.ui.resolveMsg( title ) : null; + title = typeof title === 'function' ? OO.ui.resolveMsg( title ) : title; + title = ( typeof title === 'string' && title.length ) ? title : null; if ( this.title !== title ) { if ( this.$titled ) { @@ -7326,28 +7416,22 @@ OO.ui.Tool.static.isCompatibleWith = function () { * * This is an abstract method that must be overridden in a concrete subclass. * + * @method * @protected * @abstract */ -OO.ui.Tool.prototype.onUpdateState = function () { - throw new Error( - 'OO.ui.Tool.onUpdateState not implemented in this subclass:' + this.constructor - ); -}; +OO.ui.Tool.prototype.onUpdateState = null; /** * Handle the tool being selected. * * This is an abstract method that must be overridden in a concrete subclass. * + * @method * @protected * @abstract */ -OO.ui.Tool.prototype.onSelect = function () { - throw new Error( - 'OO.ui.Tool.onSelect not implemented in this subclass:' + this.constructor - ); -}; +OO.ui.Tool.prototype.onSelect = null; /** * Check if the tool is active. @@ -7451,7 +7535,7 @@ OO.ui.Tool.prototype.destroy = function () { * * Individual tools are customized and then registered with a {@link OO.ui.ToolFactory tool factory}, which creates * the tools on demand. Each tool has a symbolic name (used when registering the tool), a title (e.g., ‘Insert - * picture’), and an icon. + * image’), and an icon. * * Individual tools are organized in {@link OO.ui.ToolGroup toolgroups}, which can be {@link OO.ui.MenuToolGroup menus} * of tools, {@link OO.ui.ListToolGroup lists} of tools, or a single {@link OO.ui.BarToolGroup bar} of tools. @@ -7473,23 +7557,23 @@ OO.ui.Tool.prototype.destroy = function () { * // Define the tools that we're going to place in our toolbar * * // Create a class inheriting from OO.ui.Tool - * function PictureTool() { - * PictureTool.parent.apply( this, arguments ); + * function ImageTool() { + * ImageTool.parent.apply( this, arguments ); * } - * OO.inheritClass( PictureTool, OO.ui.Tool ); + * OO.inheritClass( ImageTool, OO.ui.Tool ); * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one * // of 'icon' and 'title' (displayed icon and text). - * PictureTool.static.name = 'picture'; - * PictureTool.static.icon = 'picture'; - * PictureTool.static.title = 'Insert picture'; + * ImageTool.static.name = 'image'; + * ImageTool.static.icon = 'image'; + * ImageTool.static.title = 'Insert image'; * // Defines the action that will happen when this tool is selected (clicked). - * PictureTool.prototype.onSelect = function () { - * $area.text( 'Picture tool clicked!' ); + * ImageTool.prototype.onSelect = function () { + * $area.text( 'Image tool clicked!' ); * // Never display this tool as "active" (selected). * this.setActive( false ); * }; * // Make this tool available in our toolFactory and thus our toolbar - * toolFactory.register( PictureTool ); + * toolFactory.register( ImageTool ); * * // Register two more tools, nothing interesting here * function SettingsTool() { @@ -7541,7 +7625,7 @@ OO.ui.Tool.prototype.destroy = function () { * { * // 'bar' tool groups display tools' icons only, side-by-side. * type: 'bar', - * include: [ 'picture', 'help' ] + * include: [ 'image', 'help' ] * }, * { * // 'list' tool groups display both the titles and icons, in a dropdown list. @@ -7589,28 +7673,28 @@ OO.ui.Tool.prototype.destroy = function () { * // Define the tools that we're going to place in our toolbar * * // Create a class inheriting from OO.ui.Tool - * function PictureTool() { - * PictureTool.parent.apply( this, arguments ); + * function ImageTool() { + * ImageTool.parent.apply( this, arguments ); * } - * OO.inheritClass( PictureTool, OO.ui.Tool ); + * OO.inheritClass( ImageTool, OO.ui.Tool ); * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one * // of 'icon' and 'title' (displayed icon and text). - * PictureTool.static.name = 'picture'; - * PictureTool.static.icon = 'picture'; - * PictureTool.static.title = 'Insert picture'; + * ImageTool.static.name = 'image'; + * ImageTool.static.icon = 'image'; + * ImageTool.static.title = 'Insert image'; * // Defines the action that will happen when this tool is selected (clicked). - * PictureTool.prototype.onSelect = function () { - * $area.text( 'Picture tool clicked!' ); + * ImageTool.prototype.onSelect = function () { + * $area.text( 'Image tool clicked!' ); * // Never display this tool as "active" (selected). * this.setActive( false ); * }; * // The toolbar can be synchronized with the state of some external stuff, like a text * // editor's editing area, highlighting the tools (e.g. a 'bold' tool would be shown as active * // when the text cursor was inside bolded text). Here we simply disable this feature. - * PictureTool.prototype.onUpdateState = function () { + * ImageTool.prototype.onUpdateState = function () { * }; * // Make this tool available in our toolFactory and thus our toolbar - * toolFactory.register( PictureTool ); + * toolFactory.register( ImageTool ); * * // Register two more tools, nothing interesting here * function SettingsTool() { @@ -7676,7 +7760,7 @@ OO.ui.Tool.prototype.destroy = function () { * { * // 'bar' tool groups display tools' icons only, side-by-side. * type: 'bar', - * include: [ 'picture', 'help' ] + * include: [ 'image', 'help' ] * }, * { * // 'menu' tool groups display both the titles and icons, in a dropdown menu. @@ -11401,23 +11485,23 @@ OO.mixinClass( OO.ui.HorizontalLayout, OO.ui.mixin.GroupElement ); * // Define the tools that we're going to place in our toolbar * * // Create a class inheriting from OO.ui.Tool - * function PictureTool() { - * PictureTool.parent.apply( this, arguments ); + * function ImageTool() { + * ImageTool.parent.apply( this, arguments ); * } - * OO.inheritClass( PictureTool, OO.ui.Tool ); + * OO.inheritClass( ImageTool, OO.ui.Tool ); * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one * // of 'icon' and 'title' (displayed icon and text). - * PictureTool.static.name = 'picture'; - * PictureTool.static.icon = 'picture'; - * PictureTool.static.title = 'Insert picture'; + * ImageTool.static.name = 'image'; + * ImageTool.static.icon = 'image'; + * ImageTool.static.title = 'Insert image'; * // Defines the action that will happen when this tool is selected (clicked). - * PictureTool.prototype.onSelect = function () { - * $area.text( 'Picture tool clicked!' ); + * ImageTool.prototype.onSelect = function () { + * $area.text( 'Image tool clicked!' ); * // Never display this tool as "active" (selected). * this.setActive( false ); * }; * // Make this tool available in our toolFactory and thus our toolbar - * toolFactory.register( PictureTool ); + * toolFactory.register( ImageTool ); * * // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a * // little popup window (a PopupWidget). @@ -11441,7 +11525,7 @@ OO.mixinClass( OO.ui.HorizontalLayout, OO.ui.mixin.GroupElement ); * { * // 'bar' tool groups display tools by icon only * type: 'bar', - * include: [ 'picture', 'help' ] + * include: [ 'image', 'help' ] * } * ] ); * @@ -11762,7 +11846,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) { * type: 'list', * label: 'ListToolGroup', * indicator: 'down', - * icon: 'picture', + * icon: 'image', * title: 'This is the title, displayed when user moves the mouse over the list toolgroup', * header: 'This is the header', * include: [ 'settings', 'stuff' ], @@ -16125,7 +16209,7 @@ OO.ui.TextInputWidget.prototype.isAutosizing = function () { */ OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) { var textRange, isBackwards, start, end, - element = this.$input[ 0 ]; + input = this.$input[ 0 ]; to = to || from; @@ -16135,11 +16219,11 @@ OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) { this.focus(); - if ( element.setSelectionRange ) { - element.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' ); - } else if ( element.createTextRange ) { + if ( input.setSelectionRange ) { + input.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' ); + } else if ( input.createTextRange ) { // IE 8 and below - textRange = element.createTextRange(); + textRange = input.createTextRange(); textRange.collapse( true ); textRange.moveStart( 'character', start ); textRange.moveEnd( 'character', end - start ); @@ -16148,6 +16232,23 @@ OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) { return this; }; +/** + * Get an object describing the current selection range in a directional manner + * + * @return {Object} Object containing 'from' and 'to' offsets + */ +OO.ui.TextInputWidget.prototype.getRange = function () { + var input = this.$input[ 0 ], + start = input.selectionStart, + end = input.selectionEnd, + isBackwards = input.selectionDirection === 'backward'; + + return { + from: isBackwards ? end : start, + to: isBackwards ? start : end + }; +}; + /** * Get the length of the text input value. * diff --git a/resources/lib/oojs-ui/themes/apex/icons-media.json b/resources/lib/oojs-ui/themes/apex/icons-media.json new file mode 100644 index 0000000000..e1ad562d18 --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/icons-media.json @@ -0,0 +1,15 @@ +{ + "prefix": "oo-ui-icon", + "intro": "@import '../../../../src/styles/common';", + "images": { + "image": { "file": "images/icons/image.svg" }, + "imageGallery": { "file": { + "ltr": "images/icons/imageGallery-ltr.svg", + "rtl": "images/icons/imageGallery-rtl.svg" + } }, + "photoGallery": { "file": { + "ltr": "images/icons/imageGallery-ltr.svg", + "rtl": "images/icons/imageGallery-rtl.svg" + } } + } +} diff --git a/resources/lib/oojs-ui/themes/apex/icons.json b/resources/lib/oojs-ui/themes/apex/icons.json index 92791d66f6..829f0c24f1 100644 --- a/resources/lib/oojs-ui/themes/apex/icons.json +++ b/resources/lib/oojs-ui/themes/apex/icons.json @@ -29,7 +29,7 @@ "rtl": "images/icons/move-rtl.svg" } }, "notice": { "file": "images/icons/notice.svg" }, - "picture": { "file": "images/icons/picture.svg" }, + "picture": { "file": "images/icons/image.svg" }, "previous": { "file": { "ltr": "images/icons/move-rtl.svg", "rtl": "images/icons/move-ltr.svg" diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/picture.png b/resources/lib/oojs-ui/themes/apex/images/icons/image.png similarity index 100% rename from resources/lib/oojs-ui/themes/apex/images/icons/picture.png rename to resources/lib/oojs-ui/themes/apex/images/icons/image.png diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg b/resources/lib/oojs-ui/themes/apex/images/icons/image.svg similarity index 94% rename from resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg rename to resources/lib/oojs-ui/themes/apex/images/icons/image.svg index 246e130c58..281ede8ee4 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg +++ b/resources/lib/oojs-ui/themes/apex/images/icons/image.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..62c5e102f7305190c275d5e601b8bda4ac65bd56 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARSjdT^vI^I^SL~%wlpBX?Upb$T5jK;x=oJO>?Z(LFJD04;<4ho942A z5E0u}CiYV3(orvgYiUPsmWCfMbrh(VX#1Xa?~nCv>%)_)KTqnOJnNd~(p3wlxSd@z zdF~WWF7@z-a~h<|iaaOGl<|DFFmAnu*M?*90?(tj>|OESQCjv7Tlcw*S}S&XedyP7 zd-0Ijo9EKUa-V#`F9v>(b$?~<>y+I0p{zUM(GM@PA1>V83j2Em=LpN*;&ZNf{;Bo; zf;Zwmmo{$bS6tJ%=#=B>D@SCu+|oaw&VNkqP@AXB#7R9zfF5M A1ONa4 literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.svg new file mode 100644 index 0000000000..c0ccea6eba --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..9e688ed6847593572c149c7fd85da8a878d776e4 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARU)HT^vI^I^SNl^^V13Zfq3W8ojv**(orAmQM5#j7a}(wXyFB8% z)4+G}qLSB?DGME)qPip=>KywmKB=j8Qfj4*asIPPpZ?m%3m)zJv3Sqi4S`n@WtX$v z@O*lcZ(CfY*P>;)Y28vOO+nd>(_h??*x2X4qkGccq^4w@zgKL2vh5cPx# literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.svg new file mode 100644 index 0000000000..a664aaf9b4 --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/picture.svg b/resources/lib/oojs-ui/themes/apex/images/icons/picture.svg deleted file mode 100644 index 246e130c58..0000000000 --- a/resources/lib/oojs-ui/themes/apex/images/icons/picture.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-media.json b/resources/lib/oojs-ui/themes/mediawiki/icons-media.json index 1c6da5a36d..c7684ec2eb 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-media.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-media.json @@ -20,9 +20,13 @@ "ltr": "images/icons/imageLock-ltr.svg", "rtl": "images/icons/imageLock-rtl.svg" } }, + "imageGallery": { "file": { + "ltr": "images/icons/imageGallery-ltr.svg", + "rtl": "images/icons/imageGallery-rtl.svg" + } }, "photoGallery": { "file": { - "ltr": "images/icons/photoGallery-ltr.svg", - "rtl": "images/icons/photoGallery-rtl.svg" + "ltr": "images/icons/imageGallery-ltr.svg", + "rtl": "images/icons/imageGallery-rtl.svg" } }, "play": { "file": { "ltr": "images/icons/play-ltr.svg", diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons.json b/resources/lib/oojs-ui/themes/mediawiki/icons.json index a79b329539..01a4e0dbfc 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons.json @@ -24,7 +24,7 @@ "add": { "file": "images/icons/add.svg", "variants": [ "constructive" ] }, "advanced": { "file": "images/icons/advanced.svg" }, "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] }, - "cancel": { "file": "images/icons/cancel.svg" }, + "cancel": { "file": "images/icons/cancel.svg", "variants": [ "destructive" ] }, "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] }, "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] }, "close": { "file": { @@ -51,7 +51,10 @@ "rtl": "images/icons/move-rtl.svg" } }, "notice": { "file": "images/icons/notice.svg" }, - "picture": { "file": "images/icons/picture.svg" }, + "picture": { "file": { + "ltr": "images/icons/image-rtl.svg", + "rtl": "images/icons/image-ltr.svg" + } }, "previous": { "file": { "ltr": "images/icons/move-rtl.svg", "rtl": "images/icons/move-ltr.svg" diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.png new file mode 100644 index 0000000000000000000000000000000000000000..08385b57be2b7d746716e53c53d7b9bb4c08f834 GIT binary patch literal 588 zcmV-S0<-;zP)Kls!+AVHAe1b6Sv?wgQz; z!B-407?VQ6f51TuGB`O9Mo5f5#5j-`7acVY1_`+EA4tH+R1>g*k`hX_bl~IdIS!z9 zXeo6h+}m@`$$g#sd6EY%b>Sto2G)YM&d_WId`$3u09?|DEP6xq#n5_o=f43fy)BP` zSBl0BOwFrwz?Zg#lsF>q zS9)3>)|Fr_XzM(-Fs*3(w6v7a*mz$ib5K6_sW7j^k5yvcTMGPxARnaP8Kgezsx1(ebyZ$CAKgCG)BY{wBH6Iw8nw zlx6@k@+hW|Jl#AeB9lYkc0X40sQK9~cg3zpBaPFzj|n;e_{oF%Ld3(Dcee_AwLC6$ a!Sx%IlG!PB=sV8<0000 + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png index 08bf391be3ead4940bf5392441e6f44150eeca12..fc724c890778a53d8f1eca7011d7b060fa9fbddc 100644 GIT binary patch delta 148 zcmV;F0Bir{0o4JJNq=`qL_t(YiS3lJ4S+BZ13xtEz$jEq!yI7_mZ4%5c0jUCL&FP+ zKxh!T@@@ILH!Bo!3H~5SS%V=QHmjVm6pG*@0+OSd4X+sG05FrR_bmF{b4vhVA=$V* zN}42fXToFwfR$vM(2tJh)L_t(YiS3lZ2?8+`L|?qvgQa-08SBWlVK-iE#U6y2?`dI? zzX{@kD0!z4hIvd5fx+KX=0ilprp2WcfZdj*8AC7x09=6+Fnwf-1WA{dOwDo`U4f*V z?R}D4O6r=lDUfuxeQ2z$5m8&qRt1tCwvW9h?JR39IKNw-Ngd|9-~a3e-{%SSUF;kU S0tt2i0000 - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png index 58bf564367d30d88b0975171d96695503948a198..23c2331bcfb58cab9a3b90a70993adc65b73cd44 100644 GIT binary patch delta 133 zcmcb@c${&9XI-YJi(`mKXL5oB>*9u>10Ak!>`l+6EV^LOlyIeKVe-KoHnujmtjJ&T zyztQ(qrH%hDAIeeFlI~)3)0NoT&gTe~DWM4fKCw3! diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg index 72ebf10670..dfcbd8bb45 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg @@ -1,6 +1,6 @@ - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png index b5b7fb523ed0b7fe5ef9c37304511c13c44ad00d..98452606b7170840f702b20aa6ec74234ab8ddd2 100644 GIT binary patch delta 143 zcmV;A0C4}^0nh=ENq=%lL_t(YiS3lJ4S+BV1PKK@FbW;hFh`h!WvCd19Vq^vhDZD%PDHLkV1htUIsgCw delta 156 zcmV;N0Av5q0o?(RNq>JyL_t(YiS3lJ34kyVMSm>Z!BH$-#yR2|Ze!yp?qKnAHVFht zWYb=1FOa8mNIR6MzB0qTUcaHr^vSrygko)}N%@ z@3kb?I{_QbY)T$*&UGZWl0a5=5$Q?pnn1BUa*XG|_dmPJ`xP8}ZtNPmwW`(t0000< KMNUMnLSTZR&O}lG diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg index c00d0c4a86..f962cbff6e 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg @@ -1,6 +1,6 @@ - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png index 73ee31a353b22f538ab6352660cff950f31bdda1..1260378bcac0ec1e3be1752cc47a8a89e93d1f1e 100644 GIT binary patch delta 130 zcmX@lc!Y6+XLXvVi(`mKXL5oB>*9u>10Ak!>`l+6EV^LOlyIeKVYZ_(GxOn`BHh3K z4CW43HyRok$Q)Mk-^9wx!^6V|#OxDz+8I6B*xJ&kL^R|nm?fM%aNxsa8SV~48MaFW ikp^G7y8;cE7#MQiseVa#dC!*t2s~Z=T-G@yGywoy5ib(} delta 142 zcmV;90CE4s0nY)DNq=!kL_t(YiS3lJ34kyV08a~da1=|IagMl#+t@gYJ6OfWK#0C1 zK@r0rJfz6qbq`AMRNmXZ;jSN+p3r~>L`I+o=9DEHIVRYfgnv;1bBrVhXn-Xr;L8lx waz_iSDS - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png index e56944a052bcfa0b7e34f5252e3e65f3a1e1adf5..32b7d1a8d506881b8d06d8fdd7eed2f1854f0894 100644 GIT binary patch delta 192 zcmV;x06+hX0)YaMNq?hBL_t(YiS3ll2?8+?g=b{J9xTO^)odNH4x900EA}AFdtNdk z!zP<7tgx)#DP&&q<&TK$9%f4Q!`chjzCgWEJI7C0Ra^Q z{}eU<150U4Q3o#~x)af}R$Mc}%^d)XiAi3ZM^yk|Rn^&v%S0uqBn<@s-Xd}hMv+uC zMV%D|06rpeD;2Lu4|VYPwYVp-drgmBggvg^FWR5;*#L+@3?m - - - + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png index 7ed8b7e71287ae0934777df0cb08bebc95ae3f95..a071e4e263100faa9918df76e742194f92479069 100644 GIT binary patch delta 177 zcmV;i08an?0rCNmNq>|{L_t(YiS3lj34kyV1t%idgQa+~8tc$HY{rwV*n^jN@yD{! zRmdUegM}pfk|CQ9`~ts*sw_4=eSkZ)gLM>si*H{$`VR6JbDZe=!1ybGERVYAS?S-R zJ3tR~Hy($fRB$}`Ek>YNbFGq>@dz*hrO3Cy0Mr4X888Et!748yW*7b qHcL - - - + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png index eba653f7b9d7b5837497305dd31e61abd59353e5..bfc56253ab56294a0660b7b90ce609933154c3d2 100644 GIT binary patch delta 182 zcmV;n07?J;0rvrrNq?D1L_t(YiS3lj3BxcDL^UR)2bbbos!1J69cjiVmy#ZQnAu#k z5Co2l6b!cWPC{Dk(`VTb4vQsP^K`#B%&`UV!P@r*fHkoI5W)sGxa3C1PnpkG3%=1( zuKTZ|MFA3p{SQgcDzlY|Deg*g$`@+{(adgUHhOYLQcv>LA}@%gcu51vxkgY-{;}tt k3l=}IwN-D{D*l{+H}l%SV$W_&HUIzs07*qoM6N<$f_N8FoB#j- delta 189 zcmV;u07C!w0saAyNq?Y8L_t(YiS3k83WOjOMeiGe*+Wa2zgE*WoNdf*`f4fdA-LL4 z!DBFah89Ez{PF2MDk^X`VWm{wt5nc^1!6sK5iyU|)Zf8>$F@ol*{$W!q>3f3>kV#E zs#xWSg2FKW3!noqn2o`X)ALCFVuP##x3*|F0C?};B*!BHr#5OX7Oo^M$tg#$8 - - - + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png index 74b6ef39f8826859168dc1b8c69dbc6886c3ac21..ad22a4e260e27f29086f6b2216de5d01dbaff41c 100644 GIT binary patch delta 166 zcmV;X09pU-0p|gbNq>n+L_t(YiS3lZ34kCJK%Wuq&?w!Sra5Ykmg&?e?a;|C1|p`W zA!I%HAo}@Fzao^3RFOpWz(xue2yGnNZxNU)Aj1i2)2JaY=A#8JqMz&gUy(~7@b`ZL z=2*G(#HjKbV708@7K}g-EL!oC7T8h*WbO^VgLXD delta 172 zcmV;d08{_x0qp^hNq>(?L_t(YiS3lZ34kyRMV}(LgQIwJ8rP_6xQ!=AaR)E;VnxK( zR9g$;gPfB7PeK| - - - + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb85813975b0c80040b3fa9f3ec987ec261f75b GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARSXZT^vI^I^Rw?$a~0u$5l3DBlF^d*Cun7W1BN~Y~Zpk`0@YyC67Rn zDHj+*m+qOI>R#8!Z}$34FL$Ggsd@3ar8|SOFAF)J6^R#}v30$++^6T-ubP-SJ?@>! zxtDXvONO1nMrH2xS^lpz - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..db12fcd6e82abb936e183e4a21001d7f186d8725 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARUdKE{-7{oo}aHOiuWskvCZ)rdoY|XrRY=M)TczU#A=tVgfpb N!PC{xWt~$(6970bNY(%V literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.svg similarity index 57% rename from resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg rename to resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.svg index 17eee1760d..95e28d423a 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.svg @@ -1,6 +1,6 @@ - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..964d8b16729c8c3c2e23fc21d5f0bf7536991934 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYART?4E{-7{oo}Zc1$%FT*+#%hJSBzzJk{-?^o$Rc}_|<7^(}H>({zPF^)th!-tak_UZ&}9ssu6{1-oD!M<1j|xA literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.svg similarity index 60% rename from resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg rename to resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.svg index 283bd5d008..caa4098756 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.svg @@ -1,6 +1,6 @@ - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..ca56cc376c7e5c0ba3a18c0bbcd22bcdd28974e2 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARX17E{-7{oyiFjtjxR;8$13kU$)aH#Gq&01AFEujtvVugP1n3n!jz% zxYD#R-BFpD`EX8=?r(nvbBC)NjSUQBjw_u%(4Z>+VDo~;#>Rs{{E%VNLj#4Q2M&Cg zBgB1y_Xyh>2?>e1iOGzHZHFDK6uBpC{(eD6%kAI+W(IC4gYOJ1mI^>;FnGH9xvX - - + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png index 50e7889fef0ff4bbe0716d5d7950d3ead57792e6..20cda897d531920341f83c90512659021a21278b 100644 GIT binary patch delta 234 zcmVX$Nq@~rL_t(YiS3g;3c^4TMkhhA60ALnm8bC>@fiMAIf#`9(ZbTk zN_^i~C?ab}HcJFSA8fJAxAU@O*6dr6GyqEA{8*)=L1zMB0bGGOu;R|VOTh_Pzw9@_ zDa`d!1$mwi&Ft{9-<#Pm%w;Lf-QDZzS(ZKfzTKeB;TZBZ;bRp3f<}_Yw9Su>x`Cvn zna#}ZQ&vY~v+w}0lhl9IicST ksIRCYoUo6-gFipO4as^8g0c8>wg3PC07*qoM6N<$f^CI$egFUf delta 245 zcmVNq^W$L_t(YiS3j<3c^4TMrVWA1#CTvrI+y>@fZ=c@*);qM8P(V zjo_QH@P}2_-TYW6^BGqYhJ=SzxD(x?D9s_Hn>ZDD3bth0{- v;H;{X)R87Si*_(;T0A6q-1~_!?fG-Af5 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg index 10d770a918..b14b67d43e 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg @@ -1,4 +1,7 @@ - + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png index c636a8dff8d807b4fd2590837481e7bf61c36ed2..973e36320a42ef2160fa1962e65da6b7fb943bc9 100644 GIT binary patch delta 205 zcmV;;05boX0*(TZNq?|OL_t(YiS3g+3IZ_@hCgM&O0f1QTX`DKu^z)`wFj~CAX-@3 zSc$UR46+H){Fn%W`@ukFCNqDY@WYIO8n~L(7R$y8xC2XI13YY;jSH~t_&bX^3=;$< zz^UUOE#@%zuz3^7Kl>Ib#R@4$)C=Sxbjb?xMXNhl0}C5B5k`yR7aV|*<*M8QXJG2( zD_{@IUI@wpH=q>e`y#TyT$vmYaR|KzX%%m9dVc*M^!x!WTM|2?0QGOR00000NkvXX Hu0mjfGkaHS delta 216 zcmV;}04M*B0+|AkNq@UZL_t(YiS3lJ3c@fDKwqV}39f#MV}Hi)sGp&zQ-8#vKce93 z;vy(@xt5^GCG|Qe^ua-Lz1$;d2-uhb6>yWNBsUma-~nua9q^R#U|fN{Ge1bKV`3D{ zfwMC|Nv1SdVBF*vaE1L6Uy7Th!+kB~kZIIie#_0BftU@x=SP zQU>aL5f#+H)Klk5N=2#)F2F+BZQEGeSx|5XmP&I?nj~0#(cC8ie&m{t{5da%aYUG= St?7XP0000 - + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png index 1b1029bca797fa39d956d682c23a2ec5b7756904..2058be0c5c8eb416d48c7d045f0c733be3b76609 100644 GIT binary patch delta 233 zcmV&v!0X0XV<20Nj9D^W18ty^GIS>VP z8VZV;NkM`l@-a3M6y%kw-F<6&Wn+E;$%&*?QU>4#;6QTPn*hKD00Ha)BzTbYCXkd# zN-M&hq%5SDZHdo}G3RHJwU;91P4pU&q|SmUs?~Hc@}0Wx9*r1r?ZTjHYe z1aeTMtx0Z!tS*71xX2p=IJFGmC5R<0B^}G=B_!tnuAc~ES3b!FfP09**}PJ-Y7#VV j%v)1*@YSzk;19?Fae)k%Da1Fi00000NkvXXu0mjf&V6Q< delta 246 zcmVD8V_RSHMFu# zVDIX10)&ODae{NS@4WiK!rYAZa8sl1IKtClg32 zB;}4UlT>_?88^l&0N1)0$G7s^Xrk&xl6o7XDC(t}P0n91Nd1$? zo)T|C$O#Ey>=x|-Yyq6TXULz#okuclYw{H&< - + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png index 59439aa8511b0cee1b5de74ef502bac63e3aecce..d160db59cb5bf39952504c22cf3c40652611d8e4 100644 GIT binary patch delta 210 zcmV;@04@KZ0+RxeNq@CTL_t(YiS5)s4goIgN9yV<17}9xCS$g<7Lf z_*2+TM0V`X+EDOKCX@N)&HKGKGa0@_2TL4q#0uRy4JNo?fho@ETpI`X4l?Gc7ELpt z_pp6f?@}$AMviu^uqQ|>Cb&uwp(Cn|zd<2+mmKvd}3}y-f%{Rcbu>u)1dZqgO;jU z%VyGvpRo(#eY2KL5zH?MxzRi&<_{erq~Nwhqw_ErBz)woE?7x1Na>Jha!a(r5}TAw zm&j3e_N{yJq72Gr^ohe1+Z=;Xtn|Bh%L@)E27ih5vA{9LAV<9AwQG>_o2GJ~&+fth Z^9}D~M5nqoLwx`M002ovPDHLkV1iqJYr+5k diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg index 29004d4d2b..e8ac3ed8b4 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg @@ -1,4 +1,7 @@ - + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png deleted file mode 100644 index 2c23c3c5582bd0f6e0ef37b0487ef389ca6bf05e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARQAtT^vI^I^Rw?$k|}P;~Fe@=U|}B3CmY9?;dNtQ}`pVFXpu}YAILJ zea&32_({$#TzlADYM$PDyw|SN!c$emHAZP>Fp|CBpUN% eYiQsPMs16m_jf*A_w5qUZ492SelF{r5}E)49a8rI diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png deleted file mode 100644 index 38a90e222fe650b53501c434fbe4c7dfdaf9c191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARTp{E{-7{oo}Z+E!zB3a1x`!ucIMH3o~+R(NkFr&)-J9oVWx`e^g L)z4*}Q$iB}+Zsu# diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png deleted file mode 100644 index ea51cad951e56a158b604aff1fafbdf982acb697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARS$vE{-7{oo}Zc!-C&YxYs zqfa1Ro*}OC^7A!4nJ za0`PlBg3pYARXnNE{-7{oyiFjtSk)5VjKToF`3=z)pk+zPr3satC$I=7o*#R%QhWu zx)QU*OpFW+&Zr&V^xx$H+lnYNHnz6ph$oU4ZdB-IG$fTAPIQ>m*!WO#rA z7CaF^^?y{ZGR3q#WXk-Z<8bbl^X3&2tja)pkGwa@-PSs{7RY4qboFyt=akR{0E|#T A@c;k- diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png deleted file mode 100644 index f63756bc2c88d6bd5b72e00acecb7d91f71aaf4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARQk)T^vI^I^RyV*K-LJIrhHtAe)KTmf#g8W(n+CdyjFMTuT)GrXbYW zqLId&%&En>@BZ?g{`1VspWT%-`BeAx?9YF9CeNAT_RscW{f4*ll5S@z|3x`??hZ8O z*<^T zb@(OT4e8bHmuw4e&AdOUWNQ&a!MwBSJ3nrI`?rkGV#{9!nXg;7YX36IXVlyDvvbLH znLliE)^1*u|7=oTE_=aCrq_QG_&oiWeotjQ>fP6|BI~m0sagMQb!@gAoV - - - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png deleted file mode 100644 index d680396faaa5f16e5977ce58a0c73865bced2029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pYARX5{T^vI^I^SL~%wlqsV100YL7YPG(v4d^rXJ(2VAlR^GVg%e^AoCj znmHI14<6#4p}a)MWP?~=Vr2Q<#KpaDniC(K{eAy;;xqZIJGN4mF-6ShSF_H!YNmX& zdW+YYV(WU1{8MbTHLe+pCoK6kKY_15g5B;Q&-ouGuDG!ON$SvhR^i0%-4p!F?A~e? zpQfK`1@~VpEz$pRL}9s^mO^e_)a3%RLuLimd%`$R%+i;MKNa2PAF`*}W^yQFyhMP> z$=(}zMsdq;*~dt2xiqogG4MeB|HV?K>pGbCsJeRcmUMmt`jElX)z4*}Q$iB}(W-V4 -- 2.20.1