From f058da6fe9cfb4bf8f89ef8416a528906f404650 Mon Sep 17 00:00:00 2001 From: Philippe Coval Date: Mon, 2 Mar 2020 10:30:09 +0100 Subject: [PATCH] build: Add caching feature for offline use Note that fonts will remain online, so caching at browser level or proxy might help. Origin: https://github.com/rzr/rzr-presentations Change-Id: I59ba3e177511fd63b59baccfd97604587766bdb6 Signed-off-by: Philippe Coval --- Makefile | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Makefile b/Makefile index 63681de..d2465df 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,8 @@ reveal_zip_url?=https://github.com/hakimel/reveal.js/archive/master.zip reveal_dir?=./reveal.js sudo?=sudo deploy_branch?=gh-pages +cache_dir?=./cache/url +make?=make -f ${CURDIR}/Makefile help: @@ -27,6 +29,7 @@ help: @echo "# make all # Build html" @echo "# make start # View HTML in Web browser" @echo "# make download # Download deps" + @echo "# make offline # Cache inlined resources and generate cached pages" @echo "# make upload # to build and publish" @echo "# make setup/debian setup download start # ..." @echo "# Config:" @@ -131,3 +134,70 @@ upload: echo "# About to push to origin in 5 secs ?" sleep 5 ; git push -f origin HEAD:gh-pages git checkout master + +%.lst: %.org Makefile + echo "" > "$@" + -grep -o -e 'https\?://[^]"]*' -- "$<" \ + | grep -E ".**\.(gif|png|svg|jpg|jpeg|webm|mp4)"\ + | sort -u >> "$@.tmp" + mv "$@.tmp" "$@" + + +%/curl: + @mkdir -p http https + @ln -fs http http: + @ln -fs https https: + ls "${@D}" > /dev/null 2>&1 \ + || curl --create-dirs -o "./${@D}" -- "${@D}" + find . -iname "*#*" | while read file; do \ + basename=$$(basename -- "$${file}"); \ + dirname=$$(dirname -- "$${file}"); \ + dstname=$$(echo "$${basename}" | sed -e 's|#.|%23.|g'); \ + ln -fs "$${basename}" "$${dirname}/$${dstname}"; \ + dstname=$$(echo "$${basename}" | sed -e 's|#.||g'); \ + ln -fs "$${basename}" "$${dirname}/$${dstname}"; \ + done + + +.PHONY: cache +cache: ${target}.lst Makefile + @mkdir -p "${ $@.tmp + sort -u $< | while read url; do \ + sed -e "s|$${url}|${cache_dir}/$${url}|g" \ + -e "s|${cache_dir}/http://|${cache_dir}/http/|g" \ + -e "s|${cache_dir}/https://|${cache_dir}/https/|g" \ + -i "${@}.tmp" ; \ + done + mv "${@}.tmp" "$@" + +html-cache: ${target}.org ${target}._cache.org + make html target="${target}._cache" + sed -e "s|#./|/./|g" -i "${target}._cache.html" + +offline: all/cache all/html-cache + sync + +offline/start: offline + ${MAKE} ${@F} target="${target}._cache" + +commit/offline: + -git branch -D ${@F}/master + git checkout -b ${@F}/master + ${MAKE} download + -git add -f . + -git commit -am 'deploy: Cache downloaded files' + ${MAKE} cache + -git add -f . + -git commit -am 'deploy: Cache downloaded files, see lst file for sources' + ${MAKE} ${@F} + -git add -f . + -git commit -am 'deploy: Render cached files'