Trevor Parscal has uploaded a new change for review.

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


Change subject: FieldLayout support
......................................................................

FieldLayout support

- Switch to using FieldLayout for laying out forms
- Update OOUI

Change-Id: I757aecf3485673f54aa9e7f38e88c079dda4451d
---
M lib/ve
M modules/ve-mw/i18n/en.json
M modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
M modules/ve-mw/ui/pages/ve.ui.MWCategoriesPage.js
M modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
M modules/ve-mw/ui/pages/ve.ui.MWTemplateParameterPage.js
M modules/ve-mw/ui/styles/ve.ui.MWWidget.css
M modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
M modules/ve-mw/ui/widgets/ve.ui.MWCategoryPopupWidget.js
11 files changed, 88 insertions(+), 78 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/58/108958/1

diff --git a/lib/ve b/lib/ve
index e7e2833..577fad4 160000
--- a/lib/ve
+++ b/lib/ve
-Subproject commit e7e283316e1b3e98706fb9051db7964321e6d300
+Subproject commit 577fad4fdce3dfe3ddae9e3c9fa69cba9fb08917
diff --git a/modules/ve-mw/i18n/en.json b/modules/ve-mw/i18n/en.json
index 206d719..ec996d3 100644
--- a/modules/ve-mw/i18n/en.json
+++ b/modules/ve-mw/i18n/en.json
@@ -60,9 +60,9 @@
     "visualeditor-dialog-meta-settings-label": "Page settings",
     "visualeditor-dialog-meta-settings-noeditsection-label": "Disable the edit 
links next to each heading on this page.",
     "visualeditor-dialog-meta-settings-section": "Page settings",
-    "visualeditor-dialog-meta-settings-toc-default": "Show if needed",
-    "visualeditor-dialog-meta-settings-toc-disable": "Never show",
-    "visualeditor-dialog-meta-settings-toc-force": "Always show",
+    "visualeditor-dialog-meta-settings-toc-default": "If needed",
+    "visualeditor-dialog-meta-settings-toc-disable": "Never",
+    "visualeditor-dialog-meta-settings-toc-force": "Always",
     "visualeditor-dialog-meta-settings-toc-label": "Show the Table of 
Contents",
     "visualeditor-dialog-meta-title": "Options",
     "visualeditor-dialog-reference-insert-button": "Insert reference",
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
index ff5814c..7497af6 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
@@ -211,9 +211,9 @@
        } );
        // TODO: Use a drop-down or something, and populate with existing 
groups instead of free-text
        this.referenceGroupInput = new OO.ui.TextInputWidget( { '$': this.$ } );
-       this.referenceGroupLabel = new OO.ui.InputLabelWidget( {
+       this.referenceGroupField = new OO.ui.FieldLayout( 
this.referenceGroupInput, {
                '$': this.$,
-               'input': this.referenceGroupInput,
+               'align': 'top',
                'label': ve.msg( 
'visualeditor-dialog-reference-options-group-label' )
        } );
        this.search = new ve.ui.MWReferenceSearchWidget(
@@ -242,7 +242,7 @@
        // Initialization
        this.panels.addItems( [ this.editPanel, this.searchPanel ] );
        this.editPanel.$element.append( this.contentFieldset.$element, 
this.optionsFieldset.$element );
-       this.optionsFieldset.$element.append( 
this.referenceGroupLabel.$element, this.referenceGroupInput.$element );
+       this.optionsFieldset.addItems( [ this.referenceGroupField ] );
        this.searchPanel.$element.append( this.search.$element );
        this.$body.append( this.panels.$element );
        this.$foot.append(
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
index 412d52d..6391001 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
@@ -52,9 +52,9 @@
        } );
 
        this.groupInput = new OO.ui.TextInputWidget( { '$': this.$ } );
-       this.groupLabel = new OO.ui.InputLabelWidget( {
+       this.groupField = new OO.ui.FieldLayout( this.groupInput, {
                '$': this.$,
-               'input': this.groupInput,
+               'align': 'top',
                'label': ve.msg( 
'visualeditor-dialog-reference-options-group-label' )
        } );
 
@@ -68,7 +68,7 @@
        this.applyButton.connect( this, { 'click': [ 'close', { 'action': 
'apply' } ] } );
 
        // Initialization
-       this.optionsFieldset.$element.append( this.groupLabel.$element, 
this.groupInput.$element );
+       this.optionsFieldset.addItems( [ this.groupField ] );
        this.editPanel.$element.append( this.optionsFieldset.$element );
        this.$body.append( this.editPanel.$element );
        this.$foot.append( this.applyButton.$element );
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
index d99c188..698fc52 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js
@@ -302,7 +302,7 @@
 
        this.$saveOptions = this.$( '<div>' ).addClass( 
've-ui-mwSaveDialog-options' ).append(
                this.$( '<div>' ).addClass( 've-ui-mwSaveDialog-checkboxes' ),
-               new OO.ui.InputLabelWidget( { '$': this.$, 'label': 'text' } 
).$element
+               new OO.ui.LabelWidget( { '$': this.$, 'label': 'text' } 
).$element
                        .addClass( 've-ui-mwSaveDialog-editSummary-count' 
).text( this.editSummaryByteLimit )
        );
        this.$saveMessages = this.$( '<div>' );
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWCategoriesPage.js 
b/modules/ve-mw/ui/pages/ve.ui.MWCategoriesPage.js
index 86b9eb8..19bafce 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWCategoriesPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWCategoriesPage.js
@@ -47,11 +47,14 @@
        this.defaultSortInput = new OO.ui.TextInputWidget( {
                '$': this.$, 'placeholder': this.fallbackDefaultSortKey
        } );
-       this.defaultSortLabel = new OO.ui.InputLabelWidget( {
-               '$': this.$,
-               'input': this.defaultSortInput,
-               'label': ve.msg( 
'visualeditor-dialog-meta-categories-defaultsort-label' )
-       } );
+       this.defaultSort = new OO.ui.FieldLayout(
+               this.defaultSortInput,
+               {
+                       '$': this.$,
+                       'align': 'top',
+                       'label': ve.msg( 
'visualeditor-dialog-meta-categories-defaultsort-label' )
+               }
+       );
 
        // Events
        this.metaList.connect( this, {
@@ -69,10 +72,7 @@
        // Initialization
        this.categoryWidget.addItems( this.getCategoryItems() );
        this.categoriesFieldset.$element.append( this.categoryWidget.$element );
-       this.categoryOptionsFieldset.$element.append(
-               this.defaultSortLabel.$element,
-               this.defaultSortInput.$element
-       );
+       this.categoryOptionsFieldset.addItems( [ this.defaultSort ] );
        this.$element.append( this.categoriesFieldset.$element, 
this.categoryOptionsFieldset.$element );
 };
 
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js 
b/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
index cee8161..c873510 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWSettingsPage.js
@@ -25,7 +25,7 @@
 
        // Properties
        this.metaList = surface.getModel().metaList;
-       this.tocOptionTouched = false;
+       this.tableOfContentsTouched = false;
        this.label = ve.msg( 'visualeditor-dialog-meta-settings-section' );
 
        this.settingsFieldset = new OO.ui.FieldsetLayout( {
@@ -37,36 +37,41 @@
        // Initialization
 
        // Table of Contents items
-       this.tocOptionSelector = new OO.ui.SelectWidget( { '$': this.$ } );
-       this.tocOptionWidgets = {
-               'default': new OO.ui.OptionWidget(
-                       'default',
-                       { 'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-default' ) }
-               ),
-               'mwTOCForce': new OO.ui.OptionWidget(
-                       'mwTOCForce',
-                       { 'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-force' ) }
-               ),
-               'mwTOCDisable': new OO.ui.OptionWidget(
-                       'mwTOCDisable',
-                       { 'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-disable' ) }
-               )
-       };
-       this.tocOptionSelector.addItems( ve.getObjectValues( 
this.tocOptionWidgets ) );
-       this.settingsFieldset.$element.append(
-               this.$( '<span>' )
-                       .text( ve.msg( 
'visualeditor-dialog-meta-settings-toc-label' ) ),
-               this.tocOptionSelector.$element
+       this.tableOfContents = new OO.ui.FieldLayout(
+               new OO.ui.ButtonSelectWidget( { '$': this.$ } )
+                       .addItems( [
+                               new OO.ui.ButtonOptionWidget(
+                                       'mwTOCForce',
+                                       { 'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-force' ) }
+                               ),
+                               new OO.ui.ButtonOptionWidget(
+                                       'default',
+                                       { 'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-default' ) }
+                               ),
+                               new OO.ui.ButtonOptionWidget(
+                                       'mwTOCDisable',
+                                       { 'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-disable' ) }
+                               )
+                       ] )
+                       .connect( this, { 'select': 
'onTableOfContentsFieldChange' } ),
+               {
+                       '$': this.$,
+                       'align': 'top',
+                       'label': ve.msg( 
'visualeditor-dialog-meta-settings-toc-label' )
+               }
        );
-       this.tocOptionSelector.connect( this, { 'select': 'onTOCOptionChange' } 
);
 
        // Disable section edit links items
-       this.disableSectionEditLinksInput = new OO.ui.CheckboxWidget( {
-               '$': this.$,
-               'label': ve.msg( 
'visualeditor-dialog-meta-settings-noeditsection-label' )
-       } );
-       this.settingsFieldset.$element.append( 
this.disableSectionEditLinksInput.$element );
+       this.disabledSectionEditLinks = new OO.ui.FieldLayout(
+               new OO.ui.CheckboxInputWidget( { '$': this.$ } ),
+               {
+                       '$': this.$,
+                       'align': 'inline',
+                       'label': ve.msg( 
'visualeditor-dialog-meta-settings-noeditsection-label' ),
+               }
+       );
 
+       this.settingsFieldset.addItems( [ this.tableOfContents, 
this.disabledSectionEditLinks ] );
        this.$element.append( this.settingsFieldset.$element );
 };
 
@@ -81,8 +86,8 @@
  *
  * @method
  */
-ve.ui.MWSettingsPage.prototype.onTOCOptionChange = function () {
-       this.tocOptionTouched = true;
+ve.ui.MWSettingsPage.prototype.onTableOfContentsFieldChange = function () {
+       this.tableOfContentsTouched = true;
 };
 
 /**
@@ -90,7 +95,7 @@
  *
  * @returns {ve.dm.MetaItem|null} TOC option, if any
  */
-ve.ui.MWSettingsPage.prototype.getTOCOptionItem = function () {
+ve.ui.MWSettingsPage.prototype.getTableOfContentsMetaItem = function () {
        return this.metaList.getItemsInGroup( 'mwTOC' )[0] || null;
 };
 
@@ -109,15 +114,17 @@
  * @param {Object} [data] Dialog setup data
  */
 ve.ui.MWSettingsPage.prototype.setup = function () {
-       var tocOption = this.getTOCOptionItem(),
-               tocType = tocOption && tocOption.element.type || 'default';
+       var tableOfContentsMetaItem = this.getTableOfContentsMetaItem(),
+               tableOfContentsField = this.tableOfContents.getField(),
+               tableOfContentsMode = tableOfContentsMetaItem &&
+                       tableOfContentsMetaItem.getType() || 'default';
 
        // Table of Contents items
-       this.tocOptionSelector.selectItem( this.tocOptionWidgets[tocType] );
-       this.tocOptionTouched = false;
+       tableOfContentsField.selectItem( tableOfContentsField.getItemFromData( 
tableOfContentsMode ) );
+       this.tableOfContentsTouched = false;
 
        // Disable section edit links items
-       this.disableSectionEditLinksInput.setValue( 
!!this.getDisableSectionEditLinksItem() );
+       this.disabledSectionEditLinks.getField().setValue( 
!!this.getDisableSectionEditLinksItem() );
 };
 
 /**
@@ -130,27 +137,28 @@
        data = data || {};
 
        var // Table of Contents items
-               currentTOCItem = this.getTOCOptionItem(),
-               newTOCData = this.tocOptionSelector.getSelectedItem(),
+               tableOfContentsMetaItem = this.getTableOfContentsMetaItem(),
+               tableOfContentsSelectedItem = 
this.tableOfContents.getField().getSelectedItem(),
+               tableOfContentsValue = tableOfContentsSelectedItem && 
tableOfContentsSelectedItem.getData(),
 
                // Disable section edit links items
                currentDisableSectionEditLinksItem = 
this.getDisableSectionEditLinksItem(),
-               newDisableSectionEditState = 
this.disableSectionEditLinksInput.getValue();
+               newDisableSectionEditState = 
this.disabledSectionEditLinks.getField().getValue();
 
        // Alter the TOC option flag iff it's been touched & is actually 
different
-       if ( this.tocOptionTouched ) {
-               if ( newTOCData.data === 'default' ) {
-                       if ( currentTOCItem ) {
-                               currentTOCItem.remove();
+       if ( this.tableOfContentsTouched ) {
+               if ( tableOfContentsValue === 'default' ) {
+                       if ( tableOfContentsMetaItem ) {
+                               tableOfContentsMetaItem.remove();
                        }
                } else {
-                       if ( !currentTOCItem ) {
-                               this.metaList.insertMeta( { 'type': 
newTOCData.data } );
-                       } else if ( currentTOCItem.getType() !== 
newTOCData.data ) {
-                               currentTOCItem.replaceWith(
+                       if ( !tableOfContentsMetaItem ) {
+                               this.metaList.insertMeta( { 'type': 
tableOfContentsValue } );
+                       } else if ( tableOfContentsMetaItem.getType() !== 
tableOfContentsValue ) {
+                               tableOfContentsMetaItem.replaceWith(
                                        ve.extendObject( true, {},
-                                               currentTOCItem.getElement(),
-                                               { 'type': newTOCData.data }
+                                               
tableOfContentsMetaItem.getElement(),
+                                               { 'type': tableOfContentsValue }
                                        )
                                );
                        }
diff --git a/modules/ve-mw/ui/pages/ve.ui.MWTemplateParameterPage.js 
b/modules/ve-mw/ui/pages/ve.ui.MWTemplateParameterPage.js
index b23c9b8..d3bc62b 100644
--- a/modules/ve-mw/ui/pages/ve.ui.MWTemplateParameterPage.js
+++ b/modules/ve-mw/ui/pages/ve.ui.MWTemplateParameterPage.js
@@ -34,16 +34,16 @@
        this.parameter = parameter;
        this.spec = parameter.getTemplate().getSpec();
        this.label = this.spec.getParameterLabel( this.parameter.getName() );
-       this.textInput = new OO.ui.TextInputWidget( {
+       this.valueInput = new OO.ui.TextInputWidget( {
                        '$': this.$,
                        'multiline': true,
                        'classes': [ 've-ui-mwTransclusionDialog-input' ]
                } )
                .setValue( this.parameter.getValue() )
                .connect( this, { 'change': 'onTextInputChange' } );
-       this.inputLabel = new OO.ui.InputLabelWidget( {
+       this.valueField = new OO.ui.FieldLayout( this.valueInput, {
                '$': this.$,
-               'input': this.textInput,
+               'align': 'top',
                'label': this.spec.getParameterDescription( 
this.parameter.getName() ) || ''
        } );
        this.removeButton = new OO.ui.ButtonWidget( {
@@ -59,7 +59,7 @@
                '$': this.$,
                'label': this.spec.getParameterLabel( this.parameter.getName() 
),
                'icon': 'parameter',
-               '$content': this.inputLabel.$element.add( 
this.textInput.$element )
+               'items': [ this.valueInput ]
        } );
 
        // TODO: Use spec.required
@@ -78,7 +78,7 @@
 /* Methods */
 
 ve.ui.MWTemplateParameterPage.prototype.onTextInputChange = function () {
-       this.parameter.setValue( this.textInput.getValue() );
+       this.parameter.setValue( this.valueInput.getValue() );
 };
 
 ve.ui.MWTemplateParameterPage.prototype.onRemoveButtonClick = function () {
diff --git a/modules/ve-mw/ui/styles/ve.ui.MWWidget.css 
b/modules/ve-mw/ui/styles/ve.ui.MWWidget.css
index 3e361f9..53e4224 100644
--- a/modules/ve-mw/ui/styles/ve.ui.MWWidget.css
+++ b/modules/ve-mw/ui/styles/ve.ui.MWWidget.css
@@ -179,7 +179,7 @@
        display: block;
 }
 
-.ve-ui-mwCategoryPopupWidget-sortKeyForm .oo-ui-inputLabelWidget {
+.ve-ui-mwCategoryPopupWidget-sortKeyForm .oo-ui-labelWidget {
        padding: 0 0.125em 0.5em 0.125em;
 }
 
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
index a1ffb6a..3521014 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
@@ -41,7 +41,7 @@
 
        // Initialization
        this.$label.text( this.value );
-       this.$arrow.addClass( 've-ui-mwCategoryItemControl oo-ui-icon-down' );
+       this.$arrow.addClass( 've-ui-mwCategoryItemControl 
oo-ui-indicator-down' );
        this.$categoryItem
                .addClass( 've-ui-mwCategoryItemButton' )
                .append( this.$label, this.$arrow, this.$( '<div>' ).css( 
'clear', 'both' ) );
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryPopupWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryPopupWidget.js
index 2a92ed7..7b6255f 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryPopupWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryPopupWidget.js
@@ -34,11 +34,13 @@
                'title': ve.msg( 'visualeditor-inspector-remove-tooltip' )
        } );
        this.sortKeyInput = new OO.ui.TextInputWidget( { '$': this.$ } );
-       this.sortKeyLabel = new OO.ui.InputLabelWidget(
-               { '$': this.$, '$input': this.sortKeyInput, 'label': ve.msg ( 
'visualeditor-dialog-meta-categories-sortkey-label' ) }
-       );
+       this.sortKeyField = new OO.ui.FieldLayout( this.sortKeyInput, {
+               '$': this.$,
+               'align': 'top',
+               'label': ve.msg ( 
'visualeditor-dialog-meta-categories-sortkey-label' )
+       } );
        this.$sortKeyForm = this.$( '<form>' ).addClass( 
've-ui-mwCategoryPopupWidget-sortKeyForm' )
-               .append( this.sortKeyLabel.$element, this.sortKeyInput.$element 
);
+               .append( this.sortKeyField.$element );
 
        // Events
        this.connect( this, { 'hide': 'onHide' } );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I757aecf3485673f54aa9e7f38e88c079dda4451d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>

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

Reply via email to