From e0bbc517e99937f07f0c44af3d201d475938ca99 Mon Sep 17 00:00:00 2001
From: Patrick Jentsch <p.jentsch@uni-bielefeld.de>
Date: Mon, 18 Jan 2021 13:22:00 +0100
Subject: [PATCH] Use Flask-Assets to compile multiple Javascript files to one

---
 .gitignore                        |  4 ++++
 web/app/__init__.py               |  3 +++
 web/app/templates/nopaque.html.j2 | 28 +++++++++++++++++-----------
 web/requirements.txt              |  1 +
 4 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/.gitignore b/.gitignore
index de6e4247..9d5ca616 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,10 @@
 # C extensions
 *.so
 
+# Flask-Assets files
+.webassets-cache
+*.compiled.js
+
 # Docker related files
 docker-compose.override.yml
 db
diff --git a/web/app/__init__.py b/web/app/__init__.py
index 9a399ddc..75be4213 100644
--- a/web/app/__init__.py
+++ b/web/app/__init__.py
@@ -5,8 +5,10 @@ from flask_mail import Mail
 from flask_paranoid import Paranoid
 from flask_socketio import SocketIO
 from flask_sqlalchemy import SQLAlchemy
+import flask_assets
 
 
+assets = flask_assets.Environment()
 db = SQLAlchemy()
 login_manager = LoginManager()
 login_manager.login_view = 'auth.login'
@@ -20,6 +22,7 @@ def create_app(config_name):
     app = Flask(__name__)
     app.config.from_object(config[config_name])
 
+    assets.init_app(app)
     config[config_name].init_app(app)
     db.init_app(app)
     login_manager.init_app(app)
diff --git a/web/app/templates/nopaque.html.j2 b/web/app/templates/nopaque.html.j2
index 3e7978bc..f53ad189 100644
--- a/web/app/templates/nopaque.html.j2
+++ b/web/app/templates/nopaque.html.j2
@@ -254,17 +254,23 @@
 <script src="{{ url_for('static', filename='js/list.min.js') }}"></script>
 <script src="{{ url_for('static', filename='js/socket.io.min.js') }}"></script>
 <script src="{{ url_for('static', filename='js/nopaque/main.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceDisplays/RessourceDisplay.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceDisplays/CorpusDisplay.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceDisplays/JobDisplay.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/RessourceList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/CorpusList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/CorpusFileList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/JobList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/JobInputList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/JobResultList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/QueryResultList.js') }}"></script>
-<script src="{{ url_for('static', filename='js/nopaque/RessourceLists/UserList.js') }}"></script>
+{% assets output="js/nopaque/RessourceDisplays.compiled.js",
+          "js/nopaque/RessourceDisplays/RessourceDisplay.js",
+          "js/nopaque/RessourceDisplays/CorpusDisplay.js",
+          "js/nopaque/RessourceDisplays/JobDisplay.js" %}
+<script src="{{ ASSET_URL }}"></script>
+{% endassets %}
+{% assets output="js/nopaque/RessourceLists.compiled.js",
+          "js/nopaque/RessourceLists/RessourceList.js",
+          "js/nopaque/RessourceLists/CorpusList.js",
+          "js/nopaque/RessourceLists/CorpusFileList.js",
+          "js/nopaque/RessourceLists/JobList.js",
+          "js/nopaque/RessourceLists/JobInputList.js",
+          "js/nopaque/RessourceLists/JobResultList.js",
+          "js/nopaque/RessourceLists/QueryResultList.js",
+          "js/nopaque/RessourceLists/UserList.js" %}
+<script src="{{ ASSET_URL }}"></script>
+{% endassets %}
 <script>
   // Disable all option elements with no value
   for (let optionElement of document.querySelectorAll('option[value=""]')) {optionElement.disabled = true;}
diff --git a/web/requirements.txt b/web/requirements.txt
index e1faf1c5..97c94190 100644
--- a/web/requirements.txt
+++ b/web/requirements.txt
@@ -2,6 +2,7 @@ cqi
 docker
 eventlet
 Flask
+Flask-Assets
 Flask-Login
 Flask-Mail
 Flask-Migrate
-- 
GitLab