Ver código fonte

Rendering of feedbackform conditional.

scossu 1 ano atrás
pai
commit
5cde5cdfa0

+ 19 - 9
scriptshifter/__init__.py

@@ -9,15 +9,14 @@ env = load_dotenv()
 
 APP_ROOT = path.dirname(path.realpath(__file__))
 
-# SMTP server for sending email. For a dummy server that just echoes the
-# messages, run: `python -m smtpd -n -c DebuggingServer localhost:1025`
-SMTP_HOST = environ.get("TXL_SMTP_HOST", "localhost")
-try:
-    SMTP_PORT = int(environ.get("TXL_SMTP_PORT", "1025"))
-except ValueError:
-    raise SystemError("TXL_SMTP_PORT env var is not an integer.")
-EMAIL_FROM = environ["TXL_EMAIL_FROM"]
-EMAIL_TO = environ["TXL_EMAIL_TO"]
+"""
+SMTP server for sending email. For a dummy server that just echoes the
+messages, run: `python -m smtpd -n -c DebuggingServer localhost:1025`
+and set SMTP_HOST to "localhost".
+
+The default is None in which causes the feedback form to be disabled.
+"""
+SMTP_HOST = environ.get("TXL_SMTP_HOST")
 
 logging.basicConfig(
         # filename=environ.get("TXL_LOGFILE", "/dev/stdout"),
@@ -26,3 +25,14 @@ logger = logging.getLogger(__name__)
 
 if not env:
     logger.warn("No .env file found. Assuming env was passed externally.")
+
+if SMTP_HOST:
+    try:
+        SMTP_PORT = int(environ.get("TXL_SMTP_PORT", "1025"))
+    except ValueError:
+        raise SystemError("TXL_SMTP_PORT env var is not an integer.")
+    EMAIL_FROM = environ["TXL_EMAIL_FROM"]
+    EMAIL_TO = environ["TXL_EMAIL_TO"]
+else:
+    logger.warn("No SMTP host defined. Feedback form won't be available.")
+    SMTP_PORT = EMAIL_FROM = EMAIL_TO = None

+ 4 - 1
scriptshifter/rest_api.py

@@ -48,7 +48,10 @@ def handle_exception(e: ApiError):
 
 @app.route("/", methods=["GET"])
 def index():
-    return render_template("index.html", languages=list_tables())
+    return render_template(
+            "index.html",
+            languages=list_tables(),
+            feedback_form=SMTP_HOST is not None)
 
 
 @app.route("/health", methods=["GET"])

+ 66 - 57
scriptshifter/static/ss.js

@@ -1,3 +1,7 @@
+var fb_btn = document.getElementById('feedback_btn_cont');
+var fb_active = fb_btn != undefined;
+
+
 document.getElementById('lang').addEventListener('change',(event)=>{
     let lang = document.getElementById("lang").value;
 
@@ -62,7 +66,9 @@ document.getElementById('lang').dispatchEvent(new Event('change'));
 
 document.getElementById('transliterate').addEventListener('submit',(event)=>{
 
-    document.getElementById('feedback_cont').classList.add("hidden");
+    if (fb_active) {
+        document.getElementById('feedback_cont').classList.add("hidden");
+    }
     document.getElementById('loader_results').classList.remove("hidden");
 
     const data = new URLSearchParams();
@@ -100,7 +106,9 @@ document.getElementById('transliterate').addEventListener('submit',(event)=>{
         document.getElementById('loader_results').classList.add("hidden");
 
         document.getElementById('results').innerText = results.output
-        document.getElementById('feedback_btn_cont').classList.remove("hidden");
+        if (fb_active) {
+            fb_btn.classList.remove("hidden");
+        }
 
         if (results.warnings.length>0){
             document.getElementById('warnings-toggle').classList.remove("hidden");
@@ -117,69 +125,70 @@ document.getElementById('transliterate').addEventListener('submit',(event)=>{
 
 })
 
-document.getElementById('feedback_btn').addEventListener('click',(event)=>{
-    document.getElementById('lang_fb_input').value = document.getElementById('lang').value;
-    document.getElementById('src_fb_input').value = document.getElementById('text').value;
-    document.getElementById('t_dir_fb_input').value = Array.from(
-        document.getElementsByName("t_dir")
-    ).find(r => r.checked).value;
-    document.getElementById('result_fb_input').value = document.getElementById('results').innerText;
-    document.getElementById('expected_fb_input').value = "";
-    document.getElementById('notes_fb_input').value = "";
-    document.getElementById('options_fb_input').value = ""; // TODO
-
-    document.getElementById('feedback_cont').classList.remove("hidden");
-
-    location.href = "#";
-    location.href = "#feedback_cont";
-})
+if (fb_active) {
+    document.getElementById('feedback_btn').addEventListener('click',(event)=>{
+        document.getElementById('lang_fb_input').value = document.getElementById('lang').value;
+        document.getElementById('src_fb_input').value = document.getElementById('text').value;
+        document.getElementById('t_dir_fb_input').value = Array.from(
+            document.getElementsByName("t_dir")
+        ).find(r => r.checked).value;
+        document.getElementById('result_fb_input').value = document.getElementById('results').innerText;
+        document.getElementById('expected_fb_input').value = "";
+        document.getElementById('notes_fb_input').value = "";
+        document.getElementById('options_fb_input').value = ""; // TODO
 
-document.getElementById('feedback_form').addEventListener('submit',(event)=>{
-    const data = new URLSearchParams();
-    data.append('lang', document.getElementById('lang_fb_input').value);
-    data.append('src', document.getElementById('src_fb_input').value);
-    data.append('t_dir', document.getElementById('t_dir_fb_input').value);
-    data.append('result', document.getElementById('result_fb_input').value);
-    data.append('expected', document.getElementById('expected_fb_input').value);
-    data.append('contact', document.getElementById('contact_fb_input').value);
-    data.append('notes', document.getElementById('notes_fb_input').value);
+        document.getElementById('feedback_cont').classList.remove("hidden");
 
-    let options = {};
-    let option_inputs = document.getElementsByClassName("option_i");
-    for (i = 0; i < option_inputs.length; i++) {
-        let el = option_inputs[i];
-        options[el.getAttribute('id')] = el.value;
-    };
-    data.append('options', JSON.stringify(options));
+        location.href = "#";
+        location.href = "#feedback_cont";
+    })
 
-    fetch('/feedback', {
-        method: 'post',
-        body: data,
+    document.getElementById('feedback_form').addEventListener('submit',(event)=>{
+        const data = new URLSearchParams();
+        data.append('lang', document.getElementById('lang_fb_input').value);
+        data.append('src', document.getElementById('src_fb_input').value);
+        data.append('t_dir', document.getElementById('t_dir_fb_input').value);
+        data.append('result', document.getElementById('result_fb_input').value);
+        data.append('expected', document.getElementById('expected_fb_input').value);
+        data.append('contact', document.getElementById('contact_fb_input').value);
+        data.append('notes', document.getElementById('notes_fb_input').value);
+
+        let options = {};
+        let option_inputs = document.getElementsByClassName("option_i");
+        for (i = 0; i < option_inputs.length; i++) {
+            let el = option_inputs[i];
+            options[el.getAttribute('id')] = el.value;
+        };
+        data.append('options', JSON.stringify(options));
+
+        fetch('/feedback', {
+            method: 'post',
+            body: data,
+        })
+        .then(response=>response.json())
+        .then((results)=>{
+            alert(
+                "Thanks for your feedback. You should receive an email with "
+                + "a copy of your submission."
+            );
+
+            document.getElementById('feedback_cont').classList.add("hidden");
+            document.getElementById('feedback_form').reset();
+            location.href = "#";
+
+        })
+
+        event.preventDefault();
+        return false;
     })
-    .then(response=>response.json())
-    .then((results)=>{
-        alert(
-            "Thanks for your feedback. You should receive an email with "
-            + "a copy of your submission."
-        );
 
+    document.getElementById('cancel_fb_btn').addEventListener('click',(event)=>{
         document.getElementById('feedback_cont').classList.add("hidden");
         document.getElementById('feedback_form').reset();
         location.href = "#";
 
+        event.preventDefault();
+        return false;
     })
-
-    event.preventDefault();
-    return false;
-})
-
-document.getElementById('cancel_fb_btn').addEventListener('click',(event)=>{
-    document.getElementById('feedback_cont').classList.add("hidden");
-    document.getElementById('feedback_form').reset();
-    location.href = "#";
-
-    event.preventDefault();
-    return false;
-})
-
+}
 

+ 4 - 0
scriptshifter/templates/index.html

@@ -104,11 +104,13 @@
             <input class="button button-primary" type="submit" value="Transliterate!">
         </fieldset>
 
+        {% if feedback_form %}
         <fieldset id="feedback_btn_cont" class="hidden">
             <input
                     id="feedback_btn" class="button button-outline"
                     value="Suggest improvements">
         </fieldset>
+        {% endif %}
     </form>
 
     <div id="warnings-toggle" class="hidden">
@@ -120,6 +122,7 @@
         <div id="results">Results will appear here.</div>
     </div>
 
+    {% if feedback_form %}
     <div id="feedback_cont" class="hidden">
         <h2>Submit feedback</h2>
         <form
@@ -170,6 +173,7 @@
                     class="button button-clear">Cancel</button>
         </form>
     </div>
+    {% endif %}
 
     <script type="text/javascript" src="/static/ss.js"></script>
 {% endblock %}