Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/html/modals/xray_outbound_modal.html')
-rw-r--r--web/html/modals/xray_outbound_modal.html127
1 files changed, 127 insertions, 0 deletions
diff --git a/web/html/modals/xray_outbound_modal.html b/web/html/modals/xray_outbound_modal.html
new file mode 100644
index 00000000..2edb5fc0
--- /dev/null
+++ b/web/html/modals/xray_outbound_modal.html
@@ -0,0 +1,127 @@
+{{define "modals/outModal"}}
+<a-modal id="out-modal" v-model="outModal.visible" :title="outModal.title" @ok="outModal.ok"
+ :confirm-loading="outModal.confirmLoading" :closable="true" :mask-closable="false"
+ :ok-button-props="{ props: { disabled: !outModal.isValid } }" :style="{ overflow: 'hidden' }"
+ :ok-text="outModal.okText" cancel-text='{{ i18n "close" }}' :class="themeSwitcher.currentTheme">
+ {{template "form/outbound"}}
+</a-modal>
+<script>
+
+ const outModal = {
+ title: '',
+ visible: false,
+ confirmLoading: false,
+ okText: '{{ i18n "sure" }}',
+ isEdit: false,
+ confirm: null,
+ outbound: new Outbound(),
+ jsonMode: false,
+ link: '',
+ cm: null,
+ duplicateTag: false,
+ isValid: true,
+ activeKey: '1',
+ tags: [],
+ ok() {
+ ObjectUtil.execute(outModal.confirm, outModal.outbound.toJson());
+ },
+ show({ title='', okText='{{ i18n "sure" }}', outbound, confirm=(outbound)=>{}, isEdit=false, tags=[] }) {
+ this.title = title;
+ this.okText = okText;
+ this.confirm = confirm;
+ this.jsonMode = false;
+ this.link = '';
+ this.activeKey = '1';
+ this.visible = true;
+ this.outbound = isEdit ? Outbound.fromJson(outbound) : new Outbound();
+ this.isEdit = isEdit;
+ this.tags = tags;
+ this.check()
+ },
+ close() {
+ outModal.visible = false;
+ outModal.loading(false);
+ },
+ loading(loading=true) {
+ outModal.confirmLoading = loading;
+ },
+ check(){
+ if(outModal.outbound.tag == '' || outModal.tags.includes(outModal.outbound.tag)){
+ this.duplicateTag = true;
+ this.isValid = false;
+ } else {
+ this.duplicateTag = false;
+ this.isValid = true;
+ }
+ },
+ toggleJson(jsonTab) {
+ textAreaObj = document.getElementById('outboundJson');
+ if(jsonTab){
+ if(this.cm != null) {
+ this.cm.toTextArea();
+ this.cm=null;
+ }
+ textAreaObj.value = JSON.stringify(this.outbound.toJson(), null, 2);
+ this.cm = CodeMirror.fromTextArea(textAreaObj, app.cmOptions);
+ this.cm.on('change',editor => {
+ value = editor.getValue();
+ if(this.isJsonString(value)){
+ this.outbound = Outbound.fromJson(JSON.parse(value));
+ this.check();
+ }
+ });
+ this.activeKey = '2';
+ } else {
+ if(this.cm != null) {
+ this.cm.toTextArea();
+ this.cm=null;
+ }
+ this.activeKey = '1';
+ }
+ },
+ isJsonString(str) {
+ try {
+ JSON.parse(str);
+ } catch (e) {
+ return false;
+ }
+ return true;
+ },
+ };
+
+ new Vue({
+ delimiters: ['[[', ']]'],
+ el: '#out-modal',
+ data: {
+ outModal: outModal,
+ get outbound() {
+ return outModal.outbound;
+ },
+ },
+ methods: {
+ streamNetworkChange() {
+ if (this.outModal.outbound.protocol == Protocols.VLESS && !outModal.outbound.canEnableTlsFlow()) {
+ delete this.outModal.outbound.settings.flow;
+ }
+ },
+ canEnableTls() {
+ return this.outModal.outbound.canEnableTls();
+ },
+ convertLink(){
+ newOutbound = Outbound.fromLink(outModal.link);
+ if(newOutbound){
+ this.outModal.outbound = newOutbound;
+ this.outModal.toggleJson(true);
+ this.outModal.check();
+ this.$message.success('Link imported successfully...');
+ outModal.link = '';
+ } else {
+ this.$message.error('Wrong Link!');
+ outModal.link = '';
+ }
+ },
+ },
+ });
+
+</script>
+{{end}}