browser-extension-settings 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,6 +19,4 @@ Copyright (c) 2023 [Pipecraft](https://www.pipecraft.net). Licensed under the [M
19
19
  ## >\_
20
20
 
21
21
  [![Pipecraft](https://img.shields.io/badge/site-pipecraft-brightgreen)](https://www.pipecraft.net)
22
- [![UTags](https://img.shields.io/badge/site-UTags-brightgreen)](https://utags.pipecraft.net)
23
- [![DTO](https://img.shields.io/badge/site-DTO-brightgreen)](https://dto.pipecraft.net)
24
- [![BestXTools](https://img.shields.io/badge/site-bestxtools-brightgreen)](https://www.bestxtools.com)
22
+ [![UTags](https://img.shields.io/badge/site-UTags-brightgreen)](https://utags.link)
@@ -7,8 +7,8 @@ import {
7
7
  createHTML,
8
8
  removeClass,
9
9
  } from "browser-extension-utils"
10
- import { openButton, openInNewTabButton } from "./common"
11
- import { i } from "./messages"
10
+ import { openButton, openInNewTabButton } from "./common.js"
11
+ import { i } from "./messages/index.js"
12
12
 
13
13
  type InstalledExtension = {
14
14
  id: string
package/lib/index.ts CHANGED
@@ -5,4 +5,4 @@ export {
5
5
  getSettingsValue,
6
6
  saveSettingsValues,
7
7
  resetSettingsValues,
8
- } from "./settings"
8
+ } from "./settings.js"
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Einstellungen",
3
+ "settings.otherExtensions": "Andere Erweiterungen",
4
+ "settings.locale": "Sprache",
5
+ "settings.displaySettingsButtonInSideMenu": "Einstellungsschaltfläche im Seitenmenü anzeigen",
6
+ "settings.menu.settings": "⚙️ Einstellungen",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Benutzer-Tags zu Links hinzufügen",
8
+ "settings.extensions.links-helper.title": "🔗 Link-Assistent",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - V2EX Minimalistischer Stil",
11
+ "settings.extensions.replace-ugly-avatars.title": "Hässliche Avatare ersetzen",
12
+ "settings.extensions.more-by-pipecraft.title": "Weitere nützliche Benutzerskripte finden",
13
+ }
14
+
15
+ export default messages
@@ -1,6 +1,7 @@
1
1
  const messages = {
2
2
  "settings.title": "Settings",
3
3
  "settings.otherExtensions": "Other Extensions",
4
+ "settings.locale": "Language",
4
5
  "settings.displaySettingsButtonInSideMenu": "Display Settings Button in Side Menu",
5
6
  "settings.menu.settings": "⚙️ Settings",
6
7
  "settings.extensions.utags.title": "🏷️ UTags - Add usertags to links",
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Configuración",
3
+ "settings.otherExtensions": "Otras extensiones",
4
+ "settings.locale": "Idioma",
5
+ "settings.displaySettingsButtonInSideMenu": "Mostrar botón de configuración en el menú lateral",
6
+ "settings.menu.settings": "⚙️ Configuración",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Agregar etiquetas de usuario a los enlaces",
8
+ "settings.extensions.links-helper.title": "🔗 Asistente de enlaces",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - Estilo minimalista V2EX",
11
+ "settings.extensions.replace-ugly-avatars.title": "Reemplazar avatares feos",
12
+ "settings.extensions.more-by-pipecraft.title": "Encontrar más scripts de usuario útiles",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Paramètres",
3
+ "settings.otherExtensions": "Autres extensions",
4
+ "settings.locale": "Langue",
5
+ "settings.displaySettingsButtonInSideMenu": "Afficher le bouton des paramètres dans le menu latéral",
6
+ "settings.menu.settings": "⚙️ Paramètres",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Ajouter des balises utilisateur aux liens",
8
+ "settings.extensions.links-helper.title": "🔗 Assistant de liens",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - Style minimaliste V2EX",
11
+ "settings.extensions.replace-ugly-avatars.title": "Remplacer les avatars laids",
12
+ "settings.extensions.more-by-pipecraft.title": "Trouver plus de scripts utilisateur utiles",
13
+ }
14
+
15
+ export default messages
@@ -1,8 +1,55 @@
1
- import { initI18n } from "browser-extension-i18n"
2
- import messagesEn from "./en"
3
- import messagesZh from "./zh-cn"
4
-
5
- export const i = initI18n({
6
- "en,en-US": messagesEn,
7
- "zh,zh-CN": messagesZh,
8
- })
1
+ import { initAvailableLocales, initI18n, extractLocaleFromNavigator } from "browser-extension-i18n"
2
+ import messagesEn from "./en.js"
3
+ import messagesZh from "./zh-cn.js"
4
+ import messagesZhHk from "./zh-hk.js"
5
+ import messagesZhTw from "./zh-tw.js"
6
+ import messagesRu from "./ru.js"
7
+ import messagesKo from "./ko.js"
8
+ import messagesJa from "./ja.js"
9
+ import messagesFr from "./fr.js"
10
+ import messagesDe from "./de.js"
11
+ import messagesIt from "./it.js"
12
+ import messagesEs from "./es.js"
13
+ import messagesPt from "./pt.js"
14
+ import messagesVi from "./vi.js"
15
+
16
+ const localeMap = {
17
+ en: messagesEn,
18
+ "en-US": messagesEn,
19
+ zh: messagesZh,
20
+ "zh-CN": messagesZh,
21
+ "zh-HK": messagesZhHk,
22
+ "zh-TW": messagesZhTw,
23
+ ru: messagesRu,
24
+ "ru-RU": messagesRu,
25
+ ko: messagesKo,
26
+ "ko-KR": messagesKo,
27
+ ja: messagesJa,
28
+ "ja-JP": messagesJa,
29
+ fr: messagesFr,
30
+ "fr-FR": messagesFr,
31
+ de: messagesDe,
32
+ "de-DE": messagesDe,
33
+ it: messagesIt,
34
+ "it-IT": messagesIt,
35
+ es: messagesEs,
36
+ "es-ES": messagesEs,
37
+ pt: messagesPt,
38
+ "pt-PT": messagesPt,
39
+ "pt-BR": messagesPt,
40
+ vi: messagesVi,
41
+ "vi-VN": messagesVi,
42
+ }
43
+
44
+ const locales = Object.keys(localeMap)
45
+
46
+ initAvailableLocales(locales)
47
+
48
+ export const prefferedLocale = extractLocaleFromNavigator() || "en"
49
+
50
+ // eslint-disable-next-line import/no-mutable-exports
51
+ export let i = initI18n(localeMap, prefferedLocale)
52
+
53
+ export function resetI18n(locale?: string) {
54
+ i = initI18n(localeMap, locale || prefferedLocale)
55
+ }
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Impostazioni",
3
+ "settings.otherExtensions": "Altre estensioni",
4
+ "settings.locale": "Lingua",
5
+ "settings.displaySettingsButtonInSideMenu": "Mostra il pulsante delle impostazioni nel menu laterale",
6
+ "settings.menu.settings": "⚙️ Impostazioni",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Aggiungi tag utente ai collegamenti",
8
+ "settings.extensions.links-helper.title": "🔗 Assistente collegamenti",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - Stile minimalista V2EX",
11
+ "settings.extensions.replace-ugly-avatars.title": "Sostituisci avatar brutti",
12
+ "settings.extensions.more-by-pipecraft.title": "Trova più script utente utili",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "設定",
3
+ "settings.otherExtensions": "その他の拡張機能",
4
+ "settings.locale": "言語",
5
+ "settings.displaySettingsButtonInSideMenu": "サイドメニューに設定ボタンを表示",
6
+ "settings.menu.settings": "⚙️ 設定",
7
+ "settings.extensions.utags.title": "🏷️ UTags - リンクにユーザータグを追加",
8
+ "settings.extensions.links-helper.title": "🔗 リンクヘルパー",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - V2EX ミニマルスタイル",
11
+ "settings.extensions.replace-ugly-avatars.title": "醜いアバターを置き換える",
12
+ "settings.extensions.more-by-pipecraft.title": "より便利なユーザースクリプトを見つける",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "설정",
3
+ "settings.otherExtensions": "다른 확장 프로그램",
4
+ "settings.locale": "언어",
5
+ "settings.displaySettingsButtonInSideMenu": "사이드 메뉴에 설정 버튼 표시",
6
+ "settings.menu.settings": "⚙️ 설정",
7
+ "settings.extensions.utags.title": "🏷️ UTags - 링크에 사용자 태그 추가",
8
+ "settings.extensions.links-helper.title": "🔗 링크 도우미",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - V2EX 미니멀 스타일",
11
+ "settings.extensions.replace-ugly-avatars.title": "못생긴 아바타 교체",
12
+ "settings.extensions.more-by-pipecraft.title": "더 유용한 사용자 스크립트 찾기",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Configurações",
3
+ "settings.otherExtensions": "Outras extensões",
4
+ "settings.locale": "Idioma",
5
+ "settings.displaySettingsButtonInSideMenu": "Exibir botão de configurações no menu lateral",
6
+ "settings.menu.settings": "⚙️ Configurações",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Adicionar tags de usuário aos links",
8
+ "settings.extensions.links-helper.title": "🔗 Assistente de links",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - Estilo minimalista V2EX",
11
+ "settings.extensions.replace-ugly-avatars.title": "Substituir avatares feios",
12
+ "settings.extensions.more-by-pipecraft.title": "Encontrar mais scripts de usuário úteis",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Настройки",
3
+ "settings.otherExtensions": "Другие расширения",
4
+ "settings.locale": "Язык",
5
+ "settings.displaySettingsButtonInSideMenu": "Показать кнопку настроек в боковом меню",
6
+ "settings.menu.settings": "⚙️ Настройки",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Добавить пользовательские теги к ссылкам",
8
+ "settings.extensions.links-helper.title": "🔗 Помощник ссылок",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - V2EX Минималистичный стиль",
11
+ "settings.extensions.replace-ugly-avatars.title": "Заменить некрасивые аватары",
12
+ "settings.extensions.more-by-pipecraft.title": "Найти больше полезных пользовательских скриптов",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "Cài đặt",
3
+ "settings.otherExtensions": "Tiện ích mở rộng khác",
4
+ "settings.locale": "Ngôn ngữ",
5
+ "settings.displaySettingsButtonInSideMenu": "Hiển thị nút cài đặt trong menu bên",
6
+ "settings.menu.settings": "⚙️ Cài đặt",
7
+ "settings.extensions.utags.title": "🏷️ UTags - Thêm thẻ người dùng vào liên kết",
8
+ "settings.extensions.links-helper.title": "🔗 Trợ lý liên kết",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - Phong cách tối giản V2EX",
11
+ "settings.extensions.replace-ugly-avatars.title": "Thay thế avatar xấu",
12
+ "settings.extensions.more-by-pipecraft.title": "Tìm thêm script người dùng hữu ích",
13
+ }
14
+
15
+ export default messages
@@ -1,6 +1,7 @@
1
1
  export const messages = {
2
2
  "settings.title": "设置",
3
3
  "settings.otherExtensions": "其他扩展",
4
+ "settings.locale": "语言",
4
5
  "settings.displaySettingsButtonInSideMenu": "在侧边栏菜单中显示设置按钮",
5
6
  "settings.menu.settings": "⚙️ 设置",
6
7
  "settings.extensions.utags.title": "🏷️ 小鱼标签 (UTags) - 为链接添加用户标签",
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "設定",
3
+ "settings.otherExtensions": "其他擴充功能",
4
+ "settings.locale": "語言",
5
+ "settings.displaySettingsButtonInSideMenu": "在側邊欄選單中顯示設定按鈕",
6
+ "settings.menu.settings": "⚙️ 設定",
7
+ "settings.extensions.utags.title": "🏷️ 小魚標籤 (UTags) - 為連結添加用戶標籤",
8
+ "settings.extensions.links-helper.title": "🔗 連結助手",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - V2EX 極簡風格",
11
+ "settings.extensions.replace-ugly-avatars.title": "賜你個頭像吧",
12
+ "settings.extensions.more-by-pipecraft.title": "更多有趣的腳本",
13
+ }
14
+
15
+ export default messages
@@ -0,0 +1,15 @@
1
+ export const messages = {
2
+ "settings.title": "設定",
3
+ "settings.otherExtensions": "其他擴充功能",
4
+ "settings.locale": "語言",
5
+ "settings.displaySettingsButtonInSideMenu": "在側邊欄選單中顯示設定按鈕",
6
+ "settings.menu.settings": "⚙️ 設定",
7
+ "settings.extensions.utags.title": "🏷️ 小魚標籤 (UTags) - 為連結新增使用者標籤",
8
+ "settings.extensions.links-helper.title": "🔗 連結助手",
9
+ "settings.extensions.v2ex.rep.title": "V2EX.REP - 专注提升 V2EX 主题回复浏览体验",
10
+ "settings.extensions.v2ex.min.title": "v2ex.min - V2EX 極簡風格",
11
+ "settings.extensions.replace-ugly-avatars.title": "替換醜陋的頭像",
12
+ "settings.extensions.more-by-pipecraft.title": "更多有趣的腳本",
13
+ }
14
+
15
+ export default messages
package/lib/settings.ts CHANGED
@@ -18,16 +18,16 @@ import {
18
18
  runWhenHeadExists,
19
19
  } from "browser-extension-utils"
20
20
  import styleText from "data-text:./style.scss"
21
- import { createSwitchOption } from "./switch"
21
+ import { createSwitchOption } from "./switch.js"
22
22
  import {
23
23
  createExtensionList,
24
24
  addCurrentExtension,
25
25
  activeExtension,
26
26
  activeExtensionList,
27
27
  deactiveExtensionList,
28
- } from "./extension-list"
29
- import { besVersion, settingButton } from "./common"
30
- import { i } from "./messages"
28
+ } from "./extension-list.js"
29
+ import { besVersion, settingButton } from "./common.js"
30
+ import { i, prefferedLocale, resetI18n } from "./messages/index.js"
31
31
 
32
32
  const prefix = "browser_extension_settings_"
33
33
 
@@ -82,9 +82,9 @@ type SettingsSelectItem = {
82
82
  title: string
83
83
  icon?: string
84
84
  type: "select"
85
- options: { string: { string: any } }
85
+ options: Record<string, string | number>
86
86
  group?: number
87
- defaultValue?: any
87
+ defaultValue?: string | number
88
88
  }
89
89
 
90
90
  type SettingsTipItem = {
@@ -321,7 +321,7 @@ function createSettingsElement() {
321
321
  })
322
322
 
323
323
  addElement(settingsMain, "a", {
324
- textContent: "Settings",
324
+ textContent: i("settings.title"),
325
325
  class: "navigation_go_previous",
326
326
  onclick() {
327
327
  activeExtensionList()
@@ -483,7 +483,11 @@ function createSettingsElement() {
483
483
  })
484
484
  break
485
485
  }
486
+
486
487
  // No default
488
+ default: {
489
+ break
490
+ }
487
491
  }
488
492
  }
489
493
  }
@@ -551,13 +555,30 @@ function addCommonSettings(settingsTable: SettingsTable) {
551
555
  }
552
556
  }
553
557
 
558
+ // Switch locale
559
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
560
+ settingsTable.locale = {
561
+ title: i("settings.locale"),
562
+ type: "select",
563
+ defaultValue: prefferedLocale,
564
+ options: {
565
+ // eslint-disable-next-line @typescript-eslint/naming-convention
566
+ English: "en",
567
+ 中文: "zh",
568
+ // eslint-disable-next-line @typescript-eslint/naming-convention
569
+ Русский: "ru",
570
+ },
571
+ group: ++maxGroup,
572
+ } as SettingsSelectItem
573
+
574
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
554
575
  settingsTable.displaySettingsButtonInSideMenu = {
555
576
  title: i("settings.displaySettingsButtonInSideMenu"),
556
577
  defaultValue: !(
557
578
  typeof GM === "object" && typeof GM.registerMenuCommand === "function"
558
579
  ),
559
- group: maxGroup + 1,
560
- }
580
+ group: ++maxGroup,
581
+ } as SettingsSwitchItem
561
582
  }
562
583
 
563
584
  function handleShowSettingsUrl() {
@@ -588,12 +609,28 @@ export const initSettings = async (options: SettingsOptions) => {
588
609
  // console.log(JSON.stringify(settings, null, 2))
589
610
  await updateOptions()
590
611
  addSideMenu()
612
+
613
+ const newLocale =
614
+ (getSettingsValue("locale") as string | undefined) || prefferedLocale
615
+ console.log("lastLocale:", lastLocale, "newLocale:", newLocale)
616
+ if (lastLocale !== newLocale) {
617
+ closeModal()
618
+ resetI18n(newLocale)
619
+ lastLocale = newLocale
620
+ setTimeout(showSettings, 100)
621
+ }
622
+
591
623
  if (typeof options.onValueChange === "function") {
592
624
  options.onValueChange()
593
625
  }
594
626
  })
595
627
 
596
628
  settings = await getSettings()
629
+
630
+ let lastLocale =
631
+ (getSettingsValue("locale") as string | undefined) || prefferedLocale
632
+ resetI18n(lastLocale)
633
+
597
634
  runWhenHeadExists(() => {
598
635
  addStyle(getSettingsStyle())
599
636
  })
package/lib/style.scss CHANGED
@@ -434,20 +434,20 @@
434
434
  #browser_extension_settings_container {
435
435
  right: 10px;
436
436
 
437
- .extension_list_container {
438
- display: none;
439
- }
440
- .extension_list_container.bes_active {
441
- display: block;
442
- }
443
- .extension_list_container.bes_active + div {
444
- display: none;
445
- }
446
- }
437
+ .browser_extension_settings_wrapper {
438
+ a.navigation_go_previous {
439
+ display: block;
440
+ }
447
441
 
448
- #browser_extension_settings_main {
449
- a.navigation_go_previous {
450
- display: block;
442
+ .extension_list_container {
443
+ display: none;
444
+ }
445
+ .extension_list_container.bes_active {
446
+ display: block;
447
+ }
448
+ .extension_list_container.bes_active + div {
449
+ display: none;
450
+ }
451
451
  }
452
452
  }
453
453
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browser-extension-settings",
3
- "version": "0.5.5",
3
+ "version": "0.6.0",
4
4
  "description": "Settings module for developing browser extensions and userscripts",
5
5
  "type": "module",
6
6
  "main": "./lib/index.ts",
@@ -30,16 +30,19 @@
30
30
  },
31
31
  "homepage": "https://github.com/utags/browser-extension-settings#readme",
32
32
  "dependencies": {
33
- "browser-extension-i18n": "^0.0.6",
33
+ "browser-extension-i18n": "^0.1.1",
34
34
  "browser-extension-storage": "^0.1.2",
35
- "browser-extension-utils": "^0.1.18"
35
+ "browser-extension-utils": "^0.2.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/chrome": "^0.0.243",
38
+ "@types/chrome": "^0.1.4",
39
+ "@vitest/coverage-v8": "^3.2.4",
40
+ "jsdom": "^26.1.0",
39
41
  "npm-run-all": "^4.1.5",
40
- "prettier": "^3.0.2",
41
- "typescript": "^5.1.6",
42
- "xo": "^0.56.0"
42
+ "prettier": "^3.6.2",
43
+ "typescript": "^5.9.2",
44
+ "vitest": "^3.2.4",
45
+ "xo": "^0.60.0"
43
46
  },
44
47
  "files": [
45
48
  "lib/",
@@ -47,12 +50,13 @@
47
50
  "README.md"
48
51
  ],
49
52
  "engines": {
50
- "node": "^14.13.1 || >=16.0.0"
53
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
51
54
  },
52
55
  "xo": {
53
56
  "space": 2,
54
57
  "prettier": true,
55
58
  "globals": [
59
+ "GM",
56
60
  "document"
57
61
  ],
58
62
  "rules": {