Daniel Werner has submitted this change and it was merged.
Change subject: (bug 48145) TimeInput expert: Added listrotator to select
calendar
......................................................................
(bug 48145) TimeInput expert: Added listrotator to select calendar
Change-Id: I69f31e8e3de229a273dd6615abb903336679ded6
---
M ValueView/ValueView.i18n.php
M ValueView/ValueView.resources.php
M ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
3 files changed, 76 insertions(+), 3 deletions(-)
Approvals:
Daniel Werner: Looks good to me, approved
diff --git a/ValueView/ValueView.i18n.php b/ValueView/ValueView.i18n.php
index 71092c1..dceba6f 100644
--- a/ValueView/ValueView.i18n.php
+++ b/ValueView/ValueView.i18n.php
@@ -45,6 +45,7 @@
// TimeInput expert:
'valueview-expert-timeinput-precision' => 'Precision:',
+ 'valueview-expert-timeinput-calendar' => 'Calendar:',
'valueview-preview-label' => 'will be displayed as:',
'valueview-preview-novalue' => 'no valid value recognized',
@@ -64,6 +65,7 @@
'valueview-expert-emptyvalue-empty' => 'Message expressing that there
is currently no value set in a jQuery valueview.
{{Identical|Empty}}',
'valueview-expert-timeinput-precision' => 'Label for the user interface
element used to set a specific precision (e.g. hour, day, month, year) when
entering a time value.',
+ 'valueview-expert-timeinput-calendar' => 'Label for the user interface
element used to select a specific calendar (e.g. Gregorian, Julian) entering a
time value.',
'valueview-preview-label' => 'Label displayed above the preview of a
value that is being entered by the user. The preview is the system\'s
interpretation of the specified value and - since there is no strict definition
for a user how to specify values - visualizes how the value will be displayed
later on after the value has been saved.',
'valueview-preview-novalue' => 'Message displayed instead of an input
value\'s preview when no value is specified yet or when the specified value
could not be interpreted by the system.',
'valueview-listrotator-auto' => 'Label of the link to have the system
automatically select the most appropriate value from a "listrotator" widget.
The "listrotator" basically is a facade for a drop-down select box allowing to
pick a value from a list of values. In addition to the defined values, an
"automatic" option may be selected that makes the system pick the most
appropriate value according to an associated input element.',
diff --git a/ValueView/ValueView.resources.php
b/ValueView/ValueView.resources.php
index 6b385a3..413e1fb 100644
--- a/ValueView/ValueView.resources.php
+++ b/ValueView/ValueView.resources.php
@@ -204,6 +204,7 @@
),
'messages' => array(
'valueview-expert-timeinput-precision',
+ 'valueview-expert-timeinput-calendar',
'valueview-preview-label',
'valueview-preview-novalue',
),
diff --git
a/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
b/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
index 2d9fa59..1784a39 100644
---
a/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
+++
b/ValueView/resources/jquery.valueview/valueview.experts/experts.TimeInput.js
@@ -51,10 +51,28 @@
$previewValue: null,
/**
+ * Container node for precision input and label.
+ * @type {jQuery}
+ */
+ $precisionContainer: null,
+
+ /**
* Node of the widget used to specify the precision.
* @type {jQuery}
*/
$precision: null,
+
+ /**
+ * Container node for calendar input and label.
+ * @type {jQuery}
+ */
+ $calendarContainer: null,
+
+ /**
+ * Node of the widget used to specify the calendar.
+ * @type {jQuery}
+ */
+ $calendar: null,
/**
* @see jQuery.valueview.Expert._init
@@ -76,26 +94,68 @@
.text( mw.msg( 'valueview-preview-novalue' ) )
.appendTo( this.$preview );
+ this.$precisionContainer = $( '<div/>' )
+ .addClass( this.uiBaseClass + '-precisioncontainer' )
+ .append( $( '<div/>' ).text( mw.msg(
'valueview-expert-timeinput-precision' ) ) );
+
var precisionValues = [];
$.each( timeSettings.precisiontexts, function( i, text
) {
precisionValues.push( { value: i, label: text }
);
} );
this.$precision = $( '<div/>' )
+ .addClass( this.uiBaseClass + '-precision' )
.listrotator( { values: precisionValues.reverse(),
deferInit: true } )
.on( 'listrotatorauto.' + this.uiBaseClass, function(
event ) {
- var value = new Time( self.$input.val() );
+ 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._viewNotifier.notify( 'change' );
} )
.on( 'listrotatorselected.' + this.uiBaseClass,
function( event, precision ) {
- var value = new Time( self.$input.val(),
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._viewNotifier.notify( 'change' );
+ } )
+ .appendTo( this.$precisionContainer );
+
+ this.$calendarContainer = $( '<div/>' )
+ .addClass( this.uiBaseClass + '-calendarcontainer' )
+ .append( $( '<div/>' ).text( mw.msg(
'valueview-expert-timeinput-calendar' ) ) );
+
+ var calendarValues = [];
+ $.each( timeSettings.calendarnames, function( i,
calendarTerms ) {
+ calendarValues.push( { value: calendarTerms[0],
label: calendarTerms[0] } );
} );
+ 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._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._viewNotifier.notify( 'change' );
+ } )
+ .appendTo( this.$calendarContainer );
this.$input = $( '<input/>', {
type: 'text',
@@ -112,15 +172,17 @@
// TODO: Move input extender out of here to a more
generic place since it is not
// TimeInput specific.
.inputextender( {
- content: [ this.$preview, this.$precision ],
+ content: [ this.$preview,
this.$precisionContainer, this.$calendarContainer ],
initCallback: function() {
self.$precision.data( 'listrotator'
).initWidths();
+ self.$calendar.data( 'listrotator'
).initWidths();
}
} )
.on( 'timeinputupdate.' + this.uiBasClass, function(
event, value ) {
self._updatePreview( value );
if( value && value.isValid() ) {
self.$precision.data( 'listrotator'
).rotate( value.precision() );
+ self.$calendar.data( 'listrotator'
).rotate( value.calendarText() );
}
self._viewNotifier.notify( 'change' );
} );
@@ -133,8 +195,15 @@
destroy: function() {
this.$precision.data( 'listrotator' ).destroy();
this.$precision.remove();
+ this.$precisionContainer.remove();
+
+ this.$calendar.data( 'listrotator' ).destroy();
+ this.$calendar.remove();
+ this.$calendarContainer.remove();
+
this.$previewValue.remove();
this.$preview.remove();
+
this.$input.data( 'inputextender' ).destroy();
this.$input.data( 'timeinput' ).destroy();
this.$input.remove();
@@ -232,6 +301,7 @@
this._updatePreview( this._newValue );
if( this._newValue !== null ) {
this.$precision.data( 'listrotator'
).value( this._newValue.precision() );
+ this.$calendar.data( 'listrotator'
).value( this._newValue.calendarText() );
}
this._newValue = false;
}
--
To view, visit https://gerrit.wikimedia.org/r/63640
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I69f31e8e3de229a273dd6615abb903336679ded6
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/DataValues
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>
Gerrit-Reviewer: Daniel Werner <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits