From 3778a9ebcf17f9b9b81740b98280881e46aeee31 Mon Sep 17 00:00:00 2001 From: tod31 Date: Fri, 9 Apr 2021 11:28:32 +0200 Subject: [PATCH] add configuration field for separator --- client/components/cards/cardCustomFields.js | 3 ++- client/components/cards/minicard.js | 2 +- .../sidebar/sidebarCustomFields.jade | 5 ++++- .../components/sidebar/sidebarCustomFields.js | 19 ++++++++++++++++++- i18n/en.i18n.json | 3 ++- models/customFields.js | 4 ++++ 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/client/components/cards/cardCustomFields.js b/client/components/cards/cardCustomFields.js index 37493578b..30d0a9e36 100644 --- a/client/components/cards/cardCustomFields.js +++ b/client/components/cards/cardCustomFields.js @@ -241,6 +241,7 @@ CardCustomField.register('cardCustomField'); super.onCreated(); this.stringtemplateFormat = this.data().definition.settings.stringtemplateFormat; + this.stringtemplateSeparator = this.data().definition.settings.stringtemplateSeparator; } formattedValue() { @@ -249,7 +250,7 @@ CardCustomField.register('cardCustomField'); .split('\n') .filter(value => value.trim() !== '') .map(value => this.stringtemplateFormat.replace(/%\{value\}/gi, value)) - .join(' '); + .join(this.stringtemplateSeparator ?? ''); } events() { diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index 68fcad261..10e2f4a84 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -34,7 +34,7 @@ BlazeComponent.extendComponent({ .split('\n') .filter(value => value.trim() !== '') .map(value => definition.settings.stringtemplateFormat.replace(/%\{value\}/gi, value)) - .join(' '); + .join(definition.settings.stringtemplateSeparator ?? ''); }, events() { diff --git a/client/components/sidebar/sidebarCustomFields.jade b/client/components/sidebar/sidebarCustomFields.jade index f71108a6c..d1970ef1a 100644 --- a/client/components/sidebar/sidebarCustomFields.jade +++ b/client/components/sidebar/sidebarCustomFields.jade @@ -54,7 +54,10 @@ template(name="createCustomFieldPopup") div.js-field-settings.js-field-settings-stringtemplate(class="{{#if isTypeNotSelected 'stringtemplate'}}hide{{/if}}") label | {{_ 'custom-field-stringtemplate-format'}} - input.js-field-stringtemplate(type="text" value=getStringtemplateFormat) + input.js-field-stringtemplate-format(type="text" value=getStringtemplateFormat) + label + | {{_ 'custom-field-stringtemplate-separator'}} + input.js-field-stringtemplate-separator(type="text" value=getStringtemplateSeparator) a.flex.js-field-show-on-card(class="{{#if showOnCard}}is-checked{{/if}}") .materialCheckBox(class="{{#if showOnCard}}is-checked{{/if}}") diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js index 977427e84..2f1fa7dd6 100644 --- a/client/components/sidebar/sidebarCustomFields.js +++ b/client/components/sidebar/sidebarCustomFields.js @@ -91,6 +91,12 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ ? this.data().settings.stringtemplateFormat : '', ); + + this.stringtemplateSeparator = new ReactiveVar( + this.data().settings && this.data().settings.stringtemplateSeparator + ? this.data().settings.stringtemplateSeparator + : '', + ); }, types() { @@ -139,6 +145,10 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ return this.stringtemplateFormat.get(); }, + getStringtemplateSeparator() { + return this.stringtemplateSeparator.get(); + }, + getSettings() { const settings = {}; switch (this.type.get()) { @@ -157,6 +167,9 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ case 'stringtemplate': { const stringtemplateFormat = this.stringtemplateFormat.get(); settings.stringtemplateFormat = stringtemplateFormat; + + const stringtemplateSeparator = this.stringtemplateSeparator.get(); + settings.stringtemplateSeparator = stringtemplateSeparator; break; } } @@ -181,10 +194,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ evt.target.value = ''; } }, - 'input .js-field-stringtemplate'(evt) { + 'input .js-field-stringtemplate-format'(evt) { const value = evt.target.value; this.stringtemplateFormat.set(value); }, + 'input .js-field-stringtemplate-separator'(evt) { + const value = evt.target.value; + this.stringtemplateSeparator.set(value); + }, 'click .js-field-show-on-card'(evt) { let $target = $(evt.target); if (!$target.hasClass('js-field-show-on-card')) { diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index ca246338d..24711ba85 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -990,5 +990,6 @@ "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)" + "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", + "custom-field-stringtemplate-separator": "Separator (use   or   for a space)" } diff --git a/models/customFields.js b/models/customFields.js index 4024e234e..9f5db0667 100644 --- a/models/customFields.js +++ b/models/customFields.js @@ -69,6 +69,10 @@ CustomFields.attachSchema( type: String, optional: true, }, + 'settings.stringtemplateSeparator': { + type: String, + optional: true, + }, showOnCard: { /** * should we show on the cards this custom field