VolkerE has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/340443 )

Change subject: Update OOjs UI to v0.19.4
......................................................................

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
---
M composer.json
M resources/lib/oojs-ui/i18n/bqi.json
M resources/lib/oojs-ui/i18n/br.json
M resources/lib/oojs-ui/i18n/mg.json
M resources/lib/oojs-ui/i18n/nn.json
M resources/lib/oojs-ui/i18n/pnb.json
M resources/lib/oojs-ui/i18n/yi.json
M resources/lib/oojs-ui/oojs-ui-apex.js
M resources/lib/oojs-ui/oojs-ui-core-apex.css
M resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
M resources/lib/oojs-ui/oojs-ui-core.js
M resources/lib/oojs-ui/oojs-ui-mediawiki.js
M resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
M resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
M resources/lib/oojs-ui/oojs-ui-toolbars.js
M resources/lib/oojs-ui/oojs-ui-widgets-apex.css
M resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
M resources/lib/oojs-ui/oojs-ui-widgets.js
M resources/lib/oojs-ui/oojs-ui-windows-apex.css
M resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
M resources/lib/oojs-ui/oojs-ui-windows.js
M resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
M resources/lib/oojs-ui/themes/apex/icons-interactions.json
M resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg
A resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png
A resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.svg
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png
A resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg
M resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
M resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json
M resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg
M 
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-progressive.svg
M resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.svg
A 
resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.png
A 
resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.svg
A 
resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.png
A 
resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.svg
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.png
A resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.svg
57 files changed, 764 insertions(+), 274 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/43/340443/1

diff --git a/composer.json b/composer.json
index 3520dc3..bc0ce17 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 8b85a20..a84374a 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 83af863..cbfcab0 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 af97d17..722b3e2 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 c8fba3d..e3f3e11 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 8bd4be8..386871c 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 f206a72..84048e7 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 2307413..541462f 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 524c16b..0818782 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 @@
   position: relative;
 }
 .oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
+  overflow: auto;
   -webkit-transform: translateZ(0);
           transform: translateZ(0);
 }
@@ -650,7 +654,6 @@
 }
 .oo-ui-popupWidget {
   position: absolute;
-  left: 0;
 }
 .oo-ui-popupWidget-popup {
   position: relative;
@@ -665,7 +668,6 @@
   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 @@
 .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 @@
   -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 @@
      -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 @@
 .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 f3b3fce..f468d17 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;
 }
@@ -63,9 +65,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;
@@ -180,19 +179,27 @@
   padding-left: 2.4em;
 }
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  padding: 0.546875em 1em;
-  min-height: 2.5em;
-  min-width: 3.125em;
-  border-radius: 2px;
   position: relative;
+  min-height: 2.5em;
+  border-radius: 2px;
+  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 @@
   position: relative;
 }
 .oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
+  overflow: auto;
   -webkit-transform: translateZ(0);
           transform: translateZ(0);
 }
@@ -654,7 +661,7 @@
   margin-right: 0;
 }
 .oo-ui-horizontalLayout > .oo-ui-layout {
-  margin-bottom: 0;
+  margin-top: 0;
 }
 .oo-ui-optionWidget {
   position: relative;
@@ -806,7 +813,6 @@
 }
 .oo-ui-popupWidget {
   position: absolute;
-  left: 0;
 }
 .oo-ui-popupWidget-popup {
   position: relative;
@@ -821,7 +827,6 @@
   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 @@
      -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 @@
   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 @@
   -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 @@
   border-color: #c8ccd1;
   box-shadow: inset 0 0 0 1px #c8ccd1;
 }
+.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 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 input::-moz-placeholder,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-moz-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.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 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 :-moz-placeholder {
-  color: #72777d;
-  opacity: 1;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled ::-moz-placeholder {
-  color: #72777d;
-  opacity: 1;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled :-ms-input-placeholder {
-  color: #72777d;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled ::-webkit-input-placeholder {
-  color: #72777d;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled :placeholder-shown {
-  color: #72777d;
 }
 .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 @@
 }
 .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 @@
 }
 .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 @@
      -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 @@
   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 @@
 .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 @@
   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 e327e5f..9eb8716 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 ) {
 
@@ -1073,6 +1073,73 @@
 };
 
 /**
+ * Get the number of pixels that an element's content is scrolled to the left.
+ *
+ * Adapted from <https://github.com/othree/jquery.rtl-scroll-type>.
+ * Original code copyright 2012 Wei-Ko Kao, licensed under the MIT License.
+ *
+ * This function smooths out browser inconsistencies (nicely described in the 
README at
+ * <https://github.com/othree/jquery.rtl-scroll-type>) 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 = $( '<div dir="rtl" style="font-size: 14px; 
width: 1px; height: 1px; position: absolute; top: -1000px; overflow: 
scroll">A</div>' ),
+                       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
  *
  * documentElement can't be used to get or set the scrollTop
@@ -1117,7 +1184,8 @@
  */
 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 @@
                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 @@
        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 @@
 };
 
 /**
- * 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 @@
  * @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 @@
        // Initialization
        this.setFloatableContainer( config.$floatableContainer );
        this.setFloatableElement( config.$floatable || this.$element );
+       this.setVerticalPosition( config.verticalPosition || 'below' );
+       this.setHorizontalPosition( config.horizontalPosition || 'start' );
 };
 
 /* Methods */
@@ -4029,12 +4121,42 @@
 /**
  * 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
  */
 OO.ui.mixin.FloatableElement.prototype.setFloatableContainer = function ( 
$floatableContainer ) {
        this.$floatableContainer = $floatableContainer;
+       if ( this.$floatable ) {
+               this.position();
+       }
+};
+
+/**
+ * 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();
        }
@@ -4057,11 +4179,20 @@
 
        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 @@
  * @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 @@
                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;
-       }
-       if ( elemRect.bottom >= contRect.top && elemRect.bottom <= 
contRect.bottom ) {
-               bottomEdgeInBounds = true;
-       }
-       if ( elemRect.right >= contRect.left && elemRect.right <= 
contRect.right ) {
-               rightEdgeInBounds = 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;
        }
 
-       // We only care that any part of the bottom edge is visible
-       return bottomEdgeInBounds && ( leftEdgeInBounds || rightEdgeInBounds );
+       if ( this.verticalPosition === 'below' && !bottomEdgeInBounds ) {
+               return false;
+       }
+       if ( this.verticalPosition === 'above' && !topEdgeInBounds ) {
+               return false;
+       }
+       if ( this.horizontalPosition === 'before' && !startEdgeInBounds ) {
+               return false;
+       }
+       if ( this.horizontalPosition === 'after' && !endEdgeInBounds ) {
+               return false;
+       }
+
+       // 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 @@
  * @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 @@
                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
+               // <html> element, but they do work on the <body>
+               $offsetParent = $( $offsetParent[ 0 ].ownerDocument.body );
        }
-       this.$floatable.css( pos );
+       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 <body> to getRelativePosition(), because it won't 
return what we expect
+       // if the <body> 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;
+       }
+
+       // 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
@@ -4280,6 +4517,11 @@
  */
 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;
@@ -4475,6 +4717,8 @@
  * PopupWidget is a container for content. The popup is overlaid and 
positioned absolutely.
  * 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.
@@ -4717,6 +4961,14 @@
 };
 
 /**
+ * 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 ) {
@@ -4724,6 +4976,11 @@
        show = show === undefined ? !this.isVisible() : !!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 @@
  * - 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 @@
  *  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 @@
 
        // 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 @@
 /**
  * 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.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 @@
 };
 
 /**
+ * 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 ) {
@@ -6609,6 +6880,11 @@
 
        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 @@
  * @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 @@
        this.align = null;
        if ( config.help ) {
                this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+                       $overlay: config.$overlay,
                        popup: {
                                padded: true
                        },
@@ -10139,6 +10417,11 @@
        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 @@
  * @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 @@
        this.$header = $( '<div>' );
        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 3989caa..b39010c 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 b154288..4d7f9d7 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 5d313ab..59de29b 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;
@@ -36,9 +38,6 @@
 .oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle 
.oo-ui-iconElement-icon {
   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;
@@ -261,10 +260,6 @@
   height: 2.5em;
   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;
diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars.js 
b/resources/lib/oojs-ui/oojs-ui-toolbars.js
index e89a734..777debf 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 b8445e9..a1064bb 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::-webkit-input-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content > input:-ms-input-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:-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: none;
-}
-.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;
+  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 aab3b62..495cbfe 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,
@@ -700,15 +706,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;
@@ -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,27 +832,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 :-moz-placeholder {
-  color: #72777d;
-  opacity: 1;
-}
-.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content ::-moz-placeholder {
-  color: #72777d;
-  opacity: 1;
-}
-.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content :-ms-input-placeholder {
-  color: #72777d;
-}
-.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content ::-webkit-input-placeholder {
-  color: #72777d;
-}
-.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content :placeholder-shown {
-  color: #72777d;
-}
 .oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content > input {
   border: 0;
   line-height: 1.675;
@@ -860,25 +842,45 @@
   background-color: transparent;
   color: #000;
   vertical-align: middle;
+  /* stylelint-disable indentation */
+  /* stylelint-enable indentation */
+}
+.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-capsuleMultiselectWidget-handle > 
.oo-ui-capsuleMultiselectWidget-content > input:-ms-input-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:-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-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;
+.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;
-}
-.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 {
-  padding-right: 1.5375em;
+  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 d5a796b..b89262d 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 310d616..b546dd1 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 4b99fa6..701c058 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 c842c62..ad3c226 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 ec755a1..ea2e2ec 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 449cb77..d68e70c 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 46cd9b0..749e38f 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 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
-    <g id="regular-expression">
+    <g id="case-sensitive">
         <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 
2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
         <path id="lower-case" d="M18.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 
0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 
2.134.662.545.445.818 1.12.818 
2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.336.87 1.008.87.48 0 .865-.137 
1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
     </g>
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 0000000..2359b19
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.png
Binary files differ
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 0000000..4565101
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/diacritic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
+    <g id="diacritic">
+      <path id="letter-a" d="M13.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 
0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 
2.134.66.546.446.82 1.12.82 
2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.337.87 1.01.87.48 0 .864-.138 
1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 
1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 
0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61
 1.228-.61.203 0 
.406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 
0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 
.75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 
3.107 0 0 1-.678-.373z"/>
+    </g>
+</svg>
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 0000000..f49ebeb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png
Binary files differ
diff --git 
a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg 
b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg
new file mode 100644
index 0000000..d32e478
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#FFFFFF">
+    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 
1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 
3.182h3.224z"/>
+</g></svg>
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 0000000..ac5787b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.svg 
b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.svg
new file mode 100644
index 0000000..0fdeed9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
+    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 
1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 
3.182h3.224z"/>
+</svg>
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 0000000..efba220
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png
Binary files differ
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 0000000..14be7ff
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#FFFFFF">
+    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 
1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 
7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</g></svg>
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 0000000..fdbe5e1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.png
Binary files differ
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 0000000..022d86d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
+    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 
1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 
7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</svg>
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 21efb82..7cbbced 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 e040ffb..3436446 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 dbd98d2..e5590a3 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 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#fff">
-    <g id="regular-expression">
+    <g id="case-sensitive">
         <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 
2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
         <path id="lower-case" d="M18.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 
0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 
2.134.662.545.445.818 1.12.818 
2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.336.87 1.008.87.48 0 .865-.137 
1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
     </g>
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 c5f35b0..ff6e102 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 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#36c">
-    <g id="regular-expression">
+    <g id="case-sensitive">
         <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 
2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
         <path id="lower-case" d="M18.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 
0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 
2.134.662.545.445.818 1.12.818 
2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.336.87 1.008.87.48 0 .865-.137 
1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
     </g>
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 46cd9b0..749e38f 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 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
-    <g id="regular-expression">
+    <g id="case-sensitive">
         <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 
2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
         <path id="lower-case" d="M18.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 
0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 
2.134.662.545.445.818 1.12.818 
2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.336.87 1.008.87.48 0 .865-.137 
1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
     </g>
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 0000000..7bb19e3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.png
Binary files differ
diff --git 
a/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.svg 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.svg
new file mode 100644
index 0000000..b19dd0d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-invert.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#fff">
+    <g id="diacritic">
+      <path id="letter-a" d="M13.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 
0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 
2.134.66.546.446.82 1.12.82 
2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.337.87 1.01.87.48 0 .864-.138 
1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 
1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 
0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61
 1.228-.61.203 0 
.406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 
0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 
.75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 
3.107 0 0 1-.678-.373z"/>
+    </g>
+</g></svg>
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 0000000..eb76fd0
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.png
Binary files differ
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 0000000..fed1164
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic-progressive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#36c">
+    <g id="diacritic">
+      <path id="letter-a" d="M13.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 
0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 
2.134.66.546.446.82 1.12.82 
2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.337.87 1.01.87.48 0 .864-.138 
1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 
1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 
0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61
 1.228-.61.203 0 
.406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 
0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 
.75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 
3.107 0 0 1-.678-.373z"/>
+    </g>
+</g></svg>
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 0000000..2359b19
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.png
Binary files differ
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 0000000..4565101
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/diacritic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
+    <g id="diacritic">
+      <path id="letter-a" d="M13.55 
17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 
0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 
0-.808.283-1.403.846-1.784.568-.386 1.193-.607 
2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 
0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 
2.134.66.546.446.82 1.12.82 
2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912
 0 .58.337.87 1.01.87.48 0 .864-.138 
1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+      <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 
1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 
0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61
 1.228-.61.203 0 
.406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 
0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 
.75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 
3.107 0 0 1-.678-.373z"/>
+    </g>
+</svg>
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 0000000..f49ebeb
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.png
Binary files differ
diff --git 
a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.svg 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.svg
new file mode 100644
index 0000000..8ed4be9
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#fff">
+    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 
1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 
3.182h3.224z"/>
+</g></svg>
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 0000000..28405a8
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.png
Binary files differ
diff --git 
a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.svg
 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.svg
new file mode 100644
index 0000000..49425d0
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr-progressive.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#36c">
+    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 
1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 
3.182h3.224z"/>
+</g></svg>
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 0000000..ac5787b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.png
Binary files differ
diff --git 
a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.svg 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.svg
new file mode 100644
index 0000000..0fdeed9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
+    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 
1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 
3.182h3.224z"/>
+</svg>
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 0000000..efba220
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.png
Binary files differ
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 0000000..f4e7932
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#fff">
+    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 
1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 
7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</g></svg>
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 0000000..27bcc2d
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.png
Binary files differ
diff --git 
a/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.svg
 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.svg
new file mode 100644
index 0000000..413ea34
--- /dev/null
+++ 
b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl-progressive.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24"><g fill="#36c">
+    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 
1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 
7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</g></svg>
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 0000000..fdbe5e1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.png
Binary files differ
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 0000000..022d86d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/feedback-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; width="24" height="24" viewBox="0 0 24 
24">
+    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 
1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 
7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</svg>

-- 
To view, visit https://gerrit.wikimedia.org/r/340443
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifa1c6cb355a0c4f5073c93e37939cfc2f6653c81
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: VolkerE <volke...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to