parent
							
								
									58a04ce1a5
								
							
						
					
					
						commit
						5fb0a995dd
					
				
					 37 changed files with 59 additions and 49 deletions
				
			
		|  | @ -1865,8 +1865,8 @@ pages: | |||
|   font: "フォント" | ||||
|   fontSerif: "セリフ" | ||||
|   fontSansSerif: "サンセリフ" | ||||
|   set-eye-catchig-image: "アイキャッチ画像を設定" | ||||
|   remove-eye-catchig-image: "アイキャッチ画像を削除" | ||||
|   set-eye-catching-image: "アイキャッチ画像を設定" | ||||
|   remove-eye-catching-image: "アイキャッチ画像を削除" | ||||
|   choose-block: "ブロックを追加" | ||||
|   select-type: "種類を選択" | ||||
|   enter-variable-name: "変数名を決めてください" | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ body | |||
| 	.peg | ||||
| 		display block | ||||
| 		position absolute | ||||
| 		right 0px | ||||
| 		right 0 | ||||
| 		width 100px | ||||
| 		height 100% | ||||
| 		box-shadow 0 0 10px var(--primary), 0 0 5px var(--primary) | ||||
|  |  | |||
|  | @ -98,7 +98,7 @@ export default Vue.extend({ | |||
| 		margin 0 auto | ||||
| 		text-align center | ||||
| 		background #fff | ||||
| 		box-shadow 0px 4px 16px rgba(#000, 0.2) | ||||
| 		box-shadow 0 4px 16px rgba(#000, 0.2) | ||||
| 
 | ||||
| 		> .fetching | ||||
| 			margin 0 | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ function match(e: KeyboardEvent, patterns: action['patterns']): boolean { | |||
| 		pattern.ctrl == e.ctrlKey && | ||||
| 		pattern.shift == e.shiftKey && | ||||
| 		pattern.alt == e.altKey && | ||||
| 		e.metaKey == false | ||||
| 		!e.metaKey | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,9 +11,9 @@ export default function(me, settings, note) { | |||
| 	return ( | ||||
| 		(!isMyNote && note.reply && includesMutedWords(note.reply.text)) || | ||||
| 		(!isMyNote && note.renote && includesMutedWords(note.renote.text)) || | ||||
| 		(settings.showMyRenotes === false && isMyNote && isPureRenote) || | ||||
| 		(settings.showRenotedMyNotes === false && isPureRenote && note.renote.userId == me.id) || | ||||
| 		(settings.showLocalRenotes === false && isPureRenote && note.renote.user.host == null) || | ||||
| 		(!settings.showMyRenotes && isMyNote && isPureRenote) || | ||||
| 		(!settings.showRenotedMyNotes && isPureRenote && note.renote.userId == me.id) || | ||||
| 		(!settings.showLocalRenotes && isPureRenote && note.renote.user.host == null) || | ||||
| 		(!isMyNote && includesMutedWords(note.text)) | ||||
| 	); | ||||
| } | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		ms(): number { | ||||
| 			return this.now.getMilliseconds() * this.smooth; | ||||
| 		} | ||||
| 		}, | ||||
| 		s(): number { | ||||
| 			return this.now.getSeconds(); | ||||
| 		}, | ||||
|  |  | |||
|  | @ -202,7 +202,7 @@ export default Vue.extend({ | |||
| 		left 0 | ||||
| 		z-index 1 | ||||
| 		width 100% | ||||
| 		box-shadow 0 0px 2px rgba(#000, 0.2) | ||||
| 		box-shadow 0 0 2px rgba(#000, 0.2) | ||||
| 
 | ||||
| 		> .form | ||||
| 			background rgba(0, 0, 0, 0.02) | ||||
|  |  | |||
|  | @ -36,10 +36,10 @@ | |||
| 				</ui-select> | ||||
| 
 | ||||
| 				<div class="eyeCatch"> | ||||
| 					<ui-button v-if="eyeCatchingImageId == null && !readonly" @click="setEyeCatchingImage()"><fa :icon="faPlus"/> {{ $t('set-eye-catchig-image') }}</ui-button> | ||||
| 					<ui-button v-if="eyeCatchingImageId == null && !readonly" @click="setEyeCatchingImage()"><fa :icon="faPlus"/> {{ $t('set-eye-catching-image') }}</ui-button> | ||||
| 					<div v-else-if="eyeCatchingImage"> | ||||
| 						<img :src="eyeCatchingImage.url" :alt="eyeCatchingImage.name"/> | ||||
| 						<ui-button @click="removeEyeCatchingImage()" v-if="!readonly"><fa :icon="faTrashAlt"/> {{ $t('remove-eye-catchig-image') }}</ui-button> | ||||
| 						<ui-button @click="removeEyeCatchingImage()" v-if="!readonly"><fa :icon="faTrashAlt"/> {{ $t('remove-eye-catching-image') }}</ui-button> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</template> | ||||
|  |  | |||
|  | @ -273,7 +273,7 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		import_() { | ||||
| 			(this.$refs.file as any).click(); | ||||
| 		} | ||||
| 		}, | ||||
| 
 | ||||
| 		export_() { | ||||
| 			const blob = new Blob([this.selectedThemeCode], { | ||||
|  |  | |||
|  | @ -322,7 +322,7 @@ root(fill) | |||
| 
 | ||||
| 			> .value | ||||
| 				display block | ||||
| 				width 0% | ||||
| 				width 0 | ||||
| 				height 100% | ||||
| 				background transparent | ||||
| 				border-radius 6px | ||||
|  |  | |||
|  | @ -166,7 +166,7 @@ export default Vue.extend({ | |||
| 			> .follow-button | ||||
| 				position absolute | ||||
| 				top 8px | ||||
| 				right 0px | ||||
| 				right 0 | ||||
| 
 | ||||
| 	> .more | ||||
| 		display block | ||||
|  |  | |||
|  | @ -160,7 +160,7 @@ export default Vue.extend({ | |||
| 				this.$emit('top'); | ||||
| 			} | ||||
| 
 | ||||
| 			if (this.$store.state.settings.fetchOnScroll !== false) { | ||||
| 			if (this.$store.state.settings.fetchOnScroll) { | ||||
| 				const current = this.$refs.body.scrollTop + this.$refs.body.clientHeight; | ||||
| 				if (current > this.$refs.body.scrollHeight - 1) this.$emit('bottom'); | ||||
| 			} | ||||
|  |  | |||
|  | @ -205,7 +205,7 @@ export default Vue.extend({ | |||
| 			top -32px | ||||
| 			left 0 | ||||
| 			right 0 | ||||
| 			width 0px | ||||
| 			width 0 | ||||
| 			margin 0 auto | ||||
| 			border-top solid 16px transparent | ||||
| 			border-left solid 16px transparent | ||||
|  |  | |||
|  | @ -102,7 +102,7 @@ class Autocomplete { | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if (isHashtag && opened == false) { | ||||
| 		if (isHashtag && !opened) { | ||||
| 			const hashtag = text.substr(hashtagIndex + 1); | ||||
| 			if (!hashtag.includes(' ')) { | ||||
| 				this.open('hashtag', hashtag); | ||||
|  | @ -110,7 +110,7 @@ class Autocomplete { | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if (isEmoji && opened == false) { | ||||
| 		if (isEmoji && !opened) { | ||||
| 			const emoji = text.substr(emojiIndex + 1); | ||||
| 			if (!emoji.includes(' ')) { | ||||
| 				this.open('emoji', emoji); | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ class Script { | |||
| 
 | ||||
| 	public interpolate(str: string) { | ||||
| 		if (str == null) return null; | ||||
| 		return str.replace(/\{(.+?)\}/g, match => { | ||||
| 		return str.replace(/{(.+?)}/g, match => { | ||||
| 			const v = this.vars[match.slice(1, -1).trim()]; | ||||
| 			return v == null ? 'NULL' : v.toString(); | ||||
| 		}); | ||||
|  |  | |||
|  | @ -750,12 +750,17 @@ export default Vue.extend({ | |||
| 				bottom 0 | ||||
| 				animation-delay -1.0s | ||||
| 
 | ||||
| 			@keyframes sk-rotate { 100% { transform: rotate(360deg); }} | ||||
| 			@keyframes sk-rotate { | ||||
| 				100% { | ||||
| 					transform: rotate(360deg); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			@keyframes sk-bounce { | ||||
| 				0%, 100% { | ||||
| 					transform: scale(0.0); | ||||
| 				} 50% { | ||||
| 				} | ||||
| 				50% { | ||||
| 					transform: scale(1.0); | ||||
| 				} | ||||
| 			} | ||||
|  |  | |||
|  | @ -180,7 +180,7 @@ export default Vue.extend({ | |||
| 				this.releaseQueue(); | ||||
| 			} | ||||
| 
 | ||||
| 			if (this.$store.state.settings.fetchOnScroll !== false) { | ||||
| 			if (this.$store.state.settings.fetchOnScroll) { | ||||
| 				const current = window.scrollY + window.innerHeight; | ||||
| 				if (current > document.body.offsetHeight - 8) this.fetchMore(); | ||||
| 			} | ||||
|  |  | |||
|  | @ -377,7 +377,7 @@ export default Vue.extend({ | |||
| 			}, err => { | ||||
| 				this.$root.dialog({ | ||||
| 					type: 'error', | ||||
| 					title: this.$t('error') | ||||
| 					title: this.$t('error'), | ||||
| 					text: err.message | ||||
| 				}); | ||||
| 			}, { | ||||
|  |  | |||
|  | @ -480,7 +480,7 @@ export default Vue.extend({ | |||
| 		&:focus | ||||
| 			&:not([data-is-modal]) | ||||
| 				> .body | ||||
| 						box-shadow 0 0 0px 1px var(--primaryAlpha05), 0 2px 12px 0 var(--desktopWindowShadow) | ||||
| 						box-shadow 0 0 0 1px var(--primaryAlpha05), 0 2px 12px 0 var(--desktopWindowShadow) | ||||
| 
 | ||||
| 		> .handle | ||||
| 			$size = 8px | ||||
|  |  | |||
|  | @ -352,7 +352,7 @@ export default Vue.extend({ | |||
| 				padding 0 16px | ||||
| 				line-height 48px | ||||
| 				background var(--faceHeader) | ||||
| 				box-shadow 0 1px 0px rgba(0, 0, 0, 0.1) | ||||
| 				box-shadow 0 1px 0 rgba(0, 0, 0, 0.1) | ||||
| 
 | ||||
| 				& + div | ||||
| 					max-height calc(100% - 48px) | ||||
|  |  | |||
|  | @ -505,7 +505,7 @@ class WindowSystem extends EventEmitter { | |||
| function urlBase64ToUint8Array(base64String: string): Uint8Array { | ||||
| 	const padding = '='.repeat((4 - base64String.length % 4) % 4); | ||||
| 	const base64 = (base64String + padding) | ||||
| 		.replace(/\-/g, '+') | ||||
| 		.replace(/-/g, '+') | ||||
| 		.replace(/_/g, '/'); | ||||
| 
 | ||||
| 	const rawData = window.atob(base64); | ||||
|  |  | |||
|  | @ -83,7 +83,7 @@ export default Vue.extend({ | |||
| 			hierarchyFolders: [], | ||||
| 			selectedFiles: [], | ||||
| 			info: null, | ||||
| 			connection: null | ||||
| 			connection: null, | ||||
| 
 | ||||
| 			fetching: true, | ||||
| 			fetchingMoreFiles: false, | ||||
|  | @ -385,7 +385,7 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		createFolder() { | ||||
| 			this.$root.dialog({ | ||||
| 				title: this.$t('folder-name') | ||||
| 				title: this.$t('folder-name'), | ||||
| 				input: { | ||||
| 					default: this.folder.name | ||||
| 				} | ||||
|  | @ -415,7 +415,7 @@ export default Vue.extend({ | |||
| 				return; | ||||
| 			} | ||||
| 			this.$root.dialog({ | ||||
| 				title: this.$t('folder-name') | ||||
| 				title: this.$t('folder-name'), | ||||
| 				input: { | ||||
| 					default: this.folder.name | ||||
| 				} | ||||
|  | @ -597,12 +597,17 @@ export default Vue.extend({ | |||
| 			bottom 0 | ||||
| 			animation-delay -1.0s | ||||
| 
 | ||||
| 		@keyframes sk-rotate { 100% { transform: rotate(360deg); }} | ||||
| 		@keyframes sk-rotate { | ||||
| 			100% { | ||||
| 				transform: rotate(360deg); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		@keyframes sk-bounce { | ||||
| 			0%, 100% { | ||||
| 				transform: scale(0.0); | ||||
| 			} 50% { | ||||
| 			} | ||||
| 			50% { | ||||
| 				transform: scale(1.0); | ||||
| 			} | ||||
| 		} | ||||
|  |  | |||
|  | @ -174,7 +174,7 @@ export default Vue.extend({ | |||
| 				this.releaseQueue(); | ||||
| 			} | ||||
| 
 | ||||
| 			if (this.$store.state.settings.fetchOnScroll !== false) { | ||||
| 			if (this.$store.state.settings.fetchOnScroll) { | ||||
| 				// 親要素が display none だったら弾く | ||||
| 				// https://github.com/syuilo/misskey/issues/1569 | ||||
| 				// http://d.hatena.ne.jp/favril/20091105/1257403319 | ||||
|  |  | |||
|  | @ -115,7 +115,7 @@ export default Vue.extend({ | |||
| 		}, | ||||
| 
 | ||||
| 		onScroll() { | ||||
| 			if (this.$store.state.settings.fetchOnScroll !== false) { | ||||
| 			if (this.$store.state.settings.fetchOnScroll) { | ||||
| 				// 親要素が display none だったら弾く | ||||
| 				// https://github.com/syuilo/misskey/issues/1569 | ||||
| 				// http://d.hatena.ne.jp/favril/20091105/1257403319 | ||||
|  |  | |||
|  | @ -295,7 +295,7 @@ export default Vue.extend({ | |||
| 			}, err => { | ||||
| 				this.$root.dialog({ | ||||
| 					type: 'error', | ||||
| 					title: this.$t('error') | ||||
| 					title: this.$t('error'), | ||||
| 					text: err.message | ||||
| 				}); | ||||
| 			}, { | ||||
|  | @ -341,7 +341,7 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		post() { | ||||
| 			this.posting = true; | ||||
| 			const viaMobile = this.$store.state.settings.disableViaMobile !== true; | ||||
| 			const viaMobile = !this.$store.state.settings.disableViaMobile; | ||||
| 			this.$root.api('notes/create', { | ||||
| 				text: this.text == '' ? undefined : this.text, | ||||
| 				fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined, | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ export default Vue.extend({ | |||
| 	padding 0 8px | ||||
| 
 | ||||
| 	&.shadow | ||||
| 		box-shadow 0 0px 8px rgba(0, 0, 0, 0.25) | ||||
| 		box-shadow 0 0 8px rgba(0, 0, 0, 0.25) | ||||
| 
 | ||||
| 	&, * | ||||
| 		user-select none | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| input | ||||
| 	min-width 0px | ||||
| 	min-width 0 | ||||
| 
 | ||||
| input:not([type]) | ||||
| input[type='text'] | ||||
|  |  | |||
|  | @ -129,7 +129,7 @@ export const mfmLanguage = P.createLanguage({ | |||
| 	mention: () => { | ||||
| 		return P((input, i) => { | ||||
| 			const text = input.substr(i); | ||||
| 			const match = text.match(/^@\w([\w-]*\w)?(?:@[\w\.\-]+\w)?/); | ||||
| 			const match = text.match(/^@\w([\w-]*\w)?(?:@[\w.\-]+\w)?/); | ||||
| 			if (!match) return P.makeFailure(i, 'not a mention'); | ||||
| 			if (input[i - 1] != null && input[i - 1].match(/[a-z0-9]/i)) return P.makeFailure(i, 'not a mention'); | ||||
| 			return P.makeSuccess(i + match[0].length, match[0]); | ||||
|  | @ -141,7 +141,7 @@ export const mfmLanguage = P.createLanguage({ | |||
| 	}, | ||||
| 	hashtag: () => P((input, i) => { | ||||
| 		const text = input.substr(i); | ||||
| 		const match = text.match(/^#([^\s\.,!\?'"#:\/\[\]【】]+)/i); | ||||
| 		const match = text.match(/^#([^\s.,!?'"#:\/\[\]【】]+)/i); | ||||
| 		if (!match) return P.makeFailure(i, 'not a hashtag'); | ||||
| 		let hashtag = match[1]; | ||||
| 		hashtag = removeOrphanedBrackets(hashtag); | ||||
|  |  | |||
|  | @ -36,4 +36,4 @@ export function createTree(type: string, children: MfmForest, props: any): MfmTr | |||
| 	return T.createTree({ type, props }, children); | ||||
| } | ||||
| 
 | ||||
| export const urlRegex = /^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.,=\+\-]+/; | ||||
| export const urlRegex = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/; | ||||
|  |  | |||
|  | @ -64,7 +64,7 @@ export class ASEvaluator { | |||
| 
 | ||||
| 	@autobind | ||||
| 	private interpolate(str: string, scope: Scope) { | ||||
| 		return str.replace(/\{(.+?)\}/g, match => { | ||||
| 		return str.replace(/{(.+?)}/g, match => { | ||||
| 			const v = scope.getState(match.slice(1, -1).trim()); | ||||
| 			return v == null ? 'NULL' : v.toString(); | ||||
| 		}); | ||||
|  |  | |||
|  | @ -217,7 +217,7 @@ export class UserRepository extends Repository<User> { | |||
| 	} | ||||
| 
 | ||||
| 	public isValidBirthday(birthday: string): boolean { | ||||
| 		return typeof birthday == 'string' && /^([0-9]{4})\-([0-9]{2})-([0-9]{2})$/.test(birthday); | ||||
| 		return typeof birthday == 'string' && /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.test(birthday); | ||||
| 	} | ||||
| 	//#endregion
 | ||||
| } | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ export const meta = { | |||
| 		}, | ||||
| 
 | ||||
| 		type: { | ||||
| 			validator: $.optional.str.match(/^[a-zA-Z\/\-\*]+$/) | ||||
| 			validator: $.optional.str.match(/^[a-zA-Z\/\-*]+$/) | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ export const meta = { | |||
| 		}, | ||||
| 
 | ||||
| 		type: { | ||||
| 			validator: $.optional.str.match(/^[a-zA-Z\/\-\*]+$/) | ||||
| 			validator: $.optional.str.match(/^[a-zA-Z\/\-*]+$/) | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ for (const endpoint of endpoints) { | |||
| 	} else { | ||||
| 		if (endpoint.name.includes('-')) { | ||||
| 			// 後方互換性のため
 | ||||
| 			router.post(`/${endpoint.name.replace(/\-/g, '_')}`, handler.bind(null, endpoint)); | ||||
| 			router.post(`/${endpoint.name.replace(/-/g, '_')}`, handler.bind(null, endpoint)); | ||||
| 		} | ||||
| 		router.post(`/${endpoint.name}`, handler.bind(null, endpoint)); | ||||
| 	} | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ export function convertSchemaToOpenApiSchema(schema: Schema) { | |||
| 	const res: any = schema; | ||||
| 
 | ||||
| 	if (schema.type === 'object' && schema.properties) { | ||||
| 		res.required = Object.entries(schema.properties).filter(([k, v]) => v.optional !== true).map(([k]) => k); | ||||
| 		res.required = Object.entries(schema.properties).filter(([k, v]) => !v.optional).map(([k]) => k); | ||||
| 
 | ||||
| 		for (const k of Object.keys(schema.properties)) { | ||||
| 			res.properties[k] = convertSchemaToOpenApiSchema(schema.properties[k]); | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ | |||
| 		"radix": false, | ||||
| 		"ban-types": [ | ||||
| 			true, | ||||
| 			"Object" | ||||
| 			["Object", "Use {} instead."] | ||||
| 		], | ||||
| 		"ban": [ | ||||
| 			true, | ||||
|  |  | |||
|  | @ -95,7 +95,7 @@ module.exports = { | |||
| 				loader: 'css-loader' | ||||
| 			}, postcss] | ||||
| 		}, { | ||||
| 			test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/, | ||||
| 			test: /\.(eot|woff|woff2|svg|ttf)([?]?.*)$/, | ||||
| 			loader: 'url-loader' | ||||
| 		}, { | ||||
| 			test: /\.json5$/, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue