mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
Vue.component("keyword", {
 | 
						|
	props: ["v-word"],
 | 
						|
	data: function () {
 | 
						|
		let word = this.vWord
 | 
						|
		if (word == null) {
 | 
						|
			word = ""
 | 
						|
		} else {
 | 
						|
			word = word.replace(/\)/g, "\\)")
 | 
						|
			word = word.replace(/\(/g, "\\(")
 | 
						|
			word = word.replace(/\+/g, "\\+")
 | 
						|
			word = word.replace(/\^/g, "\\^")
 | 
						|
			word = word.replace(/\$/g, "\\$")
 | 
						|
			word = word.replace(/\?/g, "\\?")
 | 
						|
			word = word.replace(/\*/g, "\\*")
 | 
						|
			word = word.replace(/\[/g, "\\[")
 | 
						|
			word = word.replace(/{/g, "\\{")
 | 
						|
			word = word.replace(/\./g, "\\.")
 | 
						|
		}
 | 
						|
 | 
						|
		let slot = this.$slots["default"][0]
 | 
						|
		let text = slot.text
 | 
						|
		if (word.length > 0) {
 | 
						|
			let that = this
 | 
						|
			let m = []  // replacement => tmp
 | 
						|
			let tmpIndex = 0
 | 
						|
			text = text.replaceAll(new RegExp("(" + word + ")", "ig"), function (replacement) {
 | 
						|
				tmpIndex++
 | 
						|
				let s = "<span style=\"border: 1px #ccc dashed; color: #ef4d58\">" + that.encodeHTML(replacement) + "</span>"
 | 
						|
				let tmpKey = "$TMP__KEY__" + tmpIndex.toString() + "$"
 | 
						|
				m.push([tmpKey, s])
 | 
						|
				return tmpKey
 | 
						|
			})
 | 
						|
			text = this.encodeHTML(text)
 | 
						|
 | 
						|
			m.forEach(function (r) {
 | 
						|
				text = text.replace(r[0], r[1])
 | 
						|
			})
 | 
						|
 | 
						|
		} else {
 | 
						|
			text = this.encodeHTML(text)
 | 
						|
		}
 | 
						|
 | 
						|
		return {
 | 
						|
			word: word,
 | 
						|
			text: text
 | 
						|
		}
 | 
						|
	},
 | 
						|
	methods: {
 | 
						|
		encodeHTML: function (s) {
 | 
						|
			s = s.replace(/&/g, "&")
 | 
						|
			s = s.replace(/</g, "<")
 | 
						|
			s = s.replace(/>/g, ">")
 | 
						|
			s = s.replace(/"/g, """)
 | 
						|
			return s
 | 
						|
		}
 | 
						|
	},
 | 
						|
	template: `<span><span style="display: none"><slot></slot></span><span v-html="text"></span></span>`
 | 
						|
}) |