From f321d7d13d9d0587a7e287a4f1ab030e44d53903 Mon Sep 17 00:00:00 2001 From: Haoming Date: Tue, 7 Apr 2026 11:18:31 +0800 Subject: [PATCH] update --- LICENSE | 2 +- javascript/pf_configs.js | 23 +++++--------- javascript/pf_ui.js | 24 +++++++------- scripts/pf_settings.py | 67 ++++++++++------------------------------ 4 files changed, 36 insertions(+), 80 deletions(-) diff --git a/LICENSE b/LICENSE index f727380..9a4be85 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 Haoming +Copyright (c) 2026 Haoming Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/javascript/pf_configs.js b/javascript/pf_configs.js index d3f2e6f..bbbfc8c 100644 --- a/javascript/pf_configs.js +++ b/javascript/pf_configs.js @@ -52,9 +52,11 @@ class pfConfigs { /** @returns {string[]} */ static cacheCards() { - const cards = document.getElementById("pf_embeddings").querySelector("textarea").value.split("\n"); - const config = document.getElementById("setting_pf_exclusion").querySelector("textarea").value; - for (const tag of config.split(",").map((t) => t.trim())) if (tag) cards.push(tag); + const cards = new Set(); + const embeddings = document.getElementById("pf_embeddings").querySelector("textarea").value; + for (const tag of embeddings.split("\n").map((t) => t.trim())) if (tag) cards.add(tag); + const settings = document.getElementById("setting_pf_exclusion").querySelector("textarea").value; + for (const tag of settings.split(",").map((t) => t.trim())) if (tag) cards.add(tag); return cards; } @@ -67,21 +69,10 @@ class pfConfigs { for (const line of config.split("\n")) { const [tag, words] = line.split(":"); - const mainTag = tag.trim(); - - for (const word of words.split(",").map((part) => part.trim())) { - if (word === mainTag) continue; - - const pattern = this.#parseRegExp(word); - alias.set(pattern, mainTag); - } + const pattern = new RegExp(words); + alias.set(pattern, tag); } return alias; } - - /** @param {string} input @returns {RegExp} */ - static #parseRegExp(input) { - return new RegExp(`^${input.trimStart("^").trimEnd("$")}$`); - } } diff --git a/javascript/pf_ui.js b/javascript/pf_ui.js index aa61312..7739022 100644 --- a/javascript/pf_ui.js +++ b/javascript/pf_ui.js @@ -1,10 +1,10 @@ class pfUI { - /** @param {string} text @param {string} tip @returns {HTMLButtonElement} */ - static #button(text, tip) { + /** @param {string} text @param {string} hint @returns {HTMLButtonElement} */ + static #button(text, hint) { const button = document.createElement("button"); button.classList.add(["lg", "secondary", "gradio-button"]); button.textContent = text; - if (tip) button.title = tip; + if (hint) button.title = hint; return button; } @@ -14,10 +14,8 @@ class pfUI { label.classList.add("pf-checkbox"); label.removeAttribute("id"); - const checkbox = label.children[0]; - checkbox.checked = value; - const span = label.children[1]; - span.textContent = text; + label.children[0].checked = value; + label.children[1].textContent = text; return label; } @@ -27,26 +25,26 @@ class pfUI { const formatter = document.createElement("div"); formatter.id = "le-formatter"; + const autoCB = this.#checkbox(autoRun, "Auto Format"); + const dedupeCB = this.#checkbox(dedupe, "Remove Duplicates"); + const underscoreCB = this.#checkbox(rmUnderscore, "Remove Underscores"); + const manualBtn = this.#button("Format", "Manually Format the Prompts"); manualBtn.style.display = autoRun ? "none" : "flex"; const refreshBtn = this.#button("Reload", "Reload Exclusion & Alias"); refreshBtn.style.display = rmUnderscore ? "flex" : "none"; - const autoCB = this.#checkbox(autoRun, "Auto Format"); - const dedupeCB = this.#checkbox(dedupe, "Remove Duplicates"); - const underscoreCB = this.#checkbox(rmUnderscore, "Remove Underscores"); - formatter.appendChild(autoCB); formatter.appendChild(manualBtn); formatter.appendChild(dedupeCB); formatter.appendChild(underscoreCB); formatter.appendChild(refreshBtn); - formatter.manual = manualBtn; - formatter.refresh = refreshBtn; formatter.auto = autoCB.children[0]; + formatter.manual = manualBtn; formatter.dedupe = dedupeCB.children[0]; formatter.underscore = underscoreCB.children[0]; + formatter.refresh = refreshBtn; return formatter; } diff --git a/scripts/pf_settings.py b/scripts/pf_settings.py index 13ab61e..703c83f 100644 --- a/scripts/pf_settings.py +++ b/scripts/pf_settings.py @@ -62,58 +62,28 @@ def on_settings(): .needs_reload_ui(), ) - opts.add_option( - "pf_startinauto", - OptionInfo( - True, "Launch the WebUI with Auto Format enabled", **args - ).needs_reload_ui(), - ) + for label, desc in [ + ("pf_startinauto", 'Launch the WebUI with "Auto Format" enabled'), + ("pf_startwithdedupe", 'Launch the WebUI with "Remove Duplicates" enabled'), + ("pf_startwithrmudscr", 'Launch the WebUI with "Remove Underscores" enabled'), + ("pf_appendcomma", "Append a comma at the end of each line"), + ("pf_onpaste", "Format the texts pasted from clipboard"), + ("pf_booru", 'Process the "Booru Structure" on Paste'), + ]: + opts.add_option(label, OptionInfo(True, desc, **args).needs_reload_ui()) - opts.add_option( - "pf_startwithdedupe", - OptionInfo( - True, "Launch the WebUI with Remove Duplicates enabled", **args - ).needs_reload_ui(), - ) - - opts.add_option( - "pf_startwithrmudscr", - OptionInfo( - True, "Launch the WebUI with Remove Underscores enabled", **args - ).needs_reload_ui(), - ) - - opts.add_option( - "pf_appendcomma", - OptionInfo(True, "Append a comma at the end of each line", **args) - .info("only take effect when there are more than 1 line") - .needs_reload_ui(), - ) - - opts.add_option( - "pf_onpaste", - OptionInfo( - False, "Format the texts pasted from clipboard", **args - ).needs_reload_ui(), - ) - - opts.add_option( - "pf_booru", - OptionInfo(False, 'Process the "Booru Structure"', **args) - .info("only take effect when the above option is enabled") - .needs_reload_ui(), - ) + _SCORE = "score_1, score_2, score_3, score_7, score_8, score_9" opts.add_option( "pf_exclusion", OptionInfo( - default="", - label="Tags excluded from Remove Underscores", + default=_SCORE, + label='Tags to exclude from "Remove Underscores"', component=Textbox, component_args={ - "placeholder": "score_9, score_8_up, score_7_up", - "max_lines": 4, + "placeholder": _SCORE, "lines": 1, + "max_lines": 2, }, **args, ).info("requires Reload button"), @@ -123,20 +93,17 @@ def on_settings(): "pf_alias", OptionInfo( default="", - label="Tag Alias for Remove Duplicates", + label='Tag Alias for "Remove Duplicates"', component=Textbox, component_args={ - "placeholder": "1girl: girl, woman, lady\nadult: \\d+\\s*(y\\.?o\\.?|[Yy]ear[s]? [Oo]ld)", + "placeholder": "1girl:girl|woman|lady", "max_lines": 8, "lines": 2, }, **args, ) .info("requires Reload button") - .link( - "Regexper", - "https://regexper.com/#%5Cd%2B%5Cs*%28y%5C.%3Fo%5C.%3F%7C%5BYy%5Dear%5Bs%5D%3F%20%5BOo%5Dld%29", - ), + .link("RegExr", "https://regexr.com/"), )