diff --git a/resources/Succubus.js b/resources/Succubus.js index 83ab9cb..6488d0d 100644 --- a/resources/Succubus.js +++ b/resources/Succubus.js @@ -1,6 +1,6 @@ "use strict"; /* - Copyright 2024 Qiong-Mengzi. + Copyright 2024-2026 Qiong-Mengzi. This code is under Do What the Fuck You Want to Public License. 放一下乱七八糟的东西,反正没人看就对了 @@ -78,34 +78,30 @@ var Succubus; } Succubus.ClipboardCopyByClassT = ClipboardCopyByClassT; function Searching(text, target, format) { - var t_text = JSON_DeepCopy(text); - var t_text_score = new Array(text.length); - var t_IndexTable = new Array(text.length); + const t_text = JSON_DeepCopy(text); + const t_text_score = new Array(text.length); + const t_IndexTable = new Array(text.length); for (var i = 0; i < text.length; i++) { t_text_score[i] = format(t_text[i], target); t_IndexTable[i] = i; } // Sorting - // 之后想到什么算法再写罢...(如果谁会快速排序能否帮忙写一下w) - // I don't know how to quickly sort. - // If anyone knows, could you help me write it down? Thank you. - for (var j = 0; j < text.length - 1; j++) { - for (var i = 0; i < text.length - j - 1; i++) { - if (t_text_score[i] > t_text_score[i + 1]) { - // Swap scores - let sort_t_num = t_text_score[i]; - t_text_score[i] = t_text_score[i + 1]; - t_text_score[i + 1] = sort_t_num; - // Swap Index - let t_sort_index = t_IndexTable[i]; - t_IndexTable[i] = t_IndexTable[i + 1]; - t_IndexTable[i + 1] = t_sort_index; - } - } - } - return [t_IndexTable, t_text_score]; + // 创建索引 + const indices = Array.from({ length: t_text_score.length }, (_, i) => i); + // 根据t_text_score排序索引 + indices.sort((a, b) => t_text_score[a] - t_text_score[b]); + // 用排序好的索引排序t_text_score和t_IndexTable + const sorted_t_IndexTable = indices.map(i => t_IndexTable[i]); + const sorted_t_text_score = indices.map(i => t_text_score[i]); + return [sorted_t_IndexTable, sorted_t_text_score]; } Succubus.Searching = Searching; + /** + * TODO: 写文档说明这一大堆是什么东西 + * @param text + * @param target + * @returns + */ function BaseTextMatchCurse(text, target) { let reg = RegExp('[' + target + ']+', 'ig'); let result = text.match(reg); diff --git a/resources/Succubus.ts b/resources/Succubus.ts index 55bfc02..f502f46 100644 --- a/resources/Succubus.ts +++ b/resources/Succubus.ts @@ -1,5 +1,5 @@ /* - Copyright 2024 Qiong-Mengzi. + Copyright 2024-2026 Qiong-Mengzi. This code is under Do What the Fuck You Want to Public License. 放一下乱七八糟的东西,反正没人看就对了 @@ -7,7 +7,7 @@ namespace Succubus { // 获取JSON数据 - export async function FetchJSON(url: string) { + export async function FetchJSON(url: string): Promise { const response = await fetch(url) if (!response.ok) { throw new Error('[Succubus] FetchJSON: Failed to fetch resource. ' + String(response.status) + ' ' + response.statusText) @@ -16,7 +16,7 @@ namespace Succubus { } // 获取文本数据 - export async function FetchText(url: string) { + export async function FetchText(url: string): Promise { const response = await fetch(url) if (!response.ok) { throw new Error('[Succubus] FetchJSON: Failed to fetch resource. ' + String(response.status) + ' ' + response.statusText) @@ -25,44 +25,54 @@ namespace Succubus { } // 复制文本到剪贴板 - export function ClipboardCopyById(id: string, text: string, success_event_curse: CallableFunction = (function () { }), failed_event_curse: CallableFunction = (function () { console.log('Clipboard Write Failed.') })) { - var element = document.getElementById(id); + export function ClipboardCopyById( + id: string, + text: string, + success_event_curse: CallableFunction = (function (): void { }), + failed_event_curse: CallableFunction = (function (): void { console.log('Clipboard Write Failed.') }) + ): void { + var element: HTMLElement | null = document.getElementById(id); if (element == null) { throw new Error('[Succubus] ClipboardCopy: Cannot Find The Element.') } - element.addEventListener('click', (function () { + element.addEventListener('click', (function (): void { navigator.clipboard.writeText(text) .then( - () => { + (): void => { success_event_curse() }, - () => { + (): void => { failed_event_curse() } ) })) } - export function JSON_DeepCopy(obj: Array | string | number) { + export function JSON_DeepCopy(obj: Array | string | number): any { return JSON.parse(JSON.stringify(obj)) } // ありがとう,私の暗い世界の小さな太陽 // 复制文本到剪贴板 // 适用于有多个相同用途的复制按钮(所以上面那个函数到底有什么用啊) - export function ClipboardCopyByClassT(class_id: string, text: Array, success_event_curse: CallableFunction = () => { }, failed_event_curse: CallableFunction = () => { console.log('Clipboard Write Failed.') }) { - var elements = document.getElementsByClassName(class_id); - for (var i = 0; i < elements.length; i++) { - var element = elements.item(i) as HTMLElement; + export function ClipboardCopyByClassT( + class_id: string, + text: Array, + success_event_curse: CallableFunction = (): void => { }, + failed_event_curse: CallableFunction = (): void => { console.log('Clipboard Write Failed.') } + ): void { + var elements: HTMLCollectionOf = document.getElementsByClassName(class_id); + for (var i: number = 0; i < elements.length; i++) { + var element: HTMLElement = elements.item(i) as HTMLElement; element.addEventListener('click', ((): any => { - let use_text = text[i]; // 捕获当前循环的文本值 - let sc = success_event_curse - let fc = failed_event_curse - return () => { + let use_text: string = text[i]; // 捕获当前循环的文本值 + let sc: CallableFunction = success_event_curse + let fc: CallableFunction = failed_event_curse + return (): void => { navigator.clipboard.writeText(use_text) .then( - () => sc(), - () => fc() + (): any => sc(), + (): any => fc() ); } })()); @@ -73,57 +83,54 @@ namespace Succubus { interface SearchingFormat { (text: string, target: string): number } - export function Searching(text: Array, target: string, format: SearchingFormat) { - var t_text: Array = JSON_DeepCopy(text) - var t_text_score: Array = new Array(text.length) - var t_IndexTable: Array = new Array(text.length) - for (var i = 0; i < text.length; i++) { + export function Searching(text: Array, target: string, format: SearchingFormat): number[][] { + const t_text: Array = JSON_DeepCopy(text) + const t_text_score: Array = new Array(text.length) + const t_IndexTable: Array = new Array(text.length) + for (var i: number = 0; i < text.length; i++) { t_text_score[i] = format(t_text[i], target) t_IndexTable[i] = i } // Sorting - // 之后想到什么算法再写罢...(如果谁会快速排序能否帮忙写一下w) - // I don't know how to quickly sort. - // If anyone knows, could you help me write it down? Thank you. - for (var j = 0; j < text.length - 1; j++) { - for (var i = 0; i < text.length - j - 1; i++) { - if (t_text_score[i] > t_text_score[i + 1]) { - // Swap scores - let sort_t_num = t_text_score[i] - t_text_score[i] = t_text_score[i + 1] - t_text_score[i + 1] = sort_t_num - // Swap Index - let t_sort_index = t_IndexTable[i] - t_IndexTable[i] = t_IndexTable[i + 1] - t_IndexTable[i + 1] = t_sort_index - } - } - } - return [t_IndexTable, t_text_score] + // 创建索引 + const indices: number[] = Array.from({ length: t_text_score.length }, (_, i) => i) + // 根据t_text_score排序索引 + indices.sort((a, b) => t_text_score[a] - t_text_score[b]) + // 用排序好的索引排序t_text_score和t_IndexTable + const sorted_t_IndexTable: number[] = indices.map(i => t_IndexTable[i]) + const sorted_t_text_score: number[] = indices.map(i => t_text_score[i]) + return [sorted_t_IndexTable, sorted_t_text_score] } - export function BaseTextMatchCurse(text: string, target: string) { - let reg = RegExp('[' + target + ']+', 'ig') - let result = text.match(reg) + + /** + * TODO: 写文档说明这一大堆是什么东西 + * @param text + * @param target + * @returns + */ + export function BaseTextMatchCurse(text: string, target: string): number { + let reg: RegExp = RegExp('[' + target + ']+', 'ig') + let result: RegExpMatchArray | null = text.match(reg) if (result == null) return -1 - let max_length = 0 - let great_of_middle_length = 0 - let match_num = result.length - let length_table = result.map(x => x.length) - for (let i = 0; i < length_table.length; i++) { - let lobj = length_table[i] + let max_length: number = 0 + let great_of_middle_length: number = 0 + let match_num: number = result.length + let length_table: number[] = result.map(x => x.length) + for (let i: number = 0; i < length_table.length; i++) { + let lobj: number = length_table[i] if (lobj > max_length) max_length = lobj } - for (let i = 0; i < length_table.length; i++) { - let lobj = length_table[i] + for (let i: number = 0; i < length_table.length; i++) { + let lobj: number = length_table[i] if (lobj > max_length / 2) great_of_middle_length += 1 } return (max_length * 0.9 + match_num * 0.7 / text.length + great_of_middle_length * 0.4 / text.length) / 2 } - export function IndexMap(obj: any[], index: number[]){ - return index.map(x=>obj[x]) + export function IndexMap(obj: any[], index: number[]): any[] { + return index.map(x => obj[x]) } }