Henning Snater has uploaded a new change for review.

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


Change subject: (bug 48145) TimeInput expert refactoring
......................................................................

(bug 48145) TimeInput expert refactoring

Introducing _updateValue() method getting rid of redundant code.

Change-Id: I68a720cad3d06a69725f81f037594a378381cfcd
---
M ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
1 file changed, 44 insertions(+), 50 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DataValues 
refs/changes/49/64049/1

diff --git 
a/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js 
b/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
index 54acb2a..baca93d 100644
--- 
a/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
+++ 
b/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
@@ -112,25 +112,13 @@
                        this.$precision = $( '<div/>' )
                        .addClass( this.uiBaseClass + '-precision' )
                        .listrotator( { values: precisionValues.reverse(), 
deferInit: true } )
-                       .on( 'listrotatorauto.' + this.uiBaseClass, function( 
event ) {
-                               var value = ( self.$calendar.data( 
'listrotator' ).value() )
-                                       ? new Time( self.$input.val(), { 
calendarname: self.$calendar.data( 'listrotator' ).value() } )
-                                       : new Time( self.$input.val() );
-                               $( this ).data( 'listrotator' ).rotate( 
value.precision() );
-                               self._setRawValue( value );
-                               self._updatePreview( value );
-                               self._updateCalendarHint( value );
-                               self._viewNotifier.notify( 'change' );
-                       } )
-                       .on( 'listrotatorselected.' + this.uiBaseClass, 
function( event, precision ) {
-                               var value = ( self.$calendar.data( 
'listrotator' ).value() )
-                                       ? new Time( self.$input.val(), { 
precision: $( this ).data( 'listrotator' ).value(), calendarname: 
self.$calendar.data( 'listrotator' ).value() } )
-                                       : new Time( self.$input.val(), { 
precision: $( this ).data( 'listrotator' ).value() } );
-                               self._setRawValue( value );
-                               self._updatePreview( value );
-                               self._updateCalendarHint( value );
-                               self._viewNotifier.notify( 'change' );
-                       } )
+                       .on(
+                               'listrotatorauto.' + this.uiBaseClass + ' 
listrotatorselected.' + this.uiBaseClass,
+                               function( event ) {
+                                       var value = self._updateValue();
+                                       $( this ).data( 'listrotator' ).rotate( 
value.precision() );
+                               }
+                       )
                        .appendTo( this.$precisionContainer );
 
                        this.$calendarContainer = $( '<div/>' )
@@ -143,28 +131,13 @@
                        } );
                        this.$calendar = $( '<div/>' )
                        .listrotator( { values: calendarValues, deferInit: true 
} )
-                       .on( 'listrotatorauto', function( event ) {
-                               var value = ( self.$precision.data( 
'listrotator' ).value() )
-                                       ? new Time( self.$input.val(), { 
precision: self.$precision.data( 'listrotator' ).value() } )
-                                       : new Time( self.$input.val() );
-
-                               $( this ).data( 'listrotator' ).rotate( 
value.calendarText() );
-                               self._setRawValue( value );
-                               self._updatePreview( value );
-                               self._updateCalendarHint( value );
-                               self._viewNotifier.notify( 'change' );
-                       } )
-                       .on( 'listrotatorselected', function( event ) {
-                               var value = ( self.$precision.data( 
'listrotator' ).value() )
-                                       ? new Time( self.$input.val(), { 
precision: self.$precision.data( 'listrotator' ).value(), calendarname: $( this 
).data( 'listrotator' ).value() } )
-                                       : new Time( self.$input.val(), { 
calendarname: $( this ).data( 'listrotator' ).value() } );
-
-                               $( this ).data( 'listrotator' ).rotate( 
value.calendarText() );
-                               self._setRawValue( value );
-                               self._updatePreview( value );
-                               self._updateCalendarHint( value );
-                               self._viewNotifier.notify( 'change' );
-                       } )
+                       .on(
+                               'listrotatorauto.' + this.uiBaseClass + ' 
listrotatorselected.' + this.uiBaseClass,
+                               function( event ) {
+                                       var value = self._updateValue();
+                                       $( this ).data( 'listrotator' ).rotate( 
value.calendarText() );
+                               }
+                       )
                        .appendTo( this.$calendarContainer );
 
                        var $toggler = $( '<a/>' )
@@ -243,6 +216,35 @@
                },
 
                /**
+                * Builds a time.Time object from the widet's current input and 
advanced adjustments.
+                *
+                * @return {time.Time}
+                */
+               _updateValue: function() {
+                       var options = {},
+                               precision = this.$precision.data( 'listrotator' 
).value(),
+                               calendarname = this.$calendar.data( 
'listrotator' ).value(),
+                               value = null;
+
+                       if( precision !== undefined ) {
+                               options.precision = precision;
+                       }
+
+                       if( calendarname !== undefined ) {
+                               options.calendarname = calendarname;
+                       }
+
+                       value = new Time( this.$input.val(), options );
+
+                       this._setRawValue( value );
+                       this._updatePreview( value );
+                       this._updateCalendarHint( value );
+                       this._viewNotifier.notify( 'change' );
+
+                       return value;
+               },
+
+               /**
                 * Updates the input value's preview.
                 * @since 0.1
                 *
@@ -285,16 +287,8 @@
                                this.$calendarhint.children( '.' + 
this.uiBaseClass + '-calendarhint-switch' )
                                .off( 'click.' + this.uiBaseClass )
                                .on( 'click.' + this.uiBaseClass, function( 
event ) {
+                                       this._updateValue();
                                        self.$calendar.data( 'listrotator' 
).rotate( otherCalendar );
-
-                                       var value = ( self.$precision.data( 
'listrotator' ).value() )
-                                               ? new Time( self.$input.val(), 
{ precision: self.$precision.data( 'listrotator' ).value(), calendarname: 
self.$calendar.data( 'listrotator' ).value() } )
-                                               : new Time( self.$input.val(), 
{ calendarname: self.$calendar.data( 'listrotator' ).value() } );
-
-                                       self._setRawValue( value );
-                                       self._updatePreview( value );
-                                       self._updateCalendarHint( value );
-                                       self._viewNotifier.notify( 'change' );
                                } )
                                .html( mw.msg( 
'valueview-expert-timeinput-calendarhint-switch', otherCalendar ) );
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I68a720cad3d06a69725f81f037594a378381cfcd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/DataValues
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>

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

Reply via email to