diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-08-22 17:11:42 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-08-22 17:11:42 +0300 |
commit | 82695653263b6588fb3b06eeca41b4e716d82801 (patch) | |
tree | 1c1b7309a7a6fc0525a4a4a5423c0c004f89270a | |
parent | 8b9ec18da1c23dc56032ce14d7abf62aef0fe47e (diff) |
Initial versionturbolinks/v0.5.0instantpage/v0.5.0alpinejs/v0.5.0
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README.md | 5 | ||||
-rw-r--r-- | alpinejs/README.md | 26 | ||||
-rw-r--r-- | alpinejs/config.toml | 9 | ||||
-rw-r--r-- | alpinejs/go.mod | 5 | ||||
-rw-r--r-- | alpinejs/go.sum | 6 | ||||
-rw-r--r-- | alpinejs/layouts/partials/jslibs/alpinejs/script-src.html | 7 | ||||
-rw-r--r-- | instantpage/README.md | 21 | ||||
-rw-r--r-- | instantpage/config.toml | 9 | ||||
-rw-r--r-- | instantpage/go.mod | 2 | ||||
-rw-r--r-- | instantpage/go.sum | 0 | ||||
-rw-r--r-- | instantpage/layouts/partials/jslibs/instantpage/script-src.html | 5 | ||||
-rw-r--r-- | turbolinks/README.md | 33 | ||||
-rw-r--r-- | turbolinks/assets/jslibs/turbolinks/alpinejs-turbolinks-bridge.js | 69 | ||||
-rw-r--r-- | turbolinks/config.toml | 12 | ||||
-rw-r--r-- | turbolinks/go.mod | 5 | ||||
-rw-r--r-- | turbolinks/go.sum | 2 | ||||
-rw-r--r-- | turbolinks/layouts/partials/jslibs/turbolinks/script-src.html | 6 |
18 files changed, 223 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7762af8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/resources
\ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..714c454 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Hugo JS Libraries + +A collection of JS libraries packaged and ready for use in Hugo. + +See each componen's README for usage. The Hugo documentation has more information about [Hugo Modules](https://gohugo.io/hugo-modules/). diff --git a/alpinejs/README.md b/alpinejs/README.md new file mode 100644 index 0000000..5cf4d66 --- /dev/null +++ b/alpinejs/README.md @@ -0,0 +1,26 @@ +## Installation + +First, add the module import to your site or theme component's configuration's module section: + +```toml +[module] +[[imports]] +path = "github.com/gohugoio/hugo-mod-jslibs/alpinejs" +``` + +Then add the script source in the head section of your template (typically in the `baseof.html`): + + +```html +<head> +{{ partialCached "jslibs/alpinejs/script-src.html" "-" }} +</head> +``` + +Note, if used with Turbolinks, the order matters: + +```html +{{ partialCached "jslibs/alpinejs/script-src.html" "-" }} +{{ partialCached "jslibs/turbolinks/script-src.html" "-" }} +``` + diff --git a/alpinejs/config.toml b/alpinejs/config.toml new file mode 100644 index 0000000..902b13a --- /dev/null +++ b/alpinejs/config.toml @@ -0,0 +1,9 @@ +[module] +[[module.mounts]] +source = "layouts" +target = "layouts" +[[module.imports]] +path = "github.com/alpinejs/alpine" +[[module.imports.mounts]] +source = "dist" +target = "assets/jslibs/alpinejs" diff --git a/alpinejs/go.mod b/alpinejs/go.mod new file mode 100644 index 0000000..ac37d3a --- /dev/null +++ b/alpinejs/go.mod @@ -0,0 +1,5 @@ +module github.com/gohugoio/hugo-mod-jslibs/alpinejs + +go 1.13 + +require github.com/alpinejs/alpine v2.6.0+incompatible // indirect diff --git a/alpinejs/go.sum b/alpinejs/go.sum new file mode 100644 index 0000000..4a889d0 --- /dev/null +++ b/alpinejs/go.sum @@ -0,0 +1,6 @@ +github.com/alpinejs/alpine v2.4.0+incompatible h1:FrbSMJDAYuGEuSN/JxlZ57OkYQNuJHEkDU3RY1c8eFU= +github.com/alpinejs/alpine v2.4.0+incompatible/go.mod h1:BKI81egATMnaKqFeX5HEfYMnjZjcjcZmrYAu5Nck+EY= +github.com/alpinejs/alpine v2.5.0+incompatible h1:dEOJPy27Kdno2wI51sr8ZkU+7QaLmLYLPD2sZfVe3Fw= +github.com/alpinejs/alpine v2.5.0+incompatible/go.mod h1:BKI81egATMnaKqFeX5HEfYMnjZjcjcZmrYAu5Nck+EY= +github.com/alpinejs/alpine v2.6.0+incompatible h1:WVtZll4bFK0ODpLdd+I6CFMWFaqVcgy8zjZOyC4l0s4= +github.com/alpinejs/alpine v2.6.0+incompatible/go.mod h1:BKI81egATMnaKqFeX5HEfYMnjZjcjcZmrYAu5Nck+EY= diff --git a/alpinejs/layouts/partials/jslibs/alpinejs/script-src.html b/alpinejs/layouts/partials/jslibs/alpinejs/script-src.html new file mode 100644 index 0000000..43222a7 --- /dev/null +++ b/alpinejs/layouts/partials/jslibs/alpinejs/script-src.html @@ -0,0 +1,7 @@ +{{- $isProd := hugo.IsProduction -}} +{{- $js := resources.Get "jslibs/alpinejs/alpine.js" -}} +{{- $js11 := resources.Get "jslibs/alpinejs/alpine-ie11.js" -}} +{{- if $isProd }}{{ $js = $js | minify | fingerprint }}{{ end -}} +{{- if $isProd }}{{ $js11 = $js11 | minify | fingerprint }}{{ end -}} +<script type="module" src="{{ $js.RelPermalink }}" {{ if $isProd }} integrity="{{ $js.Data.Integrity }}" {{ end }}></script> +<script nomodule src="{{ $js11.RelPermalink }}" {{ if $isProd }} integrity="{{ $js11.Data.Integrity }}" {{ end }} defer></script>
\ No newline at end of file diff --git a/instantpage/README.md b/instantpage/README.md new file mode 100644 index 0000000..1cb539c --- /dev/null +++ b/instantpage/README.md @@ -0,0 +1,21 @@ +## Installation + +First, add the module import to your site or theme component's configuration's module section: + +```toml +[module] +[[imports]] +path = "github.com/gohugoio/hugo-mod-jslibs/instantpage" +``` + +Then add the script source before the end body tag: + + +```html +<body> +... +{{ partialCached "jslibs/instantpage/script-src.html" "-" }} +</body> +``` + +See the [instant.page](https://instant.page/) documentation for configuration.
\ No newline at end of file diff --git a/instantpage/config.toml b/instantpage/config.toml new file mode 100644 index 0000000..2179989 --- /dev/null +++ b/instantpage/config.toml @@ -0,0 +1,9 @@ +[module] +[[module.mounts]] +source = "layouts" +target = "layouts" +[[module.imports]] +path = "github.com/instantpage/instant.page" +[[module.imports.mounts]] +source = "instantpage.js" +target = "assets/jslibs/instantpage/instantpage.js" diff --git a/instantpage/go.mod b/instantpage/go.mod new file mode 100644 index 0000000..512ba04 --- /dev/null +++ b/instantpage/go.mod @@ -0,0 +1,2 @@ +module github.com/gohugoio/hugo-mod-jslibs/instantpage + diff --git a/instantpage/go.sum b/instantpage/go.sum new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/instantpage/go.sum diff --git a/instantpage/layouts/partials/jslibs/instantpage/script-src.html b/instantpage/layouts/partials/jslibs/instantpage/script-src.html new file mode 100644 index 0000000..09630dd --- /dev/null +++ b/instantpage/layouts/partials/jslibs/instantpage/script-src.html @@ -0,0 +1,5 @@ +{{- $isProd := hugo.IsProduction -}} +{{/* The js.Build step is (currently) just there to create a IIFE module, see https://github.com/instantpage/instant.page/issues/81 */}} +{{- $js := resources.Get "jslibs/instantpage/instantpage.js" | js.Build -}} +{{- if $isProd }}{{ $js = $js | minify | fingerprint }}{{ end -}} +<script src="{{ $js.RelPermalink }}" {{ if $isProd }} integrity="{{ $js.Data.Integrity }}" {{ end }}></script>
\ No newline at end of file diff --git a/turbolinks/README.md b/turbolinks/README.md new file mode 100644 index 0000000..0530fad --- /dev/null +++ b/turbolinks/README.md @@ -0,0 +1,33 @@ +## Description + +This module wraps [Turbolinks](https://github.com/turbolinks). + +Also, if [Alpine](../alpinejs/alpine) is present, it adds a set of event listeners that +prepares/cleans the AlpineJS state. Most importantly, it pauses Alpine's mutation observer so Turbolinks can do its work without interuption. + +## Installation + +First, add the module import to your site or theme component's configuration's module section: + +```toml +[module] +[[imports]] +path = "github.com/gohugoio/hugo-mod-jslibs/turbolinks" +``` + +Then add the script source in the head section of your template (typically in the `baseof.html`): + + +```html +<head> +{{ partialCached "jslibs/turbolinks/script-src.html" "-" }} +</head> +``` + +Note, if used with AlpineJS, the order matters: + +```html +{{ partialCached "jslibs/alpinejs/script-src.html" "-" }} +{{ partialCached "jslibs/turbolinks/script-src.html" "-" }} +``` + diff --git a/turbolinks/assets/jslibs/turbolinks/alpinejs-turbolinks-bridge.js b/turbolinks/assets/jslibs/turbolinks/alpinejs-turbolinks-bridge.js new file mode 100644 index 0000000..9835070 --- /dev/null +++ b/turbolinks/assets/jslibs/turbolinks/alpinejs-turbolinks-bridge.js @@ -0,0 +1,69 @@ +/** + * This adds a set of event listeners that, if Alpine is present, + * prepares/cleans the AlpineJS state. + * + * Most importantly, it pauses Alpin's mutation observer so Turbolinks can + * do its work without interuption. + * See https://github.com/alpinejs/alpine/issues/372 + * See https://github.com/alpinejs/alpine/issues/372 + */ +(function() { + document.addEventListener('turbolinks:before-cache', () => { + if (!Alpine) return; + Alpine.pauseMutationObserver = true; + walk(document.body, (el) => { + if (el.hasAttribute('x-for')) { + let nextEl = el.nextElementSibling; + + while (nextEl && nextEl.__x_for_key !== 'undefined') { + const currEl = nextEl; + nextEl = nextEl.nextElementSibling; + currEl.setAttribute('x-generated', true); + } + } else if (el.hasAttribute('x-if')) { + const ifEl = el.nextElementSibling; + + if (ifEl && typeof ifEl.__x_inserted_me !== 'undefined') { + ifEl.setAttribute('x-generated', true); + } + } + + return true; + }); + }); + + document.addEventListener('turbolinks:before-render', (event) => { + if (!Alpine) return; + Alpine.pauseMutationObserver = true; + event.data.newBody.querySelectorAll('[x-generated]').forEach((el) => { + el.removeAttribute('x-generated'); + if (typeof el.__x_for_key === 'undefined' && typeof el.__x_inserted_me === 'undefined') { + el.remove(); + } + }); + }); + + document.addEventListener('turbolinks:load', () => { + if (!Alpine) return; + Alpine.pauseMutationObserver = true; + }); + + document.addEventListener('turbolinks:render', () => { + if (!Alpine) return; + Alpine.pauseMutationObserver = false; + }); + + function walk(el, callback) { + if (callback(el) === false) { + return; + } + + let node = el.firstElementChild; + + while (node) { + walk(node, callback); + + node = node.nextElementSibling; + } + } +})(); diff --git a/turbolinks/config.toml b/turbolinks/config.toml new file mode 100644 index 0000000..636b3cb --- /dev/null +++ b/turbolinks/config.toml @@ -0,0 +1,12 @@ +[module] +[[module.mounts]] +source = "layouts" +target = "layouts" +[[module.mounts]] +source = "assets" +target = "assets" +[[module.imports]] +path = "github.com/turbolinks/turbolinks-source-gem" +[[module.imports.mounts]] +source = "lib/assets/javascripts" +target = "assets/jslibs/turbolinks" diff --git a/turbolinks/go.mod b/turbolinks/go.mod new file mode 100644 index 0000000..d67cc34 --- /dev/null +++ b/turbolinks/go.mod @@ -0,0 +1,5 @@ +module github.com/gohugoio/hugo-mod-jslibs/turbolinks + +go 1.13 + +require github.com/turbolinks/turbolinks-source-gem v5.2.0+incompatible // indirect diff --git a/turbolinks/go.sum b/turbolinks/go.sum new file mode 100644 index 0000000..db76be6 --- /dev/null +++ b/turbolinks/go.sum @@ -0,0 +1,2 @@ +github.com/turbolinks/turbolinks-source-gem v5.2.0+incompatible h1:UNx8t3fYB51UyUv3gOXpTPT7Q6u9LCdcXQd2iW1EClA= +github.com/turbolinks/turbolinks-source-gem v5.2.0+incompatible/go.mod h1:Cl0Br9tUXkQvxumVNGTvyaa7dqpFC2kPMrsS0Ttc94U= diff --git a/turbolinks/layouts/partials/jslibs/turbolinks/script-src.html b/turbolinks/layouts/partials/jslibs/turbolinks/script-src.html new file mode 100644 index 0000000..492aa54 --- /dev/null +++ b/turbolinks/layouts/partials/jslibs/turbolinks/script-src.html @@ -0,0 +1,6 @@ +{{- $isProd := eq hugo.Environment "production" -}} +{{- $alpineJsBridge := resources.Get "jslibs/turbolinks/alpinejs-turbolinks-bridge.js" -}} +{{- $turbolinks := resources.Get "jslibs/turbolinks/turbolinks.js" -}} +{{- $js := slice $turbolinks $alpineJsBridge | resources.Concat "jslibs/turbolinks/turbolinks.js" }} +{{- if $isProd }}{{ $js = $js | minify | fingerprint }}{{ end -}} +<script src="{{ $js.RelPermalink }}" {{ if $isProd }} integrity="{{ $js.Data.Integrity }}" {{ end }} crossorigin="anonymous" defer></script>
\ No newline at end of file |