[Client] Resolve #2951

あと検索フォームでサジェストを有効に
This commit is contained in:
syuilo 2018-12-16 08:45:10 +09:00
parent 2faa58928f
commit b7c5c71c6f
No known key found for this signature in database
GPG key ID: BDC4C49D06AB9D69
7 changed files with 31 additions and 18 deletions

View file

@ -9,7 +9,7 @@
@keypress="onKeypress"
@paste="onPaste"
:placeholder="$t('input-message-here')"
v-autocomplete="'text'"
v-autocomplete="{ model: 'text' }"
></textarea>
<div class="file" @click="file = null" v-if="file">{{ file.name }}</div>
<mk-uploader ref="uploader" @uploaded="onUploaded"/>

View file

@ -21,21 +21,23 @@ class Autocomplete {
private suggestion: any;
private textarea: any;
private vm: any;
private model: any;
private currentType: string;
private opts: {
model: string;
};
private get text(): string {
return this.vm[this.model];
return this.vm[this.opts.model];
}
private set text(text: string) {
this.vm[this.model] = text;
this.vm[this.opts.model] = text;
}
/**
*
*/
constructor(textarea, vm, model) {
constructor(textarea, vm, opts) {
//#region BIND
this.onInput = this.onInput.bind(this);
this.complete = this.complete.bind(this);
@ -45,7 +47,7 @@ class Autocomplete {
this.suggestion = null;
this.textarea = textarea;
this.vm = vm;
this.model = model;
this.opts = opts;
}
/**

View file

@ -17,12 +17,12 @@
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" :title="$t('click-to-tagging')">#{{ tag }}</a>
</div>
<div class="local-only" v-if="localOnly == true">{{ $t('local-only-message') }}</div>
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="'cw'">
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="{ model: 'cw' }">
<div class="textarea">
<textarea :class="{ with: (files.length != 0 || poll) }"
ref="text" v-model="text" :disabled="posting"
@keydown="onKeydown" @paste="onPaste" :placeholder="placeholder"
v-autocomplete="'text'"
v-autocomplete="{ model: 'text' }"
></textarea>
<button class="emoji" @click="emoji" ref="emoji">
<fa :icon="['far', 'laugh']"/>

View file

@ -1,7 +1,7 @@
<template>
<form class="search" @submit.prevent="onSubmit">
<form class="wlvfdpkp" @submit.prevent="onSubmit">
<i><fa icon="search"/></i>
<input v-model="q" type="search" :placeholder="$t('placeholder')"/>
<input v-model="q" type="search" :placeholder="$t('placeholder')" v-autocomplete="{ model: 'q' }"/>
<div class="result"></div>
</form>
</template>
@ -19,10 +19,13 @@ export default Vue.extend({
},
methods: {
onSubmit() {
if (this.q.startsWith('#')) {
this.$router.push(`/tags/${encodeURIComponent(this.q.substr(1))}`);
const q = this.q.trim();
if (q.startsWith('@')) {
this.$router.push(`/${q}`);
} else if (q.startsWith('#')) {
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
} else {
this.$router.push(`/search?q=${encodeURIComponent(this.q)}`);
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
}
}
}
@ -30,7 +33,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.search
.wlvfdpkp
@media (max-width 800px)
display none !important

View file

@ -15,7 +15,7 @@
@paste="onPaste"
:placeholder="placeholder"
ref="text"
v-autocomplete="'text'"
v-autocomplete="{ model: 'text' }"
></textarea>
<button class="emoji" @click="emoji" ref="emoji">
<fa :icon="['far', 'laugh']"/>

View file

@ -19,8 +19,8 @@
</span>
<a @click="addVisibleUser">+{{ $t('add-visible-user') }}</a>
</div>
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="'cw'">
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder" v-autocomplete="'text'"></textarea>
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="{ model: 'cw' }">
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder" v-autocomplete="{ model: 'text' }"></textarea>
<div class="attaches" v-show="files.length != 0">
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
<div class="file" v-for="file in files" :key="file.id">

View file

@ -100,7 +100,15 @@ export default Vue.extend({
input: true
}).then(({ canceled, result: query }) => {
if (canceled) return;
this.$router.push(`/search?q=${encodeURIComponent(query)}`);
const q = query.trim();
if (q.startsWith('@')) {
this.$router.push(`/${q}`);
} else if (q.startsWith('#')) {
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
} else {
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
}
});
},