diff --git a/src/article_maker.cc b/src/article_maker.cc
index 8c3e88de..183e29f0 100644
--- a/src/article_maker.cc
+++ b/src/article_maker.cc
@@ -201,6 +201,12 @@ body { background: #242525; }
)";
}
+
+ // load the `article-style.js` in user's config folder
+ if ( auto userJsFile = Config::getUserJsFileName(); userJsFile.has_value() ) {
+ result += fmt::format( FMT_COMPILE( R"()" ), userJsFile.value() );
+ }
+
result += "
";
return result;
diff --git a/src/config.cc b/src/config.cc
index 3fa553ba..2372704e 100644
--- a/src/config.cc
+++ b/src/config.cc
@@ -2262,6 +2262,17 @@ QString getUserCssFileName()
return getHomeDir().filePath( "article-style.css" );
}
+std::optional< std::string > getUserJsFileName()
+{
+ QString userJsPath = getHomeDir().filePath( "article-script.js" );
+ if ( QFileInfo::exists( userJsPath ) ) {
+ return userJsPath.toStdString();
+ }
+ else {
+ return std::nullopt;
+ }
+}
+
QString getUserCssPrintFileName()
{
return getHomeDir().filePath( "article-style-print.css" );
diff --git a/src/config.hh b/src/config.hh
index 469d74a6..cd6de6c5 100644
--- a/src/config.hh
+++ b/src/config.hh
@@ -14,6 +14,7 @@
#include
#include "ex.hh"
#include
+#include
/// GoldenDict's configuration
namespace Config {
@@ -807,9 +808,12 @@ QString getHistoryFileName() ;
/// Returns the filename of a favorities file.
QString getFavoritiesFileName() ;
-/// Returns the user .css file name.
+/// Returns the user .css file name (article-style.css).
QString getUserCssFileName() ;
+/// Returns the user .js file name (article-script.js).
+std::optional< std::string > getUserJsFileName();
+
/// Returns the user .css file name used for printing only.
QString getUserCssPrintFileName() ;
diff --git a/website/docs/topic_userstyle.md b/website/docs/topic_userstyle.md
index c21ba4fa..8249093f 100644
--- a/website/docs/topic_userstyle.md
+++ b/website/docs/topic_userstyle.md
@@ -1,7 +1,18 @@
-# User defined stylesheets
+By creating `article-style.css` or `article-script.js` in GoldenDict's configuration folder (beside the `config` file), you can change dictionaries' presentation or inject javascript to dictionaries.
-To change of dictionary articles presentation you can create the file with styles which will be used while articles output. Such file must be named `article-style.css` and placed in GoldenDict configuration folder beside the "config" file. The `article-style.css` is just style sheet file wrote in accordance with standard html style sheet rules. To see a class names used in articles you can call inspector via article context menu.
+The `article-style.css` is just standard HTML [Style Sheets](https://developer.mozilla.org/docs/Web/CSS). To know class or id names used in article, you can open inspector by right click article's body and click `Inspect (F12)`. The inspector's documentation can be found at [Chrome DevTools](https://developer.chrome.com/docs/devtools/)
-Also you can tune GoldenDict interface. To make it you should create the `qt-style.css` style sheet file in GoldenDict configuration folder beside the "config" file. The rules for Qt style sheets you can find here.
+You can adjust dark reader mode's parameter by add those lines to `article-script.js`
-The examples of "article-style.css" and "qt-style.css" files you can find in GoldenDict
\ No newline at end of file
+```javascript
+DarkReader.enable({
+ brightness: 100,
+ contrast: 100,
+ sepia: 0,
+ grayscale: 0,
+});
+```
+
+Also, you can tune GoldenDict's interface by creating `qt-style.css` style sheet file in GoldenDict configuration folder. It is a [Qt Style Sheet](https://doc.qt.io/qt-6/stylesheet-reference.html) loaded during startup.
+
+Samples of `article-style.css` and `qt-style.css` files can found in GoldenDict's source code at [/src/stylesheets](https://github.com/xiaoyifang/goldendict-ng/tree/staged/src/stylesheets)
diff --git a/website/mkdocs.yml b/website/mkdocs.yml
index cd36d956..1b821876 100644
--- a/website/mkdocs.yml
+++ b/website/mkdocs.yml
@@ -38,7 +38,7 @@ nav:
- Special Usages:
- Anki Integration: topic_anki.md
- Command Lines: topic_commandline.md
- - Custom Stylesheets: topic_userstyle.md
+ - Custom Stylesheet & JavaScript: topic_userstyle.md
- Portable Mode: topic_portablemode.md
- Custom transliteration: topic_transliteration.md
- Customize Dictionary Name: custom_dictionary_name.md