From 36cd338271050f4b1d2734390d49fa8258d6869c Mon Sep 17 00:00:00 2001 From: Volker E Date: Tue, 28 Feb 2017 15:53:57 -0800 Subject: [PATCH] Update OOjs UI to v0.19.4 Release notes: https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/History.md;v0.19.4 Change-Id: Ifa1c6cb355a0c4f5073c93e37939cfc2f6653c81 --- composer.json | 2 +- resources/lib/oojs-ui/i18n/bqi.json | 3 +- resources/lib/oojs-ui/i18n/br.json | 6 +- resources/lib/oojs-ui/i18n/mg.json | 18 +- resources/lib/oojs-ui/i18n/nn.json | 8 +- resources/lib/oojs-ui/i18n/pnb.json | 4 +- resources/lib/oojs-ui/i18n/yi.json | 1 + resources/lib/oojs-ui/oojs-ui-apex.js | 4 +- resources/lib/oojs-ui/oojs-ui-core-apex.css | 69 +++- .../lib/oojs-ui/oojs-ui-core-mediawiki.css | 139 ++++--- resources/lib/oojs-ui/oojs-ui-core.js | 353 ++++++++++++++++-- resources/lib/oojs-ui/oojs-ui-mediawiki.js | 4 +- .../lib/oojs-ui/oojs-ui-toolbars-apex.css | 6 +- .../oojs-ui/oojs-ui-toolbars-mediawiki.css | 13 +- resources/lib/oojs-ui/oojs-ui-toolbars.js | 4 +- .../lib/oojs-ui/oojs-ui-widgets-apex.css | 83 ++-- .../lib/oojs-ui/oojs-ui-widgets-mediawiki.css | 164 ++++---- resources/lib/oojs-ui/oojs-ui-widgets.js | 4 +- .../lib/oojs-ui/oojs-ui-windows-apex.css | 6 +- .../lib/oojs-ui/oojs-ui-windows-mediawiki.css | 30 +- resources/lib/oojs-ui/oojs-ui-windows.js | 4 +- .../themes/apex/icons-editing-advanced.json | 1 + .../themes/apex/icons-interactions.json | 4 + .../apex/images/icons/case-sensitive.svg | 2 +- .../themes/apex/images/icons/diacritic.png | Bin 0 -> 290 bytes .../themes/apex/images/icons/diacritic.svg | 7 + .../apex/images/icons/feedback-ltr-invert.png | Bin 0 -> 284 bytes .../apex/images/icons/feedback-ltr-invert.svg | 4 + .../themes/apex/images/icons/feedback-ltr.png | Bin 0 -> 294 bytes .../themes/apex/images/icons/feedback-ltr.svg | 4 + .../apex/images/icons/feedback-rtl-invert.png | Bin 0 -> 290 bytes .../apex/images/icons/feedback-rtl-invert.svg | 4 + .../themes/apex/images/icons/feedback-rtl.png | Bin 0 -> 290 bytes .../themes/apex/images/icons/feedback-rtl.svg | 4 + .../mediawiki/icons-editing-advanced.json | 1 + .../themes/mediawiki/icons-interactions.json | 7 + .../images/icons/case-sensitive-invert.svg | 2 +- .../icons/case-sensitive-progressive.svg | 2 +- .../mediawiki/images/icons/case-sensitive.svg | 2 +- .../images/icons/diacritic-invert.png | Bin 0 -> 313 bytes .../images/icons/diacritic-invert.svg | 7 + .../images/icons/diacritic-progressive.png | Bin 0 -> 413 bytes .../images/icons/diacritic-progressive.svg | 7 + .../mediawiki/images/icons/diacritic.png | Bin 0 -> 290 bytes .../mediawiki/images/icons/diacritic.svg | 7 + .../images/icons/feedback-ltr-invert.png | Bin 0 -> 284 bytes .../images/icons/feedback-ltr-invert.svg | 4 + .../images/icons/feedback-ltr-progressive.png | Bin 0 -> 373 bytes .../images/icons/feedback-ltr-progressive.svg | 4 + .../mediawiki/images/icons/feedback-ltr.png | Bin 0 -> 294 bytes .../mediawiki/images/icons/feedback-ltr.svg | 4 + .../images/icons/feedback-rtl-invert.png | Bin 0 -> 290 bytes .../images/icons/feedback-rtl-invert.svg | 4 + .../images/icons/feedback-rtl-progressive.png | Bin 0 -> 376 bytes .../images/icons/feedback-rtl-progressive.svg | 4 + .../mediawiki/images/icons/feedback-rtl.png | Bin 0 -> 290 bytes .../mediawiki/images/icons/feedback-rtl.svg | 4 + 57 files changed, 752 insertions(+), 262 deletions(-) create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.svg diff --git a/composer.json b/composer.json index 3520dc3efa..bc0ce17abf 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.2", + "oojs/oojs-ui": "0.19.4", "oyejorge/less.php": "1.7.0.10", "php": ">=5.5.9", "psr/log": "1.0.2", diff --git a/resources/lib/oojs-ui/i18n/bqi.json b/resources/lib/oojs-ui/i18n/bqi.json index 8b85a206fc..a84374a29a 100644 --- a/resources/lib/oojs-ui/i18n/bqi.json +++ b/resources/lib/oojs-ui/i18n/bqi.json @@ -12,5 +12,6 @@ "ooui-dialog-process-retry": "ز نۉ تلاش کونين", "ooui-dialog-process-continue": "ديندا گرهڌن", "ooui-selectfile-button-select": "گولإڤورچين کردن جانیا", - "ooui-selectfile-placeholder": "هيژ جانيایي گولإ ڤورچين نڤابيڌإ" + "ooui-selectfile-placeholder": "هيژ جانيایي گولإ ڤورچين نڤابيڌإ", + "ooui-selectfile-dragdrop-placeholder": "جانيانأ ڤأنين ايچو" } diff --git a/resources/lib/oojs-ui/i18n/br.json b/resources/lib/oojs-ui/i18n/br.json index 83af863c38..cbfcab074e 100644 --- a/resources/lib/oojs-ui/i18n/br.json +++ b/resources/lib/oojs-ui/i18n/br.json @@ -18,5 +18,9 @@ "ooui-dialog-process-error": "Un dra bennak a-dreuz a zo bet", "ooui-dialog-process-dismiss": "Disteurel", "ooui-dialog-process-retry": "Klask en-dro", - "ooui-dialog-process-continue": "Kenderc'hel" + "ooui-dialog-process-continue": "Kenderc'hel", + "ooui-selectfile-button-select": "Diuzañ ur restr", + "ooui-selectfile-not-supported": "N'eo ket skoret an diuzañ restroù", + "ooui-selectfile-placeholder": "N'eus bet diuzet restr ebet", + "ooui-selectfile-dragdrop-placeholder": "Lezel ar restr amañ" } diff --git a/resources/lib/oojs-ui/i18n/mg.json b/resources/lib/oojs-ui/i18n/mg.json index af97d17116..722b3e2995 100644 --- a/resources/lib/oojs-ui/i18n/mg.json +++ b/resources/lib/oojs-ui/i18n/mg.json @@ -3,5 +3,21 @@ "authors": [ "Jagwar" ] - } + }, + "ooui-outline-control-move-down": "Hampidina ilay zavatra", + "ooui-outline-control-move-up": "Hampiakatra ilay zavatra", + "ooui-outline-control-remove": "Hanala iay zavatra", + "ooui-toolbar-more": "Be kokoa", + "ooui-toolgroup-expand": "Be kokoa", + "ooui-toolgroup-collapse": "Kely kokoa", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Avela", + "ooui-dialog-process-error": "Nisy hadisoana nitranga", + "ooui-dialog-process-dismiss": "Esorina", + "ooui-dialog-process-retry": "Andramana indray", + "ooui-dialog-process-continue": "Tohizana", + "ooui-selectfile-button-select": "Misafidia rakitra iray", + "ooui-selectfile-not-supported": "Tsy zaka ny fisafidiana rakitra", + "ooui-selectfile-placeholder": "Tsy misy rakitra voafidy", + "ooui-selectfile-dragdrop-placeholder": "Hametraka rakitra eto" } diff --git a/resources/lib/oojs-ui/i18n/nn.json b/resources/lib/oojs-ui/i18n/nn.json index c8fba3db06..e3f3e115fd 100644 --- a/resources/lib/oojs-ui/i18n/nn.json +++ b/resources/lib/oojs-ui/i18n/nn.json @@ -7,7 +7,13 @@ }, "ooui-outline-control-move-down": "Flytt element ned", "ooui-outline-control-move-up": "Flytt element opp", - "ooui-toolbar-more": "Fleire", + "ooui-toolbar-more": "Meir", + "ooui-toolgroup-expand": "Meir", + "ooui-toolgroup-collapse": "Færre", + "ooui-dialog-message-reject": "Bryt av", + "ooui-dialog-process-error": "Noko gjekk gale", + "ooui-dialog-process-dismiss": "Lat att", + "ooui-dialog-process-continue": "Hald fram", "ooui-selectfile-button-select": "Vel ei fil", "ooui-selectfile-placeholder": "Inga fil er vald" } diff --git a/resources/lib/oojs-ui/i18n/pnb.json b/resources/lib/oojs-ui/i18n/pnb.json index 8bd4be8b3b..386871c164 100644 --- a/resources/lib/oojs-ui/i18n/pnb.json +++ b/resources/lib/oojs-ui/i18n/pnb.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Saanvel" + "Saanvel", + "Abbas dhothar" ] }, "ooui-outline-control-move-down": "شیہ تھلے کرو", @@ -9,6 +10,7 @@ "ooui-outline-control-remove": "شیہ مٹاؤ", "ooui-toolbar-more": "ہور", "ooui-toolgroup-expand": "ہور", + "ooui-toolgroup-collapse": "گھٹ", "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "مکاؤ", "ooui-dialog-process-error": "کوئی رپھڑ پے گیا اے۔", diff --git a/resources/lib/oojs-ui/i18n/yi.json b/resources/lib/oojs-ui/i18n/yi.json index f206a72378..84048e7c3a 100644 --- a/resources/lib/oojs-ui/i18n/yi.json +++ b/resources/lib/oojs-ui/i18n/yi.json @@ -18,6 +18,7 @@ "ooui-dialog-process-dismiss": "צומאַכן", "ooui-dialog-process-retry": "פרובירט נאכאמאל", "ooui-dialog-process-continue": "פֿארזעצן", + "ooui-selectfile-button-select": "קלויבט א טעקע", "ooui-selectfile-not-supported": "טעקע אויסווייל נישט געשטיצט", "ooui-selectfile-placeholder": "קיין טעקע נישט אויסגעוויילט" } diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js index 2307413d75..541462f0ba 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.2 + * OOjs UI v0.19.4 * 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-14T22:47:20Z + * Date: 2017-02-28T23:19:40Z */ ( 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 524c16bb93..08187820e5 100644 --- a/resources/lib/oojs-ui/oojs-ui-core-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-core-apex.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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 */ @@ -41,8 +43,8 @@ cursor: default; } .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon, -.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { +.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label, +.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { display: inline-block; vertical-align: middle; } @@ -67,7 +69,7 @@ } .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover, .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus { - outline: none; + outline: 0; } .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon, .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon { @@ -124,7 +126,7 @@ .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover, .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus { border-color: #aaa; - outline: none; + outline: 0; } .oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button, .oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { @@ -146,6 +148,8 @@ .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { margin-left: -0.5em; margin-right: -0.5em; + display: inline-block; + vertical-align: middle; } .oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { margin-right: 0.3em; @@ -472,7 +476,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { position: relative; } .oo-ui-panelLayout-scrollable { - overflow-y: auto; + overflow: auto; -webkit-transform: translateZ(0); transform: translateZ(0); } @@ -650,7 +654,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { } .oo-ui-popupWidget { position: absolute; - left: 0; } .oo-ui-popupWidget-popup { position: relative; @@ -665,7 +668,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { display: block; position: absolute; /* `top` property is to be set in theme's selector due to specific `@size-anchor` values */ - left: 0; background-repeat: no-repeat; } .oo-ui-popupWidget-head { @@ -807,7 +809,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover, .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus { border-color: rgba(0, 0, 0, 0.2); - outline: none; + outline: 0; } .oo-ui-dropdownInputWidget.oo-ui-widget-disabled select { color: #ccc; @@ -929,14 +931,41 @@ 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 { background-color: transparent; } +.oo-ui-textInputWidget input::-webkit-input-placeholder, +.oo-ui-textInputWidget textarea::-webkit-input-placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-textInputWidget input:-ms-input-placeholder, +.oo-ui-textInputWidget textarea:-ms-input-placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-textInputWidget input::-moz-placeholder, +.oo-ui-textInputWidget textarea::-moz-placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-textInputWidget input:-moz-placeholder, +.oo-ui-textInputWidget textarea:-moz-placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-textInputWidget input::placeholder, +.oo-ui-textInputWidget textarea::placeholder { + color: #72777d; + opacity: 1; +} .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { - outline: none; + outline: 0; border-color: #a7dcff; box-shadow: 0 0 0.3em #a7dcff, 0 0 0 #fff; } @@ -1058,9 +1087,11 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { -moz-box-sizing: border-box; box-sizing: border-box; } -.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator, -.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { +.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon, +.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { position: absolute; + top: 0; + height: 100%; } .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle { cursor: pointer; @@ -1076,20 +1107,18 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-dropdownWidget-handle:hover { border-color: rgba(0, 0, 0, 0.2); } -.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { - top: 0; - right: 0; - margin: 0.775em; -} .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { - top: 0; left: 0.25em; - margin: 0.3em; + margin: 0 0.3em; } .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { line-height: 2.5em; margin: 0 0.5em; } +.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { + right: 0; + margin: 0 0.775em; +} .oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle { color: #ccc; text-shadow: 0 1px 1px #fff; diff --git a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css index f3b3fce1bb..f468d17478 100644 --- a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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 */ @@ -41,8 +43,8 @@ cursor: default; } .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon, -.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { +.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label, +.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { display: inline-block; vertical-align: middle; } @@ -64,9 +66,6 @@ .oo-ui-buttonElement > .oo-ui-buttonElement-button:focus::-moz-focus-inner { border-color: transparent; } -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - margin-left: 0; -} .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { margin-right: 0.25em; margin-left: 0.46875em; @@ -180,19 +179,27 @@ padding-left: 2.4em; } .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { - padding: 0.546875em 1em; + position: relative; min-height: 2.5em; - min-width: 3.125em; border-radius: 2px; - position: relative; + padding: 0.546875em 1em; +} +.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button { + min-width: 3.125em; +} +.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button { + min-width: 0; } .oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button, .oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { line-height: 1.25; } .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + display: block; position: absolute; - top: 0.2em; + top: 0; + height: 100%; left: 0.5625em; } .oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { @@ -613,7 +620,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { position: relative; } .oo-ui-panelLayout-scrollable { - overflow-y: auto; + overflow: auto; -webkit-transform: translateZ(0); transform: translateZ(0); } @@ -654,7 +661,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { margin-right: 0; } .oo-ui-horizontalLayout > .oo-ui-layout { - margin-bottom: 0; + margin-top: 0; } .oo-ui-optionWidget { position: relative; @@ -806,7 +813,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { } .oo-ui-popupWidget { position: absolute; - left: 0; } .oo-ui-popupWidget-popup { position: relative; @@ -821,7 +827,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { display: block; position: absolute; /* `top` property is to be set in theme's selector due to specific `@size-anchor` values */ - left: 0; background-repeat: no-repeat; } .oo-ui-popupWidget-head { @@ -1044,17 +1049,23 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { -moz-box-sizing: border-box; box-sizing: border-box; } +.oo-ui-dropdownInputWidget-php { + border-right: 1px solid #a2a9b1; + border-radius: 2px; + overflow-x: hidden; +} .oo-ui-dropdownInputWidget select { - background-color: #fff; - height: 2.275em; - font-size: inherit; - font-family: inherit; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; border: 1px solid #a2a9b1; border-radius: 2px; - padding-left: 1em; + padding: 0.5em 1em; + font-size: inherit; + font-family: inherit; vertical-align: middle; } .oo-ui-dropdownInputWidget option { @@ -1063,14 +1074,42 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { height: 1.5em; padding: 0.5em 1em; } -.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover, +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select { + background-color: #f8f9fa; + background-position: -9999em 0; + background-repeat: no-repeat; + color: #222; + -webkit-transition: background-color 100ms, border-color 100ms, box-shadow 100ms; + -moz-transition: background-color 100ms, border-color 100ms, box-shadow 100ms; + transition: background-color 100ms, border-color 100ms, box-shadow 100ms; +} +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover { + background-color: #fff; + color: #444; + border-color: #a2a9b1; +} +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:active { + color: #000; + border-color: #72777d; +} .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus { + border-color: #36c; outline: 0; + box-shadow: inset 0 0 0 1px #36c; +} +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select::-ms-expand { + display: none; +} +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:not( [no-ie] ) { + background-position: right 1.75em center; + width: calc( 100% + 1em ); + height: 2.5em; + padding: 0 0 0 1em; } .oo-ui-dropdownInputWidget.oo-ui-widget-disabled select { + background-color: #eaecf0; color: #72777d; border-color: #c8ccd1; - background-color: #eaecf0; } .oo-ui-radioInputWidget { position: relative; @@ -1304,6 +1343,8 @@ 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 { @@ -1328,28 +1369,36 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { border-color: #c8ccd1; box-shadow: inset 0 0 0 1px #c8ccd1; } -@media screen and (min-width: 0) { - .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { - outline: 1px solid #36c; - outline-offset: -2px; - } -} -.oo-ui-textInputWidget.oo-ui-widget-enabled :-moz-placeholder { +.oo-ui-textInputWidget.oo-ui-widget-enabled input::-webkit-input-placeholder, +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-webkit-input-placeholder { color: #72777d; opacity: 1; } -.oo-ui-textInputWidget.oo-ui-widget-enabled ::-moz-placeholder { +.oo-ui-textInputWidget.oo-ui-widget-enabled input:-ms-input-placeholder, +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:-ms-input-placeholder { color: #72777d; opacity: 1; } -.oo-ui-textInputWidget.oo-ui-widget-enabled :-ms-input-placeholder { +.oo-ui-textInputWidget.oo-ui-widget-enabled input::-moz-placeholder, +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-moz-placeholder { color: #72777d; + opacity: 1; } -.oo-ui-textInputWidget.oo-ui-widget-enabled ::-webkit-input-placeholder { +.oo-ui-textInputWidget.oo-ui-widget-enabled input:-moz-placeholder, +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:-moz-placeholder { color: #72777d; + opacity: 1; } -.oo-ui-textInputWidget.oo-ui-widget-enabled :placeholder-shown { +.oo-ui-textInputWidget.oo-ui-widget-enabled input::placeholder, +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::placeholder { color: #72777d; + opacity: 1; +} +@media screen and (min-width: 0) { + .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { + outline: 1px solid #36c; + outline-offset: -2px; + } } .oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input, .oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea { @@ -1385,7 +1434,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { } .oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon { left: 0; - height: 100%; max-height: 2.375em; margin-left: 0.5em; background-position: right center; @@ -1401,8 +1449,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { } .oo-ui-textInputWidget > .oo-ui-labelElement-label { color: #72777d; - padding: 0.4em; - line-height: 1.5; + margin-top: 1px; + padding: 0.625em 0.546875em 0.546875em; + line-height: 1.172em; } .oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label { margin-right: 2.0875em; @@ -1490,9 +1539,11 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { -moz-box-sizing: border-box; box-sizing: border-box; } -.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator, -.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { +.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon, +.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { position: absolute; + top: 0; + height: 100%; } .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle { cursor: pointer; @@ -1508,14 +1559,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { border-radius: 2px; } .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { - top: 0; right: 0; - margin: 0.775em; + margin: 0 0.775em; } .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { - top: 0; left: 0.25em; - margin: 0.3em; + margin: 0 0.3em; } .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { margin: 0 1em; @@ -1614,8 +1663,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { .oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorElement-indicator { pointer-events: none; } -.oo-ui-comboBoxInputWidget input, -.oo-ui-comboBoxInputWidget textarea { +.oo-ui-comboBoxInputWidget input { height: 2.5em; border-top-right-radius: 0; border-bottom-right-radius: 0; @@ -1635,8 +1683,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout { border-top-left-radius: 0; border-bottom-left-radius: 0; } -.oo-ui-comboBoxInputWidget.oo-ui-comboBoxInputWidget-empty input, -.oo-ui-comboBoxInputWidget.oo-ui-comboBoxInputWidget-empty textarea { +.oo-ui-comboBoxInputWidget.oo-ui-comboBoxInputWidget-empty input { border-right-width: 1px; } .oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { diff --git a/resources/lib/oojs-ui/oojs-ui-core.js b/resources/lib/oojs-ui/oojs-ui-core.js index e327e5f4ed..9eb8716356 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.2 + * OOjs UI v0.19.4 * 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-14T22:47:20Z + * Date: 2017-02-28T23:19:40Z */ ( function ( OO ) { @@ -1072,6 +1072,73 @@ OO.ui.Element.static.getDimensions = function ( el ) { } }; +/** + * Get the number of pixels that an element's content is scrolled to the left. + * + * Adapted from . + * Original code copyright 2012 Wei-Ko Kao, licensed under the MIT License. + * + * This function smooths out browser inconsistencies (nicely described in the README at + * ) and produces a result consistent + * with Firefox's 'scrollLeft', which seems the sanest. + * + * @static + * @method + * @param {HTMLElement|Window} el Element to measure + * @return {number} Scroll position from the left. + * If the element's direction is LTR, this is a positive number between `0` (initial scroll position) + * and `el.scrollWidth - el.clientWidth` (furthest possible scroll position). + * If the element's direction is RTL, this is a negative number between `0` (initial scroll position) + * and `-el.scrollWidth + el.clientWidth` (furthest possible scroll position). + */ +OO.ui.Element.static.getScrollLeft = ( function () { + var rtlScrollType = null; + + function test() { + var $definer = $( '
A
' ), + definer = $definer[ 0 ]; + + $definer.appendTo( 'body' ); + if ( definer.scrollLeft > 0 ) { + // Safari, Chrome + rtlScrollType = 'default'; + } else { + definer.scrollLeft = 1; + if ( definer.scrollLeft === 0 ) { + // Firefox, old Opera + rtlScrollType = 'negative'; + } else { + // Internet Explorer, Edge + rtlScrollType = 'reverse'; + } + } + $definer.remove(); + } + + return function getScrollLeft( el ) { + var isRoot = el.window === el || + el === el.ownerDocument.body || + el === el.ownerDocument.documentElement, + scrollLeft = isRoot ? $( window ).scrollLeft() : el.scrollLeft, + // All browsers use the correct scroll type ('negative') on the root, so don't + // do any fixups when looking at the root element + direction = isRoot ? 'ltr' : $( el ).css( 'direction' ); + + if ( direction === 'rtl' ) { + if ( rtlScrollType === null ) { + test(); + } + if ( rtlScrollType === 'reverse' ) { + scrollLeft = -scrollLeft; + } else if ( rtlScrollType === 'default' ) { + scrollLeft = scrollLeft - el.scrollWidth + el.clientWidth; + } + } + + return scrollLeft; + }; +}() ); + /** * Get scrollable object parent * @@ -1117,7 +1184,8 @@ OO.ui.Element.static.getRootScrollableElement = function ( el ) { */ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) { var i, val, - // props = [ 'overflow' ] doesn't work due to https://bugzilla.mozilla.org/show_bug.cgi?id=889091 + // Browsers do not correctly return the computed value of 'overflow' when 'overflow-x' and + // 'overflow-y' have different values, so we need to check the separate properties. props = [ 'overflow-x', 'overflow-y' ], $parent = $( el ).parent(); @@ -1132,6 +1200,11 @@ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) i = props.length; while ( i-- ) { val = $parent.css( props[ i ] ); + // We assume that elements with 'overflow' (in any direction) set to 'hidden' will never be + // scrolled in that direction, but they can actually be scrolled programatically. The user can + // unintentionally perform a scroll in such case even if the application doesn't scroll + // programatically, e.g. when jumping to an anchor, or when using built-in find functionality. + // This could cause funny issues... if ( val === 'auto' || val === 'scroll' ) { return $parent[ 0 ]; } @@ -3818,6 +3891,11 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) { if ( this.input instanceof OO.ui.InputWidget ) { if ( this.input.getInputId() ) { this.$element.attr( 'for', this.input.getInputId() ); + } else { + this.$label.on( 'click', function () { + this.fieldWidget.focus(); + return false; + }.bind( this ) ); } } this.$element.addClass( 'oo-ui-labelWidget' ); @@ -3971,8 +4049,8 @@ OO.ui.mixin.PendingElement.prototype.popPending = function () { }; /** - * Element that will stick under a specified container, even when it is inserted elsewhere in the - * document (for example, in a OO.ui.Window's $overlay). + * Element that will stick adjacent to a specified container, even when it is inserted elsewhere + * in the document (for example, in an OO.ui.Window's $overlay). * * The elements's position is automatically calculated and maintained when window is resized or the * page is scrolled. If you reposition the container manually, you have to call #position to make @@ -3988,7 +4066,19 @@ OO.ui.mixin.PendingElement.prototype.popPending = function () { * @constructor * @param {Object} [config] Configuration options * @cfg {jQuery} [$floatable] Node to position, assigned to #$floatable, omit to use #$element - * @cfg {jQuery} [$floatableContainer] Node to position below + * @cfg {jQuery} [$floatableContainer] Node to position adjacent to + * @cfg {string} [verticalPosition='below'] Where to position $floatable vertically: + * 'below': Directly below $floatableContainer, aligning f's top edge with fC's bottom edge + * 'above': Directly above $floatableContainer, aligning f's bottom edge with fC's top edge + * 'top': Align the top edge with $floatableContainer's top edge + * 'bottom': Align the bottom edge with $floatableContainer's bottom edge + * 'center': Vertically align the center with $floatableContainer's center + * @cfg {string} [horizontalPosition='start'] Where to position $floatable horizontally: + * 'before': Directly before $floatableContainer, aligning f's end edge with fC's start edge + * 'after': Directly after $floatableContainer, algining f's start edge with fC's end edge + * '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 */ OO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) { // Configuration initialization @@ -4005,6 +4095,8 @@ OO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) { // Initialization this.setFloatableContainer( config.$floatableContainer ); this.setFloatableElement( config.$floatable || this.$element ); + this.setVerticalPosition( config.verticalPosition || 'below' ); + this.setHorizontalPosition( config.horizontalPosition || 'start' ); }; /* Methods */ @@ -4029,7 +4121,7 @@ OO.ui.mixin.FloatableElement.prototype.setFloatableElement = function ( $floatab /** * Set floatable container. * - * The element will be always positioned under the specified container. + * The element will be positioned relative to the specified container. * * @param {jQuery|null} $floatableContainer Container to keep visible, or null to unset */ @@ -4040,6 +4132,36 @@ OO.ui.mixin.FloatableElement.prototype.setFloatableContainer = function ( $float } }; +/** + * Change how the element is positioned vertically. + * + * @param {string} position 'below', 'above', 'top', 'bottom' or 'center' + */ +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(); + } +}; + +/** + * Change how the element is positioned horizontally. + * + * @param {string} position 'before', 'after', 'start', 'end' or 'center' + */ +OO.ui.mixin.FloatableElement.prototype.setHorizontalPosition = function ( position ) { + 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(); + } +}; + /** * Toggle positioning. * @@ -4057,11 +4179,20 @@ OO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positionin positioning = positioning === undefined ? !this.positioning : !!positioning; + if ( positioning && !this.warnedUnattached && !this.isElementAttached() ) { + OO.ui.warnDeprecation( 'FloatableElement#togglePositioning: Before calling this method, the element must be attached to the DOM.' ); + this.warnedUnattached = true; + } + if ( this.positioning !== positioning ) { this.positioning = positioning; + this.needsCustomPosition = + this.verticalPostion !== 'below' || + this.horizontalPosition !== 'start' || + !OO.ui.contains( this.$floatableContainer[ 0 ], this.$floatable[ 0 ] ); + closestScrollableOfContainer = OO.ui.Element.static.getClosestScrollableContainer( this.$floatableContainer[ 0 ] ); - this.needsCustomPosition = !OO.ui.contains( this.$floatableContainer[ 0 ], this.$floatable[ 0 ] ); // If the scrollable is the root, we have to listen to scroll events // on the window because of browser inconsistencies. if ( $( closestScrollableOfContainer ).is( 'html, body' ) ) { @@ -4104,10 +4235,9 @@ OO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positionin * @return {boolean} */ OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element, $container ) { - var elemRect, contRect, - leftEdgeInBounds = false, - bottomEdgeInBounds = false, - rightEdgeInBounds = false; + var elemRect, contRect, topEdgeInBounds, bottomEdgeInBounds, leftEdgeInBounds, rightEdgeInBounds, + startEdgeInBounds, endEdgeInBounds, + direction = $element.css( 'direction' ); elemRect = $element[ 0 ].getBoundingClientRect(); if ( $container[ 0 ] === window ) { @@ -4121,20 +4251,35 @@ OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element contRect = $container[ 0 ].getBoundingClientRect(); } - // For completeness, if we still cared about topEdgeInBounds, that'd be: - // elemRect.top >= contRect.top && elemRect.top <= contRect.bottom - if ( elemRect.left >= contRect.left && elemRect.left <= contRect.right ) { - leftEdgeInBounds = true; + topEdgeInBounds = elemRect.top >= contRect.top && elemRect.top <= contRect.bottom; + bottomEdgeInBounds = elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom; + leftEdgeInBounds = elemRect.left >= contRect.left && elemRect.left <= contRect.right; + rightEdgeInBounds = elemRect.right >= contRect.left && elemRect.right <= contRect.right; + if ( direction === 'rtl' ) { + startEdgeInBounds = rightEdgeInBounds; + endEdgeInBounds = leftEdgeInBounds; + } else { + startEdgeInBounds = leftEdgeInBounds; + endEdgeInBounds = rightEdgeInBounds; } - if ( elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom ) { - bottomEdgeInBounds = true; + + if ( this.verticalPosition === 'below' && !bottomEdgeInBounds ) { + return false; } - if ( elemRect.right >= contRect.left && elemRect.right <= contRect.right ) { - rightEdgeInBounds = true; + if ( this.verticalPosition === 'above' && !topEdgeInBounds ) { + return false; + } + if ( this.horizontalPosition === 'before' && !startEdgeInBounds ) { + return false; + } + if ( this.horizontalPosition === 'after' && !endEdgeInBounds ) { + return false; } - // We only care that any part of the bottom edge is visible - return bottomEdgeInBounds && ( leftEdgeInBounds || rightEdgeInBounds ); + // The other positioning values are all about being inside the container, + // so in those cases all we care about is that any part of the container is visible. + return elemRect.top <= contRect.bottom && elemRect.bottom >= contRect.top && + elemRect.left <= contRect.right && elemRect.right >= contRect.left; }; /** @@ -4145,7 +4290,9 @@ OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element * @chainable */ OO.ui.mixin.FloatableElement.prototype.position = function () { - var pos; + var containerPos, direction, $offsetParent, isBody, scrollableX, scrollableY, + horizScrollbarHeight, vertScrollbarWidth, scrollTop, scrollLeft, + newPos = { top: '', left: '', bottom: '', right: '' }; if ( !this.positioning ) { return this; @@ -4162,16 +4309,106 @@ OO.ui.mixin.FloatableElement.prototype.position = function () { return; } - pos = OO.ui.Element.static.getRelativePosition( this.$floatableContainer, this.$floatable.offsetParent() ); - // Position under container - pos.top += this.$floatableContainer.height(); - // In LTR, we position from the left, and pos.left is already set - // In RTL, we position from the right instead. - if ( this.$floatableContainer.css( 'direction' ) === 'rtl' ) { - pos.right = this.$floatable.offsetParent().width() - pos.left - this.$floatableContainer.outerWidth(); - delete pos.left; + 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 + $offsetParent = $( $offsetParent[ 0 ].ownerDocument.body ); + } + isBody = $offsetParent.is( 'body' ); + scrollableX = $offsetParent.css( 'overflow-x' ) === 'scroll' || $offsetParent.css( 'overflow-x' ) === 'auto'; + scrollableY = $offsetParent.css( 'overflow-y' ) === 'scroll' || $offsetParent.css( 'overflow-y' ) === 'auto'; + + vertScrollbarWidth = $offsetParent.innerWidth() - $offsetParent.prop( 'clientWidth' ); + horizScrollbarHeight = $offsetParent.innerHeight() - $offsetParent.prop( 'clientHeight' ); + // We don't need to compute and add scrollTop and scrollLeft if the scrollable container is the body, + // or if it isn't scrollable + scrollTop = scrollableY && !isBody ? $offsetParent.scrollTop() : 0; + scrollLeft = scrollableX && !isBody ? OO.ui.Element.static.getScrollLeft( $offsetParent[ 0 ] ) : 0; + + // Avoid passing the to getRelativePosition(), because it won't return what we expect + // if the has a margin + containerPos = isBody ? + this.$floatableContainer.offset() : + OO.ui.Element.static.getRelativePosition( this.$floatableContainer, $offsetParent ); + containerPos.bottom = containerPos.top + this.$floatableContainer.outerHeight(); + containerPos.right = containerPos.left + this.$floatableContainer.outerWidth(); + containerPos.start = direction === 'rtl' ? containerPos.right : containerPos.left; + containerPos.end = direction === 'rtl' ? containerPos.left : containerPos.right; + + if ( this.verticalPosition === 'below' ) { + newPos.top = containerPos.bottom; + } else if ( this.verticalPosition === 'above' ) { + newPos.bottom = $offsetParent.outerHeight() - containerPos.top; + } else if ( this.verticalPosition === 'top' ) { + newPos.top = containerPos.top; + } else if ( this.verticalPosition === 'bottom' ) { + newPos.bottom = $offsetParent.outerHeight() - containerPos.bottom; + } else if ( this.verticalPosition === 'center' ) { + newPos.top = containerPos.top + + ( this.$floatableContainer.height() - this.$floatable.height() ) / 2; + } + + if ( this.horizontalPosition === 'before' ) { + newPos.end = containerPos.start; + } else if ( this.horizontalPosition === 'after' ) { + newPos.start = containerPos.end; + } else if ( this.horizontalPosition === 'start' ) { + newPos.start = containerPos.start; + } else if ( this.horizontalPosition === 'end' ) { + newPos.end = containerPos.end; + } else if ( this.horizontalPosition === 'center' ) { + newPos.left = containerPos.left + + ( this.$floatableContainer.width() - this.$floatable.width() ) / 2; + } + + if ( newPos.start !== undefined ) { + if ( direction === 'rtl' ) { + newPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.start; + } else { + newPos.left = newPos.start; + } + delete newPos.start; + } + if ( newPos.end !== undefined ) { + if ( direction === 'rtl' ) { + newPos.left = newPos.end; + } else { + newPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.end; + } + delete newPos.end; + } + + // Account for scroll position + if ( newPos.top !== '' ) { + newPos.top += scrollTop; + } + if ( newPos.bottom !== '' ) { + newPos.bottom -= scrollTop; + } + if ( newPos.left !== '' ) { + newPos.left += scrollLeft; + } + if ( newPos.right !== '' ) { + newPos.right -= scrollLeft; } - this.$floatable.css( pos ); + + // Account for scrollbar gutter + if ( newPos.bottom !== '' ) { + newPos.bottom -= horizScrollbarHeight; + } + if ( direction === 'rtl' ) { + if ( newPos.left !== '' ) { + newPos.left -= vertScrollbarWidth; + } + } else { + if ( newPos.right !== '' ) { + newPos.right -= vertScrollbarWidth; + } + } + + 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 @@ -4281,6 +4518,11 @@ OO.ui.mixin.ClippableElement.prototype.setClippableContainer = function ( $clipp OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) { clipping = clipping === undefined ? !this.clipping : !!clipping; + if ( clipping && !this.warnedUnattached && !this.isElementAttached() ) { + OO.ui.warnDeprecation( 'ClippableElement#toggleClipping: Before calling this method, the element must be attached to the DOM.' ); + this.warnedUnattached = true; + } + if ( this.clipping !== clipping ) { this.clipping = clipping; if ( clipping ) { @@ -4476,6 +4718,8 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () { * By default, each popup has an anchor that points toward its origin. * Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples. * + * Unlike most widgets, PopupWidget is initially hidden and must be shown by calling #toggle. + * * @example * // A popup widget. * var popup = new OO.ui.PopupWidget( { @@ -4717,6 +4961,14 @@ OO.ui.PopupWidget.prototype.hasAnchor = function () { }; /** + * Toggle visibility of the popup. The popup is initially hidden and must be shown by calling + * `.toggle( true )` after its #$element is attached to the DOM. + * + * Do not show the popup while it is not attached to the DOM. The calculations required to display + * it in the right place and with the right dimensions only work correctly while it is attached. + * Side-effects may include broken interface and exceptions being thrown. This wasn't always + * strictly enforced, so currently it only generates a warning in the browser console. + * * @inheritdoc */ OO.ui.PopupWidget.prototype.toggle = function ( show ) { @@ -4725,6 +4977,11 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) { change = show !== this.isVisible(); + if ( show && !this.warnedUnattached && !this.isElementAttached() ) { + OO.ui.warnDeprecation( 'PopupWidget#toggle: Before calling this method, the popup must be attached to the DOM.' ); + this.warnedUnattached = true; + } + // Parent method OO.ui.PopupWidget.parent.prototype.toggle.call( this, show ); @@ -6362,6 +6619,8 @@ OO.ui.MenuSectionOptionWidget.static.highlightable = false; * - Down-arrow key: highlight the next menu option * - Esc key: hide the menu * + * Unlike most widgets, MenuSelectWidget is initially hidden and must be shown by calling #toggle. + * * Please see the [OOjs UI documentation on MediaWiki][1] for more information. * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options * @@ -6381,6 +6640,7 @@ OO.ui.MenuSectionOptionWidget.static.highlightable = false; * that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks * that button, unless the button (or its parent widget) is passed in here. * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu. + * @cfg {boolean} [hideOnChoose=true] Hide the menu when the user chooses an option. * @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input */ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) { @@ -6395,6 +6655,7 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) { // Properties this.autoHide = config.autoHide === undefined || !!config.autoHide; + this.hideOnChoose = config.hideOnChoose === undefined || !!config.hideOnChoose; this.filterFromInput = !!config.filterFromInput; this.$input = config.$input ? config.$input : config.input ? config.input.$input : null; this.$widget = config.widget ? config.widget.$element : null; @@ -6548,7 +6809,7 @@ OO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () { /** * Choose an item. * - * When a user chooses an item, the menu is closed. + * When a user chooses an item, the menu is closed, unless the hideOnChoose config option is set to false. * * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method. @@ -6558,7 +6819,9 @@ OO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () { */ OO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) { OO.ui.MenuSelectWidget.parent.prototype.chooseItem.call( this, item ); - this.toggle( false ); + if ( this.hideOnChoose ) { + this.toggle( false ); + } return this; }; @@ -6602,6 +6865,14 @@ OO.ui.MenuSelectWidget.prototype.clearItems = function () { }; /** + * Toggle visibility of the menu. The menu is initially hidden and must be shown by calling + * `.toggle( true )` after its #$element is attached to the DOM. + * + * Do not show the menu while it is not attached to the DOM. The calculations required to display + * it in the right place and with the right dimensions only work correctly while it is attached. + * Side-effects may include broken interface and exceptions being thrown. This wasn't always + * strictly enforced, so currently it only generates a warning in the browser console. + * * @inheritdoc */ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) { @@ -6610,6 +6881,11 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) { visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length; change = visible !== this.isVisible(); + if ( visible && !this.warnedUnattached && !this.isElementAttached() ) { + OO.ui.warnDeprecation( 'MenuSelectWidget#toggle: Before calling this method, the menu must be attached to the DOM.' ); + this.warnedUnattached = true; + } + // Parent method OO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible ); @@ -10077,6 +10353,7 @@ OO.ui.ComboBoxInputWidget.prototype.setOptions = function ( options ) { * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a "help" icon will appear * in the upper-right corner of the rendered field; clicking it will display the text in a popup. * For important messages, you are advised to use `notices`, as they are always shown. + * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given. * * @throws {Error} An error is thrown if no widget is specified */ @@ -10115,6 +10392,7 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) { this.align = null; if ( config.help ) { this.popupButtonWidget = new OO.ui.PopupButtonWidget( { + $overlay: config.$overlay, popup: { padded: true }, @@ -10139,6 +10417,11 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) { if ( fieldWidget.constructor.static.supportsSimpleLabel ) { if ( this.fieldWidget.getInputId() ) { this.$label.attr( 'for', this.fieldWidget.getInputId() ); + } else { + this.$label.on( 'click', function () { + this.fieldWidget.focus(); + return false; + }.bind( this ) ); } } this.$element @@ -10419,6 +10702,7 @@ OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout ); * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a "help" icon will appear * in the upper-right corner of the rendered field; clicking it will display the text in a popup. * For important messages, you are advised to use `notices`, as they are always shown. + * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given. */ OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) { // Configuration initialization @@ -10436,6 +10720,7 @@ OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) { this.$header = $( '
' ); if ( config.help ) { this.popupButtonWidget = new OO.ui.PopupButtonWidget( { + $overlay: config.$overlay, popup: { padded: true }, diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index 3989caa2f4..b39010c45b 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.2 + * OOjs UI v0.19.4 * 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-14T22:47:20Z + * Date: 2017-02-28T23:19:40Z */ ( 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 b154288d81..4d7f9d7546 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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; diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css index 5d313abffc..59de29baa2 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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; @@ -37,9 +39,6 @@ height: 2.5em; width: 1.875em; } -.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - line-height: 2.1; -} .oo-ui-toolGroup { display: inline-block; vertical-align: middle; @@ -262,10 +261,6 @@ width: 1.875em; min-width: 1.875em; } -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title, -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel { - line-height: 2; -} .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { padding-left: 0.5em; color: #222; diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars.js b/resources/lib/oojs-ui/oojs-ui-toolbars.js index e89a734fa3..777debfb6f 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.2 + * OOjs UI v0.19.4 * 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-14T22:47:20Z + * Date: 2017-02-28T23:19:40Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css index b8445e9639..a1064bb855 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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; @@ -33,7 +35,7 @@ display: inline-block; } .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable { - overflow-y: hidden; + overflow: hidden; } .oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout { width: 100%; @@ -41,19 +43,13 @@ -moz-box-sizing: border-box; box-sizing: border-box; } -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable { - overflow-y: auto; -} -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded { - padding: 2em; -} .oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget { position: absolute; top: 0; left: 0; right: 0; bottom: 3em; - overflow-y: auto; + overflow: auto; } .oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget { position: absolute; @@ -353,6 +349,8 @@ .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator, .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { position: absolute; + top: 0; + height: 100%; } .oo-ui-widget-disabled .oo-ui-selectFileWidget-info { cursor: default; @@ -483,15 +481,11 @@ border-width: 1px 0 1px 1px; } .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { - top: 0; left: 0; - height: 2.3em; margin-left: 0.3em; } .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { - top: 0; right: 0; - height: 2.3em; margin-right: 0.775em; } .oo-ui-selectFileWidget-label { @@ -621,15 +615,6 @@ background-color: #a7dcff; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); } -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important { - font-weight: bold; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon { - opacity: 0.5; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label { - color: #777; -} .oo-ui-outlineControlsWidget { height: 3em; background-color: #fff; @@ -720,6 +705,12 @@ display: block; position: relative; } +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon, +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator { + position: absolute; + top: 0; + height: 100%; +} .oo-ui-capsuleMultiselectWidget-content { position: relative; } @@ -752,10 +743,6 @@ .oo-ui-capsuleMultiselectWidget-handle:last-child { margin-right: 0; } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator, -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon { - position: absolute; -} .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input { border: 0; line-height: 1.675em; @@ -767,25 +754,45 @@ background-color: transparent; color: #000; vertical-align: middle; + /* stylelint-disable indentation */ + /* stylelint-enable indentation */ } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus { - outline: none; +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder { + color: #72777d; + opacity: 1; } -.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle { - padding-right: 2.4875em; +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-ms-input-placeholder { + color: #72777d; + opacity: 1; } -.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator { - right: 0; - top: 0; - margin: 0.775em; +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-moz-placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-moz-placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::placeholder { + color: #72777d; + opacity: 1; +} +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus { + outline: 0; } .oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle { padding-left: 2.475em; } .oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon { left: 0; - top: 0; - margin: 0.3em; + margin: 0 0.3em; +} +.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle { + padding-right: 2.4875em; +} +.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator { + right: 0; + margin: 0 0.775em; } .oo-ui-capsuleMultiselectWidget:hover .oo-ui-capsuleMultiselectWidget-handle { border-color: rgba(0, 0, 0, 0.2); @@ -836,7 +843,7 @@ cursor: text; } .oo-ui-capsuleItemWidget:focus { - outline: none; + outline: 0; border-color: #087ecc; } .oo-ui-capsuleItemWidget.oo-ui-widget-disabled { diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css index aab3b6212f..495cbfe5a7 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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; @@ -32,8 +34,13 @@ .oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement { display: inline-block; } +.oo-ui-draggableElement-handle:focus { + border-radius: 2px; + box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c; + outline: 0; +} .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable { - overflow-y: hidden; + overflow: hidden; } .oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout { width: 100%; @@ -41,19 +48,13 @@ -moz-box-sizing: border-box; box-sizing: border-box; } -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable { - overflow-y: auto; -} -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded { - padding: 2em; -} .oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget { position: absolute; top: 0; left: 0; right: 0; bottom: 3em; - overflow-y: auto; + overflow: auto; } .oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget { position: absolute; @@ -419,6 +420,8 @@ .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator, .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { position: absolute; + top: 0; + height: 100%; } .oo-ui-widget-disabled .oo-ui-selectFileWidget-info { cursor: default; @@ -550,14 +553,10 @@ } .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { left: 0; - top: 0; - height: 2.3em; margin-left: 0.5em; } .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { - top: 0; right: 0; - height: 2.3em; margin-right: 0.775em; } .oo-ui-selectFileWidget-label { @@ -603,15 +602,12 @@ .oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-label { right: 2em; } -.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget { - background-color: #eaf3ff; -} .oo-ui-selectFileWidget-dropTarget { background-color: #fff; border: 1px solid #a2a9b1; + border-radius: 2px; vertical-align: middle; overflow: hidden; - border-radius: 2px; } .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { border-radius: 2px; @@ -622,8 +618,18 @@ white-space: normal; } .oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget { - background-color: #eee; + background-color: #fff; border-style: dashed; + -webkit-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1); + -moz-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1); + transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1); +} +.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget:hover { + border-color: #72777d; +} +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget { + background-color: #eaf3ff; + color: #36c; } .oo-ui-selectFileWidget.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget, .oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget, @@ -701,15 +707,6 @@ .oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon { left: 4em; } -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important { - font-weight: bold; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon { - opacity: 0.5; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label { - color: #777; -} .oo-ui-outlineControlsWidget { height: 3em; background-color: #fff; @@ -799,6 +796,12 @@ display: block; position: relative; } +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon, +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator { + position: absolute; + top: 0; + height: 100%; +} .oo-ui-capsuleMultiselectWidget-content { position: relative; } @@ -829,56 +832,55 @@ .oo-ui-capsuleMultiselectWidget-handle:last-child { margin-right: 0; } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator, -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon { - position: absolute; +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input { + border: 0; + line-height: 1.675; + margin: 0 0 0 0.2em; + padding: 0; + font-size: inherit; + font-family: inherit; + background-color: transparent; + color: #000; + vertical-align: middle; + /* stylelint-disable indentation */ + /* stylelint-enable indentation */ } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content :-moz-placeholder { +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder { color: #72777d; opacity: 1; } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content ::-moz-placeholder { +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-ms-input-placeholder { color: #72777d; opacity: 1; } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content :-ms-input-placeholder { +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-moz-placeholder { color: #72777d; + opacity: 1; } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content ::-webkit-input-placeholder { +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-moz-placeholder { color: #72777d; + opacity: 1; } -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content :placeholder-shown { +.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::placeholder { color: #72777d; -} -.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input { - border: 0; - line-height: 1.675; - margin: 0 0 0 0.2em; - padding: 0; - font-size: inherit; - font-family: inherit; - background-color: transparent; - color: #000; - vertical-align: middle; + opacity: 1; } .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus { outline: 0; } -.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle { - padding-right: 2.4875em; -} -.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator { - right: 0; - top: 0; - margin: 0.775em; -} .oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle { padding-left: 2.475em; } .oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon { left: 0; - top: 0; - margin: 0.3em; + margin: 0 0.3em; +} +.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle { + padding-right: 2.4875em; +} +.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator { + right: 0; + margin: 0 0.775em; } .oo-ui-capsuleMultiselectWidget-popup { margin-top: -1px; @@ -918,20 +920,18 @@ display: inline-block; cursor: default; white-space: nowrap; - width: auto; - max-width: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - vertical-align: middle; + width: auto; + max-width: 100%; height: 1.7em; - line-height: 1.7; - background-color: #eee; - color: #222; margin: 0.1em; border: 1px solid #a2a9b1; border-radius: 2px; padding: 0 0.4em; + line-height: 1.7; + vertical-align: middle; } .oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label { display: inline-block; @@ -939,22 +939,23 @@ overflow: hidden; cursor: text; } -.oo-ui-capsuleItemWidget:focus { - outline: 0; - border-color: #36c; - box-shadow: inset 0 0 0 1px #36c; -} -.oo-ui-capsuleItemWidget.oo-ui-widget-disabled { - background-color: #eaecf0; - color: #72777d; - border-color: #c8ccd1; - text-shadow: 0 1px 1px #fff; -} -.oo-ui-capsuleItemWidget > .oo-ui-buttonElement { - display: none; -} .oo-ui-capsuleItemWidget.oo-ui-widget-enabled { + background-color: #f8f9fa; + color: #222; padding-right: 1.5375em; + -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms; + -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms; + transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-enabled:hover { + background-color: #fff; + color: #444; + border-color: #a2a9b1; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-enabled:focus { + border-color: #36c; + box-shadow: inset 0 0 0 1px #36c; + outline: 0; } .oo-ui-capsuleItemWidget.oo-ui-widget-enabled > .oo-ui-buttonElement { display: block; @@ -975,6 +976,15 @@ bottom: 0; height: auto; } +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled { + background-color: #eaecf0; + color: #72777d; + border-color: #c8ccd1; + text-shadow: 0 1px 1px #fff; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-buttonElement { + display: none; +} .oo-ui-searchWidget-query { position: absolute; top: 0; diff --git a/resources/lib/oojs-ui/oojs-ui-widgets.js b/resources/lib/oojs-ui/oojs-ui-widgets.js index d5a796bfdc..b89262dc83 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.2 + * OOjs UI v0.19.4 * 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-14T22:47:20Z + * Date: 2017-02-28T23:19:40Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/oojs-ui-windows-apex.css b/resources/lib/oojs-ui/oojs-ui-windows-apex.css index 310d616913..b546dd114b 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-windows-apex.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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 4b99fa651c..701c058240 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css @@ -1,13 +1,15 @@ /*! - * OOjs UI v0.19.2 + * OOjs UI v0.19.4 * 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-14T22:47:25Z + * Date: 2017-02-28T23:19:44Z */ +/* 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; } @@ -265,22 +267,22 @@ .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless:active { background-color: rgba(0, 0, 0, 0.1); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover, -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:hover, +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover { background-color: rgba(8, 126, 204, 0.05); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active, -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:active, +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active { background-color: rgba(8, 126, 204, 0.1); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label { font-weight: bold; } .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive:hover, diff --git a/resources/lib/oojs-ui/oojs-ui-windows.js b/resources/lib/oojs-ui/oojs-ui-windows.js index c842c6233b..ad3c226c9e 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.2 + * OOjs UI v0.19.4 * 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-14T22:47:20Z + * Date: 2017-02-28T23:19:40Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json b/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json index ec755a1d0c..ea2e2ecdc4 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json +++ b/resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json @@ -56,6 +56,7 @@ "rtl": "images/icons/articleRedirect-rtl.svg" } }, "searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" }, + "searchDiacritics": { "file": "images/icons/diacritic.svg" }, "searchRegularExpression": { "file": "images/icons/regular-expression.svg" }, "specialCharacter": { "file": "images/icons/specialCharacter.svg" }, "table": { "file": "images/icons/table.svg" }, diff --git a/resources/lib/oojs-ui/themes/apex/icons-interactions.json b/resources/lib/oojs-ui/themes/apex/icons-interactions.json index 449cb77667..d68e70c426 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-interactions.json +++ b/resources/lib/oojs-ui/themes/apex/icons-interactions.json @@ -20,6 +20,10 @@ } }, "clear": { "file": "images/icons/clear.svg" }, "clock": { "file": "images/icons/clock.svg" }, + "feedback": { "file": { + "ltr": "images/icons/feedback-ltr.svg", + "rtl": "images/icons/feedback-rtl.svg" + } }, "funnel": { "file": { "ltr": "images/icons/funnel-ltr.svg", "rtl": "images/icons/funnel-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg b/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg index 46cd9b0fc9..749e38ffd5 100644 --- a/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg +++ b/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png b/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png new file mode 100644 index 0000000000000000000000000000000000000000..2359b1965a73eb7abe13a4d69e167de5dd75b997 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#T8E% z#}JRsx0ejPoE=44AL`q2`zkBB#5CS;FHckqbL!GL5WB=HQTf_N4$aMNB~90ovK1q4 zY8-0*(4_fHEOUzEvYL9+@8=56Jw3B@sp^fRs(p*!JzTWpAd9!jj)S`MyruR$lu55} z>2>sMuD^V;ro2o0CBIe0ghi{od5hXb<32RX-K1DD)FILO`mf$H4^dEz#tDnm{r-UW|?X7Xu literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg b/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg new file mode 100644 index 0000000000..4565101324 --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..f49ebeb0a924b596eeee7adf9fd9cc6e187bdc30 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#W_zG z#}JRsw-*-rF*^#hfAnNl^kCt-tiaV|zT(j2ES**F8x9JZ$niXsoVDeBK)a%f>Dog| zQUdlYF-3c2uHQZ_IqCP6H)-E~zxQ!*cNeudV5@gq?7P9S-STp`rtlkXKe>qaqu{*1 zzWY~J@L&J2V#482;h!A&(MKfxH6IE4WOW%&D}B2ChtHIBo>weuq)#QreEI5S6qnT- zb*}Pb(()xQ)s)^9J%8MB + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5787bdd52d92ead0d0d09843cca4ed5ef0c7db GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#SKpv z#}JRsx0ek4m>ebA9;z=;3^{V>)UkjDR`U&;)bBNRSzovz`B-*?;k<(`?;Mu)8ZNwe z>ROY-Mv)DPcXbSQCn!Gj-Ir2k{JE}P?QrAX<$Ip~6uz^#?fTo}kwH%4_d71!U;0Pr zaI3|+4DmEUC5ssLFC1KjkF} zF#&Qj?eE4 + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..efba220b26d11e5be0811ec7acd081f7547a9f43 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#T8E% z#}JRsx0ek4m>fmgKSmm~Tx&Vk*OKsYT3j55`#=31heVd|SDkVDLzm*K&^Gmojc1vrhjQN9 z_na@?UNq*t-~s7l8Pi1XJmUzO_CncG#pd9u1qx5)p1ZQ%Wj-8iR~YPKprzT+e|JyR zk&D`2u3Gr-mR6s*C~S>^vvSLYpHchU1?Cy2Prl^ueNf@@q{z71HLjH@%b#vM^7rq9 lLuozo7god+JbAy7ZQbwgA8${{90K}}!PC{xWt~$(69Bg5ch&#^ literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg new file mode 100644 index 0000000000..14be7ff2df --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..fdbe5e1e7866990f771d744c7cf3360db4c0ce11 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#T8E% z#}JRsx0ek4m>fmgKguWY=yJ}L<-FJ?98k&da;>k2MU$wiE&BzxcL_@A8x~J)YCCnw zDS4yF>9&(;g~vs;e@v=3npydI-^tSjk5=qFDzf&!kd4wo>$VJ;O_jW>*D9RW{?#s2 zQgrt4nSzhu2k-JXvB>Xm-@NL-JamX$Noa_;i_xtxUO6Lt9TOQ1W5^%zopr0Ed8e2><{9 literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg new file mode 100644 index 0000000000..022d86d10f --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json index 21efb82e48..7cbbcedac9 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json @@ -76,6 +76,7 @@ "rtl": "images/icons/articleRedirect-rtl.svg" } }, "searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" }, + "searchDiacritics": { "file": "images/icons/diacritic.svg" }, "searchRegularExpression": { "file": "images/icons/regular-expression.svg" }, "specialCharacter": { "file": "images/icons/specialCharacter.svg" }, "table": { "file": "images/icons/table.svg" }, diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json b/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json index e040ffba71..3436446e04 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json @@ -34,6 +34,13 @@ } }, "clear": { "file": "images/icons/clear.svg" }, "clock": { "file": "images/icons/clock.svg" }, + "feedback": { + "file": { + "ltr": "images/icons/feedback-ltr.svg", + "rtl": "images/icons/feedback-rtl.svg" + }, + "variants": [ "progressive" ] + }, "funnel": { "file": { "ltr": "images/icons/funnel-ltr.svg", "rtl": "images/icons/funnel-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg index dbd98d2ab9..e5590a3451 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-progressive.svg index c5f35b0d34..ff6e102ec3 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-progressive.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-progressive.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg index 46cd9b0fc9..749e38ffd5 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb19e31b3727e82e09dc925f4be242b5643643a GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#cNL& z#}JRsx0g2Rxj0H3{a9Qsnxm|=@gs}0tyV94K!?|&4-EI5mfmo?BJ#+xL@4Vclh9PA zi8)HUe`@+@zB{V>e*e#Bv(MB#KXXz=R@SqL^-W^PFVQ#KGzA{icPnt7D + + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..eb76fd07f5d10ac1e38ac652e9d66d85f465e499 GIT binary patch literal 413 zcmV;O0b>4%P)Kkv&U7aTJH2b6=twax-#>KqzPsN+o(3Drl&&Xb6M~ zQVLr71Ua-cL`XznA0TL`k6@F9d4r&(p|xlWvKRDTPaom_AzQ*{KELyv7ijbE5tE|v zopM*B<}TpyP(4XMCN}S*PT)`8ohC2CvW|(M@!=k;NQM9_nXMKG8ZN>t&>Ddvb1JfA zN%K_$IYLONNY*6#=NSDUovow;u~$TONJT_M%N^bIgX_bIuduAyi9}Wf-9mU2G>S4` z|LlkZ>tR{TL}0niU8m{Cykcq?=m*|W7C}QVU?d0{w(na`W;ExWAzT19&@-LCvVSdD zUOu;h60i?MP%1#pWH2MaQzSkJj0k#mS4=K=v1A?yOa-A&7E9j%6q!opZnt@^&M4An zDhS=cE2dsh_J9FJ3W|ISdTc5%W^Ci8cY3YV+49D1+Jy20iu`7jNO6bc00000NkvXX Hu0mjfu+pTr literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.svg new file mode 100644 index 0000000000..fed1164a95 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.png new file mode 100644 index 0000000000000000000000000000000000000000..2359b1965a73eb7abe13a4d69e167de5dd75b997 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#T8E% z#}JRsx0ejPoE=44AL`q2`zkBB#5CS;FHckqbL!GL5WB=HQTf_N4$aMNB~90ovK1q4 zY8-0*(4_fHEOUzEvYL9+@8=56Jw3B@sp^fRs(p*!JzTWpAd9!jj)S`MyruR$lu55} z>2>sMuD^V;ro2o0CBIe0ghi{od5hXb<32RX-K1DD)FILO`mf$H4^dEz#tDnm{r-UW|?X7Xu literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.svg new file mode 100644 index 0000000000..4565101324 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..f49ebeb0a924b596eeee7adf9fd9cc6e187bdc30 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#W_zG z#}JRsw-*-rF*^#hfAnNl^kCt-tiaV|zT(j2ES**F8x9JZ$niXsoVDeBK)a%f>Dog| zQUdlYF-3c2uHQZ_IqCP6H)-E~zxQ!*cNeudV5@gq?7P9S-STp`rtlkXKe>qaqu{*1 zzWY~J@L&J2V#482;h!A&(MKfxH6IE4WOW%&D}B2ChtHIBo>weuq)#QreEI5S6qnT- zb*}Pb(()xQ)s)^9J%8MB + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..28405a8dabb53c1079e4b95c36065ee86a0dfa3f GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysAg3|FC&bmgz{fcCv~l`r?uNQxMad6Q-U4I!3D`$S;^-h4o%_1?em4K5FL{w+T*K`Xpj* z;+Ok(s{CFvvH#kB_6O^?c~2utZtCpf^5-@J>Z + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5787bdd52d92ead0d0d09843cca4ed5ef0c7db GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#SKpv z#}JRsx0ek4m>ebA9;z=;3^{V>)UkjDR`U&;)bBNRSzovz`B-*?;k<(`?;Mu)8ZNwe z>ROY-Mv)DPcXbSQCn!Gj-Ir2k{JE}P?QrAX<$Ip~6uz^#?fTo}kwH%4_d71!U;0Pr zaI3|+4DmEUC5ssLFC1KjkF} zF#&Qj?eE4 + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.png new file mode 100644 index 0000000000000000000000000000000000000000..efba220b26d11e5be0811ec7acd081f7547a9f43 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#T8E% z#}JRsx0ek4m>fmgKSmm~Tx&Vk*OKsYT3j55`#=31heVd|SDkVDLzm*K&^Gmojc1vrhjQN9 z_na@?UNq*t-~s7l8Pi1XJmUzO_CncG#pd9u1qx5)p1ZQ%Wj-8iR~YPKprzT+e|JyR zk&D`2u3Gr-mR6s*C~S>^vvSLYpHchU1?Cy2Prl^ueNf@@q{z71HLjH@%b#vM^7rq9 lLuozo7god+JbAy7ZQbwgA8${{90K}}!PC{xWt~$(69Bg5ch&#^ literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.svg new file mode 100644 index 0000000000..f4e7932a97 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.png new file mode 100644 index 0000000000000000000000000000000000000000..27bcc2d020094e70aaf9870efce875c96a18fdd3 GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM%)r37VBOysAg3|FC&bmgz{e={jB(l-lgv{P zhJN~aqqH*&4F3(&&Kjqm21*&HA(LlJGQcX+Peas)hOPpsfpUQ=p^A;t&gy1fvX9>n zG|e~_B6tSK)(X91l6ndx0v7CV(Ub%_Myn*qFPP!?9i?;6q^~ggT0h*eYRS@l>XRZX zHJCG#-~9a2K0i&6WA{AWsPAlkWw#>MFZ>78RpaU67$PCL^`JXblL3S4!Szjy)$hCZ z?)fbr;H+{ZVx_Uy!kFkwo^j#v;@d>KynL=P{D1LXs8;A| + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..fdbe5e1e7866990f771d744c7cf3360db4c0ce11 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-#T8E% z#}JRsx0ek4m>fmgKguWY=yJ}L<-FJ?98k&da;>k2MU$wiE&BzxcL_@A8x~J)YCCnw zDS4yF>9&(;g~vs;e@v=3npydI-^tSjk5=qFDzf&!kd4wo>$VJ;O_jW>*D9RW{?#s2 zQgrt4nSzhu2k-JXvB>Xm-@NL-JamX$Noa_;i_xtxUO6Lt9TOQ1W5^%zopr0Ed8e2><{9 literal 0 HcmV?d00001 diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.svg new file mode 100644 index 0000000000..022d86d10f --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.svg @@ -0,0 +1,4 @@ + + + + -- 2.20.1