From fd1a5c21eb7babc0f81b136691afda46fa87c450 Mon Sep 17 00:00:00 2001 From: Assunta DeSanto Date: Wed, 8 Apr 2020 17:39:48 -0400 Subject: [PATCH 01/10] refactored components of Rule Collection into separate vue files --- .../components/RuleBuilder/ColumnSelector.vue | 134 +++++++ .../RuleBuilder/IdentifierDisplay.vue | 50 +++ .../RuleBuilder/RegularExpressionInput.vue | 32 ++ .../components/RuleBuilder/RuleComponent.vue | 46 +++ .../components/RuleBuilder/RuleDisplay.vue | 51 +++ .../RuleBuilder/RuleTargetComponent.vue | 25 ++ .../components/RuleCollectionBuilder.vue | 329 +----------------- 7 files changed, 346 insertions(+), 321 deletions(-) create mode 100644 client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue create mode 100644 client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue create mode 100644 client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue create mode 100644 client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue create mode 100644 client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue create mode 100644 client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue diff --git a/client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue b/client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue new file mode 100644 index 00000000000..764ab9690bb --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue @@ -0,0 +1,134 @@ + + + \ No newline at end of file diff --git a/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue new file mode 100644 index 00000000000..fd5659c73be --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue b/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue new file mode 100644 index 00000000000..9437edae40c --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue @@ -0,0 +1,32 @@ + + + \ No newline at end of file diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue new file mode 100644 index 00000000000..826c0fda1c0 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue @@ -0,0 +1,46 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue new file mode 100644 index 00000000000..c51377581f8 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue @@ -0,0 +1,51 @@ + + + + \ No newline at end of file diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue new file mode 100644 index 00000000000..ec3e7dd890d --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/client/galaxy/scripts/components/RuleCollectionBuilder.vue b/client/galaxy/scripts/components/RuleCollectionBuilder.vue index d4d99436d37..60e5ed92e53 100644 --- a/client/galaxy/scripts/components/RuleCollectionBuilder.vue +++ b/client/galaxy/scripts/components/RuleCollectionBuilder.vue @@ -576,332 +576,19 @@ import RuleDefs from "mvc/rules/rule-definitions"; import Vue from "vue"; import BootstrapVue from "bootstrap-vue"; import Select2 from "components/Select2"; +import ColumnSelector from "components/RuleBuilder/ColumnSelector"; +import RegularExpressionInput from "components/RuleBuilder/RegularExpressionInput"; +import RuleDisplay from "components/RuleBuilder/RuleDisplay"; +import IdentifierDisplay from "components/RuleBuilder/IdentifierDisplay"; +import RuleTargetComponent from "components/RuleBuilder/RuleTargetComponent"; +import RuleComponent from "components/RuleBuilder/RuleComponent"; + Vue.use(BootstrapVue); const RULES = RuleDefs.RULES; const MAPPING_TARGETS = RuleDefs.MAPPING_TARGETS; - -const ColumnSelector = { - template: ` -
- -
-
- {{ label }} - -
    -
  1. - {{ colHeaders[targetEl] }} - - - -
  2. -
  3. - - ... {{ l("Assign Another Column") }} - - - - - - -
  4. -
-
- `, - data: function () { - return { - l: _l, - }; - }, - props: { - target: { - required: true, - }, - label: { - required: false, - type: String, - default: _l("From Column"), - }, - help: { - required: false, - }, - colHeaders: { - type: Array, - required: true, - }, - multiple: { - type: Boolean, - required: false, - default: false, - }, - ordered: { - type: Boolean, - required: false, - default: false, - }, - valueAsList: { - type: Boolean, - required: false, - default: false, - }, - orderedEdit: { - type: Boolean, - required: false, - default: false, - }, - }, - computed: { - remainingHeaders() { - const colHeaders = this.colHeaders; - if (!this.multiple) { - return colHeaders; - } - const remaining = {}; - for (const key in colHeaders) { - if (this.target.indexOf(parseInt(key)) === -1) { - remaining[key] = colHeaders[key]; - } - } - return remaining; - }, - title() { - return _l("Select a column"); - }, - }, - methods: { - handleInput(value) { - if (this.multiple) { - // https://stackoverflow.com/questions/262427/why-does-parseint-yield-nan-with-arraymap - const val = value.map((idx) => parseInt(idx)); - this.$emit("update:target", val); - } else { - let val = parseInt(value); - if (this.valueAsList) { - val = [val]; - } - this.$emit("update:target", val); - } - }, - handleAdd(value) { - this.target.push(parseInt(value)); - this.$emit("update:orderedEdit", false); - }, - handleRemove(index) { - this.target.splice(index, 1); - }, - moveUp(value) { - const swapVal = this.target[value - 1]; - Vue.set(this.target, value - 1, this.target[value]); - Vue.set(this.target, value, swapVal); - }, - }, - components: { - Select2, - }, -}; - -const RegularExpressionInput = { - template: ` -
- - - -
- `, - props: { - target: { - required: true, - }, - }, - computed: { - label() { - return _l("Regular Expression"); - }, - title() { - return _l("Enter a regular expression."); - }, - popoverTitle() { - return _l("Regular Expressions"); - }, - popoverContent() { - return _l( - `Regular expressions are patterns used to match character combinations in strings. This input accepts Python-style regular expressions, find more information about these in this Python for Biologists tutorial.` - ); - }, - }, -}; - -const RuleDisplay = { - template: ` -
  • - - {{ title }} - - - - - {{ rule.warn }} - - - {{ rule.error }} - -
  • - `, - props: { - rule: { - required: true, - type: Object, - }, - colHeaders: { - type: Array, - required: true, - }, - }, - computed: { - title() { - const ruleType = this.rule.type; - return RULES[ruleType].display(this.rule, this.colHeaders); - }, - editTitle() { - return _l("Edit this rule."); - }, - removeTitle() { - return _l("Remove this rule."); - }, - }, - methods: { - edit() { - this.$emit("edit"); - }, - remove() { - this.$emit("remove"); - }, - }, -}; - -const IdentifierDisplay = { - template: ` -
  • - Set {{ columnsLabel }} as {{ typeDisplay }} - - -
  • - `, - props: { - type: { - type: String, - required: true, - }, - columns: { - required: true, - }, - colHeaders: { - type: Array, - required: true, - }, - }, - methods: { - remove() { - this.$emit("remove"); - }, - edit() { - this.$emit("edit"); - }, - }, - computed: { - typeDisplay() { - return MAPPING_TARGETS[this.type].label; - }, - help() { - return MAPPING_TARGETS[this.type].help || ""; - }, - titleEdit() { - return _l("Edit column definition"); - }, - titleRemove() { - return _l("Remove this column definition"); - }, - columnsLabel() { - return RuleDefs.columnDisplay(this.columns, this.colHeaders); - }, - }, -}; - -const RuleTargetComponent = { - template: `{{title}}`, - props: { - ruleType: { - type: String, - required: true, - }, - builder: { - required: true, - }, - }, - computed: { - linkClassName() { - return "rule-link-" + this.ruleType.replace(/_/g, "-"); - }, - title() { - return RULES[this.ruleType].title; - }, - }, -}; - -const RuleComponent = { - template: ` -
    - -
    - - -
    -
    `, - data: function () { - return { - applyLabel: _l("Apply"), - cancelLabel: _l("Cancel"), - }; - }, - props: { - ruleType: { - type: String, - required: true, - }, - displayRuleType: { - required: true, - }, - builder: { - required: true, - }, - }, - methods: { - cancel() { - this.builder.displayRuleType = null; - }, - okay() { - this.builder.handleRuleSave(this.ruleType); - this.cancel(); - }, - }, - computed: { - typeToClass() { - return "rule-edit-" + this.ruleType.replace(/_/g, "-"); - }, - }, -}; + const StateDiv = { template: ` From 379ceee29ca9bdbea6fcaf220044185667ba20c7 Mon Sep 17 00:00:00 2001 From: Assunta DeSanto Date: Wed, 8 Apr 2020 18:11:55 -0400 Subject: [PATCH 02/10] fixing a typo --- .../scripts/components/RuleBuilder/RuleTargetComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue index ec3e7dd890d..d7358ce8a51 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue @@ -1,5 +1,5 @@ \ No newline at end of file From d0821eea321b05067549b6f1f234521728b4d149 Mon Sep 17 00:00:00 2001 From: Assunta DeSanto Date: Thu, 9 Apr 2020 11:32:02 -0400 Subject: [PATCH 05/10] fixing another typo. This is why you shouldn't copy and paste --- .../galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue | 2 +- .../scripts/components/RuleBuilder/RuleTargetComponent.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue b/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue index 6cbf2db28c4..1cf35a95eb8 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue @@ -6,5 +6,5 @@ - `, + \ No newline at end of file diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue index d7358ce8a51..601d12387b0 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue @@ -20,6 +20,6 @@ export default { title() { return RULES[this.ruleType].title; }, - }, + } } \ No newline at end of file From ae48ebe8660f38fb3ce3b18fd2eac94ebc125b32 Mon Sep 17 00:00:00 2001 From: Assunta DeSanto Date: Mon, 13 Apr 2020 09:40:34 -0400 Subject: [PATCH 06/10] adding in imports that were causing an error --- .../scripts/components/RuleBuilder/IdentifierDisplay.vue | 3 +++ client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue | 3 +++ .../scripts/components/RuleBuilder/RuleTargetComponent.vue | 3 +++ 3 files changed, 9 insertions(+) diff --git a/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue index fd5659c73be..7c821e2ae5e 100644 --- a/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue +++ b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue @@ -7,6 +7,9 @@ \ No newline at end of file + }, +}; + diff --git a/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue index 9cfb211924e..54f1ce1ca4b 100644 --- a/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue +++ b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue @@ -11,7 +11,7 @@ import _l from "utils/localization"; import RuleDefs from "mvc/rules/rule-definitions"; const MAPPING_TARGETS = RuleDefs.MAPPING_TARGETS; -export default{ +export default { props: { type: { type: String, @@ -49,6 +49,6 @@ export default{ columnsLabel() { return RuleDefs.columnDisplay(this.columns, this.colHeaders); }, - } -} - \ No newline at end of file + }, +}; + diff --git a/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue b/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue index 2cd375bc95d..36f65600040 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue @@ -2,7 +2,15 @@
    - +
    @@ -29,7 +37,7 @@ export default { return _l( `Regular expressions are patterns used to match character combinations in strings. This input accepts Python-style regular expressions, find more information about these in this Python for Biologists tutorial.` ); - } - } -} - \ No newline at end of file + }, + }, +}; + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue index cbeacf29977..474e6cbc4a4 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue @@ -2,8 +2,8 @@
    - - + +
    @@ -44,5 +44,5 @@ export default { return "rule-edit-" + this.ruleType.replace(/_/g, "-"); }, }, -} +}; diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue index d3188159d6c..1d52daf8011 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue @@ -1,4 +1,3 @@ - \ No newline at end of file + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue b/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue index ccd1c57734f..9ea12aefa61 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue @@ -1,3 +1,3 @@ \ No newline at end of file + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue b/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue index 745fa17ceff..35fca19d00a 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue @@ -1,3 +1,3 @@ \ No newline at end of file + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue index ef622ae0b28..aeb4d07d1df 100644 --- a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue +++ b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue @@ -1,5 +1,11 @@ \ No newline at end of file + }, +}; + diff --git a/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue b/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue index c7cc9eb1292..2f06d8daf7f 100644 --- a/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue +++ b/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue @@ -2,4 +2,4 @@
    - \ No newline at end of file + diff --git a/client/galaxy/scripts/components/RuleCollectionBuilder.vue b/client/galaxy/scripts/components/RuleCollectionBuilder.vue index 5f4098da3e6..ee2162d7cb8 100644 --- a/client/galaxy/scripts/components/RuleCollectionBuilder.vue +++ b/client/galaxy/scripts/components/RuleCollectionBuilder.vue @@ -587,7 +587,6 @@ import RuleModalMiddle from "components/RuleBuilder/RuleModalMiddle"; import RuleModalFooter from "components/RuleBuilder/RuleModalFooter"; import StateDiv from "components/RuleBuilder/StateDiv"; - Vue.use(BootstrapVue); const RULES = RuleDefs.RULES;