asciidoctor-tabs 1.0.0.alpha.7 → 1.0.0.alpha.8
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/CHANGELOG.adoc +12 -0
- data/README.adoc +28 -1
- data/data/css/tabs.css +3 -1
- data/data/js/tabs.js +18 -24
- data/lib/asciidoctor/tabs/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35c07868db0fc9f06cc95b5af64d1228ede7894c8acdb63570c368acf8d179f8
|
4
|
+
data.tar.gz: 80e712a56c6e421a922e109ba7cdfcf4807f24aa2b1a8aac9e8d6b334f483986
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cda7d6fd762ae09f8376b344f3e1a2a28c32605cfc9c5afb51117f31868e5ea9e05f299e587937ad045d4bb2c0e24bc4dc4b3351a02cae840ebe3a7cca56b1b
|
7
|
+
data.tar.gz: 68e26c82a72335b2ff799d816f3e8562367b7d14e0de78794ac19b3bcc36a98b4dc51f9d6b9f06d82d5769d87cb132ada8b8a8fd31706434a001428b772367b8
|
data/CHANGELOG.adoc
CHANGED
@@ -4,6 +4,18 @@
|
|
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.8 (2022-11-30) - @mojavelinux
|
8
|
+
|
9
|
+
=== Fixed
|
10
|
+
|
11
|
+
* Sync tab selection on hash change (#32)
|
12
|
+
* Lock position of content when synchronizing tab selection (#34)
|
13
|
+
* Remove bottom margin from last block in tab pane for the most common cases
|
14
|
+
|
15
|
+
=== Details
|
16
|
+
|
17
|
+
{url-repo}/releases/tag/v1.0.0-alpha.8[git tag] | {url-repo}/compare/v1.0.0-alpha.7\...v1.0.0-alpha.8[full diff]
|
18
|
+
|
7
19
|
== 1.0.0-alpha.7 (2022-11-28) - @mojavelinux
|
8
20
|
|
9
21
|
=== 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-alpha.
|
3
|
+
v1.0.0-alpha.8, 2022-11-30
|
4
4
|
:idprefix:
|
5
5
|
:idseparator: -
|
6
6
|
ifndef::env-github[:icons: font]
|
@@ -100,6 +100,33 @@ Tab B:: Just text.
|
|
100
100
|
======
|
101
101
|
----
|
102
102
|
|
103
|
+
== Tabs Sync
|
104
|
+
|
105
|
+
If you want to synchronize the tab selection across tabsets, set the `tabs-sync-option` on the document.
|
106
|
+
|
107
|
+
.document-with-tabs-sync.adoc
|
108
|
+
[,asciidoc]
|
109
|
+
----
|
110
|
+
:tabs-sync-option:
|
111
|
+
|
112
|
+
[tabs]
|
113
|
+
====
|
114
|
+
Tab A:: Contents of tab A in first tabset.
|
115
|
+
Tab B:: Contents of tab B in first tabset.
|
116
|
+
====
|
117
|
+
|
118
|
+
...
|
119
|
+
|
120
|
+
[tabs]
|
121
|
+
====
|
122
|
+
Tab A:: Contents of tab A in second tabset.
|
123
|
+
Tab B:: Contents of tab B in second tabset.
|
124
|
+
====
|
125
|
+
----
|
126
|
+
|
127
|
+
Alternately, you can set the `sync` option on each tabs block.
|
128
|
+
If you want to delist a tabs block from sync, set the `nosync` option on that block.
|
129
|
+
|
103
130
|
== Usage
|
104
131
|
|
105
132
|
=== CLI
|
data/data/css/tabs.css
CHANGED
@@ -65,6 +65,8 @@
|
|
65
65
|
margin-top: 0;
|
66
66
|
}
|
67
67
|
|
68
|
-
.tab-pane > :last-child
|
68
|
+
#content .tab-pane > :last-child,
|
69
|
+
#content .tab-pane > :last-child > :last-child,
|
70
|
+
#content .tab-pane > :last-child > :last-child > li:last-child > :last-child {
|
69
71
|
margin-bottom: 0;
|
70
72
|
}
|
data/data/js/tabs.js
CHANGED
@@ -7,11 +7,8 @@
|
|
7
7
|
|
8
8
|
function init (tabsets) {
|
9
9
|
if (!tabsets.length) return
|
10
|
-
var fragment = getFragment()
|
11
10
|
forEach.call(tabsets, function (tabset) {
|
12
11
|
var tabs = tabset.querySelectorAll('.tabs li')
|
13
|
-
if (!tabs.length) return tabset.classList.remove('is-loading')
|
14
|
-
var active, first, syncId
|
15
12
|
var syncIds = tabset.classList.contains('is-sync') ? {} : undefined
|
16
13
|
forEach.call(tabs, function (tab, idx) {
|
17
14
|
var id = tab.id
|
@@ -20,26 +17,22 @@
|
|
20
17
|
if (!anchor) return // invalid state
|
21
18
|
tab.id = id = anchor.parentNode.removeChild(anchor).id
|
22
19
|
}
|
23
|
-
tab.className = 'tab'
|
20
|
+
tab.className = idx ? 'tab' : 'tab is-active'
|
24
21
|
var pane = tabset.querySelector('.tab-pane[aria-labelledby~="' + id + '"]')
|
25
22
|
if (!pane) return // invalid state
|
23
|
+
if (!idx) pane.classList.add('is-active')
|
24
|
+
var onClick = activateTab
|
26
25
|
var instance = { tabset: tabset, tab: tab, pane: pane }
|
27
|
-
|
28
|
-
if (!active && fragment === id && (active = true)) {
|
29
|
-
tab.classList.add('is-active')
|
30
|
-
pane.classList.add('is-active')
|
31
|
-
}
|
26
|
+
var syncId
|
32
27
|
if (syncIds && !((syncId = tab.textContent.trim()) in syncIds)) {
|
33
28
|
syncIds[(tab.dataset.syncId = syncId)] = true
|
34
|
-
|
35
|
-
} else {
|
36
|
-
tab.addEventListener('click', activateTab.bind(instance))
|
29
|
+
onClick = activateTabSync
|
37
30
|
}
|
31
|
+
tab.addEventListener('click', onClick.bind(instance))
|
38
32
|
})
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
}
|
33
|
+
})
|
34
|
+
onHashChange()
|
35
|
+
forEach.call(tabsets, function (tabset) {
|
43
36
|
tabset.classList.remove('is-loading')
|
44
37
|
})
|
45
38
|
window.addEventListener('hashchange', onHashChange)
|
@@ -47,7 +40,7 @@
|
|
47
40
|
|
48
41
|
function activateTab (e) {
|
49
42
|
var tab = this.tab
|
50
|
-
var tabset = this.tabset || tab.closest('.tabset')
|
43
|
+
var tabset = this.tabset || (this.tabset = tab.closest('.tabset'))
|
51
44
|
var pane = this.pane || tabset.querySelector('.tab-pane[aria-labelledby~="' + tab.id + '"]')
|
52
45
|
forEach.call(tabset.querySelectorAll('.tabs li, .tab-pane'), function (el) {
|
53
46
|
el === tab || el === pane ? el.classList.add('is-active') : el.classList.remove('is-active')
|
@@ -61,20 +54,21 @@
|
|
61
54
|
|
62
55
|
function activateTabSync (e) {
|
63
56
|
activateTab.call(this, e)
|
57
|
+
var tabset = this.tabset
|
64
58
|
var thisTab = this.tab
|
59
|
+
var initialY = tabset.getBoundingClientRect().y
|
65
60
|
forEach.call(document.querySelectorAll('.tabs li'), function (tab) {
|
66
61
|
if (tab !== thisTab && tab.dataset.syncId === thisTab.dataset.syncId) activateTab.call({ tab: tab })
|
67
62
|
})
|
68
|
-
|
69
|
-
|
70
|
-
function getFragment (hash) {
|
71
|
-
return (hash = window.location.hash) && (~hash.indexOf('%') ? decodeURIComponent(hash.slice(1)) : hash.slice(1))
|
63
|
+
var shiftedBy = tabset.getBoundingClientRect().y - initialY
|
64
|
+
if (shiftedBy && (shiftedBy = Math.round(shiftedBy))) window.scrollBy({ top: shiftedBy, behavior: 'instant' })
|
72
65
|
}
|
73
66
|
|
74
67
|
function onHashChange () {
|
75
|
-
var id =
|
68
|
+
var id = window.location.hash.slice(1)
|
76
69
|
if (!id) return
|
77
|
-
var tab = document.getElementById(id)
|
78
|
-
if (tab && tab.classList.contains('tab'))
|
70
|
+
var tab = document.getElementById(~id.indexOf('%') ? decodeURIComponent(id) : id)
|
71
|
+
if (!(tab && tab.classList.contains('tab'))) return
|
72
|
+
tab.dataset.syncId ? activateTabSync.call({ tab: tab }) : activateTab.call({ tab: tab })
|
79
73
|
}
|
80
74
|
})()
|
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.
|
4
|
+
version: 1.0.0.alpha.8
|
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-
|
11
|
+
date: 2022-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|