mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 10:04:22 +00:00
Enable rewrite of CDN origin images
This commit is contained in:
29
data/structures/image-adapter-rewrite.yml
Normal file
29
data/structures/image-adapter-rewrite.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
comment: >-
|
||||||
|
Rewrites an origin URL to a target URL as supported by a CDN image adapter.
|
||||||
|
arguments:
|
||||||
|
account:
|
||||||
|
type: string
|
||||||
|
optional: true
|
||||||
|
comment: Account name of the origin server.
|
||||||
|
container:
|
||||||
|
type: string
|
||||||
|
optional: true
|
||||||
|
comment: Container name of the origin server.
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
optional: true
|
||||||
|
comment: >-
|
||||||
|
Host of an URL. For example, the host of the URL
|
||||||
|
'https://example.com/first/second/third.webp' equals 'example.com'.
|
||||||
|
dir:
|
||||||
|
type: string
|
||||||
|
optional: true
|
||||||
|
comment: >-
|
||||||
|
All but the last element of an URL extension. For example, the dir of the
|
||||||
|
URL 'https://example.com/first/second/third.webp' equals '/first/second/'.
|
||||||
|
file:
|
||||||
|
type: string
|
||||||
|
optional: false
|
||||||
|
comment: >-
|
||||||
|
The last element of an URL extension. For example, the file of the
|
||||||
|
URL 'https://example.com/first/second/third.webp' equals 'third.webp'.
|
30
layouts/partials/assets/adapters/imagekit-rewrite.html
Normal file
30
layouts/partials/assets/adapters/imagekit-rewrite.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<!--
|
||||||
|
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||||
|
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||||
|
Visit gethinode.com/license for more details.
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{ $error := false }}
|
||||||
|
|
||||||
|
<!-- Validate arguments -->
|
||||||
|
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "image-adapter-rewrite" "args" . "group" "partial") }}
|
||||||
|
{{ errorf "partial [assets/adapter/imagekit-rewrite.html] - Invalid arguments" -}}
|
||||||
|
{{ $error = true }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<!-- Initialize arguments -->
|
||||||
|
{{ $account := .account }}
|
||||||
|
{{ $container := trim .container "/" }}
|
||||||
|
{{ $host := .host }}
|
||||||
|
{{ $dir := .dir }}
|
||||||
|
{{ $file := .file }}
|
||||||
|
{{ $element := "" }}
|
||||||
|
{{ with $container }}{{ $dir = strings.TrimPrefix (printf "/%s" .) $dir }}{{ end }}
|
||||||
|
|
||||||
|
{{ if ne $host "ik.imagekit.io" }}
|
||||||
|
{{ $element = urls.JoinPath (slice "https://ik.imagekit.io" $account $dir $file) }}
|
||||||
|
{{ else }}
|
||||||
|
{{ $element = urls.JoinPath (slice "https://" $host $dir $file) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ return $element }}
|
@@ -32,17 +32,28 @@
|
|||||||
|
|
||||||
<!-- Identify image provider -->
|
<!-- Identify image provider -->
|
||||||
{{ $hook := "" }}
|
{{ $hook := "" }}
|
||||||
|
{{ $account := "" }}
|
||||||
|
{{ $container := "" }}
|
||||||
|
{{ $rewrite := false }}
|
||||||
{{ range $provider, $val := site.Params.images }}
|
{{ range $provider, $val := site.Params.images }}
|
||||||
{{ if not $hook }}
|
{{ if not $hook }}
|
||||||
{{ with index $val "host" }}
|
{{ with index $val "host" }}
|
||||||
{{ if (findRE . (urls.Parse $url).Hostname) }}
|
{{ if (findRE . (urls.Parse $url).Hostname) }}
|
||||||
{{ $hook = $provider }}
|
{{ $hook = $provider }}
|
||||||
|
{{ with index $val "account" }}{{ $account = . }}{{ end }}
|
||||||
|
{{ with index $val "rewrite" }}{{ $rewrite = . }}{{ end }}
|
||||||
|
{{ with index $val "container" }}{{ $container = . }}{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if not $hook }}{{ $hook = "hugo" }}{{ end }}
|
{{ if not $hook }}{{ $hook = "hugo" }}{{ end }}
|
||||||
|
|
||||||
|
<!-- Rewrite the origin URL if applicable -->
|
||||||
|
{{ if $rewrite }}
|
||||||
|
{{ $url = partial "assets/helpers/image-rewrite.html" (dict "url" $url "account" $account "container" $container "hook" $hook) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
<!-- Define image dimensions -->
|
<!-- Define image dimensions -->
|
||||||
{{ $dims := slice }}
|
{{ $dims := slice }}
|
||||||
{{- $res := "" -}}
|
{{- $res := "" -}}
|
||||||
|
29
layouts/partials/assets/helpers/image-rewrite.html
Normal file
29
layouts/partials/assets/helpers/image-rewrite.html
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{{- $url := .url -}}
|
||||||
|
{{- $account := .account -}}
|
||||||
|
{{- $container := .container -}}
|
||||||
|
{{ $hook := .hook }}
|
||||||
|
|
||||||
|
{{ $host := (urls.Parse $url).Hostname }}
|
||||||
|
{{ $dir := (urls.Parse $url).Path }}
|
||||||
|
{{ $file := index ((split $dir "/") | collections.Reverse) 0 }}
|
||||||
|
{{ $dir = strings.TrimSuffix $file $dir }}
|
||||||
|
{{ $error := false }}
|
||||||
|
|
||||||
|
{{ $adapter := (printf "assets/adapters/%s-rewrite.html" $hook) }}
|
||||||
|
{{ if not (fileExists (path.Join "/layouts/partials" $adapter)) }}
|
||||||
|
{{ warnf "Cannot find adapter: %s" (path.Join "/layouts/partials" $adapter) }}
|
||||||
|
{{ $error = true }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ $result := $url }}
|
||||||
|
{{ if not $error }}
|
||||||
|
{{ $result = partial $adapter (dict
|
||||||
|
"account" $account
|
||||||
|
"container" $container
|
||||||
|
"host" $host
|
||||||
|
"dir" $dir
|
||||||
|
"file" $file
|
||||||
|
)}}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ return $result }}
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@gethinode/hinode",
|
"name": "@gethinode/hinode",
|
||||||
"version": "0.24.0-beta6",
|
"version": "0.24.0-beta7",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@gethinode/hinode",
|
"name": "@gethinode/hinode",
|
||||||
"version": "0.24.0-beta6",
|
"version": "0.24.0-beta7",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fullhuman/postcss-purgecss": "^6.0.0",
|
"@fullhuman/postcss-purgecss": "^6.0.0",
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@gethinode/hinode",
|
"name": "@gethinode/hinode",
|
||||||
"version": "0.24.0-beta6",
|
"version": "0.24.0-beta7",
|
||||||
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"hugo",
|
"hugo",
|
||||||
|
Reference in New Issue
Block a user