summaryrefslogtreecommitdiffstats
path: root/apps/workflowengine/src
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2019-09-09 16:20:53 +0200
committerJulius Härtl <jus@bitgrid.net>2019-09-10 09:01:26 +0200
commit370242cf6d4bcfa3a1cdf6d1a6f436de24c3b8c4 (patch)
treedf06c63b7927079a1e034313b4cabc45988cb97d /apps/workflowengine/src
parent335d7cfba3f767efe709eb27676c34c7086a2d68 (diff)
downloadnextcloud-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.vue136
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>