From 44565fa7b9b8762d1d085dc1163c818eb03b1fb4 Mon Sep 17 00:00:00 2001 From: Volker E Date: Tue, 7 Mar 2017 15:26:56 -0800 Subject: [PATCH] Update OOjs UI to v0.19.5 Release notes: https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/History.md;v0.19.5 Change-Id: Ic15534df2f4006b94d1161a91e2d689f96892073 --- composer.json | 2 +- resources/lib/oojs-ui/oojs-ui-apex.js | 4 +- resources/lib/oojs-ui/oojs-ui-core-apex.css | 129 +++++- .../lib/oojs-ui/oojs-ui-core-mediawiki.css | 129 +++++- resources/lib/oojs-ui/oojs-ui-core.js | 422 ++++++++++++------ resources/lib/oojs-ui/oojs-ui-mediawiki.js | 4 +- .../lib/oojs-ui/oojs-ui-toolbars-apex.css | 10 +- .../oojs-ui/oojs-ui-toolbars-mediawiki.css | 10 +- resources/lib/oojs-ui/oojs-ui-toolbars.js | 8 +- .../lib/oojs-ui/oojs-ui-widgets-apex.css | 33 +- .../lib/oojs-ui/oojs-ui-widgets-mediawiki.css | 41 +- resources/lib/oojs-ui/oojs-ui-widgets.js | 13 +- .../lib/oojs-ui/oojs-ui-windows-apex.css | 6 +- .../lib/oojs-ui/oojs-ui-windows-mediawiki.css | 6 +- resources/lib/oojs-ui/oojs-ui-windows.js | 4 +- .../oojs-ui/themes/apex/icons-content.json | 4 + .../themes/apex/icons-editing-styling.json | 4 + .../themes/apex/icons-interactions.json | 8 +- .../oojs-ui/themes/apex/icons-moderation.json | 6 +- resources/lib/oojs-ui/themes/apex/icons.json | 2 +- .../themes/apex/images/icons/add-invert.png | Bin 0 -> 132 bytes .../themes/apex/images/icons/add-invert.svg | 6 + .../themes/apex/images/icons/close.svg | 4 +- .../apex/images/icons/highlight-ltr.png | Bin 0 -> 328 bytes .../apex/images/icons/highlight-ltr.svg | 4 + .../apex/images/icons/highlight-rtl.png | Bin 0 -> 333 bytes .../apex/images/icons/highlight-rtl.svg | 4 + .../themes/apex/images/icons/journal-ltr.png | Bin 0 -> 168 bytes .../themes/apex/images/icons/journal-ltr.svg | 4 + .../themes/apex/images/icons/journal-rtl.png | Bin 0 -> 169 bytes .../themes/apex/images/icons/journal-rtl.svg | 4 + .../apex/images/icons/subtract-invert.png | Bin 0 -> 116 bytes .../apex/images/icons/subtract-invert.svg | 4 + .../themes/apex/images/icons/subtract.png | Bin 0 -> 115 bytes .../themes/apex/images/icons/subtract.svg | 4 + .../mediawiki/icons-editing-styling.json | 4 + .../themes/mediawiki/icons-interactions.json | 8 +- .../themes/mediawiki/icons-moderation.json | 6 +- .../lib/oojs-ui/themes/mediawiki/icons.json | 7 +- .../mediawiki/images/icons/close-invert.png | Bin 0 -> 233 bytes .../mediawiki/images/icons/close-invert.svg | 4 + .../images/icons/close-ltr-invert.png | Bin 275 -> 0 bytes .../images/icons/close-ltr-invert.svg | 6 - .../images/icons/close-ltr-progressive.png | Bin 374 -> 0 bytes .../images/icons/close-ltr-progressive.svg | 6 - .../mediawiki/images/icons/close-ltr.png | Bin 271 -> 0 bytes .../mediawiki/images/icons/close-ltr.svg | 6 - .../images/icons/close-progressive.png | Bin 0 -> 268 bytes .../images/icons/close-progressive.svg | 4 + .../images/icons/close-rtl-invert.png | Bin 268 -> 0 bytes .../images/icons/close-rtl-invert.svg | 6 - .../images/icons/close-rtl-progressive.png | Bin 370 -> 0 bytes .../images/icons/close-rtl-progressive.svg | 6 - .../mediawiki/images/icons/close-rtl.png | Bin 268 -> 0 bytes .../mediawiki/images/icons/close-rtl.svg | 6 - .../themes/mediawiki/images/icons/close.png | Bin 0 -> 226 bytes .../themes/mediawiki/images/icons/close.svg | 4 + .../images/icons/highlight-ltr-invert.png | Bin 0 -> 333 bytes .../images/icons/highlight-ltr-invert.svg | 4 + .../icons/highlight-ltr-progressive.png | Bin 0 -> 445 bytes .../icons/highlight-ltr-progressive.svg | 4 + .../mediawiki/images/icons/highlight-ltr.png | Bin 0 -> 328 bytes .../mediawiki/images/icons/highlight-ltr.svg | 4 + .../images/icons/highlight-rtl-invert.png | Bin 0 -> 345 bytes .../images/icons/highlight-rtl-invert.svg | 4 + .../icons/highlight-rtl-progressive.png | Bin 0 -> 488 bytes .../icons/highlight-rtl-progressive.svg | 4 + .../mediawiki/images/icons/highlight-rtl.png | Bin 0 -> 333 bytes .../mediawiki/images/icons/highlight-rtl.svg | 4 + .../images/icons/journal-ltr-invert.png | Bin 174 -> 168 bytes .../images/icons/journal-ltr-invert.svg | 4 +- .../images/icons/journal-ltr-progressive.png | Bin 174 -> 168 bytes .../images/icons/journal-ltr-progressive.svg | 4 +- .../mediawiki/images/icons/journal-ltr.png | Bin 168 -> 168 bytes .../mediawiki/images/icons/journal-ltr.svg | 4 +- .../images/icons/journal-rtl-invert.png | Bin 179 -> 169 bytes .../images/icons/journal-rtl-invert.svg | 4 +- .../images/icons/journal-rtl-progressive.png | Bin 178 -> 169 bytes .../images/icons/journal-rtl-progressive.svg | 4 +- .../mediawiki/images/icons/journal-rtl.png | Bin 176 -> 169 bytes .../mediawiki/images/icons/journal-rtl.svg | 4 +- .../images/icons/subtract-invert.png | Bin 0 -> 116 bytes .../images/icons/subtract-invert.svg | 4 + .../images/icons/subtract-progressive.png | Bin 0 -> 116 bytes .../images/icons/subtract-progressive.svg | 4 + .../mediawiki/images/icons/subtract.png | Bin 0 -> 115 bytes .../mediawiki/images/icons/subtract.svg | 4 + 87 files changed, 692 insertions(+), 320 deletions(-) create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/add-invert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subtract.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subtract.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-progressive.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-progressive.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-progressive.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.svg diff --git a/composer.json b/composer.json index 7bf944a41f..6a09d1a019 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "ext-xml": "*", "liuggio/statsd-php-client": "1.0.18", "mediawiki/at-ease": "1.1.0", - "oojs/oojs-ui": "0.19.4", + "oojs/oojs-ui": "0.19.5", "oyejorge/less.php": "1.7.0.13", "php": ">=5.5.9", "psr/log": "1.0.2", diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js index 541462f0ba..53ce966f67 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.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:40Z + * Date: 2017-03-07T22:57:01Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/oojs-ui-core-apex.css b/resources/lib/oojs-ui/oojs-ui-core-apex.css index 08187820e5..369cf096ba 100644 --- a/resources/lib/oojs-ui/oojs-ui-core-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-core-apex.css @@ -1,18 +1,15 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-element-hidden { display: none !important; - /* stylelint-disable-line declaration-no-important */ } .oo-ui-buttonElement { display: inline-block; @@ -667,9 +664,49 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { display: block; position: absolute; - /* `top` property is to be set in theme's selector due to specific `@size-anchor` values */ background-repeat: no-repeat; } +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { + content: ''; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-color: transparent; +} +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor { + left: 0; + /* `top` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:after { + border-top: 0; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { + left: 0; + /* `bottom` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:after { + border-bottom: 0; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor { + top: 0; + /* `left` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:after { + border-left: 0; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor { + top: 0; + /* `right` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:after { + border-right: 0; +} .oo-ui-popupWidget-head { -webkit-touch-callout: none; -webkit-user-select: none; @@ -696,34 +733,78 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { border-radius: 0.25em; box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2); } -.oo-ui-popupWidget-anchored { +.oo-ui-popupWidget-anchored-top { margin-top: 6px; } -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor { top: -6px; } -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before, -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { - content: ''; - position: absolute; - width: 0; - height: 0; - border-style: solid; - border-color: transparent; - border-top: 0; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before { +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:before { bottom: -7px; left: -6px; border-bottom-color: #aaa; border-width: 7px; } -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:after { bottom: -7px; left: -5px; border-bottom-color: #fff; border-width: 6px; } +.oo-ui-popupWidget-anchored-bottom { + margin-bottom: 6px; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { + bottom: -6px; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:before { + top: -7px; + left: -6px; + border-top-color: #aaa; + border-width: 7px; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:after { + top: -7px; + left: -5px; + border-top-color: #fff; + border-width: 6px; +} +.oo-ui-popupWidget-anchored-start { + margin-left: 6px; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor { + left: -6px; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:before { + right: -7px; + top: -6px; + border-right-color: #aaa; + border-width: 7px; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:after { + right: -7px; + top: -5px; + border-right-color: #fff; + border-width: 6px; +} +.oo-ui-popupWidget-anchored-end { + margin-right: 6px; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor { + right: -6px; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:before { + left: -7px; + top: -6px; + border-left-color: #aaa; + border-width: 7px; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:after { + left: -7px; + top: -5px; + border-left-color: #fff; + border-width: 6px; +} .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease; -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease; @@ -750,10 +831,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-popupButtonWidget .oo-ui-popupWidget { cursor: auto; } -.oo-ui-popupWidget.oo-ui-popupButtonWidget-frameless-popup { +.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor, +.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { margin-left: 0.9375em; } -.oo-ui-popupWidget.oo-ui-popupButtonWidget-framed-popup { +.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor, +.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { margin-left: 1.2375em; } .oo-ui-inputWidget { @@ -931,8 +1014,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { -webkit-transition: border-color 250ms ease, box-shadow 250ms ease; -moz-transition: border-color 250ms ease, box-shadow 250ms ease; transition: border-color 250ms ease, box-shadow 250ms ease; - /* stylelint-disable indentation */ - /* stylelint-enable indentation */ } .oo-ui-textInputWidget input.oo-ui-pendingElement-pending, .oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending { diff --git a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css index f468d17478..b041ef4ab4 100644 --- a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css @@ -1,18 +1,15 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-element-hidden { display: none !important; - /* stylelint-disable-line declaration-no-important */ } .oo-ui-buttonElement { display: inline-block; @@ -826,9 +823,49 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { display: block; position: absolute; - /* `top` property is to be set in theme's selector due to specific `@size-anchor` values */ background-repeat: no-repeat; } +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { + content: ''; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-color: transparent; +} +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor { + left: 0; + /* `top` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:after { + border-top: 0; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { + left: 0; + /* `bottom` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:after { + border-bottom: 0; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor { + top: 0; + /* `left` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:after { + border-left: 0; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor { + top: 0; + /* `right` property is to be set in theme's selector due to specific `@size-anchor` values */ +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:after { + border-right: 0; +} .oo-ui-popupWidget-head { -webkit-touch-callout: none; -webkit-user-select: none; @@ -855,34 +892,78 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { border-radius: 2px; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25); } -.oo-ui-popupWidget-anchored { +.oo-ui-popupWidget-anchored-top { margin-top: 9px; } -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor { top: -9px; } -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before, -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { - content: ''; - position: absolute; - width: 0; - height: 0; - border-style: solid; - border-color: transparent; - border-top: 0; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before { +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:before { bottom: -10px; left: -9px; border-bottom-color: #a2a9b1; border-width: 10px; } -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { +.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor:after { bottom: -10px; left: -8px; border-bottom-color: #fff; border-width: 9px; } +.oo-ui-popupWidget-anchored-bottom { + margin-bottom: 9px; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { + bottom: -9px; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:before { + top: -10px; + left: -9px; + border-top-color: #a2a9b1; + border-width: 10px; +} +.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor:after { + top: -10px; + left: -8px; + border-top-color: #fff; + border-width: 9px; +} +.oo-ui-popupWidget-anchored-start { + margin-left: 9px; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor { + left: -9px; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:before { + right: -10px; + top: -9px; + border-right-color: #a2a9b1; + border-width: 10px; +} +.oo-ui-popupWidget-anchored-start .oo-ui-popupWidget-anchor:after { + right: -10px; + top: -8px; + border-right-color: #fff; + border-width: 9px; +} +.oo-ui-popupWidget-anchored-end { + margin-right: 9px; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor { + right: -9px; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:before { + left: -10px; + top: -9px; + border-left-color: #a2a9b1; + border-width: 10px; +} +.oo-ui-popupWidget-anchored-end .oo-ui-popupWidget-anchor:after { + left: -10px; + top: -8px; + border-left-color: #fff; + border-width: 9px; +} .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { -webkit-transition: width 100ms, height 100ms, left 100ms; -moz-transition: width 100ms, height 100ms, left 100ms; @@ -909,10 +990,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-popupButtonWidget .oo-ui-popupWidget { cursor: auto; } -.oo-ui-popupWidget.oo-ui-popupButtonWidget-frameless-popup { +.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor, +.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { margin-left: 0.9375em; } -.oo-ui-popupWidget.oo-ui-popupButtonWidget-framed-popup { +.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor, +.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { margin-left: 1.5em; } .oo-ui-inputWidget { @@ -1343,8 +1426,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { -webkit-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); - /* stylelint-disable indentation */ - /* stylelint-enable indentation */ } .oo-ui-textInputWidget.oo-ui-widget-enabled input:hover, .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:hover { diff --git a/resources/lib/oojs-ui/oojs-ui-core.js b/resources/lib/oojs-ui/oojs-ui-core.js index 9eb8716356..f10bdfa710 100644 --- a/resources/lib/oojs-ui/oojs-ui-core.js +++ b/resources/lib/oojs-ui/oojs-ui-core.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:40Z + * Date: 2017-03-07T22:57:01Z */ ( function ( OO ) { @@ -4079,6 +4079,8 @@ OO.ui.mixin.PendingElement.prototype.popPending = function () { * 'start': Align the start (left in LTR, right in RTL) edge with $floatableContainer's start edge * 'end': Align the end (right in LTR, left in RTL) edge with $floatableContainer's end edge * 'center': Horizontally align the center with $floatableContainer's center + * @cfg {boolean} [hideWhenOutOfView=true] Whether to hide the floatable element if the container + * is out of view */ OO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) { // Configuration initialization @@ -4097,6 +4099,7 @@ OO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) { this.setFloatableElement( config.$floatable || this.$element ); this.setVerticalPosition( config.verticalPosition || 'below' ); this.setHorizontalPosition( config.horizontalPosition || 'start' ); + this.hideWhenOutOfView = config.hideWhenOutOfView === undefined ? true : !!config.hideWhenOutOfView; }; /* Methods */ @@ -4141,9 +4144,11 @@ OO.ui.mixin.FloatableElement.prototype.setVerticalPosition = function ( position if ( [ 'below', 'above', 'top', 'bottom', 'center' ].indexOf( position ) === -1 ) { throw new Error( 'Invalid value for vertical position: ' + position ); } - this.verticalPosition = position; - if ( this.$floatable ) { - this.position(); + if ( this.verticalPosition !== position ) { + this.verticalPosition = position; + if ( this.$floatable ) { + this.position(); + } } }; @@ -4156,9 +4161,11 @@ OO.ui.mixin.FloatableElement.prototype.setHorizontalPosition = function ( positi if ( [ 'before', 'after', 'start', 'end', 'center' ].indexOf( position ) === -1 ) { throw new Error( 'Invalid value for horizontal position: ' + position ); } - this.horizontalPosition = position; - if ( this.$floatable ) { - this.position(); + if ( this.horizontalPosition !== position ) { + this.horizontalPosition = position; + if ( this.$floatable ) { + this.position(); + } } }; @@ -4290,27 +4297,49 @@ OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element * @chainable */ OO.ui.mixin.FloatableElement.prototype.position = function () { - var containerPos, direction, $offsetParent, isBody, scrollableX, scrollableY, - horizScrollbarHeight, vertScrollbarWidth, scrollTop, scrollLeft, - newPos = { top: '', left: '', bottom: '', right: '' }; - if ( !this.positioning ) { return this; } - if ( !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) { + if ( this.hideWhenOutOfView && !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) { this.$floatable.addClass( 'oo-ui-element-hidden' ); - return; + return this; } else { this.$floatable.removeClass( 'oo-ui-element-hidden' ); } if ( !this.needsCustomPosition ) { - return; + return this; } - direction = this.$floatableContainer.css( 'direction' ); - $offsetParent = this.$floatable.offsetParent(); + this.$floatable.css( this.computePosition() ); + + // We updated the position, so re-evaluate the clipping state. + // (ClippableElement does not listen to 'scroll' events on $floatableContainer's parent, and so + // will not notice the need to update itself.) + // TODO: This is terrible, we shouldn't need to know about ClippableElement at all here. Why does + // it not listen to the right events in the right places? + if ( this.clip ) { + this.clip(); + } + + return this; +}; + +/** + * Compute how #$floatable should be positioned based on the position of #$floatableContainer + * and the positioning settings. This is a helper for #position that shouldn't be called directly, + * but may be overridden by subclasses if they want to change or add to the positioning logic. + * + * @return {Object} New position to apply with .css(). Keys are 'top', 'left', 'bottom' and 'right'. + */ +OO.ui.mixin.FloatableElement.prototype.computePosition = function () { + var isBody, scrollableX, scrollableY, containerPos, + horizScrollbarHeight, vertScrollbarWidth, scrollTop, scrollLeft, + newPos = { top: '', left: '', bottom: '', right: '' }, + direction = this.$floatableContainer.css( 'direction' ), + $offsetParent = this.$floatable.offsetParent(); + if ( $offsetParent.is( 'html' ) ) { // The innerHeight/Width and clientHeight/Width calculations don't work well on the // element, but they do work on the @@ -4408,18 +4437,7 @@ OO.ui.mixin.FloatableElement.prototype.position = function () { } } - this.$floatable.css( newPos ); - - // We updated the position, so re-evaluate the clipping state. - // (ClippableElement does not listen to 'scroll' events on $floatableContainer's parent, and so - // will not notice the need to update itself.) - // TODO: This is terrible, we shouldn't need to know about ClippableElement at all here. Why does - // it not listen to the right events in the right places? - if ( this.clip ) { - this.clip(); - } - - return this; + return newPos; }; /** @@ -4745,13 +4763,24 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () { * @cfg {number} [width=320] Width of popup in pixels * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height. * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup - * @cfg {string} [align='center'] Alignment of the popup: `center`, `force-left`, `force-right`, `backwards` or `forwards`. - * If the popup is forced-left the popup body is leaning towards the left. For force-right alignment, the body of the - * popup is leaning towards the right of the screen. - * Using 'backwards' is a logical direction which will result in the popup leaning towards the beginning of the sentence - * in the given language, which means it will flip to the correct positioning in right-to-left languages. - * Using 'forward' will also result in a logical alignment where the body of the popup leans towards the end of the - * sentence in the given language. + * @cfg {string} [position='below'] Where to position the popup relative to $floatableContainer + * 'above': Put popup above $floatableContainer; anchor points down to the start edge of $floatableContainer + * 'below': Put popup below $floatableContainer; anchor points up to the start edge of $floatableContainer + * 'before': Put popup to the left (LTR) / right (RTL) of $floatableContainer; anchor points + * endwards (right/left) to the vertical center of $floatableContainer + * 'after': Put popup to the right (LTR) / left (RTL) of $floatableContainer; anchor points + * startwards (left/right) to the vertical center of $floatableContainer + * @cfg {string} [align='center'] How to align the popup to $floatableContainer + * 'forwards': If position is above/below, move the popup as far endwards (right in LTR, left in RTL) + * as possible while still keeping the anchor within the popup; + * if position is before/after, move the popup as far downwards as possible. + * 'backwards': If position is above/below, move the popup as far startwards (left in LTR, right in RTL) + * as possible while still keeping the anchor within the popup; + * if position in before/after, move the popup as far upwards as possible. + * 'center': Horizontally (if position is above/below) or vertically (before/after) align the center + * of the popup with the center of $floatableContainer. + * 'force-left': Alias for 'forwards' in LTR and 'backwards' in RTL + * 'force-right': Alias for 'backwards' in RTL and 'forwards' in LTR * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container. * See the [OOjs UI docs on MediaWiki][3] for an example. * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample @@ -4794,15 +4823,16 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) { this.autoClose = !!config.autoClose; this.$autoCloseIgnore = config.$autoCloseIgnore; this.transitionTimeout = null; - this.anchor = null; + this.anchored = false; this.width = config.width !== undefined ? config.width : 320; this.height = config.height !== undefined ? config.height : null; - this.setAlignment( config.align ); this.onMouseDownHandler = this.onMouseDown.bind( this ); this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this ); // Initialization this.toggleAnchor( config.anchor === undefined || config.anchor ); + this.setAlignment( config.align || 'center' ); + this.setPosition( config.position || 'below' ); this.$body.addClass( 'oo-ui-popupWidget-body' ); this.$anchor.addClass( 'oo-ui-popupWidget-anchor' ); this.$popup @@ -4950,6 +4980,21 @@ OO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) { this.anchored = show; } }; +/** + * Change which edge the anchor appears on. + * + * @param {string} edge 'top', 'bottom', 'start' or 'end' + */ +OO.ui.PopupWidget.prototype.setAnchorEdge = function ( edge ) { + if ( [ 'top', 'bottom', 'start', 'end' ].indexOf( edge ) === -1 ) { + throw new Error( 'Invalid value for edge: ' + edge ); + } + if ( this.anchorEdge !== null ) { + this.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge ); + } + this.anchorEdge = edge; + this.$element.addClass( 'oo-ui-popupWidget-anchored-' + edge ); +}; /** * Check if the anchor is visible. @@ -4957,7 +5002,7 @@ OO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) { * @return {boolean} Anchor is visible */ OO.ui.PopupWidget.prototype.hasAnchor = function () { - return this.anchor; + return this.anchored; }; /** @@ -4981,6 +5026,10 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) { OO.ui.warnDeprecation( 'PopupWidget#toggle: Before calling this method, the popup must be attached to the DOM.' ); this.warnedUnattached = true; } + if ( show && !this.$floatableContainer && this.isElementAttached() ) { + // Fall back to the parent node if the floatableContainer is not set + this.setFloatableContainer( this.$element.parent() ); + } // Parent method OO.ui.PopupWidget.parent.prototype.toggle.call( this, show ); @@ -5035,9 +5084,37 @@ OO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) { * @chainable */ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) { - var popupOffset, originOffset, containerLeft, containerWidth, containerRight, - popupLeft, popupRight, overlapLeft, overlapRight, anchorWidth, direction, - dirFactor, align, + var widget = this; + + // Prevent transition from being interrupted + clearTimeout( this.transitionTimeout ); + if ( transition ) { + // Enable transition + this.$element.addClass( 'oo-ui-popupWidget-transitioning' ); + } + + this.position(); + + if ( transition ) { + // Prevent transitioning after transition is complete + this.transitionTimeout = setTimeout( function () { + widget.$element.removeClass( 'oo-ui-popupWidget-transitioning' ); + }, 200 ); + } else { + // Prevent transitioning immediately + this.$element.removeClass( 'oo-ui-popupWidget-transitioning' ); + } +}; + +/** + * @inheritdoc + */ +OO.ui.PopupWidget.prototype.computePosition = function () { + var direction, align, vertical, start, end, near, far, sizeProp, popupSize, anchorSize, anchorPos, + anchorOffset, anchorMargin, parentPosition, positionProp, positionAdjustment, floatablePos, + offsetParentPos, containerPos, + popupPos = {}, + anchorCss = { left: '', right: '', top: '', bottom: '' }, alignMap = { ltr: { 'force-left': 'backwards', @@ -5048,77 +5125,119 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) { 'force-right': 'backwards' } }, - widget = this; + anchorEdgeMap = { + above: 'bottom', + below: 'top', + before: 'end', + after: 'start' + }, + hPosMap = { + forwards: 'start', + center: 'center', + backwards: 'before' + }, + vPosMap = { + forwards: 'top', + center: 'center', + backwards: 'bottom' + }; if ( !this.$container ) { // Lazy-initialize $container if not specified in constructor this.$container = $( this.getClosestScrollableElementContainer() ); } direction = this.$container.css( 'direction' ); - dirFactor = direction === 'rtl' ? -1 : 1; - align = alignMap[ direction ][ this.align ] || this.align; - // Set height and width before measuring things, since it might cause our measurements - // to change (e.g. due to scrollbars appearing or disappearing) + // Set height and width before we do anything else, since it might cause our measurements + // to change (e.g. due to scrollbars appearing or disappearing), and it also affects centering this.$popup.css( { width: this.width, height: this.height !== null ? this.height : 'auto' } ); - // Compute initial popupOffset based on alignment - popupOffset = this.width * ( { backwards: -1, center: -0.5, forwards: 0 } )[ align ]; - - // Figure out if this will cause the popup to go beyond the edge of the container - originOffset = this.$element.offset().left; - containerLeft = this.$container.offset().left; - containerWidth = this.$container.innerWidth(); - containerRight = containerLeft + containerWidth; - popupLeft = dirFactor * popupOffset - this.containerPadding; - popupRight = dirFactor * popupOffset + this.containerPadding + this.width + this.containerPadding; - overlapLeft = ( originOffset + popupLeft ) - containerLeft; - overlapRight = containerRight - ( originOffset + popupRight ); - - // Adjust offset to make the popup not go beyond the edge, if needed - if ( overlapRight < 0 ) { - popupOffset += dirFactor * overlapRight; - } else if ( overlapLeft < 0 ) { - popupOffset -= dirFactor * overlapLeft; - } + align = alignMap[ direction ][ this.align ] || this.align; + // If the popup is positioned before or after, then the anchor positioning is vertical, otherwise horizontal + vertical = this.popupPosition === 'before' || this.popupPosition === 'after'; + start = vertical ? 'top' : ( direction === 'rtl' ? 'right' : 'left' ); + end = vertical ? 'bottom' : ( direction === 'rtl' ? 'left' : 'right' ); + near = vertical ? 'top' : 'left'; + far = vertical ? 'bottom' : 'right'; + sizeProp = vertical ? 'Height' : 'Width'; + popupSize = vertical ? ( this.height || this.$popup.height() ) : this.width; + + this.setAnchorEdge( anchorEdgeMap[ this.popupPosition ] ); + this.horizontalPosition = vertical ? this.popupPosition : hPosMap[ align ]; + this.verticalPosition = vertical ? vPosMap[ align ] : this.popupPosition; - // Adjust offset to avoid anchor being rendered too close to the edge - // $anchor.width() doesn't work with the pure CSS anchor (returns 0) - // TODO: Find a measurement that works for CSS anchors and image anchors - anchorWidth = this.$anchor[ 0 ].scrollWidth * 2; - if ( popupOffset + this.width < anchorWidth ) { - popupOffset = anchorWidth - this.width; - } else if ( -popupOffset < anchorWidth ) { - popupOffset = -anchorWidth; + // Parent method + parentPosition = OO.ui.mixin.FloatableElement.prototype.computePosition.call( this ); + // Find out which property FloatableElement used for positioning, and adjust that value + positionProp = vertical ? + ( parentPosition.top !== '' ? 'top' : 'bottom' ) : + ( parentPosition.left !== '' ? 'left' : 'right' ); + + // Figure out where the near and far edges of the popup and $floatableContainer are + floatablePos = this.$floatableContainer.offset(); + floatablePos[ far ] = floatablePos[ near ] + this.$floatableContainer[ 'outer' + sizeProp ](); + // Measure where the offsetParent is and compute our position based on that and parentPosition + offsetParentPos = this.$element.offsetParent().offset(); + + if ( positionProp === near ) { + popupPos[ near ] = offsetParentPos[ near ] + parentPosition[ near ]; + popupPos[ far ] = popupPos[ near ] + popupSize; + } else { + popupPos[ far ] = offsetParentPos[ near ] + + this.$element.offsetParent()[ 'inner' + sizeProp ]() - parentPosition[ far ]; + popupPos[ near ] = popupPos[ far ] - popupSize; + } + + // Position the anchor (which is positioned relative to the popup) to point to $floatableContainer + // For popups above/below, we point to the start edge; for popups before/after, we point to the center + anchorPos = vertical ? ( floatablePos[ start ] + floatablePos[ end ] ) / 2 : floatablePos[ start ]; + anchorOffset = ( start === far ? -1 : 1 ) * ( anchorPos - popupPos[ start ] ); + + // If the anchor is less than 2*anchorSize from either edge, move the popup to make more space + // this.$anchor.width()/height() returns 0 because of the CSS trickery we use, so use scrollWidth/Height + anchorSize = this.$anchor[ 0 ][ 'scroll' + sizeProp ]; + anchorMargin = parseFloat( this.$anchor.css( 'margin-' + start ) ); + if ( anchorOffset + anchorMargin < 2 * anchorSize ) { + // Not enough space for the anchor on the start side; pull the popup startwards + positionAdjustment = ( positionProp === start ? -1 : 1 ) * + ( 2 * anchorSize - ( anchorOffset + anchorMargin ) ); + } else if ( anchorOffset + anchorMargin > popupSize - 2 * anchorSize ) { + // Not enough space for the anchor on the end side; pull the popup endwards + positionAdjustment = ( positionProp === end ? -1 : 1 ) * + ( anchorOffset + anchorMargin - ( popupSize - 2 * anchorSize ) ); + } else { + positionAdjustment = 0; } - // Prevent transition from being interrupted - clearTimeout( this.transitionTimeout ); - if ( transition ) { - // Enable transition - this.$element.addClass( 'oo-ui-popupWidget-transitioning' ); + // Check if the popup will go beyond the edge of this.$container + containerPos = this.$container.offset(); + containerPos[ far ] = containerPos[ near ] + this.$container[ 'inner' + sizeProp ](); + // Take into account how much the popup will move because of the adjustments we're going to make + popupPos[ near ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment; + popupPos[ far ] += ( positionProp === near ? 1 : -1 ) * positionAdjustment; + if ( containerPos[ near ] + this.containerPadding > popupPos[ near ] ) { + // Popup goes beyond the near (left/top) edge, move it to the right/bottom + positionAdjustment += ( positionProp === near ? 1 : -1 ) * + ( containerPos[ near ] + this.containerPadding - popupPos[ near ] ); + } else if ( containerPos[ far ] - this.containerPadding < popupPos[ far ] ) { + // Popup goes beyond the far (right/bottom) edge, move it to the left/top + positionAdjustment += ( positionProp === far ? 1 : -1 ) * + ( popupPos[ far ] - ( containerPos[ far ] - this.containerPadding ) ); } - // Position body relative to anchor - this.$popup.css( direction === 'rtl' ? 'margin-right' : 'margin-left', popupOffset ); - - if ( transition ) { - // Prevent transitioning after transition is complete - this.transitionTimeout = setTimeout( function () { - widget.$element.removeClass( 'oo-ui-popupWidget-transitioning' ); - }, 200 ); - } else { - // Prevent transitioning immediately - this.$element.removeClass( 'oo-ui-popupWidget-transitioning' ); - } + // Adjust anchorOffset for positionAdjustment + anchorOffset += ( positionProp === start ? -1 : 1 ) * positionAdjustment; - // Reevaluate clipping state since we've relocated and resized the popup - this.clip(); + // Position the anchor + anchorCss[ start ] = anchorOffset; + this.$anchor.css( anchorCss ); + // Move the popup if needed + parentPosition[ positionProp ] += positionAdjustment; - return this; + return parentPosition; }; /** @@ -5140,18 +5259,41 @@ OO.ui.PopupWidget.prototype.setAlignment = function ( align ) { } else { this.align = 'center'; } + this.position(); }; /** * Get popup alignment * - * @return {string} align Alignment of the popup, `center`, `force-left`, `force-right`, + * @return {string} Alignment of the popup, `center`, `force-left`, `force-right`, * `backwards` or `forwards`. */ OO.ui.PopupWidget.prototype.getAlignment = function () { return this.align; }; +/** + * Change the positioning of the popup. + * + * @param {string} position 'above', 'below', 'before' or 'after' + */ +OO.ui.PopupWidget.prototype.setPosition = function ( position ) { + if ( [ 'above', 'below', 'before', 'after' ].indexOf( position ) === -1 ) { + position = 'below'; + } + this.popupPosition = position; + this.position(); +}; + +/** + * Get popup positioning. + * + * @return {string} 'above', 'below', 'before' or 'after' + */ +OO.ui.PopupWidget.prototype.getPosition = function () { + return this.popupPosition; +}; + /** * 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 @@ -5172,9 +5314,14 @@ OO.ui.mixin.PopupElement = function OoUiMixinPopupElement( config ) { // Properties this.popup = new OO.ui.PopupWidget( $.extend( - { autoClose: true }, + { + autoClose: true, + $floatableContainer: this.$element + }, config.popup, - { $autoCloseIgnore: this.$element.add( config.popup && config.popup.$autoCloseIgnore ) } + { + $autoCloseIgnore: this.$element.add( config.popup && config.popup.$autoCloseIgnore ) + } ) ); }; @@ -5222,11 +5369,7 @@ OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) { OO.ui.PopupButtonWidget.parent.call( this, config ); // Mixin constructors - OO.ui.mixin.PopupElement.call( this, $.extend( true, {}, config, { - popup: { - $floatableContainer: this.$element - } - } ) ); + OO.ui.mixin.PopupElement.call( this, config ); // Properties this.$overlay = config.$overlay || this.$element; @@ -6736,20 +6879,34 @@ OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) { * @protected */ OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () { - var i, item, visible, + var i, item, visible, section, sectionEmpty, anyVisible = false, len = this.items.length, showAll = !this.isVisible(), filter = showAll ? null : this.getItemMatcher( this.$input.val() ); + // Hide non-matching options, and also hide section headers if all options + // in their section are hidden. for ( i = 0; i < len; i++ ) { item = this.items[ i ]; - if ( item instanceof OO.ui.OptionWidget ) { + if ( item instanceof OO.ui.MenuSectionOptionWidget ) { + if ( section ) { + // If the previous section was empty, hide its header + section.toggle( showAll || !sectionEmpty ); + } + section = item; + sectionEmpty = true; + } else if ( item instanceof OO.ui.OptionWidget ) { visible = showAll || filter( item ); anyVisible = anyVisible || visible; + sectionEmpty = sectionEmpty && !visible; item.toggle( visible ); } } + // Process the final section + if ( section ) { + section.toggle( showAll || !sectionEmpty ); + } this.$element.toggleClass( 'oo-ui-menuSelectWidget-invisible', !anyVisible ); @@ -9125,7 +9282,7 @@ OO.ui.CheckboxMultiselectInputWidget.prototype.setOptions = function ( options ) * specifies minimum number of rows to display. * @cfg {boolean} [autosize=false] Automatically resize the text input to fit its content. * Use the #maxRows config to specify a maximum number of displayed rows. - * @cfg {boolean} [maxRows] Maximum number of rows to display when #autosize is set to true. + * @cfg {number} [maxRows] Maximum number of rows to display when #autosize is set to true. * Defaults to the maximum of `10` and `2 * rows`, or `10` if `rows` isn't provided. * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of * the value or placeholder text: `'before'` or `'after'` @@ -10081,6 +10238,10 @@ OO.ui.SearchInputWidget.prototype.setReadOnly = function ( state ) { * - by choosing a value from the menu. The value of the chosen option will then appear in the text * input field. * + * After the user chooses an option, its `data` will be used as a new value for the widget. + * A `label` also can be specified for each option: if given, it will be shown instead of the + * `data` in the dropdown menu. + * * This widget can be used inside an HTML form, such as a OO.ui.FormLayout. * * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1]. @@ -10088,32 +10249,33 @@ OO.ui.SearchInputWidget.prototype.setReadOnly = function ( state ) { * @example * // Example: A ComboBoxInputWidget. * var comboBox = new OO.ui.ComboBoxInputWidget( { - * label: 'ComboBoxInputWidget', * value: 'Option 1', - * menu: { - * items: [ - * new OO.ui.MenuOptionWidget( { - * data: 'Option 1', - * label: 'Option One' - * } ), - * new OO.ui.MenuOptionWidget( { - * data: 'Option 2', - * label: 'Option Two' - * } ), - * new OO.ui.MenuOptionWidget( { - * data: 'Option 3', - * label: 'Option Three' - * } ), - * new OO.ui.MenuOptionWidget( { - * data: 'Option 4', - * label: 'Option Four' - * } ), - * new OO.ui.MenuOptionWidget( { - * data: 'Option 5', - * label: 'Option Five' - * } ) - * ] - * } + * options: [ + * { data: 'Option 1' }, + * { data: 'Option 2' }, + * { data: 'Option 3' } + * ] + * } ); + * $( 'body' ).append( comboBox.$element ); + * + * @example + * // Example: A ComboBoxInputWidget with additional option labels. + * var comboBox = new OO.ui.ComboBoxInputWidget( { + * value: 'Option 1', + * options: [ + * { + * data: 'Option 1', + * label: 'Option One' + * }, + * { + * data: 'Option 2', + * label: 'Option Two' + * }, + * { + * data: 'Option 3', + * label: 'Option Three' + * } + * ] * } ); * $( 'body' ).append( comboBox.$element ); * diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index b39010c45b..7b1c099925 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.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:40Z + * Date: 2017-03-07T22:57:01Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css index 4d7f9d7546..760458952a 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css @@ -1,21 +1,19 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-popupTool .oo-ui-popupWidget-popup, .oo-ui-popupTool .oo-ui-popupWidget-anchor { z-index: 4; } -.oo-ui-popupTool .oo-ui-popupWidget { - /* @noflip */ +.oo-ui-popupTool .oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor, +.oo-ui-popupTool .oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { margin-left: 1.25em; } .oo-ui-toolGroupTool > .oo-ui-popupToolGroup { diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css index 59de29baa2..ad1746d9dd 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css @@ -1,15 +1,13 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-tool.oo-ui-widget-enabled { -webkit-transition: background-color 100ms; -moz-transition: background-color 100ms; @@ -24,8 +22,8 @@ .oo-ui-popupTool .oo-ui-popupWidget-anchor { z-index: 4; } -.oo-ui-popupTool .oo-ui-popupWidget { - /* @noflip */ +.oo-ui-popupTool .oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor, +.oo-ui-popupTool .oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor { margin-left: 1.25em; } .oo-ui-toolGroupTool > .oo-ui-toolGroup { diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars.js b/resources/lib/oojs-ui/oojs-ui-toolbars.js index 777debfb6f..1574f6c452 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars.js +++ b/resources/lib/oojs-ui/oojs-ui-toolbars.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:40Z + * Date: 2017-03-07T22:57:01Z */ ( function ( OO ) { @@ -1469,6 +1469,7 @@ OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) { OO.ui.mixin.PopupElement.call( this, config ); // Initialization + this.popup.setPosition( toolGroup.getToolbar().position === 'bottom' ? 'above' : 'below' ); this.$element .addClass( 'oo-ui-popupTool' ) .append( this.popup.$element ); @@ -2194,6 +2195,9 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () { for ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) { this.collapsibleTools[ i ].toggle( this.expanded ); } + + // Re-evaluate clipping, because our height has changed + this.clip(); }; /** diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css index a1064bb855..4ec3d1c189 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css @@ -1,15 +1,13 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-draggableElement-handle, .oo-ui-draggableElement-handle.oo-ui-widget { cursor: move; @@ -81,8 +79,6 @@ left: 0; right: 0; bottom: 0; - /* stylelint-disable declaration-no-important */ - /* stylelint-enable declaration-no-important */ } .oo-ui-menuLayout-menu, .oo-ui-menuLayout-content { @@ -593,23 +589,26 @@ .oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { opacity: 0.5; } -.oo-ui-outlineOptionWidget-level-0 { - padding-left: 3.5em; -} -.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon { - left: 1em; +.oo-ui-outlineOptionWidget-level-0.oo-ui-iconElement { + padding-left: 2.5em; } .oo-ui-outlineOptionWidget-level-1 { - padding-left: 5em; + padding-left: 2.5em; +} +.oo-ui-outlineOptionWidget-level-1.oo-ui-iconElement { + padding-left: 4.5em; } -.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon { +.oo-ui-outlineOptionWidget-level-1.oo-ui-iconElement .oo-ui-iconElement-icon { left: 2.5em; } .oo-ui-outlineOptionWidget-level-2 { - padding-left: 6.5em; + padding-left: 5em; +} +.oo-ui-outlineOptionWidget-level-2.oo-ui-iconElement { + padding-left: 7em; } -.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon { - left: 4em; +.oo-ui-outlineOptionWidget-level-2.oo-ui-iconElement .oo-ui-iconElement-icon { + left: 5em; } .oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected { background-color: #a7dcff; @@ -754,8 +753,6 @@ background-color: transparent; color: #000; vertical-align: middle; - /* stylelint-disable indentation */ - /* stylelint-enable indentation */ } .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder { color: #72777d; diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css index 495cbfe5a7..f64a619f2f 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css @@ -1,15 +1,13 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-draggableElement-handle, .oo-ui-draggableElement-handle.oo-ui-widget { cursor: move; @@ -92,8 +90,6 @@ left: 0; right: 0; bottom: 0; - /* stylelint-disable declaration-no-important */ - /* stylelint-enable declaration-no-important */ } .oo-ui-menuLayout-menu, .oo-ui-menuLayout-content { @@ -656,6 +652,12 @@ .oo-ui-widget-disabled .oo-ui-selectFileWidget-dropLabel { display: none; } +.oo-ui-outlineSelectWidget { + height: 100%; +} +.oo-ui-outlineSelectWidget:focus { + box-shadow: inset 0 0 0 2px #36c; +} .oo-ui-outlineOptionWidget { -webkit-touch-callout: none; -webkit-user-select: none; @@ -689,23 +691,26 @@ .oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { opacity: 0.5; } -.oo-ui-outlineOptionWidget-level-0 { - padding-left: 3.5em; -} -.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon { - left: 1em; +.oo-ui-outlineOptionWidget-level-0.oo-ui-iconElement { + padding-left: 2.571em; } .oo-ui-outlineOptionWidget-level-1 { - padding-left: 5em; + padding-left: 2.571em; +} +.oo-ui-outlineOptionWidget-level-1.oo-ui-iconElement { + padding-left: 4.429em; } -.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon { - left: 2.5em; +.oo-ui-outlineOptionWidget-level-1.oo-ui-iconElement .oo-ui-iconElement-icon { + left: 2.571em; } .oo-ui-outlineOptionWidget-level-2 { - padding-left: 6.5em; + padding-left: 5.142em; +} +.oo-ui-outlineOptionWidget-level-2.oo-ui-iconElement { + padding-left: 6.857em; } -.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon { - left: 4em; +.oo-ui-outlineOptionWidget-level-2.oo-ui-iconElement .oo-ui-iconElement-icon { + left: 4.429em; } .oo-ui-outlineControlsWidget { height: 3em; @@ -842,8 +847,6 @@ background-color: transparent; color: #000; vertical-align: middle; - /* stylelint-disable indentation */ - /* stylelint-enable indentation */ } .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder { color: #72777d; diff --git a/resources/lib/oojs-ui/oojs-ui-widgets.js b/resources/lib/oojs-ui/oojs-ui-widgets.js index b89262dc83..d1fbe0df48 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets.js +++ b/resources/lib/oojs-ui/oojs-ui-widgets.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:40Z + * Date: 2017-03-07T22:57:01Z */ ( function ( OO ) { @@ -3643,11 +3643,7 @@ OO.ui.CapsuleMultiselectWidget = function OoUiCapsuleMultiselectWidget( config ) align: 'forwards', anchor: false } ); - OO.ui.mixin.PopupElement.call( this, $.extend( true, {}, config, { - popup: { - $floatableContainer: this.$element - } - } ) ); + OO.ui.mixin.PopupElement.call( this, config ); $tabFocus = $( '' ); OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: $tabFocus } ) ); } else { @@ -4273,6 +4269,9 @@ OO.ui.CapsuleMultiselectWidget.prototype.updateIfHeightChanged = function () { if ( height !== this.height ) { this.height = height; this.menu.position(); + if ( this.popup ) { + this.popup.updateDimensions(); + } this.emit( 'resize' ); } }; diff --git a/resources/lib/oojs-ui/oojs-ui-windows-apex.css b/resources/lib/oojs-ui/oojs-ui-windows-apex.css index b546dd114b..4353b43362 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-windows-apex.css @@ -1,15 +1,13 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-actionWidget.oo-ui-pendingElement-pending { background-image: /* @embed */ url(themes/apex/images/textures/pending.gif); } diff --git a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css index 701c058240..823b1a1db0 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css @@ -1,15 +1,13 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:44Z + * Date: 2017-03-07T22:57:06Z */ -/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */ -/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */ .oo-ui-window { background: transparent; } diff --git a/resources/lib/oojs-ui/oojs-ui-windows.js b/resources/lib/oojs-ui/oojs-ui-windows.js index ad3c226c9e..586efb0d72 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows.js +++ b/resources/lib/oojs-ui/oojs-ui-windows.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.19.4 + * OOjs UI v0.19.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2017 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2017-02-28T23:19:40Z + * Date: 2017-03-07T22:57:01Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/themes/apex/icons-content.json b/resources/lib/oojs-ui/themes/apex/icons-content.json index 394ec85ea7..0cd901f62b 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-content.json +++ b/resources/lib/oojs-ui/themes/apex/icons-content.json @@ -10,6 +10,10 @@ "ltr": "images/icons/articleRedirect-ltr.svg", "rtl": "images/icons/articleRedirect-rtl.svg" } }, + "journal": { "file": { + "ltr": "images/icons/journal-ltr.svg", + "rtl": "images/icons/journal-rtl.svg" + } }, "upload": { "file": { "ltr": "images/icons/upload-ltr.svg", "rtl": "images/icons/upload-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json b/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json index 5b35e74a60..718f9ffa68 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json +++ b/resources/lib/oojs-ui/themes/apex/icons-editing-styling.json @@ -36,6 +36,10 @@ "os": "images/icons/bold-cyrl-be.svg" } } }, + "highlight": { "file": { + "ltr": "images/icons/highlight-ltr.svg", + "rtl": "images/icons/highlight-rtl.svg" + } }, "italic": { "file": { "default": "images/icons/italic-a.svg", "lang": { diff --git a/resources/lib/oojs-ui/themes/apex/icons-interactions.json b/resources/lib/oojs-ui/themes/apex/icons-interactions.json index d68e70c426..ec18f29ddb 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-interactions.json +++ b/resources/lib/oojs-ui/themes/apex/icons-interactions.json @@ -8,8 +8,9 @@ } }, "images": { - "beta": { "file": "images/icons/beta.svg" }, - "betaLaunch": { "file": "images/icons/logo-wikimediaDiscovery.svg" }, + "add": { "file": "images/icons/add.svg" }, + "beta": { "file": "images/icons/beta.svg", "deprecated": "Deprecated since v0.18.3, don't use." }, + "betaLaunch": { "file": "images/icons/logo-wikimediaDiscovery.svg", "deprecated": "Moved since v0.18.3, use 'logoWikimediaDiscovery' from the 'Wikimedia' pack instead." }, "bookmark": { "file": { "ltr": "images/icons/bookmark-ltr.svg", "rtl": "images/icons/bookmark-rtl.svg" @@ -49,7 +50,8 @@ "ltr": "images/icons/printer-ltr.svg", "rtl": "images/icons/printer-rtl.svg" } }, - "ribbonPrize": { "file": "images/icons/ribbonPrize.svg" }, + "ribbonPrize": { "file": "images/icons/ribbonPrize.svg", "deprecated": "Deprecated since v0.18.3, don't use." }, + "subtract": { "file": "images/icons/subtract.svg" }, "sun": { "file": { "ltr": "images/icons/sun-ltr.svg", "rtl": "images/icons/sun-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/apex/icons-moderation.json b/resources/lib/oojs-ui/themes/apex/icons-moderation.json index 15c0251bf4..c8385e4dc2 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-moderation.json +++ b/resources/lib/oojs-ui/themes/apex/icons-moderation.json @@ -6,7 +6,7 @@ "blockUndo": { "file": { "ltr": "images/icons/unBlock-ltr.svg", "rtl": "images/icons/unBlock-rtl.svg" - } }, + }, "deprecated": "Renamed since v0.18.3, use 'unBlock' instead." }, "unBlock": { "file": { "ltr": "images/icons/unBlock-ltr.svg", "rtl": "images/icons/unBlock-rtl.svg" @@ -18,7 +18,7 @@ "flagUndo": { "file": { "ltr": "images/icons/unFlag-ltr.svg", "rtl": "images/icons/unFlag-rtl.svg" - } }, + }, "deprecated": "Renamed since v0.18.3, use 'unFlag' instead." }, "unFlag": { "file": { "ltr": "images/icons/unFlag-ltr.svg", "rtl": "images/icons/unFlag-rtl.svg" @@ -42,7 +42,7 @@ "trashUndo": { "file": { "ltr": "images/icons/unTrash-ltr.svg", "rtl": "images/icons/unTrash-rtl.svg" - } }, + }, "deprecated": "Renamed since v0.18.3, use 'unTrash' instead." }, "ongoingConversation": { "file": { "ltr": "images/icons/ongoingConversation-ltr.svg", diff --git a/resources/lib/oojs-ui/themes/apex/icons.json b/resources/lib/oojs-ui/themes/apex/icons.json index b5fbbed0cd..f4a2dc9269 100644 --- a/resources/lib/oojs-ui/themes/apex/icons.json +++ b/resources/lib/oojs-ui/themes/apex/icons.json @@ -2,7 +2,7 @@ "prefix": "oo-ui-icon", "intro": "@import '../../../../src/styles/common';", "images": { - "add": { "file": "images/icons/add.svg" }, + "add": { "file": "images/icons/add.svg", "deprecated": "Moved since v0.19.5, use from the 'interactive' pack instead." }, "advanced": { "file": "images/icons/advanced.svg" }, "alert": { "file": "images/icons/alert.svg" }, "cancel": { "file": "images/icons/cancel.svg" }, diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..8deeddf49e4691da856e5118fae7075e8640f2e5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-g_);| zV~9s*a)Jcw;)Zn(>_sLlYVQo|lib>naiGJy>B@ + + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/close.svg b/resources/lib/oojs-ui/themes/apex/images/icons/close.svg index d058d65b31..b379e18573 100644 --- a/resources/lib/oojs-ui/themes/apex/images/icons/close.svg +++ b/resources/lib/oojs-ui/themes/apex/images/icons/close.svg @@ -1,6 +1,4 @@ - - - + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..73dd6b9c91cabb7615eb465e5872a2e89f9e4b9d GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#V=16 z#}JRsr)3R%;5FJ7{mCKh$0BeJ2j z_lQ$ZOOGp$kBaf1={>C#56$O4yu+U__h0jNM)GI#50!V6jx+eKxe{6MsaM=ze0jti z(fDJZTbeFb9=fN)nl4)LF(%ozYyHCM5fc_CTdaQ)!}>v{U9iTy<9>pk==l!<2iTi_ zZ)`d5;Aq^`|7k`?d8kh8)g$r3@|O;HKiZz`In(j@l-YA0+Ad6}my+40bz$GbIvI{X z)9i}_o9-tnGo`A2&li5DSJ>0<;TRcpEdJiQ3Lgt=)*bE2Yp%8GKiC&g5GVep{4;An X$<(rCl@98_P+;(M^>bP0l+XkKhhBt> literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.svg new file mode 100644 index 0000000000..eb42923d68 --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/highlight-ltr.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/highlight-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea298305f6920dedff310d51f6e76df4e863c3b GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#eYv1 z#}JRsr&ssuxj0I+eVl)H!G*~$N>259h$s~@z7XLGe<-#hrXlGuS4-H+fDDf?Wx+r# z6DJRWiJ=<|J2xM%N%vR$s1|Sj+2-@v`8@x1b!8IQ<$bWYRpBnKF0qQ)rib@VedFaQ zd69iBrtYE%A^Ml?zL(!>gSXpAOwn;;HQu*A#c%Fn z$*FJHSk_DQa;bfopt<7(d*&35yp1z=&e(mX(B7y?dw=0lX?V9E;;!JIinZox>bpO5M3ad?g=ga%wIv6*XX~q$)IH8kHcZF{Fv7|q` d{qOi^#(DRr^7$T^C + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/journal-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..2af4eb0e08fe9b2deefe6c4f74d4b39519df9424 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN%)r2y8Yd77 + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/journal-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..033ede138837125f881ebb4d9be95c7093a38fcc GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN%)r2y8Yd77$uK7Er*^)5S4FB0M<(2w0U_ltsE0HkgWtDl=cZ5a82gDB>%+s*RyY z + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..4e58b70a245ec04905d580c7efe6fc821824c7d8 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaT%)r37cHewmAcrl$C&bmgz~}$}|MRCTat4Yp zmIV0)GdMiEkp|?*c)B=-aLi0ja9|WG2xDa4=&-L*BJ|9E{s)to80H>g=8~CxY$Z?~ NgQu&X%Q~loCIEJ_Ae#UH literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg new file mode 100644 index 0000000000..9595ac67c7 --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/subtract.png b/resources/lib/oojs-ui/themes/apex/images/icons/subtract.png new file mode 100644 index 0000000000000000000000000000000000000000..bd719cb67569d8d1c716892f83a3401344c07401 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-g{r5E zV~9s*a)Jcw;slW%rltnL{yX(qGmg3}QUnP!1v+puFuc%YWNBYEcO_5*gQu&X%Q~lo FCICy89Ap3h literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/subtract.svg b/resources/lib/oojs-ui/themes/apex/images/icons/subtract.svg new file mode 100644 index 0000000000..a79f0b508e --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/subtract.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json index c97d770273..85e47ee9b2 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json @@ -56,6 +56,10 @@ "os": "images/icons/bold-cyrl-be.svg" } } }, + "highlight": { "file": { + "ltr": "images/icons/highlight-ltr.svg", + "rtl": "images/icons/highlight-rtl.svg" + } }, "italic": { "file": { "default": "images/icons/italic-a.svg", "lang": { diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json b/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json index 3436446e04..827a72e157 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json @@ -22,8 +22,9 @@ } }, "images": { - "beta": { "file": "images/icons/beta.svg" }, - "betaLaunch": { "file": "images/icons/logo-wikimediaDiscovery.svg" }, + "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ] }, + "beta": { "file": "images/icons/beta.svg", "deprecated": "Deprecated since v0.18.3, don't use." }, + "betaLaunch": { "file": "images/icons/logo-wikimediaDiscovery.svg", "deprecated": "Moved since v0.18.3, use 'logoWikimediaDiscovery' from the 'Wikimedia' pack instead." }, "bookmark": { "file": { "ltr": "images/icons/bookmark-ltr.svg", "rtl": "images/icons/bookmark-rtl.svg" @@ -66,7 +67,8 @@ "ltr": "images/icons/printer-ltr.svg", "rtl": "images/icons/printer-rtl.svg" } }, - "ribbonPrize": { "file": "images/icons/ribbonPrize.svg" }, + "ribbonPrize": { "file": "images/icons/ribbonPrize.svg", "deprecated": "Deprecated since v0.18.3, don't use." }, + "subtract": { "file": "images/icons/subtract.svg" }, "sun": { "file": { "ltr": "images/icons/sun-ltr.svg", "rtl": "images/icons/sun-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json b/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json index 6a472676d8..b4acff1ce8 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json @@ -26,7 +26,7 @@ "blockUndo": { "file": { "ltr": "images/icons/unBlock-ltr.svg", "rtl": "images/icons/unBlock-rtl.svg" - } }, + }, "deprecated": "Renamed since v0.18.3, use 'unBlock' instead." }, "unBlock": { "file": { "ltr": "images/icons/unBlock-ltr.svg", "rtl": "images/icons/unBlock-rtl.svg" @@ -42,7 +42,7 @@ "flagUndo": { "file": { "ltr": "images/icons/unFlag-ltr.svg", "rtl": "images/icons/unFlag-rtl.svg" - } }, + }, "deprecated": "Renamed since v0.18.3, use 'unFlag' instead." }, "lock": { "file": { "ltr": "images/icons/lock-ltr.svg", "rtl": "images/icons/lock-rtl.svg" @@ -65,7 +65,7 @@ "trashUndo": { "file": { "ltr": "images/icons/unTrash-ltr.svg", "rtl": "images/icons/unTrash-rtl.svg" - } }, + }, "deprecated": "Renamed since v0.18.3, use 'unTrash' instead." }, "ongoingConversation": { "file": { "ltr": "images/icons/ongoingConversation-ltr.svg", diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons.json b/resources/lib/oojs-ui/themes/mediawiki/icons.json index 4666fd1a59..60c05f3e9a 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons.json @@ -22,16 +22,13 @@ } }, "images": { - "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ] }, + "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ], "deprecated": "Moved since v0.19.5, use from the 'interactive' pack instead." }, "advanced": { "file": "images/icons/advanced.svg" }, "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] }, "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", "progressive" ] }, - "close": { "file": { - "ltr": "images/icons/close-ltr.svg", - "rtl": "images/icons/close-rtl.svg" - } }, + "close": { "file": "images/icons/close.svg" }, "code": { "file": "images/icons/code.svg" }, "collapse": { "file": "images/icons/collapse.svg" }, "comment": { "file": "images/icons/comment.svg" }, diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..92af7b6fa04e6f3979291d0ed7ce0029d3b6bcad GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#cWR( z#}JRsx04L{8WaRrax>QaZ2NaK|EI8YHTV8x#ea!9Ho{F#k2-r3qs@#tw}*xXeTrn@ z{?g!C(o?d=&7e4C&t#68Dd*M*nl$X5%u>K^($C72WftlRrQHpz@?W1%eU@ zpICykVx@lk)XjeL!SaFMG||}W**m_MMNW4!Si&bIQ+I*GD#3HDs|xo8TQQCW=Pqjg btSsBw6l3&u|9=OdGZ{Qx{an^LB{Ts5Rd!LP literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg new file mode 100644 index 0000000000..8027fffd5e --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png deleted file mode 100644 index a35e9d12d26e69280b69cf4a3121069f97d43e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#ZgZe z#}JRsx07tSm<$Enwnx@)`^M1J+PbEE<9C;N2kxCp6Vyp*&E4DH%9W)XVax5#Vc7ZR zP1vOMTr*Erx6D-O?EERJ!2E1hJ97f#lE!&<0gU{;3m(lqq{>)zAg+o}%8~C*jL-t^ zH%rP`+P1PX&AKJDfH~*sJC>f10`DSo6=}=(hC<~X?oEHPE^)=MXa-0%8EuJ`s!)8e zI{!oN!Os`UOxvWlu77)pW18L$)t@|dYXxm;fjZgJqz-DanE%>z>%)xyr?{t - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.png deleted file mode 100644 index 69f07873e3e433660e423174aaf352da696292aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysAg3t6C&bmgz{e={jBy$eoisPGnbaw{EEMEES+fR{WGrANwcRf_* zc)DGkee?4T+H583U;PDY=<{@O43UuBd+=t_Ap-%|gULFXZUPF4?Jc?m|No08Z-_lA z6sOUZcWz6I%0G3vliQvx$qrFtk&}`PxWw`6?&VKYQm_09v9ihMI%B`mHGQ>Y@1d;= zQ(s*&diug-%0h{N(|eqsH+wI=v!X`d~ndE@SX?^>bP0l+XkKu~eY0 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.svg deleted file mode 100644 index 122340eca3..0000000000 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-progressive.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png deleted file mode 100644 index b6a42b8054f706dbabd7602cc577ccc3b7e19fa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#X(OO z#}JRsx0CjA9WoGcJO3y?UEZOfV8SoGcXku~AG~`K#KOMv!qx8u7n-cN{Yqc(rg$vc z`&Q-WvI%$QI2Y+3Ir3)$OGKt#U!&;-?khbFOcj|dtO1NO-HllMf{L$k1U+~-k*8tt zoY;m=H--%b9={Gaep`1SgnPTHzxSr;rJQGO9g3aQ^(*xAx(5OEzImKQhb~{0n8*2} zZ~w=+2ZDhdsk}$C)*ZW9@nG8#le*=CdzcHNimdKI;Vst02i2W1^@s6 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg deleted file mode 100644 index c2693163e4..0000000000 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..06fcd5d41343015abbf9764709f74cbb35cafe58 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysAjdesC&bmgz{e=%jBy$eoi{=#b?c- z$ec~HjyCtb_igaI6RKn$=4^H2M7mkg>XfGq3!krh% + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png deleted file mode 100644 index 16462a268349d17cce51a1b0ca42ffc57bd0fcf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#Xe6L z#}JRsw^!`B4jD+aKlJ-}{|%!I3;V_0JE|AWJ8<`;E4$;03s;*tx?V7LoqqkmpW~?8 ztRt?!9j6K1W1lraCG%N5`wZs2`An=6m}8I2F)wkr&u;Nyj_rk&9qYHMe`jPn5ZEYt zVO_`l2G3lFg^C418QfbI9o0=?i4nOo<&43FbEs}`=uMM`$dnjT5SK9UA-l=T2BEe&J018Rq1`40oRVCMTdz O7(8A5T-G@yGywoI5@-Mb diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg deleted file mode 100644 index 67dc06c8b4..0000000000 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-progressive.png deleted file mode 100644 index 2c8859609663a03cb667e4f001328dff71b777db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysASXY-C&bmgz(+6Uf^pgzqf`(A zG7QqsX@y<^G7OW?8mFBGG1AT&B%U)#Jq2VNr=A8YI}Kz2WzAAf00oV}$fEEVP%lJ{ zef)k9Bkhbz?k%8tlZ;bf^=F<`r7iI(bE-bu&Y`h|eS^-+w{JhF0oC_;x;TbNNNzp&FsLa&r1c{Ip6SJXkt>%@O$&SX zz1}S_flc(E#a6L&uL(yC4AZt2`>DCTotbduv{b~UUz60W<~h0f7wi|>;4YOve@4@_ zhwh@Xms|QYH(d^5t@K;G!0c(fjVMp`)!*!<#ZzN$dC@#NWR7dygY~kE&x_d#1 - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png deleted file mode 100644 index e3e24176b5380ffca89ecf5d8fae8de7dfc2aee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#Xe6L z#}JRsw^uf19SRU>|9C$nckXWnKBx9c`?`1gUr~SY?#UwOg#wD%@=F$U*g3qM#COku zL+ym`ri_0D(+@xV{b0`F)DyAkjh^$H;!`TJUQ`~io|nvW|HQ_l$-FhPRhuLZir6!L zXf5RZ)1u(?3?kqtCzf z+9Ypo-(8bTV!hQTO?}onO;z5o$?}`&hgDDX-42w_k8Mg_lW>CfiF`n+Rr>!eg}y+a OFnGH9xvX - - - - - diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb037ad53504e181489f3725a4f3e403710aa3b GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#S~8$ z#}JRsx0AH_8Vm$jk6&4^lkHAxcA+qj+`&?T1F~HSv)5$I{?e={dwaUM=Y6NeA60D) znAIj3PI_6)Vx7=vs$lpjO?CDeh8V_9z5Ob)kG_}~qJ4c*v}eiBh^TjyL-gCfN1LhM z=!g$5+WC9h`9+R4)Jk literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg new file mode 100644 index 0000000000..88ffb56d89 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..314d7acb85ed2a153198abd29fb1f9bdbb001cca GIT binary patch literal 333 zcmV-T0kZyyP)C)3GjtQ5eSYbE*-G)nYRl86-A|Q6eTLaS?7oVsQm} z4H(Ug1_q1h1sE(+gQ!S8;V5J87 zuD_2hrQdRh;CKZ58cPvYbHw}ekhjy6(r(WAHQabGI2mYufl+0`@U;rKiyh2Q3O;6I%Ye8Z-P%Drv$00000NkvXXu0mjf_Arfn literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.svg new file mode 100644 index 0000000000..e301deaf1d --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..14bd7becfccc2d7fca2c209bc42c5a7dc0850dfa GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysAZKQPPl&5~fscLsexuYg3=IE` z)6Ou|1Ig3&_4|ROUd9Ej&?`WONyaJT)YC?3XMk)7X`Fr|18N5{Oj1wjr=JIs5RuT(RX_z0sh-fCtAUO* zDhcunX5je9c!}vB%Q`W(S%$X`{9M!Rb<)B>iT97jLI2R3+uGvJ7WrOxdUmYjm#MV< z%x}zL=M+>EMS;2(db&7nSz+{Q zvLx?Go@FWeuNF9OyCP=#eElE){OkWJPRO_Ot39_~V>u(*r&{Fux;Z5pQRl^yXUVO# xy% + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..73dd6b9c91cabb7615eb465e5872a2e89f9e4b9d GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#V=16 z#}JRsr)3R%;5FJ7{mCKh$0BeJ2j z_lQ$ZOOGp$kBaf1={>C#56$O4yu+U__h0jNM)GI#50!V6jx+eKxe{6MsaM=ze0jti z(fDJZTbeFb9=fN)nl4)LF(%ozYyHCM5fc_CTdaQ)!}>v{U9iTy<9>pk==l!<2iTi_ zZ)`d5;Aq^`|7k`?d8kh8)g$r3@|O;HKiZz`In(j@l-YA0+Ad6}my+40bz$GbIvI{X z)9i}_o9-tnGo`A2&li5DSJ>0<;TRcpEdJiQ3Lgt=)*bE2Yp%8GKiC&g5GVep{4;An X$<(rCl@98_P+;(M^>bP0l+XkKhhBt> literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.svg new file mode 100644 index 0000000000..eb42923d68 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-ltr.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..024595e2f89c290c058b65fe06f336198b998609 GIT binary patch literal 345 zcmV-f0jBC)x9nRQ5Xi`b9RG5PomQ)HzHAp#08*JC|reGpmG6< zjVlmZr9z=0S&c+Qsn7@^K|~(K&c=k9&73iX#M@5heZDzAnGpU}(7`e0n=YO}7a#gL zMQoyY1efo#d*e!aebd!q`W9)?x7D5O`xA&>W%*8=l|HqTheq%s} rOkoYLIb^X>B!hNxz&VnZ{qN@!TZy10L(vo100000NkvXXu0mjfGl-4E literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.svg new file mode 100644 index 0000000000..46d61c2258 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..039ccbe7200f4578394e803a49bdfed08c8974da GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysAZJT}Pl&5~fsb+88KYDXQpvpq zBpK@ehlZ{)O*v_tdfGS*h|T~RKye_$Fzu{X=oPb+6HxK=(?&qqG?1)G>M5g?Gsfv4 zEes6*!Qvn-Kykg83vi=A;xJ=@Y`u&NV53f(Cm)B{0x~4^v|-X&h_OH$Ar1g5I|DWL zwzxCU{njNxe!&d0KmKOl&%|u-cb!q|5msL|#WTf`-*4ab^KtmeIM@7eEcb=uA8u~H zs8K5R^qTnE>9#+lx>uW=?fMeBW`2*Y0nnHgo-U3d5|UF7wg(+@U|_fy+SnjkEq?S~ z_1*vf_1_n{3thbU(bnr8gV0(Ij}1B#y + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/highlight-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea298305f6920dedff310d51f6e76df4e863c3b GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#eYv1 z#}JRsr&ssuxj0I+eVl)H!G*~$N>259h$s~@z7XLGe<-#hrXlGuS4-H+fDDf?Wx+r# z6DJRWiJ=<|J2xM%N%vR$s1|Sj+2-@v`8@x1b!8IQ<$bWYRpBnKF0qQ)rib@VedFaQ zd69iBrtYE%A^Ml?zL(!>gSXpAOwn;;HQu*A#c%Fn z$*FJHSk_DQa;bfopt<7(d*&35yp1z=&e(mX(B7y?dw=0lX?V9E;;!JIinZox>bpO5M3ad?g=ga%wIv6*XX~q$)IH8kHcZF{Fv7|q` d{qOi^#(DRr^7$T^C + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png index e7dc90ebc5e8ca5859e8d40bc99a3f4c87bb0a46..bc2e9cc6ff1ed19fb48c439b0d375c92e26def46 100644 GIT binary patch delta 96 zcmZ3-xPozlf2512i(`mHcya;|6f!6ZF!xBr$S6o~MZ^Rc8YL7mY9H}RWDl?m(qLr^ xYG~%>IAH0(G_zTyc@dBPaly{VE6z0VGcfdOiR)#he|^RP1fH&bF6*2UngCHC9asPW delta 102 zcmZ3%xQ=mxf4rBci(`ny<>Uk)C}dFNNNBvI=fEh=%EqRWC??L**1fwyglTItZ^K6g zkvN9XM+X=dDtvQhy{O4(@HFFqgGfOEBjc^YIUjEEF)W-Y?sHf9n=%6sc)I$ztaD0e F0szY=` diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg index e04818fa7c..370d0a374b 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg @@ -1,4 +1,4 @@ - + - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-progressive.png index 444d48b579dfc8b25d78105eba88e4ce0eaef971..19f17bdb9da06408c66c9c6230e4853ee71120d6 100644 GIT binary patch delta 96 zcmZ3-xPozlf2512i(`mHcya;|6f!6ZF!xBr$S6o~MZ^Rc8YL7mY9H}RWDl?m(qLo@ xYG~%>IAH0(G_zTyc@dBPan8=iDrXw_85kO_hzqnfzKCD|0#8>zmvv4FO#nvr9N_=} delta 102 zcmZ3%xQ=mxf4rBci(`ny<>Uk)C}dFNNNBvI=fEh=$i}9UC??L**1fwyglTItZ^K6g zkvN9XM+X=dDtvQhy{O4*@HFLsgGfOEBjc??nUA;l7-p^%_gTaqx1IqAJYD@<);T3K F0RXs4A_4#a diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-progressive.svg index 0232e22c33..baf8a4a626 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-progressive.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-progressive.svg @@ -1,4 +1,4 @@ - + - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png index f30b5ff3a14183875dac3fe048030243110bea0a..2af4eb0e08fe9b2deefe6c4f74d4b39519df9424 100644 GIT binary patch delta 152 zcmZ3%xPozlL_G^L0|R4foIorC0|S46Pl&5~fe(-g2bb4y{0DMaN`m}?8J_oX9)7g; z9+2Eak75uTg?1ceNW0?a)UF)|7gToEw=hDHg6jM_)M64?VRgEUy#f*P8+ISyDl rFwJaMXbP0l+XkKDn%)9 delta 152 zcmZ3%xPozlL_G%^0|Uc@a@!w3inG8YvY3H^TNs2H8D`Cq018HVx;Tb-bS5WAupX8( zcr@`h|J48fosm9Ec6Ed}6mv&-1axa#d}LG96cdmZPl;}L$Gk{q$xi;ZIxVTK2|pq} zG+h(ZQFp&wuOcO0ckaM}3&#%}IN-Tc+Fgf%A?B)}pytU1cYA==FnGH9xvX + - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png index deb4f76aca3290d8732a4abb20cd0057b831adee..60b5f473e6518565afb388f415213ecf0d78ceb8 100644 GIT binary patch delta 93 zcmdnYxRP-~aG0Z~i(`mHcya;|uqv}Ci*zk)FclG1X1;bIz^BVl#8-4x8$*%CBS#I6 w4Tmfgc%HW`Dwr_!;gc0g#WKDVEp9L}T)87*r9UT9ngIwrUHx3vIVCg!0K{=1CjbBd delta 103 zcmV-t0GR)&0kZ*+Q(#L;L_t&-m9>k(34lNh1V?d8uoU~qXZml&M?fOn!;b@DGfM&h z1m26l#X|zI=Wz52kjk*#aj_;^KuGm_jdB%R#|Ko+FLF* + - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-progressive.png index e5a4fa12081491591354148df4643d3723ec21c6..b16badc620a63f0a65134fe243a270f69850324e 100644 GIT binary patch delta 93 zcmdnQxRP-~aG0Z~i(`mHcya;|uqv}Ci*zk)FclG1X1;bIz^BVl#8-4x8$*%CBS#I6 w4Tmfgc%HW`Dwr_!;gc0g#XPYSEp9L}Tsb3Qwd>J-4+bFcboFyt=akR{0M~mVdH?_b delta 102 zcmV-s0Ga=(0kQ#*Q(sC+L_t&-m9>j83V=Wi1V?3`;FIjr%>Tb)5s(O1*fwO6NruvSs{jB107*qo IM6N<$f)*qv&Hw-a diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-progressive.svg index f2eb554994..17ccb82c73 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-progressive.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-progressive.svg @@ -1,4 +1,4 @@ - + - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png index 7826fa80f83943843bffbf02098f91a046041e31..033ede138837125f881ebb4d9be95c7093a38fcc 100644 GIT binary patch delta 153 zcmdnMxRP;#L_G^L0|R4foIorC1A|b2Pl&5~fe(<048jsRo&));B|(0{486~vag=iv zX#oWsJzX3_B*K#ufPht*MOmb4VS}lNs50}l3jsb|h9bVAtJ)ZfG#)u>aBMhap}_OJ qWl_O|sSls5P%4)3ooI1`k>Sc6Aqgw}Ig!#J>pWfkT-G@yGywn#?JBka delta 160 zcmZ3=4;=W=!#L?=K_VL)mt^;3K|Y4O8bQ?!4+FV?)-iax L`njxgN@xNAp&L06 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg index 84da9fa60f..2a07a44aeb 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg @@ -1,4 +1,4 @@ - + - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..4e58b70a245ec04905d580c7efe6fc821824c7d8 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaT%)r37cHewmAcrl$C&bmgz~}$}|MRCTat4Yp zmIV0)GdMiEkp|?*c)B=-aLi0ja9|WG2xDa4=&-L*BJ|9E{s)to80H>g=8~CxY$Z?~ NgQu&X%Q~loCIEJ_Ae#UH literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.svg new file mode 100644 index 0000000000..d76eb3c768 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..173297207ce0d94317d96f17298a23590d5eecee GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaT%)r37cHewmAcrl$C&bmgz{fc4j6~5~C7=jn zNswPKgTu2MX+VyQr;B3<$IRpe2S%}iFh=H$4*MD + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.png new file mode 100644 index 0000000000000000000000000000000000000000..bd719cb67569d8d1c716892f83a3401344c07401 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-g{r5E zV~9s*a)Jcw;slW%rltnL{yX(qGmg3}QUnP!1v+puFuc%YWNBYEcO_5*gQu&X%Q~lo FCICy89Ap3h literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.svg new file mode 100644 index 0000000000..a79f0b508e --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subtract.svg @@ -0,0 +1,4 @@ + + + + -- 2.20.1