asciidoctor-tabs 1.0.0.alpha.6 → 1.0.0.alpha.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd23b52dcb671b18e2fc149ff7c4c0f131acc7b36c5a83df0003c22cc341d8cd
4
- data.tar.gz: 502e57c0df6a007731a21dce2f382f54ea3e940c6548e914e91aab25d233a995
3
+ metadata.gz: 53a90833ce2142600152bf87248d9470058d6e39495863c644ac7e7bcc8c8ef0
4
+ data.tar.gz: fd0c9ab6d3e8a27c7bcb48489115b7c7a069a5aee6985626ffb91dc827830baa
5
5
  SHA512:
6
- metadata.gz: 41ddf35603690caa50d3685eb398ebbfd65ecc13630827731ec11493667a2bcd4db8616e530ae11cb8f05fa450d258b9e734ad4ee10fbe1bcaaf1c256ee681e7
7
- data.tar.gz: ac3f2b5a3d44a8209436955dd5ebb74eff9e2bfbc0f107e572488859de78cb133817db3c5362c09198aee71b9381dfa56646e036ebd885b5cf05231b23231a7b
6
+ metadata.gz: 7f187bad924fd98d618d23b452f5d06551392bb3c2acc25990793af0a2d0a55897a3d1557790df64a9658d9c4dc9a533b7da6e0ae4abb53e9993121a356c2e8e
7
+ data.tar.gz: '039a9561293145c0717da9f98942d027ee18e89bdd23ab975deec004461e14ac85a1d4aa0540e52d28e9b531d495428f3c4bf74bf3f3c5ea118694ac703547d1'
data/CHANGELOG.adoc CHANGED
@@ -4,6 +4,26 @@
4
4
  This document provides a curated view of the changes to Asciidoctor Tabs per release.
5
5
  For a detailed view of what has changed, refer to the {url-repo}/commits/main[commit history] on GitHub.
6
6
 
7
+ == 1.0.0-alpha.7 (2022-11-28) - @mojavelinux
8
+
9
+ === Added
10
+
11
+ * In tabs script, add `tab` class to tab element
12
+ * Sync tab selection across tabs blocks if `sync` option is set on tabs block or `tabs-sync-option` attribute is set on document (#28)
13
+ * Delist tabs block from sync if `nosync` option is set on block (#28)
14
+
15
+ === Changed
16
+
17
+ * When inline anchor is used for tab ID, promote value of id attribute to id attribute on tab and remove anchor
18
+
19
+ === Fixed
20
+
21
+ * Apply normal substitutions to principal text (first paragraph) of tab's content (#29)
22
+
23
+ === Details
24
+
25
+ {url-repo}/releases/tag/v1.0.0-alpha.7[git tag] | {url-repo}/compare/v1.0.0-alpha.6\...v1.0.0-alpha.7[full diff]
26
+
7
27
  == 1.0.0-alpha.6 (2022-11-16) - @mojavelinux
8
28
 
9
29
  === Added
@@ -111,7 +131,7 @@ For a detailed view of what has changed, refer to the {url-repo}/commits/main[co
111
131
 
112
132
  == 1.0.0-alpha.1 (2022-10-01) - @mojavelinux
113
133
 
114
- _Initial release._
134
+ _Initial prerelease._
115
135
 
116
136
  === Details
117
137
 
data/README.adoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = Asciidoctor Tabs
2
2
  Dan Allen <https://github.com/mojavelinux[@mojavelinux]>
3
- v1.0.0-alpha.6, 2022-11-16
3
+ v1.0.0-alpha.7, 2022-11-28
4
4
  :idprefix:
5
5
  :idseparator: -
6
6
  ifndef::env-github[:icons: font]
@@ -84,7 +84,7 @@ The term is used as the tab's label and the description is used as the tab's con
84
84
  The contents can be defined as primary text, attached blocks, or both.
85
85
  If the attached blocks are themselves enclosed in a single open block, the open block enclosure itself is discarded upon conversion.
86
86
 
87
- You may decide to extend the block delimiter length instead of using the typical 4 characters to avoid conflicts with any example blocks inside the tab block (or just as a manner of style).
87
+ You may choose to extend the block delimiter length from the typical 4 characters to 6 in order to avoid conflicts with any example blocks inside the tab block (or just as a matter of style).
88
88
 
89
89
  [,asciidoc]
90
90
  ----
data/data/js/tabs.js CHANGED
@@ -1,70 +1,80 @@
1
- /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
2
- ;(function () {
1
+ ;(function () { /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
3
2
  'use strict'
4
3
 
5
- var tabsets = find('.tabset')
6
- if (!tabsets.length) return
7
- var fragment = decodeFragment(window.location.hash)
4
+ var forEach = Array.prototype.forEach
8
5
 
9
- tabsets.forEach(function (tabset) {
10
- var active
11
- var tabs = tabset.querySelector('.tabs')
12
- if (tabs) {
13
- var first
14
- find('li', tabs).forEach(function (tab, idx) {
15
- var id = (tab.querySelector('a[id]') || tab).id
16
- if (!id) return
6
+ init(document.querySelectorAll('.tabset'))
7
+
8
+ function init (tabsets) {
9
+ if (!tabsets.length) return
10
+ var fragment = getFragment()
11
+ forEach.call(tabsets, function (tabset) {
12
+ var tabs = tabset.querySelectorAll('.tabs li')
13
+ if (!tabs.length) return tabset.classList.remove('is-loading')
14
+ var active, first, syncId
15
+ var syncIds = tabset.classList.contains('is-sync') ? {} : undefined
16
+ forEach.call(tabs, function (tab, idx) {
17
+ var id = tab.id
18
+ if (!id) {
19
+ var anchor = tab.querySelector('a[id]')
20
+ if (!anchor) return // invalid state
21
+ tab.id = id = anchor.parentNode.removeChild(anchor).id
22
+ }
23
+ tab.className = 'tab'
17
24
  var pane = tabset.querySelector('.tab-pane[aria-labelledby~="' + id + '"]')
18
- if (!pane) return
19
- if (!idx) first = { tab: tab, pane: pane }
25
+ if (!pane) return // invalid state
26
+ var instance = { tabset: tabset, tab: tab, pane: pane }
27
+ if (!idx) first = instance
20
28
  if (!active && fragment === id && (active = true)) {
21
29
  tab.classList.add('is-active')
22
- if (pane) pane.classList.add('is-active')
23
- } else if (!idx) {
24
- tab.classList.remove('is-active')
25
- if (pane) pane.classList.remove('is-active')
30
+ pane.classList.add('is-active')
31
+ }
32
+ if (syncIds && !((syncId = tab.textContent.trim()) in syncIds)) {
33
+ syncIds[(tab.dataset.syncId = syncId)] = true
34
+ tab.addEventListener('click', activateTabSync.bind(instance))
35
+ } else {
36
+ tab.addEventListener('click', activateTab.bind(instance))
26
37
  }
27
- tab.addEventListener('click', activateTab.bind({ tabset: tabset, tab: tab, pane: pane }))
28
38
  })
29
39
  if (!active && first) {
30
40
  first.tab.classList.add('is-active')
31
- if (first.pane) first.pane.classList.add('is-active')
41
+ first.pane.classList.add('is-active')
32
42
  }
33
- }
34
- tabset.classList.remove('is-loading')
35
- })
36
-
37
- tabsets = undefined
38
- window.addEventListener('hashchange', onHashChange)
43
+ tabset.classList.remove('is-loading')
44
+ })
45
+ window.addEventListener('hashchange', onHashChange)
46
+ }
39
47
 
40
48
  function activateTab (e) {
41
49
  var tab = this.tab
42
- var pane = this.pane
43
- find('.tabs li, .tab-pane', this.tabset).forEach(function (it) {
44
- it === tab || it === pane ? it.classList.add('is-active') : it.classList.remove('is-active')
50
+ var tabset = this.tabset || tab.closest('.tabset')
51
+ var pane = this.pane || tabset.querySelector('.tab-pane[aria-labelledby~="' + tab.id + '"]')
52
+ forEach.call(tabset.querySelectorAll('.tabs li, .tab-pane'), function (el) {
53
+ el === tab || el === pane ? el.classList.add('is-active') : el.classList.remove('is-active')
45
54
  })
46
55
  if (!e) return
47
- var hashIdx = window.location.hash ? window.location.href.indexOf('#') : -1
48
- if (~hashIdx) window.history.replaceState(null, '', window.location.href.slice(0, hashIdx))
56
+ var loc = window.location
57
+ var hashIdx = loc.hash ? loc.href.indexOf('#') : -1
58
+ if (~hashIdx) window.history.replaceState(null, '', loc.href.slice(0, hashIdx))
49
59
  e.preventDefault()
50
60
  }
51
61
 
52
- function decodeFragment (hash) {
53
- return hash && (~hash.indexOf('%') ? decodeURIComponent(hash.slice(1)) : hash.slice(1))
62
+ function activateTabSync (e) {
63
+ activateTab.call(this, e)
64
+ var thisTab = this.tab
65
+ forEach.call(document.querySelectorAll('.tabs li'), function (tab) {
66
+ if (tab !== thisTab && tab.dataset.syncId === thisTab.dataset.syncId) activateTab.call({ tab: tab })
67
+ })
68
+ }
69
+
70
+ function getFragment (hash) {
71
+ return (hash = window.location.hash) && (~hash.indexOf('%') ? decodeURIComponent(hash.slice(1)) : hash.slice(1))
54
72
  }
55
73
 
56
74
  function onHashChange () {
57
- var id = decodeFragment(window.location.hash)
75
+ var id = getFragment()
58
76
  if (!id) return
59
77
  var tab = document.getElementById(id)
60
- if (!(tab && document.querySelector('.tabset .tabs [id="' + id + '"]'))) return
61
- if (tab.tagName === 'A') tab = tab.parentNode
62
- var tabset = tab.closest('.tabset')
63
- var pane = tabset.querySelector('.tab-pane[aria-labelledby~="' + id + '"]')
64
- activateTab.call({ tabset: tabset, tab: tab, pane: pane })
65
- }
66
-
67
- function find (selector, from) {
68
- return Array.prototype.slice.call((from || document).querySelectorAll(selector))
78
+ if (tab && tab.classList.contains('tab')) activateTab.call({ tab: tab })
69
79
  }
70
80
  })()
@@ -18,7 +18,8 @@ module Asciidoctor
18
18
  end
19
19
  tabset_number = doc.counter 'tabset-number'
20
20
  tabs_id = attrs['id'] || (generate_id %(tabset #{tabset_number}), doc)
21
- parent << (create_html_fragment parent, %(<div id="#{tabs_id}" class="tabset is-loading">))
21
+ sync = !(block.option? 'nosync') && ((block.option? 'sync') || (doc.option? 'tabs-sync')) ? ' is-sync' : nil
22
+ parent << (create_html_fragment parent, %(<div id="#{tabs_id}" class="tabset#{sync || ''} is-loading">))
22
23
  if (title = attrs['title'])
23
24
  parent << (create_html_fragment parent, %(<div class="title">#{parent.apply_subs title}</div>))
24
25
  end
@@ -35,7 +36,9 @@ module Asciidoctor
35
36
  tab_id
36
37
  end
37
38
  if content
38
- tab_blocks = content.text? ? [(create_paragraph parent, (content.instance_variable_get :@text), nil)] : []
39
+ tab_blocks = content.text? ?
40
+ [(create_paragraph parent, (content.instance_variable_get :@text), nil, subs: :normal)]
41
+ : []
39
42
  if content.blocks?
40
43
  if (block0 = (blocks = content.blocks)[0]).context == :open && blocks.size == 1 && block0.blocks?
41
44
  blocks = block0.blocks
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module Tabs
5
- VERSION = '1.0.0.alpha.6'
5
+ VERSION = '1.0.0.alpha.7'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-tabs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha.6
4
+ version: 1.0.0.alpha.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Allen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-16 00:00:00.000000000 Z
11
+ date: 2022-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: 1.3.1
103
103
  requirements: []
104
- rubygems_version: 3.3.7
104
+ rubygems_version: 3.3.26
105
105
  signing_key:
106
106
  specification_version: 4
107
107
  summary: An Asciidoctor extension that adds a tabs block to the AsciiDoc syntax.