Added script filter and script opeartor

This commit is contained in:
Peng-YM
2020-09-03 16:16:28 +08:00
parent 82a8c16e51
commit 250afb10a2
8 changed files with 286 additions and 181 deletions

View File

@@ -0,0 +1,100 @@
<template>
<v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title>
<v-icon left color="primary">flag</v-icon>
脚本过滤器
<v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)">
<v-icon>keyboard_arrow_up</v-icon>
</v-btn>
<v-btn icon @click="$emit('down', idx)">
<v-icon>keyboard_arrow_down</v-icon>
</v-btn>
<v-btn icon @click="$emit('deleteProcess', idx)">
<v-icon color="error">mdi-delete</v-icon>
</v-btn>
<v-dialog>
<template #activator="{on}">
<v-btn icon v-on="on">
<v-icon>help</v-icon>
</v-btn>
</template>
<v-card>
<v-card-title class="headline">
脚本过滤器
</v-card-title>
<v-card-text>
用一段脚本过滤节点可以提供脚本链接或者直接输入脚本
</v-card-text>
</v-card>
</v-dialog>
</v-card-title>
<v-card-text>
输入
<v-radio-group v-model="mode">
<v-row>
<v-col>
<v-radio label="链接" value="link"/>
</v-col>
<v-col>
<v-radio label="脚本" value="script"/>
</v-col>
</v-row>
</v-radio-group>
</v-card-text>
<v-textarea
solo
:label="hint"
v-model="content"
/>
</v-card>
</template>
<script>
export default {
props: ["args"],
data: function () {
return {
idx: this.$vnode.key,
mode: "link",
content: ""
}
},
computed: {
hint() {
return this.mode === 'link' ? "请输入链接地址" : "请输入一段脚本"
}
},
created() {
if (typeof this.args !== 'undefined') {
this.mode = this.args.mode;
this.content = this.args.content;
}
},
watch: {
mode() {
this.save();
},
content() {
this.save();
}
},
methods: {
save() {
if (this.content) {
this.$emit("dataChanged", {
idx: this.idx,
args: {
mode: this.mode,
content: this.content
}
});
}
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,100 @@
<template>
<v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title>
<v-icon left color="primary">flag</v-icon>
脚本过滤器
<v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)">
<v-icon>keyboard_arrow_up</v-icon>
</v-btn>
<v-btn icon @click="$emit('down', idx)">
<v-icon>keyboard_arrow_down</v-icon>
</v-btn>
<v-btn icon @click="$emit('deleteProcess', idx)">
<v-icon color="error">mdi-delete</v-icon>
</v-btn>
<v-dialog>
<template #activator="{on}">
<v-btn icon v-on="on">
<v-icon>help</v-icon>
</v-btn>
</template>
<v-card>
<v-card-title class="headline">
脚本操作
</v-card-title>
<v-card-text>
用一段脚本操作节点可以提供脚本链接或者直接输入脚本
</v-card-text>
</v-card>
</v-dialog>
</v-card-title>
<v-card-text>
输入
<v-radio-group v-model="mode">
<v-row>
<v-col>
<v-radio label="链接" value="link"/>
</v-col>
<v-col>
<v-radio label="脚本" value="script"/>
</v-col>
</v-row>
</v-radio-group>
</v-card-text>
<v-textarea
solo
:label="hint"
v-model="content"
/>
</v-card>
</template>
<script>
export default {
props: ["args"],
data: function () {
return {
idx: this.$vnode.key,
mode: "link",
content: ""
}
},
computed: {
hint() {
return this.mode === 'link' ? "请输入链接地址" : "请输入一段脚本"
}
},
created() {
if (typeof this.args !== 'undefined') {
this.mode = this.args.mode;
this.content = this.args.content;
}
},
watch: {
mode() {
this.save();
},
content() {
this.save();
}
},
methods: {
save() {
if (this.content) {
this.$emit("dataChanged", {
idx: this.idx,
args: {
mode: this.mode,
content: this.content
}
});
}
}
}
}
</script>
<style scoped>
</style>

View File

@@ -165,6 +165,8 @@ import RegexRenameOperator from "@/components/RegexRenameOperator";
import KeywordDeleteOperator from "@/components/KeywordDeleteOperator";
import RegexDeleteOperator from "@/components/RegexDeleteOperator";
import FlagOperator from "@/components/FlagOperator";
import ScriptFilter from "@/components/ScriptFilter";
import ScriptOperator from "@/components/ScriptOperator";
const AVAILABLE_PROCESSORS = {
"Flag Operator": {
@@ -207,6 +209,14 @@ const AVAILABLE_PROCESSORS = {
component: "RegexDeleteOperator",
name: "删除正则"
},
"Script Filter": {
component: "ScriptFilter",
name: "脚本过滤器"
},
"Script Operator": {
component: "ScriptOperator",
name: "脚本操作"
}
}
export default {
@@ -220,7 +230,9 @@ export default {
KeywordRenameOperator,
RegexRenameOperator,
KeywordDeleteOperator,
RegexDeleteOperator
RegexDeleteOperator,
ScriptFilter,
ScriptOperator
},
data: function () {
return {
@@ -298,7 +310,9 @@ export default {
},
dataChanged(content) {
this.options.process[content.idx].args = content.args;
const process = this.options.process[content.idx];
process.args = content.args;
this.options.process.splice(content.idx, 1, process);
},
addProcess(type) {

View File

@@ -138,7 +138,7 @@
<v-toolbar-title>节点列表</v-toolbar-title>
<v-spacer></v-spacer>
<v-toolbar-items>
<v-btn icon @click="refreshProxyList">
<v-btn icon @click="refreshProxyList" v-if="sub">
<v-icon>refresh</v-icon>
</v-btn>
<v-btn icon @click="showProxyList = false">
@@ -229,7 +229,7 @@ export default {
preview(item, type = 'sub') {
if (type === 'sub') {
this.url = `${BACKEND_BASE}/download/${item.name}`;
this.sub = [item.url];
this.sub = item.url;
} else {
this.url = `${BACKEND_BASE}/download/collection/${item.name}`
}