Skip to content

Commit

Permalink
Merge pull request #554
Browse files Browse the repository at this point in the history
* feat: custome search engine

* fix import

* Rollback elements
  • Loading branch information
1673beta authored Jan 1, 2025
1 parent 23f47b9 commit 24b3750
Show file tree
Hide file tree
Showing 6 changed files with 212 additions and 2 deletions.
14 changes: 14 additions & 0 deletions locales/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3170,3 +3170,17 @@ _scheduledNoteDelete:
_getQRCode:
title: "Scan QR Code"
description: "Can scan or share the QR code below."

_searchSite:
title: "Search Engine"
description: "Change search engine that used in search MFM."
google: "Google"
bing: "Bing"
yahoo: "Yahoo"
baidu: "Baidu"
naver: "NAVER"
duckduckgo: "DuckDuckGo"
other: "Other"
otherDescription: "Use Other search engine"
query: "Query"
queryDescription: "Input query scheme for search engine. For example, If https://www.ecosia.org/search?q=test, input 'q'."
113 changes: 113 additions & 0 deletions locales/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12115,6 +12115,65 @@ export interface Locale extends ILocale {
*/
"sent": string;
};
"_remoteLookupErrors": {
"_federationNotAllowed": {
/**
* このサーバーとは通信できません
*/
"title": string;
/**
* このサーバーとの通信が無効化されているか、このサーバーをブロックしている・ブロックされている可能性があります。
* サーバー管理者にお問い合わせください。
*/
"description": string;
};
"_uriInvalid": {
/**
* URIが不正です
*/
"title": string;
/**
* 入力されたURIに問題があります。URIに使用できない文字を入力していないか確認してください。
*/
"description": string;
};
"_requestFailed": {
/**
* リクエストに失敗しました
*/
"title": string;
/**
* このサーバーとの通信に失敗しました。相手サーバーがダウンしている可能性があります。また、不正なURIや存在しないURIを入力していないか確認してください。
*/
"description": string;
};
"_responseInvalid": {
/**
* レスポンスが不正です
*/
"title": string;
/**
* このサーバーと通信することはできましたが、得られたデータが不正なものでした。
*/
"description": string;
};
"_responseInvalidIdHostNotMatch": {
/**
* 入力されたURIのドメインと最終的に得られたURIのドメインとが異なります。第三者のサーバーを介してリモートのコンテンツを照会している場合は、発信元のサーバーで取得できるURIを使用して照会し直してください。
*/
"description": string;
};
"_noSuchObject": {
/**
* 見つかりません
*/
"title": string;
/**
* 要求されたリソースは見つかりませんでした。URIをもう一度お確かめください。
*/
"description": string;
};
};
"_abuse": {
"_resolver": {
/**
Expand Down Expand Up @@ -12303,6 +12362,60 @@ export interface Locale extends ILocale {
*/
"description": string;
};
"_searchSite": {
/**
* 検索エンジン
*/
"title": string;
/**
* MFMの検索構文で検索できるサイトを変更します。
*/
"description": string;
/**
* Google
*/
"google": string;
/**
* Bing
*/
"bing": string;
/**
* Yahoo
*/
"yahoo": string;
/**
* Baidu
*/
"baidu": string;
/**
* NAVER
*/
"naver": string;
/**
* DuckDuckGo
*/
"duckduckgo": string;
/**
* その他
*/
"other": string;
/**
* その他の検索エンジン
*/
"otherSearchEngine": string;
/**
* その他の検索エンジンを使用します。
*/
"otherDescription": string;
/**
* 検索クエリ
*/
"query": string;
/**
* 検索エンジンが使用するクエリを入力します。(例: https://www.ecosia.org/search?q=test の場合qを入れる)
*/
"queryDescription": string;
};
}
declare const locales: {
[lang: string]: Locale;
Expand Down
15 changes: 15 additions & 0 deletions locales/ja-JP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3297,3 +3297,18 @@ _scheduledNoteDelete:
_getQRCode:
title: "QRコードをスキャンする"
description: "以下のQRコードをスキャンまたは共有できます。"

_searchSite:
title: "検索エンジン"
description: "MFMの検索構文で検索できるサイトを変更します。"
google: "Google"
bing: "Bing"
yahoo: "Yahoo"
baidu: "Baidu"
naver: "NAVER"
duckduckgo: "DuckDuckGo"
other: "その他"
otherSearchEngine: "その他の検索エンジン"
otherDescription: "その他の検索エンジンを使用します。"
query: "検索クエリ"
queryDescription: "検索エンジンが使用するクエリを入力します。(例: https://www.ecosia.org/search?q=test の場合qを入れる)"
37 changes: 35 additions & 2 deletions packages/frontend/src/components/MkGoogle.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { ref } from 'vue';
import { i18n } from '@/i18n.js';
import { defaultStore } from '@/store.js';

const props = defineProps<{
q: string;
Expand All @@ -22,8 +23,40 @@ const query = ref(props.q);

const search = () => {
const sp = new URLSearchParams();
sp.append('q', query.value);
window.open(`https://www.google.com/search?${sp.toString()}`, '_blank', 'noopener');
let url = '';
switch (defaultStore.state.searchEngine) {
case 'google':
sp.append('q', query.value);
url = `https://www.google.com/search?${sp.toString()}`;
break;
case 'bing':
sp.append('q', query.value);
url = `https://www.bing.com/search?${sp.toString()}`;
break;
case 'yahoo':
sp.append('p', query.value);
url = `https://search.yahoo.com/search?${sp.toString()}`;
break;
case 'baidu':
// see detail: https://www.jademond.com/magazine/baidu-search-url-parameters/
sp.append('wd', query.value);
url = `https://www.baidu.com/s?${sp.toString()}`;
break;
case 'naver':
sp.append('query', query.value);
url = `https://search.naver.com/search.naver?${sp.toString()}`;
break;
case 'duckduckgo':
sp.append('q', query.value);
url = `https://duckduckgo.com/?${sp.toString()}`;
break;
case 'other':
sp.append(defaultStore.state.searchEngineUrlQuery, query.value);
url = `${defaultStore.state.searchEngineUrl}${sp.toString()}`;
break;
}

window.open(url, '_blank', 'noopener');
};
</script>

Expand Down
23 changes: 23 additions & 0 deletions packages/frontend/src/pages/settings/general.vue
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,25 @@ SPDX-License-Identifier: AGPL-3.0-only
<option value="S">{{ i18n.ts._hemisphere.S }}</option>
<template #caption>{{ i18n.ts._hemisphere.caption }}</template>
</MkRadios>
<MkSelect v-model="searchEngine">
<template #label>{{ i18n.ts._searchSite.title }}</template>
<template #caption>{{ i18n.ts._searchSite.description }}</template>
<option value="google">{{ i18n.ts._searchSite.google }}</option>
<option value="bing">{{ i18n.ts._searchSite.bing }}</option>
<option value="yahoo">{{ i18n.ts._searchSite.yahoo }}</option>
<option value="baidu">{{ i18n.ts._searchSite.baidu }}</option>
<option value="naver">{{ i18n.ts._searchSite.naver }}</option>
<option value="duckduckgo">{{ i18n.ts._searchSite.duckduckgo }}</option>
<option value="other">{{ i18n.ts._searchSite.other }}</option>
</MkSelect>
<MkInput v-if="defaultStore.state.searchEngine == 'other'" v-model="searchEngineUrl">
<template #label>{{ i18n.ts._searchSite.otherSearchEngine }}</template>
<template #caption>{{ i18n.ts._searchSite.otherDescription }}</template>
</MkInput>
<MkInput v-if="defaultStore.state.searchEngine == 'other'" v-model="searchEngineUrlQuery">
<template #label>{{ i18n.ts._searchSite.query }}</template>
<template #caption>{{ i18n.ts._searchSite.queryDescription }}</template>
</MkInput>
<MkFolder>
<template #label>{{ i18n.ts.additionalEmojiDictionary }}</template>
<div class="_buttons">
Expand Down Expand Up @@ -191,6 +210,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js';
import { miLocalStorage } from '@/local-storage.js';
import { globalEvents } from '@/events.js';
import { $i } from '@/account.js';
import MkInput from '@/components/MkInput.vue';

const lang = ref(miLocalStorage.getItem('lang'));
const dataSaver = ref(defaultStore.state.dataSaver);
Expand Down Expand Up @@ -223,6 +243,9 @@ const useAutoTranslate = computed(defaultStore.makeGetterSetter('useAutoTranslat
const welcomeBackToast = computed(defaultStore.makeGetterSetter('welcomeBackToast'));
const disableNyaize = computed(defaultStore.makeGetterSetter('disableNyaize'));
const externalNavigationWarning = computed(defaultStore.makeGetterSetter('externalNavigationWarning'));
const searchEngine = computed(defaultStore.makeGetterSetter('searchEngine'));
const searchEngineUrl = computed(defaultStore.makeGetterSetter('searchEngineUrl'));
const searchEngineUrlQuery = computed(defaultStore.makeGetterSetter('searchEngineUrlQuery'));

watch(lang, () => {
miLocalStorage.setItem('lang', lang.value as string);
Expand Down
12 changes: 12 additions & 0 deletions packages/frontend/src/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,18 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'device',
default: false,
},
searchEngine: {
where: 'device',
default: 'google' as 'google' | 'bing' | 'yahoo' | 'baidu'| 'naver' | 'duckduckgo' | 'other',
},
searchEngineUrl: {
where: 'device',
default: 'https://www.ecosia.org/search?',
},
searchEngineUrlQuery: {
where: 'device',
default: 'q',
},

// - Settings/Appearance
collapseReplies: {
Expand Down

0 comments on commit 24b3750

Please sign in to comment.