"ext-iconv": "*",
"liuggio/statsd-php-client": "1.0.16",
"mediawiki/at-ease": "1.1.0",
- "oojs/oojs-ui": "0.12.12",
+ "oojs/oojs-ui": "0.13.0",
"oyejorge/less.php": "1.7.0.9",
"php": ">=5.3.3",
"psr/log": "1.0.0",
"@metadata": {
"authors": [
"DzWiki",
- "Semso98"
+ "Semso98",
+ "Srdjan m"
]
},
"ooui-outline-control-move-down": "Premjesti stavku dolje",
"ooui-dialog-process-error": "Nešto je pošlo naopako",
"ooui-dialog-process-dismiss": "Odbaci",
"ooui-dialog-process-retry": "Pokušajte ponovo",
- "ooui-dialog-process-continue": "Nastavi"
+ "ooui-dialog-process-continue": "Nastavi",
+ "ooui-selectfile-placeholder": "Nijedna datoteka nije izabrana"
}
"ooui-dialog-process-dismiss": "Zavřít",
"ooui-dialog-process-retry": "Zkusit znovu",
"ooui-dialog-process-continue": "Pokračovat",
+ "ooui-selectfile-button-select": "Vybrat soubor",
"ooui-selectfile-not-supported": "Výběr souboru není podporován",
"ooui-selectfile-placeholder": "Nebyl vybrán žádný soubor"
}
"ooui-dialog-process-dismiss": "Hylkää",
"ooui-dialog-process-retry": "Yritä uudelleen",
"ooui-dialog-process-continue": "Jatka",
+ "ooui-selectfile-button-select": "Valitse tiedosto",
"ooui-selectfile-not-supported": "Tiedoston valitsemista ei tueta",
"ooui-selectfile-placeholder": "Tiedostoa ei ole valittu",
- "ooui-selectfile-dragdrop-placeholder": "Pudota tiedosto (tai selaa tiedostoja napsauttamalla)"
+ "ooui-selectfile-dragdrop-placeholder": "Pudota tiedosto tähän"
}
"ooui-dialog-process-dismiss": "Sluiten",
"ooui-dialog-process-retry": "Opnieuw proberen",
"ooui-dialog-process-continue": "Doorgaan",
+ "ooui-selectfile-button-select": "Selecteer een bestand",
"ooui-selectfile-not-supported": "Selectie van een bestand wordt niet ondersteund",
- "ooui-selectfile-placeholder": "Er is geen bestand geselecteerd"
+ "ooui-selectfile-placeholder": "Er is geen bestand geselecteerd",
+ "ooui-selectfile-dragdrop-placeholder": "Sleep hier een bestand heen"
}
/*!
- * OOjs UI v0.12.12
+ * OOjs UI v0.13.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-13T20:38:26Z
+ * Date: 2015-10-27T17:53:00Z
*/
@-webkit-keyframes oo-ui-progressBarWidget-slide {
from {
width: 1.875em;
height: 1.875em;
}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
- /*.oo-ui-transition(opacity @medium-ease);*/
-}
.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
outline: none;
border: 1px #c9c9c9 solid;
-webkit-transition: border-color 100ms ease;
-moz-transition: border-color 100ms ease;
- -ms-transition: border-color 100ms ease;
- -o-transition: border-color 100ms ease;
transition: border-color 100ms ease;
background: #eeeeee;
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
margin-right: 0.3em;
}
.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- /* -0.5 - 0.475 */
margin-left: -0.005em;
margin-right: -0.005em;
}
}
.oo-ui-draggableElement {
cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
- /*
- * HACK: In order to style horizontally, we must override
- * OO.ui.OptionWidget's display rule that is currently set
- * to be 'block'
- */
}
.oo-ui-draggableElement-dragging {
cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
position: absolute;
-webkit-transition: all 200ms ease;
-moz-transition: all 200ms ease;
- -ms-transition: all 200ms ease;
- -o-transition: all 200ms ease;
transition: all 200ms ease;
}
.oo-ui-menuLayout-menu {
border: 1px solid transparent;
-webkit-transition: border-color 250ms ease;
-moz-transition: border-color 250ms ease;
- -ms-transition: border-color 250ms ease;
- -o-transition: border-color 250ms ease;
transition: border-color 250ms ease;
}
.oo-ui-toolGroup-empty {
background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/apex/images/icons/check.svg");
background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/apex/images/icons/check.svg");
background-image: -o-linear-gradient(transparent, transparent), url("themes/apex/images/icons/check.png");
+ background-size: contain;
+ background-position: center center;
+ background-repeat: no-repeat;
}
.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
background-color: #e1f3ff;
.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
margin: 0 1em;
line-height: 3.40625em;
- /* 43/12.8 */
}
.oo-ui-toolbar-shadow {
background-image: /* @embed */ url(themes/apex/images/toolbar-shadow.png);
opacity: 0.5;
-webkit-transition: opacity 500ms ease;
-moz-transition: opacity 500ms ease;
- -ms-transition: opacity 500ms ease;
- -o-transition: opacity 500ms ease;
transition: opacity 500ms ease;
}
.oo-ui-optionWidget {
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
-ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
transform: translateZ(0px);
height: 2em;
width: 4em;
border: 1px #c9c9c9 solid;
-webkit-transition: left 250ms ease, margin-left 250ms ease;
-moz-transition: left 250ms ease, margin-left 250ms ease;
- -ms-transition: left 250ms ease, margin-left 250ms ease;
- -o-transition: left 250ms ease, margin-left 250ms ease;
transition: left 250ms ease, margin-left 250ms ease;
background: #eeeeee;
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-webkit-transition: opacity 250ms ease;
-moz-transition: opacity 250ms ease;
- -ms-transition: opacity 250ms ease;
- -o-transition: opacity 250ms ease;
transition: opacity 250ms ease;
background: #cde7f4;
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
border-right: 1px solid #cccccc;
-webkit-transition: width 250ms ease, margin-left 250ms ease;
-moz-transition: width 250ms ease, margin-left 250ms ease;
- -ms-transition: width 250ms ease, margin-left 250ms ease;
- -o-transition: width 250ms ease, margin-left 250ms ease;
transition: width 250ms ease, margin-left 250ms ease;
background: #cde7f4;
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
-webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
- -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
- -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
animation: oo-ui-progressBarWidget-slide 2s infinite linear;
width: 40%;
margin-left: -10%;
.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
-moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
- -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease;
- -o-transition: width 100ms ease, height 100ms ease, left 100ms ease;
transition: width 100ms ease, height 100ms ease, left 100ms ease;
}
.oo-ui-popupWidget-head {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
+.oo-ui-textInputWidget textarea {
+ overflow: auto;
+}
.oo-ui-textInputWidget input[type="search"] {
-webkit-appearance: none;
}
border-radius: 0.25em;
-webkit-transition: border-color 250ms ease, box-shadow 250ms ease;
-moz-transition: border-color 250ms ease, box-shadow 250ms ease;
- -ms-transition: border-color 250ms ease, box-shadow 250ms ease;
- -o-transition: border-color 250ms ease, box-shadow 250ms ease;
transition: border-color 250ms ease, box-shadow 250ms ease;
}
.oo-ui-textInputWidget input.oo-ui-pendingElement-pending,
opacity: 0;
z-index: 1;
cursor: pointer;
- /* Push the button part of the native control out of view, as it changes the cursor */
padding-top: 100px;
}
.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
padding: 0 1em;
vertical-align: middle;
- /* Adjust for border so text aligns with title */
margin: -1px;
}
.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless,
opacity: 0;
-webkit-transition: opacity 250ms ease;
-moz-transition: opacity 250ms ease;
- -ms-transition: opacity 250ms ease;
- -o-transition: opacity 250ms ease;
transition: opacity 250ms ease;
}
.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
- -o-transform: scale(0.5);
transform: scale(0.5);
-webkit-transition: all 250ms ease;
-moz-transition: all 250ms ease;
- -ms-transition: all 250ms ease;
- -o-transition: all 250ms ease;
transition: all 250ms ease;
}
.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- /* Fade window overlay */
opacity: 1;
}
.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- /* Fade frame */
opacity: 1;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
- -o-transform: scale(1);
transform: scale(1);
}
.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
/*!
- * OOjs UI v0.12.12
+ * OOjs UI v0.13.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-13T20:38:18Z
+ * Date: 2015-10-27T17:52:51Z
*/
/**
* @class
/*!
- * OOjs UI v0.12.12
+ * OOjs UI v0.13.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-13T20:38:26Z
+ * Date: 2015-10-27T17:53:00Z
*/
@-webkit-keyframes oo-ui-progressBarWidget-slide {
from {
position: relative;
-webkit-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
-moz-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
- -ms-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
- -o-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
}
.oo-ui-draggableElement {
cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
- /*
- * HACK: In order to style horizontally, we must override
- * OO.ui.OptionWidget's display rule that is currently set
- * to be 'block'
- */
}
.oo-ui-draggableElement-dragging {
cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
position: absolute;
-webkit-transition: all 200ms ease;
-moz-transition: all 200ms ease;
- -ms-transition: all 200ms ease;
- -o-transition: all 200ms ease;
transition: all 200ms ease;
}
.oo-ui-menuLayout-menu {
.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
margin: 0 1em;
line-height: 3.125em;
- /* 40/12.8 */
}
.oo-ui-optionWidget {
position: relative;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
-ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
transform: translateZ(0px);
height: 2em;
width: 3.5em;
+ border: 1px solid #777777;
border-radius: 1em;
- border: 1px #555555 solid;
- background: #ffffff;
- -webkit-transition: background-color 100ms ease;
- -moz-transition: background-color 100ms ease;
- -ms-transition: background-color 100ms ease;
- -o-transition: background-color 100ms ease;
- transition: background-color 100ms ease;
+ background-color: #ffffff;
margin-right: 0.5em;
+ -webkit-transition: background-color 100ms ease, border-color 100ms ease;
+ -moz-transition: background-color 100ms ease, border-color 100ms ease;
+ transition: background-color 100ms ease, border-color 100ms ease;
}
.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
cursor: default;
.oo-ui-toggleSwitchWidget:last-child {
margin-right: 0;
}
-.oo-ui-toggleSwitchWidget-grip {
- top: 0.5em;
- left: 0.5em;
- width: 1em;
- height: 1em;
- margin-top: -1px;
+.oo-ui-toggleSwitchWidget:before {
+ content: "";
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ border: 1px solid transparent;
border-radius: 1em;
- background: #555555;
+ z-index: 1;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ top: 0.35em;
+ width: 1.2em;
+ height: 1.2em;
+ border-radius: 1.2em;
+ background-color: #555555;
-webkit-transition: left 100ms ease, margin-left 100ms ease;
-moz-transition: left 100ms ease, margin-left 100ms ease;
- -ms-transition: left 100ms ease, margin-left 100ms ease;
- -o-transition: left 100ms ease, margin-left 100ms ease;
transition: left 100ms ease, margin-left 100ms ease;
}
.oo-ui-toggleSwitchWidget-glow {
display: none;
}
.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- left: 2em;
+ left: 1.9em;
margin-left: -2px;
}
.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- left: 0.5em;
+ left: 0.4em;
margin-left: 0;
}
.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on {
}
.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
background: #ffffff;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus {
- outline: none;
- border-color: #347bff;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus.oo-ui-toggleWidget-on {
- border-color: #ffffff;
- box-shadow: 0 0 0 1px #347bff;
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
}
.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
border-color: #2962cc;
- box-shadow: 0 0 0 1px #2962cc;
}
.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover.oo-ui-toggleWidget-on {
background: #2962cc;
border-color: #2962cc;
}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus {
+ border-color: #347bff;
+ outline: none;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus.oo-ui-toggleWidget-on {
+ border-color: #347bff;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus.oo-ui-toggleWidget-on:before {
+ border-color: #ffffff;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:active,
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:active:hover {
+ background-color: #347bff;
+ border-color: #347bff;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:active .oo-ui-toggleSwitchWidget-grip,
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:active:hover .oo-ui-toggleSwitchWidget-grip {
background: #ffffff;
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
}
.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
background: #dddddd;
background: #dddddd;
-webkit-transition: width 200ms, margin-left 200ms;
-moz-transition: width 200ms, margin-left 200ms;
- -ms-transition: width 200ms, margin-left 200ms;
- -o-transition: width 200ms, margin-left 200ms;
transition: width 200ms, margin-left 200ms;
}
.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
-webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
- -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
- -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
animation: oo-ui-progressBarWidget-slide 2s infinite linear;
width: 40%;
margin-left: -10%;
.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
-moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
- -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease;
- -o-transition: width 100ms ease, height 100ms ease, left 100ms ease;
transition: width 100ms ease, height 100ms ease, left 100ms ease;
}
.oo-ui-popupWidget-head {
.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
-webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
-moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
border-bottom-width: 3px;
}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled {
cursor: default;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
background-color: #eeeeee;
border-color: #eeeeee;
}
.oo-ui-radioInputWidget input[type="radio"] + span {
-webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
-moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
.oo-ui-radioInputWidget input[type="radio"]:hover + span {
border-bottom-width: 3px;
}
-.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
+.oo-ui-radioInputWidget input[type="radio"]:disabled {
cursor: default;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
background-color: #eeeeee;
border-color: #eeeeee;
}
-moz-box-sizing: border-box;
box-sizing: border-box;
}
+.oo-ui-textInputWidget textarea {
+ overflow: auto;
+}
.oo-ui-textInputWidget input[type="search"] {
-webkit-appearance: none;
}
border-radius: 0.1em;
-webkit-transition: box-shadow 100ms ease;
-moz-transition: box-shadow 100ms ease;
- -ms-transition: box-shadow 100ms ease;
- -o-transition: box-shadow 100ms ease;
transition: box-shadow 100ms ease;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-webkit-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-moz-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
- -ms-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
- -o-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
}
.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
opacity: 0;
z-index: 1;
cursor: pointer;
- /* Push the button part of the native control out of view, as it changes the cursor */
padding-top: 100px;
}
.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
opacity: 0;
-webkit-transition: opacity 250ms ease;
-moz-transition: opacity 250ms ease;
- -ms-transition: opacity 250ms ease;
- -o-transition: opacity 250ms ease;
transition: opacity 250ms ease;
}
.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
- -o-transform: scale(0.5);
transform: scale(0.5);
-webkit-transition: all 250ms ease;
-moz-transition: all 250ms ease;
- -ms-transition: all 250ms ease;
- -o-transition: all 250ms ease;
transition: all 250ms ease;
}
.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- /* Fade window overlay */
opacity: 1;
}
.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- /* Fade frame */
opacity: 1;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
- -o-transform: scale(1);
transform: scale(1);
}
.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
/*!
- * OOjs UI v0.12.12
+ * OOjs UI v0.13.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-13T20:38:18Z
+ * Date: 2015-10-27T17:52:51Z
*/
/**
* @class
/*!
- * OOjs UI v0.12.12
+ * OOjs UI v0.13.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-13T20:38:18Z
+ * Date: 2015-10-27T17:52:51Z
*/
( function ( OO ) {
}
}
} );
+ // pick up dynamic state, like focus, value of form inputs, scroll position, etc.
+ state = cls.static.gatherPreInfuseState( $elem, data );
// jscs:disable requireCapitalizedConstructors
obj = new cls( data ); // rebuild widget
- // pick up dynamic state, like focus, value of form inputs, scroll position, etc.
- state = obj.gatherPreInfuseState( $elem );
// now replace old DOM with this new DOM.
if ( top ) {
$elem.replaceWith( obj.$element );
return obj;
};
+/**
+ * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of a HTML DOM node
+ * (and its children) that represent an Element of the same class and the given configuration,
+ * generated by the PHP implementation.
+ *
+ * This method is called just before `node` is detached from the DOM. The return value of this
+ * function will be passed to #restorePreInfuseState after the newly created widget's #$element
+ * is inserted into DOM to replace `node`.
+ *
+ * @protected
+ * @param {HTMLElement} node
+ * @param {Object} config
+ * @return {Object}
+ */
+OO.ui.Element.static.gatherPreInfuseState = function () {
+ return {};
+};
+
/**
* Get a jQuery function within a specific document.
*
return OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config );
};
-/**
- * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of a HTML DOM node
- * (and its children) that represent an Element of the same type and configuration as the current
- * one, generated by the PHP implementation.
- *
- * This method is called just before `node` is detached from the DOM. The return value of this
- * function will be passed to #restorePreInfuseState after this widget's #$element is inserted into
- * DOM to replace `node`.
- *
- * @protected
- * @param {HTMLElement} node
- * @return {Object}
- */
-OO.ui.Element.prototype.gatherPreInfuseState = function () {
- return {};
-};
-
/**
* Restore the pre-infusion dynamic state for this widget.
*
this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
if ( this.outlined ) {
this.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );
+ this.scrolling = false;
+ this.stackLayout.connect( this, { visibleItemChange: 'onStackLayoutVisibleItemChange' } );
}
if ( this.autoFocus ) {
// Event 'focus' does not bubble, but 'focusin' does
}
};
+/**
+ * Handle visibleItemChange events from the stackLayout
+ *
+ * The next visible page is set as the current page by selecting it
+ * in the outline
+ *
+ * @param {OO.ui.PageLayout} page The next visible page in the layout
+ */
+OO.ui.BookletLayout.prototype.onStackLayoutVisibleItemChange = function ( page ) {
+ // Set a flag to so that the resulting call to #onStackLayoutSet doesn't
+ // try and scroll the item into view again.
+ this.scrolling = true;
+ this.outlineSelectWidget.selectItemByData( page.getName() );
+ this.scrolling = false;
+};
+
/**
* Handle stack layout set events.
*
*/
OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
var layout = this;
- if ( page ) {
+ if ( !this.scrolling && page ) {
page.scrollElementIntoView( { complete: function () {
if ( layout.autoFocus ) {
layout.focus();
this.$element.addClass( 'oo-ui-stackLayout' );
if ( this.continuous ) {
this.$element.addClass( 'oo-ui-stackLayout-continuous' );
+ this.$element.on( 'scroll', OO.ui.debounce( this.onScroll.bind( this ), 250 ) );
}
if ( Array.isArray( config.items ) ) {
this.addItems( config.items );
* @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown
*/
+/**
+ * When used in continuous mode, this event is emitted when the user scrolls down
+ * far enough such that currentItem is no longer visible.
+ *
+ * @event visibleItemChange
+ * @param {OO.ui.PanelLayout} panel The next visible item in the layout
+ */
+
/* Methods */
+/**
+ * Handle scroll events from the layout element
+ *
+ * @param {jQuery.Event} e
+ * @fires visibleItemChange
+ */
+OO.ui.StackLayout.prototype.onScroll = function () {
+ var currentRect,
+ len = this.items.length,
+ currentIndex = this.items.indexOf( this.currentItem ),
+ newIndex = currentIndex,
+ containerRect = this.$element[ 0 ].getBoundingClientRect();
+
+ if ( !containerRect || ( !containerRect.top && !containerRect.bottom ) ) {
+ // Can't get bounding rect, possibly not attached.
+ return;
+ }
+
+ function getRect( item ) {
+ return item.$element[ 0 ].getBoundingClientRect();
+ }
+
+ function isVisible( item ) {
+ var rect = getRect( item );
+ return rect.bottom > containerRect.top && rect.top < containerRect.bottom;
+ }
+
+ currentRect = getRect( this.currentItem );
+
+ if ( currentRect.bottom < containerRect.top ) {
+ // Scrolled down past current item
+ while ( ++newIndex < len ) {
+ if ( isVisible( this.items[ newIndex ] ) ) {
+ break;
+ }
+ }
+ } else if ( currentRect.top > containerRect.bottom ) {
+ // Scrolled up past current item
+ while ( --newIndex >= 0 ) {
+ if ( isVisible( this.items[ newIndex ] ) ) {
+ break;
+ }
+ }
+ }
+
+ if ( newIndex !== currentIndex ) {
+ this.emit( 'visibleItemChange', this.items[ newIndex ] );
+ }
+};
+
/**
* Get the current panel.
*
OO.ui.InputWidget.static.supportsSimpleLabel = true;
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {
+ var
+ state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config ),
+ $input = state.$input || $( node ).find( '.oo-ui-inputWidget-input' );
+ state.value = $input.val();
+ // Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward
+ state.focus = $input.is( ':focus' );
+ return state;
+};
+
/* Events */
/**
return this;
};
-/**
- * @inheritdoc
- */
-OO.ui.InputWidget.prototype.gatherPreInfuseState = function ( node ) {
- var
- state = OO.ui.InputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
- $input = state.$input || $( node ).find( '.oo-ui-inputWidget-input' );
- state.value = $input.val();
- // Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward
- state.focus = $input.is( ':focus' );
- return state;
-};
-
/**
* @inheritdoc
*/
OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CheckboxInputWidget.static.gatherPreInfuseState = function ( node, config ) {
+ var
+ state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config ),
+ $input = $( node ).find( '.oo-ui-inputWidget-input' );
+ state.$input = $input; // shortcut for performance, used in InputWidget
+ state.checked = $input.prop( 'checked' );
+ return state;
+};
+
/* Methods */
/**
return this.selected;
};
-/**
- * @inheritdoc
- */
-OO.ui.CheckboxInputWidget.prototype.gatherPreInfuseState = function ( node ) {
- var
- state = OO.ui.CheckboxInputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
- $input = $( node ).find( '.oo-ui-inputWidget-input' );
- state.$input = $input; // shortcut for performance, used in InputWidget
- state.checked = $input.prop( 'checked' );
- return state;
-};
-
/**
* @inheritdoc
*/
OO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioInputWidget.static.gatherPreInfuseState = function ( node, config ) {
+ var
+ state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config ),
+ $input = $( node ).find( '.oo-ui-inputWidget-input' );
+ state.$input = $input; // shortcut for performance, used in InputWidget
+ state.checked = $input.prop( 'checked' );
+ return state;
+};
+
/* Methods */
/**
return this.$input.prop( 'checked' );
};
-/**
- * @inheritdoc
- */
-OO.ui.RadioInputWidget.prototype.gatherPreInfuseState = function ( node ) {
- var
- state = OO.ui.RadioInputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
- $input = $( node ).find( '.oo-ui-inputWidget-input' );
- state.$input = $input; // shortcut for performance, used in InputWidget
- state.checked = $input.prop( 'checked' );
- return state;
-};
-
/**
* @inheritdoc
*/
OO.ui.RadioSelectInputWidget.static.supportsSimpleLabel = false;
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioSelectInputWidget.static.gatherPreInfuseState = function ( node, config ) {
+ var state = OO.ui.RadioSelectInputWidget.parent.static.gatherPreInfuseState( node, config );
+ state.value = $( node ).find( '.oo-ui-radioInputWidget .oo-ui-inputWidget-input:checked' ).val();
+ return state;
+};
+
/* Methods */
/**
return this;
};
-/**
- * @inheritdoc
- */
-OO.ui.RadioSelectInputWidget.prototype.gatherPreInfuseState = function ( node ) {
- var state = OO.ui.RadioSelectInputWidget.parent.prototype.gatherPreInfuseState.call( this, node );
- state.value = $( node ).find( '.oo-ui-radioInputWidget .oo-ui-inputWidget-input:checked' ).val();
- return state;
-};
-
/**
* TextInputWidgets, like HTML text inputs, can be configured with options that customize the
* size of the field as well as its presentation. In addition, these widgets can be configured
this.minRows = config.rows !== undefined ? config.rows : '';
this.maxRows = config.maxRows || Math.max( 2 * ( this.minRows || 0 ), 10 );
this.validate = null;
+ this.styleHeight = null;
// Clone for resizing
if ( this.autosize ) {
integer: /^\d+$/
};
+/* Static Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TextInputWidget.static.gatherPreInfuseState = function ( node, config ) {
+ var
+ state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config ),
+ $input = $( node ).find( '.oo-ui-inputWidget-input' );
+ state.$input = $input; // shortcut for performance, used in InputWidget
+ if ( config.multiline ) {
+ state.scrollTop = $input.scrollTop();
+ }
+ return state;
+};
+
/* Events */
/**
* @event enter
*/
+/**
+ * A `resize` event is emitted when autosize is set and the widget resizes
+ *
+ * @event resize
+ */
+
/* Methods */
/**
* This only affects #multiline inputs that are {@link #autosize autosized}.
*
* @chainable
+ * @fires resize
*/
OO.ui.TextInputWidget.prototype.adjustSize = function () {
- var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight;
+ var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight, newHeight;
if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
this.$clone
this.$clone.addClass( 'oo-ui-element-hidden' );
// Only apply inline height when expansion beyond natural height is needed
- if ( idealHeight > innerHeight ) {
- // Use the difference between the inner and outer height as a buffer
- this.$input.css( 'height', idealHeight + ( outerHeight - innerHeight ) );
- } else {
- this.$input.css( 'height', '' );
+ // Use the difference between the inner and outer height as a buffer
+ newHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';
+ if ( newHeight !== this.styleHeight ) {
+ this.$input.css( 'height', newHeight );
+ this.styleHeight = newHeight;
+ this.emit( 'resize' );
}
}
return this;
};
/**
- * Select the entire text of the input.
+ * Focus the input and select a specified range within the text.
*
+ * @param {number} from Select from offset
+ * @param {number} [to] Select to offset, defaults to from
* @chainable
*/
-OO.ui.TextInputWidget.prototype.select = function () {
- this.$input.select();
- return this;
-};
-
-/**
- * Focus the input and move the cursor to the end.
- */
-OO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {
- var textRange,
+OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) {
+ var textRange, isBackwards, start, end,
element = this.$input[ 0 ];
+
+ to = to || from;
+
+ isBackwards = to < from;
+ start = isBackwards ? to : from;
+ end = isBackwards ? from : to;
+
this.focus();
- if ( element.selectionStart !== undefined ) {
- element.selectionStart = element.selectionEnd = element.value.length;
+
+ if ( element.setSelectionRange ) {
+ element.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );
} else if ( element.createTextRange ) {
// IE 8 and below
textRange = element.createTextRange();
- textRange.collapse( false );
+ textRange.collapse( true );
+ textRange.moveStart( 'character', start );
+ textRange.moveEnd( 'character', end - start );
textRange.select();
}
+ return this;
+};
+
+/**
+ * Get the length of the text input value.
+ *
+ * This could differ from the length of #getValue if the
+ * value gets filtered
+ *
+ * @return {number} Input length
+ */
+OO.ui.TextInputWidget.prototype.getInputLength = function () {
+ return this.$input[ 0 ].value.length;
+};
+
+/**
+ * Focus the input and select the entire text.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.select = function () {
+ return this.selectRange( 0, this.getInputLength() );
+};
+
+/**
+ * Focus the input and move the cursor to the start.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.moveCursorToStart = function () {
+ return this.selectRange( 0 );
+};
+
+/**
+ * Focus the input and move the cursor to the end.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {
+ return this.selectRange( this.getInputLength() );
};
/**
return this;
};
-/**
- * @inheritdoc
- */
-OO.ui.TextInputWidget.prototype.gatherPreInfuseState = function ( node ) {
- var
- state = OO.ui.TextInputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
- $input = $( node ).find( '.oo-ui-inputWidget-input' );
- state.$input = $input; // shortcut for performance, used in InputWidget
- if ( this.multiline ) {
- state.scrollTop = $input.scrollTop();
- }
- return state;
-};
-
/**
* @inheritdoc
*/
}
};
-/*!
- * Deprecated aliases for classes in the `OO.ui.mixin` namespace.
- */
-
-/**
- * @inheritdoc OO.ui.mixin.ButtonElement
- * @deprecated Use {@link OO.ui.mixin.ButtonElement} instead.
- */
-OO.ui.ButtonElement = OO.ui.mixin.ButtonElement;
-
-/**
- * @inheritdoc OO.ui.mixin.ClippableElement
- * @deprecated Use {@link OO.ui.mixin.ClippableElement} instead.
- */
-OO.ui.ClippableElement = OO.ui.mixin.ClippableElement;
-
-/**
- * @inheritdoc OO.ui.mixin.DraggableElement
- * @deprecated Use {@link OO.ui.mixin.DraggableElement} instead.
- */
-OO.ui.DraggableElement = OO.ui.mixin.DraggableElement;
-
-/**
- * @inheritdoc OO.ui.mixin.DraggableGroupElement
- * @deprecated Use {@link OO.ui.mixin.DraggableGroupElement} instead.
- */
-OO.ui.DraggableGroupElement = OO.ui.mixin.DraggableGroupElement;
-
-/**
- * @inheritdoc OO.ui.mixin.FlaggedElement
- * @deprecated Use {@link OO.ui.mixin.FlaggedElement} instead.
- */
-OO.ui.FlaggedElement = OO.ui.mixin.FlaggedElement;
-
-/**
- * @inheritdoc OO.ui.mixin.GroupElement
- * @deprecated Use {@link OO.ui.mixin.GroupElement} instead.
- */
-OO.ui.GroupElement = OO.ui.mixin.GroupElement;
-
-/**
- * @inheritdoc OO.ui.mixin.GroupWidget
- * @deprecated Use {@link OO.ui.mixin.GroupWidget} instead.
- */
-OO.ui.GroupWidget = OO.ui.mixin.GroupWidget;
-
-/**
- * @inheritdoc OO.ui.mixin.IconElement
- * @deprecated Use {@link OO.ui.mixin.IconElement} instead.
- */
-OO.ui.IconElement = OO.ui.mixin.IconElement;
-
-/**
- * @inheritdoc OO.ui.mixin.IndicatorElement
- * @deprecated Use {@link OO.ui.mixin.IndicatorElement} instead.
- */
-OO.ui.IndicatorElement = OO.ui.mixin.IndicatorElement;
-
-/**
- * @inheritdoc OO.ui.mixin.ItemWidget
- * @deprecated Use {@link OO.ui.mixin.ItemWidget} instead.
- */
-OO.ui.ItemWidget = OO.ui.mixin.ItemWidget;
-
-/**
- * @inheritdoc OO.ui.mixin.LabelElement
- * @deprecated Use {@link OO.ui.mixin.LabelElement} instead.
- */
-OO.ui.LabelElement = OO.ui.mixin.LabelElement;
-
-/**
- * @inheritdoc OO.ui.mixin.LookupElement
- * @deprecated Use {@link OO.ui.mixin.LookupElement} instead.
- */
-OO.ui.LookupElement = OO.ui.mixin.LookupElement;
-
-/**
- * @inheritdoc OO.ui.mixin.PendingElement
- * @deprecated Use {@link OO.ui.mixin.PendingElement} instead.
- */
-OO.ui.PendingElement = OO.ui.mixin.PendingElement;
-
-/**
- * @inheritdoc OO.ui.mixin.PopupElement
- * @deprecated Use {@link OO.ui.mixin.PopupElement} instead.
- */
-OO.ui.PopupElement = OO.ui.mixin.PopupElement;
-
-/**
- * @inheritdoc OO.ui.mixin.TabIndexedElement
- * @deprecated Use {@link OO.ui.mixin.TabIndexedElement} instead.
- */
-OO.ui.TabIndexedElement = OO.ui.mixin.TabIndexedElement;
-
-/**
- * @inheritdoc OO.ui.mixin.TitledElement
- * @deprecated Use {@link OO.ui.mixin.TitledElement} instead.
- */
-OO.ui.TitledElement = OO.ui.mixin.TitledElement;
-
}( OO ) );