jekyll-image-links 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -2
- data/assets/jekyll-image-links/image_links.js +14 -12
- data/lib/jekyll/image_links/map_renderer.rb +8 -3
- data/lib/jekyll/image_links/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bdf6ba05c3bcb44228b8870062fbb9f63d2109ddb90f77d619be852393d68498
|
|
4
|
+
data.tar.gz: 00dbc1cad4345d24f0524cb94b824e7fbc49175d97332e9271ff765dabb67d25
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6a968dfeb35aeac174223c9f1403ccce199be670a940bc00da656e864b5b7ff09de4f7b25f92f7ca2677094afea3b05a8218308d428f33c5a87169f45d90b710
|
|
7
|
+
data.tar.gz: cabf1ad7e11d7f455d86f6b82f152451c0e122f3416fe24d66b89e66ca118136e93b06dcc1a08c1f5c573a81f6bb21315d4b73b65840bcc0c60737b99a83d559
|
data/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Inspired by the Dynamic Map Viewer in [5etools](https://github.com/5etools/5etoo
|
|
|
14
14
|
- Optional region labels overlaid on the image
|
|
15
15
|
- Integrates with [jekyll-hover-popup](https://github.com/sunflowermans/hover-popup) when both plugins are enabled:
|
|
16
16
|
- Map viewer opens inside a hover-popup window
|
|
17
|
-
- Region clicks open pinned hover-popup windows
|
|
17
|
+
- Region clicks open pinned hover-popup windows, unless the map sets `preview="false"`
|
|
18
18
|
|
|
19
19
|
https://github.com/user-attachments/assets/9b2f123b-56a4-43f4-984f-2dbfa7b844f9
|
|
20
20
|
|
|
@@ -46,10 +46,11 @@ image_links:
|
|
|
46
46
|
viewer_by_default: true
|
|
47
47
|
inline_by_default: true
|
|
48
48
|
labels_by_default: false
|
|
49
|
+
preview_by_default: true
|
|
49
50
|
use_hover_popup: auto # auto | true | false
|
|
50
51
|
```
|
|
51
52
|
|
|
52
|
-
When `jekyll-hover-popup` is also installed, image map region clicks open section previews in hover-popup windows instead of navigating the page. Set `use_hover_popup: false` to disable that integration.
|
|
53
|
+
When `jekyll-hover-popup` is also installed, image map region clicks open section previews in hover-popup windows instead of navigating the page. Set `use_hover_popup: false` to disable that integration for the whole site. Set `preview_by_default: false`, or `preview="false"` on a single map, to keep the integration and still navigate the current page when a region is clicked.
|
|
53
54
|
|
|
54
55
|
## Usage
|
|
55
56
|
|
|
@@ -113,6 +114,7 @@ When `width` and `height` are in the YAML file, you can omit them from the tag a
|
|
|
113
114
|
| `viewer="false"` | Disable the Dynamic Map Viewer button |
|
|
114
115
|
| `inline="false"` | Disable direct click regions on the inline image |
|
|
115
116
|
| `labels="true"` | Show region labels on the inline image |
|
|
117
|
+
| `preview="false"` | Navigate the current page on region click instead of opening a preview window |
|
|
116
118
|
|
|
117
119
|
### Manual HTML (portable markup)
|
|
118
120
|
|
|
@@ -135,6 +137,7 @@ If the plugin is disabled or not installed, the image still renders normally and
|
|
|
135
137
|
data-jil-viewer="true"
|
|
136
138
|
data-jil-inline="true"
|
|
137
139
|
data-jil-labels="true"
|
|
140
|
+
data-jil-preview="true"
|
|
138
141
|
/>
|
|
139
142
|
{:/nomarkdown}
|
|
140
143
|
```
|
|
@@ -160,6 +163,7 @@ Qualified images are detected by `class="jil-map-image"` together with region da
|
|
|
160
163
|
| `data-jil-viewer` | Enable/disable the Dynamic Map Viewer button |
|
|
161
164
|
| `data-jil-inline` | Enable/disable direct click regions on the inline image |
|
|
162
165
|
| `data-jil-labels` | Show region labels on the inline image |
|
|
166
|
+
| `data-jil-preview` | Open a preview window on region click, or navigate the current page |
|
|
163
167
|
|
|
164
168
|
## Coordinate system
|
|
165
169
|
|
|
@@ -165,6 +165,8 @@
|
|
|
165
165
|
const inline = host.dataset.jilInline !== "false";
|
|
166
166
|
const viewer = host.dataset.jilViewer !== "false";
|
|
167
167
|
const labels = host.dataset.jilLabels === "true";
|
|
168
|
+
// Absent means preview, so maps rendered before this flag still open one.
|
|
169
|
+
const preview = host.dataset.jilPreview !== "false";
|
|
168
170
|
const img = host.querySelector(".jil-map-image");
|
|
169
171
|
|
|
170
172
|
if (!img) {
|
|
@@ -174,8 +176,8 @@
|
|
|
174
176
|
|
|
175
177
|
reportMapProblems(img, mapData);
|
|
176
178
|
if (labels) renderLabels(host, mapData, img);
|
|
177
|
-
if (inline) bindInlineClicks(host, mapData, img);
|
|
178
|
-
if (viewer) addViewerButton(host, mapData);
|
|
179
|
+
if (inline) bindInlineClicks(host, mapData, img, preview);
|
|
180
|
+
if (viewer) addViewerButton(host, mapData, preview);
|
|
179
181
|
}
|
|
180
182
|
|
|
181
183
|
// Keep overlay geometry in sync with the image, including inside a preview
|
|
@@ -263,7 +265,7 @@
|
|
|
263
265
|
});
|
|
264
266
|
}
|
|
265
267
|
|
|
266
|
-
function bindInlineClicks(host, mapData, img) {
|
|
268
|
+
function bindInlineClicks(host, mapData, img, preview) {
|
|
267
269
|
host.classList.add("jil-inline");
|
|
268
270
|
img.addEventListener("click", (event) => {
|
|
269
271
|
const point = imagePointFromEvent(img, mapData, event);
|
|
@@ -271,7 +273,7 @@
|
|
|
271
273
|
if (!region) return;
|
|
272
274
|
|
|
273
275
|
event.preventDefault();
|
|
274
|
-
openRegion(region, event);
|
|
276
|
+
openRegion(region, event, preview);
|
|
275
277
|
});
|
|
276
278
|
|
|
277
279
|
img.addEventListener("mousemove", (event) => {
|
|
@@ -281,7 +283,7 @@
|
|
|
281
283
|
});
|
|
282
284
|
}
|
|
283
285
|
|
|
284
|
-
function addViewerButton(host, mapData) {
|
|
286
|
+
function addViewerButton(host, mapData, preview) {
|
|
285
287
|
const figure = host.closest(".jil-figure");
|
|
286
288
|
if (!figure) return;
|
|
287
289
|
|
|
@@ -293,7 +295,7 @@
|
|
|
293
295
|
button.type = "button";
|
|
294
296
|
button.className = "jil-viewer-button btn btn-outline";
|
|
295
297
|
button.textContent = mapData.title ? `Open ${mapData.title}` : "Open map viewer";
|
|
296
|
-
button.addEventListener("click", (event) => openViewer(mapData, event));
|
|
298
|
+
button.addEventListener("click", (event) => openViewer(mapData, event, preview));
|
|
297
299
|
toolbar.appendChild(button);
|
|
298
300
|
|
|
299
301
|
if (caption) {
|
|
@@ -303,8 +305,8 @@
|
|
|
303
305
|
}
|
|
304
306
|
}
|
|
305
307
|
|
|
306
|
-
function openViewer(mapData, event) {
|
|
307
|
-
const panel = buildViewerPanel(mapData);
|
|
308
|
+
function openViewer(mapData, event, preview) {
|
|
309
|
+
const panel = buildViewerPanel(mapData, preview);
|
|
308
310
|
const jhp = useHoverPopup() ? getHoverPopup() : null;
|
|
309
311
|
|
|
310
312
|
if (jhp) {
|
|
@@ -336,7 +338,7 @@
|
|
|
336
338
|
});
|
|
337
339
|
}
|
|
338
340
|
|
|
339
|
-
function buildViewerPanel(mapData) {
|
|
341
|
+
function buildViewerPanel(mapData, preview) {
|
|
340
342
|
const root = document.createElement("div");
|
|
341
343
|
root.className = "jil-viewer-panel jil-viewer-in-popup";
|
|
342
344
|
|
|
@@ -447,7 +449,7 @@
|
|
|
447
449
|
const region = firstIntersectedRegion(mapData.regions, point);
|
|
448
450
|
if (!region) return;
|
|
449
451
|
event.preventDefault();
|
|
450
|
-
openRegion(region, event);
|
|
452
|
+
openRegion(region, event, preview);
|
|
451
453
|
});
|
|
452
454
|
|
|
453
455
|
canvas.addEventListener("mousemove", (event) => {
|
|
@@ -528,13 +530,13 @@
|
|
|
528
530
|
return button;
|
|
529
531
|
}
|
|
530
532
|
|
|
531
|
-
async function openRegion(region, event) {
|
|
533
|
+
async function openRegion(region, event, preview) {
|
|
532
534
|
if (event.shiftKey) {
|
|
533
535
|
window.open(region.href, "_blank", "noopener,noreferrer");
|
|
534
536
|
return;
|
|
535
537
|
}
|
|
536
538
|
|
|
537
|
-
const jhp = useHoverPopup() ? getHoverPopup() : null;
|
|
539
|
+
const jhp = preview !== false && useHoverPopup() ? getHoverPopup() : null;
|
|
538
540
|
if (jhp) {
|
|
539
541
|
event.preventDefault();
|
|
540
542
|
try {
|
|
@@ -45,6 +45,7 @@ module Jekyll
|
|
|
45
45
|
viewer = attrs["viewer"]
|
|
46
46
|
inline = attrs["inline"]
|
|
47
47
|
labels = attrs["labels"]
|
|
48
|
+
preview = attrs["preview"]
|
|
48
49
|
|
|
49
50
|
resolved_src = resolve_url(src, site: site, page: page, liquid_context: liquid_context)
|
|
50
51
|
map_source = load_map_source(
|
|
@@ -59,6 +60,7 @@ module Jekyll
|
|
|
59
60
|
viewer_attr = %( data-jil-viewer="#{viewer}") unless viewer.nil? || viewer.empty?
|
|
60
61
|
inline_attr = %( data-jil-inline="#{inline}") unless inline.nil? || inline.empty?
|
|
61
62
|
labels_attr = %( data-jil-labels="#{labels}") unless labels.nil? || labels.empty?
|
|
63
|
+
preview_attr = %( data-jil-preview="#{preview}") unless preview.nil? || preview.empty?
|
|
62
64
|
title_attr = title ? %( data-jil-title="#{escape_attr(title)}") : ""
|
|
63
65
|
|
|
64
66
|
regions_script = ""
|
|
@@ -78,12 +80,12 @@ module Jekyll
|
|
|
78
80
|
<img
|
|
79
81
|
class="jil-map-image"
|
|
80
82
|
#{img_markup}#{style_attr}
|
|
81
|
-
loading="lazy"#{title_attr}#{regions_attr}#{viewer_attr}#{inline_attr}#{labels_attr}
|
|
83
|
+
loading="lazy"#{title_attr}#{regions_attr}#{viewer_attr}#{inline_attr}#{labels_attr}#{preview_attr}
|
|
82
84
|
/>#{regions_script}
|
|
83
85
|
HTML
|
|
84
86
|
end
|
|
85
87
|
|
|
86
|
-
def render_interactive(map_data, viewer:, inline:, labels:, alt:, display_style: nil)
|
|
88
|
+
def render_interactive(map_data, viewer:, inline:, labels:, preview:, alt:, display_style: nil)
|
|
87
89
|
map_json = JSON.generate(map_data)
|
|
88
90
|
id = "jil-map-#{Digest::MD5.hexdigest(map_json)[0, 8]}"
|
|
89
91
|
title = map_data["title"]
|
|
@@ -99,7 +101,7 @@ module Jekyll
|
|
|
99
101
|
host_style_attr = display_style.to_s.strip.empty? ? "" : %( style="#{escape_attr(display_style)}")
|
|
100
102
|
|
|
101
103
|
<<~HTML.strip
|
|
102
|
-
<div class="jil-figure" data-jil-image-map="true"><div class="#{host_class}" id="#{id}" data-jil-map="#{escape_attr(map_json)}" data-jil-viewer="#{viewer}" data-jil-inline="#{inline}" data-jil-labels="#{labels}"#{host_style_attr.empty? ? "" : " #{host_style_attr}"}><img class="jil-map-image" #{img_attrs} loading="lazy" /></div>#{caption_html}</div>
|
|
104
|
+
<div class="jil-figure" data-jil-image-map="true"><div class="#{host_class}" id="#{id}" data-jil-map="#{escape_attr(map_json)}" data-jil-viewer="#{viewer}" data-jil-inline="#{inline}" data-jil-labels="#{labels}" data-jil-preview="#{preview}"#{host_style_attr.empty? ? "" : " #{host_style_attr}"}><img class="jil-map-image" #{img_attrs} loading="lazy" /></div>#{caption_html}</div>
|
|
103
105
|
HTML
|
|
104
106
|
end
|
|
105
107
|
|
|
@@ -125,6 +127,7 @@ module Jekyll
|
|
|
125
127
|
"viewer" => container_attrs["data-jil-viewer"] || img_attrs["data-jil-viewer"],
|
|
126
128
|
"inline" => container_attrs["data-jil-inline"] || img_attrs["data-jil-inline"],
|
|
127
129
|
"labels" => container_attrs["data-jil-labels"] || img_attrs["data-jil-labels"],
|
|
130
|
+
"preview" => container_attrs["data-jil-preview"] || img_attrs["data-jil-preview"],
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
merged["title"] ||= img_attrs["data-jil-title"] || merged["alt"]
|
|
@@ -148,6 +151,7 @@ module Jekyll
|
|
|
148
151
|
viewer = parse_bool(attrs["viewer"], default: cfg.fetch("viewer_by_default", true))
|
|
149
152
|
inline = parse_bool(attrs["inline"], default: cfg.fetch("inline_by_default", true))
|
|
150
153
|
labels = parse_bool(attrs["labels"], default: cfg.fetch("labels_by_default", false))
|
|
154
|
+
preview = parse_bool(attrs["preview"], default: cfg.fetch("preview_by_default", true))
|
|
151
155
|
|
|
152
156
|
map_source = load_map_source(
|
|
153
157
|
site: site,
|
|
@@ -178,6 +182,7 @@ module Jekyll
|
|
|
178
182
|
viewer: viewer,
|
|
179
183
|
inline: inline,
|
|
180
184
|
labels: labels,
|
|
185
|
+
preview: preview,
|
|
181
186
|
alt: alt,
|
|
182
187
|
display_style: display_style
|
|
183
188
|
)
|