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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d2fc33af0a1cda25f029a7a72d68e32eefa8f1fa412fdd4f69281fdb8676a29
4
- data.tar.gz: 174005c6a08c2f617d953ebe2d874f324c3bfd0107436e93ff23f490bc623606
3
+ metadata.gz: bdf6ba05c3bcb44228b8870062fbb9f63d2109ddb90f77d619be852393d68498
4
+ data.tar.gz: 00dbc1cad4345d24f0524cb94b824e7fbc49175d97332e9271ff765dabb67d25
5
5
  SHA512:
6
- metadata.gz: 6cab285f59d4c32b302686e4995113c2b8ceaba8bbeaf29d9ec2a329ffd2ded5b8de487f6b26f62049c25c9fd155a7d64665d5cd5f807966d6aefae15618670f
7
- data.tar.gz: 3be18ab75e132c7c7ad4b054879fac3ebb27d72efaedc7b34be916765b049b4c27cc8c45648f3c819ec8bd55fa1df6fe06895adfb380cec51087c14fd74ca526
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
  )
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module ImageLinks
3
- VERSION = "0.3.1"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-image-links
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - directsun