metanorma-itu 1.0.13 → 1.0.18

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +8 -7
  3. data/.github/workflows/ubuntu.yml +12 -9
  4. data/.github/workflows/windows.yml +8 -8
  5. data/lib/asciidoctor/itu/biblio.rng +89 -32
  6. data/lib/asciidoctor/itu/cleanup.rb +80 -71
  7. data/lib/asciidoctor/itu/converter.rb +7 -11
  8. data/lib/asciidoctor/itu/front.rb +47 -18
  9. data/lib/asciidoctor/itu/isodoc.rng +475 -2
  10. data/lib/asciidoctor/itu/reqt.rng +23 -0
  11. data/lib/isodoc/itu/base_convert.rb +66 -16
  12. data/lib/isodoc/itu/html/_coverpage.scss +7 -3
  13. data/lib/isodoc/itu/html/header.html +8 -8
  14. data/lib/isodoc/itu/html/html_itu_titlepage.html +6 -7
  15. data/lib/isodoc/itu/html/htmlstyle.scss +9 -5
  16. data/lib/isodoc/itu/html/itu.scss +28 -1
  17. data/lib/isodoc/itu/html/scripts.html +14 -27
  18. data/lib/isodoc/itu/html/word_itu_intro.html +11 -1
  19. data/lib/isodoc/itu/html/word_itu_titlepage.html +3 -6
  20. data/lib/isodoc/itu/html/wordstyle.scss +6 -5
  21. data/lib/isodoc/itu/html_convert.rb +3 -3
  22. data/lib/isodoc/itu/i18n-en.yaml +2 -1
  23. data/lib/isodoc/itu/itu.recommendation-annex.xsl +3903 -0
  24. data/lib/isodoc/itu/itu.recommendation.xsl +3903 -0
  25. data/lib/isodoc/itu/itu.resolution.xsl +3903 -0
  26. data/lib/isodoc/itu/metadata.rb +16 -6
  27. data/lib/isodoc/itu/pdf_convert.rb +17 -44
  28. data/lib/isodoc/itu/ref.rb +48 -21
  29. data/lib/isodoc/itu/terms.rb +5 -6
  30. data/lib/isodoc/itu/word_convert.rb +10 -8
  31. data/lib/isodoc/itu/xref.rb +27 -16
  32. data/lib/metanorma/itu/processor.rb +8 -0
  33. data/lib/metanorma/itu/version.rb +1 -1
  34. data/metanorma-itu.gemspec +1 -1
  35. metadata +7 -5
  36. data/lib/isodoc/itu/html/scripts.pdf.html +0 -72
@@ -30,9 +30,22 @@
30
30
  <data type="boolean"/>
31
31
  </attribute>
32
32
  </optional>
33
+ <optional>
34
+ <attribute name="number"/>
35
+ </optional>
33
36
  <optional>
34
37
  <attribute name="subsequence"/>
35
38
  </optional>
39
+ <optional>
40
+ <attribute name="keep-with-next">
41
+ <data type="boolean"/>
42
+ </attribute>
43
+ </optional>
44
+ <optional>
45
+ <attribute name="keep-lines-together">
46
+ <data type="boolean"/>
47
+ </attribute>
48
+ </optional>
36
49
  <attribute name="id">
37
50
  <data type="ID"/>
38
51
  </attribute>
@@ -141,6 +154,16 @@
141
154
  <data type="boolean"/>
142
155
  </attribute>
143
156
  </optional>
157
+ <optional>
158
+ <attribute name="keep-with-next">
159
+ <data type="boolean"/>
160
+ </attribute>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="keep-lines-together">
164
+ <data type="boolean"/>
165
+ </attribute>
166
+ </optional>
144
167
  <oneOrMore>
145
168
  <ref name="BasicBlock"/>
146
169
  </oneOrMore>
@@ -37,13 +37,20 @@ module IsoDoc
37
37
  end
38
38
  end
39
39
 
40
+ def bracket_opt(b)
41
+ return b if b.nil?
42
+ return b if /^\[.+\]$/.match(b)
43
+ "[#{b}]"
44
+ end
45
+
40
46
  def clausedelim
41
47
  ""
42
48
  end
43
49
 
44
50
  def note_label(node)
45
51
  n = get_anchors[node["id"]]
46
- return "#{@note_lbl} &ndash; " if n.nil? || n[:label].nil? || n[:label].empty?
52
+ (n.nil? || n[:label].nil? || n[:label].empty?) and
53
+ return "#{@note_lbl} &ndash; "
47
54
  l10n("#{@note_lbl} #{n[:label]} &ndash; ")
48
55
  end
49
56
 
@@ -64,7 +71,8 @@ module IsoDoc
64
71
  end
65
72
 
66
73
  def annex_name(annex, name, div)
67
- div.h1 **{ class: "Annex" } do |t|
74
+ r_a = @meta.get[:doctype_original] == "recommendation-annex"
75
+ div.h1 **{ class: r_a ? "RecommendationAnnex" : "Annex" } do |t|
68
76
  t << "#{anchor(annex['id'], :label)} "
69
77
  t.br
70
78
  t.br
@@ -76,14 +84,28 @@ module IsoDoc
76
84
  end
77
85
 
78
86
  def annex_obligation_subtitle(annex, div)
79
- type = annex&.document&.root&.at("//bibdata/ext/doctype")&.text ||
80
- "recommendation"
81
- type = type.split(" ").map {|w| w.capitalize }.join(" ")
82
87
  info = annex["obligation"] == "informative"
83
88
  div.p **{class: "annex_obligation" } do |p|
84
- p << (info ? @inform_annex_lbl : @norm_annex_lbl).sub(/%/, type)
89
+ p << (info ? @inform_annex_lbl : @norm_annex_lbl).
90
+ sub(/%/, @meta.get[:doctype] || "")
91
+ end
92
+ end
93
+
94
+ def annex(isoxml, out)
95
+ isoxml.xpath(ns("//annex")).each do |c|
96
+ @meta.get[:doctype_original] == "recommendation-annex" or
97
+ page_break(out)
98
+ out.div **attr_code(id: c["id"], class: "Section3") do |s|
99
+ annex_name(c, nil, s) unless c.at(ns("./title"))
100
+ c.elements.each do |c1|
101
+ if c1.name == "title" then annex_name(c, c1, s)
102
+ else
103
+ parse(c1, s)
104
+ end
105
+ end
85
106
  end
86
107
  end
108
+ end
87
109
 
88
110
  def i18n_init(lang, script)
89
111
  super
@@ -96,13 +118,24 @@ module IsoDoc
96
118
  def cleanup(docxml)
97
119
  super
98
120
  term_cleanup(docxml)
121
+ refs_cleanup(docxml)
122
+ title_cleanup(docxml)
123
+ end
124
+
125
+ def title_cleanup(docxml)
126
+ docxml.xpath("//h1[@class = 'RecommendationAnnex']").each do |h|
127
+ h.name = "p"
128
+ h["class"] = "h1Annex"
129
+ end
130
+ docxml
99
131
  end
100
132
 
101
133
  def term_cleanup(docxml)
102
134
  docxml.xpath("//p[@class = 'Terms']").each do |d|
103
135
  h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
104
- h2.add_child("&nbsp;")
105
- h2.add_child(d.remove)
136
+ d.children.first.previous = "<b>#{h2.children.to_xml}</b>&nbsp;"
137
+ d["id"] = h2["id"]
138
+ h2.remove
106
139
  end
107
140
  docxml.xpath("//p[@class = 'TermNum']").each do |d|
108
141
  d1 = d.next_element and d1.name == "p" or next
@@ -112,36 +145,53 @@ module IsoDoc
112
145
  docxml
113
146
  end
114
147
 
148
+ def refs_cleanup(docxml)
149
+ docxml.xpath("//tx[following-sibling::tx]").each do |tx|
150
+ tx << tx.next_element.remove.children
151
+ end
152
+ docxml.xpath("//tx").each do |tx|
153
+ tx.name = "td"
154
+ tx["colspan"] = "2"
155
+ tx.wrap("<tr></tr>")
156
+ end
157
+ docxml
158
+ end
159
+
115
160
  def info(isoxml, out)
116
- @meta.keywords isoxml, out
117
161
  @meta.ip_notice_received isoxml, out
118
162
  super
119
163
  end
120
164
 
121
165
  def get_eref_linkend(node)
122
- link = "[#{anchor_linkend(node, docid_l10n(node["target"] || node["citeas"]))}]"
123
- link += eref_localities(node.xpath(ns("./locality | ./localityStack")), link)
124
- contents = node.children.select { |c| !%w{locality localityStack}.include? c.name }
125
- return link if contents.nil? || contents.empty?
166
+ l = anchor_linkend(node, docid_l10n(node["target"] || node["citeas"]))
167
+ l && !/^\[.*\]$/.match(l) and l = "[#{l}]"
168
+ l += eref_localities(node.xpath(ns("./locality | ./localityStack")), l)
169
+ contents = node.children.select do |c|
170
+ !%w{locality localityStack}.include? c.name
171
+ end
172
+ return l if contents.nil? || contents.empty?
126
173
  Nokogiri::XML::NodeSet.new(node.document, contents).to_xml
127
174
  end
128
175
 
129
176
  def eref_parse(node, out)
130
177
  linkend = get_eref_linkend(node)
178
+ href = eref_target(node)
131
179
  if node["type"] == "footnote"
132
180
  out.sup do |s|
133
- s.a(**{ "href": "#" + node["bibitemid"] }) { |l| l << linkend }
181
+ s.a(**{ "href": href }) { |l| l << linkend }
134
182
  end
135
183
  else
136
- out.a(**{ "href": "#" + node["bibitemid"] }) { |l| l << linkend }
184
+ out.a(**{ "href": href }) { |l| l << linkend }
137
185
  end
138
186
  end
139
187
 
140
188
  def middle_title(out)
141
189
  out.p(**{ class: "zzSTDTitle1" }) do |p|
142
- id = @meta.get[:docnumber] and p << "Recommendation #{id}"
190
+ id = @meta.get[:docnumber] and p << "#{@meta.get[:doctype]} #{id}"
143
191
  end
144
192
  out.p(**{ class: "zzSTDTitle2" }) { |p| p << @meta.get[:doctitle] }
193
+ s = @meta.get[:docsubtitle] and
194
+ out.p(**{ class: "zzSTDTitle3" }) { |p| p << s }
145
195
  end
146
196
 
147
197
  def add_parse(node, out)
@@ -62,14 +62,18 @@
62
62
  @include coverpageStageBlock();
63
63
  }
64
64
 
65
- span.doc-title {
65
+ span.doc-title, span.doc-annextitle {
66
66
  font-size: 26px;
67
67
  font-weight: 800;
68
68
  margin-top: 20px;
69
- border-top: 2px solid #DA1D52;
70
69
  margin-right: 42px;
71
70
  }
72
71
 
72
+ span.doc-title {
73
+ border-top: 2px solid #DA1D52;
74
+ }
75
+
76
+
73
77
  .doc-footer {
74
78
  margin-top: 100px;
75
79
 
@@ -107,7 +111,7 @@ span.doc-title {
107
111
  padding: 0 3em 0 6em;
108
112
  }
109
113
 
110
- .zzSTDTitle1, .zzSTDTitle2, .MsoCommentText {
114
+ .zzSTDTitle1, .zzSTDTitle2, .zzSTDTitle3, .MsoCommentText {
111
115
  display: none;
112
116
  }
113
117
 
@@ -116,7 +116,7 @@ style='mso-element:field-separator'>
116
116
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
117
117
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
118
118
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
119
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
119
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
120
120
  </div>
121
121
 
122
122
  <div style='mso-element:footer' id=ef2l>
@@ -129,12 +129,12 @@ style='mso-element:field-separator'>
129
129
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
130
130
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
131
131
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
132
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
132
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
133
133
  </div>
134
134
 
135
135
  <div style='mso-element:footer' id=f2>
136
136
  <p class=FooterQP style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
137
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
137
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
138
138
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
139
139
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
140
140
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -145,7 +145,7 @@ lang=EN-GB style='font-weight:normal'>

145
145
 
146
146
  <div style='mso-element:footer' id=f2l>
147
147
  <p class=FooterQPLandscape style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
148
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
148
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
149
149
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
150
150
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
151
151
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -164,7 +164,7 @@ style='mso-element:field-separator'>
164
164
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
165
165
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
166
166
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
167
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
167
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
168
168
  </div>
169
169
 
170
170
  <div style='mso-element:footer' id=ef3l>
@@ -177,12 +177,12 @@ style='mso-element:field-separator'>
177
177
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
178
178
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
179
179
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
180
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
180
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
181
181
  </div>
182
182
 
183
183
  <div style='mso-element:footer' id=f3>
184
184
  <p class=FooterQP style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
185
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
185
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
186
186
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
187
187
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
188
188
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -193,7 +193,7 @@ lang=EN-GB style='font-weight:normal'>

193
193
 
194
194
  <div style='mso-element:footer' id=f3l>
195
195
  <p class=FooterQPLandscape style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
196
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
196
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
197
197
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
198
198
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
199
199
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -26,13 +26,10 @@
26
26
 
27
27
  <div class="doc-info-left">
28
28
  <div class="doc-identifier">
29
- {{ docnumber }}
29
+ {{ docnumeric }}
30
30
  {% if edition %} <div> Revision {{ edition }}</div> {% endif %}
31
31
  <div> {{ draftinfo }}</div>
32
32
  </div>
33
- {% if annexid %}
34
- <div class="doc-identifier">{{annexid}}</div>
35
- {% endif %}
36
33
  <div class="publication-month">
37
34
  ({{ pubdate_monthyear }})
38
35
  </div>
@@ -53,9 +50,9 @@
53
50
  <span class="doc-title">{{ doctitle }}</span>
54
51
  {% if docsubtitle %}
55
52
  <br/><span class="doc-subtitle">{{ docsubtitle }}</span>
56
- {% if annextitle %}
57
- <br/><span class="doctitle">{{ annextitle }}</span>
58
53
  {% endif %}
54
+ {% if annextitle %}
55
+ <br/><span class="doc-annextitle">{{ annexid }}{% if annexid and annextitle %}: {% endif %}{{ annextitle }}</span>
59
56
  {% endif %}
60
57
  </div>
61
58
 
@@ -73,7 +70,7 @@
73
70
  <div>
74
71
  <span class="doc-type">{% if stage == "Draft" %}Draft {% endif %}{{ doctype }}</span>
75
72
  <span class="ITU-sector">ITU-{{ bureau }}</span>
76
- <span class="doc-identifier">{{ docnumber }}</span>
73
+ <span class="doc-identifier">{{ docnumeric }}</span>
77
74
  </div>
78
75
 
79
76
  </div>
@@ -98,9 +95,11 @@
98
95
  </div>
99
96
  -->
100
97
 
98
+ {% if unpublished %}
101
99
  <div class="coverpage-warning">
102
100
  <div id="draft-warning-destination"/>
103
101
  </div>
102
+ {% endif %}
104
103
 
105
104
  <div class="info-section">
106
105
  <div id="boilerplate-copyright-destination"/>
@@ -185,7 +185,7 @@ pre {
185
185
  }
186
186
 
187
187
  #ITU-logo {
188
- width: 200px;
188
+ width: 150px;
189
189
  height: auto;
190
190
  margin-left: auto;
191
191
  }
@@ -209,20 +209,20 @@ svg {
209
209
 
210
210
  /* Headings */
211
211
 
212
- h1, h2, h3, h4, h5, h6 {
212
+ h1, h2, h3, h4, h5, h6, .h1Annex {
213
213
  font-weight: 400;
214
214
  margin-top: 1.6em;
215
215
  margin-bottom: 0.3em;
216
216
  }
217
217
 
218
- h1, h2, h3, h4 {
218
+ h1, h2, h3, h4, .h1Annex {
219
219
  @media print {
220
220
  page-break-after: avoid;
221
221
  margin-top: 1.2em;
222
222
  }
223
223
  }
224
224
 
225
- h1 {
225
+ h1, .h1Annex {
226
226
  font-size: 1.4em;
227
227
  text-transform: uppercase;
228
228
  margin-top: 2em;
@@ -419,7 +419,11 @@ p.Biblio, p.NormRef {
419
419
 
420
420
  /* Tables */
421
421
 
422
- table {
422
+ table.biblio td {
423
+ padding-right: 0.5em;
424
+ }
425
+
426
+ table:not(.biblio) {
423
427
  @include table($border: none);
424
428
 
425
429
  &, th, td {
@@ -620,6 +620,29 @@ p.zzSTDTitle2, li.zzSTDTitle2, div.zzSTDTitle2
620
620
  font-weight:bold;
621
621
  text-align:center;
622
622
  mso-bidi-font-weight:normal;}
623
+ p.zzSTDTitle3, li.zzSTDTitle3, div.zzSTDTitle3
624
+ {mso-style-name:zzSTDTitle;
625
+ mso-style-noshow:yes;
626
+ mso-style-unhide:no;
627
+ mso-style-next:Normal;
628
+ margin-top:0pt;
629
+ margin-right:0cm;
630
+ margin-bottom:18.0pt;
631
+ margin-left:0cm;
632
+ line-height:17.5pt;
633
+ mso-line-height-rule:exactly;
634
+ mso-pagination:widow-orphan;
635
+ mso-hyphenate:none;
636
+ tab-stops:20.15pt;
637
+ font-size:14.0pt;
638
+ mso-bidi-font-size:11.0pt;
639
+ font-family:$headerfont;
640
+ mso-fareast-font-family:$headerfont;
641
+ mso-bidi-font-family:$headerfont;
642
+ mso-ansi-language:EN-GB;
643
+ font-style:italic;
644
+ text-align:center;
645
+ mso-bidi-font-weight:normal;}
623
646
  p.Quote, li.Quote, div.Quote
624
647
  {mso-style-priority:99;
625
648
  margin-top:0cm;
@@ -986,7 +1009,7 @@ table.MsoTableGrid
986
1009
  font-size:10.0pt;
987
1010
  font-family:$bodyfont;}
988
1011
  div.formula, div.formula p
989
- {tab-stops:39.7pt center 241.0pt right 17.0cm;}
1012
+ {tab-stops:center 241.0pt right 17.0cm;}
990
1013
  body
991
1014
  {tab-interval:36.0pt;}
992
1015
  .coverpage_docnumber
@@ -1069,3 +1092,7 @@ table.dl
1069
1092
  margin-bottom:11.0pt;
1070
1093
  margin-left:0cm;}
1071
1094
 
1095
+ table.biblio td {
1096
+ margin-bottom: 6pt;
1097
+ }
1098
+
@@ -1,24 +1,8 @@
1
1
  <script>
2
- //TOC generation
3
- $('#toc').toc({
4
- 'selectors': toclevel(), //elements to use as headings
5
- 'container': 'main', //element to find all selectors in
6
- 'smoothScrolling': true, //enable or disable smooth scrolling on click
7
- 'prefix': 'toc', //prefix for anchor tags and class names
8
- 'onHighlight': function(el) {}, //called when a new section is highlighted
9
- 'highlightOnScroll': true, //add class to heading that is currently in focus
10
- 'highlightOffset': 100, //offset to trigger the next headline
11
- 'anchorName': function(i, heading, prefix) { //custom function for anchor name
12
- return prefix+i;
13
- },
14
- 'headerText': function(i, heading, $heading) { //custom function building the header-item text
15
- return $heading.text();
16
- },
17
- 'itemClass': function(i, heading, $heading, prefix) { // custom function for item class
18
- return $heading[0].tagName.toLowerCase();
19
- }
20
- });
21
-
2
+ $("#toc").on('click', 'li', function(e) {
3
+ $(this).parent().find('li.toc-active').removeClass('toc-active');
4
+ $(this).addClass('toc-active');
5
+ });
22
6
  </script>
23
7
 
24
8
  <script>
@@ -58,13 +42,16 @@ $('#toggle').on('click', function(){
58
42
  </script>
59
43
 
60
44
  <script>
61
- /**
62
- * AnchorJS - v4.1.0 - 2017-09-20
63
- * https://github.com/bryanbraun/anchorjs
64
- * Copyright (c) 2017 Bryan Braun; Licensed MIT
65
- */
66
- !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function e(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function t(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}function i(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}this.options=A||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var n,o,s,a,r,c,h,l,u,d,f,p=[];if(e(this.options),"touch"===(f=this.options.visible)&&(f=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(n=t(A)).length)return this;for(i(),o=document.querySelectorAll("[id]"),s=[].map.call(o,function(A){return A.id}),r=0;r<n.length;r++)if(this.hasAnchorJSLink(n[r]))p.push(r);else{if(n[r].hasAttribute("id"))a=n[r].getAttribute("id");else if(n[r].hasAttribute("data-anchor-id"))a=n[r].getAttribute("data-anchor-id");else{u=l=this.urlify(n[r].textContent),h=0;do{void 0!==c&&(u=l+"-"+h),c=s.indexOf(u),h+=1}while(-1!==c);c=void 0,s.push(u),n[r].setAttribute("id",u),a=u}a.replace(/-/g," "),(d=document.createElement("a")).className="anchorjs-link "+this.options.class,d.href="#"+a,d.setAttribute("aria-label",this.options.ariaLabel),d.setAttribute("data-anchorjs-icon",this.options.icon),"always"===f&&(d.style.opacity="1"),""===this.options.icon&&(d.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(d.style.lineHeight="inherit")),"left"===this.options.placement?(d.style.position="absolute",d.style.marginLeft="-1em",d.style.paddingRight="0.5em",n[r].insertBefore(d,n[r].firstChild)):(d.style.paddingLeft="0.375em",n[r].appendChild(d))}for(r=0;r<p.length;r++)n.splice(p[r]-r,1);return this.elements=this.elements.concat(n),this},this.remove=function(A){for(var e,i,n=t(A),o=0;o<n.length;o++)(i=n[o].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(n[o]))&&this.elements.splice(e,1),n[o].removeChild(i));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){var t=/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\]/g;return this.options.truncate||e(this.options),A.trim().replace(/\'/gi,"").replace(t,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&(" "+A.firstChild.className+" ").indexOf(" anchorjs-link ")>-1,t=A.lastChild&&(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return e||t||!1}}}); </script>
67
-
45
+ // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
46
+ //
47
+ // AnchorJS - v4.2.2 - 2020-04-20
48
+ // https://www.bryanbraun.com/anchorjs/
49
+ // Copyright (c) 2020 Bryan Braun; Licensed MIT
50
+ //
51
+ // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
52
+ !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),0===(e=p(A=A||"h2, h3, h4, h5, h6")).length)return this;for(!function(){if(null!==document.head.querySelector("style.anchorjs"))return;var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"],style'))?document.head.appendChild(e):document.head.insertBefore(e,A);e.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",e.sheet.cssRules.length),e.sheet.insertRule(":hover>.anchorjs-link,.anchorjs-link:focus{opacity:1}",e.sheet.cssRules.length),e.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",e.sheet.cssRules.length),e.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',e.sheet.cssRules.length)}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}});
53
+ // @license-end
54
+ </script>
68
55
  <script>
69
56
  /*
70
57
  $(document).ready(function() {