Browse Source

Merge pull request #664 from return42/themes.live

[mod] manage: add themes.live command (rebuild on modification)
Markus Heiser 3 years ago
parent
commit
00d3a7477c
4 changed files with 58 additions and 18 deletions
  1. 1 5
      Makefile
  2. 12 7
      docs/dev/makefile.rst
  3. 5 0
      docs/dev/quickstart.rst
  4. 40 6
      manage

+ 1 - 5
Makefile

@@ -25,11 +25,7 @@ help:
 
 PHONY += run
 run:  install
-	$(Q) ( \
-	sleep 2 ; \
-	xdg-open http://127.0.0.1:8888/ ; \
-	) &
-	SEARXNG_DEBUG=1 ./manage pyenv.cmd python -m searx.webapp
+	$(Q)./manage webapp.run
 
 PHONY += install uninstall
 install uninstall:

+ 12 - 7
docs/dev/makefile.rst

@@ -13,7 +13,7 @@ Makefile
 
    To install system requirements follow :ref:`buildhosts`.
 
-All relevant build tasks are implemented in :origin:`manage.sh` and for CI or
+All relevant build tasks are implemented in :origin:`manage` and for CI or
 IDE integration a small ``Makefile`` wrapper is available.  If you are not
 familiar with Makefiles, we recommend to read gnu-make_ introduction.
 
@@ -173,14 +173,19 @@ Install latest Node.js_ LTS locally (uses nvm_)::
 
 To get up a running a developer instance simply call ``make run``.  This enables
 *debug* option in :origin:`searx/settings.yml`, starts a ``./searx/webapp.py``
-instance, disables *debug* option again and opens the URL in your favorite WEB
-browser (:man:`xdg-open`)::
+instance and opens the URL in your favorite WEB browser (:man:`xdg-open`)::
 
    $ make run
-   PYENV     OK
-   SEARXNG_DEBUG=1 ./manage.sh pyenv.cmd python ./searx/webapp.py
-   ...
-   INFO:werkzeug: * Running on http://127.0.0.1:8888/ (Press CTRL+C to quit)
+
+Changes to theme's HTML templates (jinja2) are instant.  Changes to the CSS & JS
+sources of the theme need to be rebuild.  You can do that by running::
+
+  $ make themes.all
+
+Alternatively to ``themes.all`` you can run *live builds* of the theme you are
+modify::
+
+  $ LIVE_THEME=simple make run
 
 .. _make clean:
 

+ 5 - 0
docs/dev/quickstart.rst

@@ -40,10 +40,15 @@ JavaScript:
 
 Alternatively you can also compile selective the theme you have modified,
 e.g. the *simple* theme.
+
 .. code:: sh
 
    make themes.simple
 
+.. tip::
+
+   To get live builds while modifying CSS & JS use: ``LIVE_THEME=simple make run``
+
 If you finished your *tests* you can start to commit your changes.  To separate
 the modified source code from the build products first run:
 

+ 40 - 6
manage

@@ -120,6 +120,17 @@ fi
 # needed by sphinx-docs
 export DOCS_BUILD
 
+webapp.run() {
+    SEARXNG_DEBUG=1 pyenv.cmd python -m searx.webapp &
+    sleep 3
+    if [ "${LIVE_THEME}" ]; then
+        themes.live "${LIVE_THEME}" &
+    fi
+    xdg-open http://127.0.0.1:8888/
+    wait -n
+    kill 0
+}
+
 buildenv() {
 
     # settings file from repository's working tree are used by default
@@ -514,12 +525,15 @@ gecko.driver() {
     dump_return $?
 }
 
-node.env() {
+nodejs.ensure() {
     if ! nvm.min_node "${NODE_MINIMUM_VERSION}"; then
         info_msg "install Node.js by NVM"
         nvm.nodejs
     fi
+}
 
+node.env() {
+    nodejs.ensure
     (   set -e
 
         build_msg INSTALL "searx/static/themes/oscar/package.json"
@@ -701,6 +715,30 @@ themes.all() {
     dump_return $?
 }
 
+themes.live() {
+    local LIVE_THEME="${LIVE_THEME:-${1}}"
+    case "${LIVE_THEME}" in
+        simple|oscar)
+            theme="searx/static/themes/${LIVE_THEME}"
+            ;;
+        '')
+            die_caller 42 "missing theme argument"
+            ;;
+        *)
+            die_caller 42 "unknown theme '${LIVE_THEME}' // [simple|oscar]'"
+            ;;
+    esac
+    build_msg GRUNT "theme: $1 (live build)"
+    nodejs.ensure
+    cd "${theme}"
+    {
+        npm install
+        npm run watch
+    } 2>&1 \
+        | prefix_stdout "${_Blue}THEME ${1} ${_creset}  " \
+        | grep -E --ignore-case --color 'error[s]?[:]? |warning[s]?[:]? |'
+}
+
 themes.oscar() {
     build_msg GRUNT "theme: oscar"
     npm --prefix searx/static/themes/oscar run build
@@ -708,7 +746,6 @@ themes.oscar() {
 }
 
 themes.simple() {
-    local static="searx/static/themes/simple"
     (   set -e
         build_msg GRUNT "theme: simple"
         npm --prefix searx/static/themes/simple run build
@@ -718,10 +755,7 @@ themes.simple() {
 
 themes.simple.test() {
     build_msg TEST "theme: simple"
-    if ! nvm.min_node "${NODE_MINIMUM_VERSION}"; then
-        info_msg "install Node.js by NVM"
-        nvm.nodejs
-    fi
+    nodejs.ensure
     npm --prefix searx/static/themes/simple install
     npm --prefix searx/static/themes/simple run test
     dump_return $?