Update OOUI to v0.30.4
Release notes: https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/History.md;v0.30.4 Bug: T92026 Bug: T145674 Bug: T206729 Bug: T213884 Bug: T216780 Bug: T217014 Bug: T217213 Bug: T217381 Bug: T217790 Depends-On: Id50f068908accd022c7847c40795286c32199b4e Change-Id: Id50f068908accd022c7847c40795286c32199b4a
|
|
@ -68,7 +68,7 @@ production.
|
|||
* Added jakub-onderka/php-console-highlighter 0.3.2 explicitly (dev-only).
|
||||
|
||||
==== Changed external libraries ====
|
||||
* Updated OOUI from v0.29.2 to v0.30.3.
|
||||
* Updated OOUI from v0.29.2 to v0.30.4.
|
||||
* Updated OOjs Router from pre-release to v0.2.0.
|
||||
* Updated moment from v2.19.3 to v2.24.0.
|
||||
* Updated wikimedia/xmp-reader from 0.6.0 to 0.6.2.
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
"ext-xml": "*",
|
||||
"guzzlehttp/guzzle": "6.3.3",
|
||||
"liuggio/statsd-php-client": "1.0.18",
|
||||
"oojs/oojs-ui": "0.30.3",
|
||||
"oojs/oojs-ui": "0.30.4",
|
||||
"pear/mail": "1.4.1",
|
||||
"pear/mail_mime": "1.10.2",
|
||||
"pear/net_smtp": "1.8.1",
|
||||
|
|
|
|||
|
|
@ -133,8 +133,8 @@ oojs-router:
|
|||
|
||||
ooui:
|
||||
type: tar
|
||||
src: https://registry.npmjs.org/oojs-ui/-/oojs-ui-0.30.3.tgz
|
||||
integrity: sha384-lKv5WHjcSDfly2Vd2u9JJErkfo+1yFi/+pfFL0bmOu3hKpcZQmaLvu6gmhkzH5WN
|
||||
src: https://registry.npmjs.org/oojs-ui/-/oojs-ui-0.30.4.tgz
|
||||
integrity: sha384-uacCh/In2B0iX2dVwS3JEBDYWPKQ8xNx+dfP7eSwAj4aPugNhmxufjIOekw7cgJZ
|
||||
dest:
|
||||
# Main stuff
|
||||
package/dist/oojs-ui-core.js{,.map.json}:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,45 @@
|
|||
# OOUI Release History
|
||||
## v0.30.4 / 2019-03-06
|
||||
### Deprecations
|
||||
* [DEPRECATING CHANGE] SelectWidget: Rename '-depressed' to '-unpressed' (Ed Sanders)
|
||||
* [DEPRECATING CHANGE] icons: Deprecate 'web' from 'editing-citation' (Volker E.)
|
||||
|
||||
### Features
|
||||
* Implement 'error' flag and 'warning' type messages (Volker E.)
|
||||
* MenuSelectWidget: Add 'filterMode' (Moriel Schottlender)
|
||||
|
||||
### Styles
|
||||
* Apex theme: Bring icons and layout styles from WikimediaUI theme (Volker E.)
|
||||
* ButtonElement: Add styling for disabled active framed buttons (Bartosz Dziewoński)
|
||||
* icons: Snap 'camera' icon's frame to pixel grid (Ed Sanders)
|
||||
* icons: Add 'articleAdd' to 'content' pack (Volker E.)
|
||||
* icons: Add 'imageLayout…' icons to 'editing-advanced' pack (Volker E.)
|
||||
* WikimediaUI theme: De-emphasize `opacity` on TextInputWidget icons (Volker E.)
|
||||
* WikimediaUI theme: Give user messages more whitespace (Volker E.)
|
||||
* WikimediaUI theme: Place icons at top of message (Volker E.)
|
||||
* themes: Fix TagItemWidget's vertical alignment in Safari (Volker E.)
|
||||
* themes: Fix `padding` of label in DropdownWidget (Volker E.)
|
||||
* themes: Provide 'emphasized' color for messages (Volker E.)
|
||||
|
||||
### Code
|
||||
* Consistently spell "access key" (Bartosz Dziewoński)
|
||||
* Follow-up I5991001e257: Add missing function call to normalize query (Ed Sanders)
|
||||
* Follow-up I5991001e: Do not filter item if query is empty (Moriel Schottlender)
|
||||
* MenuTagMultiselectWidget: Use 'highlightOnFilter' flag in MenuSelectWidget (Ed Sanders)
|
||||
* SelectWidget: Rewrite getItemMatcher without regular expressions (Ed Sanders)
|
||||
* Tag.php: Prevent duplicates in class list (Ed Sanders)
|
||||
* TextInputWidget: Reduce selector where applicable (Volker E.)
|
||||
* themes: Unify TextInput selector code (Volker E.)
|
||||
* build: Consistently indent .eslintrc.json files with tabs (Bartosz Dziewoński)
|
||||
* build: Enable eslint 'max-len' in code and fix (James D. Forrester)
|
||||
* build: Remove obsolete stylelint overrides (Volker E.)
|
||||
* build: Update eslint-config-wikimedia to 0.11.0 (Ed Sanders)
|
||||
* docs: Unify key names in documentation (Volker E.)
|
||||
* icons: Manually optimize the SVG code of some icons (Thiemo Kreuz)
|
||||
* icons: Re-crush with 'svgmin' build task (Volker E.)
|
||||
* icons: Remove redundant `ry="…"` SVG attribute when identical to `rx="…"` (Thiemo Kreuz)
|
||||
|
||||
|
||||
## v0.30.3 / 2019-02-20
|
||||
### Styles
|
||||
* WikimediaUI theme: Align TagItemWidget's close icon correctly (Volker E.)
|
||||
|
|
@ -12,7 +53,7 @@
|
|||
* ComboBoxInputWidget: Disable controls when widget is set to read-only (Ed Sanders)
|
||||
* MenuSelectWidget: Documentation fix (Ed Sanders)
|
||||
* ProgressBarWidget: Fix irregularities in indeterminate styling (Bartosz Dziewoński)
|
||||
* TagMultiselectWidget: Populate input with item label on backspace (Thalia Chan)
|
||||
* TagMultiselectWidget: Populate input with item label on Backspace key press (Thalia Chan)
|
||||
* Update getScrollLeft from upstream (Ed Sanders)
|
||||
* themes: Replace element by class attribute selector (Volker E.)
|
||||
* WikimediaUI theme: Remove variables with duplicated values (Volker E.)
|
||||
|
|
@ -1018,7 +1059,7 @@
|
|||
## v0.22.4 / 2017-08-01
|
||||
### Features
|
||||
* CheckboxMultiselectInputWidget: setValue when CheckboxMultiselect changes (Prateek Saxena)
|
||||
* FieldLayout: Show widget's accesskey in our title (Bartosz Dziewoński)
|
||||
* FieldLayout: Show widget's access key in our title (Bartosz Dziewoński)
|
||||
* TextInputWidget: When positioning label, don't clear padding if we will set it again (Bartosz Dziewoński)
|
||||
* TitledElement: When an AccessKeyedElement, show access key in the title (Bartosz Dziewoński)
|
||||
|
||||
|
|
@ -1199,7 +1240,7 @@
|
|||
* Allow more widgets to be focussed programatically (Bartosz Dziewoński)
|
||||
* Generalize `.getInputId()` for all widgets (Bartosz Dziewoński)
|
||||
* Use `.focus()` method when possible instead of looking inside widgets (Bartosz Dziewoński)
|
||||
* TagMultiselectWidget: Fix `Ctrl`+`Backspace` to delete last item (Bartosz Dziewoński)
|
||||
* TagMultiselectWidget: Fix Control+Backspace keys to delete last item (Bartosz Dziewoński)
|
||||
* TagMultiselectWidget: Fix order of checks for `allowArbitrary`/`allowDuplicates` (Bartosz Dziewoński)
|
||||
|
||||
### Styles
|
||||
|
|
@ -1553,7 +1594,7 @@
|
|||
|
||||
## v0.19.1 / 2017-02-07
|
||||
### Features
|
||||
* Dialog: Support meta as well as ctrl for modifier on enter key (David Lynch)
|
||||
* Dialog: Support Meta as well as Control for modifier on Enter key (David Lynch)
|
||||
|
||||
### Styles
|
||||
* FieldLayout: Fix styling for disabled widgets in PHP (Bartosz Dziewoński)
|
||||
|
|
@ -1986,7 +2027,7 @@
|
|||
* [DEPRECATING CHANGE] CapsuleMultiSelectWidget: Rename to CapsuleMultiselectWidget (Bartosz Dziewoński)
|
||||
|
||||
### Features
|
||||
* SelectWidget/OptionWidget: Implement selecting by accesskey (Bartosz Dziewoński)
|
||||
* SelectWidget/OptionWidget: Implement selecting by access key (Bartosz Dziewoński)
|
||||
* TextInputWidget: Stop returning 'multiline' from 'getSaneType' (Prateek Saxena)
|
||||
|
||||
### Styles
|
||||
|
|
@ -2170,7 +2211,7 @@
|
|||
* [DEPRECATING CHANGE] Move some editing icons from core to editing-* (James D. Forrester)
|
||||
|
||||
### Features
|
||||
* Dialog: trigger the primary action with ctrl-enter (David Lynch)
|
||||
* Dialog: trigger the primary action with Control+Enter (David Lynch)
|
||||
* TextInputWidget: Allow type="date" (Geoffrey Mon)
|
||||
|
||||
### Styles
|
||||
|
|
@ -2268,7 +2309,7 @@
|
|||
## v0.15.3 / 2016-02-09
|
||||
### Features
|
||||
* CapsuleItemWidget: Let user tab through items, edit and delete them (Prateek Saxena)
|
||||
* CapsuleMultiSelectWidget: Edit instead of remove on backspace (Prateek Saxena)
|
||||
* CapsuleMultiSelectWidget: Edit instead of remove on Backspace (Prateek Saxena)
|
||||
* CapsuleWidgets: Edit on click and remove on Ctrl+Backspace (Prateek Saxena)
|
||||
* CapsuleWidgets: Toggle through capsules and the input with arrow keys (Prateek Saxena)
|
||||
* DropdownWidget: Open menu on up and down arrow keys (Prateek Saxena)
|
||||
|
|
@ -2376,7 +2417,7 @@
|
|||
* [DEPRECATING CHANGE] core: Deprecate add/removeCaptureEventListener (Bartosz Dziewoński)
|
||||
|
||||
### Features
|
||||
* Send escape key cancel events through action handler (Alex Monk)
|
||||
* Send Escape key cancel events through action handler (Alex Monk)
|
||||
|
||||
### Styles
|
||||
* MediaWiki theme: Align variable values & properties to CSS/Less guidelines (Volker E)
|
||||
|
|
@ -3667,7 +3708,7 @@
|
|||
* FieldLayout: Use `<label>` for this.$body, not this.$element (Bartosz Dziewoński)
|
||||
* Fix primary button description text (Niklas Laxström)
|
||||
* GridLayout: Don't round to 1% (Bartosz Dziewoński)
|
||||
* Kill the escape keydown event after handling a window close (Ed Sanders)
|
||||
* Kill the Escape keydown event after handling a window close (Ed Sanders)
|
||||
* RadioInputWidget: Remove documentation lies (Bartosz Dziewoński)
|
||||
* Temporarily remove position:absolute on body when resizing (Ed Sanders)
|
||||
* build: Use String#slice instead of discouraged String#substr (Timo Tijhof)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
"ooui-dialog-message-accept": "TEMAM",
|
||||
"ooui-dialog-message-reject": "Bıtexelne",
|
||||
"ooui-dialog-process-error": "Tayê çi ğelet şi...",
|
||||
"ooui-dialog-process-dismiss": "Racın",
|
||||
"ooui-dialog-process-dismiss": "Red ke",
|
||||
"ooui-dialog-process-retry": "Fına bıcerbın",
|
||||
"ooui-dialog-process-continue": "Dewam ke",
|
||||
"ooui-combobox-button-label": "Seba qutiya abiyaye menu",
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:07Z
|
||||
* Date: 2019-03-07T09:14:18Z
|
||||
*/
|
||||
( function ( OO ) {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-element-hidden {
|
||||
display: none !important;
|
||||
|
|
@ -252,6 +252,16 @@
|
|||
border-color: #ccc;
|
||||
box-shadow: none;
|
||||
}
|
||||
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
|
||||
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
|
||||
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus {
|
||||
background-color: #ebebeb;
|
||||
background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #ddd), color-stop(100%, #fafafa));
|
||||
background-image: -webkit-linear-gradient(top, #ddd 0, #fafafa 100%);
|
||||
background-image: -moz-linear-gradient(top, #ddd 0, #fafafa 100%);
|
||||
background-image: linear-gradient(to bottom, #ddd 0, #fafafa 100%);
|
||||
box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
|
||||
}
|
||||
|
||||
.oo-ui-clippableElement-clippable {
|
||||
-webkit-box-sizing: border-box;
|
||||
|
|
@ -446,24 +456,33 @@
|
|||
}
|
||||
.oo-ui-fieldLayout-messages {
|
||||
list-style: none none;
|
||||
margin: 0;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
max-width: 50em;
|
||||
margin: 0.25em 0 0 0.25em;
|
||||
padding: 0;
|
||||
margin-top: 0.25em;
|
||||
margin-left: 0.25em;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages > [class|='oo-ui-fieldLayout-messages'] {
|
||||
margin: 0;
|
||||
color: #000;
|
||||
display: table;
|
||||
margin: 0.625em 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-iconWidget {
|
||||
display: none;
|
||||
.oo-ui-fieldLayout-messages > [class|='oo-ui-fieldLayout-messages']:first-child {
|
||||
margin-top: 0.3125em;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-fieldLayout-messages-error {
|
||||
color: #d45353;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-iconWidget.oo-ui-iconElement-icon {
|
||||
background-position: 0 0;
|
||||
display: table-cell;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-labelWidget {
|
||||
padding: 0.1em 0;
|
||||
line-height: 1.5em;
|
||||
display: table-cell;
|
||||
padding-left: 0.5em;
|
||||
line-height: 1.5;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
|
@ -641,7 +660,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
.oo-ui-optionWidget .oo-ui-labelElement-label {
|
||||
line-height: 1.5em;
|
||||
}
|
||||
.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
|
||||
.oo-ui-selectWidget-unpressed .oo-ui-optionWidget-selected {
|
||||
background-color: #a7dcff;
|
||||
}
|
||||
.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed,
|
||||
|
|
@ -1097,8 +1116,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
width: 100%;
|
||||
max-width: 50em;
|
||||
}
|
||||
.oo-ui-textInputWidget input,
|
||||
.oo-ui-textInputWidget textarea {
|
||||
.oo-ui-textInputWidget .oo-ui-inputWidget-input {
|
||||
display: block;
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
|
|
@ -1129,6 +1147,29 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
.oo-ui-textInputWidget [type='search']::-webkit-search-cancel-button {
|
||||
display: none;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
|
||||
left: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
|
||||
right: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
|
||||
display: block;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-after.oo-ui-labelElement ::-ms-clear {
|
||||
display: none;
|
||||
}
|
||||
.oo-ui-textInputWidget-php > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-labelElement-label {
|
||||
pointer-events: none;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
|
||||
cursor: text;
|
||||
|
|
@ -1143,31 +1184,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
|
||||
display: block;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
|
||||
left: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
|
||||
right: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-after.oo-ui-labelElement ::-ms-clear {
|
||||
display: none;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget-php > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-labelElement-label {
|
||||
pointer-events: none;
|
||||
}
|
||||
.oo-ui-textInputWidget input,
|
||||
.oo-ui-textInputWidget textarea {
|
||||
.oo-ui-textInputWidget .oo-ui-inputWidget-input {
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
border: 1px solid #ccc;
|
||||
|
|
@ -1180,60 +1197,83 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
-moz-transition: border-color 250ms, box-shadow 250ms;
|
||||
transition: border-color 250ms, box-shadow 250ms;
|
||||
}
|
||||
.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: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget input:-ms-input-placeholder,
|
||||
.oo-ui-textInputWidget textarea:-ms-input-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget input::-moz-placeholder,
|
||||
.oo-ui-textInputWidget textarea::-moz-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget input:-moz-placeholder,
|
||||
.oo-ui-textInputWidget textarea:-moz-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget input::placeholder,
|
||||
.oo-ui-textInputWidget textarea::placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget input {
|
||||
line-height: 1.172em;
|
||||
}
|
||||
.oo-ui-textInputWidget textarea {
|
||||
line-height: 1.275;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
|
||||
.oo-ui-textInputWidget .oo-ui-pendingElement-pending {
|
||||
background-color: transparent;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
margin: 0 0.15625em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-inputWidget-input {
|
||||
padding-left: 2.475em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon {
|
||||
max-height: 2.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-inputWidget-input {
|
||||
padding-right: 2.4875em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
|
||||
max-height: 2.5em;
|
||||
margin-right: 0.775em;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
|
||||
color: #767676;
|
||||
top: 1px;
|
||||
padding: 0.546875em 0.4em 0.625em 0.4em;
|
||||
line-height: 1.172em;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
|
||||
margin-right: 2.0875em;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
|
||||
margin-left: 2.075em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::-webkit-input-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:-ms-input-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::-moz-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:-moz-placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::placeholder {
|
||||
color: #767676;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:focus {
|
||||
outline: 0;
|
||||
border-color: #ace;
|
||||
box-shadow: 0 0 2px 2px #ace;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input[readonly] {
|
||||
background-color: #f3f3f3;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid .oo-ui-inputWidget-input {
|
||||
background-color: #fdd;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled input,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-inputWidget-input {
|
||||
background-color: #f3f3f3;
|
||||
color: #ccc;
|
||||
border-color: #ddd;
|
||||
background-color: #f3f3f3;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon,
|
||||
|
|
@ -1244,42 +1284,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
color: #ddd;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
margin: 0 0.15625em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement input,
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement textarea {
|
||||
padding-left: 2.475em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon {
|
||||
max-height: 2.5em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement input,
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
|
||||
padding-right: 2.4875em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
|
||||
max-height: 2.5em;
|
||||
margin-right: 0.775em;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
|
||||
display: none;
|
||||
top: 1px;
|
||||
padding: 0.546875em 0.4em 0.625em 0.4em;
|
||||
line-height: 1.172em;
|
||||
color: #767676;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
|
||||
margin-right: 2.0875em;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
|
||||
margin-left: 2.075em;
|
||||
}
|
||||
|
||||
.oo-ui-menuSelectWidget {
|
||||
position: absolute;
|
||||
|
|
@ -1395,6 +1399,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
right: 0;
|
||||
margin: 0 0.775em;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
|
||||
margin-left: 3em;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle {
|
||||
padding-right: 2.5em;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
|
@ -1414,12 +1424,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
|
||||
opacity: 0.2;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
|
||||
margin-left: 3em;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
|
||||
margin-right: 2em;
|
||||
}
|
||||
|
||||
.oo-ui-comboBoxInputWidget {
|
||||
display: inline-block;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-element-hidden {
|
||||
display: none !important;
|
||||
|
|
@ -266,6 +266,9 @@
|
|||
color: #fff;
|
||||
border-color: #c8ccd1;
|
||||
}
|
||||
.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
|
||||
background-color: #919fb9;
|
||||
}
|
||||
.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
|
||||
background-color: #f8f9fa;
|
||||
color: #222;
|
||||
|
|
@ -556,7 +559,7 @@
|
|||
.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0.42857143em;
|
||||
padding-left: 0.57142857em;
|
||||
}
|
||||
.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
|
||||
margin-right: 0;
|
||||
|
|
@ -587,19 +590,24 @@
|
|||
padding: 0.28571429em 0.85714286em;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages > [class|='oo-ui-fieldLayout-messages'] {
|
||||
color: #000;
|
||||
display: table;
|
||||
margin: 0.28571429em 0 0;
|
||||
margin: 0.57142857em 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-iconElement.oo-ui-iconElement-icon {
|
||||
.oo-ui-fieldLayout-messages > [class|='oo-ui-fieldLayout-messages']:first-child {
|
||||
margin-top: 0.28571429em;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-fieldLayout-messages-error {
|
||||
color: #d33;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-iconWidget.oo-ui-iconElement-icon {
|
||||
background-position: 0 0;
|
||||
display: table-cell;
|
||||
position: static;
|
||||
top: auto;
|
||||
height: 1.42857143em;
|
||||
}
|
||||
.oo-ui-fieldLayout-messages .oo-ui-labelWidget {
|
||||
display: table-cell;
|
||||
padding-left: 0.42857143em;
|
||||
padding-left: 0.57142857em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header > .oo-ui-labelElement-label {
|
||||
|
|
@ -1442,8 +1450,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
width: 100%;
|
||||
max-width: 50em;
|
||||
}
|
||||
.oo-ui-textInputWidget input,
|
||||
.oo-ui-textInputWidget textarea {
|
||||
.oo-ui-textInputWidget .oo-ui-inputWidget-input {
|
||||
display: block;
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
|
|
@ -1474,6 +1481,29 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
.oo-ui-textInputWidget [type='search']::-webkit-search-cancel-button {
|
||||
display: none;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
|
||||
left: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
|
||||
right: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
|
||||
display: block;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-after.oo-ui-labelElement ::-ms-clear {
|
||||
display: none;
|
||||
}
|
||||
.oo-ui-textInputWidget-php > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-labelElement-label {
|
||||
pointer-events: none;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
|
||||
cursor: text;
|
||||
|
|
@ -1488,40 +1518,16 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
|
||||
display: block;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
|
||||
left: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
|
||||
right: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget-labelPosition-after.oo-ui-labelElement ::-ms-clear {
|
||||
display: none;
|
||||
}
|
||||
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.oo-ui-textInputWidget-php > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-indicatorElement-indicator,
|
||||
.oo-ui-textInputWidget-php > .oo-ui-labelElement-label {
|
||||
pointer-events: none;
|
||||
}
|
||||
.oo-ui-textInputWidget input,
|
||||
.oo-ui-textInputWidget textarea {
|
||||
.oo-ui-textInputWidget .oo-ui-inputWidget-input {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
font-size: inherit;
|
||||
font-family: inherit;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
margin: 0;
|
||||
border: 1px solid #a2a9b1;
|
||||
border-radius: 2px;
|
||||
padding: 0.57142857em 0.57142857em;
|
||||
font-size: inherit;
|
||||
font-family: inherit;
|
||||
}
|
||||
.oo-ui-textInputWidget input {
|
||||
height: 2.28571429em;
|
||||
|
|
@ -1533,96 +1539,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
.oo-ui-textInputWidget .oo-ui-pendingElement-pending {
|
||||
background-color: transparent;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled input,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
|
||||
box-shadow: inset 0 0 0 1px transparent;
|
||||
-webkit-transition: border-color 250ms, box-shadow 250ms;
|
||||
-moz-transition: border-color 250ms, box-shadow 250ms;
|
||||
transition: border-color 250ms, box-shadow 250ms;
|
||||
}
|
||||
.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;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
|
||||
outline: 0;
|
||||
border-color: #36c;
|
||||
box-shadow: inset 0 0 0 1px #36c;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled:hover input,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled:hover textarea {
|
||||
border-color: #72777d;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled:hover input:focus,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled:hover textarea:focus {
|
||||
border-color: #36c;
|
||||
}
|
||||
@media screen and (min-width: 0) {
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
|
||||
outline: 1px solid #36c;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:focus {
|
||||
outline-color: #d33;
|
||||
}
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
|
||||
border-color: #d33;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input:hover,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:hover {
|
||||
border-color: #d33;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input:focus,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:focus {
|
||||
border-color: #d33;
|
||||
box-shadow: inset 0 0 0 1px #d33;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled input,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
|
||||
background-color: #eaecf0;
|
||||
-webkit-text-fill-color: #72777d;
|
||||
color: #72777d;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
border-color: #c8ccd1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator {
|
||||
opacity: 0.51;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-labelElement-label {
|
||||
color: #72777d;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement input,
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement textarea {
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-inputWidget-input {
|
||||
padding-left: 2.64285714em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon {
|
||||
|
|
@ -1637,8 +1554,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
padding: 0.57142857em 0.85714286em 0.57142857em 0.57142857em;
|
||||
line-height: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement input,
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-inputWidget-input {
|
||||
padding-right: 2em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-indicatorElement.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
|
||||
|
|
@ -1654,6 +1570,88 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
|
||||
padding-left: 2.64285714em;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input {
|
||||
box-shadow: inset 0 0 0 1px transparent;
|
||||
-webkit-transition: border-color 250ms, box-shadow 250ms;
|
||||
-moz-transition: border-color 250ms, box-shadow 250ms;
|
||||
transition: border-color 250ms, box-shadow 250ms;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::-webkit-input-placeholder {
|
||||
color: #72777d;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:-ms-input-placeholder {
|
||||
color: #72777d;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::-moz-placeholder {
|
||||
color: #72777d;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:-moz-placeholder {
|
||||
color: #72777d;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input::placeholder {
|
||||
color: #72777d;
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:focus {
|
||||
outline: 0;
|
||||
border-color: #36c;
|
||||
box-shadow: inset 0 0 0 1px #36c;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:focus ~ .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input:focus ~ .oo-ui-indicatorElement-indicator {
|
||||
opacity: 1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled .oo-ui-inputWidget-input[readonly] {
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled:hover .oo-ui-inputWidget-input {
|
||||
border-color: #72777d;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled:hover .oo-ui-inputWidget-input:focus {
|
||||
border-color: #36c;
|
||||
}
|
||||
@media screen and (min-width: 0) {
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea.oo-ui-inputWidget-input:focus {
|
||||
outline: 1px solid #36c;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea.oo-ui-inputWidget-input:focus {
|
||||
outline-color: #d33;
|
||||
}
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
|
||||
opacity: 0.87;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid .oo-ui-inputWidget-input {
|
||||
border-color: #d33;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid .oo-ui-inputWidget-input:hover {
|
||||
border-color: #d33;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid .oo-ui-inputWidget-input:focus {
|
||||
border-color: #d33;
|
||||
box-shadow: inset 0 0 0 1px #d33;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-inputWidget-input {
|
||||
background-color: #eaecf0;
|
||||
-webkit-text-fill-color: #72777d;
|
||||
color: #72777d;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
border-color: #c8ccd1;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon,
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator {
|
||||
opacity: 0.51;
|
||||
}
|
||||
.oo-ui-textInputWidget.oo-ui-widget-disabled > .oo-ui-labelElement-label {
|
||||
color: #72777d;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
|
||||
.oo-ui-menuSelectWidget {
|
||||
position: absolute;
|
||||
|
|
@ -1775,7 +1773,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
|
|||
padding-left: 2.64285714em;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle {
|
||||
padding-right: 1.71428571em;
|
||||
padding-right: 2.57142857em;
|
||||
}
|
||||
.oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
|
||||
background-color: #f8f9fa;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-checkIcon {
|
||||
display: none;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-tool {
|
||||
-webkit-box-sizing: border-box;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:07Z
|
||||
* Date: 2019-03-07T09:14:18Z
|
||||
*/
|
||||
( function ( OO ) {
|
||||
|
||||
|
|
@ -14,17 +14,18 @@
|
|||
|
||||
/**
|
||||
* Toolbars are complex interface components that permit users to easily access a variety
|
||||
* of {@link OO.ui.Tool tools} (e.g., formatting commands) and actions, which are additional commands that are
|
||||
* part of the toolbar, but not configured as tools.
|
||||
* of {@link OO.ui.Tool tools} (e.g., formatting commands) and actions, which are additional
|
||||
* commands that are part of the toolbar, but not configured as tools.
|
||||
*
|
||||
* Individual tools are customized and then registered with a {@link OO.ui.ToolFactory tool factory}, which creates
|
||||
* the tools on demand. Each tool has a symbolic name (used when registering the tool), a title (e.g., ‘Insert
|
||||
* image’), and an icon.
|
||||
* Individual tools are customized and then registered with a
|
||||
* {@link OO.ui.ToolFactory tool factory}, which creates the tools on demand. Each tool has a
|
||||
* symbolic name (used when registering the tool), a title (e.g., ‘Insert image’), and an icon.
|
||||
*
|
||||
* Individual tools are organized in {@link OO.ui.ToolGroup toolgroups}, which can be {@link OO.ui.MenuToolGroup menus}
|
||||
* of tools, {@link OO.ui.ListToolGroup lists} of tools, or a single {@link OO.ui.BarToolGroup bar} of tools.
|
||||
* The arrangement and order of the toolgroups is customized when the toolbar is set up. Tools can be presented in
|
||||
* any order, but each can only appear once in the toolbar.
|
||||
* Individual tools are organized in {@link OO.ui.ToolGroup toolgroups}, which can be
|
||||
* {@link OO.ui.MenuToolGroup menus} of tools, {@link OO.ui.ListToolGroup lists} of tools, or a
|
||||
* single {@link OO.ui.BarToolGroup bar} of tools. The arrangement and order of the toolgroups is
|
||||
* customized when the toolbar is set up. Tools can be presented in any order, but each can only
|
||||
* appear once in the toolbar.
|
||||
*
|
||||
* The toolbar can be synchronized with the state of the external "application", like a text
|
||||
* editor's editing area, marking tools as active/inactive (e.g. a 'bold' tool would be shown as
|
||||
|
|
@ -289,10 +290,11 @@
|
|||
* @param {OO.ui.ToolFactory} toolFactory Factory for creating tools
|
||||
* @param {OO.ui.ToolGroupFactory} toolGroupFactory Factory for creating toolgroups
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {boolean} [actions] Add an actions section to the toolbar. Actions are commands that are included
|
||||
* in the toolbar, but are not configured as tools. By default, actions are displayed on the right side of
|
||||
* the toolbar.
|
||||
* @cfg {string} [position='top'] Whether the toolbar is positioned above ('top') or below ('bottom') content.
|
||||
* @cfg {boolean} [actions] Add an actions section to the toolbar. Actions are commands that are
|
||||
* included in the toolbar, but are not configured as tools. By default, actions are displayed on
|
||||
* the right side of the toolbar.
|
||||
* @cfg {string} [position='top'] Whether the toolbar is positioned above ('top') or below
|
||||
* ('bottom') content.
|
||||
* @cfg {jQuery} [$overlay] An overlay for the popup.
|
||||
* See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.
|
||||
*/
|
||||
|
|
@ -327,7 +329,8 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
|
|||
this.initialized = false;
|
||||
this.narrowThreshold = null;
|
||||
this.onWindowResizeHandler = this.onWindowResize.bind( this );
|
||||
this.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
this.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) ||
|
||||
this.$element;
|
||||
|
||||
// Events
|
||||
this.$element
|
||||
|
|
@ -344,7 +347,9 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
|
|||
.addClass( 'oo-ui-toolbar-bar' )
|
||||
.append( this.$group, '<div style="clear:both"></div>' );
|
||||
// Possible classes: oo-ui-toolbar-position-top, oo-ui-toolbar-position-bottom
|
||||
this.$element.addClass( 'oo-ui-toolbar oo-ui-toolbar-position-' + this.position ).append( this.$bar );
|
||||
this.$element
|
||||
.addClass( 'oo-ui-toolbar oo-ui-toolbar-position-' + this.position )
|
||||
.append( this.$bar );
|
||||
this.$overlay.append( this.$popups );
|
||||
};
|
||||
|
||||
|
|
@ -359,9 +364,9 @@ OO.mixinClass( OO.ui.Toolbar, OO.ui.mixin.GroupElement );
|
|||
/**
|
||||
* @event updateState
|
||||
*
|
||||
* An 'updateState' event must be emitted on the Toolbar (by calling `toolbar.emit( 'updateState' )`)
|
||||
* every time the state of the application using the toolbar changes, and an update to the state of
|
||||
* tools is required.
|
||||
* An 'updateState' event must be emitted on the Toolbar (by calling
|
||||
* `toolbar.emit( 'updateState' )`) every time the state of the application using the toolbar
|
||||
* changes, and an update to the state of tools is required.
|
||||
*
|
||||
* @param {...Mixed} data Application-defined parameters
|
||||
*/
|
||||
|
|
@ -405,7 +410,11 @@ OO.ui.Toolbar.prototype.getToolGroupFactory = function () {
|
|||
OO.ui.Toolbar.prototype.onPointerDown = function ( e ) {
|
||||
var $closestWidgetToEvent = $( e.target ).closest( '.oo-ui-widget' ),
|
||||
$closestWidgetToToolbar = this.$element.closest( '.oo-ui-widget' );
|
||||
if ( !$closestWidgetToEvent.length || $closestWidgetToEvent[ 0 ] === $closestWidgetToToolbar[ 0 ] ) {
|
||||
if (
|
||||
!$closestWidgetToEvent.length ||
|
||||
$closestWidgetToEvent[ 0 ] ===
|
||||
$closestWidgetToToolbar[ 0 ]
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
|
@ -453,9 +462,10 @@ OO.ui.Toolbar.prototype.initialize = function () {
|
|||
* Set up the toolbar.
|
||||
*
|
||||
* The toolbar is set up with a list of toolgroup configurations that specify the type of
|
||||
* toolgroup ({@link OO.ui.BarToolGroup bar}, {@link OO.ui.MenuToolGroup menu}, or {@link OO.ui.ListToolGroup list})
|
||||
* to add and which tools to include, exclude, promote, or demote within that toolgroup. Please
|
||||
* see {@link OO.ui.ToolGroup toolgroups} for more information about including tools in toolgroups.
|
||||
* toolgroup ({@link OO.ui.BarToolGroup bar}, {@link OO.ui.MenuToolGroup menu}, or
|
||||
* {@link OO.ui.ListToolGroup list}) to add and which tools to include, exclude, promote, or demote
|
||||
* within that toolgroup. Please see {@link OO.ui.ToolGroup toolgroups} for more information about
|
||||
* including tools in toolgroups.
|
||||
*
|
||||
* @param {Object.<string,Array>} groups List of toolgroup configurations
|
||||
* @param {string} [groups.name] Symbolic name for this toolgroup
|
||||
|
|
@ -486,7 +496,8 @@ OO.ui.Toolbar.prototype.setup = function ( groups ) {
|
|||
}
|
||||
}
|
||||
// Check type has been registered
|
||||
type = this.getToolGroupFactory().lookup( groupConfig.type ) ? groupConfig.type : defaultType;
|
||||
type = this.getToolGroupFactory().lookup( groupConfig.type ) ?
|
||||
groupConfig.type : defaultType;
|
||||
toolGroup = this.getToolGroupFactory().create( type, this, groupConfig );
|
||||
items.push( toolGroup );
|
||||
if ( groupConfig.name ) {
|
||||
|
|
@ -495,7 +506,9 @@ OO.ui.Toolbar.prototype.setup = function ( groups ) {
|
|||
// Groups without name are deprecated
|
||||
OO.ui.warnDeprecation( 'Toolgroups must have a \'name\' property' );
|
||||
}
|
||||
toolGroup.connect( this, { active: 'onToolGroupActive' } );
|
||||
toolGroup.connect( this, {
|
||||
active: 'onToolGroupActive'
|
||||
} );
|
||||
}
|
||||
this.addItems( items );
|
||||
};
|
||||
|
|
@ -547,8 +560,8 @@ OO.ui.Toolbar.prototype.reset = function () {
|
|||
/**
|
||||
* Destroy the toolbar.
|
||||
*
|
||||
* Destroying the toolbar removes all event handlers and DOM elements that constitute the toolbar. Call
|
||||
* this method whenever you are done using a toolbar.
|
||||
* Destroying the toolbar removes all event handlers and DOM elements that constitute the toolbar.
|
||||
* Call this method whenever you are done using a toolbar.
|
||||
*/
|
||||
OO.ui.Toolbar.prototype.destroy = function () {
|
||||
$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
|
||||
|
|
@ -590,8 +603,9 @@ OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
|
|||
* Get accelerator label for tool.
|
||||
*
|
||||
* The OOUI library does not contain an accelerator system, but this is the hook for one. To
|
||||
* use an accelerator system, subclass the toolbar and override this method, which is meant to return a label
|
||||
* that describes the accelerator keys for the tool passed (by symbolic name) to the method.
|
||||
* use an accelerator system, subclass the toolbar and override this method, which is meant to
|
||||
* return a label that describes the accelerator keys for the tool passed (by symbolic name) to
|
||||
* the method.
|
||||
*
|
||||
* @param {string} name Symbolic name of tool
|
||||
* @return {string|undefined} Tool accelerator label if available
|
||||
|
|
@ -601,10 +615,11 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Tools, together with {@link OO.ui.ToolGroup toolgroups}, constitute {@link OO.ui.Toolbar toolbars}.
|
||||
* Each tool is configured with a static name, title, and icon and is customized with the command to carry
|
||||
* out when the tool is selected. Tools must also be registered with a {@link OO.ui.ToolFactory tool factory},
|
||||
* which creates the tools on demand.
|
||||
* Tools, together with {@link OO.ui.ToolGroup toolgroups}, constitute
|
||||
* {@link OO.ui.Toolbar toolbars}.
|
||||
* Each tool is configured with a static name, title, and icon and is customized with the command
|
||||
* to carry out when the tool is selected. Tools must also be registered with a
|
||||
* {@link OO.ui.ToolFactory tool factory}, which creates the tools on demand.
|
||||
*
|
||||
* Every Tool subclass must implement two methods:
|
||||
*
|
||||
|
|
@ -612,8 +627,9 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
|
|||
* - {@link #onSelect}
|
||||
*
|
||||
* Tools are added to toolgroups ({@link OO.ui.ListToolGroup ListToolGroup},
|
||||
* {@link OO.ui.BarToolGroup BarToolGroup}, or {@link OO.ui.MenuToolGroup MenuToolGroup}), which determine how
|
||||
* the tool is displayed in the toolbar. See {@link OO.ui.Toolbar toolbars} for an example.
|
||||
* {@link OO.ui.BarToolGroup BarToolGroup}, or {@link OO.ui.MenuToolGroup MenuToolGroup}), which
|
||||
* determine how the tool is displayed in the toolbar. See {@link OO.ui.Toolbar toolbars} for an
|
||||
* example.
|
||||
*
|
||||
* For more information, please see the [OOUI documentation on MediaWiki][1].
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
|
|
@ -628,16 +644,19 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
|
|||
* @constructor
|
||||
* @param {OO.ui.ToolGroup} toolGroup
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {string|Function} [title] Title text or a function that returns text. If this config is omitted, the value of
|
||||
* the {@link #static-title static title} property is used.
|
||||
* @cfg {string|Function} [title] Title text or a function that returns text. If this config is
|
||||
* omitted, the value of the {@link #static-title static title} property is used.
|
||||
*
|
||||
* The title is used in different ways depending on the type of toolgroup that contains the tool. The
|
||||
* title is used as a tooltip if the tool is part of a {@link OO.ui.BarToolGroup bar} toolgroup, or as the label text if the tool is
|
||||
* part of a {@link OO.ui.ListToolGroup list} or {@link OO.ui.MenuToolGroup menu} toolgroup.
|
||||
* The title is used in different ways depending on the type of toolgroup that contains the tool.
|
||||
* The title is used as a tooltip if the tool is part of a {@link OO.ui.BarToolGroup bar}
|
||||
* toolgroup, or as the label text if the tool is part of a {@link OO.ui.ListToolGroup list} or
|
||||
* {@link OO.ui.MenuToolGroup menu} toolgroup.
|
||||
*
|
||||
* For bar toolgroups, a description of the accelerator key is appended to the title if an accelerator key
|
||||
* is associated with an action by the same name as the tool and accelerator functionality has been added to the application.
|
||||
* To add accelerator key functionality, you must subclass OO.ui.Toolbar and override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method.
|
||||
* For bar toolgroups, a description of the accelerator key is appended to the title if an
|
||||
* accelerator key is associated with an action by the same name as the tool and accelerator
|
||||
* functionality has been added to the application.
|
||||
* To add accelerator key functionality, you must subclass OO.ui.Toolbar and override the
|
||||
* {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method.
|
||||
*/
|
||||
OO.ui.Tool = function OoUiTool( toolGroup, config ) {
|
||||
// Allow passing positional parameters inside the config object
|
||||
|
|
@ -668,10 +687,14 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
|
|||
// Mixin constructors
|
||||
OO.ui.mixin.IconElement.call( this, config );
|
||||
OO.ui.mixin.FlaggedElement.call( this, config );
|
||||
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );
|
||||
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, {
|
||||
$tabIndexed: this.$link
|
||||
} ) );
|
||||
|
||||
// Events
|
||||
this.toolbar.connect( this, { updateState: 'onUpdateState' } );
|
||||
this.toolbar.connect( this, {
|
||||
updateState: 'onUpdateState'
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.$title.addClass( 'oo-ui-tool-title' );
|
||||
|
|
@ -690,7 +713,8 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
|
|||
this.$element
|
||||
.data( 'oo-ui-tool', this )
|
||||
.addClass( 'oo-ui-tool' )
|
||||
.addClass( 'oo-ui-tool-name-' + this.constructor.static.name.replace( /^([^/]+)\/([^/]+).*$/, '$1-$2' ) )
|
||||
.addClass( 'oo-ui-tool-name-' +
|
||||
this.constructor.static.name.replace( /^([^/]+)\/([^/]+).*$/, '$1-$2' ) )
|
||||
.toggleClass( 'oo-ui-tool-with-label', this.constructor.static.displayBothIconAndLabel )
|
||||
.append( this.$link );
|
||||
this.setTitle( config.title || this.constructor.static.title );
|
||||
|
|
@ -714,8 +738,8 @@ OO.ui.Tool.static.tagName = 'span';
|
|||
/**
|
||||
* Symbolic name of tool.
|
||||
*
|
||||
* The symbolic name is used internally to register the tool with a {@link OO.ui.ToolFactory ToolFactory}. It can
|
||||
* also be used when adding tools to toolgroups.
|
||||
* The symbolic name is used internally to register the tool with a
|
||||
* {@link OO.ui.ToolFactory ToolFactory}. It can also be used when adding tools to toolgroups.
|
||||
*
|
||||
* @abstract
|
||||
* @static
|
||||
|
|
@ -738,7 +762,8 @@ OO.ui.Tool.static.name = '';
|
|||
OO.ui.Tool.static.group = '';
|
||||
|
||||
/**
|
||||
* Tool title text or a function that returns title text. The value of the static property is overridden if the #title config option is used.
|
||||
* Tool title text or a function that returns title text. The value of the static property is
|
||||
* overridden if the #title config option is used.
|
||||
*
|
||||
* @abstract
|
||||
* @static
|
||||
|
|
@ -921,17 +946,19 @@ OO.ui.Tool.prototype.destroy = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* ToolGroups are collections of {@link OO.ui.Tool tools} that are used in a {@link OO.ui.Toolbar toolbar}.
|
||||
* The type of toolgroup ({@link OO.ui.ListToolGroup list}, {@link OO.ui.BarToolGroup bar}, or {@link OO.ui.MenuToolGroup menu})
|
||||
* to which a tool belongs determines how the tool is arranged and displayed in the toolbar. Toolgroups
|
||||
* themselves are created on demand with a {@link OO.ui.ToolGroupFactory toolgroup factory}.
|
||||
* ToolGroups are collections of {@link OO.ui.Tool tools} that are used in a
|
||||
* {@link OO.ui.Toolbar toolbar}.
|
||||
* The type of toolgroup ({@link OO.ui.ListToolGroup list}, {@link OO.ui.BarToolGroup bar}, or
|
||||
* {@link OO.ui.MenuToolGroup menu}) to which a tool belongs determines how the tool is arranged
|
||||
* and displayed in the toolbar. Toolgroups themselves are created on demand with a
|
||||
* {@link OO.ui.ToolGroupFactory toolgroup factory}.
|
||||
*
|
||||
* Toolgroups can contain individual tools, groups of tools, or all available tools, as specified
|
||||
* using the `include` config option. See OO.ui.ToolFactory#extract on documentation of the format.
|
||||
* The options `exclude`, `promote`, and `demote` support the same formats.
|
||||
*
|
||||
* See {@link OO.ui.Toolbar toolbars} for a full example. For more information about toolbars in general,
|
||||
* please see the [OOUI documentation on MediaWiki][1].
|
||||
* See {@link OO.ui.Toolbar toolbars} for a full example. For more information about toolbars in
|
||||
* general, please see the [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -945,7 +972,8 @@ OO.ui.Tool.prototype.destroy = function () {
|
|||
* @param {Object} [config] Configuration options
|
||||
* @cfg {Array|string} [include] List of tools to include in the toolgroup, see above.
|
||||
* @cfg {Array|string} [exclude] List of tools to exclude from the toolgroup, see above.
|
||||
* @cfg {Array|string} [promote] List of tools to promote to the beginning of the toolgroup, see above.
|
||||
* @cfg {Array|string} [promote] List of tools to promote to the beginning of the toolgroup,
|
||||
* see above.
|
||||
* @cfg {Array|string} [demote] List of tools to demote to the end of the toolgroup, see above.
|
||||
* This setting is particularly useful when tools have been added to the toolgroup
|
||||
* en masse (e.g., via the catch-all selector).
|
||||
|
|
@ -988,8 +1016,12 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
|
|||
mouseover: this.onMouseOverFocus.bind( this ),
|
||||
mouseout: this.onMouseOutBlur.bind( this )
|
||||
} );
|
||||
this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );
|
||||
this.aggregate( { disable: 'itemDisable' } );
|
||||
this.toolbar.getToolFactory().connect( this, {
|
||||
register: 'onToolFactoryRegister'
|
||||
} );
|
||||
this.aggregate( {
|
||||
disable: 'itemDisable'
|
||||
} );
|
||||
this.connect( this, {
|
||||
itemDisable: 'updateDisabled',
|
||||
disable: 'onDisable'
|
||||
|
|
@ -1040,7 +1072,8 @@ OO.ui.ToolGroup.static.titleTooltips = false;
|
|||
* Note: The OOUI library does not include an accelerator system, but does contain
|
||||
* a hook for one. To use an accelerator system, subclass the {@link OO.ui.Toolbar toolbar} and
|
||||
* override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method, which is
|
||||
* meant to return a label that describes the accelerator keys for a given tool (e.g., 'Ctrl + M').
|
||||
* meant to return a label that describes the accelerator keys for a given tool (e.g., Control+M
|
||||
* key combination).
|
||||
*
|
||||
* @static
|
||||
* @inheritable
|
||||
|
|
@ -1071,7 +1104,8 @@ OO.ui.ToolGroup.static.name = null;
|
|||
* @inheritdoc
|
||||
*/
|
||||
OO.ui.ToolGroup.prototype.isDisabled = function () {
|
||||
return this.autoDisabled || OO.ui.ToolGroup.parent.prototype.isDisabled.apply( this, arguments );
|
||||
return this.autoDisabled ||
|
||||
OO.ui.ToolGroup.parent.prototype.isDisabled.apply( this, arguments );
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -1113,14 +1147,25 @@ OO.ui.ToolGroup.prototype.onDisable = function ( isDisabled ) {
|
|||
*/
|
||||
OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
|
||||
if (
|
||||
!this.isDisabled() &&
|
||||
( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
|
||||
!this.isDisabled() && (
|
||||
e.which === OO.ui.MouseButtons.LEFT ||
|
||||
e.which === OO.ui.Keys.SPACE ||
|
||||
e.which === OO.ui.Keys.ENTER
|
||||
)
|
||||
) {
|
||||
this.pressed = this.findTargetTool( e );
|
||||
if ( this.pressed ) {
|
||||
this.pressed.setActive( true );
|
||||
this.getElementDocument().addEventListener( 'mouseup', this.onDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().addEventListener( 'keyup', this.onDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().addEventListener(
|
||||
'mouseup',
|
||||
this.onDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
this.getElementDocument().addEventListener(
|
||||
'keyup',
|
||||
this.onDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -1133,8 +1178,16 @@ OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
|
|||
* @param {MouseEvent|KeyboardEvent} e Mouse up or key up event
|
||||
*/
|
||||
OO.ui.ToolGroup.prototype.onDocumentMouseKeyUp = function ( e ) {
|
||||
this.getElementDocument().removeEventListener( 'mouseup', this.onDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().removeEventListener( 'keyup', this.onDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().removeEventListener(
|
||||
'mouseup',
|
||||
this.onDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
this.getElementDocument().removeEventListener(
|
||||
'keyup',
|
||||
this.onDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
// onMouseKeyUp may be called a second time, depending on where the mouse is when the button is
|
||||
// released, but since `this.pressed` will no longer be true, the second call will be ignored.
|
||||
this.onMouseKeyUp( e );
|
||||
|
|
@ -1156,8 +1209,11 @@ OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {
|
|||
var tool = this.findTargetTool( e );
|
||||
|
||||
if (
|
||||
!this.isDisabled() && this.pressed && this.pressed === tool &&
|
||||
( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
|
||||
!this.isDisabled() && this.pressed && this.pressed === tool && (
|
||||
e.which === OO.ui.MouseButtons.LEFT ||
|
||||
e.which === OO.ui.Keys.SPACE ||
|
||||
e.which === OO.ui.Keys.ENTER
|
||||
)
|
||||
) {
|
||||
this.pressed.onSelect();
|
||||
this.pressed = null;
|
||||
|
|
@ -1263,8 +1319,9 @@ OO.ui.ToolGroup.prototype.populate = function () {
|
|||
// Tool is available or is already in this group
|
||||
( this.toolbar.isToolAvailable( name ) || this.tools[ name ] )
|
||||
) {
|
||||
// Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool before
|
||||
// creating it, but we can't call reserveTool() yet because we haven't created the tool.
|
||||
// Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool
|
||||
// before creating it, but we can't call reserveTool() yet because we haven't created
|
||||
// the tool.
|
||||
this.toolbar.tools[ name ] = true;
|
||||
tool = this.tools[ name ];
|
||||
if ( !tool ) {
|
||||
|
|
@ -1318,11 +1375,13 @@ OO.ui.ToolGroup.prototype.destroy = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* A ToolFactory creates tools on demand. All tools ({@link OO.ui.Tool Tools}, {@link OO.ui.PopupTool PopupTools},
|
||||
* and {@link OO.ui.ToolGroupTool ToolGroupTools}) must be registered with a tool factory. Tools are
|
||||
* registered by their symbolic name. See {@link OO.ui.Toolbar toolbars} for an example.
|
||||
* A ToolFactory creates tools on demand. All tools ({@link OO.ui.Tool Tools},
|
||||
* {@link OO.ui.PopupTool PopupTools}, and {@link OO.ui.ToolGroupTool ToolGroupTools}) must be
|
||||
* registered with a tool factory. Tools are registered by their symbolic name. See
|
||||
* {@link OO.ui.Toolbar toolbars} for an example.
|
||||
*
|
||||
* For more information about toolbars in general, please see the [OOUI documentation on MediaWiki][1].
|
||||
* For more information about toolbars in general, please see the
|
||||
* [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -1342,7 +1401,7 @@ OO.inheritClass( OO.ui.ToolFactory, OO.Factory );
|
|||
/* Methods */
|
||||
|
||||
/**
|
||||
* Get tools from the factory
|
||||
* Get tools from the factory.
|
||||
*
|
||||
* @param {Array|string} [include] Included tools, see #extract for format
|
||||
* @param {Array|string} [exclude] Excluded tools, see #extract for format
|
||||
|
|
@ -1454,9 +1513,9 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
|
|||
};
|
||||
|
||||
/**
|
||||
* ToolGroupFactories create {@link OO.ui.ToolGroup toolgroups} on demand. The toolgroup classes must
|
||||
* specify a symbolic name and be registered with the factory. The following classes are registered by
|
||||
* default:
|
||||
* ToolGroupFactories create {@link OO.ui.ToolGroup toolgroups} on demand. The toolgroup classes
|
||||
* must specify a symbolic name and be registered with the factory. The following classes are
|
||||
* registered by default:
|
||||
*
|
||||
* - {@link OO.ui.BarToolGroup BarToolGroups} (‘bar’)
|
||||
* - {@link OO.ui.MenuToolGroup MenuToolGroups} (‘menu’)
|
||||
|
|
@ -1464,7 +1523,8 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
|
|||
*
|
||||
* See {@link OO.ui.Toolbar toolbars} for an example.
|
||||
*
|
||||
* For more information about toolbars in general, please see the [OOUI documentation on MediaWiki][1].
|
||||
* For more information about toolbars in general, please see the
|
||||
* [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -1505,9 +1565,10 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Popup tools open a popup window when they are selected from the {@link OO.ui.Toolbar toolbar}. Each popup tool is configured
|
||||
* with a static name, title, and icon, as well with as any popup configurations. Unlike other tools, popup tools do not require that developers specify
|
||||
* an #onSelect or #onUpdateState method, as these methods have been implemented already.
|
||||
* Popup tools open a popup window when they are selected from the {@link OO.ui.Toolbar toolbar}.
|
||||
* Each popup tool is configured with a static name, title, and icon, as well with as any popup
|
||||
* configurations. Unlike other tools, popup tools do not require that developers specify an
|
||||
* #onSelect or #onUpdateState method, as these methods have been implemented already.
|
||||
*
|
||||
* // Example of a popup tool. When selected, a popup tool displays
|
||||
* // a popup window.
|
||||
|
|
@ -1525,8 +1586,9 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
|
|||
* HelpTool.static.title = 'Help';
|
||||
* toolFactory.register( HelpTool );
|
||||
*
|
||||
* For an example of a toolbar that contains a popup tool, see {@link OO.ui.Toolbar toolbars}. For more information about
|
||||
* toolbars in general, please see the [OOUI documentation on MediaWiki][1].
|
||||
* For an example of a toolbar that contains a popup tool, see {@link OO.ui.Toolbar toolbars}.
|
||||
* For more information about toolbars in general, please see the
|
||||
* [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -1553,7 +1615,9 @@ OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {
|
|||
OO.ui.mixin.PopupElement.call( this, config );
|
||||
|
||||
// Events
|
||||
this.popup.connect( this, { toggle: 'onPopupToggle' } );
|
||||
this.popup.connect( this, {
|
||||
toggle: 'onPopupToggle'
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.popup.setAutoFlip( false );
|
||||
|
|
@ -1607,7 +1671,8 @@ OO.ui.PopupTool.prototype.onPopupToggle = function ( isVisible ) {
|
|||
* the bar item. Included tools will be displayed in a dropdown {@link OO.ui.ListToolGroup list}
|
||||
* when the ToolGroupTool is selected.
|
||||
*
|
||||
* // Example: ToolGroupTool with two nested tools, 'setting1' and 'setting2', defined elsewhere.
|
||||
* // Example: ToolGroupTool with two nested tools, 'setting1' and 'setting2',
|
||||
* // defined elsewhere.
|
||||
*
|
||||
* function SettingsTool() {
|
||||
* SettingsTool.parent.apply( this, arguments );
|
||||
|
|
@ -1715,8 +1780,8 @@ OO.ui.ToolGroupTool.prototype.onUpdateState = function () {
|
|||
/**
|
||||
* Build a {@link OO.ui.ToolGroup toolgroup} from the specified configuration.
|
||||
*
|
||||
* @param {Object.<string,Array>} group Toolgroup configuration. Please see {@link OO.ui.ToolGroup toolgroup} for
|
||||
* more information.
|
||||
* @param {Object.<string,Array>} group Toolgroup configuration. Please see
|
||||
* {@link OO.ui.ToolGroup toolgroup} for more information.
|
||||
* @return {OO.ui.ListToolGroup}
|
||||
*/
|
||||
OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
|
||||
|
|
@ -1732,13 +1797,13 @@ OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
|
|||
|
||||
/**
|
||||
* BarToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to
|
||||
* create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}
|
||||
* and {@link OO.ui.ListToolGroup ListToolGroup}). The {@link OO.ui.Tool tools} in a BarToolGroup are
|
||||
* displayed by icon in a single row. The title of the tool is displayed when users move the mouse over
|
||||
* the tool.
|
||||
* create {@link OO.ui.Toolbar toolbars} (the other types of groups are
|
||||
* {@link OO.ui.MenuToolGroup MenuToolGroup} and {@link OO.ui.ListToolGroup ListToolGroup}).
|
||||
* The {@link OO.ui.Tool tools} in a BarToolGroup are displayed by icon in a single row. The
|
||||
* title of the tool is displayed when users move the mouse over the tool.
|
||||
*
|
||||
* BarToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar is
|
||||
* set up.
|
||||
* BarToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar
|
||||
* is set up.
|
||||
*
|
||||
* @example
|
||||
* // Example of a BarToolGroup with two tools
|
||||
|
|
@ -1816,8 +1881,10 @@ OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
|
|||
* // document.
|
||||
* toolbar.initialize();
|
||||
*
|
||||
* For more information about how to add tools to a bar tool group, please see {@link OO.ui.ToolGroup toolgroup}.
|
||||
* For more information about toolbars in general, please see the [OOUI documentation on MediaWiki][1].
|
||||
* For more information about how to add tools to a bar tool group, please see
|
||||
* {@link OO.ui.ToolGroup toolgroup}.
|
||||
* For more information about toolbars in general, please see the
|
||||
* [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -1869,8 +1936,9 @@ OO.ui.BarToolGroup.static.name = 'bar';
|
|||
|
||||
/**
|
||||
* PopupToolGroup is an abstract base class used by both {@link OO.ui.MenuToolGroup MenuToolGroup}
|
||||
* and {@link OO.ui.ListToolGroup ListToolGroup} to provide a popup (an overlaid menu or list of tools with an
|
||||
* optional icon and label). This class can be used for other base classes that also use this functionality.
|
||||
* and {@link OO.ui.ListToolGroup ListToolGroup} to provide a popup (an overlaid menu or list of
|
||||
* tools with an optional icon and label). This class can be used for other base classes that
|
||||
* also use this functionality.
|
||||
*
|
||||
* @abstract
|
||||
* @class
|
||||
|
|
@ -1898,7 +1966,8 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
|
|||
|
||||
// Configuration initialization
|
||||
config = $.extend( {
|
||||
indicator: config.indicator === undefined ? ( toolbar.position === 'bottom' ? 'up' : 'down' ) : config.indicator
|
||||
indicator: config.indicator === undefined ?
|
||||
( toolbar.position === 'bottom' ? 'up' : 'down' ) : config.indicator
|
||||
}, config );
|
||||
|
||||
// Parent constructor
|
||||
|
|
@ -1917,14 +1986,18 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
|
|||
OO.ui.mixin.LabelElement.call( this, config );
|
||||
OO.ui.mixin.TitledElement.call( this, config );
|
||||
OO.ui.mixin.FlaggedElement.call( this, config );
|
||||
OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
|
||||
OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, {
|
||||
$clippable: this.$group
|
||||
} ) );
|
||||
OO.ui.mixin.FloatableElement.call( this, $.extend( {}, config, {
|
||||
$floatable: this.$group,
|
||||
$floatableContainer: this.$handle,
|
||||
hideWhenOutOfView: false,
|
||||
verticalPosition: this.toolbar.position === 'bottom' ? 'above' : 'below'
|
||||
} ) );
|
||||
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
|
||||
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, {
|
||||
$tabIndexed: this.$handle
|
||||
} ) );
|
||||
|
||||
// Events
|
||||
this.$handle.on( {
|
||||
|
|
@ -2012,8 +2085,11 @@ OO.ui.PopupToolGroup.prototype.onBlur = function () {
|
|||
OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {
|
||||
// Only close toolgroup when a tool was actually selected
|
||||
if (
|
||||
!this.isDisabled() && this.pressed && this.pressed === this.findTargetTool( e ) &&
|
||||
( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
|
||||
!this.isDisabled() && this.pressed && this.pressed === this.findTargetTool( e ) && (
|
||||
e.which === OO.ui.MouseButtons.LEFT ||
|
||||
e.which === OO.ui.Keys.SPACE ||
|
||||
e.which === OO.ui.Keys.ENTER
|
||||
)
|
||||
) {
|
||||
this.setActive( false );
|
||||
}
|
||||
|
|
@ -2028,7 +2104,8 @@ OO.ui.PopupToolGroup.prototype.onMouseKeyDown = function ( e ) {
|
|||
// Shift-Tab on the first tool in the group jumps to the handle.
|
||||
// Tab on the last tool in the group jumps to the next group.
|
||||
if ( !this.isDisabled() && e.which === OO.ui.Keys.TAB ) {
|
||||
// (We can't use this.items because ListToolGroup inserts the extra fake expand/collapse tool.)
|
||||
// We can't use this.items because ListToolGroup inserts the extra fake
|
||||
// expand/collapse tool.
|
||||
$focused = $( document.activeElement );
|
||||
$firstFocusable = OO.ui.findFocusable( this.$group );
|
||||
if ( $focused[ 0 ] === $firstFocusable[ 0 ] && e.shiftKey ) {
|
||||
|
|
@ -2037,7 +2114,8 @@ OO.ui.PopupToolGroup.prototype.onMouseKeyDown = function ( e ) {
|
|||
}
|
||||
$lastFocusable = OO.ui.findFocusable( this.$group, true );
|
||||
if ( $focused[ 0 ] === $lastFocusable[ 0 ] && !e.shiftKey ) {
|
||||
// Focus this group's handle and let the browser's tab handling happen (no 'return false').
|
||||
// Focus this group's handle and let the browser's tab handling happen
|
||||
// (no 'return false').
|
||||
// This way we don't have to fiddle with other ToolGroups' business, or worry what to do
|
||||
// if the next group is not a PopupToolGroup or doesn't exist at all.
|
||||
this.$handle.trigger( 'focus' );
|
||||
|
|
@ -2057,8 +2135,11 @@ OO.ui.PopupToolGroup.prototype.onMouseKeyDown = function ( e ) {
|
|||
*/
|
||||
OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {
|
||||
if (
|
||||
!this.isDisabled() &&
|
||||
( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
|
||||
!this.isDisabled() && (
|
||||
e.which === OO.ui.MouseButtons.LEFT ||
|
||||
e.which === OO.ui.Keys.SPACE ||
|
||||
e.which === OO.ui.Keys.ENTER
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -2082,7 +2163,11 @@ OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if ( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) {
|
||||
if (
|
||||
e.which === OO.ui.MouseButtons.LEFT ||
|
||||
e.which === OO.ui.Keys.SPACE ||
|
||||
e.which === OO.ui.Keys.ENTER
|
||||
) {
|
||||
this.setActive( !this.active );
|
||||
return false;
|
||||
}
|
||||
|
|
@ -2113,8 +2198,16 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
if ( this.active !== value ) {
|
||||
this.active = value;
|
||||
if ( value ) {
|
||||
this.getElementDocument().addEventListener( 'mouseup', this.onPopupDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().addEventListener( 'keyup', this.onPopupDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().addEventListener(
|
||||
'mouseup',
|
||||
this.onPopupDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
this.getElementDocument().addEventListener(
|
||||
'keyup',
|
||||
this.onPopupDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
|
||||
this.$clippable.css( 'left', '' );
|
||||
this.$element.addClass( 'oo-ui-popupToolGroup-active' );
|
||||
|
|
@ -2126,13 +2219,16 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
this.setHorizontalPosition( 'start' );
|
||||
|
||||
if ( this.isClippedHorizontally() || this.isFloatableOutOfView() ) {
|
||||
// Anchoring to the left caused the popup to clip, so anchor it to the right instead
|
||||
// Anchoring to the left caused the popup to clip, so anchor it to the
|
||||
// right instead.
|
||||
this.setHorizontalPosition( 'end' );
|
||||
}
|
||||
if ( this.isClippedHorizontally() || this.isFloatableOutOfView() ) {
|
||||
// Anchoring to the right also caused the popup to clip, so just make it fill the container
|
||||
// Anchoring to the right also caused the popup to clip, so just make it fill the
|
||||
// container.
|
||||
containerWidth = this.$clippableScrollableContainer.width();
|
||||
containerLeft = this.$clippableScrollableContainer[ 0 ] === document.documentElement ?
|
||||
containerLeft = this.$clippableScrollableContainer[ 0 ] ===
|
||||
document.documentElement ?
|
||||
0 :
|
||||
this.$clippableScrollableContainer.offset().left;
|
||||
|
||||
|
|
@ -2145,8 +2241,16 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
} );
|
||||
}
|
||||
} else {
|
||||
this.getElementDocument().removeEventListener( 'mouseup', this.onPopupDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().removeEventListener( 'keyup', this.onPopupDocumentMouseKeyUpHandler, true );
|
||||
this.getElementDocument().removeEventListener(
|
||||
'mouseup',
|
||||
this.onPopupDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
this.getElementDocument().removeEventListener(
|
||||
'keyup',
|
||||
this.onPopupDocumentMouseKeyUpHandler,
|
||||
true
|
||||
);
|
||||
this.$element.removeClass( 'oo-ui-popupToolGroup-active' );
|
||||
this.$group.removeClass( 'oo-ui-popupToolGroup-active-tools' );
|
||||
this.togglePositioning( false );
|
||||
|
|
@ -2159,18 +2263,20 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
|
||||
/**
|
||||
* ListToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to
|
||||
* create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}
|
||||
* and {@link OO.ui.BarToolGroup BarToolGroup}). The {@link OO.ui.Tool tools} in a ListToolGroup are displayed
|
||||
* by label in a dropdown menu. The title of the tool is used as the label text. The menu itself can be configured
|
||||
* with a label, icon, indicator, header, and title.
|
||||
* create {@link OO.ui.Toolbar toolbars} (the other types of groups are
|
||||
* {@link OO.ui.MenuToolGroup MenuToolGroup} and {@link OO.ui.BarToolGroup BarToolGroup}).
|
||||
* The {@link OO.ui.Tool tools} in a ListToolGroup are displayed by label in a dropdown menu.
|
||||
* The title of the tool is used as the label text. The menu itself can be configured with a label,
|
||||
* icon, indicator, header, and title.
|
||||
*
|
||||
* ListToolGroups can be configured to be expanded and collapsed. Collapsed lists will have a ‘More’ option that
|
||||
* users can select to see the full list of tools. If a collapsed toolgroup is expanded, a ‘Fewer’ option permits
|
||||
* users to collapse the list again.
|
||||
* ListToolGroups can be configured to be expanded and collapsed. Collapsed lists will have a
|
||||
* ‘More’ option that users can select to see the full list of tools. If a collapsed toolgroup is
|
||||
* expanded, a ‘Fewer’ option permits users to collapse the list again.
|
||||
*
|
||||
* ListToolGroups are created by a {@link OO.ui.ToolGroupFactory toolgroup factory} when the toolbar is set up. The factory
|
||||
* requires the ListToolGroup's symbolic name, 'list', which is specified along with the other configurations. For more
|
||||
* information about how to add tools to a ListToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.
|
||||
* ListToolGroups are created by a {@link OO.ui.ToolGroupFactory toolgroup factory} when the
|
||||
* toolbar is set up. The factory requires the ListToolGroup's symbolic name, 'list', which is
|
||||
* specified along with the other configurations. For more information about how to add tools to a
|
||||
* ListToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.
|
||||
*
|
||||
* @example
|
||||
* // Example of a ListToolGroup
|
||||
|
|
@ -2210,7 +2316,8 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
* type: 'list',
|
||||
* label: 'ListToolGroup',
|
||||
* icon: 'ellipsis',
|
||||
* title: 'This is the title, displayed when user moves the mouse over the list toolgroup',
|
||||
* title: 'This is the title, displayed when user moves the mouse over the list ' +
|
||||
* 'toolgroup',
|
||||
* header: 'This is the header',
|
||||
* include: [ 'settings', 'stuff' ],
|
||||
* allowCollapse: ['stuff']
|
||||
|
|
@ -2229,7 +2336,8 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
* // Build the toolbar. This must be done after the toolbar has been appended to the document.
|
||||
* toolbar.initialize();
|
||||
*
|
||||
* For more information about toolbars in general, please see the [OOUI documentation on MediaWiki][1].
|
||||
* For more information about toolbars in general, please see the
|
||||
* [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -2239,16 +2347,19 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
|
|||
* @constructor
|
||||
* @param {OO.ui.Toolbar} toolbar
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {Array} [allowCollapse] Allow the specified tools to be collapsed. By default, collapsible tools
|
||||
* will only be displayed if users click the ‘More’ option displayed at the bottom of the list. If
|
||||
* the list is expanded, a ‘Fewer’ option permits users to collapse the list again. Any tools that
|
||||
* are included in the toolgroup, but are not designated as collapsible, will always be displayed.
|
||||
* @cfg {Array} [allowCollapse] Allow the specified tools to be collapsed. By default, collapsible
|
||||
* tools will only be displayed if users click the ‘More’ option displayed at the bottom of the
|
||||
* list. If the list is expanded, a ‘Fewer’ option permits users to collapse the list again.
|
||||
* Any tools that are included in the toolgroup, but are not designated as collapsible, will always
|
||||
* be displayed.
|
||||
* To open a collapsible list in its expanded state, set #expanded to 'true'.
|
||||
* @cfg {Array} [forceExpand] Expand the specified tools. All other tools will be designated as collapsible.
|
||||
* Unless #expanded is set to true, the collapsible tools will be collapsed when the list is first opened.
|
||||
* @cfg {boolean} [expanded=false] Expand collapsible tools. This config is only relevant if tools have
|
||||
* been designated as collapsible. When expanded is set to true, all tools in the group will be displayed
|
||||
* when the list is first opened. Users can collapse the list with a ‘Fewer’ option at the bottom.
|
||||
* @cfg {Array} [forceExpand] Expand the specified tools. All other tools will be designated as
|
||||
* collapsible. Unless #expanded is set to true, the collapsible tools will be collapsed when the
|
||||
* list is first opened.
|
||||
* @cfg {boolean} [expanded=false] Expand collapsible tools. This config is only relevant if tools
|
||||
* have been designated as collapsible. When expanded is set to true, all tools in the group will
|
||||
* be displayed when the list is first opened. Users can collapse the list with a ‘Fewer’ option at
|
||||
* the bottom.
|
||||
*/
|
||||
OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
|
||||
// Allow passing positional parameters inside the config object
|
||||
|
|
@ -2353,11 +2464,15 @@ OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
|
|||
OO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {
|
||||
// Do not close the popup when the user wants to show more/fewer tools
|
||||
if (
|
||||
$( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length &&
|
||||
( e.which === OO.ui.MouseButtons.LEFT || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
|
||||
$( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length && (
|
||||
e.which === OO.ui.MouseButtons.LEFT ||
|
||||
e.which === OO.ui.Keys.SPACE ||
|
||||
e.which === OO.ui.Keys.ENTER
|
||||
)
|
||||
) {
|
||||
// HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which
|
||||
// hides the popup list when a tool is selected) and call ToolGroup's implementation directly.
|
||||
// HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation
|
||||
// (which hides the popup list when a tool is selected) and call ToolGroup's implementation
|
||||
// directly.
|
||||
return OO.ui.ListToolGroup.parent.parent.prototype.onMouseKeyUp.call( this, e );
|
||||
} else {
|
||||
return OO.ui.ListToolGroup.parent.prototype.onMouseKeyUp.call( this, e );
|
||||
|
|
@ -2387,14 +2502,15 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
|
|||
|
||||
/**
|
||||
* MenuToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to
|
||||
* create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.BarToolGroup BarToolGroup}
|
||||
* and {@link OO.ui.ListToolGroup ListToolGroup}). MenuToolGroups contain selectable {@link OO.ui.Tool tools},
|
||||
* which are displayed by label in a dropdown menu. The tool's title is used as the label text, and the
|
||||
* menu label is updated to reflect which tool or tools are currently selected. If no tools are selected,
|
||||
* the menu label is empty. The menu can be configured with an indicator, icon, title, and/or header.
|
||||
* create {@link OO.ui.Toolbar toolbars} (the other types of groups are
|
||||
* {@link OO.ui.BarToolGroup BarToolGroup} and {@link OO.ui.ListToolGroup ListToolGroup}).
|
||||
* MenuToolGroups contain selectable {@link OO.ui.Tool tools}, which are displayed by label in a
|
||||
* dropdown menu. The tool's title is used as the label text, and the menu label is updated to
|
||||
* reflect which tool or tools are currently selected. If no tools are selected, the menu label
|
||||
* is empty. The menu can be configured with an indicator, icon, title, and/or header.
|
||||
*
|
||||
* MenuToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar
|
||||
* is set up.
|
||||
* MenuToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the
|
||||
* toolbar is set up.
|
||||
*
|
||||
* @example
|
||||
* // Example of a MenuToolGroup
|
||||
|
|
@ -2403,7 +2519,8 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
|
|||
* var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
|
||||
*
|
||||
* // We will be placing status text in this element when tools are used
|
||||
* var $area = $( '<p>' ).text( 'An example of a MenuToolGroup. Select a tool from the dropdown menu.' );
|
||||
* var $area = $( '<p>' ).text( 'An example of a MenuToolGroup. Select a tool from the '
|
||||
* + 'dropdown menu.' );
|
||||
*
|
||||
* // Define the tools that we're going to place in our toolbar
|
||||
*
|
||||
|
|
@ -2476,8 +2593,10 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
|
|||
* toolbar.initialize();
|
||||
* toolbar.emit( 'updateState' );
|
||||
*
|
||||
* For more information about how to add tools to a MenuToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.
|
||||
* For more information about toolbars in general, please see the [OOUI documentation on MediaWiki] [1].
|
||||
* For more information about how to add tools to a MenuToolGroup, please see
|
||||
* {@link OO.ui.ToolGroup toolgroup}.
|
||||
* For more information about toolbars in general, please see the
|
||||
* [OOUI documentation on MediaWiki] [1].
|
||||
*
|
||||
* [1]: https://www.mediawiki.org/wiki/OOUI/Toolbars
|
||||
*
|
||||
|
|
@ -2502,7 +2621,9 @@ OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
|
|||
OO.ui.MenuToolGroup.parent.call( this, toolbar, config );
|
||||
|
||||
// Events
|
||||
this.toolbar.connect( this, { updateState: 'onUpdateState' } );
|
||||
this.toolbar.connect( this, {
|
||||
updateState: 'onUpdateState'
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.$element.addClass( 'oo-ui-menuToolGroup' );
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
|
||||
cursor: move;
|
||||
|
|
@ -688,7 +688,7 @@
|
|||
.oo-ui-outlineOptionWidget-level-2.oo-ui-iconElement .oo-ui-iconElement-icon {
|
||||
left: 5em;
|
||||
}
|
||||
.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
|
||||
.oo-ui-selectWidget-unpressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
|
||||
background-color: #a7dcff;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
|
@ -936,17 +936,17 @@
|
|||
background-image: -moz-linear-gradient(top, #fafafa 0, #ddd 100%);
|
||||
background-image: linear-gradient(to bottom, #fafafa 0, #ddd 100%);
|
||||
color: #333;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
height: 1.7em;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
height: 1.71875em;
|
||||
margin: 0.1em;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 3px;
|
||||
padding: 0 0.4em;
|
||||
line-height: 1.7em;
|
||||
line-height: 1.640625em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.oo-ui-tagItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
|
||||
cursor: move;
|
||||
|
|
@ -1018,7 +1018,7 @@
|
|||
border: 1px solid #a2a9b1;
|
||||
border-radius: 1.57142857em;
|
||||
padding: 0 0.57142857em;
|
||||
line-height: 1.57142857em;
|
||||
line-height: 1.42857143em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.oo-ui-tagItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:07Z
|
||||
* Date: 2019-03-07T09:14:18Z
|
||||
*/
|
||||
( function ( OO ) {
|
||||
|
||||
|
|
@ -23,7 +23,8 @@
|
|||
*
|
||||
* @constructor
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element
|
||||
* @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to
|
||||
* the whole element
|
||||
* @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable
|
||||
* but the draggable state should be called from the DraggableGroupElement, which updates
|
||||
* the whole group
|
||||
|
|
@ -58,7 +59,8 @@ OO.initClass( OO.ui.mixin.DraggableElement );
|
|||
* @event dragstart
|
||||
*
|
||||
* A dragstart event is emitted when the user clicks and begins dragging an item.
|
||||
* @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with the mouse.
|
||||
* @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with
|
||||
* the mouse.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
@ -105,7 +107,7 @@ OO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable
|
|||
};
|
||||
|
||||
/**
|
||||
* Check the draggable state of this widget
|
||||
* Check the draggable state of this widget.
|
||||
*
|
||||
* @return {boolean} Widget supports draggable operations
|
||||
*/
|
||||
|
|
@ -207,7 +209,7 @@ OO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {
|
|||
|
||||
/**
|
||||
* Set item index.
|
||||
* Store it in the DOM so we can access from the widget drag event
|
||||
* Store it in the DOM so we can access from the widget drag event.
|
||||
*
|
||||
* @private
|
||||
* @param {number} index Item index
|
||||
|
|
@ -220,7 +222,7 @@ OO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {
|
|||
};
|
||||
|
||||
/**
|
||||
* Get item index
|
||||
* Get item index.
|
||||
*
|
||||
* @private
|
||||
* @return {number} Item index
|
||||
|
|
@ -477,15 +479,16 @@ OO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {
|
|||
/**
|
||||
* Get the item that is currently being dragged.
|
||||
*
|
||||
* @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged
|
||||
* @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is
|
||||
* being dragged
|
||||
*/
|
||||
OO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {
|
||||
return this.dragItem;
|
||||
};
|
||||
|
||||
/**
|
||||
* RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as
|
||||
* the {@link OO.ui.mixin.LookupElement}.
|
||||
* RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget,
|
||||
* such as the {@link OO.ui.mixin.LookupElement}.
|
||||
*
|
||||
* @class
|
||||
* @abstract
|
||||
|
|
@ -505,9 +508,9 @@ OO.initClass( OO.ui.mixin.RequestManager );
|
|||
/**
|
||||
* Get request results for the current query.
|
||||
*
|
||||
* @return {jQuery.Promise} Promise object which will be passed response data as the first argument of
|
||||
* the done event. If the request was aborted to make way for a subsequent request, this promise
|
||||
* may not be rejected, depending on what jQuery feels like doing.
|
||||
* @return {jQuery.Promise} Promise object which will be passed response data as the first argument
|
||||
* of the done event. If the request was aborted to make way for a subsequent request, this
|
||||
* promise may not be rejected, depending on what jQuery feels like doing.
|
||||
*/
|
||||
OO.ui.mixin.RequestManager.prototype.getRequestData = function () {
|
||||
var widget = this,
|
||||
|
|
@ -542,7 +545,8 @@ OO.ui.mixin.RequestManager.prototype.getRequestData = function () {
|
|||
if ( ourRequest === widget.requestRequest ) {
|
||||
widget.requestQuery = null;
|
||||
widget.requestRequest = null;
|
||||
widget.requestCache[ value ] = widget.getRequestCacheDataFromResponse( response );
|
||||
widget.requestCache[ value ] =
|
||||
widget.getRequestCacheDataFromResponse( response );
|
||||
deferred.resolve( widget.requestCache[ value ] );
|
||||
}
|
||||
} )
|
||||
|
|
@ -610,14 +614,15 @@ OO.ui.mixin.RequestManager.prototype.getRequest = null;
|
|||
OO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null;
|
||||
|
||||
/**
|
||||
* LookupElement is a mixin that creates a {@link OO.ui.MenuSelectWidget menu} of suggested values for
|
||||
* a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types
|
||||
* into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen
|
||||
* from the lookup menu, that value becomes the value of the input field.
|
||||
* LookupElement is a mixin that creates a {@link OO.ui.MenuSelectWidget menu} of suggested
|
||||
* values for a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on
|
||||
* the characters the user types into the text input field and, in general, the menu is only
|
||||
* displayed when the user types. If a suggested value is chosen from the lookup menu, that value
|
||||
* becomes the value of the input field.
|
||||
*
|
||||
* Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is
|
||||
* not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then
|
||||
* re-enable lookups.
|
||||
* Note that a new menu of suggested items is displayed when a value is chosen from the
|
||||
* lookup menu. If this is not the desired behavior, disable lookup menus with the
|
||||
* #setLookupsDisabled method, then set the value, then re-enable lookups.
|
||||
*
|
||||
* See the [OOUI demos][1] for an example.
|
||||
*
|
||||
|
|
@ -631,12 +636,16 @@ OO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null;
|
|||
* @param {Object} [config] Configuration options
|
||||
* @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning.
|
||||
* See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.
|
||||
* @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.
|
||||
* @cfg {Object} [menu] Configuration options to pass to {@link OO.ui.MenuSelectWidget menu select widget}
|
||||
* @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.
|
||||
* @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered
|
||||
* beneath the specified element.
|
||||
* @cfg {Object} [menu] Configuration options to pass to
|
||||
* {@link OO.ui.MenuSelectWidget menu select widget}
|
||||
* @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the
|
||||
* text input is empty.
|
||||
* By default, the lookup menu is not generated and displayed until the user begins to type.
|
||||
* @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted (so, that the user can
|
||||
* take it over into the input with simply pressing return) automatically or not.
|
||||
* @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted
|
||||
* (so, that the user can take it over into the input with simply pressing return) automatically
|
||||
* or not.
|
||||
*/
|
||||
OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {
|
||||
// Configuration initialization
|
||||
|
|
@ -646,7 +655,8 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {
|
|||
OO.ui.mixin.RequestManager.call( this, config );
|
||||
|
||||
// Properties
|
||||
this.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
this.$overlay = ( config.$overlay === true ?
|
||||
OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
this.lookupMenu = new OO.ui.MenuSelectWidget( $.extend( {
|
||||
widget: this,
|
||||
input: this,
|
||||
|
|
@ -665,7 +675,9 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {
|
|||
blur: this.onLookupInputBlur.bind( this ),
|
||||
mousedown: this.onLookupInputMouseDown.bind( this )
|
||||
} );
|
||||
this.connect( this, { change: 'onLookupInputChange' } );
|
||||
this.connect( this, {
|
||||
change: 'onLookupInputChange'
|
||||
} );
|
||||
this.lookupMenu.connect( this, {
|
||||
toggle: 'onLookupMenuToggle',
|
||||
choose: 'onLookupMenuItemChoose'
|
||||
|
|
@ -718,7 +730,7 @@ OO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () {
|
|||
*/
|
||||
OO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () {
|
||||
// Only open the menu if the input was already focused.
|
||||
// This way we allow the user to open the menu again after closing it with Esc
|
||||
// This way we allow the user to open the menu again after closing it with Escape (esc)
|
||||
// by clicking in the input. Opening (and populating) the menu when initially
|
||||
// clicking into the input is handled by the focus handler.
|
||||
if ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {
|
||||
|
|
@ -748,7 +760,7 @@ OO.ui.mixin.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
|
|||
if ( !visible ) {
|
||||
// When the menu is hidden, abort any active request and clear the menu.
|
||||
// This has to be done here in addition to closeLookupMenu(), because
|
||||
// MenuSelectWidget will close itself when the user presses Esc.
|
||||
// MenuSelectWidget will close itself when the user presses Escape (esc).
|
||||
this.abortLookupRequest();
|
||||
this.lookupMenu.clearItems();
|
||||
}
|
||||
|
|
@ -942,7 +954,7 @@ OO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {
|
|||
// Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget
|
||||
OO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );
|
||||
|
||||
// During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor
|
||||
// During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor.
|
||||
if ( this.isReadOnly() && this.lookupMenu ) {
|
||||
this.closeLookupMenu();
|
||||
}
|
||||
|
|
@ -1021,8 +1033,8 @@ OO.inheritClass( OO.ui.TabPanelLayout, OO.ui.PanelLayout );
|
|||
/* Events */
|
||||
|
||||
/**
|
||||
* An 'active' event is emitted when the tab panel becomes active. Tab panels become active when they are
|
||||
* shown in a index layout that is configured to display only one tab panel at a time.
|
||||
* An 'active' event is emitted when the tab panel becomes active. Tab panels become active when
|
||||
* they are shown in a index layout that is configured to display only one tab panel at a time.
|
||||
*
|
||||
* @event active
|
||||
* @param {boolean} active Tab panel is active
|
||||
|
|
@ -1042,9 +1054,9 @@ OO.ui.TabPanelLayout.prototype.getName = function () {
|
|||
/**
|
||||
* Check if tab panel is active.
|
||||
*
|
||||
* Tab panels become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to
|
||||
* display only one tab panel at a time. Additional CSS is applied to the tab panel's tab item to reflect the
|
||||
* active state.
|
||||
* Tab panels become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is
|
||||
* configured to display only one tab panel at a time. Additional CSS is applied to the tab panel's
|
||||
* tab item to reflect the active state.
|
||||
*
|
||||
* @return {boolean} Tab panel is active
|
||||
*/
|
||||
|
|
@ -1056,7 +1068,8 @@ OO.ui.TabPanelLayout.prototype.isActive = function () {
|
|||
* Get tab item.
|
||||
*
|
||||
* The tab item allows users to access the tab panel from the index's tab
|
||||
* navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.
|
||||
* navigation. The tab item itself can be customized (with a label, level, etc.) using the
|
||||
* #setupTabItem method.
|
||||
*
|
||||
* @return {OO.ui.TabOptionWidget|null} Tab option widget
|
||||
*/
|
||||
|
|
@ -1126,13 +1139,14 @@ OO.ui.TabPanelLayout.prototype.setActive = function ( active ) {
|
|||
};
|
||||
|
||||
/**
|
||||
* PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
|
||||
* from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
|
||||
* rather extended to include the required content and functionality.
|
||||
* PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that
|
||||
* users can select and display from the booklet's optional
|
||||
* {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated
|
||||
* directly, rather extended to include the required content and functionality.
|
||||
*
|
||||
* Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline
|
||||
* item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See
|
||||
* {@link OO.ui.BookletLayout BookletLayout} for an example.
|
||||
* Each page must have a unique symbolic name, which is passed to the constructor. In addition, the
|
||||
* page's outline item is customized (with a label, outline level, etc.) using the
|
||||
* #setupOutlineItem method. See {@link OO.ui.BookletLayout BookletLayout} for an example.
|
||||
*
|
||||
* @class
|
||||
* @extends OO.ui.PanelLayout
|
||||
|
|
@ -1191,8 +1205,9 @@ OO.ui.PageLayout.prototype.getName = function () {
|
|||
/**
|
||||
* Check if page is active.
|
||||
*
|
||||
* Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display
|
||||
* only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.
|
||||
* Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is
|
||||
* configured to display only one page at a time. Additional CSS is applied to the page's outline
|
||||
* item to reflect the active state.
|
||||
*
|
||||
* @return {boolean} Page is active
|
||||
*/
|
||||
|
|
@ -1204,7 +1219,8 @@ OO.ui.PageLayout.prototype.isActive = function () {
|
|||
* Get outline item.
|
||||
*
|
||||
* The outline item allows users to access the page from the booklet's outline
|
||||
* navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.
|
||||
* navigation. The outline item itself can be customized (with a label, level, etc.) using the
|
||||
* #setupOutlineItem method.
|
||||
*
|
||||
* @return {OO.ui.OutlineOptionWidget|null} Outline option widget
|
||||
*/
|
||||
|
|
@ -1216,8 +1232,8 @@ OO.ui.PageLayout.prototype.getOutlineItem = function () {
|
|||
* Set or unset the outline item.
|
||||
*
|
||||
* Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,
|
||||
* or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline
|
||||
* level), use #setupOutlineItem instead of this method.
|
||||
* or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label
|
||||
* or outline level), use #setupOutlineItem instead of this method.
|
||||
*
|
||||
* @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear
|
||||
* @chainable
|
||||
|
|
@ -1234,9 +1250,9 @@ OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
|
|||
/**
|
||||
* Set up the outline item.
|
||||
*
|
||||
* Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset
|
||||
* the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use
|
||||
* the #setOutlineItem method instead.
|
||||
* Use this method to customize the outline item (e.g., to add a label or outline level). To set or
|
||||
* unset the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or
|
||||
* `null`), use the #setOutlineItem method instead.
|
||||
*
|
||||
* @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up
|
||||
* @chainable
|
||||
|
|
@ -1249,9 +1265,9 @@ OO.ui.PageLayout.prototype.setupOutlineItem = function () {
|
|||
/**
|
||||
* Set the page to its 'active' state.
|
||||
*
|
||||
* Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional
|
||||
* CSS is applied to the outline item to reflect the page's active state. Outside of the booklet
|
||||
* context, setting the active state on a page does nothing.
|
||||
* Pages become active when they are shown in a booklet layout that is configured to display only
|
||||
* one page at a time. Additional CSS is applied to the outline item to reflect the page's active
|
||||
* state. Outside of the booklet context, setting the active state on a page does nothing.
|
||||
*
|
||||
* @param {boolean} active Page is active
|
||||
* @fires active
|
||||
|
|
@ -1267,9 +1283,9 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
|
|||
};
|
||||
|
||||
/**
|
||||
* StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed
|
||||
* at a time, though the stack layout can also be configured to show all contained panels, one after another,
|
||||
* by setting the #continuous option to 'true'.
|
||||
* StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one
|
||||
* panel is displayed at a time, though the stack layout can also be configured to show all
|
||||
* contained panels, one after another, by setting the #continuous option to 'true'.
|
||||
*
|
||||
* @example
|
||||
* // A stack layout with two panels, configured to be displayed continuously
|
||||
|
|
@ -1296,7 +1312,8 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
|
|||
*
|
||||
* @constructor
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.
|
||||
* @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel
|
||||
* is displayed at a time.
|
||||
* @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.
|
||||
*/
|
||||
OO.ui.StackLayout = function OoUiStackLayout( config ) {
|
||||
|
|
@ -1430,9 +1447,9 @@ OO.ui.StackLayout.prototype.unsetCurrentItem = function () {
|
|||
/**
|
||||
* Add panel layouts to the stack layout.
|
||||
*
|
||||
* Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different
|
||||
* insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified
|
||||
* by the index.
|
||||
* Panels will be added to the end of the stack layout array unless the optional index parameter
|
||||
* specifies a different insertion point. Adding a panel that is already in the stack will move it
|
||||
* to the end of the array or the point specified by the index.
|
||||
*
|
||||
* @param {OO.ui.Layout[]} items Panels to add
|
||||
* @param {number} [index] Index of the insertion point
|
||||
|
|
@ -1456,8 +1473,8 @@ OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
|
|||
/**
|
||||
* Remove the specified panels from the stack layout.
|
||||
*
|
||||
* Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,
|
||||
* you may wish to use the #clearItems method instead.
|
||||
* Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all
|
||||
* panels, you may wish to use the #clearItems method instead.
|
||||
*
|
||||
* @param {OO.ui.Layout[]} items Panels to remove
|
||||
* @chainable
|
||||
|
|
@ -1573,13 +1590,22 @@ OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem )
|
|||
};
|
||||
|
||||
/**
|
||||
* MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned relative to the content (after, before, top, or bottom)
|
||||
* and its size is customized with the #menuSize config. The content area will fill all remaining space.
|
||||
* MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned
|
||||
* relative to the content (after, before, top, or bottom) and its size is customized with the
|
||||
* #menuSize config. The content area will fill all remaining space.
|
||||
*
|
||||
* @example
|
||||
* var menuLayout,
|
||||
* menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
|
||||
* contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
|
||||
* menuPanel = new OO.ui.PanelLayout( {
|
||||
* padded: true,
|
||||
* expanded: true,
|
||||
* scrollable: true
|
||||
* } ),
|
||||
* contentPanel = new OO.ui.PanelLayout( {
|
||||
* padded: true,
|
||||
* expanded: true,
|
||||
* scrollable: true
|
||||
* } ),
|
||||
* select = new OO.ui.SelectWidget( {
|
||||
* items: [
|
||||
* new OO.ui.OptionWidget( {
|
||||
|
|
@ -1607,12 +1633,16 @@ OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem )
|
|||
* position: 'top',
|
||||
* menuPanel: menuPanel,
|
||||
* contentPanel: contentPanel
|
||||
* } )
|
||||
* } );
|
||||
* menuLayout.$menu.append(
|
||||
* menuPanel.$element.append( '<b>Menu panel</b>', select.$element )
|
||||
* menuPanel.$element.append( '<b>Menu panel</b>', select.$element );
|
||||
* );
|
||||
* menuLayout.$content.append(
|
||||
* contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')
|
||||
* contentPanel.$element.append(
|
||||
* '<b>Content panel</b>',
|
||||
* '<p>Note that the menu is positioned relative to the content panel: ' +
|
||||
* 'top, bottom, after, before.</p>'
|
||||
* );
|
||||
* );
|
||||
* $( document.body ).append( menuLayout.$element );
|
||||
*
|
||||
|
|
@ -1672,11 +1702,9 @@ OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
|
|||
this.$content = $( '<div>' );
|
||||
|
||||
// Initialization
|
||||
this.$menu
|
||||
.addClass( 'oo-ui-menuLayout-menu' );
|
||||
this.$menu.addClass( 'oo-ui-menuLayout-menu' );
|
||||
this.$content.addClass( 'oo-ui-menuLayout-content' );
|
||||
this.$element
|
||||
.addClass( 'oo-ui-menuLayout' );
|
||||
this.$element.addClass( 'oo-ui-menuLayout' );
|
||||
if ( config.expanded ) {
|
||||
this.$element.addClass( 'oo-ui-menuLayout-expanded' );
|
||||
} else {
|
||||
|
|
@ -1824,7 +1852,8 @@ OO.ui.MenuLayout.prototype.resetScroll = function () {
|
|||
*
|
||||
* function PageOneLayout( name, config ) {
|
||||
* PageOneLayout.parent.call( this, name, config );
|
||||
* this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );
|
||||
* this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on ' +
|
||||
* 'the left)</p>' );
|
||||
* }
|
||||
* OO.inheritClass( PageOneLayout, OO.ui.PageLayout );
|
||||
* PageOneLayout.prototype.setupOutlineItem = function () {
|
||||
|
|
@ -1856,9 +1885,11 @@ OO.ui.MenuLayout.prototype.resetScroll = function () {
|
|||
* @constructor
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {boolean} [continuous=false] Show all pages, one after another
|
||||
* @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed. Disabled on mobile.
|
||||
* @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.
|
||||
* @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
|
||||
* @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is
|
||||
* displayed. Disabled on mobile.
|
||||
* @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the
|
||||
* pages of the booklet.
|
||||
* @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages.
|
||||
*/
|
||||
OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
|
||||
// Configuration initialization
|
||||
|
|
@ -1898,11 +1929,17 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
|
|||
this.toggleMenu( this.outlined );
|
||||
|
||||
// Events
|
||||
this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
|
||||
this.stackLayout.connect( this, {
|
||||
set: 'onStackLayoutSet'
|
||||
} );
|
||||
if ( this.outlined ) {
|
||||
this.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );
|
||||
this.outlineSelectWidget.connect( this, {
|
||||
select: 'onOutlineSelectWidgetSelect'
|
||||
} );
|
||||
this.scrolling = false;
|
||||
this.stackLayout.connect( this, { visibleItemChange: 'onStackLayoutVisibleItemChange' } );
|
||||
this.stackLayout.connect( this, {
|
||||
visibleItemChange: 'onStackLayoutVisibleItemChange'
|
||||
} );
|
||||
}
|
||||
if ( this.autoFocus ) {
|
||||
// Event 'focus' does not bubble, but 'focusin' does
|
||||
|
|
@ -1931,7 +1968,8 @@ OO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );
|
|||
/* Events */
|
||||
|
||||
/**
|
||||
* A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.
|
||||
* A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the
|
||||
* booklet layout.
|
||||
* @event set
|
||||
* @param {OO.ui.PageLayout} page Current page
|
||||
*/
|
||||
|
|
@ -2110,8 +2148,9 @@ OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
|
|||
this.outlineVisible = show;
|
||||
this.toggleMenu( show );
|
||||
if ( show && this.editable ) {
|
||||
// HACK: Kill dumb scrollbars when the sidebar stops animating, see T161798. Only necessary when
|
||||
// outline controls are present, delay matches transition on `.oo-ui-menuLayout-menu`.
|
||||
// HACK: Kill dumb scrollbars when the sidebar stops animating, see T161798.
|
||||
// Only necessary when outline controls are present, delay matches transition on
|
||||
// `.oo-ui-menuLayout-menu`.
|
||||
setTimeout( function () {
|
||||
OO.ui.Element.static.reconsiderScrollbars( booklet.outlinePanel.$element[ 0 ] );
|
||||
}, OO.ui.theme.getDialogTransitionDuration() );
|
||||
|
|
@ -2348,9 +2387,10 @@ OO.ui.BookletLayout.prototype.setPage = function ( name ) {
|
|||
if ( previousPage ) {
|
||||
previousPage.setActive( false );
|
||||
// Blur anything focused if the next page doesn't have anything focusable.
|
||||
// This is not needed if the next page has something focusable (because once it is focused
|
||||
// this blur happens automatically). If the layout is non-continuous, this check is
|
||||
// meaningless because the next page is not visible yet and thus can't hold focus.
|
||||
// This is not needed if the next page has something focusable (because once it is
|
||||
// focused this blur happens automatically). If the layout is non-continuous, this
|
||||
// check is meaningless because the next page is not visible yet and thus can't
|
||||
// hold focus.
|
||||
if (
|
||||
this.autoFocus &&
|
||||
!OO.ui.isMobile() &&
|
||||
|
|
@ -2367,8 +2407,9 @@ OO.ui.BookletLayout.prototype.setPage = function ( name ) {
|
|||
page.setActive( true );
|
||||
this.stackLayout.setItem( page );
|
||||
if ( !this.stackLayout.continuous && previousPage ) {
|
||||
// This should not be necessary, since any inputs on the previous page should have been
|
||||
// blurred when it was hidden, but browsers are not very consistent about this.
|
||||
// This should not be necessary, since any inputs on the previous page should have
|
||||
// been blurred when it was hidden, but browsers are not very consistent about
|
||||
// this.
|
||||
$focused = previousPage.$element.find( ':focus' );
|
||||
if ( $focused.length ) {
|
||||
$focused[ 0 ].blur();
|
||||
|
|
@ -2388,7 +2429,11 @@ OO.ui.BookletLayout.prototype.resetScroll = function () {
|
|||
// Parent method
|
||||
OO.ui.BookletLayout.parent.prototype.resetScroll.call( this );
|
||||
|
||||
if ( this.outlined && this.stackLayout.continuous && this.outlineSelectWidget.findFirstSelectableItem() ) {
|
||||
if (
|
||||
this.outlined &&
|
||||
this.stackLayout.continuous &&
|
||||
this.outlineSelectWidget.findFirstSelectableItem()
|
||||
) {
|
||||
this.scrolling = true;
|
||||
this.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );
|
||||
this.scrolling = false;
|
||||
|
|
@ -2412,10 +2457,10 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
|
|||
|
||||
/**
|
||||
* IndexLayouts contain {@link OO.ui.TabPanelLayout tab panel layouts} as well as
|
||||
* {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the tab panels and
|
||||
* select which one to display. By default, only one tab panel is displayed at a time. When a user
|
||||
* navigates to a new tab panel, the index layout automatically focuses on the first focusable element,
|
||||
* unless the default setting is changed.
|
||||
* {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the tab panels
|
||||
* and select which one to display. By default, only one tab panel is displayed at a time. When a
|
||||
* user navigates to a new tab panel, the index layout automatically focuses on the first focusable
|
||||
* element, unless the default setting is changed.
|
||||
*
|
||||
* TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication
|
||||
*
|
||||
|
|
@ -2447,7 +2492,8 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
|
|||
* @constructor
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {boolean} [continuous=false] Show all tab panels, one after another
|
||||
* @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is displayed. Disabled on mobile.
|
||||
* @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is
|
||||
* displayed. Disabled on mobile.
|
||||
*/
|
||||
OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
|
||||
// Configuration initialization
|
||||
|
|
@ -2477,10 +2523,14 @@ OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
|
|||
this.toggleMenu( true );
|
||||
|
||||
// Events
|
||||
this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
|
||||
this.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );
|
||||
this.stackLayout.connect( this, {
|
||||
set: 'onStackLayoutSet'
|
||||
} );
|
||||
this.tabSelectWidget.connect( this, {
|
||||
select: 'onTabSelectWidgetSelect'
|
||||
} );
|
||||
if ( this.autoFocus ) {
|
||||
// Event 'focus' does not bubble, but 'focusin' does
|
||||
// Event 'focus' does not bubble, but 'focusin' does.
|
||||
this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
|
||||
}
|
||||
|
||||
|
|
@ -2499,7 +2549,9 @@ OO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );
|
|||
/* Events */
|
||||
|
||||
/**
|
||||
* A 'set' event is emitted when a tab panel is {@link #setTabPanel set} to be displayed by the index layout.
|
||||
* A 'set' event is emitted when a tab panel is {@link #setTabPanel set} to be displayed by the
|
||||
* index layout.
|
||||
*
|
||||
* @event set
|
||||
* @param {OO.ui.TabPanelLayout} tabPanel Current tab panel
|
||||
*/
|
||||
|
|
@ -2535,7 +2587,8 @@ OO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {
|
|||
$target = $( e.target ).closest( '.oo-ui-tabPanelLayout' );
|
||||
for ( name in this.tabPanels ) {
|
||||
// Check for tab panel match, exclude current tab panel to find only tab panel changes
|
||||
if ( this.tabPanels[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentTabPanelName ) {
|
||||
if ( this.tabPanels[ name ].$element[ 0 ] === $target[ 0 ] &&
|
||||
name !== this.currentTabPanelName ) {
|
||||
this.setTabPanel( name );
|
||||
break;
|
||||
}
|
||||
|
|
@ -2585,7 +2638,11 @@ OO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {
|
|||
return;
|
||||
}
|
||||
// Only change the focus if is not already in the current page
|
||||
if ( !OO.ui.contains( tabPanel.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {
|
||||
if ( !OO.ui.contains(
|
||||
tabPanel.$element[ 0 ],
|
||||
this.getElementDocument().activeElement,
|
||||
true
|
||||
) ) {
|
||||
tabPanel.focus();
|
||||
}
|
||||
};
|
||||
|
|
@ -2681,7 +2738,7 @@ OO.ui.IndexLayout.prototype.getCurrentTabPanelName = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Add tab panels to the index layout
|
||||
* Add tab panels to the index layout.
|
||||
*
|
||||
* When tab panels are added with the same names as existing tab panels, the existing tab panels
|
||||
* will be automatically removed before the new tab panels are added.
|
||||
|
|
@ -2815,9 +2872,10 @@ OO.ui.IndexLayout.prototype.setTabPanel = function ( name ) {
|
|||
if ( previousTabPanel ) {
|
||||
previousTabPanel.setActive( false );
|
||||
// Blur anything focused if the next tab panel doesn't have anything focusable.
|
||||
// This is not needed if the next tab panel has something focusable (because once it is focused
|
||||
// this blur happens automatically). If the layout is non-continuous, this check is
|
||||
// meaningless because the next tab panel is not visible yet and thus can't hold focus.
|
||||
// This is not needed if the next tab panel has something focusable (because once
|
||||
// it is focused this blur happens automatically). If the layout is non-continuous,
|
||||
// this check is meaningless because the next tab panel is not visible yet and thus
|
||||
// can't hold focus.
|
||||
if (
|
||||
this.autoFocus &&
|
||||
!OO.ui.isMobile() &&
|
||||
|
|
@ -2834,8 +2892,9 @@ OO.ui.IndexLayout.prototype.setTabPanel = function ( name ) {
|
|||
tabPanel.setActive( true );
|
||||
this.stackLayout.setItem( tabPanel );
|
||||
if ( !this.stackLayout.continuous && previousTabPanel ) {
|
||||
// This should not be necessary, since any inputs on the previous tab panel should have been
|
||||
// blurred when it was hidden, but browsers are not very consistent about this.
|
||||
// This should not be necessary, since any inputs on the previous tab panel should
|
||||
// have been blurred when it was hidden, but browsers are not very consistent about
|
||||
// this.
|
||||
$focused = previousTabPanel.$element.find( ':focus' );
|
||||
if ( $focused.length ) {
|
||||
$focused[ 0 ].blur();
|
||||
|
|
@ -2940,7 +2999,8 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
|
|||
/**
|
||||
* ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a
|
||||
* Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be
|
||||
* configured with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators},
|
||||
* configured with {@link OO.ui.mixin.IconElement icons},
|
||||
* {@link OO.ui.mixin.IndicatorElement indicators},
|
||||
* {@link OO.ui.mixin.TitledElement titles}, {@link OO.ui.mixin.FlaggedElement styling flags},
|
||||
* and {@link OO.ui.mixin.LabelElement labels}. Please see
|
||||
* the [OOUI documentation][1] on MediaWiki for more information.
|
||||
|
|
@ -2981,15 +3041,21 @@ OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
|
|||
OO.ui.ToggleButtonWidget.parent.call( this, config );
|
||||
|
||||
// Mixin constructors
|
||||
OO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { active: this.active } ) );
|
||||
OO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, {
|
||||
active: this.active
|
||||
} ) );
|
||||
OO.ui.mixin.IconElement.call( this, config );
|
||||
OO.ui.mixin.IndicatorElement.call( this, config );
|
||||
OO.ui.mixin.LabelElement.call( this, config );
|
||||
OO.ui.mixin.FlaggedElement.call( this, config );
|
||||
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
|
||||
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, {
|
||||
$tabIndexed: this.$button
|
||||
} ) );
|
||||
|
||||
// Events
|
||||
this.connect( this, { click: 'onAction' } );
|
||||
this.connect( this, {
|
||||
click: 'onAction'
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.$button.append( this.$icon, this.$label, this.$indicator );
|
||||
|
|
@ -3178,7 +3244,8 @@ OO.ui.ToggleSwitchWidget.prototype.simulateLabelClick = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.
|
||||
* OutlineControlsWidget is a set of controls for an
|
||||
* {@link OO.ui.OutlineSelectWidget outline select widget}.
|
||||
* Controls include moving items up and down, removing items, and adding different kinds of items.
|
||||
*
|
||||
* **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**
|
||||
|
|
@ -3236,9 +3303,15 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
|
|||
add: 'onOutlineChange',
|
||||
remove: 'onOutlineChange'
|
||||
} );
|
||||
this.upButton.connect( this, { click: [ 'emit', 'move', -1 ] } );
|
||||
this.downButton.connect( this, { click: [ 'emit', 'move', 1 ] } );
|
||||
this.removeButton.connect( this, { click: [ 'emit', 'remove' ] } );
|
||||
this.upButton.connect( this, {
|
||||
click: [ 'emit', 'move', -1 ]
|
||||
} );
|
||||
this.downButton.connect( this, {
|
||||
click: [ 'emit', 'move', 1 ]
|
||||
} );
|
||||
this.removeButton.connect( this, {
|
||||
click: [ 'emit', 'remove' ]
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.$element.addClass( 'oo-ui-outlineControlsWidget' );
|
||||
|
|
@ -3334,7 +3407,8 @@ OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
|
|||
* @constructor
|
||||
* @param {Object} [config] Configuration options
|
||||
* @cfg {number} [level] Indentation level
|
||||
* @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.
|
||||
* @cfg {boolean} [movable] Allow modification from
|
||||
* {@link OO.ui.OutlineControlsWidget outline controls}.
|
||||
*/
|
||||
OO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {
|
||||
// Configuration initialization
|
||||
|
|
@ -3490,8 +3564,10 @@ OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
|
|||
};
|
||||
|
||||
/**
|
||||
* OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}
|
||||
* A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.
|
||||
* OutlineSelectWidget is a structured list that contains
|
||||
* {@link OO.ui.OutlineOptionWidget outline options}
|
||||
* A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls}
|
||||
* widget.
|
||||
*
|
||||
* **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**
|
||||
*
|
||||
|
|
@ -3775,8 +3851,9 @@ OO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {
|
|||
this.closeButton.setDisabled( this.isDisabled() );
|
||||
|
||||
// Events
|
||||
this.closeButton
|
||||
.connect( this, { click: 'remove' } );
|
||||
this.closeButton.connect( this, {
|
||||
click: 'remove'
|
||||
} );
|
||||
this.$element
|
||||
.on( 'click', this.select.bind( this ) )
|
||||
.on( 'keydown', this.onKeyDown.bind( this ) )
|
||||
|
|
@ -3934,7 +4011,11 @@ OO.ui.TagItemWidget.prototype.remove = function () {
|
|||
OO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {
|
||||
var movement;
|
||||
|
||||
if ( !this.isDisabled() && !this.isFixed() && ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) ) {
|
||||
if (
|
||||
!this.isDisabled() &&
|
||||
!this.isFixed() &&
|
||||
( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE )
|
||||
) {
|
||||
this.remove();
|
||||
return false;
|
||||
} else if ( e.keyCode === OO.ui.Keys.ENTER ) {
|
||||
|
|
@ -4004,12 +4085,13 @@ OO.ui.TagItemWidget.prototype.isValid = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}
|
||||
* that allows the user to add multiple values that are displayed in a tag area.
|
||||
* A basic tag multiselect widget, similar in concept to
|
||||
* {@link OO.ui.ComboBoxInputWidget combo box widget} that allows the user to add multiple values
|
||||
* that are displayed in a tag area.
|
||||
*
|
||||
* This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and
|
||||
* {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use
|
||||
* a menu and a popup respectively.
|
||||
* This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget}
|
||||
* and {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations
|
||||
* that use a menu and a popup respectively.
|
||||
*
|
||||
* @example
|
||||
* // A TagMultiselectWidget.
|
||||
|
|
@ -4064,8 +4146,7 @@ OO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {
|
|||
var inputEvents,
|
||||
rAF = window.requestAnimationFrame || setTimeout,
|
||||
widget = this,
|
||||
$tabFocus = $( '<span>' )
|
||||
.addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );
|
||||
$tabFocus = $( '<span>' ).addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );
|
||||
|
||||
config = config || {};
|
||||
|
||||
|
|
@ -4099,8 +4180,7 @@ OO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {
|
|||
this.height = null;
|
||||
this.valid = true;
|
||||
|
||||
this.$content = $( '<div>' )
|
||||
.addClass( 'oo-ui-tagMultiselectWidget-content' );
|
||||
this.$content = $( '<div>' ).addClass( 'oo-ui-tagMultiselectWidget-content' );
|
||||
this.$handle = $( '<div>' )
|
||||
.addClass( 'oo-ui-tagMultiselectWidget-handle' )
|
||||
.append(
|
||||
|
|
@ -4108,8 +4188,7 @@ OO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {
|
|||
this.$icon,
|
||||
this.$content
|
||||
.append(
|
||||
this.$group
|
||||
.addClass( 'oo-ui-tagMultiselectWidget-group' )
|
||||
this.$group.addClass( 'oo-ui-tagMultiselectWidget-group' )
|
||||
)
|
||||
);
|
||||
|
||||
|
|
@ -4295,7 +4374,7 @@ OO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {
|
|||
};
|
||||
|
||||
if ( !this.isDisabled() ) {
|
||||
// 'keypress' event is not triggered for Backspace
|
||||
// 'keypress' event is not triggered for Backspace key
|
||||
if ( e.keyCode === OO.ui.Keys.BACKSPACE ) {
|
||||
return this.doInputBackspace( e, withMetaKey );
|
||||
} else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {
|
||||
|
|
@ -4346,11 +4425,11 @@ OO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Perform an action after the enter key on the input
|
||||
* Perform an action after the Enter key on the input
|
||||
*
|
||||
* @param {jQuery.Event} e Event data
|
||||
* @param {boolean} [withMetaKey] Whether this key was pressed with
|
||||
* a meta key like 'ctrl'
|
||||
* a meta key like Control
|
||||
* @return {boolean} Whether to prevent defaults
|
||||
*/
|
||||
OO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {
|
||||
|
|
@ -4359,11 +4438,11 @@ OO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Perform an action responding to the enter key on the input
|
||||
* Perform an action responding to the Enter key on the input
|
||||
*
|
||||
* @param {jQuery.Event} e Event data
|
||||
* @param {boolean} [withMetaKey] Whether this key was pressed with
|
||||
* a meta key like 'ctrl'
|
||||
* a meta key like Control
|
||||
* @return {boolean} Whether to prevent defaults
|
||||
*/
|
||||
OO.ui.TagMultiselectWidget.prototype.doInputBackspace = function ( e, withMetaKey ) {
|
||||
|
|
@ -4392,7 +4471,7 @@ OO.ui.TagMultiselectWidget.prototype.doInputBackspace = function ( e, withMetaKe
|
|||
};
|
||||
|
||||
/**
|
||||
* Perform an action after the escape key on the input
|
||||
* Perform an action after the Escape key on the input
|
||||
*
|
||||
* @param {jQuery.Event} e Event data
|
||||
*/
|
||||
|
|
@ -4401,14 +4480,14 @@ OO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Perform an action after the arrow key on the input, select the previous
|
||||
* Perform an action after the Left/Right arrow key on the input, select the previous
|
||||
* item from the input.
|
||||
* See #getPreviousItem
|
||||
*
|
||||
* @param {jQuery.Event} e Event data
|
||||
* @param {string} direction Direction of the movement; forwards or backwards
|
||||
* @param {boolean} [withMetaKey] Whether this key was pressed with
|
||||
* a meta key like 'ctrl'
|
||||
* a meta key like Control
|
||||
*/
|
||||
OO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( e, direction ) {
|
||||
if (
|
||||
|
|
@ -4836,8 +4915,8 @@ OO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {
|
|||
$lastItem.position().left;
|
||||
}
|
||||
|
||||
// Some safety margin for sanity, because I *really* don't feel like finding out where the few
|
||||
// pixels this is off by are coming from.
|
||||
// Some safety margin for sanity, because I *really* don't feel like finding out where the
|
||||
// few pixels this is off by are coming from.
|
||||
bestWidth -= 13;
|
||||
if ( contentWidth > bestWidth ) {
|
||||
// This will result in the input getting shifted to the next line
|
||||
|
|
@ -4906,8 +4985,9 @@ OO.ui.TagMultiselectWidget.prototype.isValid = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended
|
||||
* to use a popup. The popup can be configured to have a default input to insert values into the widget.
|
||||
* PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget}
|
||||
* intended to use a popup. The popup can be configured to have a default input to insert values
|
||||
* into the widget.
|
||||
*
|
||||
* @example
|
||||
* // A PopupTagMultiselectWidget.
|
||||
|
|
@ -4944,9 +5024,12 @@ OO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config
|
|||
config = config || {};
|
||||
|
||||
// Parent constructor
|
||||
OO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );
|
||||
OO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( {
|
||||
inputPosition: 'none'
|
||||
}, config ) );
|
||||
|
||||
this.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
this.$overlay = ( config.$overlay === true ?
|
||||
OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
|
||||
if ( !config.popup ) {
|
||||
// For the default base implementation, we give a popup
|
||||
|
|
@ -4987,9 +5070,10 @@ OO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config
|
|||
|
||||
// Events
|
||||
this.on( 'resize', this.popup.updateDimensions.bind( this.popup ) );
|
||||
this.popup.connect( this, { toggle: 'onPopupToggle' } );
|
||||
this.$tabIndexed
|
||||
.on( 'focus', this.onFocus.bind( this ) );
|
||||
this.popup.connect( this, {
|
||||
toggle: 'onPopupToggle'
|
||||
} );
|
||||
this.$tabIndexed.on( 'focus', this.onFocus.bind( this ) );
|
||||
|
||||
// Initialize
|
||||
this.$element
|
||||
|
|
@ -5067,8 +5151,8 @@ OO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data,
|
|||
};
|
||||
|
||||
/**
|
||||
* MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended
|
||||
* to use a menu of selectable options.
|
||||
* MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget}
|
||||
* intended to use a menu of selectable options.
|
||||
*
|
||||
* @example
|
||||
* // A basic MenuTagMultiselectWidget.
|
||||
|
|
@ -5100,13 +5184,16 @@ OO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config )
|
|||
// Parent constructor
|
||||
OO.ui.MenuTagMultiselectWidget.parent.call( this, config );
|
||||
|
||||
this.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
this.clearInputOnChoose = config.clearInputOnChoose === undefined || !!config.clearInputOnChoose;
|
||||
this.$overlay = ( config.$overlay === true ?
|
||||
OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;
|
||||
this.clearInputOnChoose = config.clearInputOnChoose === undefined ||
|
||||
!!config.clearInputOnChoose;
|
||||
this.menu = this.createMenuWidget( $.extend( {
|
||||
widget: this,
|
||||
input: this.hasInput ? this.input : null,
|
||||
$input: this.hasInput ? this.input.$input : null,
|
||||
filterFromInput: !!this.hasInput,
|
||||
highlightOnFilter: true,
|
||||
$autoCloseIgnore: this.hasInput ?
|
||||
this.input.$element : $( [] ),
|
||||
$floatableContainer: this.hasInput && this.inputPosition === 'outline' ?
|
||||
|
|
@ -5122,20 +5209,22 @@ OO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config )
|
|||
toggle: 'onMenuToggle'
|
||||
} );
|
||||
if ( this.hasInput ) {
|
||||
this.input.connect( this, { change: 'onInputChange' } );
|
||||
this.input.connect( this, {
|
||||
change: 'onInputChange'
|
||||
} );
|
||||
}
|
||||
this.connect( this, { resize: 'onResize' } );
|
||||
this.connect( this, {
|
||||
resize: 'onResize'
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.$overlay
|
||||
.append( this.menu.$element );
|
||||
this.$element
|
||||
.addClass( 'oo-ui-menuTagMultiselectWidget' );
|
||||
this.$overlay.append( this.menu.$element );
|
||||
this.$element.addClass( 'oo-ui-menuTagMultiselectWidget' );
|
||||
// Remove MenuSelectWidget's generic focus owner ARIA attribute
|
||||
// TODO: Should this widget have a `role` that is compatible with this attribute?
|
||||
this.menu.$focusOwner.removeAttr( 'aria-expanded' );
|
||||
// TagMultiselectWidget already does this, but it doesn't work right because this.menu is not yet
|
||||
// set up while the parent constructor runs, and #getAllowedValues rejects everything.
|
||||
// TagMultiselectWidget already does this, but it doesn't work right because this.menu is
|
||||
// not yet set up while the parent constructor runs, and #getAllowedValues rejects everything.
|
||||
if ( config.selected ) {
|
||||
this.setValue( config.selected );
|
||||
}
|
||||
|
|
@ -5180,7 +5269,6 @@ OO.ui.MenuTagMultiselectWidget.prototype.onInputBlur = function () {
|
|||
*/
|
||||
OO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {
|
||||
this.menu.toggle( true );
|
||||
this.initializeMenuSelection();
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -5205,8 +5293,6 @@ OO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
|
|||
if ( !isVisible ) {
|
||||
this.menu.selectItem( null );
|
||||
this.menu.highlightItem( null );
|
||||
} else {
|
||||
this.initializeMenuSelection();
|
||||
}
|
||||
setTimeout( function () {
|
||||
// Remove MenuSelectWidget's generic focus owner ARIA attribute
|
||||
|
|
@ -5404,9 +5490,10 @@ OO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {
|
|||
* @cfg {string} [placeholder] Text to display when no file is selected.
|
||||
* @cfg {string} [notsupported] Text to display when file support is missing in the browser.
|
||||
* @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.
|
||||
* @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.
|
||||
* @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be
|
||||
* true.
|
||||
* @cfg {number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a
|
||||
* preview (for performance)
|
||||
* preview (for performance).
|
||||
*/
|
||||
OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
|
||||
var dragHandler;
|
||||
|
|
@ -5427,7 +5514,9 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
|
|||
// Mixin constructors
|
||||
OO.ui.mixin.IconElement.call( this, config );
|
||||
OO.ui.mixin.IndicatorElement.call( this, config );
|
||||
OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );
|
||||
OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, {
|
||||
$pending: this.$info
|
||||
} ) );
|
||||
OO.ui.mixin.LabelElement.call( this, config );
|
||||
OO.ui.mixin.TitledElement.call( this, config );
|
||||
|
||||
|
|
@ -5912,10 +6001,12 @@ OO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {
|
|||
};
|
||||
|
||||
/**
|
||||
* SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,
|
||||
* and a menu of search results, which is displayed beneath the query
|
||||
* field. Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible to the user.
|
||||
* Users can choose an item from the menu or type a query into the text field to search for a matching result item.
|
||||
* SearchWidgets combine a {@link OO.ui.TextInputWidget text input field},
|
||||
* where users can type a search query, and a menu of search results,
|
||||
* which is displayed beneath the query field.
|
||||
* Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible
|
||||
* to the user. Users can choose an item from the menu or type a query into the text field to
|
||||
* search for a matching result item.
|
||||
* In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.
|
||||
*
|
||||
* Each time the query is changed, the search result menu is cleared and repopulated. Please see
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:07Z
|
||||
* Date: 2019-03-07T09:14:18Z
|
||||
*/
|
||||
( function ( OO ) {
|
||||
|
||||
|
|
@ -36,10 +36,11 @@ OO.ui.WikimediaUITheme.prototype.getElementClasses = function ( element ) {
|
|||
// Parent method
|
||||
var variant, isFramed, isActive, isToolOrGroup,
|
||||
variants = {
|
||||
warning: false,
|
||||
invert: false,
|
||||
progressive: false,
|
||||
destructive: false
|
||||
destructive: false,
|
||||
error: false,
|
||||
warning: false
|
||||
},
|
||||
// Parent method
|
||||
classes = OO.ui.WikimediaUITheme.parent.prototype.getElementClasses.call( this, element );
|
||||
|
|
@ -54,22 +55,24 @@ OO.ui.WikimediaUITheme.prototype.getElementClasses = function ( element ) {
|
|||
isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
|
||||
isActive = element.supports( [ 'isActive' ] ) && element.isActive();
|
||||
isToolOrGroup =
|
||||
// Check if the class exists, as classes that are not in the 'core' module may not be loaded
|
||||
// Check if the class exists, as classes that are not in the 'core' module may
|
||||
// not be loaded.
|
||||
( OO.ui.Tool && element instanceof OO.ui.Tool ) ||
|
||||
( OO.ui.ToolGroup && element instanceof OO.ui.ToolGroup );
|
||||
if (
|
||||
// Button with a dark background
|
||||
// Button with a dark background.
|
||||
isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ||
|
||||
// Toolbar with a dark background
|
||||
// Toolbar with a dark background.
|
||||
isToolOrGroup && element.hasFlag( 'primary' )
|
||||
) {
|
||||
// … use white icon / indicator, regardless of other flags
|
||||
variants.invert = true;
|
||||
} else if ( !isFramed && element.isDisabled() ) {
|
||||
// Frameless disabled button, always use black icon / indicator regardless of other flags
|
||||
// Frameless disabled button, always use black icon / indicator regardless of
|
||||
// other flags.
|
||||
variants.invert = false;
|
||||
} else if ( !element.isDisabled() ) {
|
||||
// Any other kind of button, use the right colored icon / indicator if available
|
||||
// Any other kind of button, use the right colored icon / indicator if available.
|
||||
variants.progressive = element.hasFlag( 'progressive' ) ||
|
||||
// Active tools/toolgroups
|
||||
( isToolOrGroup && isActive ) ||
|
||||
|
|
@ -77,13 +80,18 @@ OO.ui.WikimediaUITheme.prototype.getElementClasses = function ( element ) {
|
|||
(
|
||||
(
|
||||
element instanceof OO.ui.MenuOptionWidget ||
|
||||
// Check if the class exists, as classes that are not in the 'core' module may not be loaded
|
||||
( OO.ui.OutlineOptionWidget && element instanceof OO.ui.OutlineOptionWidget )
|
||||
// Check if the class exists, as classes that are not in the 'core' module
|
||||
// may not be loaded.
|
||||
(
|
||||
OO.ui.OutlineOptionWidget &&
|
||||
element instanceof OO.ui.OutlineOptionWidget
|
||||
)
|
||||
) &&
|
||||
( element.isPressed() || element.isSelected() )
|
||||
);
|
||||
|
||||
variants.destructive = element.hasFlag( 'destructive' );
|
||||
variants.error = element.hasFlag( 'error' );
|
||||
variants.warning = element.hasFlag( 'warning' );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
.oo-ui-actionWidget.oo-ui-pendingElement-pending {
|
||||
background-image: /* @embed */ url(themes/wikimediaui/images/textures/pending.gif);
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:15Z
|
||||
* Date: 2019-03-07T09:14:26Z
|
||||
*/
|
||||
|
||||
.oo-ui-window {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* OOUI v0.30.3
|
||||
* OOUI v0.30.4
|
||||
* https://www.mediawiki.org/wiki/OOUI
|
||||
*
|
||||
* Copyright 2011–2019 OOUI Team and other contributors.
|
||||
* Released under the MIT license
|
||||
* http://oojs.mit-license.org
|
||||
*
|
||||
* Date: 2019-02-21T10:57:07Z
|
||||
* Date: 2019-03-07T09:14:18Z
|
||||
*/
|
||||
( function ( OO ) {
|
||||
|
||||
|
|
@ -85,8 +85,8 @@ OO.ui.ActionWidget.prototype.getAction = function () {
|
|||
* Get the symbolic name of the mode or modes for which the action is configured to be available.
|
||||
*
|
||||
* The current mode is set with the action set's {@link OO.ui.ActionSet#setMode setMode} method.
|
||||
* Only actions that are configured to be available in the current mode will be visible. All other actions
|
||||
* are hidden.
|
||||
* Only actions that are configured to be available in the current mode will be visible.
|
||||
* All other actions are hidden.
|
||||
*
|
||||
* @return {string[]}
|
||||
*/
|
||||
|
|
@ -96,13 +96,16 @@ OO.ui.ActionWidget.prototype.getModes = function () {
|
|||
|
||||
/* eslint-disable no-unused-vars */
|
||||
/**
|
||||
* ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that comprise them.
|
||||
* ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that
|
||||
* comprise them.
|
||||
* Actions can be made available for specific contexts (modes) and circumstances
|
||||
* (abilities). Action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
|
||||
*
|
||||
* ActionSets contain two types of actions:
|
||||
*
|
||||
* - Special: Special actions are the first visible actions with special flags, such as 'safe' and 'primary', the default special flags. Additional special flags can be configured in subclasses with the static #specialFlags property.
|
||||
* - Special: Special actions are the first visible actions with special flags, such as 'safe' and
|
||||
* 'primary', the default special flags. Additional special flags can be configured in subclasses
|
||||
* with the static #specialFlags property.
|
||||
* - Other: Other actions include all non-special visible actions.
|
||||
*
|
||||
* See the [OOUI documentation on MediaWiki][1] for more information.
|
||||
|
|
@ -117,7 +120,10 @@ OO.ui.ActionWidget.prototype.getModes = function () {
|
|||
* MyProcessDialog.static.name = 'myProcessDialog';
|
||||
* // An action set that uses modes ('edit' and 'help' mode, in this example).
|
||||
* MyProcessDialog.static.actions = [
|
||||
* { action: 'continue', modes: 'edit', label: 'Continue', flags: [ 'primary', 'progressive' ] },
|
||||
* { action: 'continue', modes: 'edit', label: 'Continue',
|
||||
* flags: [
|
||||
* 'primary', 'progressive'
|
||||
* ] },
|
||||
* { action: 'help', modes: 'edit', label: 'Help' },
|
||||
* { modes: 'edit', label: 'Cancel', flags: 'safe' },
|
||||
* { action: 'back', modes: 'help', label: 'Back', flags: 'safe' }
|
||||
|
|
@ -126,9 +132,13 @@ OO.ui.ActionWidget.prototype.getModes = function () {
|
|||
* MyProcessDialog.prototype.initialize = function () {
|
||||
* MyProcessDialog.parent.prototype.initialize.apply( this, arguments );
|
||||
* this.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
|
||||
* this.panel1.$element.append( '<p>This dialog uses an action set (continue, help, cancel, back) configured with modes. This is edit mode. Click \'help\' to see help mode.</p>' );
|
||||
* this.panel1.$element.append( '<p>This dialog uses an action set (continue, help, ' +
|
||||
* 'cancel, back) configured with modes. This is edit mode. Click \'help\' to see ' +
|
||||
* 'help mode.</p>' );
|
||||
* this.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
|
||||
* this.panel2.$element.append( '<p>This is help mode. Only the \'back\' action widget is configured to be visible here. Click \'back\' to return to \'edit\' mode.</p>' );
|
||||
* this.panel2.$element.append( '<p>This is help mode. Only the \'back\' action widget ' +
|
||||
* 'is configured to be visible here. Click \'back\' to return to \'edit\' mode.' +
|
||||
* '</p>' );
|
||||
* this.stackLayout = new OO.ui.StackLayout( {
|
||||
* items: [ this.panel1, this.panel2 ]
|
||||
* } );
|
||||
|
|
@ -249,7 +259,8 @@ OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
|
|||
* @event change
|
||||
*
|
||||
* A 'change' event is emitted when actions are {@link #method-add added}, {@link #clear cleared},
|
||||
* or {@link #method-remove removed} from the action set or when the {@link #setMode mode} is changed.
|
||||
* or {@link #method-remove removed} from the action set or when the {@link #setMode mode}
|
||||
* is changed.
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -352,7 +363,8 @@ OO.ui.ActionSet.prototype.get = function ( filters ) {
|
|||
/**
|
||||
* Get 'special' actions.
|
||||
*
|
||||
* Special actions are the first visible action widgets with special flags, such as 'safe' and 'primary'.
|
||||
* Special actions are the first visible action widgets with special flags, such as 'safe' and
|
||||
* 'primary'.
|
||||
* Special flags can be configured in subclasses by changing the static #specialFlags property.
|
||||
*
|
||||
* @return {OO.ui.ActionWidget[]|null} 'Special' action widgets.
|
||||
|
|
@ -601,16 +613,17 @@ OO.ui.ActionSet.prototype.organize = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Errors contain a required message (either a string or jQuery selection) that is used to describe what went wrong
|
||||
* in a {@link OO.ui.Process process}. The error's #recoverable and #warning configurations are used to customize the
|
||||
* appearance and functionality of the error interface.
|
||||
* Errors contain a required message (either a string or jQuery selection) that is used to describe
|
||||
* what went wrong in a {@link OO.ui.Process process}. The error's #recoverable and #warning
|
||||
* configurations are used to customize the appearance and functionality of the error interface.
|
||||
*
|
||||
* The basic error interface contains a formatted error message as well as two buttons: 'Dismiss' and 'Try again' (i.e., the error
|
||||
* is 'recoverable' by default). If the error is not recoverable, the 'Try again' button will not be rendered and the widget
|
||||
* that initiated the failed process will be disabled.
|
||||
* The basic error interface contains a formatted error message as well as two buttons: 'Dismiss'
|
||||
* and 'Try again' (i.e., the error is 'recoverable' by default). If the error is not recoverable,
|
||||
* the 'Try again' button will not be rendered and the widget that initiated the failed process will
|
||||
* be disabled.
|
||||
*
|
||||
* If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button, which will try the
|
||||
* process again.
|
||||
* If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button,
|
||||
* which will try the process again.
|
||||
*
|
||||
* For an example of error interfaces, please see the [OOUI documentation on MediaWiki][1].
|
||||
*
|
||||
|
|
@ -625,8 +638,8 @@ OO.ui.ActionSet.prototype.organize = function () {
|
|||
* By default, errors are recoverable, and users can try the process again.
|
||||
* @cfg {boolean} [warning=false] Error is a warning.
|
||||
* If the error is a warning, the error interface will include a
|
||||
* 'Dismiss' and a 'Continue' button. It is the responsibility of the developer to ensure that the warning
|
||||
* is not triggered a second time if the user chooses to continue.
|
||||
* 'Dismiss' and a 'Continue' button. It is the responsibility of the developer to ensure that the
|
||||
* warning is not triggered a second time if the user chooses to continue.
|
||||
*/
|
||||
OO.ui.Error = function OoUiError( message, config ) {
|
||||
// Allow passing positional parameters inside the config object
|
||||
|
|
@ -693,27 +706,28 @@ OO.ui.Error.prototype.getMessageText = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* A Process is a list of steps that are called in sequence. The step can be a number, a jQuery promise,
|
||||
* or a function:
|
||||
* A Process is a list of steps that are called in sequence. The step can be a number, a
|
||||
* jQuery promise, or a function:
|
||||
*
|
||||
* - **number**: the process will wait for the specified number of milliseconds before proceeding.
|
||||
* - **promise**: the process will continue to the next step when the promise is successfully resolved
|
||||
* or stop if the promise is rejected.
|
||||
* - **function**: the process will execute the function. The process will stop if the function returns
|
||||
* either a boolean `false` or a promise that is rejected; if the function returns a number, the process
|
||||
* will wait for that number of milliseconds before proceeding.
|
||||
* - **promise**: the process will continue to the next step when the promise is successfully
|
||||
* resolved or stop if the promise is rejected.
|
||||
* - **function**: the process will execute the function. The process will stop if the function
|
||||
* returns either a boolean `false` or a promise that is rejected; if the function returns a
|
||||
* number, the process will wait for that number of milliseconds before proceeding.
|
||||
*
|
||||
* If the process fails, an {@link OO.ui.Error error} is generated. Depending on how the error is
|
||||
* configured, users can dismiss the error and try the process again, or not. If a process is stopped,
|
||||
* its remaining steps will not be performed.
|
||||
* configured, users can dismiss the error and try the process again, or not. If a process is
|
||||
* stopped, its remaining steps will not be performed.
|
||||
*
|
||||
* @class
|
||||
*
|
||||
* @constructor
|
||||
* @param {number|jQuery.Promise|Function} step Number of milliseconds to wait before proceeding, promise
|
||||
* that must be resolved before proceeding, or a function to execute. See #createStep for more information. see #createStep for more information
|
||||
* @param {Object} [context=null] Execution context of the function. The context is ignored if the step is
|
||||
* a number or promise.
|
||||
* @param {number|jQuery.Promise|Function} step Number of milliseconds to wait before proceeding,
|
||||
* promise that must be resolved before proceeding, or a function to execute. See #createStep for
|
||||
* more information. See #createStep for more information.
|
||||
* @param {Object} [context=null] Execution context of the function. The context is ignored if the
|
||||
* step is a number or promise.
|
||||
*/
|
||||
OO.ui.Process = function ( step, context ) {
|
||||
// Properties
|
||||
|
|
@ -735,8 +749,8 @@ OO.initClass( OO.ui.Process );
|
|||
* Start the process.
|
||||
*
|
||||
* @return {jQuery.Promise} Promise that is resolved when all steps have successfully completed.
|
||||
* If any of the steps return a promise that is rejected or a boolean false, this promise is rejected
|
||||
* and any remaining steps are not performed.
|
||||
* If any of the steps return a promise that is rejected or a boolean false, this promise is
|
||||
* rejected and any remaining steps are not performed.
|
||||
*/
|
||||
OO.ui.Process.prototype.execute = function () {
|
||||
var i, len, promise;
|
||||
|
|
@ -958,9 +972,10 @@ OO.ui.WindowInstance.prototype.isClosed = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Window managers are used to open and close {@link OO.ui.Window windows} and control their presentation.
|
||||
* Managed windows are mutually exclusive. If a new window is opened while a current window is opening
|
||||
* or is opened, the current window will be closed and any ongoing {@link OO.ui.Process process} will be cancelled. Windows
|
||||
* Window managers are used to open and close {@link OO.ui.Window windows} and control their
|
||||
* presentation. Managed windows are mutually exclusive. If a new window is opened while a current
|
||||
* window is opening or is opened, the current window will be closed and any on-going
|
||||
* {@link OO.ui.Process process} will be cancelled. Windows
|
||||
* themselves are persistent and—rather than being torn down when closed—can be repopulated with the
|
||||
* pertinent data and reused.
|
||||
*
|
||||
|
|
@ -971,11 +986,13 @@ OO.ui.WindowInstance.prototype.isClosed = function () {
|
|||
* {@link OO.ui.Window#open open} method is used, and the window manager begins to open the window.
|
||||
*
|
||||
* - an `opening` event is emitted with an `opening` promise
|
||||
* - the #getSetupDelay method is called and the returned value is used to time a pause in execution before the
|
||||
* window’s {@link OO.ui.Window#method-setup setup} method is called which executes OO.ui.Window#getSetupProcess.
|
||||
* - the #getSetupDelay method is called and the returned value is used to time a pause in execution
|
||||
* before the window’s {@link OO.ui.Window#method-setup setup} method is called which executes
|
||||
* OO.ui.Window#getSetupProcess.
|
||||
* - a `setup` progress notification is emitted from the `opening` promise
|
||||
* - the #getReadyDelay method is called the returned value is used to time a pause in execution before the
|
||||
* window’s {@link OO.ui.Window#method-ready ready} method is called which executes OO.ui.Window#getReadyProcess.
|
||||
* - the #getReadyDelay method is called the returned value is used to time a pause in execution
|
||||
* before the window’s {@link OO.ui.Window#method-ready ready} method is called which executes
|
||||
* OO.ui.Window#getReadyProcess.
|
||||
* - a `ready` progress notification is emitted from the `opening` promise
|
||||
* - the `opening` promise is resolved with an `opened` promise
|
||||
*
|
||||
|
|
@ -986,13 +1003,13 @@ OO.ui.WindowInstance.prototype.isClosed = function () {
|
|||
* to close the window.
|
||||
*
|
||||
* - the `opened` promise is resolved with `closing` promise and a `closing` event is emitted
|
||||
* - the #getHoldDelay method is called and the returned value is used to time a pause in execution before
|
||||
* the window's {@link OO.ui.Window#getHoldProcess getHoldProcess} method is called on the
|
||||
* - the #getHoldDelay method is called and the returned value is used to time a pause in execution
|
||||
* before the window's {@link OO.ui.Window#getHoldProcess getHoldProcess} method is called on the
|
||||
* window and its result executed
|
||||
* - a `hold` progress notification is emitted from the `closing` promise
|
||||
* - the #getTeardownDelay() method is called and the returned value is used to time a pause in execution before
|
||||
* the window's {@link OO.ui.Window#getTeardownProcess getTeardownProcess} method is called on the
|
||||
* window and its result executed
|
||||
* - the #getTeardownDelay() method is called and the returned value is used to time a pause in
|
||||
* execution before the window's {@link OO.ui.Window#getTeardownProcess getTeardownProcess} method
|
||||
* is called on the window and its result executed
|
||||
* - a `teardown` progress notification is emitted from the `closing` promise
|
||||
* - the `closing` promise is resolved. The window is now closed
|
||||
*
|
||||
|
|
@ -1059,9 +1076,10 @@ OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
|
|||
*
|
||||
* @event opening
|
||||
* @param {OO.ui.Window} win Window that's being opened
|
||||
* @param {jQuery.Promise} opened A promise resolved with a value when the window is opened successfully.
|
||||
* This promise also emits `setup` and `ready` notifications. When this promise is resolved, the first
|
||||
* argument of the value is an 'closed' promise, the second argument is the opening data.
|
||||
* @param {jQuery.Promise} opened A promise resolved with a value when the window is opened
|
||||
* successfully. This promise also emits `setup` and `ready` notifications. When this promise is
|
||||
* resolved, the first argument of the value is an 'closed' promise, the second argument is the
|
||||
* opening data.
|
||||
* @param {Object} data Window opening data
|
||||
*/
|
||||
|
||||
|
|
@ -1070,9 +1088,9 @@ OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
|
|||
*
|
||||
* @event closing
|
||||
* @param {OO.ui.Window} win Window that's being closed
|
||||
* @param {jQuery.Promise} closed A promise resolved with a value when the window is closed successfully.
|
||||
* This promise also emits `hold` and `teardown` notifications. When this promise is resolved, the first
|
||||
* argument of its value is the closing data.
|
||||
* @param {jQuery.Promise} closed A promise resolved with a value when the window is closed
|
||||
* successfully. This promise also emits `hold` and `teardown` notifications. When this promise is
|
||||
* resolved, the first argument of its value is the closing data.
|
||||
* @param {Object} data Window closing data
|
||||
*/
|
||||
|
||||
|
|
@ -1149,7 +1167,7 @@ OO.ui.WindowManager.prototype.afterWindowResize = function () {
|
|||
|
||||
// Restore focus to the original element if it has changed.
|
||||
// When a layout change is made on resize inputs lose focus
|
||||
// on Android (Chrome and Firefox). See T162127.
|
||||
// on Android (Chrome and Firefox), see T162127.
|
||||
if ( currentFocusedElement !== document.activeElement ) {
|
||||
currentFocusedElement.focus();
|
||||
}
|
||||
|
|
@ -1219,7 +1237,8 @@ OO.ui.WindowManager.prototype.getSetupDelay = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Get the number of milliseconds to wait after setup has finished before executing the ‘ready’ process.
|
||||
* Get the number of milliseconds to wait after setup has finished before executing the ‘ready’
|
||||
* process.
|
||||
*
|
||||
* @param {OO.ui.Window} win Window being opened
|
||||
* @param {Object} [data] Window opening data
|
||||
|
|
@ -1230,7 +1249,8 @@ OO.ui.WindowManager.prototype.getReadyDelay = function () {
|
|||
};
|
||||
|
||||
/**
|
||||
* Get the number of milliseconds to wait after closing has begun before executing the 'hold' process.
|
||||
* Get the number of milliseconds to wait after closing has begun before executing the 'hold'
|
||||
* process.
|
||||
*
|
||||
* @param {OO.ui.Window} win Window being closed
|
||||
* @param {Object} [data] Window closing data
|
||||
|
|
@ -1255,9 +1275,9 @@ OO.ui.WindowManager.prototype.getTeardownDelay = function () {
|
|||
/**
|
||||
* Get a window by its symbolic name.
|
||||
*
|
||||
* If the window is not yet instantiated and its symbolic name is recognized by a factory, it will be
|
||||
* instantiated and added to the window manager automatically. Please see the [OOUI documentation on MediaWiki][3]
|
||||
* for more information about using factories.
|
||||
* If the window is not yet instantiated and its symbolic name is recognized by a factory, it will
|
||||
* be instantiated and added to the window manager automatically. Please see the [OOUI documentation
|
||||
* on MediaWiki][3] for more information about using factories.
|
||||
* [3]: https://www.mediawiki.org/wiki/OOUI/Windows/Window_managers
|
||||
*
|
||||
* @param {string} name Symbolic name of the window
|
||||
|
|
@ -1307,12 +1327,12 @@ OO.ui.WindowManager.prototype.getCurrentWindow = function () {
|
|||
*
|
||||
* @param {OO.ui.Window|string} win Window object or symbolic name of window to open
|
||||
* @param {Object} [data] Window opening data
|
||||
* @param {jQuery|null} [data.$returnFocusTo] Element to which the window will return focus when closed.
|
||||
* Defaults the current activeElement. If set to null, focus isn't changed on close.
|
||||
* @param {jQuery|null} [data.$returnFocusTo] Element to which the window will return focus when
|
||||
* closed. Defaults the current activeElement. If set to null, focus isn't changed on close.
|
||||
* @return {OO.ui.WindowInstance} A lifecycle object representing this particular
|
||||
* opening of the window. For backwards-compatibility, then object is also a Thenable that is resolved
|
||||
* when the window is done opening, with nested promise for when closing starts. This behaviour
|
||||
* is deprecated and is not compatible with jQuery 3. See T163510.
|
||||
* opening of the window. For backwards-compatibility, then object is also a Thenable that is
|
||||
* resolved when the window is done opening, with nested promise for when closing starts. This
|
||||
* behaviour is deprecated and is not compatible with jQuery 3, see T163510.
|
||||
* @fires opening
|
||||
*/
|
||||
OO.ui.WindowManager.prototype.openWindow = function ( win, data, lifecycle, compatOpening ) {
|
||||
|
|
@ -1376,7 +1396,9 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data, lifecycle, comp
|
|||
manager.toggleGlobalEvents( true );
|
||||
manager.toggleAriaIsolation( true );
|
||||
}
|
||||
manager.$returnFocusTo = data.$returnFocusTo !== undefined ? data.$returnFocusTo : $( document.activeElement );
|
||||
manager.$returnFocusTo = data.$returnFocusTo !== undefined ?
|
||||
data.$returnFocusTo :
|
||||
$( document.activeElement );
|
||||
manager.currentWindow = win;
|
||||
manager.lifecycle = lifecycle;
|
||||
manager.preparingToOpen = null;
|
||||
|
|
@ -1414,8 +1436,8 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data, lifecycle, comp
|
|||
* @param {OO.ui.Window|string} win Window object or symbolic name of window to close
|
||||
* @param {Object} [data] Window closing data
|
||||
* @return {OO.ui.WindowInstance} A lifecycle object representing this particular
|
||||
* opening of the window. For backwards-compatibility, the object is also a Thenable that is resolved
|
||||
* when the window is done closing, see T163510.
|
||||
* opening of the window. For backwards-compatibility, the object is also a Thenable that is
|
||||
* resolved when the window is done closing, see T163510.
|
||||
* @fires closing
|
||||
*/
|
||||
OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
|
||||
|
|
@ -1516,7 +1538,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
|
|||
*
|
||||
* This function can be called in two manners:
|
||||
*
|
||||
* 1. `.addWindows( [ windowA, windowB, ... ] )` (where `windowA`, `windowB` are OO.ui.Window objects)
|
||||
* 1. `.addWindows( [ winA, winB, ... ] )` (where `winA`, `winB` are OO.ui.Window objects)
|
||||
*
|
||||
* This syntax registers windows under the symbolic names defined in their `.static.name`
|
||||
* properties. For example, if `windowA.constructor.static.name` is `'nameA'`, calling
|
||||
|
|
@ -1525,7 +1547,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
|
|||
*
|
||||
* This is the recommended way, as it allows for an easier switch to using a window factory.
|
||||
*
|
||||
* 2. `.addWindows( { nameA: windowA, nameB: windowB, ... } )`
|
||||
* 2. `.addWindows( { nameA: winA, nameB: winB, ... } )`
|
||||
*
|
||||
* This syntax registers windows under the explicitly given symbolic names. In this example,
|
||||
* calling `.openWindow( 'nameA' )` afterwards will open the window `windowA`, regardless of what
|
||||
|
|
@ -1583,9 +1605,9 @@ OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
|
|||
/**
|
||||
* Remove the specified windows from the windows manager.
|
||||
*
|
||||
* Windows will be closed before they are removed. If you wish to remove all windows, you may wish to use
|
||||
* the #clearWindows method instead. If you no longer need the window manager and want to ensure that it no
|
||||
* longer listens to events, use the #destroy method.
|
||||
* Windows will be closed before they are removed. If you wish to remove all windows, you may wish
|
||||
* to use the #clearWindows method instead. If you no longer need the window manager and want to
|
||||
* ensure that it no longer listens to events, use the #destroy method.
|
||||
*
|
||||
* @param {string[]} names Symbolic names of windows to remove
|
||||
* @return {jQuery.Promise} Promise resolved when window is closed and removed
|
||||
|
|
@ -1616,9 +1638,9 @@ OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
|
|||
/**
|
||||
* Remove all windows from the window manager.
|
||||
*
|
||||
* Windows will be closed before they are removed. Note that the window manager, though not in use, will still
|
||||
* listen to events. If the window manager will not be used again, you may wish to use the #destroy method instead.
|
||||
* To remove just a subset of windows, use the #removeWindows method.
|
||||
* Windows will be closed before they are removed. Note that the window manager, though not in use,
|
||||
* will still listen to events. If the window manager will not be used again, you may wish to use
|
||||
* the #destroy method instead. To remove just a subset of windows, use the #removeWindows method.
|
||||
*
|
||||
* @return {jQuery.Promise} Promise resolved when all windows are closed and removed
|
||||
*/
|
||||
|
|
@ -1747,9 +1769,9 @@ OO.ui.WindowManager.prototype.toggleAriaIsolation = function ( isolate ) {
|
|||
/**
|
||||
* Destroy the window manager.
|
||||
*
|
||||
* Destroying the window manager ensures that it will no longer listen to events. If you would like to
|
||||
* continue using the window manager, but wish to remove all windows from it, use the #clearWindows method
|
||||
* instead.
|
||||
* Destroying the window manager ensures that it will no longer listen to events. If you would like
|
||||
* to continue using the window manager, but wish to remove all windows from it, use the
|
||||
* #clearWindows method instead.
|
||||
*/
|
||||
OO.ui.WindowManager.prototype.destroy = function () {
|
||||
this.toggleGlobalEvents( false );
|
||||
|
|
@ -1761,16 +1783,16 @@ OO.ui.WindowManager.prototype.destroy = function () {
|
|||
/**
|
||||
* A window is a container for elements that are in a child frame. They are used with
|
||||
* a window manager (OO.ui.WindowManager), which is used to open and close the window and control
|
||||
* its presentation. The size of a window is specified using a symbolic name (e.g., ‘small’, ‘medium’,
|
||||
* ‘large’), which is interpreted by the window manager. If the requested size is not recognized,
|
||||
* the window manager will choose a sensible fallback.
|
||||
* its presentation. The size of a window is specified using a symbolic name (e.g., ‘small’,
|
||||
* ‘medium’, ‘large’), which is interpreted by the window manager. If the requested size is not
|
||||
* recognized, the window manager will choose a sensible fallback.
|
||||
*
|
||||
* The lifecycle of a window has three primary stages (opening, opened, and closing) in which
|
||||
* different processes are executed:
|
||||
*
|
||||
* **opening**: The opening stage begins when the window manager's {@link OO.ui.WindowManager#openWindow
|
||||
* openWindow} or the window's {@link #open open} methods are used, and the window manager begins to open
|
||||
* the window.
|
||||
* **opening**: The opening stage begins when the window manager's
|
||||
* {@link OO.ui.WindowManager#openWindow openWindow} or the window's {@link #open open} methods are
|
||||
* used, and the window manager begins to open the window.
|
||||
*
|
||||
* - {@link #getSetupProcess} method is called and its result executed
|
||||
* - {@link #getReadyProcess} method is called and its result executed
|
||||
|
|
@ -1779,15 +1801,17 @@ OO.ui.WindowManager.prototype.destroy = function () {
|
|||
*
|
||||
* **closing**: The closing stage begins when the window manager's
|
||||
* {@link OO.ui.WindowManager#closeWindow closeWindow}
|
||||
* or the window's {@link #close} methods are used, and the window manager begins to close the window.
|
||||
* or the window's {@link #close} methods are used, and the window manager begins to close the
|
||||
* window.
|
||||
*
|
||||
* - {@link #getHoldProcess} method is called and its result executed
|
||||
* - {@link #getTeardownProcess} method is called and its result executed. The window is now closed
|
||||
*
|
||||
* Each of the window's processes (setup, ready, hold, and teardown) can be extended in subclasses
|
||||
* by overriding the window's #getSetupProcess, #getReadyProcess, #getHoldProcess and #getTeardownProcess
|
||||
* methods. Note that each {@link OO.ui.Process process} is executed in series, so asynchronous
|
||||
* processing can complete. Always assume window processes are executed asynchronously.
|
||||
* by overriding the window's #getSetupProcess, #getReadyProcess, #getHoldProcess and
|
||||
* #getTeardownProcess methods. Note that each {@link OO.ui.Process process} is executed in series,
|
||||
* so asynchronous processing can complete. Always assume window processes are executed
|
||||
* asynchronously.
|
||||
*
|
||||
* For more information, please see the [OOUI documentation on MediaWiki] [1].
|
||||
*
|
||||
|
|
@ -1819,7 +1843,7 @@ OO.ui.Window = function OoUiWindow( config ) {
|
|||
this.$frame = $( '<div>' );
|
||||
/**
|
||||
* Overlay element to use for the `$overlay` configuration option of widgets that support it.
|
||||
* Things put inside of it are overlaid on top of the window and are not bound to its dimensions.
|
||||
* Things put inside it are overlaid on top of the window and are not bound to its dimensions.
|
||||
* See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.
|
||||
*
|
||||
* MyDialog.prototype.initialize = function () {
|
||||
|
|
@ -1828,7 +1852,7 @@ OO.ui.Window = function OoUiWindow( config ) {
|
|||
* $overlay: this.$overlay,
|
||||
* label: 'Popup button',
|
||||
* popup: {
|
||||
* $content: $( '<p>Popup contents.</p><p>Popup contents.</p><p>Popup contents.</p>' ),
|
||||
* $content: $( '<p>Popup content.</p><p>More content.</p><p>Yet more content.</p>' ),
|
||||
* padded: true
|
||||
* }
|
||||
* } );
|
||||
|
|
@ -1852,7 +1876,6 @@ OO.ui.Window = function OoUiWindow( config ) {
|
|||
this.$frame
|
||||
.addClass( 'oo-ui-window-frame' )
|
||||
.append( this.$focusTrapBefore, this.$content, this.$focusTrapAfter );
|
||||
|
||||
this.$element
|
||||
.addClass( 'oo-ui-window' )
|
||||
.append( this.$frame, this.$overlay );
|
||||
|
|
@ -1921,8 +1944,8 @@ OO.ui.Window.prototype.isVisible = function () {
|
|||
/**
|
||||
* Check if the window is opening.
|
||||
*
|
||||
* This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpening isOpening}
|
||||
* method.
|
||||
* This method is a wrapper around the window manager's
|
||||
* {@link OO.ui.WindowManager#isOpening isOpening} method.
|
||||
*
|
||||
* @return {boolean} Window is opening
|
||||
*/
|
||||
|
|
@ -1933,7 +1956,8 @@ OO.ui.Window.prototype.isOpening = function () {
|
|||
/**
|
||||
* Check if the window is closing.
|
||||
*
|
||||
* This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isClosing isClosing} method.
|
||||
* This method is a wrapper around the window manager's
|
||||
* {@link OO.ui.WindowManager#isClosing isClosing} method.
|
||||
*
|
||||
* @return {boolean} Window is closing
|
||||
*/
|
||||
|
|
@ -1944,7 +1968,8 @@ OO.ui.Window.prototype.isClosing = function () {
|
|||
/**
|
||||
* Check if the window is opened.
|
||||
*
|
||||
* This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpened isOpened} method.
|
||||
* This method is a wrapper around the window manager's
|
||||
* {@link OO.ui.WindowManager#isOpened isOpened} method.
|
||||
*
|
||||
* @return {boolean} Window is opened
|
||||
*/
|
||||
|
|
@ -2417,7 +2442,9 @@ OO.ui.Window.prototype.hold = function ( data ) {
|
|||
|
||||
return this.getHoldProcess( data ).execute().then( function () {
|
||||
// Get the focused element within the window's content
|
||||
var $focus = win.$content.find( OO.ui.Element.static.getDocument( win.$content ).activeElement );
|
||||
var $focus = win.$content.find(
|
||||
OO.ui.Element.static.getDocument( win.$content ).activeElement
|
||||
);
|
||||
|
||||
// Blur the focused element
|
||||
if ( $focus.length ) {
|
||||
|
|
@ -2433,8 +2460,8 @@ OO.ui.Window.prototype.hold = function ( data ) {
|
|||
/**
|
||||
* Teardown window.
|
||||
*
|
||||
* This is called by OO.ui.WindowManager during window closing (after the animation), and should not be called directly
|
||||
* by other systems.
|
||||
* This is called by OO.ui.WindowManager during window closing (after the animation), and should not
|
||||
* be called directly by other systems.
|
||||
*
|
||||
* @param {Object} [data] Window closing data
|
||||
* @return {jQuery.Promise} Promise resolved when window is torn down
|
||||
|
|
@ -2454,7 +2481,7 @@ OO.ui.Window.prototype.teardown = function ( data ) {
|
|||
/**
|
||||
* The Dialog class serves as the base class for the other types of dialogs.
|
||||
* Unless extended to include controls, the rendered dialog box is a simple window
|
||||
* that users can close by hitting the ‘Esc’ key. Dialog windows are used with OO.ui.WindowManager,
|
||||
* that users can close by hitting the Escape key. Dialog windows are used with OO.ui.WindowManager,
|
||||
* which opens, closes, and controls the presentation of the window. See the
|
||||
* [OOUI documentation on MediaWiki] [1] for more information.
|
||||
*
|
||||
|
|
@ -2468,7 +2495,8 @@ OO.ui.Window.prototype.teardown = function ( data ) {
|
|||
* MyDialog.prototype.initialize = function () {
|
||||
* MyDialog.parent.prototype.initialize.call( this );
|
||||
* this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
|
||||
* this.content.$element.append( '<p>A simple dialog window. Press \'Esc\' to close.</p>' );
|
||||
* this.content.$element.append( '<p>A simple dialog window. Press Escape key to ' +
|
||||
* 'close.</p>' );
|
||||
* this.$body.append( this.content.$element );
|
||||
* };
|
||||
* MyDialog.prototype.getBodyHeight = function () {
|
||||
|
|
@ -2544,9 +2572,10 @@ OO.ui.Dialog.static.name = '';
|
|||
/**
|
||||
* The dialog title.
|
||||
*
|
||||
* The title can be specified as a plaintext string, a {@link OO.ui.mixin.LabelElement Label} node, or a function
|
||||
* that will produce a Label node or string. The title can also be specified with data passed to the
|
||||
* constructor (see #getSetupProcess). In this case, the static value will be overridden.
|
||||
* The title can be specified as a plaintext string, a {@link OO.ui.mixin.LabelElement Label} node,
|
||||
* or a function that will produce a Label node or string. The title can also be specified with data
|
||||
* passed to the constructor (see #getSetupProcess). In this case, the static value will be
|
||||
* overridden.
|
||||
*
|
||||
* @abstract
|
||||
* @static
|
||||
|
|
@ -2558,8 +2587,8 @@ OO.ui.Dialog.static.title = '';
|
|||
/**
|
||||
* An array of configured {@link OO.ui.ActionWidget action widgets}.
|
||||
*
|
||||
* Actions can also be specified with data passed to the constructor (see #getSetupProcess). In this case, the static
|
||||
* value will be overridden.
|
||||
* Actions can also be specified with data passed to the constructor (see #getSetupProcess). In this
|
||||
* case, the static value will be overridden.
|
||||
*
|
||||
* [2]: https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs#Action_sets
|
||||
*
|
||||
|
|
@ -2570,7 +2599,7 @@ OO.ui.Dialog.static.title = '';
|
|||
OO.ui.Dialog.static.actions = [];
|
||||
|
||||
/**
|
||||
* Close the dialog when the 'Esc' key is pressed.
|
||||
* Close the dialog when the Escape key is pressed.
|
||||
*
|
||||
* @static
|
||||
* @abstract
|
||||
|
|
@ -2643,9 +2672,10 @@ OO.ui.Dialog.prototype.getActions = function () {
|
|||
/**
|
||||
* Get a process for taking action.
|
||||
*
|
||||
* When you override this method, you can create a new OO.ui.Process and return it, or add additional
|
||||
* accept steps to the process the parent method provides using the {@link OO.ui.Process#first 'first'}
|
||||
* and {@link OO.ui.Process#next 'next'} methods of OO.ui.Process.
|
||||
* When you override this method, you can create a new OO.ui.Process and return it, or add
|
||||
* additional accept steps to the process the parent method provides using the
|
||||
* {@link OO.ui.Process#first 'first'} and {@link OO.ui.Process#next 'next'} methods of
|
||||
* OO.ui.Process.
|
||||
*
|
||||
* @param {string} [action] Symbolic name of action
|
||||
* @return {OO.ui.Process} Action process
|
||||
|
|
@ -2805,10 +2835,10 @@ OO.ui.Dialog.prototype.executeAction = function ( action ) {
|
|||
*
|
||||
* There are two basic types of message dialogs, confirmation and alert:
|
||||
*
|
||||
* - **confirmation**: the dialog title describes what a progressive action will do and the message provides
|
||||
* more details about the consequences.
|
||||
* - **alert**: the dialog title describes which event occurred and the message provides more information
|
||||
* about why the event occurred.
|
||||
* - **confirmation**: the dialog title describes what a progressive action will do and the message
|
||||
* provides more details about the consequences.
|
||||
* - **alert**: the dialog title describes which event occurred and the message provides more
|
||||
* information about why the event occurred.
|
||||
*
|
||||
* The MessageDialog class specifies two actions: ‘accept’, the primary
|
||||
* action (e.g., ‘ok’) and ‘reject,’ the safe action (e.g., ‘cancel’). Both will close the window,
|
||||
|
|
@ -2944,7 +2974,7 @@ OO.ui.MessageDialog.prototype.getActionProcess = function ( action ) {
|
|||
* @param {jQuery|string|Function|null} [data.message] Description of the action's consequence
|
||||
* @param {string} [data.size] Symbolic name of the dialog size, see OO.ui.Window
|
||||
* @param {Object[]} [data.actions] List of OO.ui.ActionOptionWidget configuration options for each
|
||||
* action item
|
||||
* action item
|
||||
*/
|
||||
OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
|
||||
data = data || {};
|
||||
|
|
@ -3134,16 +3164,17 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
|
|||
/**
|
||||
* ProcessDialog windows encapsulate a {@link OO.ui.Process process} and all of the code necessary
|
||||
* to complete it. If the process terminates with an error, a customizable {@link OO.ui.Error error
|
||||
* interface} alerts users to the trouble, permitting the user to dismiss the error and try again when
|
||||
* relevant. The ProcessDialog class is always extended and customized with the actions and content
|
||||
* required for each process.
|
||||
* interface} alerts users to the trouble, permitting the user to dismiss the error and try again
|
||||
* when relevant. The ProcessDialog class is always extended and customized with the actions and
|
||||
* content required for each process.
|
||||
*
|
||||
* The process dialog box consists of a header that visually represents the ‘working’ state of long
|
||||
* processes with an animation. The header contains the dialog title as well as
|
||||
* two {@link OO.ui.ActionWidget action widgets}: a ‘safe’ action on the left (e.g., ‘Cancel’) and
|
||||
* a ‘primary’ action on the right (e.g., ‘Done’).
|
||||
*
|
||||
* Like other windows, the process dialog is managed by a {@link OO.ui.WindowManager window manager}.
|
||||
* Like other windows, the process dialog is managed by a
|
||||
* {@link OO.ui.WindowManager window manager}.
|
||||
* Please see the [OOUI documentation on MediaWiki][1] for more information and examples.
|
||||
*
|
||||
* @example
|
||||
|
|
@ -3163,7 +3194,9 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
|
|||
* MyProcessDialog.prototype.initialize = function () {
|
||||
* MyProcessDialog.parent.prototype.initialize.apply( this, arguments );
|
||||
* this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
|
||||
* this.content.$element.append( '<p>This is a process dialog window. The header contains the title and two buttons: \'Cancel\' (a safe action) on the left and \'Done\' (a primary action) on the right.</p>' );
|
||||
* this.content.$element.append( '<p>This is a process dialog window. The header ' +
|
||||
* 'contains the title and two buttons: \'Cancel\' (a safe action) on the left and ' +
|
||||
* '\'Done\' (a primary action) on the right.</p>' );
|
||||
* this.$body.append( this.content.$element );
|
||||
* };
|
||||
* MyProcessDialog.prototype.getActionProcess = function ( action ) {
|
||||
|
|
@ -3253,9 +3286,15 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
|
|||
this.$errorsTitle = $( '<div>' );
|
||||
|
||||
// Events
|
||||
this.dismissButton.connect( this, { click: 'onDismissErrorButtonClick' } );
|
||||
this.retryButton.connect( this, { click: 'onRetryButtonClick' } );
|
||||
this.title.connect( this, { labelChange: 'fitLabel' } );
|
||||
this.dismissButton.connect( this, {
|
||||
click: 'onDismissErrorButtonClick'
|
||||
} );
|
||||
this.retryButton.connect( this, {
|
||||
click: 'onRetryButtonClick'
|
||||
} );
|
||||
this.title.connect( this, {
|
||||
labelChange: 'fitLabel'
|
||||
} );
|
||||
|
||||
// Initialization
|
||||
this.title.$element.addClass( 'oo-ui-processDialog-title' );
|
||||
|
|
@ -3296,7 +3335,10 @@ OO.ui.ProcessDialog.prototype.getActionWidgetConfig = function ( config ) {
|
|||
// Change back buttons to icon only on mobile
|
||||
if (
|
||||
isMobile &&
|
||||
( config.flags === 'back' || ( Array.isArray( config.flags ) && config.flags.indexOf( 'back' ) !== -1 ) )
|
||||
(
|
||||
config.flags === 'back' ||
|
||||
( Array.isArray( config.flags ) && config.flags.indexOf( 'back' ) !== -1 )
|
||||
)
|
||||
) {
|
||||
$.extend( config, {
|
||||
icon: 'previous',
|
||||
|
|
@ -3352,8 +3394,9 @@ OO.ui.ProcessDialog.prototype.setDimensions = function () {
|
|||
|
||||
this.fitLabel();
|
||||
|
||||
// If there are many actions, they might be shown on multiple lines. Their layout can change when
|
||||
// resizing the dialog and when changing the actions. Adjust the height of the footer to fit them.
|
||||
// If there are many actions, they might be shown on multiple lines. Their layout can change
|
||||
// when resizing the dialog and when changing the actions. Adjust the height of the footer to
|
||||
// fit them.
|
||||
dialog.$body.css( 'bottom', dialog.$foot.outerHeight( true ) );
|
||||
// Wait for CSS transition to finish and do it again :(
|
||||
setTimeout( function () {
|
||||
|
|
@ -3400,7 +3443,8 @@ OO.ui.ProcessDialog.prototype.fitLabel = function () {
|
|||
// We have enough space to center the label
|
||||
leftWidth = rightWidth = biggerWidth;
|
||||
} else {
|
||||
// Let's hope we at least have enough space not to overlap, because we can't wrap the label…
|
||||
// Let's hope we at least have enough space not to overlap, because we can't wrap
|
||||
// the label.
|
||||
if ( this.getDir() === 'ltr' ) {
|
||||
leftWidth = safeWidth;
|
||||
rightWidth = primaryWidth;
|
||||
|
|
@ -3447,7 +3491,7 @@ OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
|
|||
this.$errorItems = $( items );
|
||||
if ( recoverable ) {
|
||||
abilities[ this.currentAction ] = true;
|
||||
// Copy the flags from the first matching action
|
||||
// Copy the flags from the first matching action.
|
||||
actions = this.actions.get( { actions: this.currentAction } );
|
||||
if ( actions.length ) {
|
||||
this.retryButton.clearFlags().setFlags( actions[ 0 ].getFlags() );
|
||||
|
|
@ -3486,7 +3530,7 @@ OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
|
|||
// Parent method
|
||||
return OO.ui.ProcessDialog.parent.prototype.getTeardownProcess.call( this, data )
|
||||
.first( function () {
|
||||
// Make sure to hide errors
|
||||
// Make sure to hide errors.
|
||||
this.hideErrors();
|
||||
this.fitOnOpen = false;
|
||||
}, this );
|
||||
|
|
@ -3573,13 +3617,15 @@ OO.ui.confirm = function ( text, options ) {
|
|||
/**
|
||||
* Display a quick modal prompt dialog, using a OO.ui.MessageDialog. While the dialog is open,
|
||||
* the rest of the page will be dimmed out and the user won't be able to interact with it. The
|
||||
* dialog has a text input widget and two action buttons, one to confirm an operation (labelled "OK")
|
||||
* and one to cancel it (labelled "Cancel").
|
||||
* dialog has a text input widget and two action buttons, one to confirm an operation
|
||||
* (labelled "OK") and one to cancel it (labelled "Cancel").
|
||||
*
|
||||
* A window manager is created automatically when this function is called for the first time.
|
||||
*
|
||||
* @example
|
||||
* OO.ui.prompt( 'Choose a line to go to', { textInput: { placeholder: 'Line number' } } ).done( function ( result ) {
|
||||
* OO.ui.prompt( 'Choose a line to go to', {
|
||||
* textInput: { placeholder: 'Line number' }
|
||||
* } ).done( function ( result ) {
|
||||
* if ( result !== null ) {
|
||||
* console.log( 'User typed "' + result + '" then clicked "OK".' );
|
||||
* } else {
|
||||
|
|
@ -3589,7 +3635,8 @@ OO.ui.confirm = function ( text, options ) {
|
|||
*
|
||||
* @param {jQuery|string} text Message text to display
|
||||
* @param {Object} [options] Additional options, see OO.ui.MessageDialog#getSetupProcess
|
||||
* @param {Object} [options.textInput] Additional options for text input widget, see OO.ui.TextInputWidget
|
||||
* @param {Object} [options.textInput] Additional options for text input widget,
|
||||
* see OO.ui.TextInputWidget
|
||||
* @return {jQuery.Promise} Promise resolved when the user closes the dialog. If the user chose to
|
||||
* confirm, the promise will resolve with the value of the text input widget; otherwise, it will
|
||||
* resolve to `null`.
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@
|
|||
"rtl": "../wikimediaui/images/icons/articles-rtl.svg"
|
||||
}
|
||||
},
|
||||
"articleAdd": {
|
||||
"file": "../wikimediaui/images/icons/articleAdd.svg"
|
||||
},
|
||||
"articleCheck": {
|
||||
"file": "../wikimediaui/images/icons/articleCheck.svg"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -20,9 +20,6 @@
|
|||
"rtl": "../wikimediaui/images/icons/newspaper-rtl.svg"
|
||||
}
|
||||
},
|
||||
"web": {
|
||||
"file": "../wikimediaui/images/icons/web.svg"
|
||||
},
|
||||
"reference": {
|
||||
"file": "../wikimediaui/images/icons/reference.svg"
|
||||
},
|
||||
|
|
@ -37,6 +34,10 @@
|
|||
"ltr": "../wikimediaui/images/icons/references-ltr.svg",
|
||||
"rtl": "../wikimediaui/images/icons/references-rtl.svg"
|
||||
}
|
||||
},
|
||||
"web": {
|
||||
"file": "../wikimediaui/images/icons/web.svg",
|
||||
"deprecated": "Deprecated since v0.30.2, use 'browser' from 'interactions' pack instead."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,14 +14,20 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
"alert": {
|
||||
"file": "images/icons/alert.svg",
|
||||
"variants": [ "warning" ]
|
||||
"variants": [
|
||||
"error",
|
||||
"warning"
|
||||
]
|
||||
},
|
||||
"bell": {
|
||||
"file": "images/icons/bell.svg"
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
@ -31,6 +34,9 @@
|
|||
"rtl": "images/icons/articles-rtl.svg"
|
||||
}
|
||||
},
|
||||
"articleAdd": {
|
||||
"file": "images/icons/articleAdd.svg"
|
||||
},
|
||||
"articleCheck": {
|
||||
"file": "images/icons/articleCheck.svg"
|
||||
},
|
||||
|
|
@ -74,7 +80,11 @@
|
|||
"ltr": "images/icons/tag-ltr.svg",
|
||||
"rtl": "images/icons/tag-rtl.svg"
|
||||
},
|
||||
"variants": [ "destructive", "warning" ]
|
||||
"variants": [
|
||||
"destructive",
|
||||
"error",
|
||||
"warning"
|
||||
]
|
||||
},
|
||||
"upload": {
|
||||
"file": "images/icons/upload.svg"
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
@ -43,6 +46,18 @@
|
|||
"hieroglyph": {
|
||||
"file": "images/icons/hieroglyph.svg"
|
||||
},
|
||||
"imageLayoutBasic": {
|
||||
"file": "images/icons/imageLayoutBasic.svg"
|
||||
},
|
||||
"imageLayoutFrame": {
|
||||
"file": "images/icons/imageLayoutFrame.svg"
|
||||
},
|
||||
"imageLayoutFrameless": {
|
||||
"file": "images/icons/imageLayoutFrameless.svg"
|
||||
},
|
||||
"imageLayoutThumbnail": {
|
||||
"file": "images/icons/imageLayoutThumbnail.svg"
|
||||
},
|
||||
"language": {
|
||||
"file": "images/icons/language.svg"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
@ -37,9 +40,6 @@
|
|||
"rtl": "images/icons/newspaper-rtl.svg"
|
||||
}
|
||||
},
|
||||
"web": {
|
||||
"file": "images/icons/web.svg"
|
||||
},
|
||||
"reference": {
|
||||
"file": "images/icons/reference.svg"
|
||||
},
|
||||
|
|
@ -54,6 +54,10 @@
|
|||
"ltr": "images/icons/references-ltr.svg",
|
||||
"rtl": "images/icons/references-rtl.svg"
|
||||
}
|
||||
},
|
||||
"web": {
|
||||
"file": "images/icons/web.svg",
|
||||
"deprecated": "Deprecated since v0.30.2, use 'browser' from 'interactions' pack instead."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
|
@ -13,8 +13,11 @@
|
|||
"destructive": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"error": {
|
||||
"color": "#d33"
|
||||
},
|
||||
"warning": {
|
||||
"color": "#ff5d00"
|
||||
"color": "#fc3"
|
||||
}
|
||||
},
|
||||
"images": {
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 312 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>alert</title><path fill="#d33" d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"/></svg>
|
||||
|
After Width: | Height: | Size: 336 B |
|
Before Width: | Height: | Size: 279 B After Width: | Height: | Size: 290 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>alert</title><path fill="#ff5d00" d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>alert</title><path fill="#fc3" d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"/></svg>
|
||||
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 336 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align center</title><g fill="#fff"><path d="M1 15h18v2H1zM1 3h18v2H1z"/><rect width="8" height="6" x="6" y="7" rx="1" ry="1"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align center</title><g fill="#fff"><path d="M1 15h18v2H1zM1 3h18v2H1z"/><rect width="8" height="6" x="6" y="7" rx="1"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 257 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align center</title><g fill="#36c"><path d="M1 15h18v2H1zM1 3h18v2H1z"/><rect width="8" height="6" x="6" y="7" rx="1" ry="1"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align center</title><g fill="#36c"><path d="M1 15h18v2H1zM1 3h18v2H1z"/><rect width="8" height="6" x="6" y="7" rx="1"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 257 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align center</title><path d="M1 15h18v2H1zM1 3h18v2H1z"/><rect width="8" height="6" x="6" y="7" rx="1" ry="1"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align center</title><path d="M1 15h18v2H1zM1 3h18v2H1z"/><rect width="8" height="6" x="6" y="7" rx="1"/></svg>
|
||||
|
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 238 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align left</title><g fill="#fff"><path d="M1 15h18v2H1zm11-8h7v2h-7zm0 4h7v2h-7zM1 3h18v2H1z"/><rect width="8" height="6" x="1" y="7" rx="1" ry="1"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align left</title><g fill="#fff"><path d="M1 15h18v2H1zm11-8h7v2h-7zm0 4h7v2h-7zM1 3h18v2H1z"/><rect width="8" height="6" x="1" y="7" rx="1"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 287 B After Width: | Height: | Size: 280 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align left</title><g fill="#36c"><path d="M1 15h18v2H1zm11-8h7v2h-7zm0 4h7v2h-7zM1 3h18v2H1z"/><rect width="8" height="6" x="1" y="7" rx="1" ry="1"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align left</title><g fill="#36c"><path d="M1 15h18v2H1zm11-8h7v2h-7zm0 4h7v2h-7zM1 3h18v2H1z"/><rect width="8" height="6" x="1" y="7" rx="1"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 287 B After Width: | Height: | Size: 280 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align left</title><path d="M1 15h18v2H1zm11-8h7v2h-7zm0 4h7v2h-7zM1 3h18v2H1z"/><rect width="8" height="6" x="1" y="7" rx="1" ry="1"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align left</title><path d="M1 15h18v2H1zm11-8h7v2h-7zm0 4h7v2h-7zM1 3h18v2H1z"/><rect width="8" height="6" x="1" y="7" rx="1"/></svg>
|
||||
|
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 261 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align right</title><g fill="#fff"><path d="M1 15h18v2H1zm0-8h7v2H1zm0 4h7v2H1zm0-8h18v2H1z"/><rect width="8" height="6" x="11" y="7" rx="1" ry="1"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align right</title><g fill="#fff"><path d="M1 15h18v2H1zm0-8h7v2H1zm0 4h7v2H1zm0-8h18v2H1z"/><rect width="8" height="6" x="11" y="7" rx="1"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 279 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align right</title><g fill="#36c"><path d="M1 15h18v2H1zm0-8h7v2H1zm0 4h7v2H1zm0-8h18v2H1z"/><rect width="8" height="6" x="11" y="7" rx="1" ry="1"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align right</title><g fill="#36c"><path d="M1 15h18v2H1zm0-8h7v2H1zm0 4h7v2H1zm0-8h18v2H1z"/><rect width="8" height="6" x="11" y="7" rx="1"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 279 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align right</title><path d="M1 15h18v2H1zm0-8h7v2H1zm0 4h7v2H1zm0-8h18v2H1z"/><rect width="8" height="6" x="11" y="7" rx="1" ry="1"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>align right</title><path d="M1 15h18v2H1zm0-8h7v2H1zm0 4h7v2H1zm0-8h18v2H1z"/><rect width="8" height="6" x="11" y="7" rx="1"/></svg>
|
||||
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 260 B |
|
After Width: | Height: | Size: 113 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>add article</title><path fill="#fff" d="M15 1H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 10h-4v4H9v-4H5V9h4V5h2v4h4v2z"/></svg>
|
||||
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 126 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>add article</title><path fill="#36c" d="M15 1H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 10h-4v4H9v-4H5V9h4V5h2v4h4v2z"/></svg>
|
||||
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 112 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>add article</title><path d="M15 1H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 10h-4v4H9v-4H5V9h4V5h2v4h4v2z"/></svg>
|
||||
|
After Width: | Height: | Size: 273 B |
|
Before Width: | Height: | Size: 221 B After Width: | Height: | Size: 234 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>camera</title><path fill="#fff" d="M13 11a3 3 0 1 0-3 3 3 3 0 0 0 3-3zm-3 5a5 5 0 1 1 5-5 5 5 0 0 1-5 5zM6.42 2.56l-.67.64a2 2 0 0 1-1.38.56H2a1.89 1.89 0 0 0-2 1.75v10.54a1.89 1.89 0 0 0 2 1.76h16a1.89 1.89 0 0 0 2-1.76V5.51a1.89 1.89 0 0 0-2-1.76h-2.37a2 2 0 0 1-1.38-.56l-.67-.64A2 2 0 0 0 12.2 2H7.8a2 2 0 0 0-1.38.56z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>camera</title><g fill="#fff"><path d="M10 16c-4.455 0-6.685-5.386-3.535-8.535C9.615 4.315 15 6.545 15 11a5 5 0 0 1-5 5zM6.42 2.56l-.67.64c-.37.357-.865.808-1.38.81H2C.914 4 0 4.712 0 5.76v10.48C0 17.27 1 18 2 18h16c1 0 2-.716 2-1.76V5.76C20 4.723 19 4 18 4h-2.37c-.515-.002-1.01-.453-1.38-.81l-.67-.64A2 2 0 0 0 12.2 2H7.8a2 2 0 0 0-1.38.56z"/><circle cx="10" cy="11" r="3"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 459 B After Width: | Height: | Size: 513 B |
|
Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 318 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>camera</title><path fill="#36c" d="M13 11a3 3 0 1 0-3 3 3 3 0 0 0 3-3zm-3 5a5 5 0 1 1 5-5 5 5 0 0 1-5 5zM6.42 2.56l-.67.64a2 2 0 0 1-1.38.56H2a1.89 1.89 0 0 0-2 1.75v10.54a1.89 1.89 0 0 0 2 1.76h16a1.89 1.89 0 0 0 2-1.76V5.51a1.89 1.89 0 0 0-2-1.76h-2.37a2 2 0 0 1-1.38-.56l-.67-.64A2 2 0 0 0 12.2 2H7.8a2 2 0 0 0-1.38.56z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>camera</title><g fill="#36c"><path d="M10 16c-4.455 0-6.685-5.386-3.535-8.535C9.615 4.315 15 6.545 15 11a5 5 0 0 1-5 5zM6.42 2.56l-.67.64c-.37.357-.865.808-1.38.81H2C.914 4 0 4.712 0 5.76v10.48C0 17.27 1 18 2 18h16c1 0 2-.716 2-1.76V5.76C20 4.723 19 4 18 4h-2.37c-.515-.002-1.01-.453-1.38-.81l-.67-.64A2 2 0 0 0 12.2 2H7.8a2 2 0 0 0-1.38.56z"/><circle cx="10" cy="11" r="3"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 459 B After Width: | Height: | Size: 513 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 235 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>camera</title><path d="M13 11a3 3 0 1 0-3 3 3 3 0 0 0 3-3zm-3 5a5 5 0 1 1 5-5 5 5 0 0 1-5 5zM6.42 2.56l-.67.64a2 2 0 0 1-1.38.56H2a1.89 1.89 0 0 0-2 1.75v10.54a1.89 1.89 0 0 0 2 1.76h16a1.89 1.89 0 0 0 2-1.76V5.51a1.89 1.89 0 0 0-2-1.76h-2.37a2 2 0 0 1-1.38-.56l-.67-.64A2 2 0 0 0 12.2 2H7.8a2 2 0 0 0-1.38.56z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>camera</title><path d="M10 16c-4.455 0-6.685-5.386-3.535-8.535C9.615 4.315 15 6.545 15 11a5 5 0 0 1-5 5zM6.42 2.56l-.67.64c-.37.357-.865.808-1.38.81H2C.914 4 0 4.712 0 5.76v10.48C0 17.27 1 18 2 18h16c1 0 2-.716 2-1.76V5.76C20 4.723 19 4 18 4h-2.37c-.515-.002-1.01-.453-1.38-.81l-.67-.64A2 2 0 0 0 12.2 2H7.8a2 2 0 0 0-1.38.56z"/><circle cx="10" cy="11" r="3"/></svg>
|
||||
|
Before Width: | Height: | Size: 447 B After Width: | Height: | Size: 494 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20"><title>code</title><g fill="#fff"><path id="left-bracket" d="M1 10.08V8.92h1.15c1.15 0 1.15 0 1.15-1.15V5a7.42 7.42 0 0 1 .09-1.3 2 2 0 0 1 .3-.7 1.84 1.84 0 0 1 .93-.68A6.44 6.44 0 0 1 6.74 2h1.18v1.15h-.86A1.32 1.32 0 0 0 6 3.62a1.71 1.71 0 0 0-.36 1.23V7a3.22 3.22 0 0 1-.28 1.72 2 2 0 0 1-1.26.77 2.15 2.15 0 0 1 1.26.79A3.26 3.26 0 0 1 5.62 12v3.15A1.67 1.67 0 0 0 6 16.37a1.31 1.31 0 0 0 1.08.47h.87V18H6.74a6.3 6.3 0 0 1-2.12-.29 1.82 1.82 0 0 1-.93-.71 1.94 1.94 0 0 1-.3-.72A7.46 7.46 0 0 1 3.31 15v-3.77c0-1.15 0-1.15-1.15-1.15zm18 0V8.92h-1.15c-1.15 0-1.15 0-1.15-1.15V5a7.42 7.42 0 0 0-.08-1.32 2 2 0 0 0-.3-.73 1.84 1.84 0 0 0-.93-.68A6.44 6.44 0 0 0 13.26 2h-1.18v1.15h.87a1.32 1.32 0 0 1 1.05.47 1.71 1.71 0 0 1 .36 1.23V7a3.22 3.22 0 0 0 .28 1.72 2 2 0 0 0 1.26.77 2.15 2.15 0 0 0-1.26.79 3.26 3.26 0 0 0-.26 1.72v3.15a1.67 1.67 0 0 1-.38 1.22 1.31 1.31 0 0 1-1.08.47h-.87V18h1.19a6.3 6.3 0 0 0 2.12-.29 1.82 1.82 0 0 0 .93-.68 1.94 1.94 0 0 0 .3-.72 7.46 7.46 0 0 0 .1-1.31v-3.77c0-1.15 0-1.15 1.15-1.15z"/><use id="right-bracket" width="20" height="20" transform="matrix(-1 0 0 1 20 0)" xlink:href="#left-bracket"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20"><title>code</title><g fill="#fff"><path id="a" d="M1 10.08V8.92h1.15c1.15 0 1.15 0 1.15-1.15V5a7.42 7.42 0 0 1 .09-1.3 2 2 0 0 1 .3-.7 1.84 1.84 0 0 1 .93-.68A6.44 6.44 0 0 1 6.74 2h1.18v1.15h-.86A1.32 1.32 0 0 0 6 3.62a1.71 1.71 0 0 0-.36 1.23V7a3.22 3.22 0 0 1-.28 1.72 2 2 0 0 1-1.26.77 2.15 2.15 0 0 1 1.26.79A3.26 3.26 0 0 1 5.62 12v3.15A1.67 1.67 0 0 0 6 16.37a1.31 1.31 0 0 0 1.08.47h.87V18H6.74a6.3 6.3 0 0 1-2.12-.29 1.82 1.82 0 0 1-.93-.71 1.94 1.94 0 0 1-.3-.72A7.46 7.46 0 0 1 3.31 15v-3.77c0-1.15 0-1.15-1.15-1.15zm18 0V8.92h-1.15c-1.15 0-1.15 0-1.15-1.15V5a7.42 7.42 0 0 0-.08-1.32 2 2 0 0 0-.3-.73 1.84 1.84 0 0 0-.93-.68A6.44 6.44 0 0 0 13.26 2h-1.18v1.15h.87a1.32 1.32 0 0 1 1.05.47 1.71 1.71 0 0 1 .36 1.23V7a3.22 3.22 0 0 0 .28 1.72 2 2 0 0 0 1.26.77 2.15 2.15 0 0 0-1.26.79 3.26 3.26 0 0 0-.26 1.72v3.15a1.67 1.67 0 0 1-.38 1.22 1.31 1.31 0 0 1-1.08.47h-.87V18h1.19a6.3 6.3 0 0 0 2.12-.29 1.82 1.82 0 0 0 .93-.68 1.94 1.94 0 0 0 .3-.72 7.46 7.46 0 0 0 .1-1.31v-3.77c0-1.15 0-1.15 1.15-1.15z"/><use transform="matrix(-1 0 0 1 20 0)" xlink:href="#a"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20"><title>code</title><g fill="#36c"><path id="left-bracket" d="M1 10.08V8.92h1.15c1.15 0 1.15 0 1.15-1.15V5a7.42 7.42 0 0 1 .09-1.3 2 2 0 0 1 .3-.7 1.84 1.84 0 0 1 .93-.68A6.44 6.44 0 0 1 6.74 2h1.18v1.15h-.86A1.32 1.32 0 0 0 6 3.62a1.71 1.71 0 0 0-.36 1.23V7a3.22 3.22 0 0 1-.28 1.72 2 2 0 0 1-1.26.77 2.15 2.15 0 0 1 1.26.79A3.26 3.26 0 0 1 5.62 12v3.15A1.67 1.67 0 0 0 6 16.37a1.31 1.31 0 0 0 1.08.47h.87V18H6.74a6.3 6.3 0 0 1-2.12-.29 1.82 1.82 0 0 1-.93-.71 1.94 1.94 0 0 1-.3-.72A7.46 7.46 0 0 1 3.31 15v-3.77c0-1.15 0-1.15-1.15-1.15zm18 0V8.92h-1.15c-1.15 0-1.15 0-1.15-1.15V5a7.42 7.42 0 0 0-.08-1.32 2 2 0 0 0-.3-.73 1.84 1.84 0 0 0-.93-.68A6.44 6.44 0 0 0 13.26 2h-1.18v1.15h.87a1.32 1.32 0 0 1 1.05.47 1.71 1.71 0 0 1 .36 1.23V7a3.22 3.22 0 0 0 .28 1.72 2 2 0 0 0 1.26.77 2.15 2.15 0 0 0-1.26.79 3.26 3.26 0 0 0-.26 1.72v3.15a1.67 1.67 0 0 1-.38 1.22 1.31 1.31 0 0 1-1.08.47h-.87V18h1.19a6.3 6.3 0 0 0 2.12-.29 1.82 1.82 0 0 0 .93-.68 1.94 1.94 0 0 0 .3-.72 7.46 7.46 0 0 0 .1-1.31v-3.77c0-1.15 0-1.15 1.15-1.15z"/><use id="right-bracket" width="20" height="20" transform="matrix(-1 0 0 1 20 0)" xlink:href="#left-bracket"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20"><title>code</title><g fill="#36c"><path id="a" d="M1 10.08V8.92h1.15c1.15 0 1.15 0 1.15-1.15V5a7.42 7.42 0 0 1 .09-1.3 2 2 0 0 1 .3-.7 1.84 1.84 0 0 1 .93-.68A6.44 6.44 0 0 1 6.74 2h1.18v1.15h-.86A1.32 1.32 0 0 0 6 3.62a1.71 1.71 0 0 0-.36 1.23V7a3.22 3.22 0 0 1-.28 1.72 2 2 0 0 1-1.26.77 2.15 2.15 0 0 1 1.26.79A3.26 3.26 0 0 1 5.62 12v3.15A1.67 1.67 0 0 0 6 16.37a1.31 1.31 0 0 0 1.08.47h.87V18H6.74a6.3 6.3 0 0 1-2.12-.29 1.82 1.82 0 0 1-.93-.71 1.94 1.94 0 0 1-.3-.72A7.46 7.46 0 0 1 3.31 15v-3.77c0-1.15 0-1.15-1.15-1.15zm18 0V8.92h-1.15c-1.15 0-1.15 0-1.15-1.15V5a7.42 7.42 0 0 0-.08-1.32 2 2 0 0 0-.3-.73 1.84 1.84 0 0 0-.93-.68A6.44 6.44 0 0 0 13.26 2h-1.18v1.15h.87a1.32 1.32 0 0 1 1.05.47 1.71 1.71 0 0 1 .36 1.23V7a3.22 3.22 0 0 0 .28 1.72 2 2 0 0 0 1.26.77 2.15 2.15 0 0 0-1.26.79 3.26 3.26 0 0 0-.26 1.72v3.15a1.67 1.67 0 0 1-.38 1.22 1.31 1.31 0 0 1-1.08.47h-.87V18h1.19a6.3 6.3 0 0 0 2.12-.29 1.82 1.82 0 0 0 .93-.68 1.94 1.94 0 0 0 .3-.72 7.46 7.46 0 0 0 .1-1.31v-3.77c0-1.15 0-1.15 1.15-1.15z"/><use transform="matrix(-1 0 0 1 20 0)" xlink:href="#a"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20"><title>code</title><path id="left-bracket" d="M1 10.08V8.92h1.15c1.15 0 1.15 0 1.15-1.15V5a7.42 7.42 0 0 1 .09-1.3 2 2 0 0 1 .3-.7 1.84 1.84 0 0 1 .93-.68A6.44 6.44 0 0 1 6.74 2h1.18v1.15h-.86A1.32 1.32 0 0 0 6 3.62a1.71 1.71 0 0 0-.36 1.23V7a3.22 3.22 0 0 1-.28 1.72 2 2 0 0 1-1.26.77 2.15 2.15 0 0 1 1.26.79A3.26 3.26 0 0 1 5.62 12v3.15A1.67 1.67 0 0 0 6 16.37a1.31 1.31 0 0 0 1.08.47h.87V18H6.74a6.3 6.3 0 0 1-2.12-.29 1.82 1.82 0 0 1-.93-.71 1.94 1.94 0 0 1-.3-.72A7.46 7.46 0 0 1 3.31 15v-3.77c0-1.15 0-1.15-1.15-1.15zm18 0V8.92h-1.15c-1.15 0-1.15 0-1.15-1.15V5a7.42 7.42 0 0 0-.08-1.32 2 2 0 0 0-.3-.73 1.84 1.84 0 0 0-.93-.68A6.44 6.44 0 0 0 13.26 2h-1.18v1.15h.87a1.32 1.32 0 0 1 1.05.47 1.71 1.71 0 0 1 .36 1.23V7a3.22 3.22 0 0 0 .28 1.72 2 2 0 0 0 1.26.77 2.15 2.15 0 0 0-1.26.79 3.26 3.26 0 0 0-.26 1.72v3.15a1.67 1.67 0 0 1-.38 1.22 1.31 1.31 0 0 1-1.08.47h-.87V18h1.19a6.3 6.3 0 0 0 2.12-.29 1.82 1.82 0 0 0 .93-.68 1.94 1.94 0 0 0 .3-.72 7.46 7.46 0 0 0 .1-1.31v-3.77c0-1.15 0-1.15 1.15-1.15z"/><use id="right-bracket" width="20" height="20" transform="matrix(-1 0 0 1 20 0)" xlink:href="#left-bracket"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20"><title>code</title><path id="a" d="M1 10.08V8.92h1.15c1.15 0 1.15 0 1.15-1.15V5a7.42 7.42 0 0 1 .09-1.3 2 2 0 0 1 .3-.7 1.84 1.84 0 0 1 .93-.68A6.44 6.44 0 0 1 6.74 2h1.18v1.15h-.86A1.32 1.32 0 0 0 6 3.62a1.71 1.71 0 0 0-.36 1.23V7a3.22 3.22 0 0 1-.28 1.72 2 2 0 0 1-1.26.77 2.15 2.15 0 0 1 1.26.79A3.26 3.26 0 0 1 5.62 12v3.15A1.67 1.67 0 0 0 6 16.37a1.31 1.31 0 0 0 1.08.47h.87V18H6.74a6.3 6.3 0 0 1-2.12-.29 1.82 1.82 0 0 1-.93-.71 1.94 1.94 0 0 1-.3-.72A7.46 7.46 0 0 1 3.31 15v-3.77c0-1.15 0-1.15-1.15-1.15zm18 0V8.92h-1.15c-1.15 0-1.15 0-1.15-1.15V5a7.42 7.42 0 0 0-.08-1.32 2 2 0 0 0-.3-.73 1.84 1.84 0 0 0-.93-.68A6.44 6.44 0 0 0 13.26 2h-1.18v1.15h.87a1.32 1.32 0 0 1 1.05.47 1.71 1.71 0 0 1 .36 1.23V7a3.22 3.22 0 0 0 .28 1.72 2 2 0 0 0 1.26.77 2.15 2.15 0 0 0-1.26.79 3.26 3.26 0 0 0-.26 1.72v3.15a1.67 1.67 0 0 1-.38 1.22 1.31 1.31 0 0 1-1.08.47h-.87V18h1.19a6.3 6.3 0 0 0 2.12-.29 1.82 1.82 0 0 0 .93-.68 1.94 1.94 0 0 0 .3-.72 7.46 7.46 0 0 0 .1-1.31v-3.77c0-1.15 0-1.15 1.15-1.15z"/><use transform="matrix(-1 0 0 1 20 0)" xlink:href="#a"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 222 B After Width: | Height: | Size: 223 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>eye</title><path fill="#fff" d="M10 7.5a2.5 2.5 0 1 0 2.5 2.5A2.5 2.5 0 0 0 10 7.5zm0 7a4.5 4.5 0 1 1 4.5-4.5 4.5 4.5 0 0 1-4.5 4.5zM10 3C3 3 0 10 0 10s3 7 10 7 10-7 10-7-3-7-10-7z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>eye</title><g fill="#fff"><path d="M10 14.5a4.5 4.5 0 1 1 4.5-4.5 4.5 4.5 0 0 1-4.5 4.5zM10 3C3 3 0 10 0 10s3 7 10 7 10-7 10-7-3-7-10-7z"/><circle cx="10" cy="10" r="2.5"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 310 B |
|
Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 292 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>eye</title><path fill="#36c" d="M10 7.5a2.5 2.5 0 1 0 2.5 2.5A2.5 2.5 0 0 0 10 7.5zm0 7a4.5 4.5 0 1 1 4.5-4.5 4.5 4.5 0 0 1-4.5 4.5zM10 3C3 3 0 10 0 10s3 7 10 7 10-7 10-7-3-7-10-7z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>eye</title><g fill="#36c"><path d="M10 14.5a4.5 4.5 0 1 1 4.5-4.5 4.5 4.5 0 0 1-4.5 4.5zM10 3C3 3 0 10 0 10s3 7 10 7 10-7 10-7-3-7-10-7z"/><circle cx="10" cy="10" r="2.5"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 310 B |
|
Before Width: | Height: | Size: 220 B After Width: | Height: | Size: 216 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>eye</title><path d="M10 7.5a2.5 2.5 0 1 0 2.5 2.5A2.5 2.5 0 0 0 10 7.5zm0 7a4.5 4.5 0 1 1 4.5-4.5 4.5 4.5 0 0 1-4.5 4.5zM10 3C3 3 0 10 0 10s3 7 10 7 10-7 10-7-3-7-10-7z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>eye</title><path d="M10 14.5a4.5 4.5 0 1 1 4.5-4.5 4.5 4.5 0 0 1-4.5 4.5zM10 3C3 3 0 10 0 10s3 7 10 7 10-7 10-7-3-7-10-7z"/><circle cx="10" cy="10" r="2.5"/></svg>
|
||||
|
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 291 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#fff"><path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/><rect width="4" height="8" x="4" y="9" rx="2" ry="2"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#fff"><path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/><rect width="4" height="8" x="4" y="9" rx="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 287 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#36c"><path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/><rect width="4" height="8" x="4" y="9" rx="2" ry="2"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#36c"><path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/><rect width="4" height="8" x="4" y="9" rx="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 287 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/><rect width="4" height="8" x="4" y="9" rx="2" ry="2"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><path d="M19 16L2 12a3.83 3.83 0 0 1-1-2.5A3.83 3.83 0 0 1 2 7l17-4z"/><rect width="4" height="8" x="4" y="9" rx="2"/></svg>
|
||||
|
Before Width: | Height: | Size: 275 B After Width: | Height: | Size: 268 B |
|
Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 186 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#fff"><path d="M1 3l17 4c.6.7 1 1.6 1 2.5 0 .9-.4 1.8-1 2.5L1 16V3z"/><path d="M16 11v4c0 1.1-.9 2-2 2s-2-.9-2-2v-4c0-1.1.9-2 2-2s2 .9 2 2z"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#fff"><path d="M1 3l17 4c.6.7 1 1.6 1 2.5 0 .9-.4 1.8-1 2.5L1 16V3z"/><rect width="4" height="8" x="12" y="9" rx="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 281 B |
|
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 226 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#36c"><path d="M1 3l17 4c.6.7 1 1.6 1 2.5 0 .9-.4 1.8-1 2.5L1 16V3z"/><path d="M16 11v4c0 1.1-.9 2-2 2s-2-.9-2-2v-4c0-1.1.9-2 2-2s2 .9 2 2z"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><g fill="#36c"><path d="M1 3l17 4c.6.7 1 1.6 1 2.5 0 .9-.4 1.8-1 2.5L1 16V3z"/><rect width="4" height="8" x="12" y="9" rx="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 281 B |
|
Before Width: | Height: | Size: 181 B After Width: | Height: | Size: 181 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><path d="M1 3l17 4c.6.7 1 1.6 1 2.5 0 .9-.4 1.8-1 2.5L1 16V3z"/><path d="M16 11v4c0 1.1-.9 2-2 2s-2-.9-2-2v-4c0-1.1.9-2 2-2s2 .9 2 2z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>feedback</title><path d="M1 3l17 4c.6.7 1 1.6 1 2.5 0 .9-.4 1.8-1 2.5L1 16V3z"/><rect width="4" height="8" x="12" y="9" rx="2"/></svg>
|
||||
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 224 B After Width: | Height: | Size: 217 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><g fill="#fff"><title>help</title><path d="M10.06 1C13 1 15 2.89 15 5.53a4.59 4.59 0 0 1-2.29 4.08c-1.42.92-1.82 1.53-1.82 2.71V13H8.38v-.81a3.84 3.84 0 0 1 2-3.84c1.34-.9 1.79-1.53 1.79-2.71a2.1 2.1 0 0 0-2.08-2.14h-.17a2.3 2.3 0 0 0-2.38 2.22v.17H5A4.71 4.71 0 0 1 9.51 1a5 5 0 0 1 .55 0zM8 17a1.89 1.89 0 0 1 1.77-2H10a1.87 1.87 0 0 1 2 1.73 1.22 1.22 0 0 1 0 .27 1.87 1.87 0 0 1-1.73 2 1.22 1.22 0 0 1-.27 0 1.88 1.88 0 0 1-2-1.75A1 1 0 0 1 8 17z"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><g fill="#fff"><title>help</title><path d="M10.06 1C13 1 15 2.89 15 5.53a4.59 4.59 0 0 1-2.29 4.08c-1.42.92-1.82 1.53-1.82 2.71V13H8.38v-.81a3.84 3.84 0 0 1 2-3.84c1.34-.9 1.79-1.53 1.79-2.71a2.1 2.1 0 0 0-2.08-2.14h-.17a2.3 2.3 0 0 0-2.38 2.22v.17H5A4.71 4.71 0 0 1 9.51 1a5 5 0 0 1 .55 0z"/><circle cx="10" cy="17" r="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 584 B After Width: | Height: | Size: 455 B |
|
Before Width: | Height: | Size: 313 B After Width: | Height: | Size: 296 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><g fill="#36c"><title>help</title><path d="M10.06 1C13 1 15 2.89 15 5.53a4.59 4.59 0 0 1-2.29 4.08c-1.42.92-1.82 1.53-1.82 2.71V13H8.38v-.81a3.84 3.84 0 0 1 2-3.84c1.34-.9 1.79-1.53 1.79-2.71a2.1 2.1 0 0 0-2.08-2.14h-.17a2.3 2.3 0 0 0-2.38 2.22v.17H5A4.71 4.71 0 0 1 9.51 1a5 5 0 0 1 .55 0zM8 17a1.89 1.89 0 0 1 1.77-2H10a1.87 1.87 0 0 1 2 1.73 1.22 1.22 0 0 1 0 .27 1.87 1.87 0 0 1-1.73 2 1.22 1.22 0 0 1-.27 0 1.88 1.88 0 0 1-2-1.75A1 1 0 0 1 8 17z"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><g fill="#36c"><title>help</title><path d="M10.06 1C13 1 15 2.89 15 5.53a4.59 4.59 0 0 1-2.29 4.08c-1.42.92-1.82 1.53-1.82 2.71V13H8.38v-.81a3.84 3.84 0 0 1 2-3.84c1.34-.9 1.79-1.53 1.79-2.71a2.1 2.1 0 0 0-2.08-2.14h-.17a2.3 2.3 0 0 0-2.38 2.22v.17H5A4.71 4.71 0 0 1 9.51 1a5 5 0 0 1 .55 0z"/><circle cx="10" cy="17" r="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 584 B After Width: | Height: | Size: 455 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 215 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><path d="M10.06 1C13 1 15 2.89 15 5.53a4.59 4.59 0 0 1-2.29 4.08c-1.42.92-1.82 1.53-1.82 2.71V13H8.38v-.81a3.84 3.84 0 0 1 2-3.84c1.34-.9 1.79-1.53 1.79-2.71a2.1 2.1 0 0 0-2.08-2.14h-.17a2.3 2.3 0 0 0-2.38 2.22v.17H5A4.71 4.71 0 0 1 9.51 1a5 5 0 0 1 .55 0zM8 17a1.89 1.89 0 0 1 1.77-2H10a1.87 1.87 0 0 1 2 1.73 1.22 1.22 0 0 1 0 .27 1.87 1.87 0 0 1-1.73 2 1.22 1.22 0 0 1-.27 0 1.88 1.88 0 0 1-2-1.75A1 1 0 0 1 8 17z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><path d="M10.06 1C13 1 15 2.89 15 5.53a4.59 4.59 0 0 1-2.29 4.08c-1.42.92-1.82 1.53-1.82 2.71V13H8.38v-.81a3.84 3.84 0 0 1 2-3.84c1.34-.9 1.79-1.53 1.79-2.71a2.1 2.1 0 0 0-2.08-2.14h-.17a2.3 2.3 0 0 0-2.38 2.22v.17H5A4.71 4.71 0 0 1 9.51 1a5 5 0 0 1 .55 0z"/><circle cx="10" cy="17" r="2"/></svg>
|
||||
|
Before Width: | Height: | Size: 565 B After Width: | Height: | Size: 436 B |
|
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 217 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><path fill="#fff" d="M5.49.01A4.72 4.72 0 0 1 10 4.9H7.46v-.17a2.31 2.31 0 0 0-2.38-2.22h-.19a2.1 2.1 0 0 0-2.06 2.14c0 1.18.45 1.81 1.79 2.71a3.86 3.86 0 0 1 2 3.84v.81H4.11v-.68c0-1.18-.4-1.79-1.82-2.71A4.59 4.59 0 0 1 0 4.54C0 1.9 2 .01 4.94.01a5 5 0 0 1 .55 0zM7 16.26a1.88 1.88 0 0 1-2 1.75 1.22 1.22 0 0 1-.27 0 1.86 1.86 0 0 1-1.73-2 1.22 1.22 0 0 1 0-.27 1.87 1.87 0 0 1 2-1.73h.23a1.89 1.89 0 0 1 1.77 2 1 1 0 0 1 0 .25z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><g fill="#fff"><path d="M5.49.01A4.72 4.72 0 0 1 10 4.9H7.46v-.17a2.31 2.31 0 0 0-2.38-2.22h-.19a2.1 2.1 0 0 0-2.06 2.14c0 1.18.45 1.81 1.79 2.71a3.86 3.86 0 0 1 2 3.84v.81H4.11v-.68c0-1.18-.4-1.79-1.82-2.71A4.59 4.59 0 0 1 0 4.54C0 1.9 2 .01 4.94.01a5 5 0 0 1 .55 0z"/><circle cx="5" cy="16" r="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 578 B After Width: | Height: | Size: 450 B |
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 311 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><path fill="#36c" d="M5.49.01A4.72 4.72 0 0 1 10 4.9H7.46v-.17a2.31 2.31 0 0 0-2.38-2.22h-.19a2.1 2.1 0 0 0-2.06 2.14c0 1.18.45 1.81 1.79 2.71a3.86 3.86 0 0 1 2 3.84v.81H4.11v-.68c0-1.18-.4-1.79-1.82-2.71A4.59 4.59 0 0 1 0 4.54C0 1.9 2 .01 4.94.01a5 5 0 0 1 .55 0zM7 16.26a1.88 1.88 0 0 1-2 1.75 1.22 1.22 0 0 1-.27 0 1.86 1.86 0 0 1-1.73-2 1.22 1.22 0 0 1 0-.27 1.87 1.87 0 0 1 2-1.73h.23a1.89 1.89 0 0 1 1.77 2 1 1 0 0 1 0 .25z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><g fill="#36c"><path d="M5.49.01A4.72 4.72 0 0 1 10 4.9H7.46v-.17a2.31 2.31 0 0 0-2.38-2.22h-.19a2.1 2.1 0 0 0-2.06 2.14c0 1.18.45 1.81 1.79 2.71a3.86 3.86 0 0 1 2 3.84v.81H4.11v-.68c0-1.18-.4-1.79-1.82-2.71A4.59 4.59 0 0 1 0 4.54C0 1.9 2 .01 4.94.01a5 5 0 0 1 .55 0z"/><circle cx="5" cy="16" r="2"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 578 B After Width: | Height: | Size: 450 B |
|
Before Width: | Height: | Size: 223 B After Width: | Height: | Size: 216 B |
|
|
@ -1 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><path d="M5.49.01A4.72 4.72 0 0 1 10 4.9H7.46v-.17a2.31 2.31 0 0 0-2.38-2.22h-.19a2.1 2.1 0 0 0-2.06 2.14c0 1.18.45 1.81 1.79 2.71a3.86 3.86 0 0 1 2 3.84v.81H4.11v-.68c0-1.18-.4-1.79-1.82-2.71A4.59 4.59 0 0 1 0 4.54C0 1.9 2 .01 4.94.01a5 5 0 0 1 .55 0zM7 16.26a1.88 1.88 0 0 1-2 1.75 1.22 1.22 0 0 1-.27 0 1.86 1.86 0 0 1-1.73-2 1.22 1.22 0 0 1 0-.27 1.87 1.87 0 0 1 2-1.73h.23a1.89 1.89 0 0 1 1.77 2 1 1 0 0 1 0 .25z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>help</title><path d="M5.49.01A4.72 4.72 0 0 1 10 4.9H7.46v-.17a2.31 2.31 0 0 0-2.38-2.22h-.19a2.1 2.1 0 0 0-2.06 2.14c0 1.18.45 1.81 1.79 2.71a3.86 3.86 0 0 1 2 3.84v.81H4.11v-.68c0-1.18-.4-1.79-1.82-2.71A4.59 4.59 0 0 1 0 4.54C0 1.9 2 .01 4.94.01a5 5 0 0 1 .55 0z"/><circle cx="5" cy="16" r="2"/></svg>
|
||||
|
Before Width: | Height: | Size: 566 B After Width: | Height: | Size: 431 B |
|
After Width: | Height: | Size: 194 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><title>image layout basic</title><g fill="#fff"><path d="M20-.5h-.5V0h.5v-.5zm-2.5 0H17V0h.5v-.5zM15-.5h-.5V0h.5v-.5zm-2.5 0H12V0h.5v-.5zM10-.5h-.5V0h.5v-.5zm-2.5 0H7V0h.5v-.5zM5-.5h-.5V0H5v-.5zm-2.5 0H2V0h.5v-.5zM0 0h-.5v.5H0V0zm0 2.5h-.5V3H0v-.5zM0 5h-.5v.5H0V5zm0 2.5h-.5V8H0v-.5zM0 10h-.5v.5H0V10zm0 2.5h-.5v.5H0v-.5zM0 15h-.5v.5H0V15zm0 2.5h-.5v.5H0v-.5zM.5 20H0v.5h.5V20zM3 20h-.5v.5H3V20zm2.5 0H5v.5h.5V20zM8 20h-.5v.5H8V20zm2.5 0H10v.5h.5V20zm2.5 0h-.5v.5h.5V20zm2.5 0H15v.5h.5V20zm2.5 0h-.5v.5h.5V20zm2.5-.5H20v.5h.5v-.5zm0-2.5H20v.5h.5V17zm0-2.5H20v.5h.5v-.5zm0-2.5H20v.5h.5V12zm0-2.5H20v.5h.5v-.5zm0-2.5H20v.5h.5V7zm0-2.5H20V5h.5v-.5zm0-2.5H20v.5h.5V2zM1 3v14h18V3zm17 13H2V4h16z"/><path d="M8.58 14h.81l3.11-4 3 4H17l-4.5-6L9 12.51 6.5 9.5 3 14h1.56l1.94-2.5L8.58 14z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 913 B |
|
After Width: | Height: | Size: 253 B |