jstreebuilder 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/jstreebuilder.rb +87 -81
- data.tar.gz.sig +0 -0
- metadata +10 -9
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa844d152f822a43de4979ae351e7fa30a9adbd35ae6f18cf07a6824f5da74a3
|
4
|
+
data.tar.gz: 91928df4b49e8f62a26ed9529c602300324df0059c2e93da9c54e6d6e77f6c12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ae8e3756a51d79dcea3e222fc43a2fafa2f233a497096bb2e0d733082d8339ff63b2fca0252c44871895ced3b5eae4aae0abc8cc0d053b6211684fa0d1a24ca
|
7
|
+
data.tar.gz: 1e1ef267edb8bf7eaa6197b7bbc9b5bfb2af8059c43ae214a3073fab07103dfb16edb0ab22277f201306e164e544dbe8af64cc02b2c1b99597cc100751afbb34
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/jstreebuilder.rb
CHANGED
@@ -28,17 +28,17 @@ XSLT = %q[
|
|
28
28
|
|
29
29
|
<xsl:element name='li'>
|
30
30
|
|
31
|
-
<xsl:element name='span'>
|
31
|
+
<xsl:element name='span'>
|
32
32
|
<xsl:attribute name="class">caret</xsl:attribute>
|
33
33
|
<xsl:choose>
|
34
34
|
<xsl:when test='summary/url != ""'>
|
35
35
|
<xsl:element name='a'>
|
36
36
|
<xsl:attribute name='href'><xsl:value-of select='summary/url'/></xsl:attribute>
|
37
|
-
<xsl:value-of select='summary/title'/>
|
37
|
+
<xsl:value-of select='summary/title'/>
|
38
38
|
</xsl:element>
|
39
39
|
</xsl:when>
|
40
40
|
<xsl:otherwise>
|
41
|
-
<xsl:value-of select='summary/title'/>
|
41
|
+
<xsl:value-of select='summary/title'/>
|
42
42
|
</xsl:otherwise>
|
43
43
|
</xsl:choose>
|
44
44
|
</xsl:element>
|
@@ -49,16 +49,16 @@ XSLT = %q[
|
|
49
49
|
|
50
50
|
</xsl:when>
|
51
51
|
<xsl:otherwise>
|
52
|
-
<xsl:element name='li'>
|
52
|
+
<xsl:element name='li'>
|
53
53
|
<xsl:choose>
|
54
54
|
<xsl:when test='summary/url != ""'>
|
55
55
|
<xsl:element name='a'>
|
56
56
|
<xsl:attribute name='href'><xsl:value-of select='summary/url'/></xsl:attribute>
|
57
|
-
<xsl:value-of select='summary/title'/>
|
57
|
+
<xsl:value-of select='summary/title'/>
|
58
58
|
</xsl:element>
|
59
59
|
</xsl:when>
|
60
60
|
<xsl:otherwise>
|
61
|
-
<xsl:value-of select='summary/title'/>
|
61
|
+
<xsl:value-of select='summary/title'/>
|
62
62
|
</xsl:otherwise>
|
63
63
|
</xsl:choose>
|
64
64
|
</xsl:element>
|
@@ -94,11 +94,11 @@ PLAIN = %q[
|
|
94
94
|
<xsl:when test='summary/url != ""'>
|
95
95
|
<xsl:element name='a'>
|
96
96
|
<xsl:attribute name='href'><xsl:value-of select='summary/url'/></xsl:attribute>
|
97
|
-
<xsl:value-of select='summary/title'/>
|
97
|
+
<xsl:value-of select='summary/title'/>
|
98
98
|
</xsl:element>
|
99
99
|
</xsl:when>
|
100
100
|
<xsl:otherwise>
|
101
|
-
<xsl:value-of select='summary/title'/>
|
101
|
+
<xsl:value-of select='summary/title'/>
|
102
102
|
</xsl:otherwise>
|
103
103
|
</xsl:choose>
|
104
104
|
</xsl:element>
|
@@ -109,16 +109,16 @@ PLAIN = %q[
|
|
109
109
|
|
110
110
|
</xsl:when>
|
111
111
|
<xsl:otherwise>
|
112
|
-
<xsl:element name='li'>
|
112
|
+
<xsl:element name='li'>
|
113
113
|
<xsl:choose>
|
114
114
|
<xsl:when test='summary/url != ""'>
|
115
115
|
<xsl:element name='a'>
|
116
116
|
<xsl:attribute name='href'><xsl:value-of select='summary/url'/></xsl:attribute>
|
117
|
-
<xsl:value-of select='summary/title'/>
|
117
|
+
<xsl:value-of select='summary/title'/>
|
118
118
|
</xsl:element>
|
119
119
|
</xsl:when>
|
120
120
|
<xsl:otherwise>
|
121
|
-
<xsl:value-of select='summary/title'/>
|
121
|
+
<xsl:value-of select='summary/title'/>
|
122
122
|
</xsl:otherwise>
|
123
123
|
</xsl:choose>
|
124
124
|
</xsl:element>
|
@@ -148,7 +148,7 @@ ul, #myUL {
|
|
148
148
|
|
149
149
|
/* Style the caret/arrow */
|
150
150
|
.caret {
|
151
|
-
cursor: pointer;
|
151
|
+
cursor: pointer;
|
152
152
|
user-select: none; /* Prevent text selection */
|
153
153
|
}
|
154
154
|
|
@@ -162,7 +162,7 @@ ul, #myUL {
|
|
162
162
|
|
163
163
|
/* Rotate the caret/arrow icon when clicked on (using JavaScript) */
|
164
164
|
.caret-down::before {
|
165
|
-
transform: rotate(90deg);
|
165
|
+
transform: rotate(90deg);
|
166
166
|
}
|
167
167
|
|
168
168
|
/* Hide the nested list */
|
@@ -177,7 +177,7 @@ ul, #myUL {
|
|
177
177
|
]
|
178
178
|
|
179
179
|
SIDEBAR_CSS = TREE_CSS + %q[
|
180
|
-
|
180
|
+
|
181
181
|
body {
|
182
182
|
font-family: "Lato", sans-serif;
|
183
183
|
}
|
@@ -221,12 +221,12 @@ body {
|
|
221
221
|
|
222
222
|
PLAIN_CSS = "
|
223
223
|
ul {
|
224
|
-
list-style-type: none;
|
225
|
-
background-color: transparent;
|
224
|
+
list-style-type: none;
|
225
|
+
background-color: transparent;
|
226
226
|
margin: 0.1em 0.1em; padding: 0.3em 1.3em
|
227
227
|
}
|
228
228
|
ul li {
|
229
|
-
background-color: transparent;
|
229
|
+
background-color: transparent;
|
230
230
|
margin: 0.1em 0.1em; padding: 0.3em 0.3em
|
231
231
|
}
|
232
232
|
"
|
@@ -259,42 +259,42 @@ PLAIN_JS = ''
|
|
259
259
|
puts ('html: ' + html.inspect) if @debug
|
260
260
|
a = scan_headings(html)
|
261
261
|
puts ('a: ' + a.inspect) if @debug
|
262
|
-
|
262
|
+
|
263
263
|
s2 = make_tree(a)
|
264
264
|
puts ('s2: ' + s2.inspect) if @debug
|
265
265
|
tree = LineTree.new(s2).to_tree
|
266
|
-
|
266
|
+
|
267
267
|
puts ('tree: ' + tree.inspect).debug if @debug
|
268
|
-
|
268
|
+
|
269
269
|
doc = Rexle.new(tree)
|
270
270
|
doc.root.each_recursive do |node|
|
271
|
-
|
272
|
-
h = node.attributes
|
271
|
+
|
272
|
+
h = node.attributes
|
273
273
|
puts ('h: ' + h.inspect).debug if @debug
|
274
274
|
h[:url] = '#' + h[:title].strip.downcase.gsub(' ', '-')
|
275
|
-
|
275
|
+
|
276
276
|
end
|
277
277
|
puts ('doc.xml: ' + doc.xml.inspect) if @debug
|
278
|
-
|
278
|
+
|
279
279
|
@to_tree = doc.xml pretty: true
|
280
280
|
|
281
281
|
end
|
282
|
-
|
282
|
+
|
283
283
|
def make_tree(a, indent=0, hn=@hn)
|
284
|
-
|
284
|
+
|
285
285
|
if @debug then
|
286
|
-
puts 'inside make_tree'.debug
|
286
|
+
puts 'inside make_tree'.debug
|
287
287
|
puts ('a: ' + a.inspect).debug
|
288
288
|
end
|
289
|
-
|
289
|
+
|
290
290
|
a.map.with_index do |x, i|
|
291
|
-
|
291
|
+
|
292
292
|
puts ('x: ' + x.inspect).debug if @debug
|
293
|
-
|
293
|
+
|
294
294
|
if x.is_a? Array then
|
295
295
|
|
296
296
|
puts 'before make_tree()'.info if @debug
|
297
|
-
|
297
|
+
|
298
298
|
make_tree(x, indent+1, hn)
|
299
299
|
|
300
300
|
else
|
@@ -309,11 +309,11 @@ PLAIN_JS = ''
|
|
309
309
|
|
310
310
|
end.compact.join("\n")
|
311
311
|
|
312
|
-
end
|
312
|
+
end
|
313
313
|
|
314
314
|
def scan_headings(s, n=@hn)
|
315
|
-
|
316
|
-
s.split(/(?=<h#{n})/).map do |x|
|
315
|
+
|
316
|
+
s.split(/(?=<h#{n})/).map do |x|
|
317
317
|
x.include?('<h' + (n+1).to_s) ? scan_headings(x, n+1) : x
|
318
318
|
end
|
319
319
|
|
@@ -325,42 +325,42 @@ PLAIN_JS = ''
|
|
325
325
|
attr_reader :html, :css, :js
|
326
326
|
|
327
327
|
def initialize(unknown=nil, options={})
|
328
|
-
|
328
|
+
|
329
329
|
if unknown.is_a? String or unknown.is_a? Symbol then
|
330
330
|
type = unknown.to_sym
|
331
331
|
elsif unknown.is_a? Hash
|
332
332
|
options = {type: :tree}.merge(unknown)
|
333
333
|
type = options[:type]
|
334
334
|
end
|
335
|
-
|
335
|
+
|
336
336
|
@debug = options[:debug]
|
337
337
|
|
338
338
|
@types = %i(tree sidebar plain)
|
339
|
-
|
339
|
+
|
340
340
|
build(type, options) if type
|
341
341
|
|
342
342
|
end
|
343
|
-
|
343
|
+
|
344
344
|
def to_css()
|
345
345
|
@css
|
346
346
|
end
|
347
|
-
|
347
|
+
|
348
348
|
def to_html()
|
349
349
|
@html
|
350
350
|
end
|
351
|
-
|
351
|
+
|
352
352
|
def to_js()
|
353
353
|
@js
|
354
354
|
end
|
355
|
-
|
355
|
+
|
356
356
|
def to_ul()
|
357
357
|
@ul
|
358
358
|
end
|
359
|
-
|
359
|
+
|
360
360
|
def to_webpage()
|
361
361
|
|
362
362
|
a = RexleBuilder.build do |xml|
|
363
|
-
xml.html do
|
363
|
+
xml.html do
|
364
364
|
xml.head do
|
365
365
|
xml.meta name: "viewport", content: \
|
366
366
|
"width=device-width, initial-scale=1"
|
@@ -370,105 +370,111 @@ PLAIN_JS = ''
|
|
370
370
|
end
|
371
371
|
end
|
372
372
|
|
373
|
-
doc = Rexle.new(a)
|
374
|
-
|
373
|
+
doc = Rexle.new(a)
|
374
|
+
|
375
375
|
doc.root.element('body').add \
|
376
|
-
Rexle::Element.new('script').add_text "\n" +
|
376
|
+
Rexle::Element.new('script').add_text "\n" +
|
377
377
|
@js.gsub(/^ +\/\/[^\n]+\n/,'')
|
378
|
-
|
378
|
+
|
379
379
|
"<!DOCTYPE html>\n" + doc.xml(pretty: true, declaration: false)\
|
380
380
|
.gsub(/<\/div>/,'\0' + "\n").gsub(/\n *<!--[^>]+>/,'')
|
381
|
-
|
381
|
+
|
382
382
|
end
|
383
|
-
|
383
|
+
|
384
384
|
def to_xml()
|
385
385
|
@xml
|
386
386
|
end
|
387
|
-
|
388
|
-
|
387
|
+
|
388
|
+
|
389
389
|
private
|
390
|
-
|
390
|
+
|
391
391
|
def build(type, options)
|
392
|
-
|
392
|
+
|
393
393
|
puts 'inside build'.info if @debug
|
394
|
-
puts "type: %s\noptions: %s".debug % [type, options] if @debug
|
395
|
-
|
394
|
+
puts "type: %s\noptions: %s".debug % [type, options] if @debug
|
395
|
+
|
396
396
|
return unless @types.include? type.to_sym
|
397
|
-
|
397
|
+
|
398
398
|
s = method(type.to_sym).call(options)
|
399
|
-
|
399
|
+
|
400
400
|
@html = s.gsub(/<\/div>/,'\0' + "\n").strip.lines[1..-2]\
|
401
401
|
.map {|x| x.sub(/^ /,'') }.join
|
402
|
-
|
403
|
-
@css = type.to_s.upcase + '_CSS'
|
404
|
-
@js = type.to_s.upcase + '_JS'
|
405
|
-
|
402
|
+
|
403
|
+
@css = Object.const_get self.class.to_s + '::' + type.to_s.upcase + '_CSS'
|
404
|
+
@js = Object.const_get self.class.to_s + '::' + type.to_s.upcase + '_JS'
|
405
|
+
|
406
406
|
end
|
407
|
-
|
407
|
+
|
408
408
|
def build_px(tree)
|
409
|
-
|
409
|
+
|
410
410
|
schema = 'entries/link[title, url]'
|
411
411
|
xslt_schema = 'tree/item[@title:title, @url:url]'
|
412
412
|
|
413
413
|
# transform the tree xml into a polyrex document
|
414
414
|
pxsl = PolyrexXSLT.new(schema: schema, xslt_schema: xslt_schema).to_xslt
|
415
415
|
puts 'pxsl: ' + pxsl if @debug
|
416
|
-
Rexslt.new(pxsl, tree).to_s
|
417
|
-
|
416
|
+
Rexslt.new(pxsl, tree).to_s
|
417
|
+
|
418
418
|
end
|
419
|
-
|
419
|
+
|
420
420
|
|
421
421
|
def tree(opt={}, xslt=XSLT)
|
422
422
|
|
423
|
+
puts 'inside tree' if @debug
|
424
|
+
|
423
425
|
raw_src = opt[:src]
|
424
|
-
|
426
|
+
|
425
427
|
px = if raw_src.is_a? String then
|
426
|
-
|
428
|
+
|
427
429
|
src, _ = RXFHelper.read raw_src
|
428
|
-
|
430
|
+
|
429
431
|
header = "<?polyrex schema='entries[title]/link[title,url]' \
|
430
432
|
delimiter=' # '?>\n\n"
|
431
|
-
|
433
|
+
|
432
434
|
s = if src =~ /<tree>/ then
|
433
|
-
|
435
|
+
|
434
436
|
build_px(src)
|
435
|
-
|
436
|
-
elsif src =~ /<\?polyrex-links\?>/
|
437
|
+
|
438
|
+
elsif src =~ /<\?polyrex-links\?>/
|
437
439
|
header + src.sub(/<\?polyrex-links\?>/,'').lstrip
|
438
|
-
elsif src =~ /<\?polyrex /
|
439
|
-
src
|
440
|
+
elsif src =~ /<\?polyrex /
|
441
|
+
src
|
440
442
|
elsif src =~ /^#+/
|
441
443
|
build_px(TreeBuilder.new(src, hn: opt[:hn],debug: @debug).to_tree)
|
442
444
|
else
|
443
445
|
header + src.lstrip
|
444
446
|
end
|
445
|
-
|
447
|
+
|
446
448
|
puts ('s: ' + s.inspect).debug if @debug
|
447
449
|
Polyrex.new(s)
|
448
|
-
|
450
|
+
|
449
451
|
elsif raw_src.is_a?(Polyrex) # detects PolyrexLinks as Polyrex too
|
450
452
|
raw_src
|
451
453
|
end
|
452
|
-
|
454
|
+
|
453
455
|
# transform the polyrex xml into a nested HTML list
|
454
456
|
#@ul = Rexslt.new(px.to_xml, XSLT).to_xml
|
455
457
|
puts ('px: ' + px.inspect).debug if @debug
|
456
458
|
puts ('px.to_xml: ' + px.to_xml.inspect).debug if @debug
|
459
|
+
|
457
460
|
doc = Nokogiri::XML(px.to_xml)
|
458
461
|
xslt = Nokogiri::XSLT(xslt)
|
459
462
|
|
460
463
|
@ul = xslt.transform(doc).to_s.lines[1..-1].join
|
464
|
+
puts '@ul:' + @ul.inspect if @debug
|
465
|
+
|
466
|
+
return @ul
|
461
467
|
|
462
468
|
end
|
463
|
-
|
469
|
+
|
464
470
|
def sidebar(opt={})
|
465
471
|
doc = Rexle.new(tree(opt))
|
466
472
|
doc.root.attributes[:class] = 'sidenav'
|
467
473
|
@ul = doc.xml(declaration: false)
|
468
474
|
end
|
469
|
-
|
475
|
+
|
470
476
|
def plain(opt={})
|
471
477
|
tree opt, PLAIN
|
472
|
-
end
|
478
|
+
end
|
473
479
|
|
474
480
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jstreebuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
8XaALSKxr3idyvVbBK920Fok7uGfchqJrIU5aP7qDogCmzHHHbiKzd+2arCbxISY
|
36
36
|
+eOXFHOtwvjBqRlX2zAMEukI
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2021-
|
38
|
+
date: 2021-12-28 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: nokogiri
|
@@ -43,20 +43,20 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1.
|
46
|
+
version: '1.12'
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 1.
|
49
|
+
version: 1.12.5
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '1.
|
56
|
+
version: '1.12'
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 1.
|
59
|
+
version: 1.12.5
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: polyrex
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '1.3'
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.3.
|
69
|
+
version: 1.3.4
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '1.3'
|
77
77
|
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 1.3.
|
79
|
+
version: 1.3.4
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: polyrex-xslt
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
146
|
-
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.7.10
|
147
148
|
signing_key:
|
148
149
|
specification_version: 4
|
149
150
|
summary: Generates an HTML tree from XML or Markdown.
|
metadata.gz.sig
CHANGED
Binary file
|