Merge "Update OOUI to v0.31.1"

This commit is contained in:
jenkins-bot 2019-03-22 19:13:06 +00:00 committed by Gerrit Code Review
commit 97cc9f6702
96 changed files with 977 additions and 819 deletions

View file

@ -115,7 +115,7 @@ For notes on 1.32.x and older releases, see HISTORY.
* Added jakub-onderka/php-console-highlighter 0.3.2 explicitly (dev-only).
==== Changed external libraries ====
* Updated OOUI from v0.29.2 to v0.31.0.
* Updated OOUI from v0.29.2 to v0.31.1.
* 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.

View file

@ -27,7 +27,7 @@
"ext-xml": "*",
"guzzlehttp/guzzle": "6.3.3",
"liuggio/statsd-php-client": "1.0.18",
"oojs/oojs-ui": "0.31.0",
"oojs/oojs-ui": "0.31.1",
"pear/mail": "1.4.1",
"pear/mail_mime": "1.10.2",
"pear/net_smtp": "1.8.1",

View file

@ -163,8 +163,8 @@ oojs-router:
ooui:
type: tar
src: https://registry.npmjs.org/oojs-ui/-/oojs-ui-0.31.0.tgz
integrity: sha384-kmMOvTjLZbr0Nd1iiV61KSDevnZffuY0jpr7Wjoo61HrJY53b9SacjQqebcNzTEK
src: https://registry.npmjs.org/oojs-ui/-/oojs-ui-0.31.1.tgz
integrity: sha384-M9KdU6u02zSKCVczcw6YJmSvFLhdeagNg9CPhizYVqrybL8bamrF5u6YfrFGEyiv
dest:
# Main stuff
package/dist/oojs-ui-core.js{,.map.json}:

View file

@ -1,4 +1,45 @@
# OOUI Release History
## v0.31.1 / 2019-03-21
### Deprecations
* [DEPRECATING CHANGE] core: Remove unused Date.now fallback (Timo Tijhof)
* [DEPRECATING CHANGE] textures: Deprecate 'pending.gif' (Volker E.)
* [DEPRECATING CHANGE] textures: Deprecate unused 'transparency' (Volker E.)
### Features
* MenuTagMultiselectWidget: `hideOnChoose` should be set to false (Moriel Schottlender)
* MenuTagMultiselectWidget: `highlightOnFilter` only if not `allowArbitrary` (Moriel Schottlender)
* MenuTagMultiselectWidget: Fix highlight and scrolling to item behavior (Moriel Schottlender)
* SearchInputWidget: Use click handler for indicator (Ed Sanders)
* SelectWidget: Allow multiselect mode, add to MenuTagMultiselectWidget (Moriel Schottlender)
* SelectFileWidget: Support a button-only mode (Ed Sanders)
* SelectFileWidget: Suppress misleading browser default tooltips (Bartosz Dziewoński)
* SelectFileInputWidget: Create as a super-class of SelectFileWidget (Ed Sanders)
* SelectFileInputWidget: Allow button config to be passed (Ed Sanders)
* TagMultiselectWidget: Edit by item label, not data (Moriel Schottlender)
### Styles
* Separate SelectFileWidget and SelectFileInputWidget styles (Ed Sanders)
* themes: Provide `background` needed for PendingElement on inputs (Volker E.)
* themes: Replace 'pending.gif' with CSS animation (Volker E.)
* icons: Manually rewrite paths of tableMove….svg icons (Thiemo Kreuz)
* icons: Recreate settings.svg icon with shorter syntax (Thiemo Kreuz)
* icons: Remove invisible parts from web.svg icon (Thiemo Kreuz)
* icons: Remove unused dotted borders from imageLayout….svg icons (Thiemo Kreuz)
* icons: Use rounded <rect> elements to optimize some SVG icons (Thiemo Kreuz)
### Code
* MenuSectionOptionWidget: Avoid select events (Gabriel Birke)
* SelectFileInputWidget: Rewrite as an ActionFieldLayout (Ed Sanders)
* testsuitegenerator: Reduce PHP test count by 40% (Ed Sanders)
* testsuitegenerator: Reduce some code duplication (Bartosz Dziewoński)
* testsuitegenerator: Use normal methods more instead of lambdas (Bartosz Dziewoński)
* docs: Clarify some types in documentation (Bartosz Dziewoński)
* docs: Fix missing `;` and typos in documentation examples (Volker E.)
* demos: Make demo toolbar narrower (Ed Sanders)
* build: Specify library entry (Stephen Niedzielski)
* Grunt: Add a quick-build-code task for JS-only quick builds (Ed Sanders)
## v0.31.0 / 2019-03-13
### Breaking changes
* [BREAKING CHANGE] Remove FlaggedElement from InputWidget (Ed Sanders)

View file

@ -31,6 +31,7 @@
"ooui-dialog-process-dismiss": "رد",
"ooui-dialog-process-retry": "دوباره امتحان کنید",
"ooui-dialog-process-continue": "ادامه",
"ooui-combobox-button-label": "پایین‌رونده برای جعبهٔ پایین‌رونده",
"ooui-selectfile-button-select": "یک فایل انتخاب کنید",
"ooui-selectfile-not-supported": "انتخاب پرونده پشتیبانی نمی‌شود",
"ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است",

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:20Z
* Date: 2019-03-21T15:54:37Z
*/
( function ( OO ) {

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-element-hidden {
display: none !important;
@ -345,7 +345,38 @@
}
.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/wikimediaui/images/textures/pending.gif);
background-color: #ddd;
background-image: -webkit-linear-gradient(135deg, #fff 25%, transparent 25%, transparent 50%, #fff 50%, #fff 75%, transparent 75%, transparent);
background-image: -moz-linear-gradient(135deg, #fff 25%, transparent 25%, transparent 50%, #fff 50%, #fff 75%, transparent 75%, transparent);
background-image: linear-gradient(135deg, #fff 25%, transparent 25%, transparent 50%, #fff 50%, #fff 75%, transparent 75%, transparent);
background-size: 1.5625em 1.5625em;
-webkit-animation: oo-ui-pendingElement-stripes 650ms linear infinite;
-moz-animation: oo-ui-pendingElement-stripes 650ms linear infinite;
animation: oo-ui-pendingElement-stripes 650ms linear infinite;
}
@-webkit-keyframes oo-ui-pendingElement-stripes {
0% {
background-position: -1.5625em 0;
}
100% {
background-position: 0 0;
}
}
@-moz-keyframes oo-ui-pendingElement-stripes {
0% {
background-position: -1.5625em 0;
}
100% {
background-position: 0 0;
}
}
@keyframes oo-ui-pendingElement-stripes {
0% {
background-position: -1.5625em 0;
}
100% {
background-position: 0 0;
}
}
@ -1204,7 +1235,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
line-height: 1.275;
}
.oo-ui-textInputWidget .oo-ui-pendingElement-pending {
background-color: transparent;
background-color: #ddd;
}
.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
@ -1659,6 +1690,68 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
border-left-width: 0;
}
.oo-ui-selectFileInputWidget {
width: 100%;
max-width: 50em;
margin-right: 0.5em;
}
.oo-ui-selectFileInputWidget-selectButton > .oo-ui-buttonElement-button {
position: relative;
overflow: hidden;
}
.oo-ui-selectFileInputWidget-selectButton > .oo-ui-buttonElement-button > [type='file'] {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
opacity: 0;
z-index: 1;
cursor: pointer;
padding-top: 100px;
}
.oo-ui-selectFileInputWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > [type='file'] {
display: none;
}
.oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
pointer-events: none;
}
.oo-ui-selectFileInputWidget-label {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-overflow: ellipsis;
}
.oo-ui-selectFileInputWidget-clearButton {
position: absolute;
z-index: 2;
}
.oo-ui-selectFileInputWidget-empty .oo-ui-selectFileInputWidget-clearButton {
display: none;
}
.oo-ui-selectFileInputWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileInputWidget-label {
cursor: default;
}
.oo-ui-selectFileInputWidget:last-child {
margin-right: 0;
}
.oo-ui-selectFileInputWidget-label {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
left: 0.5em;
right: 2.175em;
line-height: 2.3em;
margin: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.oo-ui-defaultOverlay {
position: absolute;
top: 0;

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-element-hidden {
display: none !important;
@ -462,7 +462,38 @@
}
.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/wikimediaui/images/textures/pending.gif);
background-color: #eaecf0;
background-image: -webkit-linear-gradient(135deg, #fff 25%, transparent 25%, transparent 50%, #fff 50%, #fff 75%, transparent 75%, transparent);
background-image: -moz-linear-gradient(135deg, #fff 25%, transparent 25%, transparent 50%, #fff 50%, #fff 75%, transparent 75%, transparent);
background-image: linear-gradient(135deg, #fff 25%, transparent 25%, transparent 50%, #fff 50%, #fff 75%, transparent 75%, transparent);
background-size: 1.42857143em 1.42857143em;
-webkit-animation: oo-ui-pendingElement-stripes 650ms linear infinite;
-moz-animation: oo-ui-pendingElement-stripes 650ms linear infinite;
animation: oo-ui-pendingElement-stripes 650ms linear infinite;
}
@-webkit-keyframes oo-ui-pendingElement-stripes {
0% {
background-position: -1.42857143em 0;
}
100% {
background-position: 0 0;
}
}
@-moz-keyframes oo-ui-pendingElement-stripes {
0% {
background-position: -1.42857143em 0;
}
100% {
background-position: 0 0;
}
}
@keyframes oo-ui-pendingElement-stripes {
0% {
background-position: -1.42857143em 0;
}
100% {
background-position: 0 0;
}
}
@ -1540,7 +1571,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
line-height: 1.286;
}
.oo-ui-textInputWidget .oo-ui-pendingElement-pending {
background-color: transparent;
background-color: #eaecf0;
}
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-inputWidget-input {
padding-left: 2.64285714em;
@ -2083,6 +2114,70 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
opacity: 1;
}
.oo-ui-selectFileInputWidget {
width: 100%;
max-width: 50em;
margin-right: 0.5em;
}
.oo-ui-selectFileInputWidget-selectButton > .oo-ui-buttonElement-button {
position: relative;
overflow: hidden;
}
.oo-ui-selectFileInputWidget-selectButton > .oo-ui-buttonElement-button > [type='file'] {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
opacity: 0;
z-index: 1;
cursor: pointer;
padding-top: 100px;
}
.oo-ui-selectFileInputWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > [type='file'] {
display: none;
}
.oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
pointer-events: none;
}
.oo-ui-selectFileInputWidget-label {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-overflow: ellipsis;
}
.oo-ui-selectFileInputWidget-clearButton {
position: absolute;
z-index: 2;
}
.oo-ui-selectFileInputWidget-empty .oo-ui-selectFileInputWidget-clearButton {
display: none;
}
.oo-ui-selectFileInputWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileInputWidget-label {
cursor: default;
}
.oo-ui-selectFileInputWidget:last-child {
margin-right: 0;
}
.oo-ui-selectFileInputWidget-label {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
display: block;
right: 2.85714286em;
padding-top: 0.57142857em;
padding-left: 0.57142857em;
padding-bottom: 0.57142857em;
white-space: nowrap;
}
.oo-ui-selectFileInputWidget.oo-ui-labelElement .oo-ui-selectFileInputWidget-label {
line-height: 1;
}
.oo-ui-defaultOverlay {
position: absolute;
top: 0;

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-20T23:07:02Z
* Date: 2019-03-21T15:54:37Z
*/
( function ( OO ) {
@ -295,7 +295,7 @@ OO.ui.throttle = function ( func, wait ) {
previous = 0,
run = function () {
timeout = null;
previous = OO.ui.now();
previous = Date.now();
func.apply( context, args );
};
return function () {
@ -304,7 +304,7 @@ OO.ui.throttle = function ( func, wait ) {
// period. If it's less, run the function immediately. If it's more,
// set a timeout for the remaining time -- but don't replace an
// existing timeout, since that'd indefinitely prolong the wait.
var remaining = wait - ( OO.ui.now() - previous );
var remaining = wait - ( Date.now() - previous );
context = this;
args = arguments;
if ( remaining <= 0 ) {
@ -323,10 +323,12 @@ OO.ui.throttle = function ( func, wait ) {
/**
* A (possibly faster) way to get the current timestamp as an integer.
*
* @deprecated Since 0.31.1; use `Date.now()` instead.
* @return {number} Current timestamp, in milliseconds since the Unix epoch
*/
OO.ui.now = Date.now || function () {
return new Date().getTime();
OO.ui.now = function () {
OO.ui.warnDeprecation( 'OO.ui.now() is deprecated, use Date.now() instead' );
return Date.now();
};
/**
@ -2118,7 +2120,7 @@ OO.ui.mixin.TabIndexedElement.prototype.getInputId = function () {
OO.ui.mixin.TabIndexedElement.prototype.isLabelableNode = function ( $node ) {
var
labelableTags = [ 'button', 'meter', 'output', 'progress', 'select', 'textarea' ],
tagName = $node.prop( 'tagName' ).toLowerCase();
tagName = ( $node.prop( 'tagName' ) || '' ).toLowerCase();
if ( tagName === 'input' && $node.attr( 'type' ) !== 'hidden' ) {
return true;
@ -6420,6 +6422,7 @@ OO.ui.OptionWidget.prototype.getMatchText = function () {
* Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See
* the [OOUI documentation on MediaWiki] [2] for examples.
* [2]: https://www.mediawiki.org/wiki/OOUI/Widgets/Selects_and_Options
* @cfg {boolean} [multiselect] Allow for multiple selections
*/
OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
// Configuration initialization
@ -6436,6 +6439,7 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
// Properties
this.pressed = false;
this.selecting = null;
this.multiselect = !!config.multiselect;
this.onDocumentMouseUpHandler = this.onDocumentMouseUp.bind( this );
this.onDocumentMouseMoveHandler = this.onDocumentMouseMove.bind( this );
this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
@ -6496,13 +6500,16 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.mixin.GroupWidget );
* A `select` event is emitted when the selection is modified programmatically with the #selectItem
* method.
*
* @param {OO.ui.OptionWidget|null} item Selected item
* @param {OO.ui.OptionWidget[]|OO.ui.OptionWidget|null} items Currently selected items
*/
/**
* @event choose
*
* A `choose` event is emitted when an item is chosen with the #chooseItem method.
*
* @param {OO.ui.OptionWidget} item Chosen item
* @param {boolean} selected Item is selected
*/
/**
@ -6699,12 +6706,13 @@ OO.ui.SelectWidget.prototype.onMouseLeave = function () {
OO.ui.SelectWidget.prototype.onDocumentKeyDown = function ( e ) {
var nextItem,
handled = false,
currentItem = this.findHighlightedItem() || this.findSelectedItem();
currentItem = this.findHighlightedItem(),
firstItem = this.getItems()[ 0 ];
if ( !this.isDisabled() && this.isVisible() ) {
switch ( e.keyCode ) {
case OO.ui.Keys.ENTER:
if ( currentItem && currentItem.constructor.static.highlightable ) {
if ( currentItem ) {
// Was only highlighted, now let's select it. No-op if already selected.
this.chooseItem( currentItem );
handled = true;
@ -6713,18 +6721,18 @@ OO.ui.SelectWidget.prototype.onDocumentKeyDown = function ( e ) {
case OO.ui.Keys.UP:
case OO.ui.Keys.LEFT:
this.clearKeyPressBuffer();
nextItem = this.findRelativeSelectableItem( currentItem, -1 );
nextItem = currentItem ? this.findRelativeSelectableItem( currentItem, -1 ) : firstItem;
handled = true;
break;
case OO.ui.Keys.DOWN:
case OO.ui.Keys.RIGHT:
this.clearKeyPressBuffer();
nextItem = this.findRelativeSelectableItem( currentItem, 1 );
nextItem = currentItem ? this.findRelativeSelectableItem( currentItem, 1 ) : firstItem;
handled = true;
break;
case OO.ui.Keys.ESCAPE:
case OO.ui.Keys.TAB:
if ( currentItem && currentItem.constructor.static.highlightable ) {
if ( currentItem ) {
currentItem.setHighlighted( false );
}
this.unbindDocumentKeyDownListener();
@ -6944,20 +6952,36 @@ OO.ui.SelectWidget.prototype.findTargetItem = function ( e ) {
return $option.data( 'oo-ui-optionWidget' ) || null;
};
/**
* Find all selected items, if there are any. If the widget allows for multiselect
* it will return an array of selected options. If the widget doesn't allow for
* multiselect, it will return the selected option or null if no item is selected.
*
* @return {OO.ui.OptionWidget[]|OO.ui.OptionWidget|null} If the widget is multiselect
* then return an array of selected items (or empty array),
* if the widget is not multiselect, return a single selected item, or `null`
* if no item is selected
*/
OO.ui.SelectWidget.prototype.findSelectedItems = function () {
var selected = this.items.filter( function ( item ) {
return item.isSelected();
} );
return this.multiselect ?
selected :
selected[ 0 ] || null;
};
/**
* Find selected item.
*
* @return {OO.ui.OptionWidget|null} Selected item, `null` if no item is selected
* @return {OO.ui.OptionWidget[]|OO.ui.OptionWidget|null} If the widget is multiselect
* then return an array of selected items (or empty array),
* if the widget is not multiselect, return a single selected item, or `null`
* if no item is selected
*/
OO.ui.SelectWidget.prototype.findSelectedItem = function () {
var i, len;
for ( i = 0, len = this.items.length; i < len; i++ ) {
if ( this.items[ i ].isSelected() ) {
return this.items[ i ];
}
}
return null;
return this.findSelectedItems();
};
/**
@ -7104,6 +7128,30 @@ OO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {
return this.selectItem( itemFromData );
};
/**
* Programmatically unselect an option by its reference. If the widget
* allows for multiple selections, there may be other items still selected;
* otherwise, no items will be selected.
* If no item is given, all selected items will be unselected.
*
* @param {OO.ui.OptionWidget} [item] Item to unselect
* @fires select
* @chainable
* @return {OO.ui.Widget} The widget, for chaining
*/
OO.ui.SelectWidget.prototype.unselectItem = function ( item ) {
if ( item ) {
item.setSelected( false );
} else {
this.items.forEach( function ( item ) {
item.setSelected( false );
} );
}
this.emit( 'select', this.findSelectedItems() );
return this;
};
/**
* Programmatically select an option by its reference. If the `item` parameter is omitted,
* all options will be deselected.
@ -7117,14 +7165,20 @@ OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
var i, len, selected,
changed = false;
for ( i = 0, len = this.items.length; i < len; i++ ) {
selected = this.items[ i ] === item;
if ( this.items[ i ].isSelected() !== selected ) {
this.items[ i ].setSelected( selected );
changed = true;
if ( this.multiselect && item ) {
// Select the item directly
item.setSelected( true );
} else {
for ( i = 0, len = this.items.length; i < len; i++ ) {
selected = this.items[ i ] === item;
if ( this.items[ i ].isSelected() !== selected ) {
this.items[ i ].setSelected( selected );
changed = true;
}
}
}
if ( changed ) {
// TODO: When should a non-highlightable element be selected?
if ( item && !item.constructor.static.highlightable ) {
if ( item ) {
this.$focusOwner.attr( 'aria-activedescendant', item.getElementId() );
@ -7132,7 +7186,7 @@ OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
this.$focusOwner.removeAttr( 'aria-activedescendant' );
}
}
this.emit( 'select', item );
this.emit( 'select', this.findSelectedItems() );
}
return this;
@ -7185,8 +7239,13 @@ OO.ui.SelectWidget.prototype.pressItem = function ( item ) {
*/
OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
if ( item ) {
this.selectItem( item );
this.emit( 'choose', item );
if ( this.multiselect && item.isSelected() ) {
this.unselectItem( item );
} else {
this.selectItem( item );
}
this.emit( 'choose', item, item.isSelected() );
}
return this;
@ -7655,7 +7714,7 @@ OO.ui.MenuSelectWidget.prototype.onDocumentKeyDown = function ( e ) {
break;
case OO.ui.Keys.ESCAPE:
case OO.ui.Keys.TAB:
if ( currentItem ) {
if ( currentItem && !this.multiselect ) {
currentItem.setHighlighted( false );
}
this.toggle( false );
@ -7712,10 +7771,6 @@ OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
section.toggle( showAll || !sectionEmpty );
}
if ( anyVisible && this.items.length && !exactMatch ) {
this.scrollItemIntoView( this.items[ 0 ] );
}
if ( !anyVisible ) {
this.highlightItem( null );
}
@ -7872,7 +7927,7 @@ OO.ui.MenuSelectWidget.prototype.clearItems = function () {
* @inheritdoc
*/
OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
var change, originalHeight, flippedHeight;
var change, originalHeight, flippedHeight, selectedItem;
visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
change = visible !== this.isVisible();
@ -7937,9 +7992,13 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
this.$focusOwner.attr( 'aria-expanded', 'true' );
if ( this.findSelectedItem() ) {
this.$focusOwner.attr( 'aria-activedescendant', this.findSelectedItem().getElementId() );
this.findSelectedItem().scrollElementIntoView( { duration: 0 } );
selectedItem = this.findSelectedItem();
if ( !this.multiselect && selectedItem ) {
// TODO: Verify if this is even needed; This is already done on highlight changes
// in SelectWidget#highlightItem, so we should just need to highlight the item we need to
// highlight here and not bother with attr or checking selections.
this.$focusOwner.attr( 'aria-activedescendant', selectedItem.getElementId() );
selectedItem.scrollElementIntoView( { duration: 0 } );
}
// Auto-hide
@ -7962,6 +8021,13 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
return this;
};
/**
* Scroll to the top of the menu
*/
OO.ui.MenuSelectWidget.prototype.scrollToTop = function () {
this.$element.scrollTop( 0 );
};
/**
* DropdownWidgets are not menus themselves, rather they contain a menu of options created with
* OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
@ -10397,7 +10463,7 @@ OO.ui.CheckboxMultiselectInputWidget.prototype.focus = function () {
* // A TextInputWidget.
* var textInput = new OO.ui.TextInputWidget( {
* value: 'Text input'
* } )
* } );
* $( document.body ).append( textInput.$element );
*
* [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Inputs
@ -11117,6 +11183,7 @@ OO.ui.SearchInputWidget = function OoUiSearchInputWidget( config ) {
this.connect( this, {
change: 'onChange'
} );
this.$indicator.on( 'click', this.onIndicatorClick.bind( this ) );
// Initialization
this.updateSearchIndicator();
@ -11140,9 +11207,12 @@ OO.ui.SearchInputWidget.prototype.getSaneType = function () {
};
/**
* @inheritdoc
* Handle click events on the indicator
*
* @param {jQuery.Event} e Click event
* @return {boolean}
*/
OO.ui.SearchInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
OO.ui.SearchInputWidget.prototype.onIndicatorClick = function ( e ) {
if ( e.which === OO.ui.MouseButtons.LEFT ) {
// Clear the text field
this.setValue( '' );
@ -11205,8 +11275,8 @@ OO.ui.SearchInputWidget.prototype.setReadOnly = function ( state ) {
* // A MultilineTextInputWidget.
* var multilineTextInput = new OO.ui.MultilineTextInputWidget( {
* value: 'Text input on multiple lines'
* } )
* $( 'body' ).append( multilineTextInput.$element );
* } );
* $( document.body ).append( multilineTextInput.$element );
*
* [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Inputs#MultilineTextInputWidget
*
@ -12360,21 +12430,21 @@ OO.ui.FieldsetLayout.static.tagName = 'fieldset';
* [2]: https://www.mediawiki.org/wiki/OOUI/Widgets/Inputs
*
* @example
* // Example of a form layout that wraps a fieldset layout
* // Example of a form layout that wraps a fieldset layout.
* var input1 = new OO.ui.TextInputWidget( {
* placeholder: 'Username'
* } );
* var input2 = new OO.ui.TextInputWidget( {
* placeholder: 'Password',
* type: 'password'
* } );
* var submit = new OO.ui.ButtonInputWidget( {
* label: 'Submit'
* } );
* placeholder: 'Username'
* } ),
* input2 = new OO.ui.TextInputWidget( {
* placeholder: 'Password',
* type: 'password'
* } ),
* submit = new OO.ui.ButtonInputWidget( {
* label: 'Submit'
* } ),
* fieldset = new OO.ui.FieldsetLayout( {
* label: 'A form layout'
* } );
*
* var fieldset = new OO.ui.FieldsetLayout( {
* label: 'A form layout'
* } );
* fieldset.addItems( [
* new OO.ui.FieldLayout( input1, {
* label: 'Username',
@ -12565,7 +12635,7 @@ OO.ui.PanelLayout.prototype.focus = function () {
* Note that inline elements, such as OO.ui.ButtonWidgets, do not need this wrapper.
*
* @example
* // HorizontalLayout with a text input and a label
* // HorizontalLayout with a text input and a label.
* var layout = new OO.ui.HorizontalLayout( {
* items: [
* new OO.ui.LabelWidget( { label: 'Label' } ),
@ -12978,6 +13048,254 @@ OO.ui.NumberInputWidget.prototype.setDisabled = function ( disabled ) {
return this;
};
/**
* SelectFileInputWidgets allow for selecting files, using <input type="file">. These
* widgets can be configured with {@link OO.ui.mixin.IconElement icons}, {@link
* OO.ui.mixin.IndicatorElement indicators} and {@link OO.ui.mixin.TitledElement titles}.
* Please see the [OOUI documentation on MediaWiki] [1] for more information and examples.
*
* SelectFileInputWidgets must be used in HTML forms, as getValue only returns the filename.
*
* @example
* // A file select input widget.
* var selectFile = new OO.ui.SelectFileInputWidget();
* $( document.body ).append( selectFile.$element );
*
* [1]: https://www.mediawiki.org/wiki/OOUI/Widgets
*
* @class
* @extends OO.ui.InputWidget
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.
* @cfg {string} [placeholder] Text to display when no file is selected.
* @cfg {Object} [button] Config to pass to select file button.
* @cfg {string} [icon] Icon to show next to file info
*/
OO.ui.SelectFileInputWidget = function OoUiSelectFileInputWidget( config ) {
config = config || {};
// Construct buttons before parent method is called (calling setDisabled)
this.selectButton = new OO.ui.ButtonWidget( $.extend( {
$element: $( '<label>' ),
classes: [ 'oo-ui-selectFileInputWidget-selectButton' ],
label: OO.ui.msg( 'ooui-selectfile-button-select' )
}, config.button ) );
// Configuration initialization
config = $.extend( {
accept: null,
placeholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),
$tabIndexed: this.selectButton.$tabIndexed
}, config );
this.info = new OO.ui.SearchInputWidget( {
classes: [ 'oo-ui-selectFileInputWidget-info' ],
placeholder: config.placeholder,
// Pass an empty collection so that .focus() always does nothing
$tabIndexed: $( [] )
} ).setIcon( config.icon );
// Set tabindex manually on $input as $tabIndexed has been overridden
this.info.$input.attr( 'tabindex', -1 );
// Parent constructor
OO.ui.SelectFileInputWidget.parent.call( this, config );
// Properties
this.currentFile = null;
if ( Array.isArray( config.accept ) ) {
this.accept = config.accept;
} else {
this.accept = null;
}
this.onFileSelectedHandler = this.onFileSelected.bind( this );
// Events
this.info.connect( this, { change: 'onInfoChange' } );
this.selectButton.$button.on( {
keypress: this.onKeyPress.bind( this )
} );
this.connect( this, { change: 'updateUI' } );
// Initialization
this.setupInput();
this.fieldLayout = new OO.ui.ActionFieldLayout( this.info, this.selectButton, { align: 'top' } );
this.$element
.addClass( 'oo-ui-selectFileInputWidget' )
.append( this.fieldLayout.$element );
this.updateUI();
};
/* Setup */
OO.inheritClass( OO.ui.SelectFileInputWidget, OO.ui.InputWidget );
/* Methods */
/**
* Get the filename of the currently selected file.
*
* @return {string} Filename
*/
OO.ui.SelectFileInputWidget.prototype.getFilename = function () {
if ( this.currentFile ) {
return this.currentFile.name;
} else {
// Try to strip leading fakepath.
return this.getValue().split( '\\' ).pop();
}
};
/**
* @inheritdoc
*/
OO.ui.SelectFileInputWidget.prototype.setValue = function ( value ) {
if ( value === undefined ) {
// Called during init, don't replace value if just infusing.
return;
}
if ( value ) {
// We need to update this.value, but without trying to modify
// the DOM value, which would throw an exception.
if ( this.value !== value ) {
this.value = value;
this.emit( 'change', this.value );
}
} else {
this.currentFile = null;
// Parent method
OO.ui.SelectFileInputWidget.super.prototype.setValue.call( this, '' );
}
};
/**
* Handle file selection from the input.
*
* @protected
* @param {jQuery.Event} e
*/
OO.ui.SelectFileInputWidget.prototype.onFileSelected = function ( e ) {
var file = OO.getProp( e.target, 'files', 0 ) || null;
if ( file && !this.isAllowedType( file.type ) ) {
file = null;
}
this.currentFile = file;
};
/**
* Update the user interface when a file is selected or unselected.
*
* @protected
*/
OO.ui.SelectFileInputWidget.prototype.updateUI = function () {
this.info.setValue( this.getFilename() );
};
/**
* Setup the input element.
*
* @protected
*/
OO.ui.SelectFileInputWidget.prototype.setupInput = function () {
this.$input
.attr( {
type: 'file',
// this.selectButton is tabindexed
tabindex: -1,
// Infused input may have previously by
// TabIndexed, so remove aria-disabled attr.
'aria-disabled': null
} )
.on( 'change', this.onFileSelectedHandler );
if ( this.accept ) {
this.$input.attr( 'accept', this.accept.join( ', ' ) );
}
this.selectButton.$button.append( this.$input );
};
/**
* Determine if we should accept this file.
*
* @private
* @param {string} mimeType File MIME type
* @return {boolean}
*/
OO.ui.SelectFileInputWidget.prototype.isAllowedType = function ( mimeType ) {
var i, mimeTest;
if ( !this.accept || !mimeType ) {
return true;
}
for ( i = 0; i < this.accept.length; i++ ) {
mimeTest = this.accept[ i ];
if ( mimeTest === mimeType ) {
return true;
} else if ( mimeTest.substr( -2 ) === '/*' ) {
mimeTest = mimeTest.substr( 0, mimeTest.length - 1 );
if ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {
return true;
}
}
}
return false;
};
/**
* Handle info input change events
*
* The info widget can only be changed by the user
* with the clear button.
*
* @private
* @param {string} value
*/
OO.ui.SelectFileInputWidget.prototype.onInfoChange = function ( value ) {
if ( value === '' ) {
this.setValue( null );
}
};
/**
* Handle key press events.
*
* @private
* @param {jQuery.Event} e Key press event
* @return {undefined/boolean} False to prevent default if event is handled
*/
OO.ui.SelectFileInputWidget.prototype.onKeyPress = function ( e ) {
if ( !this.isDisabled() && this.$input &&
( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
) {
// Emit a click to open the file selector.
this.$input.trigger( 'click' );
// Taking focus from the selectButton means keyUp isn't fired, so fire it manually.
this.selectButton.onDocumentKeyUp( e );
return false;
}
};
/**
* @inheritdoc
*/
OO.ui.SelectFileInputWidget.prototype.setDisabled = function ( disabled ) {
// Parent method
OO.ui.SelectFileInputWidget.parent.prototype.setDisabled.call( this, disabled );
this.selectButton.setDisabled( disabled );
this.info.setDisabled( disabled );
return this;
};
}( OO ) );
//# sourceMappingURL=oojs-ui-core.js.map.json

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-checkIcon {
display: none;

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-tool {
-webkit-box-sizing: border-box;

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:20Z
* Date: 2019-03-21T15:54:37Z
*/
( function ( OO ) {

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
cursor: move;
@ -368,73 +368,13 @@
margin-left: -2px;
}
.oo-ui-selectFileWidget {
display: inline-block;
vertical-align: middle;
width: 100%;
max-width: 50em;
margin-right: 0.5em;
}
.oo-ui-selectFileWidget-selectButton {
display: table-cell;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
position: relative;
overflow: hidden;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > [type='file'] {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
opacity: 0;
z-index: 1;
cursor: pointer;
padding-top: 100px;
}
.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > [type='file'] {
display: none;
}
.oo-ui-selectFileWidget-info {
width: 100%;
display: table-cell;
vertical-align: middle;
position: relative;
overflow: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
cursor: default;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.oo-ui-selectFileWidget-label {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-overflow: ellipsis;
}
.oo-ui-selectFileWidget-clearButton {
position: absolute;
z-index: 2;
}
.oo-ui-selectFileWidget-dropTarget {
position: relative;
cursor: default;
height: 8.815em;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-dropLabel,
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-selectButton {
display: none;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail {
@ -447,206 +387,82 @@
background-repeat: no-repeat;
background-size: contain;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail.oo-ui-pendingElement-pending {
background-repeat: repeat;
background-size: auto;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail > .oo-ui-selectFileWidget-noThumbnail-icon {
opacity: 0.4;
height: 7.815em;
width: 7.815em;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
.oo-ui-selectFileWidget-dropTarget .oo-ui-pendingElement-pending {
background-repeat: repeat;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-info {
display: block;
height: 100%;
width: auto;
margin-left: 8.815em;
border: 0;
margin-right: 0;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
border: 0;
box-shadow: none;
background: transparent;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-label {
display: block;
position: relative;
top: inherit;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-fileName {
display: block;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget {
text-align: center;
}
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-info {
display: none;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-selectButton {
display: block;
margin: 2.2em 1em 1em;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
text-align: center;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
margin: 0;
}
.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
display: none;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileWidget-label {
cursor: default;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropLabel {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropLabel {
display: block;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget {
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget .oo-ui-buttonElement-button,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-buttonElement-button {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget .oo-ui-buttonElement-button {
cursor: no-drop;
}
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
height: auto;
}
.oo-ui-selectFileWidget:last-child {
margin-right: 0;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
border-radius: 0 3px 3px 0;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button .oo-ui-iconElement-icon,
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
display: none;
}
.oo-ui-selectFileWidget-info {
height: 2.4em;
background-color: #fff;
border: 1px solid #ccc;
border-width: 1px 0 1px 1px;
border-radius: 3px 0 0 3px;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
position: absolute;
top: 0;
height: 100%;
}
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
left: 0.3em;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
right: 0.775em;
}
.oo-ui-selectFileWidget-label {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
left: 0.5em;
right: 2.175em;
line-height: 2.3em;
margin: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.oo-ui-selectFileWidget-clearButton {
top: 0;
right: 0;
height: 2.34375em;
margin: 0;
}
.oo-ui-selectFileWidget-clearButton.oo-ui-iconElement .oo-ui-buttonElement-button {
height: 2.34375em;
padding: 0;
}
.oo-ui-selectFileWidget-clearButton.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
background-size: 12px 12px;
height: 2.34375em;
margin-top: 0;
margin-bottom: 0;
}
.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
color: #ccc;
}
.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-label {
left: 2.475em;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
right: 4.2625em;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-clearButton {
right: 2.0875em;
}
.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-label {
right: 0.5em;
}
.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-label,
.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-label,
.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-label,
.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
right: 2em;
}
.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
background-color: #e1f3ff;
}
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
padding: 1em;
}
.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
border: 1px solid #aaa;
border-radius: 3px;
vertical-align: middle;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
border-radius: 3px;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
line-height: 1.4;
overflow: inherit;
white-space: normal;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
padding-top: 0.5em;
padding-right: 2.375em;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
right: 0.5em;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget-dropTarget.oo-ui-selectFileInputWidget-empty {
border-style: dashed;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-pendingElement-pending {
background-size: 1.5625em 1.5625em;
}
.oo-ui-selectFileWidget.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
background-color: #e1f3ff;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget {
background-color: #f3f3f3;
color: #ccc;
border-color: #ddd;
text-shadow: 0 1px 1px #fff;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info {
background-color: #f3f3f3;
color: #ccc;
border-color: #ddd;
text-shadow: 0 1px 1px #fff;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
opacity: 0.2;
}
.oo-ui-outlineOptionWidget {

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
cursor: move;
@ -401,73 +401,13 @@
background-color: #fff;
}
.oo-ui-selectFileWidget {
display: inline-block;
vertical-align: middle;
width: 100%;
max-width: 50em;
margin-right: 0.5em;
}
.oo-ui-selectFileWidget-selectButton {
display: table-cell;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
position: relative;
overflow: hidden;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > [type='file'] {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
opacity: 0;
z-index: 1;
cursor: pointer;
padding-top: 100px;
}
.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > [type='file'] {
display: none;
}
.oo-ui-selectFileWidget-info {
width: 100%;
display: table-cell;
vertical-align: middle;
position: relative;
overflow: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
cursor: default;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.oo-ui-selectFileWidget-label {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-overflow: ellipsis;
}
.oo-ui-selectFileWidget-clearButton {
position: absolute;
z-index: 2;
}
.oo-ui-selectFileWidget-dropTarget {
position: relative;
cursor: default;
height: 8.815em;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-dropLabel,
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-selectButton {
display: none;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail {
@ -480,146 +420,59 @@
background-repeat: no-repeat;
background-size: contain;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail.oo-ui-pendingElement-pending {
background-repeat: repeat;
background-size: auto;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail > .oo-ui-selectFileWidget-noThumbnail-icon {
opacity: 0.4;
height: 7.815em;
width: 7.815em;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
.oo-ui-selectFileWidget-dropTarget .oo-ui-pendingElement-pending {
background-repeat: repeat;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-info {
display: block;
height: 100%;
width: auto;
margin-left: 8.815em;
border: 0;
margin-right: 0;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
border: 0;
box-shadow: none;
background: transparent;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-label {
display: block;
position: relative;
top: inherit;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-fileName {
display: block;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget {
text-align: center;
}
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-info {
display: none;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileInputWidget-selectButton {
display: block;
margin: 2.2em 1em 1em;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
text-align: center;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
margin: 0;
}
.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
display: none;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileWidget-label {
cursor: default;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropLabel {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropLabel {
display: block;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget {
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget .oo-ui-buttonElement-button,
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-buttonElement-button {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget .oo-ui-buttonElement-button {
cursor: no-drop;
}
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
height: auto;
}
.oo-ui-selectFileWidget:last-child {
margin-right: 0;
}
.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
border-radius: 0 2px 2px 0;
}
.oo-ui-selectFileWidget-info {
background-color: #fff;
border: 1px solid #a2a9b1;
border-radius: 2px 0 0 2px;
border-right-width: 0;
}
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
top: -1px;
left: 0.57142857em;
min-height: 2.28571429em;
margin-left: -1px;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
top: -1px;
right: 0.85714286em;
min-height: 2.28571429em;
}
.oo-ui-selectFileWidget-label {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
display: block;
right: 2.85714286em;
padding-top: 0.57142857em;
padding-left: 0.57142857em;
padding-bottom: 0.57142857em;
white-space: nowrap;
}
.oo-ui-selectFileWidget.oo-ui-labelElement .oo-ui-selectFileWidget-label {
line-height: 1;
}
.oo-ui-selectFileWidget-fileName {
display: block;
overflow: hidden;
text-overflow: ellipsis;
}
.oo-ui-selectFileWidget-clearButton {
top: 0;
right: 0;
margin-right: 0;
padding-left: 0;
}
.oo-ui-selectFileWidget-clearButton > .oo-ui-buttonElement-button {
padding-top: 2em;
}
.oo-ui-selectFileWidget-clearButton .oo-ui-iconElement-icon {
background-position: center center;
background-size: 12px 12px;
height: 2em;
}
.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
color: #72777d;
}
.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-label {
left: 2.64285714em;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
right: 4.57142857em;
padding-left: 0;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-clearButton {
right: 2.28571429em;
}
.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-label,
.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
right: 2em;
}
.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
border: 1px solid #a2a9b1;
@ -627,68 +480,36 @@
vertical-align: middle;
overflow: hidden;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
border-radius: 2px;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
overflow: inherit;
white-space: normal;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
padding-right: 2.64285714em;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
top: 0;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
.oo-ui-selectFileWidget-dropTarget.oo-ui-selectFileInputWidget-empty {
border-style: dashed;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-pendingElement-pending {
background-size: 1.42857143em 1.42857143em;
}
.oo-ui-selectFileWidget.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
-webkit-transition: background-color 250ms, color 250ms, border-color 250ms;
-moz-transition: background-color 250ms, color 250ms, border-color 250ms;
transition: background-color 250ms, color 250ms, border-color 250ms;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget:hover {
.oo-ui-selectFileWidget.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget:hover {
border-color: #72777d;
}
.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget.oo-ui-widget-enabled .oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
-webkit-transition: background-color 250ms, color 250ms;
-moz-transition: background-color 250ms, color 250ms;
transition: background-color 250ms, color 250ms;
}
.oo-ui-selectFileWidget.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileInputWidget-info > .oo-ui-inputWidget-input {
background-color: #eaf3ff;
color: #36c;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
background-color: #eaecf0;
color: #72777d;
border-color: #c8ccd1;
text-shadow: 0 1px 1px #fff;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
opacity: 0.51;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
opacity: 0.15;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget.oo-ui-selectFileInputWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget {
background-color: #eaecf0;
border-color: #c8ccd1;
}
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info {
background-color: #eaecf0;
color: #222;
border-color: #c8ccd1;
}
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
background-color: #eaecf0;
border-color: #c8ccd1;
}
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
padding: 1em 0.85714286em;
}
.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropLabel {
display: none;
}
.oo-ui-outlineSelectWidget {
height: 100%;

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:20Z
* Date: 2019-03-21T15:54:37Z
*/
( function ( OO ) {
@ -4519,7 +4519,7 @@ OO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {
this.addTagFromInput();
}
// 1. Get the label of the tag into the input
this.input.setValue( item.getData() );
this.input.setValue( item.getLabel() );
// 2. Remove the tag
this.removeItems( [ item ] );
// 3. Focus the input
@ -5187,23 +5187,30 @@ OO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data,
* @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
*/
OO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {
var $autoCloseIgnore = $( [] );
config = config || {};
// Parent constructor
OO.ui.MenuTagMultiselectWidget.parent.call( this, config );
$autoCloseIgnore = $autoCloseIgnore.add( this.$group );
if ( this.hasInput ) {
$autoCloseIgnore = $autoCloseIgnore.add( this.input.$element );
}
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,
hideOnChoose: false,
input: this.hasInput ? this.input : null,
$input: this.hasInput ? this.input.$input : null,
filterFromInput: !!this.hasInput,
highlightOnFilter: true,
$autoCloseIgnore: this.hasInput ?
this.input.$element : $( [] ),
highlightOnFilter: !this.allowArbitrary,
multiselect: true,
$autoCloseIgnore: $autoCloseIgnore,
$floatableContainer: this.hasInput && this.inputPosition === 'outline' ?
this.input.$element : this.$element,
$overlay: this.$overlay,
@ -5262,16 +5269,6 @@ OO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {
this.menu.toggle( true );
};
/**
* @inheritdoc
*/
OO.ui.MenuTagMultiselectWidget.prototype.onInputBlur = function () {
// Parent method
OO.ui.MenuTagMultiselectWidget.parent.prototype.onInputBlur.call( this );
this.menu.toggle( false );
};
/**
* Respond to input change event
*/
@ -5280,16 +5277,23 @@ OO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {
};
/**
* Respond to menu choose event
* Respond to menu choose event, which is intentional by the user.
*
* @param {OO.ui.OptionWidget} menuItem Chosen menu item
* @param {OO.ui.OptionWidget} menuItem Selected menu items
* @param {boolean} selected Item is selected
*/
OO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {
OO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem, selected ) {
if ( this.hasInput && this.clearInputOnChoose ) {
this.input.setValue( '' );
}
// Add tag
this.addTag( menuItem.getData(), menuItem.getLabel() );
if ( selected && !this.findItemFromData( menuItem.getData() ) ) {
// The menu item is selected, add it to the tags
this.addTag( menuItem.getData(), menuItem.getLabel() );
} else {
// The menu item was unselected, remove the tag
this.removeTagByData( menuItem.getData() );
}
};
/**
@ -5299,8 +5303,8 @@ OO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {
*/
OO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
if ( !isVisible ) {
this.menu.selectItem( null );
this.menu.highlightItem( null );
this.menu.scrollToTop();
}
setTimeout( function () {
// Remove MenuSelectWidget's generic focus owner ARIA attribute
@ -5325,16 +5329,75 @@ OO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {
this.input.setValue( '' );
}
// Select the menu item
this.menu.selectItem( menuItem );
this.focus();
// Highlight the menu item
this.menu.highlightItem( menuItem );
this.menu.scrollItemIntoView( menuItem );
} else {
// Use the default
OO.ui.MenuTagMultiselectWidget.parent.prototype.onTagSelect.call( this, tagItem );
}
};
/**
* @inheritdoc
*/
OO.ui.MenuTagMultiselectWidget.prototype.removeItems = function ( items ) {
var widget = this;
// Parent
OO.ui.MenuTagMultiselectWidget.parent.prototype.removeItems.call( this, items );
items.forEach( function ( tagItem ) {
var menuItem = widget.menu.findItemFromData( tagItem.getData() );
if ( menuItem ) {
// Synchronize the menu selection - unselect the removed tag
widget.menu.unselectItem( menuItem );
}
} );
};
/**
* @inheritdoc
*/
OO.ui.MenuTagMultiselectWidget.prototype.setValue = function ( valueObject ) {
valueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];
// We override this method from the parent, to make sure we are adding proper
// menu items, and are accounting for cases where we have this widget with
// a menu but also 'allowArbitrary'
if ( !this.menu ) {
return;
}
this.clearItems();
valueObject.forEach( function ( obj ) {
var data, label, menuItem;
if ( typeof obj === 'string' ) {
data = label = obj;
} else {
data = obj.data;
label = obj.label;
}
// Check if the item is in the menu
menuItem = this.menu.getItemFromLabel( label ) || this.menu.findItemFromData( data );
if ( menuItem ) {
// Menu item found, add the menu item
this.addTag( menuItem.getData(), menuItem.getLabel() );
// Make sure that item is also selected
this.menu.selectItem( menuItem );
} else if ( this.allowArbitrary ) {
// If the item isn't in the menu, only add it if we
// allow for arbitrary values
this.addTag( data, label );
}
}.bind( this ) );
};
/**
* @inheritdoc
*/
@ -5355,12 +5418,17 @@ OO.ui.MenuTagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {
* @chainable
*/
OO.ui.MenuTagMultiselectWidget.prototype.initializeMenuSelection = function () {
if ( !this.menu.findSelectedItem() ) {
this.menu.highlightItem(
this.allowArbitrary ?
null :
this.menu.findFirstSelectableItem()
);
var highlightedItem;
this.menu.highlightItem(
this.allowArbitrary ?
null :
this.menu.findFirstSelectableItem()
);
highlightedItem = this.menu.findHighlightedItem();
// Scroll to the highlighted item, if it exists
if ( highlightedItem ) {
this.menu.scrollItemIntoView( highlightedItem );
}
};
@ -5477,6 +5545,9 @@ OO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {
* OO.ui.mixin.IndicatorElement indicators} and {@link OO.ui.mixin.TitledElement titles}.
* Please see the [OOUI documentation on MediaWiki] [1] for more information and examples.
*
* Although SelectFileWidget inherits from SelectFileInputWidget, it does not
* behave as an InputWidget, and can't be used in HTML forms.
*
* @example
* // A file select widget.
* var selectFile = new OO.ui.SelectFileWidget();
@ -5485,92 +5556,54 @@ OO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {
* [1]: https://www.mediawiki.org/wiki/OOUI/Widgets
*
* @class
* @extends OO.ui.Widget
* @mixins OO.ui.mixin.IconElement
* @mixins OO.ui.mixin.IndicatorElement
* @extends OO.ui.SelectFileInputWidget
* @mixins OO.ui.mixin.PendingElement
* @mixins OO.ui.mixin.TabIndexedElement
* @mixins OO.ui.mixin.LabelElement
* @mixins OO.ui.mixin.TitledElement
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.
* @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} [buttonOnly=false] Show only the select file button, no info field. Requires
* showDropTarget to be false.
* @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).
*/
OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
var dragHandler;
this.selectButton = new OO.ui.ButtonWidget( {
$element: $( '<label>' ),
classes: [ 'oo-ui-selectFileWidget-selectButton' ],
label: OO.ui.msg( 'ooui-selectfile-button-select' )
} );
var dragHandler, droppable,
isSupported = this.constructor.static.isSupported();
// Configuration initialization
config = $.extend( {
accept: null,
placeholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),
notsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),
droppable: true,
buttonOnly: false,
showDropTarget: false,
thumbnailSizeLimit: 20,
$tabIndexed: this.selectButton.$tabIndexed
thumbnailSizeLimit: 20
}, config );
if ( !isSupported ) {
config.disabled = true;
}
// Parent constructor
OO.ui.SelectFileWidget.parent.call( this, config );
// Mixin constructors
OO.ui.mixin.IconElement.call( this, config );
OO.ui.mixin.IndicatorElement.call( this, config );
OO.ui.mixin.PendingElement.call( this, $.extend( {
$pending: this.$info
}, config ) );
OO.ui.mixin.TabIndexedElement.call( this, $.extend( {
$tabIndexed: this.selectButton.$tabIndexed
}, config ) );
OO.ui.mixin.LabelElement.call( this, config );
OO.ui.mixin.TitledElement.call( this, config );
OO.ui.mixin.PendingElement.call( this );
if ( !isSupported ) {
this.info.setValue( config.notsupported );
}
// Properties
this.$info = $( '<span>' );
this.showDropTarget = config.droppable && config.showDropTarget;
droppable = config.droppable && isSupported;
this.showDropTarget = droppable && config.showDropTarget;
this.thumbnailSizeLimit = config.thumbnailSizeLimit;
this.isSupported = this.constructor.static.isSupported();
this.currentFile = null;
if ( Array.isArray( config.accept ) ) {
this.accept = config.accept;
} else {
this.accept = null;
}
this.placeholder = config.placeholder;
this.notsupported = config.notsupported;
this.onFileSelectedHandler = this.onFileSelected.bind( this );
this.selectButton.setDisabled( this.disabled || !this.isSupported );
this.clearButton = new OO.ui.ButtonWidget( {
classes: [ 'oo-ui-selectFileWidget-clearButton' ],
framed: false,
icon: 'clear',
disabled: this.disabled
} );
// Events
this.selectButton.$button.on( {
keypress: this.onKeyPress.bind( this )
} );
this.clearButton.connect( this, {
click: 'onClearClick'
} );
if ( config.droppable ) {
if ( droppable ) {
dragHandler = this.onDragEnterOrOver.bind( this );
this.$element.on( {
dragenter: dragHandler,
@ -5581,46 +5614,38 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
}
// Initialization
this.addInput();
this.$label.addClass( 'oo-ui-selectFileWidget-label' );
this.$info
.addClass( 'oo-ui-selectFileWidget-info' )
.append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );
if ( this.showDropTarget ) {
this.selectButton.setIcon( 'upload' );
this.$thumbnail = $( '<div>' ).addClass( 'oo-ui-selectFileWidget-thumbnail' );
this.setPendingElement( this.$thumbnail );
this.$element
.addClass( 'oo-ui-selectFileWidget-dropTarget oo-ui-selectFileWidget' )
.addClass( 'oo-ui-selectFileWidget-dropTarget' )
.on( {
click: this.onDropTargetClick.bind( this )
} )
.append(
this.$thumbnail,
this.$info,
this.info.$element,
this.selectButton.$element,
$( '<span>' )
.addClass( 'oo-ui-selectFileWidget-dropLabel' )
.text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )
);
} else {
this.$element
.addClass( 'oo-ui-selectFileWidget' )
.append( this.$info, this.selectButton.$element );
this.fieldLayout.$element.remove();
} else if ( config.buttonOnly ) {
this.$element.append( this.selectButton.$element );
this.fieldLayout.$element.remove();
}
this.$element.addClass( 'oo-ui-selectFileWidget' );
this.updateUI();
};
/* Setup */
OO.inheritClass( OO.ui.SelectFileWidget, OO.ui.Widget );
OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );
OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );
OO.inheritClass( OO.ui.SelectFileWidget, OO.ui.SelectFileInputWidget );
OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );
OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.TabIndexedElement );
OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );
OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.TitledElement );
/* Static Properties */
@ -5670,63 +5695,65 @@ OO.ui.SelectFileWidget.prototype.getValue = function () {
OO.ui.SelectFileWidget.prototype.setValue = function ( file ) {
if ( this.currentFile !== file ) {
this.currentFile = file;
this.updateUI();
this.emit( 'change', this.currentFile );
}
};
/**
* Update the user interface when a file is selected or unselected
*
* @protected
* @inheritdoc
*/
OO.ui.SelectFileWidget.prototype.getFilename = function () {
return this.currentFile ? this.currentFile.name : '';
};
/**
* Disable InputWidget#onEdit listener, onFileSelected is used instead.
* @inheritdoc
*/
OO.ui.SelectFileWidget.prototype.onEdit = function () {};
/**
* @inheritdoc
*/
OO.ui.SelectFileWidget.prototype.updateUI = function () {
var $label;
if ( !this.isSupported ) {
this.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );
this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
this.setLabel( this.notsupported );
} else {
this.$element.addClass( 'oo-ui-selectFileWidget-supported' );
if ( this.currentFile ) {
this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
$label = $( [] );
$label = $label.add(
$( '<span>' )
.addClass( 'oo-ui-selectFileWidget-fileName' )
.text( this.currentFile.name )
);
this.setLabel( $label );
// Too early, or not supported
if ( !this.selectButton || !this.constructor.static.isSupported() ) {
return;
}
if ( this.showDropTarget ) {
this.pushPending();
this.loadAndGetImageUrl().done( function ( url ) {
this.$thumbnail.css( 'background-image', 'url( ' + url + ' )' );
}.bind( this ) ).fail( function () {
this.$thumbnail.append(
new OO.ui.IconWidget( {
icon: 'attachment',
classes: [ 'oo-ui-selectFileWidget-noThumbnail-icon' ]
} ).$element
);
}.bind( this ) ).always( function () {
this.popPending();
}.bind( this ) );
this.$element.off( 'click' );
}
} else {
if ( this.showDropTarget ) {
this.$element.off( 'click' );
this.$element.on( {
click: this.onDropTargetClick.bind( this )
} );
this.$thumbnail
.empty()
.css( 'background-image', '' );
}
this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
this.setLabel( this.placeholder );
// Parent method
OO.ui.SelectFileWidget.super.prototype.updateUI.call( this );
if ( this.currentFile ) {
this.$element.removeClass( 'oo-ui-selectFileInputWidget-empty' );
if ( this.showDropTarget ) {
this.pushPending();
this.loadAndGetImageUrl().done( function ( url ) {
this.$thumbnail.css( 'background-image', 'url( ' + url + ' )' );
}.bind( this ) ).fail( function () {
this.$thumbnail.append(
new OO.ui.IconWidget( {
icon: 'attachment',
classes: [ 'oo-ui-selectFileWidget-noThumbnail-icon' ]
} ).$element
);
}.bind( this ) ).always( function () {
this.popPending();
}.bind( this ) );
this.$element.off( 'click' );
}
} else {
if ( this.showDropTarget ) {
this.$element.off( 'click' );
this.$element.on( {
click: this.onDropTargetClick.bind( this )
} );
this.$thumbnail
.empty()
.css( 'background-image', '' );
}
this.$element.addClass( 'oo-ui-selectFileInputWidget-empty' );
}
};
@ -5778,61 +5805,29 @@ OO.ui.SelectFileWidget.prototype.addInput = function () {
this.$input.remove();
}
if ( !this.isSupported ) {
this.$input = null;
return;
}
this.$input = $( '<input>' )
// Set empty title so that browser default tooltips like "No file chosen" don't appear.
// This input is "empty" after a file was actually chosen, which is misleading.
.attr( 'title', '' );
this.setupInput();
};
/**
* @inheritdoc
*/
OO.ui.SelectFileWidget.prototype.setupInput = function () {
// Parent method
OO.ui.SelectFileWidget.super.prototype.setupInput.call( this );
this.$input = $( '<input>' ).attr( 'type', 'file' );
this.$input.on( 'change', this.onFileSelectedHandler );
this.$input.on( 'click', function ( e ) {
// Prevents dropTarget to get clicked which calls
// a click on this input
e.stopPropagation();
} );
this.$input.attr( {
tabindex: -1
} );
if ( this.accept ) {
this.$input.attr( 'accept', this.accept.join( ', ' ) );
}
this.selectButton.$button.append( this.$input );
};
/**
* Determine if we should accept this file
*
* @private
* @param {string} mimeType File MIME type
* @return {boolean}
*/
OO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {
var i, mimeTest;
if ( !this.accept || !mimeType ) {
return true;
}
for ( i = 0; i < this.accept.length; i++ ) {
mimeTest = this.accept[ i ];
if ( mimeTest === mimeType ) {
return true;
} else if ( mimeTest.substr( -2 ) === '/*' ) {
mimeTest = mimeTest.substr( 0, mimeTest.length - 1 );
if ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {
return true;
}
}
}
return false;
};
/**
* Handle file selection from the input
*
* @private
* @param {jQuery.Event} e
* @inheritdoc
*/
OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {
var file = OO.getProp( e.target, 'files', 0 ) || null;
@ -5845,33 +5840,6 @@ OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {
this.addInput();
};
/**
* Handle clear button click events.
*
* @private
* @return {undefined/boolean} False to prevent default if event is handled
*/
OO.ui.SelectFileWidget.prototype.onClearClick = function () {
this.setValue( null );
return false;
};
/**
* Handle key press events.
*
* @private
* @param {jQuery.Event} e Key press event
* @return {undefined/boolean} False to prevent default if event is handled
*/
OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
if ( this.isSupported && !this.isDisabled() && this.$input &&
( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
) {
this.$input.trigger( 'click' );
return false;
}
};
/**
* Handle drop target click events.
*
@ -5880,7 +5848,7 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
* @return {undefined/boolean} False to prevent default if event is handled
*/
OO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {
if ( this.isSupported && !this.isDisabled() && this.$input ) {
if ( !this.isDisabled() && this.$input ) {
this.$input.trigger( 'click' );
return false;
}
@ -5901,7 +5869,7 @@ OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
e.preventDefault();
e.stopPropagation();
if ( this.isDisabled() || !this.isSupported ) {
if ( this.isDisabled() ) {
this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
dt.dropEffect = 'none';
return false;
@ -5955,7 +5923,7 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
e.stopPropagation();
this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
if ( this.isDisabled() || !this.isSupported ) {
if ( this.isDisabled() ) {
return false;
}
@ -5974,14 +5942,10 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
* @inheritdoc
*/
OO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {
disabled = disabled || !this.constructor.static.isSupported();
// Parent method
OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );
if ( this.selectButton ) {
this.selectButton.setDisabled( disabled );
}
if ( this.clearButton ) {
this.clearButton.setDisabled( disabled );
}
return this;
};
/**

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:20Z
* Date: 2019-03-21T15:54:37Z
*/
( function ( OO ) {

View file

@ -1,16 +1,13 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-actionWidget.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/wikimediaui/images/textures/pending.gif);
}
.oo-ui-window {
background-color: transparent;

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:27Z
* Date: 2019-03-21T15:54:46Z
*/
.oo-ui-window {

View file

@ -1,12 +1,12 @@
/*!
* OOUI v0.31.0
* OOUI v0.31.1
* https://www.mediawiki.org/wiki/OOUI
*
* Copyright 20112019 OOUI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
* Date: 2019-03-14T00:52:20Z
* Date: 2019-03-21T15:54:37Z
*/
( function ( OO ) {

View file

@ -2,7 +2,13 @@
"prefix": "oo-ui-texture",
"intro": "@import '../../../../src/styles/common';",
"images": {
"pending": { "file": "../wikimediaui/images/textures/pending.gif" },
"transparency": { "file": "../wikimediaui/images/textures/transparency.svg" }
"pending": {
"file": "../wikimediaui/images/textures/pending.gif",
"deprecated": "Deprecated since v0.31.1."
},
"transparency": {
"file": "../wikimediaui/images/textures/transparency.svg",
"deprecated": "Deprecated since v0.31.1."
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

After

Width:  |  Height:  |  Size: 121 B

View file

@ -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>folder placeholder</title><path fill="#fff" d="M8 2H2C.9 2 0 2.9 0 4v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-8L8 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>folder placeholder</title><g fill="#fff"><path d="M8 2H2a2 2 0 0 0-2 2v2h12z"/><rect width="20" height="14" y="4" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 265 B

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 129 B

View file

@ -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>folder placeholder</title><path fill="#36c" d="M8 2H2C.9 2 0 2.9 0 4v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-8L8 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>folder placeholder</title><g fill="#36c"><path d="M8 2H2a2 2 0 0 0-2 2v2h12z"/><rect width="20" height="14" y="4" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 265 B

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

After

Width:  |  Height:  |  Size: 119 B

View file

@ -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>folder placeholder</title><path d="M8 2H2C.9 2 0 2.9 0 4v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-8L8 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>folder placeholder</title><path d="M8 2H2a2 2 0 0 0-2 2v2h12z"/><rect width="20" height="14" y="4" rx="2"/></svg>

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

After

Width:  |  Height:  |  Size: 119 B

View file

@ -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>folder placeholder</title><path fill="#fff" d="M10 4H2C.9 4 0 4.9 0 6v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2h-6l-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>folder placeholder</title><g fill="#fff"><path d="M8 6h12V4a2 2 0 0 0-2-2h-6z"/><rect width="20" height="14" y="4" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 267 B

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 B

After

Width:  |  Height:  |  Size: 126 B

View file

@ -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>folder placeholder</title><path fill="#36c" d="M10 4H2C.9 4 0 4.9 0 6v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2h-6l-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>folder placeholder</title><g fill="#36c"><path d="M8 6h12V4a2 2 0 0 0-2-2h-6z"/><rect width="20" height="14" y="4" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 267 B

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 B

After

Width:  |  Height:  |  Size: 115 B

View file

@ -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>folder placeholder</title><path d="M10 4H2C.9 4 0 4.9 0 6v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2h-6l-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>folder placeholder</title><path d="M8 6h12V4a2 2 0 0 0-2-2h-6z"/><rect width="20" height="14" y="4" rx="2"/></svg>

Before

Width:  |  Height:  |  Size: 255 B

After

Width:  |  Height:  |  Size: 242 B

View file

@ -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>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>
<?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="M1 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.5z"/></g></svg>

Before

Width:  |  Height:  |  Size: 913 B

After

Width:  |  Height:  |  Size: 299 B

View file

@ -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>image layout basic</title><g fill="#36c"><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>
<?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="#36c"><path d="M1 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.5z"/></g></svg>

Before

Width:  |  Height:  |  Size: 913 B

After

Width:  |  Height:  |  Size: 299 B

View file

@ -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>image layout basic</title><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"/></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>image layout basic</title><path d="M1 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.5z"/></svg>

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 280 B

View file

@ -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>image layout frame</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.5V2zM17 2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M15.25 4H4.75A1.8 1.8 0 0 0 3 5.85v8.31A1.8 1.8 0 0 0 4.75 16h10.5A1.8 1.8 0 0 0 17 14.15v-8.3A1.8 1.8 0 0 0 15.25 4zM5 13l2.5-3 2 2L12 9l3 4z"/><path d="M17 6H3V4h14zm0 10H3v-2h14z"/></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>image layout frame</title><g fill="#fff"><path d="M3 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M17 4H3v12h14zM5 13l2.5-3 2 2L12 9l3 4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 381 B

View file

@ -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>image layout frame</title><g fill="#36c"><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.5V2zM17 2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M15.25 4H4.75A1.8 1.8 0 0 0 3 5.85v8.31A1.8 1.8 0 0 0 4.75 16h10.5A1.8 1.8 0 0 0 17 14.15v-8.3A1.8 1.8 0 0 0 15.25 4zM5 13l2.5-3 2 2L12 9l3 4z"/><path d="M17 6H3V4h14zm0 10H3v-2h14z"/></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>image layout frame</title><g fill="#36c"><path d="M3 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M17 4H3v12h14zM5 13l2.5-3 2 2L12 9l3 4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 381 B

View file

@ -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>image layout frame</title><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.5V2zM17 2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M15.25 4H4.75A1.8 1.8 0 0 0 3 5.85v8.31A1.8 1.8 0 0 0 4.75 16h10.5A1.8 1.8 0 0 0 17 14.15v-8.3A1.8 1.8 0 0 0 15.25 4zM5 13l2.5-3 2 2L12 9l3 4z"/><path d="M17 6H3V4h14zm0 10H3v-2h14z"/></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>image layout frame</title><path d="M3 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M17 4H3v12h14zM5 13l2.5-3 2 2L12 9l3 4z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 362 B

View file

@ -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>image layout frameless</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.5V2zM17 3H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM3 14l3.5-4.5 2.5 3L12.5 8l4.5 6z"/><path d="M19 5H1V3h18zm0 12H1v-2h18z"/></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>image layout frameless</title><g fill="#fff"><path d="M19 3H1v14h18zM3 14l3.5-4.5 2.5 3L12.5 8l4.5 6z"/><path d="M19 5H1V3h18zm0 12H1v-2h18z"/></g></svg>

Before

Width:  |  Height:  |  Size: 945 B

After

Width:  |  Height:  |  Size: 281 B

View file

@ -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>image layout frameless</title><g fill="#36c"><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.5V2zM17 3H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM3 14l3.5-4.5 2.5 3L12.5 8l4.5 6z"/><path d="M19 5H1V3h18zm0 12H1v-2h18z"/></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>image layout frameless</title><g fill="#36c"><path d="M19 3H1v14h18zM3 14l3.5-4.5 2.5 3L12.5 8l4.5 6z"/><path d="M19 5H1V3h18zm0 12H1v-2h18z"/></g></svg>

Before

Width:  |  Height:  |  Size: 945 B

After

Width:  |  Height:  |  Size: 281 B

View file

@ -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>image layout frameless</title><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.5V2zM17 3H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM3 14l3.5-4.5 2.5 3L12.5 8l4.5 6z"/><path d="M19 5H1V3h18zm0 12H1v-2h18z"/></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>image layout frameless</title><path d="M19 3H1v14h18zM3 14l3.5-4.5 2.5 3L12.5 8l4.5 6z"/><path d="M19 5H1V3h18zm0 12H1v-2h18z"/></svg>

Before

Width:  |  Height:  |  Size: 926 B

After

Width:  |  Height:  |  Size: 262 B

View file

@ -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>image layout thumbnail</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.5V2zM17 2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M15.25 4H4.75A1.8 1.8 0 0 0 3 5.85v6.31A1.8 1.8 0 0 0 4.75 14h10.5A1.8 1.8 0 0 0 17 12.15v-6.3A1.8 1.8 0 0 0 15.25 4zM5 12l2.5-3 2 2L12 8l3 4zm-1 3h12v1H4z"/><path d="M17 6H3V4h14zm0 8H3v-2h14z"/></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>image layout thumbnail</title><g fill="#fff"><path d="M3 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M17 4H3v10h14zM5 12l2.5-3 2 2L12 8l3 4zm-1 3h12v1H4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 398 B

View file

@ -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>image layout thumbnail</title><g fill="#36c"><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.5V2zM17 2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M15.25 4H4.75A1.8 1.8 0 0 0 3 5.85v6.31A1.8 1.8 0 0 0 4.75 14h10.5A1.8 1.8 0 0 0 17 12.15v-6.3A1.8 1.8 0 0 0 15.25 4zM5 12l2.5-3 2 2L12 8l3 4zm-1 3h12v1H4z"/><path d="M17 6H3V4h14zm0 8H3v-2h14z"/></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>image layout thumbnail</title><g fill="#36c"><path d="M3 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M17 4H3v10h14zM5 12l2.5-3 2 2L12 8l3 4zm-1 3h12v1H4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 398 B

View file

@ -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>image layout thumbnail</title><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.5V2zM17 2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M15.25 4H4.75A1.8 1.8 0 0 0 3 5.85v6.31A1.8 1.8 0 0 0 4.75 14h10.5A1.8 1.8 0 0 0 17 12.15v-6.3A1.8 1.8 0 0 0 15.25 4zM5 12l2.5-3 2 2L12 8l3 4zm-1 3h12v1H4z"/><path d="M17 6H3V4h14zm0 8H3v-2h14z"/></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>image layout thumbnail</title><path d="M3 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 15a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1z"/><path d="M17 4H3v10h14zM5 12l2.5-3 2 2L12 8l3 4zm-1 3h12v1H4z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 B

After

Width:  |  Height:  |  Size: 262 B

View file

@ -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>settings</title><g fill="#fff"><path d="M10 2.5a7.5 7.5 0 1 0 7.5 7.5A7.5 7.5 0 0 0 10 2.5zm0 11a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z"/><path d="M12 3.29L11.5 0h-3L8 3.29a7 7 0 0 1 4 0zM8 16.71L8.5 20h3l.5-3.29a7 7 0 0 1-4 0zm8.16-10.04l2-2.68L16 1.87l-2.68 2a7 7 0 0 1 2.83 2.83zM3.84 13.33L1.87 16 4 18.13l2.68-2a7 7 0 0 1-2.83-2.83zM16.71 12l3.29-.5v-3L16.71 8a7 7 0 0 1 0 4zM3.29 8L0 8.5v3l3.29.5a7 7 0 0 1 0-4zm10.04 8.16l2.68 2L18.13 16l-2-2.68a7 7 0 0 1-2.83 2.83zM6.67 3.84L4 1.87 1.87 4l2 2.68a7 7 0 0 1 2.8-2.84z"/></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>settings</title><g fill="#fff"><path d="M10 2.5a7.5 7.5 0 1 0 7.5 7.5A7.5 7.5 0 0 0 10 2.5zm0 11a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z"/><path d="M12.5 6.5l-1-6.5h-3l-1 6.5m0 7l1 6.5h3l1-6.5m1-1l6.5-1v-3l-6.5-1m-7 0L0 8.5v3l6.5 1m7.743-3.207l3.889-5.303-2.122-2.122-5.303 3.89m-4.95 4.95L1.868 16.01l2.122 2.122 5.303-3.89m0-8.485L3.99 1.868 1.868 3.99l3.89 5.303m4.95 4.95l5.302 3.889 2.122-2.122-3.89-5.303"/></g></svg>

Before

Width:  |  Height:  |  Size: 671 B

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 B

After

Width:  |  Height:  |  Size: 338 B

View file

@ -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>settings</title><g fill="#36c"><path d="M10 2.5a7.5 7.5 0 1 0 7.5 7.5A7.5 7.5 0 0 0 10 2.5zm0 11a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z"/><path d="M12 3.29L11.5 0h-3L8 3.29a7 7 0 0 1 4 0zM8 16.71L8.5 20h3l.5-3.29a7 7 0 0 1-4 0zm8.16-10.04l2-2.68L16 1.87l-2.68 2a7 7 0 0 1 2.83 2.83zM3.84 13.33L1.87 16 4 18.13l2.68-2a7 7 0 0 1-2.83-2.83zM16.71 12l3.29-.5v-3L16.71 8a7 7 0 0 1 0 4zM3.29 8L0 8.5v3l3.29.5a7 7 0 0 1 0-4zm10.04 8.16l2.68 2L18.13 16l-2-2.68a7 7 0 0 1-2.83 2.83zM6.67 3.84L4 1.87 1.87 4l2 2.68a7 7 0 0 1 2.8-2.84z"/></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>settings</title><g fill="#36c"><path d="M10 2.5a7.5 7.5 0 1 0 7.5 7.5A7.5 7.5 0 0 0 10 2.5zm0 11a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z"/><path d="M12.5 6.5l-1-6.5h-3l-1 6.5m0 7l1 6.5h3l1-6.5m1-1l6.5-1v-3l-6.5-1m-7 0L0 8.5v3l6.5 1m7.743-3.207l3.889-5.303-2.122-2.122-5.303 3.89m-4.95 4.95L1.868 16.01l2.122 2.122 5.303-3.89m0-8.485L3.99 1.868 1.868 3.99l3.89 5.303m4.95 4.95l5.302 3.889 2.122-2.122-3.89-5.303"/></g></svg>

Before

Width:  |  Height:  |  Size: 671 B

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

After

Width:  |  Height:  |  Size: 258 B

View file

@ -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>settings</title><path d="M10 2.5a7.5 7.5 0 1 0 7.5 7.5A7.5 7.5 0 0 0 10 2.5zm0 11a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z"/><path d="M12 3.29L11.5 0h-3L8 3.29a7 7 0 0 1 4 0zM8 16.71L8.5 20h3l.5-3.29a7 7 0 0 1-4 0zm8.16-10.04l2-2.68L16 1.87l-2.68 2a7 7 0 0 1 2.83 2.83zM3.84 13.33L1.87 16 4 18.13l2.68-2a7 7 0 0 1-2.83-2.83zM16.71 12l3.29-.5v-3L16.71 8a7 7 0 0 1 0 4zM3.29 8L0 8.5v3l3.29.5a7 7 0 0 1 0-4zm10.04 8.16l2.68 2L18.13 16l-2-2.68a7 7 0 0 1-2.83 2.83zM6.67 3.84L4 1.87 1.87 4l2 2.68a7 7 0 0 1 2.8-2.84z"/></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>settings</title><path d="M10 2.5a7.5 7.5 0 1 0 7.5 7.5A7.5 7.5 0 0 0 10 2.5zm0 11a3.5 3.5 0 1 1 3.5-3.5 3.5 3.5 0 0 1-3.5 3.5z"/><path d="M12.5 6.5l-1-6.5h-3l-1 6.5m0 7l1 6.5h3l1-6.5m1-1l6.5-1v-3l-6.5-1m-7 0L0 8.5v3l6.5 1m7.743-3.207l3.889-5.303-2.122-2.122-5.303 3.89m-4.95 4.95L1.868 16.01l2.122 2.122 5.303-3.89m0-8.485L3.99 1.868 1.868 3.99l3.89 5.303m4.95 4.95l5.302 3.889 2.122-2.122-3.89-5.303"/></svg>

Before

Width:  |  Height:  |  Size: 652 B

After

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 B

After

Width:  |  Height:  |  Size: 118 B

View file

@ -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>speech bubble</title><path fill="#fff" d="M18 0H2a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V2a2 2 0 0 0-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>speech bubble</title><g fill="#fff"><path d="M6 14H0v6z"/><rect width="20" height="16" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 129 B

View file

@ -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>speech bubble</title><path fill="#36c" d="M18 0H2a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V2a2 2 0 0 0-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>speech bubble</title><g fill="#36c"><path d="M6 14H0v6z"/><rect width="20" height="16" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

After

Width:  |  Height:  |  Size: 117 B

View file

@ -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>speech bubble</title><path d="M18 0H2a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V2a2 2 0 0 0-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>speech bubble</title><path d="M6 14H0v6z"/><rect width="20" height="16" rx="2"/></svg>

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

After

Width:  |  Height:  |  Size: 118 B

View file

@ -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>speech bubble</title><path fill="#fff" d="M0 2v12c0 1.1.9 2 2 2h14l4 4V2c0-1.1-.9-2-2-2H2C.9 0 0 .9 0 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>speech bubble</title><g fill="#fff"><path d="M14 14h6v6z"/><rect width="20" height="16" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 B

After

Width:  |  Height:  |  Size: 130 B

View file

@ -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>speech bubble</title><path fill="#36c" d="M0 2v12c0 1.1.9 2 2 2h14l4 4V2c0-1.1-.9-2-2-2H2C.9 0 0 .9 0 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>speech bubble</title><g fill="#36c"><path d="M14 14h6v6z"/><rect width="20" height="16" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

After

Width:  |  Height:  |  Size: 118 B

View file

@ -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>speech bubble</title><path d="M0 2v12c0 1.1.9 2 2 2h14l4 4V2c0-1.1-.9-2-2-2H2C.9 0 0 .9 0 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>speech bubble</title><path d="M14 14h6v6z"/><rect width="20" height="16" rx="2"/></svg>

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 157 B

View file

@ -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>speech bubbles</title><g fill="#fff"><path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2z"/><path d="M14 0H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-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>speech bubbles</title><g fill="#fff"><path d="M17 4v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2zM6 10H0v6z"/><rect width="16" height="12" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

After

Width:  |  Height:  |  Size: 179 B

View file

@ -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>speech bubbles</title><g fill="#36c"><path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2z"/><path d="M14 0H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-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>speech bubbles</title><g fill="#36c"><path d="M17 4v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2zM6 10H0v6z"/><rect width="16" height="12" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 B

After

Width:  |  Height:  |  Size: 156 B

View file

@ -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>speech bubbles</title><path d="M18 4h-1v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2z"/><path d="M14 0H2a2 2 0 0 0-2 2v14l4-4h10a2 2 0 0 0 2-2V2a2 2 0 0 0-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>speech bubbles</title><path d="M17 4v7a2 2 0 0 1-2 2H4v1a2 2 0 0 0 2 2h10l4 4V6a2 2 0 0 0-2-2zM6 10H0v6z"/><rect width="16" height="12" rx="2"/></svg>

Before

Width:  |  Height:  |  Size: 308 B

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 B

After

Width:  |  Height:  |  Size: 159 B

View file

@ -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>speech bubbles</title><g fill="#fff"><path d="M0 6v14l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6z"/><path d="M4 2v8c0 1.1.9 2 2 2h10l4 4V2c0-1.1-.9-2-2-2H6C4.9 0 4 .9 4 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>speech bubbles</title><g fill="#fff"><path d="M0 20l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6zm14-10h6v6z"/><rect width="16" height="12" x="4" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

After

Width:  |  Height:  |  Size: 184 B

View file

@ -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>speech bubbles</title><g fill="#36c"><path d="M0 6v14l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6z"/><path d="M4 2v8c0 1.1.9 2 2 2h10l4 4V2c0-1.1-.9-2-2-2H6C4.9 0 4 .9 4 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>speech bubbles</title><g fill="#36c"><path d="M0 20l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6zm14-10h6v6z"/><rect width="16" height="12" x="4" rx="2"/></g></svg>

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 B

After

Width:  |  Height:  |  Size: 156 B

View file

@ -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>speech bubbles</title><path d="M0 6v14l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6z"/><path d="M4 2v8c0 1.1.9 2 2 2h10l4 4V2c0-1.1-.9-2-2-2H6C4.9 0 4 .9 4 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>speech bubbles</title><path d="M0 20l4-4h10c1.1 0 2-.9 2-2v-1H5c-1.1 0-2-.9-2-2V4H2C.9 4 0 4.9 0 6zm14-10h6v6z"/><rect width="16" height="12" x="4" rx="2"/></svg>

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 290 B

View file

@ -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>table move column after</title><g fill="#fff"><path d="M11 11v3l5-4-5-4v3H6v2h5z"/><path d="M18 2h-8v2h8v12h-8v2h10V2h-2zM2 18h5v-2H5V4h2V2H0v16h2z"/><path d="M8 12H5v6h5v-6H8zM5 2v6h5V2H5z"/></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>table move column after</title><g fill="#fff"><path d="M16 10l-5-4v3H6v2h5v3z"/><path d="M0 2h20v16H0zm5 6v4h5v4h8V4h-8v4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 330 B

After

Width:  |  Height:  |  Size: 263 B

View file

@ -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>table move column after</title><g fill="#36c"><path d="M11 11v3l5-4-5-4v3H6v2h5z"/><path d="M18 2h-8v2h8v12h-8v2h10V2h-2zM2 18h5v-2H5V4h2V2H0v16h2z"/><path d="M8 12H5v6h5v-6H8zM5 2v6h5V2H5z"/></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>table move column after</title><g fill="#36c"><path d="M16 10l-5-4v3H6v2h5v3z"/><path d="M0 2h20v16H0zm5 6v4h5v4h8V4h-8v4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 330 B

After

Width:  |  Height:  |  Size: 263 B

View file

@ -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>table move column after</title><path d="M11 11v3l5-4-5-4v3H6v2h5z"/><path d="M18 2h-8v2h8v12h-8v2h10V2h-2zM2 18h5v-2H5V4h2V2H0v16h2z"/><path d="M8 12H5v6h5v-6H8zM5 2v6h5V2H5z"/></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>table move column after</title><path d="M16 10l-5-4v3H6v2h5v3z"/><path d="M0 2h20v16H0zm5 6v4h5v4h8V4h-8v4z"/></svg>

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 244 B

View file

@ -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>table move column before</title><g fill="#fff"><path d="M9 11v3l-5-4 5-4v3h5v2H9z"/><path d="M2 2h8v2H2v12h8v2H0V2h2zm16 16h-5v-2h2V4h-2V2h7v16h-2z"/><path d="M12 12h3v6h-5v-6h2zm3-10v6h-5V2h5z"/></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>table move column before</title><g fill="#fff"><path d="M4 10l5-4v3h5v2H9v3z"/><path d="M0 2v16h20V2zm2 2h8v4h5v4h-5v4H2z"/></g></svg>

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 262 B

View file

@ -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>table move column before</title><g fill="#36c"><path d="M9 11v3l-5-4 5-4v3h5v2H9z"/><path d="M2 2h8v2H2v12h8v2H0V2h2zm16 16h-5v-2h2V4h-2V2h7v16h-2z"/><path d="M12 12h3v6h-5v-6h2zm3-10v6h-5V2h5z"/></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>table move column before</title><g fill="#36c"><path d="M4 10l5-4v3h5v2H9v3z"/><path d="M0 2v16h20V2zm2 2h8v4h5v4h-5v4H2z"/></g></svg>

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 262 B

View file

@ -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>table move column before</title><path d="M9 11v3l-5-4 5-4v3h5v2H9z"/><path d="M2 2h8v2H2v12h8v2H0V2h2zm16 16h-5v-2h2V4h-2V2h7v16h-2z"/><path d="M12 12h3v6h-5v-6h2zm3-10v6h-5V2h5z"/></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>table move column before</title><path d="M4 10l5-4v3h5v2H9v3z"/><path d="M0 2v16h20V2zm2 2h8v4h5v4h-5v4H2z"/></svg>

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 243 B

View file

@ -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>table move row after</title><g fill="#fff"><path d="M11 11h3l-4 5-4-5h3V6h2v5z"/><path d="M2 18v-8h2v8h12v-8h2v10H2v-2zM18 2v5h-2V5H4v2H2V0h16v2z"/><path d="M12 8V5h6v5h-6V8zM2 5h6v5H2V5z"/></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>table move row after</title><g fill="#fff"><path d="M10 16l-4-5h3V6h2v5h3z"/><path d="M2 0v20h16V0zm2 10h4V5h4v5h4v8H4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 260 B

View file

@ -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>table move row after</title><g fill="#36c"><path d="M11 11h3l-4 5-4-5h3V6h2v5z"/><path d="M2 18v-8h2v8h12v-8h2v10H2v-2zM18 2v5h-2V5H4v2H2V0h16v2z"/><path d="M12 8V5h6v5h-6V8zM2 5h6v5H2V5z"/></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>table move row after</title><g fill="#36c"><path d="M10 16l-4-5h3V6h2v5h3z"/><path d="M2 0v20h16V0zm2 10h4V5h4v5h4v8H4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 260 B

View file

@ -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>table move row after</title><path d="M11 11h3l-4 5-4-5h3V6h2v5z"/><path d="M2 18v-8h2v8h12v-8h2v10H2v-2zM18 2v5h-2V5H4v2H2V0h16v2z"/><path d="M12 8V5h6v5h-6V8zM2 5h6v5H2V5z"/></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>table move row after</title><path d="M10 16l-4-5h3V6h2v5h3z"/><path d="M2 0v20h16V0zm2 10h4V5h4v5h4v8H4z"/></svg>

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 241 B

View file

@ -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>table move row before</title><g fill="#fff"><path d="M9 9H6l4-5 4 5h-3v5H9V9z"/><path d="M18 2v8h-2V2H4v8H2V0h16v2zM2 18v-5h2v2h12v-2h2v7H2v-2z"/><path d="M8 12v3H2v-5h6v2zm10 3h-6v-5h6v5z"/></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>table move row before</title><g fill="#fff"><path d="M9 9H6l4-5 4 5h-3v5H9z"/><path d="M2 0h16v20H2zm2 2v8h4v5h4v-5h4V2z"/></g></svg>

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 261 B

View file

@ -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>table move row before</title><g fill="#36c"><path d="M9 9H6l4-5 4 5h-3v5H9V9z"/><path d="M18 2v8h-2V2H4v8H2V0h16v2zM2 18v-5h2v2h12v-2h2v7H2v-2z"/><path d="M8 12v3H2v-5h6v2zm10 3h-6v-5h6v5z"/></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>table move row before</title><g fill="#36c"><path d="M9 9H6l4-5 4 5h-3v5H9z"/><path d="M2 0h16v20H2zm2 2v8h4v5h4v-5h4V2z"/></g></svg>

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 261 B

View file

@ -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>table move row before</title><path d="M9 9H6l4-5 4 5h-3v5H9V9z"/><path d="M18 2v8h-2V2H4v8H2V0h16v2zM2 18v-5h2v2h12v-2h2v7H2v-2z"/><path d="M8 12v3H2v-5h6v2zm10 3h-6v-5h6v5z"/></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>table move row before</title><path d="M9 9H6l4-5 4 5h-3v5H9z"/><path d="M2 0h16v20H2zm2 2v8h4v5h4v-5h4V2z"/></svg>

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 127 B

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="2 2 20 20"><title>web</title><g fill="#fff"><path d="M22.78 18.46L21 16V4H3v12l-1.757 2.463a.974.974 0 0 0-.157 1.043c.157.347.533.494.914.494h20c.382 0 .783-.148.94-.496a.976.976 0 0 0-.16-1.044zM4 18l1-2V6h14v10l1 2H4z"/><path d="M7 16h10V8H7v8zm2-2v-3h6v3H9z"/></g></svg>
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="2 2 20 20"><title>web</title><g fill="#fff"><path d="M21 16V4H3v12l-1 1.4V20h20v-2.6zM5 16V6h14v10l1 2H4z"/><path d="M7 16h10V8H7zm2-5h6v3H9z"/></g></svg>

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 B

After

Width:  |  Height:  |  Size: 142 B

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="2 2 20 20"><title>web</title><g fill="#36c"><path d="M22.78 18.46L21 16V4H3v12l-1.757 2.463a.974.974 0 0 0-.157 1.043c.157.347.533.494.914.494h20c.382 0 .783-.148.94-.496a.976.976 0 0 0-.16-1.044zM4 18l1-2V6h14v10l1 2H4z"/><path d="M7 16h10V8H7v8zm2-2v-3h6v3H9z"/></g></svg>
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="2 2 20 20"><title>web</title><g fill="#36c"><path d="M21 16V4H3v12l-1 1.4V20h20v-2.6zM5 16V6h14v10l1 2H4z"/><path d="M7 16h10V8H7zm2-5h6v3H9z"/></g></svg>

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 B

After

Width:  |  Height:  |  Size: 124 B

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="2 2 20 20"><title>web</title><path d="M22.78 18.46L21 16V4H3v12l-1.757 2.463a.974.974 0 0 0-.157 1.043c.157.347.533.494.914.494h20c.382 0 .783-.148.94-.496a.976.976 0 0 0-.16-1.044zM4 18l1-2V6h14v10l1 2H4z"/><path d="M7 16h10V8H7v8zm2-2v-3h6v3H9z"/></svg>
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="2 2 20 20"><title>web</title><path d="M21 16V4H3v12l-1 1.4V20h20v-2.6zM5 16V6h14v10l1 2H4z"/><path d="M7 16h10V8H7zm2-5h6v3H9z"/></svg>

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 245 B

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="#c8ccd1" d="M0 0h16v16H0z"/><path fill="#fff" d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="#c8ccd1" d="M0 0h16v16H0z"/><path fill="#fff" d="M8 0h8v8H0v8h8z"/></svg>

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 206 B

View file

@ -2,7 +2,13 @@
"prefix": "oo-ui-texture",
"intro": "@import '../../../../src/styles/common';",
"images": {
"pending": { "file": "images/textures/pending.gif" },
"transparency": { "file": "images/textures/transparency.svg" }
"pending": {
"file": "images/textures/pending.gif",
"deprecated": "Deprecated since v0.31.1."
},
"transparency": {
"file": "images/textures/transparency.svg",
"deprecated": "Deprecated since v0.31.1."
}
}
}