| 
									
										
										
										
											2023-12-05 17:13:36 +00:00
										 |  |  | {{define "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', | 
					
						
							| 
									
										
										
										
											2023-12-05 22:03:38 +00:00
										 |  |  |         tags: [], | 
					
						
							| 
									
										
										
										
											2023-12-05 17:13:36 +00:00
										 |  |  |         ok() { | 
					
						
							|  |  |  |             ObjectUtil.execute(outModal.confirm, outModal.outbound.toJson()); | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2023-12-05 22:03:38 +00:00
										 |  |  |         show({ title='', okText='{{ i18n "sure" }}', outbound, confirm=(outbound)=>{}, isEdit=false, tags=[]  }) { | 
					
						
							| 
									
										
										
										
											2023-12-05 17:13:36 +00:00
										 |  |  |             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; | 
					
						
							| 
									
										
										
										
											2023-12-05 22:03:38 +00:00
										 |  |  |             this.tags = tags; | 
					
						
							| 
									
										
										
										
											2023-12-05 17:13:36 +00:00
										 |  |  |             this.check() | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         close() { | 
					
						
							|  |  |  |             outModal.visible = false; | 
					
						
							|  |  |  |             outModal.loading(false); | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-02-21 11:39:56 +00:00
										 |  |  |         loading(loading=true) { | 
					
						
							| 
									
										
										
										
											2023-12-05 17:13:36 +00:00
										 |  |  |             outModal.confirmLoading = loading; | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         check(){ | 
					
						
							| 
									
										
										
										
											2023-12-05 22:03:38 +00:00
										 |  |  |             if(outModal.outbound.tag == '' || outModal.tags.includes(outModal.outbound.tag)){ | 
					
						
							| 
									
										
										
										
											2023-12-05 17:13:36 +00:00
										 |  |  |                 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}} |