Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/171548

Change subject: Add 'indeterminate' state to progress bar widget
......................................................................

Add 'indeterminate' state to progress bar widget

Use typical 'bouncing' animation in apex & MW themes.

Change-Id: Ib97d39cdc695ac714fb64f709bae0e20f7c73db0
---
M demos/pages/widgets.js
M src/styles/common.less
M src/themes/apex/widgets.less
M src/themes/mediawiki/widgets.less
M src/widgets/ProgressBarWidget.js
5 files changed, 71 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/oojs/ui refs/changes/48/171548/1

diff --git a/demos/pages/widgets.js b/demos/pages/widgets.js
index c70afec..2a4de1c 100644
--- a/demos/pages/widgets.js
+++ b/demos/pages/widgets.js
@@ -662,6 +662,15 @@
                                        label: 'Progress bar',
                                        align: 'top'
                                }
+                       ),
+                       new OO.ui.FieldLayout(
+                               new OO.ui.ProgressBarWidget( {
+                                       progress: false
+                               } ),
+                               {
+                                       label: 'Progress bart 
(indeterminate)\u200E',
+                                       align: 'top'
+                               }
                        )
                ];
 
diff --git a/src/styles/common.less b/src/styles/common.less
index 53c7aad..d0dc08a 100644
--- a/src/styles/common.less
+++ b/src/styles/common.less
@@ -52,6 +52,15 @@
        .oo-ui-image-variant( texture, @name, @file, @variant, @ext, @path );
 }
 
+.oo-ui-animation( @value1, @value2: X, ... ) {
+       @value: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`;
+       -webkit-animation: @value;
+       -moz-animation: @value;
+       -ms-animation: @value;
+       -o-animation: @value;
+       animation: @value;
+}
+
 .oo-ui-transition( @value1, @value2: X, ... ) {
        @value: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`;
        -webkit-transition: @value;
diff --git a/src/themes/apex/widgets.less b/src/themes/apex/widgets.less
index 88f8ff0..b92de81 100644
--- a/src/themes/apex/widgets.less
+++ b/src/themes/apex/widgets.less
@@ -622,17 +622,36 @@
 }
 
 .theme-oo-ui-progressBarWidget () {
-       width: 100%;
        max-width: 50em;
        border: solid 1px @primary-border;
        border-radius: 0.25em;
+       overflow: hidden;
+
        &-bar {
                height: 1em;
                border-right: solid 1px @primary-border;
-               .oo-ui-transition(width 200ms);
+               .oo-ui-transition(width 200ms, margin-left 200ms);
                .oo-ui-vertical-gradient(@primary-gradient-start, 
@primary-gradient-end);
+       }
+       &-indeterminate {
+               .oo-ui-progressBarWidget-bar {
+                       .oo-ui-animation(oo-ui-progressBarWidget-pulsate 1s 
infinite alternate ease-in-out);
+                       width: 40%;
+                       margin-left: -10%;
+                       border-left-width: 1px;
+               }
        }
        &.oo-ui-widget-disabled {
                opacity: 0.6;
        }
 }
+
+.oo-ui-progressBarWidget-pulsate-frames {
+       0% { margin-left: -2%; }
+       100% { margin-left: 62%; }
+}
+@-webkit-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@-moz-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@-ms-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@-o-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
diff --git a/src/themes/mediawiki/widgets.less 
b/src/themes/mediawiki/widgets.less
index d5a6e85..81c50e1 100644
--- a/src/themes/mediawiki/widgets.less
+++ b/src/themes/mediawiki/widgets.less
@@ -638,17 +638,36 @@
 }
 
 .theme-oo-ui-progressBarWidget () {
-       width: 100%;
        max-width: 50em;
        border: solid 1px @primary-fill;
        border-radius: 0.1em;
+       overflow: hidden;
+
        &-bar {
                height: 1em;
                border-right: solid 1px @primary-fill;
                background: @primary-fill;
-               .oo-ui-transition(width 200ms);
+               .oo-ui-transition(width 200ms, margin-left 200ms);
+       }
+       &-indeterminate {
+               .oo-ui-progressBarWidget-bar {
+                       .oo-ui-animation(oo-ui-progressBarWidget-pulsate 1s 
infinite alternate ease-in-out);
+                       width: 40%;
+                       margin-left: -10%;
+                       border-left-width: 1px;
+               }
        }
        &.oo-ui-widget-disabled {
                opacity: 0.2;
        }
 }
+
+.oo-ui-progressBarWidget-pulsate-frames {
+       0% { margin-left: -2%; }
+       100% { margin-left: 62%; }
+}
+@-webkit-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@-moz-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@-ms-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@-o-keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
+@keyframes oo-ui-progressBarWidget-pulsate { 
.oo-ui-progressBarWidget-pulsate-frames }
diff --git a/src/widgets/ProgressBarWidget.js b/src/widgets/ProgressBarWidget.js
index 4db8f21..12c8bb0 100644
--- a/src/widgets/ProgressBarWidget.js
+++ b/src/widgets/ProgressBarWidget.js
@@ -6,7 +6,7 @@
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {number} [progress=0] Initial progress
+ * @cfg {number|boolean} [progress=false] Initial progress percent or false 
for indeterminate
  */
 OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
        // Configuration initialization
@@ -20,7 +20,7 @@
        this.progress = null;
 
        // Initialization
-       this.setProgress( config.progress || 0 );
+       this.setProgress( config.progress !== undefined ? config.progress : 
false );
        this.$bar.addClass( 'oo-ui-progressBarWidget-bar');
        this.$element
                .attr( {
@@ -54,11 +54,17 @@
 /**
  * Set progress percent
  *
- * @param {number} progress Progress percent
+ * @param {number|boolean} progress Progress percent or false for indeterminate
  */
 OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
        this.progress = progress;
 
-       this.$bar.css( 'width', this.progress + '%' );
-       this.$element.attr( 'aria-valuenow', this.progress );
+       if ( progress !== false ) {
+               this.$bar.css( 'width', this.progress + '%' );
+               this.$element.attr( 'aria-valuenow', this.progress );
+       } else {
+               this.$bar.css( 'width', '' );
+               this.$element.removeAttr( 'aria-valuenow' );
+       }
+       this.$element.toggleClass( 'oo-ui-progressBarWidget-indeterminate', 
!progress );
 };

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib97d39cdc695ac714fb64f709bae0e20f7c73db0
Gerrit-PatchSet: 1
Gerrit-Project: oojs/ui
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to