diff --git a/client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue b/client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue new file mode 100644 index 00000000000..195d777edc3 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/ColumnSelector.vue @@ -0,0 +1,138 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue new file mode 100644 index 00000000000..54f1ce1ca4b --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/IdentifierDisplay.vue @@ -0,0 +1,54 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue b/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue new file mode 100644 index 00000000000..36f65600040 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RegularExpressionInput.vue @@ -0,0 +1,43 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue new file mode 100644 index 00000000000..474e6cbc4a4 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleComponent.vue @@ -0,0 +1,48 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue b/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue new file mode 100644 index 00000000000..1d52daf8011 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleDisplay.vue @@ -0,0 +1,54 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue b/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue new file mode 100644 index 00000000000..fc2a3bfe739 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleModalFooter.vue @@ -0,0 +1,10 @@ + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue b/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue new file mode 100644 index 00000000000..9ea12aefa61 --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleModalHeader.vue @@ -0,0 +1,3 @@ + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue b/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue new file mode 100644 index 00000000000..35fca19d00a --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleModalMiddle.vue @@ -0,0 +1,3 @@ + diff --git a/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue new file mode 100644 index 00000000000..aeb4d07d1df --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/RuleTargetComponent.vue @@ -0,0 +1,34 @@ + + + diff --git a/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue b/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue new file mode 100644 index 00000000000..2f06d8daf7f --- /dev/null +++ b/client/galaxy/scripts/components/RuleBuilder/StateDiv.vue @@ -0,0 +1,5 @@ + diff --git a/client/galaxy/scripts/components/RuleCollectionBuilder.vue b/client/galaxy/scripts/components/RuleCollectionBuilder.vue index d27dd94ccad..185ae53f7eb 100644 --- a/client/galaxy/scripts/components/RuleCollectionBuilder.vue +++ b/client/galaxy/scripts/components/RuleCollectionBuilder.vue @@ -576,360 +576,22 @@ 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"; +import RuleModalHeader from "components/RuleBuilder/RuleModalHeader"; +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; 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: ` -
    - -
    `, -}; - -const RuleModalHeader = { - template: `
    `, -}; - -const RuleModalMiddle = { - template: `
    `, -}; - -const RuleModalFooter = { - template: ` - `, -}; - export default { data: function () { let orientation = "vertical";