#168 New Feature: Prompt Blacklist

新功能:提示词黑名单
pull/174/head
Physton 2023-08-16 17:45:55 +08:00
parent bc407650dc
commit 80f5618024
12 changed files with 535 additions and 60 deletions

130
i18n.json
View File

@ -140,7 +140,15 @@
"tags-copyright": "提示词整合来源 路过银河(知乎)、未知作者(Google Drive)、互联网等等,感谢这些作者的无私奉献!",
"reset_default_color": "重置为默认颜色",
"clear_color": "清除颜色",
"tags_color": "标签颜色"
"tags_color": "标签颜色",
"keywords_blacklist": "关键词黑名单",
"blacklist_desc": "设置为黑名单的关键词,将被插件自动过滤!",
"prompt_blacklist_list": "提示词 黑名单列表",
"negative_prompt_blacklist_list": "反向提示词 黑名单列表",
"lora_blacklist_list": "Lora 黑名单列表",
"lycoris_blacklist_list": "Lycoris 黑名单列表",
"embedding_blacklist_list": "Embedding 黑名单列表",
"one_keyword_per_line": "每行一个关键词"
}
},
{
@ -282,7 +290,15 @@
"tags-copyright": "提示詞整合來源 路过银河(知乎)、未知作者(Google Drive)、互聯網等等,感謝這些作者的無私奉獻!",
"reset_default_color": "重置為預設顏色",
"clear_color": "清除顏色",
"tags_color": "標籤顏色"
"tags_color": "標籤顏色",
"keywords_blacklist": "關鍵詞黑名單",
"blacklist_desc": "設置為黑名單的關鍵詞,將被插件自動過濾!",
"prompt_blacklist_list": "提示詞 黑名單列表",
"negative_prompt_blacklist_list": "反向提示詞 黑名單列表",
"lora_blacklist_list": "Lora 黑名單列表",
"lycoris_blacklist_list": "Lycoris 黑名單列表",
"embedding_blacklist_list": "Embedding 黑名單列表",
"one_keyword_per_line": "每行一個關鍵詞"
}
},
{
@ -424,7 +440,15 @@
"tags-copyright": "提示詞整合來源 路过银河(知乎)、未知作者(Google Drive)、互聯網等等,感謝這些作者的無私奉獻!",
"reset_default_color": "重置為預設顏色",
"clear_color": "清除顏色",
"tags_color": "標籤顏色"
"tags_color": "標籤顏色",
"keywords_blacklist": "關鍵字黑名單",
"blacklist_desc": "設定為黑名單的關鍵字將被插件自動過濾!",
"prompt_blacklist_list": "提示詞 黑名單清單",
"negative_prompt_blacklist_list": "反向提示詞 黑名單清單",
"lora_blacklist_list": "Lora 黑名單清單",
"lycoris_blacklist_list": "Lycoris 黑名單清單",
"embedding_blacklist_list": "Embedding 黑名單清單",
"one_keyword_per_line": "每行一個關鍵字"
}
},
{
@ -566,7 +590,15 @@
"tags-copyright": "Prompt words integration source from 路过银河(Zhihu)、unknown author(Google Drive)、internet, etc. Thanks to these selfless contributors!",
"reset_default_color": "Reset to Default Color",
"clear_color": "Clear Color",
"tags_color": "Tags Color"
"tags_color": "Tags Color",
"keywords_blacklist": "Keywords Blacklist",
"blacklist_desc": "Keywords set as blacklist will be automatically filtered by the plugin!",
"prompt_blacklist_list": "Prompt Blacklist List",
"negative_prompt_blacklist_list": "Negative Prompt Blacklist List",
"lora_blacklist_list": "Lora Blacklist",
"lycoris_blacklist_list": "Lycoris Blacklist",
"embedding_blacklist_list": "Embedding Blacklist",
"one_keyword_per_line": "One keyword per line"
}
},
{
@ -719,7 +751,15 @@
"tags-copyright": "مصدر دمج كلمات التلميح من 路过银河(Zhihu)، مؤلف غير معروف (جوجل درايف)، الإنترنت، وما إلى ذلك. شكرًا لهؤلاء المساهمين الذين يعملون بلا مقابل!",
"reset_default_color": "إعادة تعيين اللون الافتراضي",
"clear_color": "مسح اللون",
"tags_color": "لون العلامات"
"tags_color": "لون العلامات",
"keywords_blacklist": "قائمة الكلمات الرئيسية المحظورة",
"blacklist_desc": "تُعد الكلمات المحظورة المُعينة كقائمة سوداء ستتم تصفيتها تلقائيًا بواسطة المكوِّن الإضافي!",
"prompt_blacklist_list": "قائمة الكلمات المحظورة للتلميح",
"negative_prompt_blacklist_list": "قائمة الكلمات المحظورة للتلميح السلبي",
"lora_blacklist_list": "قائمة Lora السوداء",
"lycoris_blacklist_list": "قائمة Lycoris السوداء",
"embedding_blacklist_list": "قائمة Embedding السوداء",
"one_keyword_per_line": "كلمة رئيسية واحدة في كل سطر"
}
},
{
@ -960,7 +1000,15 @@
"tags-copyright": "Source d'intégration des mots d'invite provenant de 路过银河(Zhihu)、auteur inconnu(Google Drive)、internet, etc. Merci à ces contributeurs altruistes !",
"reset_default_color": "Réinitialiser la couleur par défaut",
"clear_color": "Effacer la couleur",
"tags_color": "Couleur des étiquettes"
"tags_color": "Couleur des étiquettes",
"keywords_blacklist": "Liste noire des mots-clés",
"blacklist_desc": "Les mots-clés définis dans la liste noire seront automatiquement filtrés par le plugin !",
"prompt_blacklist_list": "Liste de mots d'invite interdits",
"negative_prompt_blacklist_list": "Liste négative de mots d'invite interdits",
"lora_blacklist_list": "Liste noire Lora",
"lycoris_blacklist_list": "Liste noire Lycoris",
"embedding_blacklist_list": "Liste noire d'embedding",
"one_keyword_per_line": "Un mot-clé par ligne"
}
},
{
@ -1116,7 +1164,15 @@
"tags-copyright": "Quelle für die Integration von Hinweiswörtern von 路过银河(Zhihu)、unbekannter Autor(Google Drive)、Internet usw. Vielen Dank an diese selbstlosen Beitragenden!",
"reset_default_color": "Auf Standardfarbe zurücksetzen",
"clear_color": "Farbe löschen",
"tags_color": "Tag-Farbe"
"tags_color": "Tag-Farbe",
"keywords_blacklist": "Schwarze Liste der Schlüsselwörter",
"blacklist_desc": "Schlüsselwörter, die als schwarze Liste festgelegt sind, werden automatisch vom Plugin gefiltert!",
"prompt_blacklist_list": "Liste der gesperrten Eingabeaufforderungen",
"negative_prompt_blacklist_list": "Liste der negativen gesperrten Eingabeaufforderungen",
"lora_blacklist_list": "Schwarze Liste Lora",
"lycoris_blacklist_list": "Schwarze Liste Lycoris",
"embedding_blacklist_list": "Schwarze Liste der Einbettung",
"one_keyword_per_line": "Ein Schlüsselwort pro Zeile"
}
},
{
@ -1322,7 +1378,15 @@
"tags-copyright": "Fonte di integrazione delle parole di suggerimento da 路过银河(Zhihu)、autore sconosciuto(Google Drive)、internet, ecc. Grazie a questi generosi contributori!",
"reset_default_color": "Ripristina colore predefinito",
"clear_color": "Cancella colore",
"tags_color": "Colore dei tag"
"tags_color": "Colore dei tag",
"keywords_blacklist": "Elenco nero delle parole chiave",
"blacklist_desc": "Le parole chiave impostate come elenco nero saranno automaticamente filtrate dal plugin!",
"prompt_blacklist_list": "Elenco delle parole chiave non consentite",
"negative_prompt_blacklist_list": "Elenco delle parole chiave negative non consentite",
"lora_blacklist_list": "Elenco nero di Lora",
"lycoris_blacklist_list": "Elenco nero di Lycoris",
"embedding_blacklist_list": "Elenco nero dell'embedding",
"one_keyword_per_line": "Una parola chiave per riga"
}
},
{
@ -1463,7 +1527,15 @@
"tags-copyright": "プロンプトの単語統合元 路过银河(Zhihu)、不明な作者(Google Drive)、インターネットなど、これらの無私の貢献者に感謝します!",
"reset_default_color": "デフォルトの色にリセット",
"clear_color": "色をクリア",
"tags_color": "タグの色"
"tags_color": "タグの色",
"keywords_blacklist": "キーワードのブラックリスト",
"blacklist_desc": "ブラックリストに設定されたキーワードは、プラグインによって自動的にフィルタリングされます!",
"prompt_blacklist_list": "プロンプトのブラックリストリスト",
"negative_prompt_blacklist_list": "ネガティブプロンプトのブラックリストリスト",
"lora_blacklist_list": "Loraのブラックリスト",
"lycoris_blacklist_list": "Lycorisのブラックリスト",
"embedding_blacklist_list": "Embeddingのブラックリスト",
"one_keyword_per_line": "1行に1つのキーワード"
}
},
{
@ -1629,7 +1701,15 @@
"tags-copyright": "프롬프트 단어 통합 출처: 路过银河(Zhihu)、알 수 없는 작성자(Google Drive)、인터넷 등. 이러한 무비한 기여자들에게 감사드립니다!",
"reset_default_color": "기본 색상으로 재설정",
"clear_color": "색상 지우기",
"tags_color": "태그 색상"
"tags_color": "태그 색상",
"keywords_blacklist": "키워드 블랙리스트",
"blacklist_desc": "블랙리스트로 설정된 키워드는 플러그인에 의해 자동으로 필터링됩니다!",
"prompt_blacklist_list": "프롬프트 블랙리스트 목록",
"negative_prompt_blacklist_list": "부정적인 프롬프트 블랙리스트 목록",
"lora_blacklist_list": "Lora 블랙리스트",
"lycoris_blacklist_list": "Lycoris 블랙리스트",
"embedding_blacklist_list": "Embedding 블랙리스트",
"one_keyword_per_line": "한 줄에 하나의 키워드"
}
},
{
@ -1885,7 +1965,15 @@
"tags-copyright": "Fonte de integração de palavras-chave de 路过银河(Zhihu)、autor desconhecido(Google Drive)、internet, etc. Obrigado a esses contribuidores altruístas!",
"reset_default_color": "Redefinir para cor padrão",
"clear_color": "Limpar cor",
"tags_color": "Cor das tags"
"tags_color": "Cor das tags",
"keywords_blacklist": "Lista negra de palavras-chave",
"blacklist_desc": "As palavras-chave definidas como lista negra serão automaticamente filtradas pelo plugin!",
"prompt_blacklist_list": "Lista de palavras-chave proibidas",
"negative_prompt_blacklist_list": "Lista negativa de palavras-chave proibidas",
"lora_blacklist_list": "Lista negra de Lora",
"lycoris_blacklist_list": "Lista negra de Lycoris",
"embedding_blacklist_list": "Lista negra de Embedding",
"one_keyword_per_line": "Uma palavra-chave por linha"
}
},
{
@ -2041,7 +2129,15 @@
"tags-copyright": "Источник интеграции ключевых слов от 路过银河(Zhihu)、неизвестный автор(Google Drive)、интернет и т.д. Благодарим этих бескорыстных участников!",
"reset_default_color": "Сбросить настройки цвета",
"clear_color": "Очистить цвет",
"tags_color": "Цвет тегов"
"tags_color": "Цвет тегов",
"keywords_blacklist": "Черный список ключевых слов",
"blacklist_desc": "Ключевые слова, установленные в черный список, будут автоматически фильтроваться плагином!",
"prompt_blacklist_list": "Список запрещенных ключевых слов",
"negative_prompt_blacklist_list": "Список запрещенных отрицательных ключевых слов",
"lora_blacklist_list": "Черный список Lora",
"lycoris_blacklist_list": "Черный список Lycoris",
"embedding_blacklist_list": "Черный список Embedding",
"one_keyword_per_line": "Одно ключевое слово на строку"
}
},
{
@ -2212,7 +2308,15 @@
"tags-copyright": "Fuente de integración de palabras clave de 路过银河(Zhihu)、autor desconocido(Google Drive)、internet, etc. ¡Gracias a estos generosos colaboradores!",
"reset_default_color": "Restablecer a color predeterminado",
"clear_color": "Borrar color",
"tags_color": "Color de las etiquetas"
"tags_color": "Color de las etiquetas",
"keywords_blacklist": "Lista negra de palabras clave",
"blacklist_desc": "¡Las palabras clave establecidas como lista negra serán filtradas automáticamente por el complemento!",
"prompt_blacklist_list": "Lista negra de palabras clave de la sugerencia",
"negative_prompt_blacklist_list": "Lista negra de palabras clave negativas de la sugerencia",
"lora_blacklist_list": "Lista negra de Lora",
"lycoris_blacklist_list": "Lista negra de Lycoris",
"embedding_blacklist_list": "Lista negra de Embedding",
"one_keyword_per_line": "Una palabra clave por línea"
}
},
{

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -29,6 +29,7 @@
:translate-api-config="translateApiConfig"
@click:translate-api="onTranslateApiClick"
@click:prompt-format="onPromptFormatClick"
@click:blacklist="onBlacklistClick"
v-model:tag-complete-file="tagCompleteFile"
v-model:only-csv-on-auto="onlyCsvOnAuto"
@click:select-language="onSelectLanguageClick"
@ -48,6 +49,7 @@
:hide-group-tags="item.hideGroupTags"
v-model:group-tags-color="groupTagsColor"
@update:hide-group-tags="onUpdateHideGroupTags(item.id, $event)"
:blacklist="blacklist"
></physton-prompt>
</template>
<translate-setting ref="translateSetting" v-model:language-code="languageCode"
@ -71,6 +73,10 @@
v-model:auto-keep-weight-one="autoKeepWeightOne"
v-model:auto-break-before-wrap="autoBreakBeforeWrap"
v-model:auto-break-after-wrap="autoBreakAfterWrap"></prompt-format>
<blacklist ref="blacklist" v-model:language-code="languageCode"
:translate-apis="translateApis"
:languages="languages"
@update:blacklist="onUpdateBlacklist"></blacklist>
<history ref="history" v-model:language-code="languageCode"
:translate-apis="translateApis" :languages="languages"
v-model:tag-complete-file="tagCompleteFile"
@ -123,6 +129,7 @@ import History from "@/components/history.vue";
import IconSvg from "@/components/iconSvg.vue";
import ExtensionCss from "@/components/extensionCss.vue";
import PromptFormat from "@/components/promptFormat.vue";
import Blacklist from "@/components/blacklist.vue";
import PackagesState from "@/components/packagesState.vue";
import ChatgptPrompt from "@/components/chatgptPrompt.vue";
import About from "@/components/about.vue";
@ -137,6 +144,7 @@ export default {
ChatgptPrompt,
PackagesState,
PromptFormat,
Blacklist,
ExtensionCss,
IconSvg,
History,
@ -282,6 +290,8 @@ export default {
groupTags: [],
groupTagsColor: {},
blacklist: {},
}
},
watch: {
@ -512,7 +522,7 @@ export default {
},
init() {
this.loadExtraNetworks()
let dataListsKeys = ['languageCode', 'autoTranslate', 'autoTranslateToEnglish', 'autoTranslateToLocal', 'autoRemoveSpace', 'autoRemoveLastComma', 'autoKeepWeightZero', 'autoKeepWeightOne', 'autoBreakBeforeWrap', 'autoBreakAfterWrap', /*'hideDefaultInput', */'translateApi', 'enableTooltip', 'tagCompleteFile', 'onlyCsvOnAuto', 'extensionSelect.minimalist', 'groupTagsColor']
let dataListsKeys = ['languageCode', 'autoTranslate', 'autoTranslateToEnglish', 'autoTranslateToLocal', 'autoRemoveSpace', 'autoRemoveLastComma', 'autoKeepWeightZero', 'autoKeepWeightOne', 'autoBreakBeforeWrap', 'autoBreakAfterWrap', /*'hideDefaultInput', */'translateApi', 'enableTooltip', 'tagCompleteFile', 'onlyCsvOnAuto', 'extensionSelect.minimalist', 'groupTagsColor', 'blacklist']
this.prompts.forEach(item => {
dataListsKeys.push(item.hideDefaultInputKey)
dataListsKeys.push(item.hidePanelKey)
@ -637,6 +647,10 @@ export default {
}
}
if (data.blacklist !== null) {
this.blacklist = data.blacklist
}
this.updateTranslateApiConfig()
this.$refs.extensionCss.init()
@ -678,6 +692,7 @@ export default {
// this.$refs.about.open()
// this.$refs.chatgptPrompt.open()
// this.$refs.promptFormat.open()
// this.$refs.blacklist.open()
// this.$refs.translateSetting.open(this.translateApi)
/*this.onShowFavorite('phystonPrompt_txt2img_prompt', {
clientY: 150,
@ -735,6 +750,9 @@ export default {
onPromptFormatClick(e) {
this.$refs.promptFormat.open(e)
},
onBlacklistClick(e) {
this.$refs.blacklist.open(e)
},
onSelectLanguageClick(e) {
this.$refs.selectLanguage.open(e)
},
@ -910,6 +928,9 @@ export default {
}*/
window.location.href = newUrl
},
onUpdateBlacklist(data) {
this.blacklist = data
},
},
}
</script>

View File

@ -0,0 +1,143 @@
<template>
<div class="physton-prompt-blacklist" v-if="isOpen" @click="">
<div class="blacklist-main" @click.stop>
<div class="blacklist-body" @click.stop>
<div class="blacklist-desc">{{ getLang('blacklist_desc') }}</div>
<div class="blacklist-group">
<div class="group-title">{{ getLang('prompt_blacklist_list') }}:</div>
<textarea class="group-content" :placeholder="getLang('one_keyword_per_line')" v-model="textarea.prompt"></textarea>
</div>
<div class="blacklist-group">
<div class="group-title">{{ getLang('negative_prompt_blacklist_list') }}:</div>
<textarea class="group-content" :placeholder="getLang('one_keyword_per_line')" v-model="textarea.negative_prompt"></textarea>
</div>
<div class="blacklist-wrap"></div>
<div class="blacklist-group">
<div class="group-title">{{ getLang('lora_blacklist_list') }}:</div>
<textarea class="group-content" :placeholder="getLang('one_keyword_per_line')" v-model="textarea.lora"></textarea>
</div>
<div class="blacklist-group">
<div class="group-title">{{ getLang('lycoris_blacklist_list') }}:</div>
<textarea class="group-content" :placeholder="getLang('one_keyword_per_line')" v-model="textarea.lycoris"></textarea>
</div>
<div class="blacklist-group">
<div class="group-title">{{ getLang('embedding_blacklist_list') }}:</div>
<textarea class="group-content" :placeholder="getLang('one_keyword_per_line')" v-model="textarea.embedding"></textarea>
</div>
<div class="blacklist-wrap"></div>
<div class="setting-btns">
<div class="blacklist-save hover-scale-120" @click="onSaveClick">{{ getLang('save') }}</div>
<div class="blacklist-close hover-scale-120" @click="onCloseClick">{{ getLang('close') }}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import LanguageMixin from "@/mixins/languageMixin";
import IconSvg from "@/components/iconSvg.vue";
export default {
name: 'Blacklist',
components: {IconSvg},
mixins: [LanguageMixin],
props: {
autoRemoveSpace: {
type: Boolean,
default: false,
},
autoRemoveLastComma: {
type: Boolean,
default: false,
},
autoKeepWeightZero: {
type: Boolean,
default: false,
},
autoKeepWeightOne: {
type: Boolean,
default: false,
},
autoBreakBeforeWrap: {
type: Boolean,
default: false,
},
autoBreakAfterWrap: {
type: Boolean,
default: false,
},
},
data() {
return {
isOpen: false,
data: {
prompt: [],
negative_prompt: [],
lora: [],
lycoris: [],
embedding: [],
},
textarea: {
prompt: '',
negative_prompt: '',
lora: '',
lycoris: '',
embedding: '',
},
}
},
emits: ['update:blacklist'],
computed: {},
mounted() {
},
methods: {
open() {
this.isOpen = true
this.data = {
prompt: [],
negative_prompt: [],
lora: [],
lycoris: [],
embedding: [],
}
this.textarea = {
prompt: '',
negative_prompt: '',
lora: '',
lycoris: '',
embedding: '',
}
this.gradioAPI.getData('blacklist').then(res => {
if (res) {
this.data.prompt = res.prompt || []
this.data.negative_prompt = res.negative_prompt || []
this.data.lora = res.lora || []
this.data.lycoris = res.lycoris || []
this.data.embedding = res.embedding || []
}
this.textarea.prompt = this.data.prompt.join('\n')
this.textarea.negative_prompt = this.data.negative_prompt.join('\n')
this.textarea.lora = this.data.lora.join('\n')
this.textarea.lycoris = this.data.lycoris.join('\n')
this.textarea.embedding = this.data.embedding.join('\n')
})
},
close() {
this.isOpen = false
},
onCloseClick() {
this.close()
},
onSaveClick() {
this.data.prompt = this.textarea.prompt.split('\n').filter(item => item)
this.data.negative_prompt = this.textarea.negative_prompt.split('\n').filter(item => item)
this.data.lora = this.textarea.lora.split('\n').filter(item => item)
this.data.lycoris = this.textarea.lycoris.split('\n').filter(item => item)
this.data.embedding = this.textarea.embedding.split('\n').filter(item => item)
this.gradioAPI.setData('blacklist', this.data)
this.close()
this.$emit('update:blacklist', this.data)
},
},
}
</script>

View File

@ -27,6 +27,11 @@
@click="$emit('click:promptFormat', $event)">
<icon-svg class="hover-scale-120" name="format"/>
</div>
<div class="extend-btn-item"
v-tooltip="getLang('keywords_blacklist')"
@click="$emit('click:blacklist', $event)">
<icon-svg class="hover-scale-120" name="blacklist"/>
</div>
<div class="extend-btn-item"
v-tooltip="getLang('theme_extension')"
@click="$emit('click:selectTheme', $event)">
@ -613,8 +618,12 @@ export default {
type: Object,
default: () => ({}),
},
blacklist: {
type: Object,
default: () => ({}),
},
},
emits: ['update:languageCode', 'update:autoTranslate', 'update:autoTranslateToEnglish', 'update:autoTranslateToLocal', 'update:autoRemoveSpace', 'update:autoRemoveLastComma', 'update:autoKeepWeightZero', 'update:autoKeepWeightOne', 'update:hideDefaultInput', 'update:hidePanel', 'update:enableTooltip', 'update:translateApi', 'click:translateApi', 'click:promptFormat', 'click:selectTheme', 'click:switchTheme', 'click:showAbout', 'click:selectLanguage', 'click:showHistory', 'click:showFavorite', 'refreshFavorites', 'click:showChatgpt', 'update:hideGroupTags', 'update:groupTagsColor'],
emits: ['update:languageCode', 'update:autoTranslate', 'update:autoTranslateToEnglish', 'update:autoTranslateToLocal', 'update:autoRemoveSpace', 'update:autoRemoveLastComma', 'update:autoKeepWeightZero', 'update:autoKeepWeightOne', 'update:hideDefaultInput', 'update:hidePanel', 'update:enableTooltip', 'update:translateApi', 'click:translateApi', 'click:promptFormat', 'click:blacklist', 'click:selectTheme', 'click:switchTheme', 'click:showAbout', 'click:selectLanguage', 'click:showHistory', 'click:showFavorite', 'refreshFavorites', 'click:showChatgpt', 'update:hideGroupTags', 'update:groupTagsColor'],
data() {
return {
prompt: '',

View File

@ -31,7 +31,14 @@ export default {
})
},
_setTagHeight(tag) {
setTimeout(() => {
let maxNum = 10
let interval = setInterval(() => {
// console.log(maxNum, tag)
maxNum--
if (maxNum <= 0) clearInterval(interval)
if (!this.$refs['promptTagValue-' + tag.id]) return false
if (!this.$refs['promptTagValue-' + tag.id][0]) return false
clearInterval(interval)
let $tag = this.$refs['promptTagValue-' + tag.id][0]
let height = $tag.offsetHeight
$tag.parentNode.style.height = height + 'px'
@ -41,7 +48,10 @@ export default {
if (this.$refs['promptTagDelete-' + tag.id]) {
this.$refs['promptTagDelete-' + tag.id][0].style.height = height + 'px'
}
}, 300)
}, 50)
},
_getTagType(tag) {
},
_setTagClass(tag) {
tag.isLora = false
@ -129,6 +139,23 @@ export default {
if (localValue !== null) tag.localValue = localValue
return tag
},
_isTagBlacklist(tag) {
if (typeof tag['type'] === 'string' && tag.type === 'wrap') return false
if (tag.isLora) {
if (this.blacklist.lora && this.blacklist.lora.includes(tag.loraName)) return true
} else if (tag.isLyco) {
if (this.blacklist.lycoris && this.blacklist.lycoris.includes(tag.lycoName)) return true
} else if (tag.isEmbedding) {
if (this.blacklist.embedding && this.blacklist.embedding.includes(tag.value)) return true
} else {
if (this.neg) {
if (this.blacklist.negative_prompt && this.blacklist.negative_prompt.includes(tag.value)) return true
} else {
if (this.blacklist.prompt && this.blacklist.prompt.includes(tag.value)) return true
}
}
return false
},
_appendTag(value, localValue = '', disabled = false, index = -1, type = 'text') {
if (value === '') return -1
// 唯一数:当前时间戳+随机数
@ -143,6 +170,7 @@ export default {
this._setTag(tag)
// value = common.setLayers(value, 0, '(', ')')
// value = common.setLayers(value, 0, '[', ']')
if (this._isTagBlacklist(tag)) return -1
if (index >= 0) {
// 插入到指定位置
this.tags.splice(index, 0, tag)

View File

@ -97,6 +97,7 @@
// .physton-prompt .prompt-header .setting-box
--pp-ph-sb-iconSvgApi-color: #4d4f4d;
--pp-ph-sb-iconSvgFormat-color: #4d4f4d;
--pp-ph-sb-iconSvgBlacklist-color: #4d4f4d;
--pp-ph-sb-iconSvgTheme-color: #4d4f4d;
--pp-ph-sb-iconSvgTranslate-color: #4d4f4d;
--pp-ph-sb-iconSvgEnglish-color: #4d4f4d;
@ -228,6 +229,7 @@
// .physton-prompt .prompt-header .setting-box
--pp-ph-sb-iconSvgApi-color: #b3b3b3;
--pp-ph-sb-iconSvgFormat-color: #b3b3b3;
--pp-ph-sb-iconSvgBlacklist-color: #b3b3b3;
--pp-ph-sb-iconSvgTheme-color: #b3b3b3;
--pp-ph-sb-iconSvgTranslate-color: #b3b3b3;
--pp-ph-sb-iconSvgEnglish-color: #b3b3b3;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="uuid-47d8e9b3-b933-4a65-8c3b-a1695a1545b9" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 119.46 128">
<path d="m0,0v128h91.44v-8.54H8.53V8.54h98.13v38.98h8.54V0H0Z"/>
<path d="m90.2,104.83c-3.14-.02-6.23-.75-9.05-2.14l24.74-31.49c3.22,3.66,5,8.36,5.04,13.23-.09,11.35-9.37,20.48-20.73,20.39,0,0,0,0,0,0Zm-20.7-20.4c.1-11.38,9.4-20.53,20.78-20.43,3.04.03,6.05.73,8.79,2.05l-24.66,31.44c-3.14-3.62-4.88-8.25-4.9-13.05h0Zm20.7-28.96c-16,.16-28.83,13.26-28.67,29.26s13.26,28.83,29.26,28.67c15.88-.16,28.68-13.09,28.67-28.97-.1-16.07-13.19-29.03-29.26-28.96ZM23.98,93.87h17.92v-8.54h-17.92v8.53h0Zm0-20.32h25.3v-8.52h-25.3v8.54-.02Zm0-20.3h37.63v-8.54H23.98s0,8.54,0,8.54Zm0-20.35h57.34v-8.54H23.98s0,8.54,0,8.54Z"/>
</svg>

After

Width:  |  Height:  |  Size: 793 B

View File

@ -205,6 +205,9 @@
--pp-ph-sb-iconSvgFormat-width: auto;
--pp-ph-sb-iconSvgFormat-height: 22px;
--pp-ph-sb-iconSvgFormat-color: #d81e06;
--pp-ph-sb-iconSvgBlacklist-width: auto;
--pp-ph-sb-iconSvgBlacklist-height: 22px;
--pp-ph-sb-iconSvgBlacklist-color: #d81e06;
--pp-ph-sb-iconSvgTheme-width: auto;
--pp-ph-sb-iconSvgTheme-height: 22px;
--pp-ph-sb-iconSvgTheme-color: #02b7fd;
@ -1354,6 +1357,73 @@
--ppf-fm-fl-fi-formatDesc-color: #fff;
--ppf-fm-fl-fi-formatDesc-margin-left: 10px;
// .physton-prompt-blacklist .blacklist-main
--ppb-blacklistMain-position: relative;
// .physton-prompt-blacklist .blacklist-main .blacklist-body
--ppb-bm-blacklistBody-display: flex;
--ppb-bm-blacklistBody-flex-wrap: wrap;
--ppb-bm-blacklistBody-width: 500px;
--ppb-bm-blacklistBody-position: relative;
--ppb-bm-blacklistBody-box-shadow: 0 0 3px @common-blue;
--ppb-bm-blacklistBody-border-radius: 6px 6px 4px 4px;
--ppb-bm-blacklistBody-background-color: #1e1e1ee6;
--ppb-bm-blacklistBody-transition: height .1s ease-in-out, width .1s ease-in-out;
--ppb-bm-blacklistBody-padding: 20px 40px;
--ppb-bm-blacklistBody-box-sizing: border-box;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .blacklist-wrap
--ppb-bm-bb-blacklistWrap-flex-basis: 100%;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .blacklist-desc
--ppb-bm-bb-blacklistDesc-color: @common-red;
--ppb-bm-bb-blacklistDesc-flex-basis: 100%;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .blacklist-group
--ppb-bm-bb-blacklistGroup-margin: 10px;
--ppb-bm-bb-blacklistGroup-flex-grow: 1;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .blacklist-group .group-title
--ppb-bm-bb-bg-groupTitle-font-size: 14px;
--ppb-bm-bb-bg-groupTitle-color: #fff;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .blacklist-group .group-content
--ppb-bm-bb-bg-groupContent-margin-top: 10px;
--ppb-bm-bb-bg-groupContent-width: 100%;
--ppb-bm-bb-bg-groupContent-height: 100px;
--ppb-bm-bb-bg-groupContent-resize: none;
--ppb-bm-bb-bg-groupContent-background: transparent;
--ppb-bm-bb-bg-groupContent-border: 1px solid #787878;
--ppb-bm-bb-bg-groupContent-color: #fff;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .setting-btns
--ppb-bm-bb-settingBtns-flex-basis: 100%;
--ppb-bm-bb-settingBtns-display: flex;
--ppb-bm-bb-settingBtns-justify-content: flex-end;
--ppb-bm-bb-settingBtns-align-items: center;
--ppb-bm-bb-settingBtns-margin-top: 10px;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .setting-btns .blacklist-save
--ppb-bm-bb-sb-blacklistSave-cursor: pointer;
--ppb-bm-bb-sb-blacklistSave-display: inline-block;
--ppb-bm-bb-sb-blacklistSave-padding: 0 40px;
--ppb-bm-bb-sb-blacklistSave-height: 40px;
--ppb-bm-bb-sb-blacklistSave-line-height: 40px;
--ppb-bm-bb-sb-blacklistSave-color: #fff;
--ppb-bm-bb-sb-blacklistSave-border-radius: 4px;
--ppb-bm-bb-sb-blacklistSave-margin-right: 10px;
// .physton-prompt-blacklist .blacklist-main .blacklist-body .setting-btns .blacklist-close
--ppb-bm-bb-sb-blacklistClose-cursor: pointer;
--ppb-bm-bb-sb-blacklistClose-display: inline-block;
--ppb-bm-bb-sb-blacklistClose-padding: 0 40px;
--ppb-bm-bb-sb-blacklistClose-height: 40px;
--ppb-bm-bb-sb-blacklistClose-line-height: 40px;
--ppb-bm-bb-sb-blacklistClose-color: @common-blue;
--ppb-bm-bb-sb-blacklistClose-background: transparent;
--ppb-bm-bb-sb-blacklistClose-border: 1px solid @common-blue;
--ppb-bm-bb-sb-blacklistClose-border-radius: 4px;
// .physton-packages-state
--pps-z-index: 1999;
@ -2332,6 +2402,7 @@
.setting-box {
.set-icon-svg(var(--pp-ph-sb-iconSvgApi-width), var(--pp-ph-sb-iconSvgApi-height), var(--pp-ph-sb-iconSvgApi-color), icon-svg-api);
.set-icon-svg(var(--pp-ph-sb-iconSvgFormat-width), var(--pp-ph-sb-iconSvgFormat-height), var(--pp-ph-sb-iconSvgFormat-color), icon-svg-format);
.set-icon-svg(var(--pp-ph-sb-iconSvgBlacklist-width), var(--pp-ph-sb-iconSvgBlacklist-height), var(--pp-ph-sb-iconSvgBlacklist-color), icon-svg-blacklist);
.set-icon-svg(var(--pp-ph-sb-iconSvgTheme-width), var(--pp-ph-sb-iconSvgTheme-height), var(--pp-ph-sb-iconSvgTheme-color), icon-svg-theme);
.set-icon-svg(var(--pp-ph-sb-iconSvgTranslate-width), var(--pp-ph-sb-iconSvgTranslate-height), var(--pp-ph-sb-iconSvgTranslate-color), icon-svg-translate);
.set-icon-svg(var(--pp-ph-sb-iconSvgEnglish-width), var(--pp-ph-sb-iconSvgEnglish-height), var(--pp-ph-sb-iconSvgEnglish-color), icon-svg-english);
@ -3657,6 +3728,88 @@
}
}
.physton-prompt-blacklist {
.common-popup-bg();
.blacklist-main {
position: var(--ppb-blacklistMain-position);
.blacklist-body {
display: var(--ppb-bm-blacklistBody-display);
flex-wrap: var(--ppb-bm-blacklistBody-flex-wrap);
width: var(--ppb-bm-blacklistBody-width);
position: var(--ppb-bm-blacklistBody-position);
box-shadow: var(--ppb-bm-blacklistBody-box-shadow);
border-radius: var(--ppb-bm-blacklistBody-border-radius);
background-color: var(--ppb-bm-blacklistBody-background-color);
transition: var(--ppb-bm-blacklistBody-transition);
padding: var(--ppb-bm-blacklistBody-padding);
box-sizing: var(--ppb-bm-blacklistBody-box-sizing);
.blacklist-wrap {
flex-basis: var(--ppb-bm-bb-blacklistWrap-flex-basis);
}
.blacklist-desc {
color: var(--ppb-bm-bb-blacklistDesc-color);
flex-basis: var(--ppb-bm-bb-blacklistDesc-flex-basis);
}
.blacklist-group {
margin: var(--ppb-bm-bb-blacklistGroup-margin);
flex-grow: var(--ppb-bm-bb-blacklistGroup-flex-grow);
.group-title {
font-size: var(--ppb-bm-bb-bg-groupTitle-font-size);
color: var(--ppb-bm-bb-bg-groupTitle-color);
}
.group-content {
margin-top: var(--ppb-bm-bb-bg-groupContent-margin-top);
width: var(--ppb-bm-bb-bg-groupContent-width);
height: var(--ppb-bm-bb-bg-groupContent-height);
resize: var(--ppb-bm-bb-bg-groupContent-resize);
background: var(--ppb-bm-bb-bg-groupContent-background);
border: var(--ppb-bm-bb-bg-groupContent-border);
color: var(--ppb-bm-bb-bg-groupContent-color);
}
}
.setting-btns {
flex-basis: var(--ppb-bm-bb-settingBtns-flex-basis);
display: var(--ppb-bm-bb-settingBtns-display);
justify-content: var(--ppb-bm-bb-settingBtns-justify-content);
align-items: var(--ppb-bm-bb-settingBtns-align-items);
margin-top: var(--ppb-bm-bb-settingBtns-margin-top);
.blacklist-save {
cursor: var(--ppb-bm-bb-sb-blacklistSave-cursor);
display: var(--ppb-bm-bb-sb-blacklistSave-display);
padding: var(--ppb-bm-bb-sb-blacklistSave-padding);
height: var(--ppb-bm-bb-sb-blacklistSave-height);
line-height: var(--ppb-bm-bb-sb-blacklistSave-line-height);
color: var(--ppb-bm-bb-sb-blacklistSave-color);
.common-colourful-background();
border-radius: var(--ppb-bm-bb-sb-blacklistSave-border-radius);
margin-right: var(--ppb-bm-bb-sb-blacklistSave-margin-right);
}
.blacklist-close {
cursor: var(--ppb-bm-bb-sb-blacklistClose-cursor);
display: var(--ppb-bm-bb-sb-blacklistClose-display);
padding: var(--ppb-bm-bb-sb-blacklistClose-padding);
height: var(--ppb-bm-bb-sb-blacklistClose-height);
line-height: var(--ppb-bm-bb-sb-blacklistClose-line-height);
color: var(--ppb-bm-bb-sb-blacklistClose-color);
background: var(--ppb-bm-bb-sb-blacklistClose-background);
border: var(--ppb-bm-bb-sb-blacklistClose-border);
border-radius: var(--ppb-bm-bb-sb-blacklistClose-border-radius);
}
}
}
}
}
.physton-packages-state {
.common-popup-bg();
z-index: var(--pps-z-index);

2
styles/main.min.css vendored

File diff suppressed because one or more lines are too long