UNPKG

vue-virtual-keyboard-cn

Version:
154 lines (136 loc) 5.02 kB
// const obj = self.importScripts("/vocabulary.js") self.addEventListener('message', (e) => { // console.log('子线程', e) const { method, dataKey } = e.data if (method === 'init') { self[dataKey] = Object.freeze(e.data.data) self.dataKey = dataKey } if (method === 'setCn_input') { setCn_input(e) } if (method === 'search') { console.time("searchDict"); let { key } = e.data const doubleSpell = self.doubleSpell || {} let cn_input = key let keys = cn_input.split("'") const dict = doubleSpell[cn_input.charAt(0)] if (!dict) return if (["an"].includes(keys[keys.length - 1])) { let tempStr = keys[keys.length - 2]; if (["n"].includes(tempStr.charAt(tempStr.length - 1))) { let newTempStr = tempStr.slice(0, tempStr.length - 1); keys = [ newTempStr, tempStr.slice(tempStr.length - 1) + keys[keys.length - 1], ]; cn_input = keys.join("'"); } } let keyResult = Object.keys(dict).filter((key) => { const keys = key.split("'"); const cn_inputList = cn_input.split("'"); const isLen = cn_inputList.length === keys.length; if (!isLen) return let result = true for (let i = 0; i < keys.length; i++) { if (keys[i].charAt(0) != cn_inputList[i].charAt(0)) { result = false } else { const keyItemList = keys[i].split('') const strList = cn_inputList[i].split('') for (let j = 0; j < strList.length; j++) { if (!strList[j]) break if (keyItemList[j] != strList[j]) { result = false } } } } if (result && isLen) { return dict[key]; } }); let strList = []; let singleDictList = [] const singleDict = self.dict for (let key of keyResult) { let keyList = key.split("'") // console.log('dict[key]', dict[key]) strList.push(dict[key].split(",")); for (let item of keyList) { // console.log('singleDict[item]', singleDict[item]) if (singleDict[item]) { singleDictList.push(singleDict[item].split("")); } } } singleDictList = Array.from(new Set(singleDictList.flat(2))) strList = strList .flat(2) .sort((a, b) => { if (b.length > a.length) return -1; }) .reverse(); const result = strList.concat(singleDictList) console.timeEnd("searchDict"); self.postMessage({ method: 'search', data: result, cn_input }); } }, false); const setCn_input = function (e) { let { cn_input, text } = e.data const singleDict = self.dict let itemList = [] for (let key in singleDict) { let value = singleDict[key] let valueList = value.split('') let item = valueList.find(item => item === text) if (item) { itemList.push(key) } } let str = '' const cn_inputList = cn_input.split("'") for (let i = 0; i < cn_inputList.length; i++) { let item = cn_inputList[i] for (let key of itemList) { let list = key.split('') for (let k = 0; k < list.length; k++) { if (key.charAt(k) === item.charAt(k)) { str = item } } } } let result = cn_inputList.filter(item => item != str).join("'") self.postMessage({ method: 'setCn_input', cn_input: result }); } // const findInitialCn = function (cn_input, data) { // console.time("for2"); // let strList = []; // let count = 0 // Object.keys(data).filter((key) => { // const keys = key.split("'"); // let i = 0; // const bool = keys.every((item, index) => { // ++count // if (index === 0) { // if (item.charAt(0) === cn_input.charAt(0)) { // return true; // } // } else { // i += 2; // if (item.charAt() === cn_input.charAt(i)) return true; // } // }); // if (bool) { // strList.push(data[key]); // } // }); // console.log('count', count, strList) // console.timeEnd("for2"); // let keys = cn_input.split("'") // strList = strList.filter(item => item.length === keys.length); // return strList // }