Skip to content

Commit

Permalink
Improve the process of writing userscripts (#2362)
Browse files Browse the repository at this point in the history
* add link from settings page to userscript directory

* watch for changes to userscript directory
  • Loading branch information
PalmerAL authored Jan 3, 2024
1 parent d082073 commit ff1a185
Show file tree
Hide file tree
Showing 40 changed files with 106 additions and 12 deletions.
6 changes: 5 additions & 1 deletion js/preload/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,11 @@ window.addEventListener('message', function (e) {
return
}

if (e.data && e.data.message && e.data.message === 'showCredentialList') {
if (e.data?.message === 'showCredentialList') {
ipc.send('showCredentialList')
}

if (e.data?.message === 'showUserscriptDirectory') {
ipc.send('showUserscriptDirectory')
}
})
56 changes: 50 additions & 6 deletions js/userscripts.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/* implements userscript support */

var path = require('path')
var chokidar = require('chokidar')

var webviews = require('webviews.js')
var settings = require('util/settings/settings.js')
var bangsPlugin = require('searchbar/bangsPlugin.js')
Expand Down Expand Up @@ -65,22 +68,37 @@ function urlMatchesPattern (url, pattern) {
}

const userscripts = {
scriptDir: path.join(window.globalArgs['user-data-path'], 'userscripts'),
scripts: [], // {options: {}, content}
showDirectory: function () {
electron.shell.openPath(userscripts.scriptDir)
},
ensureDirectoryExists: function () {
fs.access(userscripts.scriptDir, fs.constants.R_OK, function (err) {
if (err) {
fs.mkdir(userscripts.scriptDir, function (err) {
if (err) {
console.warn('failed to create userscripts directory', err)
}
})
}
})
},
loadScripts: function () {
userscripts.scripts = []

var path = require('path')
var scriptDir = path.join(window.globalArgs['user-data-path'], 'userscripts')

fs.readdir(scriptDir, function (err, files) {
if (err || files.length === 0) {
fs.readdir(userscripts.scriptDir, function (err, files) {
if (err) {
userscripts.ensureDirectoryExists()
return
} else if (files.length === 0) {
return
}

// store the scripts in memory
files.forEach(function (filename) {
if (filename.endsWith('.js')) {
fs.readFile(path.join(scriptDir, filename), 'utf-8', function (err, file) {
fs.readFile(path.join(userscripts.scriptDir, filename), 'utf-8', function (err, file) {
if (err || !file) {
return
}
Expand Down Expand Up @@ -127,6 +145,26 @@ const userscripts = {
})
})
},
startDirWatcher: function () {
userscripts.stopDirWatcher() // destroy any previous instance
userscripts.watcherInstance = chokidar.watch(userscripts.scriptDir, {
ignoreInitial: true,
disableGlobbing: true,
awaitWriteFinish: {
stabilityThreshold: 500,
pollInterval: 100
}
})
userscripts.watcherInstance.on('all', debounce(function () {
userscripts.loadScripts()
}, 100))
},
stopDirWatcher: function () {
if (userscripts.watcherInstance) {
userscripts.watcherInstance.close()
userscripts.watcherInstance = null
}
},
getMatchingScripts: function (src) {
return userscripts.scripts.filter(function (script) {
if (
Expand Down Expand Up @@ -167,12 +205,18 @@ const userscripts = {
settings.listen('userscriptsEnabled', function (value) {
if (value === true) {
userscripts.loadScripts()
userscripts.startDirWatcher()
} else {
userscripts.scripts = []
userscripts.stopDirWatcher()
}
})
webviews.bindEvent('dom-ready', userscripts.onPageLoad)

webviews.bindIPC('showUserscriptDirectory', function () {
userscripts.showDirectory()
})

bangsPlugin.registerCustomBang({
phrase: '!run',
snippet: l('runUserscript'),
Expand Down
1 change: 1 addition & 0 deletions localization/languages/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "يمكن سكريبت المستخدم من تغير سلوك المواقع - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">معرفة المزيد</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "خاص user-agent إستخدم",
"settingsUpdateNotificationsToggle": "إبحث تلقائيا عن التحديثات",
"settingsUsageStatisticsToggle": {
Expand Down
3 changes: 2 additions & 1 deletion localization/languages/be.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Карыстальнiцкiя скрыпты дазваляюць змяняць паводзіны сайтаў - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">даведацца больш</a>."
},
"settingsUserAgentToggle": "Выкарыстоўваць карыстацкі user agent",
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Выкарыстоўваць карыстацкі user agent",
"settingsUpdateNotificationsToggle": "Аўтаматычна правяраць наяўнасць абнаўленняў",
"settingsUsageStatisticsToggle": {
"unsafeHTML": "Адпраўляць статыстыку выкарыстання (<a href=\"https://github.com/minbrowser/min/blob/master/docs/statistics.md\">Больш інфармацыі</a>)"
Expand Down
1 change: 1 addition & 0 deletions localization/languages/bg.json
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Потребителските скриптове Ви позволяват да промените поведението на уеб сайтове - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">научете повече</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Използване на персонализиран потребителски агент",
"settingsUpdateNotificationsToggle": "Автоматично проверяване за актуализации",
"settingsUsageStatisticsToggle": null, //missing translation
Expand Down
1 change: 1 addition & 0 deletions localization/languages/bn.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "ব্যবহারকারীর স্ক্রিপ্ট আপনাকে ওয়েবসাইটের আচরণ পরিবর্তন করার অনুমতি দেয় - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\"> আরও শিখুন </a>"
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "একটি কাস্টম ব্যবহারকারী এজেন্ট ব্যবহার করুন",
"settingsUpdateNotificationsToggle": "স্বয়ংক্রিয়ভাবে আপডেটগুলির জন্য পরীক্ষা করুন",
"settingsUsageStatisticsToggle": null, //missing translation
Expand Down
1 change: 1 addition & 0 deletions localization/languages/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Els scripts d'usuari et permeten modificar el comportament dels llocs web - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">més informació</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Utilitzar un agent d'usuari personalitzat",
"settingsUpdateNotificationsToggle": "Comprovar actualitzacions automàticament",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Uživatelské skripty umožňují upravit chování webových stránek - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">více informací</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Použít vlastní User-Agent řetězec",
"settingsUpdateNotificationsToggle": "Automaticky kontrolovat aktualizace",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Brugerscripts giver dig mulighed for at ændre adfærd på websteder - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">få mere at vide her</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Brug en brugerdefineret brugeragent",
"settingsUpdateNotificationsToggle": "Kontroller automatisk for opdateringer",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Benutzerdefinierte Skripte erlauben es das Verhalten von Webseiten zu modifizieren - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\"> mehr dazu.</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Benutzerdefinierten Benutzer-Agent nutzen",
"settingsUpdateNotificationsToggle": "Automatisch nach Aktualisierungen überprüfen",
"settingsUsageStatisticsToggle": {
Expand Down
3 changes: 2 additions & 1 deletion localization/languages/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Τα scripts χρηστών σας επιτρέπουν να τροποποιήσετε την συμπεριφορά των ιστοσελίδων - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">μάθετε περισσότερα</a>."
},
"settingsUserAgentToggle": "Χρήση προσαρμοσμένου χρήστη agent",
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Χρήση προσαρμοσμένου χρήστη agent",
"settingsUpdateNotificationsToggle": "Αυτόματος έλεγχος για ενημερώσεις",
"settingsUsageStatisticsToggle": {
"unsafeHTML": "Αποστολή στατιστικών χρήσης (<a href=\"https://github.com/minbrowser/min/blob/master/docs/statistics.md\">Παραπάνω πληροφορίες</a>)"
Expand Down
1 change: 1 addition & 0 deletions localization/languages/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "User scripts allow you to modify the behavior of websites - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">learn more</a>."
},
"settingsUserscriptShowDirectory": "Show script directory",
"settingsUserAgentToggle": "Use a custom user agent",
"settingsUpdateNotificationsToggle": "Automatically check for updates",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Los userscripts te permiten modificar el comportamiento de los sitios web - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">Más información</a>."
}, //"learn more" was translated to "más información" (more info)
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Usar agente de usuario personalizado",
"settingsUpdateNotificationsToggle": "Buscar actualizaciones automáticamente",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "اسکریپت های کاربر این اجازه را به شما می دهند تا رفتار سایت ها را تغییر دهید - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">اطلاعات بیشتر</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": null, //missing translation
"settingsUpdateNotificationsToggle": null, //missing translation
"settingsUsageStatisticsToggle": null, //missing translation
Expand Down
1 change: 1 addition & 0 deletions localization/languages/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Komentosarjat mahdollistavat sivustojen käyttäytymisen mukauttamisen - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">lisätietoja</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Käytä mukautettua käyttäjäagenttia",
"settingsUpdateNotificationsToggle": "Tarkista päivitykset automaattisesti",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Les scripts personnalisés vous permettent de modifier le comportement des pages web - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">en savoir plus (en anglais)</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Utiliser un user-agent particulier",
"settingsUpdateNotificationsToggle": "Vérifier automatiquement pour des mises à jour",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/hr.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Korisničke skripte omogućuju vam izmjenu ponašanja web stranica - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">Saznajte više</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Upotrijebite prilagođeni korisnički agent",
"settingsUpdateNotificationsToggle": "Automatski provjeri ima li ažuriranja",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@
"settingsAutoplayToggle": null, //missing translation
"settingsOpenTabsInForegroundToggle": null, //missing translation
"settingsUserscriptsExplanation": "Felhasználói szkript magyarázat",
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": null, //missing translation
"settingsUpdateNotificationsToggle": null, //missing translation
"settingsUsageStatisticsToggle": null, //missing translation
Expand Down
1 change: 1 addition & 0 deletions localization/languages/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "User script memungkinkan Anda untuk merubah perilaku situs web - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">Pelajari lebih lanjut</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Gunakan user agent khusus",
"settingsUpdateNotificationsToggle": "Cek pembaruan secara otomatis",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Gli script definiti dall'utente ti permettono di modificare il comportamento dei siti - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">scopri di più</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Utilizza un user agent personalizzato",
"settingsUpdateNotificationsToggle": "Controlla automaticamente la presenza di aggiornamenti",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "ユーザースクリプトを使用して、Webサイトの動作を変更できます - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">詳細</a>。"
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "カスタムユーザーエージェントを使用する",
"settingsUpdateNotificationsToggle": "アップデートを自動的に確認する",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "사용자 명령(스크립트)을 사용하면 누리집의 행동을 수정할 수 있습니다. - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">더보기</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "사용자 정의 에이전트(UserAgent) 사용",
"settingsUpdateNotificationsToggle": "판올림 자동 확인",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/lt.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Naudotojo scenarijai leidžia jums modifikuoti internetinių svetainių elgseną - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">sužinokite daugiau</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": null, //missing translation
"settingsUpdateNotificationsToggle": "Automatiškai tikrinti ar yra atnaujinimų",
"settingsUsageStatisticsToggle": null, //missing translation
Expand Down
1 change: 1 addition & 0 deletions localization/languages/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Gebruikersscripten kunt u gebruiken om het gedrag van websites te wijzigingen - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">lees meer</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Gebruik een aangepaste gebruikersagent",
"settingsUpdateNotificationsToggle": "Automatisch controleren op updates",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Skrypty użytkownika pozwalają modyfikować zachowanie stron internetowych - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">dowiedz się więcej</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Użyj niestandardowego klienta użytkownika",
"settingsUpdateNotificationsToggle": "Automatycznie sprawdź dostępność aktualizacji",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/pt-BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Scripts do usuário permitem modificar o comportamento do site - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">Saiba mais</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Usar agente de usuário personalizado",
"settingsUpdateNotificationsToggle": "Verificar atualizações automaticamente",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/pt-PT.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Os scripts permitem-lhe alterar o comportamento dos sites - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">Saber mais</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Utilizar um agente de utilizador personalizado",
"settingsUpdateNotificationsToggle": "Procurar atualizações automaticamente",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Пользовательские скрипты позволяют изменять поведение сайтов - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">узнать больше</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Использовать пользовательский user agent",
"settingsUpdateNotificationsToggle": "Автоматически проверять наличие обновлений",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/sr.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "Korisničke skripte omogućavaju modifikovanje ponašanja sajtova - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">learn more</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "Koristi prilagođeni korisnički agent",
"settingsUpdateNotificationsToggle": "Automatski obaveštavaj o novim verzijama Min",
"settingsUsageStatisticsToggle": {
Expand Down
1 change: 1 addition & 0 deletions localization/languages/th.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"settingsUserscriptsExplanation": {
"unsafeHTML": "สคริปต์ผู้ใช้ที่จะช่วยให้คุณปรับเปลี่ยนพฤติกรรมของเว็บไซต์ได้ - <a href=\"https://github.com/minbrowser/min/wiki/userscripts\">เรียนรู้เพิ่มเติม</a>."
},
"settingsUserscriptShowDirectory": null, //missing translation,
"settingsUserAgentToggle": "ใช้ตัวแทนผู้ใช้ที่กำหนดค่าเอง",
"settingsUpdateNotificationsToggle": "ตรวจสอบการอัปเดตโดยอัตโนมัติ",
"settingsUsageStatisticsToggle": {
Expand Down
Loading

0 comments on commit ff1a185

Please sign in to comment.