Eranroz has uploaded a new change for review.

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

Change subject: Introducing template format
......................................................................

Introducing template format

Adding format for template data, which defines the preffered format for 
template.

Possible formats:
* Inline - all parameters in single line
* Block - Each paramter is in its own line

Bug: T64217
Change-Id: Id856c4a38890526060d0619432f06174d66f7792
---
M Specification.md
M TemplateDataBlob.php
M extension.json
M i18n/en.json
M i18n/qqq.json
M modules/ext.templateDataGenerator.data.js
M modules/ext.templateDataGenerator.ui.js
M modules/ext.templateDataGenerator.ui.tdDialog.js
8 files changed, 113 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TemplateData 
refs/changes/38/243138/1

diff --git a/Specification.md b/Specification.md
index 6a361a3..107551e 100644
--- a/Specification.md
+++ b/Specification.md
@@ -97,6 +97,9 @@
 
 Authors MUST ensure that the `maps` object contains only `Map` objects. 
Authors MAY include a parameter in multiple `Map` objects. Authors are NOT 
REQUIRED to reference each parameter in at least one `Map` object.
 
+#### 3.1.6 `format`
+* Value: `inline` or `block`
+
 ### 3.2 Param
 * Value: `Object`
 
diff --git a/TemplateDataBlob.php b/TemplateDataBlob.php
index f05aa16..db75ab1 100644
--- a/TemplateDataBlob.php
+++ b/TemplateDataBlob.php
@@ -47,6 +47,7 @@
                        $tdb->data->description = null;
                        $tdb->data->params = new stdClass();
                        $tdb->data->paramOrder = array();
+                       $tdb->data->format = 'inline';
                        $tdb->data->sets = array();
                        $tdb->data->maps = new stdClass();
                }
@@ -83,6 +84,7 @@
                        'paramOrder',
                        'sets',
                        'maps',
+                       'format',
                );
 
                static $paramKeys = array(
@@ -115,6 +117,11 @@
                        'wiki-template-name',
                );
 
+               static $formats = array(
+                       'block',
+                       'inline'
+               );
+
                static $typeCompatMap = array(
                        'string/line' => 'line',
                        'string/wiki-page-name' => 'wiki-page-name',
@@ -144,6 +151,19 @@
                        $data->description = self::normaliseInterfaceText( 
$data->description );
                } else {
                        $data->description = null;
+               }
+
+               // Root.format
+               if ( isset( $data->format ) ) {
+                       if ( !in_array( $data->format, $formats ) ) {
+                               return Status::newFatal(
+                                       'templatedata-invalid-value',
+                                       'format'
+                               );
+                       $data->format = self::normaliseInterfaceText( 
$data->format );
+                       }
+               } else {
+                       $data->format = 'inline';
                }
 
                // Root.params
@@ -674,6 +694,16 @@
                                        $data->description :
                                        wfMessage( 
'templatedata-doc-desc-empty' )->inLanguage( $lang )->text()
                        )
+                       . Html::element(
+                               'p',
+                               array(
+                                       'class' => array(
+                                               'mw-templatedata-doc-format',
+                                               'mw-templatedata-doc-muted' => 
$data->format === null,
+                                       )
+                               ),
+                               wfMessage( 'templatedata-doc-format-' . 
$data->format )->inLanguage( $lang )->text()
+                       )
                        . '<table class="wikitable mw-templatedata-doc-params 
sortable">'
                        . Html::element(
                                'caption',
diff --git a/extension.json b/extension.json
index 48d1d01..c782b67 100644
--- a/extension.json
+++ b/extension.json
@@ -111,6 +111,8 @@
                                "templatedata-modal-errormsg",
                                "templatedata-modal-errormsg-import-noparams",
                                
"templatedata-modal-errormsg-import-paramsalreadyexist",
+                               "templatedata-modal-format-inline",
+                               "templatedata-modal-format-block",
                                "templatedata-modal-json-error-replace",
                                "templatedata-modal-notice-import-numparams",
                                "templatedata-modal-placeholder-paramkey",
@@ -151,6 +153,7 @@
                                "templatedata-modal-title-language",
                                "templatedata-modal-title-paramorder",
                                "templatedata-modal-title-templatedesc",
+                               "templatedata-modal-title-templateformat",
                                
"templatedata-modal-title-templateparam-details",
                                "templatedata-modal-title-templateparams",
                                "templatedata-helplink",
diff --git a/i18n/en.json b/i18n/en.json
index 816141a..44539fe 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -13,6 +13,8 @@
        "apihelp-templatedata-param-lang": "Return localized values in this 
language. By default all available translations are returned.",
        "templatedata-desc": "Implement data storage for template parameters 
(using JSON)",
        "templatedata-doc-desc-empty": "No description.",
+       "templatedata-doc-format-inline": "Inline format template",
+       "templatedata-doc-format-block": "Block format template",
        "templatedata-doc-no-params-set": "No parameters specified",
        "templatedata-doc-param-autovalue": "Auto value",
        "templatedata-doc-param-autovalue-empty": "empty",
@@ -59,6 +61,8 @@
        "templatedata-modal-errormsg": "Errors found. Please make sure there 
are no empty or duplicate parameter names, and that the parameter name does not 
include \"$1\", \"$2\" or \"$3\".",
        "templatedata-modal-errormsg-import-noparams": "No new parameters found 
during import.",
        "templatedata-modal-errormsg-import-paramsalreadyexist": 
"{{PLURAL:$1|One parameter was not imported, because it already exists|Some 
parameters were not imported, because they already exist}} in the editor: $1",
+       "templatedata-modal-format-inline": "Inline",
+       "templatedata-modal-format-block": "Block",
        "templatedata-modal-json-error-replace": "Replace",
        "templatedata-modal-notice-import-numparams": "$1 new 
{{PLURAL:$1|parameter was|parameters were}} imported: $2",
        "templatedata-modal-placeholder-paramkey": "Parameter name",
@@ -98,6 +102,7 @@
        "templatedata-modal-title-language": "Language",
        "templatedata-modal-title-paramorder": "Parameter order",
        "templatedata-modal-title-templatedesc": "Template description ($1)",
+       "templatedata-modal-title-templateformat": "Template preferred format",
        "templatedata-modal-title-templateparam-details": "Parameter details: 
$1",
        "templatedata-modal-title-templateparams": "Template parameters"
 }
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 67c8a3d..50fb64c 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -22,6 +22,8 @@
        "apihelp-templatedata-param-lang": 
"{{doc-apihelp-param|templatedata|lang}}",
        "templatedata-desc": "{{desc|name=Template 
Data|url=https://www.mediawiki.org/wiki/Extension:TemplateData}}";,
        "templatedata-doc-desc-empty": "Displayed when a template has no 
description (should be a valid sentence).\n{{Identical|No description}}",
+       "templatedata-doc-format-inline": "Display the preffered format for a 
template as inline",
+       "templatedata-doc-format-block": "Display the preffered format for a 
template as block",
        "templatedata-doc-no-params-set": "A message shown when there are no 
parameters set in the TemplateData string.",
        "templatedata-doc-param-autovalue": "Used as column heading in the 
table for auto fill value.\n{{Related|Templatedata-doc-param}}",
        "templatedata-doc-param-autovalue-empty": "Displayed when a template 
parameter has no auto filled value (should not be a full sentence, used in a 
table).\n{{Identical|Empty}}",
@@ -68,6 +70,8 @@
        "templatedata-modal-errormsg": "Error message that appears in the 
TemplateData generator GUI in case there are empty, duplicate or invalid 
parameter names.\n\nInvalid characters are supplied as parameters to avoid 
parsing errors in translation strings.\n\nParameters:\n* $1 - pipe 
(<code>|</code>)\n* $2 - equal sign (<code>=</code>)\n* $3 - double curly 
brackets (<code><nowiki>}}</nowiki></code>)",
        "templatedata-modal-errormsg-import-noparams": "Error message that 
appears in the TemplateData generator GUI in case no template parameters were 
found during the import attempt.",
        "templatedata-modal-errormsg-import-paramsalreadyexist": "Error message 
that appears when some parameters were not imported from the template code 
because they already exist in the editor.\n\nParameters:\n* $1 - list of 
parameters that were not imported",
+       "templatedata-modal-format-inline": "Label for inline format",
+       "templatedata-modal-format-block": "Label for block format",
        "templatedata-modal-json-error-replace": "Label for the button in the 
error message, agreeing to replace the existing faulty TemplateData string with 
a new one.\n{{Identical|Replace}}",
        "templatedata-modal-notice-import-numparams": "Message that appears in 
the TemplateData generator GUI showing how many new parameters were imported 
into the GUI from an existing template.\n\nParameters:\n* $1 - number of 
parameters\n* $2 - list of parameters that were imported",
        "templatedata-modal-placeholder-paramkey": "Placeholder for the input 
that contains new parameter name in the add parameter panel in the edit 
dialog.",
@@ -107,6 +111,7 @@
        "templatedata-modal-title-language": "Label for the language dropdown 
in the edit menu.\n{{Identical|Language}}",
        "templatedata-modal-title-paramorder": "The title for the parameter 
order drag/drop widget in the edit dialog.",
        "templatedata-modal-title-templatedesc": "The title for the template 
description textbox. Parameters:\n* $1 - currently used language",
+       "templatedata-modal-title-templateformat": "The title for the template 
preferred format",
        "templatedata-modal-title-templateparam-details": "The title for the 
parameter information section. Parameters:\n* $1 - The parameter name",
        "templatedata-modal-title-templateparams": "The title for the template 
parameters table\nof a single template."
 }
diff --git a/modules/ext.templateDataGenerator.data.js 
b/modules/ext.templateDataGenerator.data.js
index f9bc25b..6513d70 100644
--- a/modules/ext.templateDataGenerator.data.js
+++ b/modules/ext.templateDataGenerator.data.js
@@ -16,9 +16,9 @@
        this.params = {};
        this.description = {};
        this.paramOrder = [];
+       this.format = 'inline';
        this.paramOrderChanged = false;
        this.paramIdentifierCounter = 0;
-
        this.originalTemplateDataObject = null;
        this.sourceCodeParameters = [];
 };
@@ -265,6 +265,10 @@
        // Override the param order if it exists in the templatedata string
        if ( tdObject.paramOrder && tdObject.paramOrder.length > 0 ) {
                model.setTemplateParamOrder( tdObject.paramOrder );
+       }
+
+       if ( tdObject.format ) {
+               model.setTemplateFormat( tdObject.format );
        }
 
        return model;
@@ -538,6 +542,17 @@
 };
 
 /**
+ * Set template format.
+ * @param {string} preferred format. Defaults on 'inline'.
+ * @fires change-format
+ */
+mw.TemplateData.Model.prototype.setTemplateFormat = function ( format ) {
+       format = format || 'inline';
+       this.format = format;
+       this.emit( 'change-format', format );
+};
+
+/**
  * Add a key to the end of the paramOrder
  * @param {string} key New key the add into the paramOrder
  * @fires add-paramOrder
@@ -582,6 +597,14 @@
  */
 mw.TemplateData.Model.prototype.getTemplateParamOrder = function () {
        return this.paramOrder;
+};
+
+/**
+ * Retrieve the template preffered format
+ * @return {string} preferred format
+ */
+mw.TemplateData.Model.prototype.getTemplateFormat = function () {
+       return this.format;
 };
 
 /**
@@ -800,6 +823,13 @@
                delete result.paramOrder;
        }
 
+       // Format
+       if ( original.format || this.format ) {
+               result.format = this.format;
+       } else {
+               delete result.format;
+       }
+
        // Attach sets as-is for now
        // TODO: Work properly with sets
        if ( original.sets ) {
diff --git a/modules/ext.templateDataGenerator.ui.js 
b/modules/ext.templateDataGenerator.ui.js
index d0cc9a8..03b557f 100644
--- a/modules/ext.templateDataGenerator.ui.js
+++ b/modules/ext.templateDataGenerator.ui.js
@@ -101,7 +101,7 @@
                                                                if ( data && 
data.action === 'accept' ) {
                                                                        // Open 
the dialog with an empty model
                                                                        model = 
new mw.TemplateData.Model.static.newFromObject(
-                                                                               
{ params: {} },
+                                                                               
{ params: {}, format: 'inline' },
                                                                                
sourceHandler.getTemplateSourceCodeParams()
                                                                        );
                                                                        
openEditDialog( model );
diff --git a/modules/ext.templateDataGenerator.ui.tdDialog.js 
b/modules/ext.templateDataGenerator.ui.tdDialog.js
index d751cb7..43877c2 100644
--- a/modules/ext.templateDataGenerator.ui.tdDialog.js
+++ b/modules/ext.templateDataGenerator.ui.tdDialog.js
@@ -78,7 +78,7 @@
  */
 mw.TemplateData.Dialog.prototype.initialize = function () {
        var templateParamsFieldset, addParamFieldlayout, 
languageActionFieldLayout,
-               paramOrderFieldset;
+               paramOrderFieldset, templateFormatFieldSet;
 
        // Parent method
        mw.TemplateData.Dialog.super.prototype.initialize.call( this );
@@ -120,6 +120,7 @@
        this.languagePanelButton = new OO.ui.ButtonWidget( {
                label: mw.msg( 'templatedata-modal-button-add-language' )
        } );
+
        languageActionFieldLayout = new OO.ui.ActionFieldLayout(
                this.languageDropdownWidget,
                this.languagePanelButton,
@@ -154,6 +155,24 @@
        } );
        templateParamsFieldset.$element.append( this.paramSelectWidget.$element 
);
 
+       this.templateFormatSelectWidget = new OO.ui.ButtonSelectWidget();
+       this.templateFormatSelectWidget.addItems( [
+               // TODO: add nice icons?
+               new OO.ui.ButtonOptionWidget( {
+                       data: 'inline',
+                       label: mw.msg( 'templatedata-modal-format-inline' )
+               } ),
+               new OO.ui.ButtonOptionWidget( {
+                       data: 'block',
+                       label: mw.msg( 'templatedata-modal-format-block' )
+               } ),
+       ] );
+
+       templateFormatFieldSet = new OO.ui.FieldsetLayout( {
+               label: mw.msg( 'templatedata-modal-title-templateformat' )
+       } );
+       templateFormatFieldSet.$element.append( 
this.templateFormatSelectWidget.$element );
+
        // Param details panel
        this.$paramDetailsContainer = $( '<div>' )
                .addClass( 'tdg-TemplateDataDialog-paramDetails' );
@@ -165,7 +184,8 @@
                        languageActionFieldLayout.$element,
                        this.templateDescriptionFieldset.$element,
                        paramOrderFieldset.$element,
-                       templateParamsFieldset.$element
+                       templateParamsFieldset.$element,
+                       templateFormatFieldSet.$element
                );
        this.paramEditNoticeLabel = new OO.ui.LabelWidget();
        this.paramEditNoticeLabel.$element.hide();
@@ -213,6 +233,8 @@
        this.languagePanelButton.connect( this, { click: 
'onLanguagePanelButton' } );
        this.languageDropdownWidget.getMenu().connect( this, { select: 
'onLanguageDropdownWidgetSelect' } );
        this.paramSelectWidget.connect( this, { choose: 
'onParamSelectWidgetChoose' } );
+       this.templateFormatSelectWidget.connect( this, { choose: 
'onTemplateFormatSelectWidgetChoose' } );
+
 };
 
 /**
@@ -407,6 +429,13 @@
                this.getParameterDetails( paramKey );
                this.switchPanels( 'editParam' );
        }
+};
+/**
+ * Respond to choose event from the template format select widget
+ * @param {OO.ui.OptionWidget} item Format item
+ */
+mw.TemplateData.Dialog.prototype.onTemplateFormatSelectWidgetChoose = function 
( item ) {
+       this.model.setTemplateFormat( item.getData() );
 };
 
 mw.TemplateData.Dialog.prototype.onParamPropertyInputChange = function ( 
property, value ) {
@@ -843,6 +872,10 @@
 mw.TemplateData.Dialog.prototype.setupDetailsFromModel = function () {
        // Set up description
        this.descriptionInput.setValue( this.model.getTemplateDescription( 
this.language ) );
+
+       // Set up format
+       this.templateFormatSelectWidget.selectItemByData( 
this.model.getTemplateFormat() );
+
        // Repopulate the parameter list
        this.repopulateParamSelectWidget();
 };

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id856c4a38890526060d0619432f06174d66f7792
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TemplateData
Gerrit-Branch: master
Gerrit-Owner: Eranroz <eranro...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to