forked from FoundKeyGang/FoundKey
[Client] Resolve #3686
This commit is contained in:
parent
d059d7f972
commit
a5f09c90dd
2 changed files with 41 additions and 5 deletions
|
@ -14,16 +14,34 @@ export default Vue.extend({
|
||||||
i18n: i18n('desktop/views/components/ui.header.search.vue'),
|
i18n: i18n('desktop/views/components/ui.header.search.vue'),
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
q: ''
|
q: '',
|
||||||
|
wait: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onSubmit() {
|
async onSubmit() {
|
||||||
|
if (this.wait) return;
|
||||||
|
|
||||||
const q = this.q.trim();
|
const q = this.q.trim();
|
||||||
if (q.startsWith('@')) {
|
if (q.startsWith('@')) {
|
||||||
this.$router.push(`/${q}`);
|
this.$router.push(`/${q}`);
|
||||||
} else if (q.startsWith('#')) {
|
} else if (q.startsWith('#')) {
|
||||||
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
||||||
|
} else if (q.startsWith('https://')) {
|
||||||
|
this.wait = true;
|
||||||
|
try {
|
||||||
|
const res = await this.$root.api('ap/show', {
|
||||||
|
uri: q
|
||||||
|
});
|
||||||
|
if (res.type == 'User') {
|
||||||
|
this.$router.push(`/@${res.object.username}@${res.object.host}`);
|
||||||
|
} else if (res.type == 'Note') {
|
||||||
|
this.$router.push(`/notes/${res.object.id}`);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
this.wait = false;
|
||||||
} else {
|
} else {
|
||||||
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,8 @@ export default Vue.extend({
|
||||||
hasGameInvitation: false,
|
hasGameInvitation: false,
|
||||||
connection: null,
|
connection: null,
|
||||||
aboutUrl: `/docs/${lang}/about`,
|
aboutUrl: `/docs/${lang}/about`,
|
||||||
announcements: []
|
announcements: [],
|
||||||
|
searching: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -95,17 +96,34 @@ export default Vue.extend({
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
search() {
|
search() {
|
||||||
|
if (this.searching) return;
|
||||||
|
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
title: this.$t('search'),
|
title: this.$t('search'),
|
||||||
input: true
|
input: true
|
||||||
}).then(({ canceled, result: query }) => {
|
}).then(async ({ canceled, result: query }) => {
|
||||||
if (canceled) return;
|
if (canceled) return;
|
||||||
|
|
||||||
const q = query.trim();
|
const q = this.q.trim();
|
||||||
if (q.startsWith('@')) {
|
if (q.startsWith('@')) {
|
||||||
this.$router.push(`/${q}`);
|
this.$router.push(`/${q}`);
|
||||||
} else if (q.startsWith('#')) {
|
} else if (q.startsWith('#')) {
|
||||||
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
this.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
||||||
|
} else if (q.startsWith('https://')) {
|
||||||
|
this.searching = true;
|
||||||
|
try {
|
||||||
|
const res = await this.$root.api('ap/show', {
|
||||||
|
uri: q
|
||||||
|
});
|
||||||
|
if (res.type == 'User') {
|
||||||
|
this.$router.push(`/@${res.object.username}@${res.object.host}`);
|
||||||
|
} else if (res.type == 'Note') {
|
||||||
|
this.$router.push(`/notes/${res.object.id}`);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
this.searching = false;
|
||||||
} else {
|
} else {
|
||||||
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
this.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue