diff options
author | Yorhel <git@yorhel.nl> | 2019-11-05 10:34:58 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2019-11-10 12:44:55 +0100 |
commit | 24f03ae521a6b35def38788e0446201aa6095314 (patch) | |
tree | 8162ef1a151d35731dfcf099703c401af5b9b058 /Makefile | |
parent | 3af0103b6bcc791142f78664bc449263c99571fb (diff) |
JS: Add LibreJS compatibility + use embedded comment tag to sort v2rw.js files
I found myself forgetting to add a file to $JS_FILES in the Makefile
several times now, and with Perl and Elm modules being detected and
loaded automatically, it feels weird not to do the same for .js files.
This embedded order trick is ugly, but it's pretty simple and gets the
job done.
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 44 |
1 files changed, 23 insertions, 21 deletions
@@ -110,41 +110,41 @@ static/f/vndb.js: data/js/*.js lib/VNDB/Types.pm util/jsgen.pl data/conf.pl | st util/jsgen.pl static/f/vndb.min.js: static/f/vndb.js - uglifyjs $< --compress --mangle -o $@ + uglifyjs $< --compress --mangle --comments '/(@license|@source|SPDX-)/' -o $@ # v2-rw -# Order matters! -JS_FILES=\ - elm/polyfills.js \ - elm/pagevars.js \ - elm/UList/LabelEdit.js \ - elm/UList/ManageLabels.js \ - elm/UList/Opt.js \ - elm/UList/VoteEdit.js \ - elm/Lib/Ffi.js \ - elm/elm-init.js \ - elm/checkall.js \ - elm/checkhidden.js - +# Order of JS files matters, so we read an '//order:x' comment from the files and sort by that. +# Files without that comment are assumed to have '//order:4'. +# (This trick will not work if we ever add JS files generated by this Makefile) +JS_FILES=$(shell find elm \! -path 'elm/elm-stuff/*' -name '*.js' -exec sh -c "echo \`grep -Po '(?<=^//order:)[0-9]' \"{}\" || echo 4\` \"{}\"" \; | sort | sed 's/..//') ELM_FILES=elm/*.elm elm/*/*.elm ELM_MODULES=$(shell grep -l '^main =' ${ELM_FILES} | sed 's/^elm\///') -# Patch the Javascript generated by Elm and append the elm/**.js files to it. +# Patch the Javascript generated by Elm and append the $JS_FILES to it. # Patches include: +# - Add @license and @source comments # - Redirect calls from Lib.Ffi.* to window.elmFfi_* # - Patch the virtualdom diffing algorithm to always apply the 'selected' attribute define fix-js - sed -i 's/var \$$author\$$project\$$Lib\$$Ffi\$$/var __unused__/g' $@ - sed -Ei 's/\$$author\$$project\$$Lib\$$Ffi\$$([a-zA-Z0-9_]+)/window.elmFfi_\1(_Json_wrap,_Browser_call)/g' $@ - sed -Ei "s/([^ ]+) !== 'checked'/\\1 !== 'checked' \&\& \\1 !== 'selected'/g" $@ + ( echo '// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0-only'; \ + echo '// @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause'; \ + echo '// @source: https://code.blicky.net/yorhel/vndb/src/branch/master/elm'; \ + echo '// SPDX-License-Identifier: AGPL-3.0-only and BSD-3-Clause'; \ + cat $@ \ + ) | sed 's/var \$$author\$$project\$$Lib\$$Ffi\$$/var __unused__/g' \ + | sed -E 's/\$$author\$$project\$$Lib\$$Ffi\$$([a-zA-Z0-9_]+)/window.elmFfi_\1(_Json_wrap,_Browser_call)/g' \ + | sed -E "s/([^ ]+) !== 'checked'/\\1 !== 'checked' \&\& \\1 !== 'selected'/g" >$@~ for fn in ${JS_FILES}; do \ - echo "(function(){'use strict';"; \ + echo; \ + echo "(function(){'use strict'; /* $$fn */"; \ cat $$fn; \ echo "})();"; \ - done >>$@ + done >>$@~ + echo '// @license-end' >>$@~ + mv $@~ $@ endef elm/Gen/.generated: lib/VNWeb/*.pm lib/VNWeb/*/*.pm lib/VNDB/Types.pm lib/VNDB/Config.pm data/conf.pl @@ -157,7 +157,9 @@ static/f/v2rw.js: ${ELM_FILES} ${JS_FILES} elm/Gen/.generated | static/f static/f/v2rw.min.js: ${ELM_FILES} ${JS_FILES} elm/Gen/.generated | static/f cd elm && ELM_HOME=elm-stuff elm make --optimize ${ELM_MODULES} --output ../$@ ${fix-js} - uglifyjs $@ --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' | uglifyjs --mangle -o $@~ + uglifyjs $@ --comments '/(@license|@source|SPDX-)/' --compress \ + 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe'\ + | uglifyjs --mangle --comments all -o $@~ mv $@~ $@ |