diff options
author | Julius Härtl <jus@bitgrid.net> | 2019-09-09 16:20:53 +0200 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2019-09-10 09:01:26 +0200 |
commit | 370242cf6d4bcfa3a1cdf6d1a6f436de24c3b8c4 (patch) | |
tree | df06c63b7927079a1e034313b4cabc45988cb97d /apps/workflowengine/src | |
parent | 335d7cfba3f767efe709eb27676c34c7086a2d68 (diff) | |
download | nextcloud-server-370242cf6d4bcfa3a1cdf6d1a6f436de24c3b8c4.tar.gz nextcloud-server-370242cf6d4bcfa3a1cdf6d1a6f436de24c3b8c4.zip |
Add request url selector
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'apps/workflowengine/src')
-rw-r--r-- | apps/workflowengine/src/components/Checks/RequestURL.vue | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/apps/workflowengine/src/components/Checks/RequestURL.vue b/apps/workflowengine/src/components/Checks/RequestURL.vue new file mode 100644 index 00000000000..8f3bb766581 --- /dev/null +++ b/apps/workflowengine/src/components/Checks/RequestURL.vue @@ -0,0 +1,136 @@ +<!-- + - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net> + - + - @author Julius Härtl <jus@bitgrid.net> + - + - @license GNU AGPL version 3 or any later version + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> + +<template> + <div> + <Multiselect + :value="currentValue" + :placeholder="t('workflowengine', 'Select a request URL')" + label="label" + track-by="pattern" + group-values="children" + group-label="label" + :options="options" :multiple="false" :tagging="false" + @input="setValue"> + <template slot="singleLabel" slot-scope="props"> + <span class="option__icon" :class="props.option.icon" /> + <span class="option__title option__title_single">{{ props.option.label }}</span> + </template> + <template slot="option" slot-scope="props"> + <span class="option__icon" :class="props.option.icon" /> + <span class="option__title">{{ props.option.label }} {{ props.option.$groupLabel }}</span> + </template> + </Multiselect> + <input type="text" :value="currentValue.pattern" + :placeholder="placeholder" + @input="updateCustom" v-if="!isPredefined"> + </div> +</template> + +<script> +import { Multiselect } from 'nextcloud-vue/dist/Components/Multiselect' +import valueMixin from '../../mixins/valueMixin'; + +export default { + name: 'RequestURL', + components: { + Multiselect + }, + mixins: [ + valueMixin + ], + data() { + return { + newValue: '', + predefinedTypes: [ + { + label: t('workflowengine', 'Predefined URLs'), + children: [ + { pattern: 'webdav', label: t('workflowengine', 'Files WebDAV')}, + ] + } + ] + } + }, + computed: { + options() { + return [...this.predefinedTypes, this.customValue] + }, + placeholder() { + if (this.check.operator === 'matches' || this.check.operator === '!matches') { + return '/^https\\:\\/\\/localhost\\/index\\.php$/i' + } + return 'https://localhost/index.php' + }, + isPredefined() { + const matchingPredefined = this.predefinedTypes.map(groups => groups.children).flat().find((type) => this.newValue === type.pattern) + if (matchingPredefined) { + return true + } + return false + }, + customValue() { + return { + label: t('workflowengine', 'Others'), + children: [ + { + icon: 'icon-settings-dark', + label: t('workflowengine', 'Custom URL'), + pattern: '' + } + ] + } + }, + currentValue() { + const matchingPredefined = this.predefinedTypes.map(groups => groups.children).flat().find((type) => this.newValue === type.pattern) + if (matchingPredefined) { + return matchingPredefined + } + return { + icon: 'icon-settings-dark', + label: t('workflowengine', 'Custom URL'), + pattern: this.newValue, + } + } + }, + methods: { + validateRegex(string) { + var regexRegex = /^\/(.*)\/([gui]{0,3})$/ + var result = regexRegex.exec(string) + return result !== null + }, + setValue(value) { + // TODO: check if value requires a regex and set the check operator according to that + if (value !== null) { + this.newValue = value.pattern + this.$emit('input', this.newValue) + } + }, + updateCustom(event) { + this.newValue = event.target.value + this.$emit('input', this.newValue) + } + } +} +</script> + +<style scoped src="./../../css/multiselect.css"></style> |