From 32a853ecc0d0d70366811e6413e0fa42d474edbe Mon Sep 17 00:00:00 2001
From: Lim Chee Aun <cheeaun@gmail.com>
Date: Sat, 22 Jul 2023 20:59:07 +0800
Subject: [PATCH] Make auto inline translation as a setting, turned off by
 default

---
 src/pages/settings.css |  3 ++
 src/pages/settings.jsx | 95 ++++++++++++++++++++++++++----------------
 src/utils/states.js    |  5 +++
 3 files changed, 67 insertions(+), 36 deletions(-)

diff --git a/src/pages/settings.css b/src/pages/settings.css
index 6c4428da..1a4d8230 100644
--- a/src/pages/settings.css
+++ b/src/pages/settings.css
@@ -59,6 +59,9 @@
 #settings-container div {
   vertical-align: middle;
 }
+#settings-container section > ul > li .sub-section hr {
+  margin: 8px 0;
+}
 
 #settings-container section select {
   padding: 4px;
diff --git a/src/pages/settings.jsx b/src/pages/settings.jsx
index 42592a8f..f54aedc3 100644
--- a/src/pages/settings.jsx
+++ b/src/pages/settings.jsx
@@ -255,42 +255,43 @@ function Settings({ onClose }) {
                     : ''
                 }`}
               >
-                <label>
-                  Translate to{' '}
-                  <select
-                    value={targetLanguage || ''}
-                    disabled={!snapStates.settings.contentTranslation}
-                    onChange={(e) => {
-                      states.settings.contentTranslationTargetLanguage =
-                        e.target.value || null;
-                    }}
-                  >
-                    <option value="">
-                      System language ({systemTargetLanguageText})
-                    </option>
-                    <option disabled>──────────</option>
-                    {targetLanguages.map((lang) => (
-                      <option value={lang.code}>{lang.name}</option>
-                    ))}
-                  </select>
-                </label>
+                <div>
+                  <label>
+                    Translate to{' '}
+                    <select
+                      value={targetLanguage || ''}
+                      disabled={!snapStates.settings.contentTranslation}
+                      onChange={(e) => {
+                        states.settings.contentTranslationTargetLanguage =
+                          e.target.value || null;
+                      }}
+                    >
+                      <option value="">
+                        System language ({systemTargetLanguageText})
+                      </option>
+                      <option disabled>──────────</option>
+                      {targetLanguages.map((lang) => (
+                        <option value={lang.code}>{lang.name}</option>
+                      ))}
+                    </select>
+                  </label>
+                </div>
+                <hr />
                 <p class="checkbox-fieldset">
-                  <small>
-                    Hide "Translate" button for
-                    {snapStates.settings.contentTranslationHideLanguages
-                      .length > 0 && (
-                      <>
-                        {' '}
-                        (
-                        {
-                          snapStates.settings.contentTranslationHideLanguages
-                            .length
-                        }
-                        )
-                      </>
-                    )}
-                    :
-                  </small>
+                  Hide "Translate" button for
+                  {snapStates.settings.contentTranslationHideLanguages.length >
+                    0 && (
+                    <>
+                      {' '}
+                      (
+                      {
+                        snapStates.settings.contentTranslationHideLanguages
+                          .length
+                      }
+                      )
+                    </>
+                  )}
+                  :
                   <div class="checkbox-fields">
                     {targetLanguages.map((lang) => (
                       <label>
@@ -318,7 +319,7 @@ function Settings({ onClose }) {
                     ))}
                   </div>
                 </p>
-                <p>
+                <p class="insignificant">
                   <small>
                     Note: This feature uses an external API to translate,
                     powered by{' '}
@@ -331,6 +332,28 @@ function Settings({ onClose }) {
                     .
                   </small>
                 </p>
+                <hr />
+                <div>
+                  <label>
+                    <input
+                      type="checkbox"
+                      checked={snapStates.settings.contentTranslationAutoInline}
+                      disabled={!snapStates.settings.contentTranslation}
+                      onChange={(e) => {
+                        states.settings.contentTranslationAutoInline =
+                          e.target.checked;
+                      }}
+                    />{' '}
+                    Auto inline translation
+                  </label>
+                  <p class="insignificant">
+                    <small>
+                      Automatically show translation for posts in timeline. Only
+                      works for <b>short</b> posts without content warning,
+                      media and poll.
+                    </small>
+                  </p>
+                </div>
               </div>
             </li>
             <li>
diff --git a/src/utils/states.js b/src/utils/states.js
index fb76cc41..6b8e281a 100644
--- a/src/utils/states.js
+++ b/src/utils/states.js
@@ -52,6 +52,8 @@ const states = proxy({
       store.account.get('settings-contentTranslationTargetLanguage') || null,
     contentTranslationHideLanguages:
       store.account.get('settings-contentTranslationHideLanguages') || [],
+    contentTranslationAutoInline:
+      store.account.get('settings-contentTranslationAutoInline') ?? false,
     cloakMode: store.account.get('settings-cloakMode') ?? false,
   },
 });
@@ -80,6 +82,9 @@ subscribe(states, (changes) => {
     if (path.join('.') === 'settings.contentTranslation') {
       store.account.set('settings-contentTranslation', !!value);
     }
+    if (path.join('.') === 'settings.contentTranslationAutoInline') {
+      store.account.set('settings-contentTranslationAutoInline', !!value);
+    }
     if (path.join('.') === 'settings.contentTranslationTargetLanguage') {
       console.log('SET', value);
       store.account.set('settings-contentTranslationTargetLanguage', value);