[feat] regex flags, fix display

This commit is contained in:
kwaroran
2023-06-12 18:53:37 +09:00
parent 70caeea169
commit 316d3be397
5 changed files with 29 additions and 12 deletions

View File

@@ -3,6 +3,7 @@
import { language } from "src/lang"; import { language } from "src/lang";
import { alertConfirm } from "src/ts/alert"; import { alertConfirm } from "src/ts/alert";
import type { customscript } from "src/ts/storage/database"; import type { customscript } from "src/ts/storage/database";
import Check from "../Others/Check.svelte";
export let value:customscript export let value:customscript
export let onRemove: () => void = () => {} export let onRemove: () => void = () => {}
@@ -26,10 +27,10 @@
</button> </button>
</div> </div>
{#if open} {#if open}
<div class="seperator"> <div class="seperator p-2">
<span class="text-neutral-200 mt-6">{language.name}</span> <span class="text-neutral-200 mt-6">{language.name}</span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.comment}> <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.comment}>
<span class="text-neutral-200 mt-4">Type</span> <span class="text-neutral-200 mt-4">Modification Type</span>
<select class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.type}> <select class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.type}>
<option value="editinput">{language.editInput}</option> <option value="editinput">{language.editInput}</option>
<option value="editoutput">{language.editOutput}</option> <option value="editoutput">{language.editOutput}</option>
@@ -40,6 +41,18 @@
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.in}> <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.in}>
<span class="text-neutral-200 mt-6">OUT:</span> <span class="text-neutral-200 mt-6">OUT:</span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.out}> <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.out}>
{#if value.ableFlag}
<span class="text-neutral-200 mt-6">FLAG:</span>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected text-sm" bind:value={value.flag}>
{/if}
<div class="flex items-center mt-4">
<Check bind:check={value.ableFlag} onChange={() => {
if(!value.flag){
value.flag = 'g'
}
}}/>
<span>Custom Flag</span>
</div>
</div> </div>
{/if} {/if}
</div> </div>

View File

@@ -35,9 +35,6 @@ DOMPurify.addHook("uponSanitizeAttribute", (node, data) => {
export async function ParseMarkdown(data:string, char:(character | groupChat) = null, mode:'normal'|'back' = 'normal') { export async function ParseMarkdown(data:string, char:(character | groupChat) = null, mode:'normal'|'back' = 'normal') {
if(char && char.type !== 'group'){ if(char && char.type !== 'group'){
if(char.customscript){
data = processScript(char, data, 'editdisplay')
}
if(char.additionalAssets){ if(char.additionalAssets){
for(const asset of char.additionalAssets){ for(const asset of char.additionalAssets){
const assetPath = await getFileSrc(asset[1]) const assetPath = await getFileSrc(asset[1])
@@ -51,6 +48,9 @@ export async function ParseMarkdown(data:string, char:(character | groupChat) =
} }
} }
} }
if(char){
data = processScript(char, data, 'editdisplay')
}
return DOMPurify.sanitize(convertor.makeHtml(data), { return DOMPurify.sanitize(convertor.makeHtml(data), {
ADD_TAGS: ["iframe"], ADD_TAGS: ["iframe"],
ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling"], ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling"],

View File

@@ -63,7 +63,6 @@ export function groupOrder(chars:GroupOrder[], input:string):GroupOrder[] {
for (const word of words) { for (const word of words) {
for (let char of chars) { for (let char of chars) {
const charNameChunks = getWords(findCharacterbyId(char.id).name) const charNameChunks = getWords(findCharacterbyId(char.id).name)
console.log(charNameChunks)
if (charNameChunks.includes(word)) { if (charNameChunks.includes(word)) {
order.push(char); order.push(char);
@@ -96,8 +95,11 @@ export function groupOrder(chars:GroupOrder[], input:string):GroupOrder[] {
} }
function getWords(data:string){ function getWords(data:string){
const matches = data.match(/\b\w+\b/gmi) const matches = data.split(/\n| /g)
let words:string[] = [] let words:string[] = []
if(!matches){
return [data]
}
for(const match of matches){ for(const match of matches){
words.push(match.toLocaleLowerCase()) words.push(match.toLocaleLowerCase())
} }

View File

@@ -58,7 +58,7 @@ export function processScriptFull(char:character|groupChat, data:string, mode:Sc
const scripts = (db.globalscript ?? []).concat(char.customscript) const scripts = (db.globalscript ?? []).concat(char.customscript)
for (const script of scripts){ for (const script of scripts){
if(script.type === mode){ if(script.type === mode){
const reg = new RegExp(script.in,'g') const reg = new RegExp(script.in, script.ableFlag ? script.flag : 'g')
const outScript = script.out const outScript = script.out
if(outScript.startsWith('@@') && reg.test(data)){ if(outScript.startsWith('@@') && reg.test(data)){
if(outScript.startsWith('@@emo ')){ if(outScript.startsWith('@@emo ')){

View File

@@ -267,10 +267,12 @@ export function setDatabase(data:Database){
export interface customscript{ export interface customscript{
comment: string; comment: string;
in:string in:string
out:string out:string
type:string type:string
flag?:string
ableFlag?:boolean
} }