chore: fix client lint errors (#8934)
* Fix client lint * Hide no-v-html * Ignore banned type * Update page-editor.vue
This commit is contained in:
		
							parent
							
								
									ce9d29828d
								
							
						
					
					
						commit
						1eb504a640
					
				
					 14 changed files with 78 additions and 65 deletions
				
			
		|  | @ -20,6 +20,7 @@ | |||
| 			<span v-if="emoji.isCustomEmoji" class="emoji"><img :src="defaultStore.state.disableShowingAnimatedImages ? getStaticImageUrl(emoji.url) : emoji.url" :alt="emoji.emoji"/></span> | ||||
| 			<span v-else-if="!defaultStore.state.useOsNativeEmojis" class="emoji"><img :src="emoji.url" :alt="emoji.emoji"/></span> | ||||
| 			<span v-else class="emoji">{{ emoji.emoji }}</span> | ||||
| 			<!-- eslint-disable-next-line vue/no-v-html --> | ||||
| 			<span class="name" v-html="emoji.name.replace(q, `<b>${q}</b>`)"></span> | ||||
| 			<span v-if="emoji.aliasOf" class="alias">({{ emoji.aliasOf }})</span> | ||||
| 		</li> | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| <!-- eslint-disable vue/no-v-html --> | ||||
| <template> | ||||
| <code v-if="inline" :class="`language-${prismLang}`" v-html="html"></code> | ||||
| <pre v-else :class="`language-${prismLang}`"><code :class="`language-${prismLang}`" v-html="html"></code></pre> | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| 
 | ||||
| <!-- eslint-disable vue/no-v-html --> | ||||
| <template> | ||||
| <div v-if="block" v-html="compiledFormula"></div> | ||||
| <span v-else v-html="compiledFormula"></span> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div> | ||||
| 	<MkStickyContainer> | ||||
| 		<template #header><XHeader :actions="headerActions" :tabs="headerTabs" v-model:tab="tab"/></template> | ||||
| 		<template #header><XHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template> | ||||
| 		<MkSpacer :content-max="900"> | ||||
| 			<div class="ogwlenmc"> | ||||
| 				<div v-if="tab === 'local'" class="local"> | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ const props = withDefaults(defineProps<{ | |||
| let values: string = $ref(props.value.values.join('\n')); | ||||
| 
 | ||||
| watch(values, () => { | ||||
| 	props.value.values = values.split('\n') | ||||
| 	props.value.values = values.split('\n'); | ||||
| }, { | ||||
| 	deep: true | ||||
| }); | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <template> | ||||
| <MkStickyContainer> | ||||
| 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs" v-model:tab="tab"/></template> | ||||
| 	<template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template> | ||||
| 	<MkSpacer :content-max="700"> | ||||
| 		<div class="jqqmcavi"> | ||||
| 			<MkButton v-if="pageId" class="button" inline link :to="`/@${ author.username }/pages/${ currentName }`"><i class="fas fa-external-link-square-alt"></i> {{ $ts._pages.viewPage }}</MkButton> | ||||
|  | @ -82,7 +82,7 @@ | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { defineComponent, defineAsyncComponent, computed, provide, watch } from 'vue'; | ||||
| import { defineAsyncComponent, computed, provide, watch } from 'vue'; | ||||
| import 'prismjs'; | ||||
| import { highlight, languages } from 'prismjs/components/prism-core'; | ||||
| import 'prismjs/components/prism-clike'; | ||||
|  | @ -93,7 +93,6 @@ import { v4 as uuid } from 'uuid'; | |||
| import XVariable from './page-editor.script-block.vue'; | ||||
| import XBlocks from './page-editor.blocks.vue'; | ||||
| import MkTextarea from '@/components/form/textarea.vue'; | ||||
| import MkContainer from '@/components/ui/container.vue'; | ||||
| import MkButton from '@/components/ui/button.vue'; | ||||
| import MkSelect from '@/components/form/select.vue'; | ||||
| import MkSwitch from '@/components/form/switch.vue'; | ||||
|  | @ -168,15 +167,15 @@ function save() { | |||
| 	const options = getSaveOptions(); | ||||
| 
 | ||||
| 	const onError = err => { | ||||
| 		if (err.id == '3d81ceae-475f-4600-b2a8-2bc116157532') { | ||||
| 			if (err.info.param == 'name') { | ||||
| 		if (err.id === '3d81ceae-475f-4600-b2a8-2bc116157532') { | ||||
| 			if (err.info.param === 'name') { | ||||
| 				os.alert({ | ||||
| 					type: 'error', | ||||
| 					title: i18n.ts._pages.invalidNameTitle, | ||||
| 					text: i18n.ts._pages.invalidNameText, | ||||
| 				}); | ||||
| 			} | ||||
| 		} else if (err.code == 'NAME_ALREADY_EXISTS') { | ||||
| 		} else if (err.code === 'NAME_ALREADY_EXISTS') { | ||||
| 			os.alert({ | ||||
| 				type: 'error', | ||||
| 				text: i18n.ts._pages.nameAlreadyExists, | ||||
|  | @ -310,7 +309,7 @@ function getPageBlockList() { | |||
| function getScriptBlockList(type: string = null) { | ||||
| 	const list = []; | ||||
| 
 | ||||
| 	const blocks = blockDefs.filter(block => type === null || block.out === null || block.out === type || typeof block.out === 'number'); | ||||
| 	const blocks = blockDefs.filter(block => type == null || block.out == null || block.out === type || typeof block.out === 'number'); | ||||
| 
 | ||||
| 	for (const block of blocks) { | ||||
| 		const category = list.find(x => x.category === block.category); | ||||
|  | @ -345,8 +344,8 @@ function getScriptBlockList(type: string = null) { | |||
| 	return list; | ||||
| } | ||||
| 
 | ||||
| function setEyeCatchingImage(e) { | ||||
| 	selectFile(e.currentTarget ?? e.target, null).then(file => { | ||||
| function setEyeCatchingImage(img) { | ||||
| 	selectFile(img.currentTarget ?? img.target, null).then(file => { | ||||
| 		eyeCatchingImageId = file.id; | ||||
| 	}); | ||||
| } | ||||
|  |  | |||
|  | @ -313,10 +313,10 @@ async function applyDriveCapacityOverride() { | |||
| 	try { | ||||
| 		await os.apiWithDialog('admin/drive-capacity-override', { userId: user.id, overrideMb: driveCapOrMb }); | ||||
| 		await refreshUser(); | ||||
| 	} catch (e) { | ||||
| 	} catch (err) { | ||||
| 		os.alert({ | ||||
| 			type: 'error', | ||||
| 			text: e.toString(), | ||||
| 			text: err.toString(), | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ | |||
| 					<span class="text">{{ instanceName }}</span> | ||||
| 				</h1> | ||||
| 				<div class="about"> | ||||
| 					<!-- eslint-disable-next-line vue/no-v-html --> | ||||
| 					<div class="desc" v-html="meta.description || i18n.ts.headlineMisskey"></div> | ||||
| 				</div> | ||||
| 				<div class="action"> | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
| 				<img v-if="meta.logoImageUrl" class="logo" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span> | ||||
| 			</h1> | ||||
| 			<div class="about"> | ||||
| 				<!-- eslint-disable-next-line vue/no-v-html --> | ||||
| 				<div class="desc" v-html="meta.description || $ts.headlineMisskey"></div> | ||||
| 			</div> | ||||
| 			<div class="action"> | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ | |||
| 						<img v-if="meta.logoImageUrl" class="logo" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span> | ||||
| 					</h1> | ||||
| 					<div class="about"> | ||||
| 						<!-- eslint-disable-next-line vue/no-v-html --> | ||||
| 						<div class="desc" v-html="meta.description || $ts.headlineMisskey"></div> | ||||
| 					</div> | ||||
| 					<div class="action"> | ||||
|  |  | |||
|  | @ -125,54 +125,56 @@ export function initAiLib(hpml: Hpml) { | |||
| 				} | ||||
| 			}); | ||||
| 			*/ | ||||
| 		}) | ||||
| 		}), | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| export const funcDefs: Record<string, { in: any[]; out: any; category: string; icon: any; }> = { | ||||
| 	if:              { in: ['boolean', 0, 0],              out: 0,             category: 'flow',       icon: 'fas fa-share-alt', }, | ||||
| 	for:             { in: ['number', 'function'],         out: null,          category: 'flow',       icon: 'fas fa-recycle', }, | ||||
| 	not:             { in: ['boolean'],                    out: 'boolean',     category: 'logical',    icon: 'fas fa-flag', }, | ||||
| 	or:              { in: ['boolean', 'boolean'],         out: 'boolean',     category: 'logical',    icon: 'fas fa-flag', }, | ||||
| 	and:             { in: ['boolean', 'boolean'],         out: 'boolean',     category: 'logical',    icon: 'fas fa-flag', }, | ||||
| 	add:             { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: 'fas fa-plus', }, | ||||
| 	subtract:        { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: 'fas fa-minus', }, | ||||
| 	multiply:        { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: 'fas fa-times', }, | ||||
| 	divide:          { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: 'fas fa-divide', }, | ||||
| 	mod:             { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: 'fas fa-divide', }, | ||||
| 	round:           { in: ['number'],                     out: 'number',      category: 'operation',  icon: 'fas fa-calculator', }, | ||||
| 	eq:              { in: [0, 0],                         out: 'boolean',     category: 'comparison', icon: 'fas fa-equals', }, | ||||
| 	notEq:           { in: [0, 0],                         out: 'boolean',     category: 'comparison', icon: 'fas fa-not-equal', }, | ||||
| 	gt:              { in: ['number', 'number'],           out: 'boolean',     category: 'comparison', icon: 'fas fa-greater-than', }, | ||||
| 	lt:              { in: ['number', 'number'],           out: 'boolean',     category: 'comparison', icon: 'fas fa-less-than', }, | ||||
| 	gtEq:            { in: ['number', 'number'],           out: 'boolean',     category: 'comparison', icon: 'fas fa-greater-than-equal', }, | ||||
| 	ltEq:            { in: ['number', 'number'],           out: 'boolean',     category: 'comparison', icon: 'fas fa-less-than-equal', }, | ||||
| 	strLen:          { in: ['string'],                     out: 'number',      category: 'text',       icon: 'fas fa-quote-right', }, | ||||
| 	strPick:         { in: ['string', 'number'],           out: 'string',      category: 'text',       icon: 'fas fa-quote-right', }, | ||||
| 	strReplace:      { in: ['string', 'string', 'string'], out: 'string',      category: 'text',       icon: 'fas fa-quote-right', }, | ||||
| 	strReverse:      { in: ['string'],                     out: 'string',      category: 'text',       icon: 'fas fa-quote-right', }, | ||||
| 	join:            { in: ['stringArray', 'string'],      out: 'string',      category: 'text',       icon: 'fas fa-quote-right', }, | ||||
| 	stringToNumber:  { in: ['string'],                     out: 'number',      category: 'convert',    icon: 'fas fa-exchange-alt', }, | ||||
| 	numberToString:  { in: ['number'],                     out: 'string',      category: 'convert',    icon: 'fas fa-exchange-alt', }, | ||||
| 	splitStrByLine:  { in: ['string'],                     out: 'stringArray', category: 'convert',    icon: 'fas fa-exchange-alt', }, | ||||
| 	pick:            { in: [null, 'number'],               out: null,          category: 'list',       icon: 'fas fa-indent', }, | ||||
| 	listLen:         { in: [null],                         out: 'number',      category: 'list',       icon: 'fas fa-indent', }, | ||||
| 	rannum:          { in: ['number', 'number'],           out: 'number',      category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	dailyRannum:     { in: ['number', 'number'],           out: 'number',      category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	seedRannum:      { in: [null, 'number', 'number'],     out: 'number',      category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	random:          { in: ['number'],                     out: 'boolean',     category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	dailyRandom:     { in: ['number'],                     out: 'boolean',     category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	seedRandom:      { in: [null, 'number'],               out: 'boolean',     category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	randomPick:      { in: [0],                            out: 0,             category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	dailyRandomPick: { in: [0],                            out: 0,             category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	seedRandomPick:  { in: [null, 0],                      out: 0,             category: 'random',     icon: 'fas fa-dice', }, | ||||
| 	DRPWPM:      { in: ['stringArray'],                out: 'string',      category: 'random',     icon: 'fas fa-dice', }, // dailyRandomPickWithProbabilityMapping
 | ||||
| 	if: { in: ['boolean', 0, 0], out: 0, category: 'flow', icon: 'fas fa-share-alt' }, | ||||
| 	for: { in: ['number', 'function'], out: null, category: 'flow', icon: 'fas fa-recycle' }, | ||||
| 	not: { in: ['boolean'], out: 'boolean', category: 'logical', icon: 'fas fa-flag' }, | ||||
| 	or: { in: ['boolean', 'boolean'], out: 'boolean', category: 'logical', icon: 'fas fa-flag' }, | ||||
| 	and: { in: ['boolean', 'boolean'], out: 'boolean', category: 'logical', icon: 'fas fa-flag' }, | ||||
| 	add: { in: ['number', 'number'], out: 'number', category: 'operation', icon: 'fas fa-plus' }, | ||||
| 	subtract: { in: ['number', 'number'], out: 'number', category: 'operation', icon: 'fas fa-minus' }, | ||||
| 	multiply: { in: ['number', 'number'], out: 'number', category: 'operation', icon: 'fas fa-times' }, | ||||
| 	divide: { in: ['number', 'number'], out: 'number', category: 'operation', icon: 'fas fa-divide' }, | ||||
| 	mod: { in: ['number', 'number'], out: 'number', category: 'operation', icon: 'fas fa-divide' }, | ||||
| 	round: { in: ['number'], out: 'number', category: 'operation', icon: 'fas fa-calculator' }, | ||||
| 	eq: { in: [0, 0], out: 'boolean', category: 'comparison', icon: 'fas fa-equals' }, | ||||
| 	notEq: { in: [0, 0], out: 'boolean', category: 'comparison', icon: 'fas fa-not-equal' }, | ||||
| 	gt: { in: ['number', 'number'], out: 'boolean', category: 'comparison', icon: 'fas fa-greater-than' }, | ||||
| 	lt: { in: ['number', 'number'], out: 'boolean', category: 'comparison', icon: 'fas fa-less-than' }, | ||||
| 	gtEq: { in: ['number', 'number'], out: 'boolean', category: 'comparison', icon: 'fas fa-greater-than-equal' }, | ||||
| 	ltEq: { in: ['number', 'number'], out: 'boolean', category: 'comparison', icon: 'fas fa-less-than-equal' }, | ||||
| 	strLen: { in: ['string'], out: 'number', category: 'text', icon: 'fas fa-quote-right' }, | ||||
| 	strPick: { in: ['string', 'number'], out: 'string', category: 'text', icon: 'fas fa-quote-right' }, | ||||
| 	strReplace: { in: ['string', 'string', 'string'], out: 'string', category: 'text', icon: 'fas fa-quote-right' }, | ||||
| 	strReverse: { in: ['string'], out: 'string', category: 'text', icon: 'fas fa-quote-right' }, | ||||
| 	join: { in: ['stringArray', 'string'], out: 'string', category: 'text', icon: 'fas fa-quote-right' }, | ||||
| 	stringToNumber: { in: ['string'], out: 'number', category: 'convert', icon: 'fas fa-exchange-alt' }, | ||||
| 	numberToString: { in: ['number'], out: 'string', category: 'convert', icon: 'fas fa-exchange-alt' }, | ||||
| 	splitStrByLine: { in: ['string'], out: 'stringArray', category: 'convert', icon: 'fas fa-exchange-alt' }, | ||||
| 	pick: { in: [null, 'number'], out: null, category: 'list', icon: 'fas fa-indent' }, | ||||
| 	listLen: { in: [null], out: 'number', category: 'list', icon: 'fas fa-indent' }, | ||||
| 	rannum: { in: ['number', 'number'], out: 'number', category: 'random', icon: 'fas fa-dice' }, | ||||
| 	dailyRannum: { in: ['number', 'number'], out: 'number', category: 'random', icon: 'fas fa-dice' }, | ||||
| 	seedRannum: { in: [null, 'number', 'number'], out: 'number', category: 'random', icon: 'fas fa-dice' }, | ||||
| 	random: { in: ['number'], out: 'boolean', category: 'random', icon: 'fas fa-dice' }, | ||||
| 	dailyRandom: { in: ['number'], out: 'boolean', category: 'random', icon: 'fas fa-dice' }, | ||||
| 	seedRandom: { in: [null, 'number'], out: 'boolean', category: 'random', icon: 'fas fa-dice' }, | ||||
| 	randomPick: { in: [0], out: 0, category: 'random', icon: 'fas fa-dice' }, | ||||
| 	dailyRandomPick: { in: [0], out: 0, category: 'random', icon: 'fas fa-dice' }, | ||||
| 	seedRandomPick: { in: [null, 0], out: 0, category: 'random', icon: 'fas fa-dice' }, | ||||
| 	DRPWPM: { in: ['stringArray'], out: 'string', category: 'random', icon: 'fas fa-dice' }, // dailyRandomPickWithProbabilityMapping
 | ||||
| }; | ||||
| 
 | ||||
| export function initHpmlLib(expr: Expr, scope: HpmlScope, randomSeed: string, visitor?: any) { | ||||
| 	const date = new Date(); | ||||
| 	const day = `${visitor ? visitor.id : ''} ${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`; | ||||
| 
 | ||||
| 	// SHOULD be fine to ignore since it's intended + function shape isn't defined
 | ||||
| 	// eslint-disable-next-line @typescript-eslint/ban-types
 | ||||
| 	const funcs: Record<string, Function> = { | ||||
| 		not: (a: boolean) => !a, | ||||
| 		or: (a: boolean, b: boolean) => a || b, | ||||
|  | @ -188,7 +190,7 @@ export function initHpmlLib(expr: Expr, scope: HpmlScope, randomSeed: string, vi | |||
| 			const result: any[] = []; | ||||
| 			for (let i = 0; i < times; i++) { | ||||
| 				result.push(fn.exec({ | ||||
| 					[fn.slots[0]]: i + 1 | ||||
| 					[fn.slots[0]]: i + 1, | ||||
| 				})); | ||||
| 			} | ||||
| 			return result; | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ | |||
| 		<div> | ||||
| 			<h1 v-if="meta"><img v-if="meta.logoImageUrl" class="logo" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span></h1> | ||||
| 			<div v-if="meta" class="about"> | ||||
| 				<!-- eslint-disable-next-line vue/no-v-html --> | ||||
| 				<div class="desc" v-html="meta.description || $ts.introMisskey"></div> | ||||
| 			</div> | ||||
| 			<div class="action"> | ||||
|  | @ -101,13 +102,18 @@ export default defineComponent({ | |||
| 	}, | ||||
| 
 | ||||
| 	methods: { | ||||
| 		setParallax(el) { | ||||
| 			//new simpleParallax(el); | ||||
| 		}, | ||||
| 		// @ThatOneCalculator: Are these methods even used? | ||||
| 		// I can't find references to them anywhere else in the code... | ||||
| 
 | ||||
| 		// setParallax(el) { | ||||
| 		// 	new simpleParallax(el); | ||||
| 		// }, | ||||
| 
 | ||||
| 		changePage(page) { | ||||
| 			if (page == null) return; | ||||
| 			// eslint-disable-next-line no-undef | ||||
| 			if (page[symbols.PAGE_INFO]) { | ||||
| 				// eslint-disable-next-line no-undef | ||||
| 				this.pageInfo = page[symbols.PAGE_INFO]; | ||||
| 			} | ||||
| 		}, | ||||
|  |  | |||
|  | @ -1,10 +1,11 @@ | |||
| <!-- eslint-disable vue/no-v-html --> | ||||
| <template> | ||||
| <div class="rwqkcmrc" :style="{ backgroundImage: transparent ? 'none' : `url(${ $instance.backgroundImageUrl })` }"> | ||||
| 	<div class="back" :class="{ transparent }"></div> | ||||
| 	<div class="contents"> | ||||
| 		<div class="wrapper"> | ||||
| 			<h1 v-if="meta" :class="{ full }"> | ||||
| 				<MkA to="/" class="link"><img v-if="meta.logoImageUrl" class="logo" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span></MkA> | ||||
| 				<MkA to="/" class="link"><img v-if="meta.logoImageUrl" class="logo" :src="meta.logoImageUrl" alt="logo"><span v-else class="text">{{ instanceName }}</span></MkA> | ||||
| 			</h1> | ||||
| 			<template v-if="full"> | ||||
| 				<div v-if="meta" class="about"> | ||||
|  | @ -21,7 +22,7 @@ | |||
| 							<div class="title">{{ announcement.title }}</div> | ||||
| 							<div class="content"> | ||||
| 								<Mfm :text="announcement.text"/> | ||||
| 								<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> | ||||
| 								<img v-if="announcement.imageUrl" :src="announcement.imageUrl" alt="announcement image"/> | ||||
| 							</div> | ||||
| 						</section> | ||||
| 					</MkPagination> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue