Cscott has uploaded a new change for review.

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

Change subject: Add new 'ownLine' property to control newlines around templates
......................................................................

Add new 'ownLine' property to control newlines around templates

Bug: T135667
Change-Id: I7e364be295140fbc982e44903e03c7f151ddb5f1
---
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.tdDialog.js
M resources/ext.templateData.css
8 files changed, 128 insertions(+), 2 deletions(-)


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

diff --git a/Specification.md b/Specification.md
index c525778..6acddf0 100644
--- a/Specification.md
+++ b/Specification.md
@@ -111,6 +111,17 @@
 
 In the absence of the parameter being set, the system will supply `null` as a 
fallback value.
 
+### 3.1.7 `ownLine`
+* Value: `string` of either `'prefer'` or `'avoid'`
+* Default: `"avoid"`
+
+Whether the template SHOULD occur on a line of its own.
+
+If the parameter is set to `prefer`, a newly-added template SHOULD appear
+on its own line in wikitext.  If the parameter is set to `avoid`, a 
newly-added template SHOULD appear inline (with no surrounding newlines) in 
wikitext.  For both `prefer` and `avoid`, edited templates should maintain 
their existing formatting, whether that is on its own line or not.
+
+In the absence of the parameter being set, the system will supply `"avoid"` as 
a fallback value.
+
 ### 3.2 Param
 * Value: `Object`
 
diff --git a/TemplateDataBlob.php b/TemplateDataBlob.php
index 25d1245..ad0603c 100644
--- a/TemplateDataBlob.php
+++ b/TemplateDataBlob.php
@@ -62,6 +62,7 @@
                        $tdb->data->params = new stdClass();
                        $tdb->data->paramOrder = [];
                        $tdb->data->format = null;
+                       $tdb->data->ownLine = 'avoid';
                        $tdb->data->sets = [];
                        $tdb->data->maps = new stdClass();
                }
@@ -99,6 +100,7 @@
                        'sets',
                        'maps',
                        'format',
+                       'ownLine',
                ];
 
                static $paramKeys = [
@@ -134,6 +136,11 @@
                static $formats = [
                        'block' => "| _ = _\n",
                        'inline' => '|_=_',
+               ];
+
+               static $ownLine = [
+                       'prefer',
+                       'avoid',
                ];
 
                static $typeCompatMap = [
@@ -178,6 +185,18 @@
                        }
                } else {
                        $data->format = null;
+               }
+
+               // Root.ownLine
+               if ( isset( $data->ownLine ) ) {
+                       if ( !in_array( $data->ownLine, $ownLine ) ) {
+                               return Status::newFatal(
+                                       'templatedata-invalid-ownline',
+                                       'ownLine'
+                               );
+                       }
+               } else {
+                       $data->ownLine = 'avoid';
                }
 
                // Root.params
@@ -732,11 +751,24 @@
                                                . Html::element(
                                                        'span',
                                                        [ 'class' => 
'mw-templatedata-format' ],
-                                                       // Messages: 
templatedata-modal-format-inline, templatedata-modal-format-block
+                                                       // Messages: 
templatedata-doc-format-inline, templatedata-doc-format-block
                                                        wfMessage( 
'templatedata-doc-format-' . $data->format )->inLanguage( $lang )->text()
                                                )
                                        ) :
                                        '' )
+                               . ( $data->ownLine !== null ?
+                                       Html::rawElement(
+                                               'p',
+                                               [],
+                                               new OOUI\IconWidget( [ 'icon' 
=> 'template-ownline-' . $data->ownLine ] )
+                                               . Html::element(
+                                                       'span',
+                                                       [ 'class' => 
'mw-templatedata-ownline' ],
+                                                       // Messages: 
templatedata-doc-ownline-avoid, templatedata-doc-ownline-prefer
+                                                       wfMessage( 
'templatedata-doc-ownline-' . $data->ownLine )->inLanguage( $lang )->text()
+                                               )
+                                       ) :
+                                       '' )
                        )
                        . '<thead><tr>'
                        . Html::element(
diff --git a/extension.json b/extension.json
index 652b15d..81ae8e0 100644
--- a/extension.json
+++ b/extension.json
@@ -124,6 +124,8 @@
                                "templatedata-modal-format-inline",
                                "templatedata-modal-format-block",
                                "templatedata-modal-format-null",
+                               "templatedata-modal-ownline-avoid",
+                               "templatedata-modal-ownline-prefer",
                                "templatedata-modal-json-error-replace",
                                "templatedata-modal-notice-import-numparams",
                                "templatedata-modal-placeholder-paramkey",
diff --git a/i18n/en.json b/i18n/en.json
index db975bc..16e6aa8 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -54,6 +54,7 @@
        "templatedata-invalid-format": "Property \"$1\" is expected to be 
\"inline\", \"block\", or a valid format string.",
        "templatedata-invalid-length": "Data too large to save 
({{formatnum:$1}} {{PLURAL:$1|byte|bytes}}, {{PLURAL:$2|limit is}} 
{{formatnum:$2}})",
        "templatedata-invalid-missing": "Required property \"$1\" not found.",
+       "templatedata-invalid-ownline": "Property \"$1\" is expected to be 
\"avoid\", or \"prefer\".",
        "templatedata-invalid-param": "Invalid parameter \"$1\" for property 
\"$2\".",
        "templatedata-invalid-parse": "Syntax error in JSON.",
        "templatedata-invalid-type": "Property \"$1\" is expected to be of type 
\"$2\".",
@@ -79,6 +80,8 @@
        "templatedata-modal-format-null": "Unspecified",
        "templatedata-modal-json-error-replace": "Replace",
        "templatedata-modal-notice-import-numparams": "$1 new 
{{PLURAL:$1|parameter was|parameters were}} imported: $2",
+       "templatedata-modal-ownline-avoid": "Avoid",
+       "templatedata-modal-ownline-prefer": "Prefer",
        "templatedata-modal-placeholder-paramkey": "Parameter name",
        "templatedata-modal-search-input-placeholder": "Search by language name 
or code",
        "templatedata-modal-table-param-actions": "Actions",
@@ -104,6 +107,7 @@
        "templatedata-modal-title-paramorder": "Parameter order",
        "templatedata-modal-title-templatedesc": "Template description ($1)",
        "templatedata-modal-title-templateformat": "Template preferred format",
+       "templatedata-modal-title-templateownline": "Template on its own line",
        "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 8efd35d..335a47c 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -64,6 +64,7 @@
        "templatedata-invalid-format": "{{Doc-important|Don't translate 
\"inline\" and \"block\".}}\n\nError message when format property gets an 
unexpected value.",
        "templatedata-invalid-length": "Error message when generated JSON's 
length exceed database limits.\n* $1 - length of generated JSON\n* $2 - maximal 
allowed length",
        "templatedata-invalid-missing": "Error message when a required property 
is not found.\n* $1 - name of property. e.g. \"params\"\n* $2 - type of 
property (Unused)",
+       "templatedata-invalid-ownline": "{{Doc-important|Don't translate 
\"avoid\" and \"prefer\".}}\n\nError message when ownLine property gets an 
unexpected value.",
        "templatedata-invalid-param": "Error message for when the supplied 
parameter is invalid.\n* $1 - name of parameter. e.g. \"username\"\n* $2 - name 
of property. e.g. maps property \"applicationUser\"",
        "templatedata-invalid-parse": "Error message when there is a syntax 
error in JSON.",
        "templatedata-invalid-type": "Error message when a property is of the 
wrong type.\n* $1 - name of property. e.g. \"params.1.required\"\n* $2 - 
expected type of property. e.g. \"boolean\"",
@@ -89,6 +90,8 @@
        "templatedata-modal-format-null": "Label for null 
format\n{{Identical|Unspecified}}",
        "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-ownline-avoid": "Label for \"avoid\" value for 
\"own line\" property\n{{Identical|Avoid}}",
+       "templatedata-modal-ownline-prefer": "Label for \"prefer\" value for 
\"own line\" property\n{{Identical|Prefer}}",
        "templatedata-modal-placeholder-paramkey": "Placeholder for the input 
that contains new parameter name in the add parameter panel in the edit 
dialog.",
        "templatedata-modal-search-input-placeholder": "Placeholder text for 
language search panel.",
        "templatedata-modal-table-param-actions": "Label for a parameter 
property input: Parameter actions in the table\n{{Identical|Action}}",
@@ -114,6 +117,7 @@
        "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-templateownline": "The title for the template 
preferred \"own line\" property",
        "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 ffe0cfc..dc068d3 100644
--- a/modules/ext.templateDataGenerator.data.js
+++ b/modules/ext.templateDataGenerator.data.js
@@ -18,6 +18,7 @@
        this.description = {};
        this.paramOrder = [];
        this.format = null;
+       this.ownLine = "avoid";
        this.paramOrderChanged = false;
        this.paramIdentifierCounter = 0;
        this.originalTemplateDataObject = null;
@@ -280,6 +281,10 @@
 
        if ( tdObject.format !== undefined ) {
                model.setTemplateFormat( tdObject.format );
+       }
+
+       if ( tdObject.ownLine !== undefined ) {
+               model.setTemplateOwnLine( tdObject.ownLine );
        }
 
        return model;
@@ -588,6 +593,22 @@
 };
 
 /**
+ * Set template "own line" property.
+ *
+ * @param {string} [ownLine="avoid"] Preferred "own line" property
+ * @fires change-format
+ * @fires change
+ */
+mw.TemplateData.Model.prototype.setTemplateOwnLine = function ( ownLine ) {
+       ownLine = ownLine !== undefined ? ownLine : "avoid";
+       if ( this.ownLine !== ownLine ) {
+               this.ownLine = ownLine;
+               this.emit( 'change-ownLine', ownLine );
+               this.emit( 'change' );
+       }
+};
+
+/**
  * Add a key to the end of the paramOrder
  *
  * @param {string} key New key the add into the paramOrder
@@ -659,6 +680,15 @@
 };
 
 /**
+ * Retrieve the template preferred "own line" property
+ *
+ * @return {string} Preferred "own line" property
+ */
+mw.TemplateData.Model.prototype.getTemplateOwnLine = function () {
+       return this.ownLine;
+};
+
+/**
  * Set a specific parameter's property
  *
  * @param {string} paramKey Parameter key
diff --git a/modules/ext.templateDataGenerator.ui.tdDialog.js 
b/modules/ext.templateDataGenerator.ui.tdDialog.js
index 5db076e..8f719dd 100644
--- a/modules/ext.templateDataGenerator.ui.tdDialog.js
+++ b/modules/ext.templateDataGenerator.ui.tdDialog.js
@@ -81,7 +81,7 @@
  * @chainable
  */
 mw.TemplateData.Dialog.prototype.initialize = function () {
-       var templateParamsFieldset, addParamFieldlayout, 
languageActionFieldLayout, templateFormatFieldSet;
+       var templateParamsFieldset, addParamFieldlayout, 
languageActionFieldLayout, templateFormatFieldSet, templateOwnLineFieldSet;
 
        // Parent method
        mw.TemplateData.Dialog.super.prototype.initialize.call( this );
@@ -174,6 +174,25 @@
        } );
        templateFormatFieldSet.$element.append( 
this.templateFormatSelectWidget.$element );
 
+       this.templateOwnLineSelectWidget = new OO.ui.ButtonSelectWidget();
+       this.templateOwnLineSelectWidget.addItems( [
+               new OO.ui.ButtonOptionWidget( {
+                       data: 'avoid',
+                       icon: 'template-ownline-avoid',
+                       label: mw.msg( 'templatedata-modal-ownline-avoid' )
+               } ),
+               new OO.ui.ButtonOptionWidget( {
+                       data: 'prefer',
+                       icon: 'template-ownline-prefer',
+                       label: mw.msg( 'templatedata-modal-ownline-prefer' )
+               } )
+       ] );
+
+       templateOwnLineFieldSet = new OO.ui.FieldsetLayout( {
+               label: mw.msg( 'templatedata-modal-title-templateownline' )
+       } );
+       templateOwnLineFieldSet.$element.append( 
this.templateOwnLineSelectWidget.$element );
+
        // Param details panel
        this.$paramDetailsContainer = $( '<div>' )
                .addClass( 'tdg-templateDataDialog-paramDetails' );
@@ -185,6 +204,7 @@
                        languageActionFieldLayout.$element,
                        this.templateDescriptionFieldset.$element,
                        templateFormatFieldSet.$element,
+                       templateOwnLineFieldSet.$element,
                        templateParamsFieldset.$element
                );
        this.paramEditNoticeLabel = new OO.ui.LabelWidget();
@@ -237,6 +257,7 @@
        } );
        this.paramImport.connect( this, { click: 
'importParametersFromTemplateCode' } );
        this.templateFormatSelectWidget.connect( this, { choose: 
'onTemplateFormatSelectWidgetChoose' } );
+       this.templateOwnLineSelectWidget.connect( this, { choose: 
'onTemplateOwnLineSelectWidgetChoose' } );
 
 };
 
@@ -421,6 +442,15 @@
  */
 mw.TemplateData.Dialog.prototype.onTemplateFormatSelectWidgetChoose = function 
( item ) {
        this.model.setTemplateFormat( item.getData() );
+};
+
+/**
+ * Respond to choose event from the template own line select widget
+ *
+ * @param {OO.ui.OptionWidget} item "Own line" item
+ */
+mw.TemplateData.Dialog.prototype.onTemplateOwnLineSelectWidgetChoose = 
function ( item ) {
+       this.model.setTemplateOwnLine( item.getData() );
 };
 
 mw.TemplateData.Dialog.prototype.onParamPropertyInputChange = function ( 
property, value ) {
@@ -866,6 +896,9 @@
        // XXX needs to reflect new widget type
        this.templateFormatSelectWidget.selectItemByData( 
this.model.getTemplateFormat() );
 
+       // Set up "own line"
+       this.templateOwnLineSelectWidget.selectItemByData( 
this.model.getTemplateOwnLine() );
+
        // Repopulate the parameter list
        this.repopulateParamSelectWidget();
 };
diff --git a/resources/ext.templateData.css b/resources/ext.templateData.css
index 2e06095..e8f46c6 100644
--- a/resources/ext.templateData.css
+++ b/resources/ext.templateData.css
@@ -41,3 +41,13 @@
        /* @embed */
        background-image: url( ../modules/images/inline.svg );
 }
+
+.oo-ui-icon-template-ownline-avoid {
+       /* @embed */
+       background-image: url( ../modules/images/inline.svg );
+}
+
+.oo-ui-icon-template-ownline-prefer {
+       /* @embed */
+       background-image: url( ../modules/images/block-ltr.svg );
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7e364be295140fbc982e44903e03c7f151ddb5f1
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TemplateData
Gerrit-Branch: master
Gerrit-Owner: Cscott <canan...@wikimedia.org>

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

Reply via email to