asciidoctor-tabs 1.0.0.beta.3 → 1.0.0.beta.4

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: 79ee9882999f6e27787ce575352f3382272a502fa99c3e33090c265110290ab8
4
- data.tar.gz: 1c8d5d2001a1b8f277ae84fc0c4e0f0d54f65266d97bd948e78835de7d5a91ae
3
+ metadata.gz: e73997158c47ea046d9c2016a25cac989e0f0e12e013bdc17f0c3cde8128e55f
4
+ data.tar.gz: 2dd6e9907c7c2498c1ff2226f25d00d654b872644063b02230882a2090f35e45
5
5
  SHA512:
6
- metadata.gz: 4bf6818b2492f96aee01f2d29658e09a5bac3614e3c6e6565a83a817d0b1c5cf80897da04ca7859f0fe2fa6ce587cd5f10e37b74688a78e3c4d07a94a0b8d350
7
- data.tar.gz: 12a6df3597b1c1da6fbff9f3bf130d1ec34d0485102bf780a27d8cde79596a22ca44b8f6620ab202ca6ac03d386da94e155d58b49d186e47117a02864ea5998e
6
+ metadata.gz: d530e0bb402fd7aa9346c5dc747efe5224436ef8d2e1fd4139a64fb84ed3f3c044069ba0fb807f12ecfe78104d6665395d979aeb1aac77465cef6bb831b1e0ad
7
+ data.tar.gz: c1c756f94280e8d70394c13abdfeb541f226b5eb39cfe86b514211781e5ab80bf1208e7faad6162db45571b26801ada288ae656143d074a7184ba40674afac32
data/CHANGELOG.adoc CHANGED
@@ -4,6 +4,23 @@
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-beta.4 (2023-05-22) - @mojavelinux
8
+
9
+ === Changed
10
+
11
+ * Rework styles for tab to make them compatible with a transition effect; stub in effect in built-in stylesheet
12
+ * Add tab class to tab element (if missing) rather than overwriting className property to preserve existing class names
13
+
14
+ === Fixed
15
+
16
+ * Don't alter state of nested tabs when tab is selected (#55)
17
+ * Don't wrap tables inside nested tabs with tablecontainer div multiple times (#55)
18
+ * Fix fallback logic in behavior script when tab is missing ID or does not match a panel
19
+
20
+ === Details
21
+
22
+ {url-repo}/releases/tag/v1.0.0-beta.4[git tag] | {url-repo}/compare/v1.0.0-beta.3\...v1.0.0-beta.4[full diff]
23
+
7
24
  == 1.0.0-beta.3 (2023-02-01) - @mojavelinux
8
25
 
9
26
  === Added
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-beta.3, 2023-02-01
3
+ v1.0.0-beta.4, 2023-05-22
4
4
  :idprefix:
5
5
  :idseparator: -
6
6
  ifndef::env-github[:icons: font]
data/data/css/tabs.css CHANGED
@@ -35,6 +35,16 @@
35
35
  margin-left: 0.25em;
36
36
  }
37
37
 
38
+ .tabs .tablist li::after {
39
+ content: "";
40
+ display: block;
41
+ height: 1px;
42
+ position: absolute;
43
+ bottom: -1px;
44
+ left: 0;
45
+ right: 0;
46
+ }
47
+
38
48
  .tabs.is-loading .tablist li:not(:first-child),
39
49
  .tabs:not(.is-loading) .tablist li:not(.is-selected) {
40
50
  background-color: #f5f5f5;
@@ -42,15 +52,15 @@
42
52
 
43
53
  .tabs.is-loading .tablist li:first-child::after,
44
54
  .tabs:not(.is-loading) .tablist li.is-selected::after {
45
- background-color: inherit;
46
- content: "";
47
- display: block;
48
- height: 3px; /* Chrome doesn't always paint the line accurately, so add a little extra */
49
- position: absolute;
50
- bottom: -1.5px;
51
- left: 0;
52
- right: 0;
55
+ background-color: #fff;
56
+ }
57
+
58
+ /*
59
+ .tabs:not(.is-loading) .tablist li,
60
+ .tabs:not(.is-loading) .tablist li::after {
61
+ transition: background-color 200ms ease-in-out;
53
62
  }
63
+ */
54
64
 
55
65
  .tablist > ul p {
56
66
  line-height: inherit;
data/data/js/tabs.js CHANGED
@@ -12,30 +12,31 @@
12
12
  var syncIds = tabs.classList.contains('is-sync') ? {} : undefined
13
13
  var tablist = tabs.querySelector('.tablist ul')
14
14
  tablist.setAttribute('role', 'tablist')
15
- var initial
15
+ var start
16
16
  forEach.call(tablist.querySelectorAll('li'), function (tab, idx) {
17
- tab.setAttribute('role', (tab.className = 'tab')) // NOTE converter may not have set class on li
17
+ tab.tabIndex = -1
18
+ tab.setAttribute('role', tab.classList.add('tab') || 'tab')
18
19
  var id, anchor, syncId
19
- if (!(id = tab.id)) {
20
- if (!(anchor = tab.querySelector('a[id]'))) return // invalid state
21
- tab.id = id = anchor.parentNode.removeChild(anchor).id
20
+ if (!(id = tab.id) && (anchor = tab.querySelector('a[id]'))) {
21
+ id = tab.id = anchor.parentNode.removeChild(anchor).id
22
22
  }
23
- var panel = tabs.querySelector('.tabpanel[aria-labelledby~="' + id + '"]')
24
- if (!panel) return // invalid state
25
- tab.tabIndex = -1
23
+ var panel = id && tabs.querySelector('.tabpanel[aria-labelledby~="' + id + '"]')
24
+ if (!panel) return idx ? undefined : toggleSelected(tab, true) // invalid state
26
25
  syncIds && (((syncId = tab.textContent.trim()) in syncIds) ? (syncId = undefined) : true) &&
27
26
  (syncIds[(tab.dataset.syncId = syncId)] = tab)
28
- idx || (initial = { tab: tab, panel: panel }) && syncIds ? toggleHidden(panel, true) : toggleSelected(tab, true)
27
+ idx || (syncIds && (start = { tab: tab, panel: panel })) ? toggleHidden(panel, true) : toggleSelected(tab, true)
29
28
  tab.setAttribute('aria-controls', panel.id)
30
29
  panel.setAttribute('role', 'tabpanel')
31
- forEach.call(panel.querySelectorAll('table.tableblock'), function (table) {
32
- var container = Object.assign(document.createElement('div'), { className: 'tablecontainer' })
33
- table.parentNode.insertBefore(container, table).appendChild(table)
34
- })
35
30
  var onClick = syncId === undefined ? activateTab : activateTabSync
36
31
  tab.addEventListener('click', onClick.bind({ tabs: tabs, tab: tab, panel: panel }))
37
32
  })
38
- if (syncIds && initial) {
33
+ if (!tabs.closest('.tabpanel')) {
34
+ forEach.call(tabs.querySelectorAll('.tabpanel table.tableblock'), function (table) {
35
+ var container = Object.assign(document.createElement('div'), { className: 'tablecontainer' })
36
+ table.parentNode.insertBefore(container, table).appendChild(table)
37
+ })
38
+ }
39
+ if (start) {
39
40
  var syncGroupId
40
41
  for (var i = 0, lst = tabs.classList, len = lst.length, className; i !== len; i++) {
41
42
  if (!(className = lst.item(i)).startsWith('data-sync-group-id=')) continue
@@ -46,8 +47,8 @@
46
47
  var preferredSyncId = 'syncStorageKey' in config &&
47
48
  window[(config.syncStorageScope || 'local') + 'Storage'].getItem(config.syncStorageKey + '-' + syncGroupId)
48
49
  var tab = preferredSyncId && syncIds[preferredSyncId]
49
- tab && Object.assign(initial, { tab: tab, panel: document.getElementById(tab.getAttribute('aria-controls')) })
50
- toggleSelected(initial.tab, true) || toggleHidden(initial.panel, false)
50
+ tab && Object.assign(start, { tab: tab, panel: document.getElementById(tab.getAttribute('aria-controls')) })
51
+ toggleSelected(start.tab, true) || toggleHidden(start.panel, false)
51
52
  }
52
53
  })
53
54
  onHashChange()
@@ -60,10 +61,10 @@
60
61
  var tab = this.tab
61
62
  var tabs = this.tabs || (this.tabs = tab.closest('.tabs'))
62
63
  var panel = this.panel || (this.panel = document.getElementById(tab.getAttribute('aria-controls')))
63
- forEach.call(tabs.querySelectorAll('.tablist .tab'), function (el) {
64
+ querySelectorWithSiblings(tabs, '.tablist .tab', 'tab').forEach(function (el) {
64
65
  toggleSelected(el, el === tab)
65
66
  })
66
- forEach.call(tabs.querySelectorAll('.tabpanel'), function (el) {
67
+ querySelectorWithSiblings(tabs, '.tabpanel', 'tabpanel').forEach(function (el) {
67
68
  toggleHidden(el, el !== panel)
68
69
  })
69
70
  if (!this.isSync && 'syncStorageKey' in config && 'syncGroupId' in tabs.dataset) {
@@ -84,7 +85,7 @@
84
85
  var initialY = thisTabs.getBoundingClientRect().y
85
86
  forEach.call(document.querySelectorAll('.tabs'), function (tabs) {
86
87
  if (tabs === thisTabs || tabs.dataset.syncGroupId !== thisTabs.dataset.syncGroupId) return
87
- forEach.call(tabs.querySelectorAll('.tablist .tab'), function (tab) {
88
+ querySelectorWithSiblings(tabs, '.tablist .tab', 'tab').forEach(function (tab) {
88
89
  if (tab.dataset.syncId === thisTab.dataset.syncId) activateTab.call({ tabs: tabs, tab: tab, isSync: true })
89
90
  })
90
91
  })
@@ -92,6 +93,14 @@
92
93
  if (shiftedBy && (shiftedBy = Math.round(shiftedBy))) window.scrollBy({ top: shiftedBy, behavior: 'instant' })
93
94
  }
94
95
 
96
+ function querySelectorWithSiblings (scope, selector, siblingClass) {
97
+ var el = scope.querySelector(selector)
98
+ if (!el) return []
99
+ var result = [el]
100
+ while ((el = el.nextElementSibling) && el.classList.contains(siblingClass)) result.push(el)
101
+ return result
102
+ }
103
+
95
104
  function toggleClassOnEach (elements, className, method) {
96
105
  forEach.call(elements, function (el) {
97
106
  el.classList[method](className)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module Tabs
5
- VERSION = '1.0.0.beta.3'
5
+ VERSION = '1.0.0.beta.4'
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.beta.3
4
+ version: 1.0.0.beta.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Allen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-01 00:00:00.000000000 Z
11
+ date: 2023-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor