jsmenubuilder 0.2.12 → 0.3.4

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: 1fdc2c1787fb134b36c6d883e8809b822cbff1642542d103c8e6b965464fd227
4
- data.tar.gz: 33dd4cec053d48d5a47f2239d1d97f9428853c18ca79012a41c798c5fa239beb
3
+ metadata.gz: 316d2335263826ac8c815f29eb8c992cc60addc471a125a2ab5d56d38178e8f0
4
+ data.tar.gz: cd745cc90c562fce91026cfc18d0ab93ff7ea1d2f137f9b915f7c3a7285e6cec
5
5
  SHA512:
6
- metadata.gz: 89fc1f800e9781ed67d488b65d78b1de8fac89c3bf9181200725e35295fcdceffe71ec1abb99800ad4ba64a708d1f4dec5c1536442b4e8d9cc0dd01c8ccbe784
7
- data.tar.gz: 3c058822cbe2013afc605610b3c22f4f65745c8418e077de4523820cc0dd87f86068e04c9aa77b857abcecdfa4c53fe2112d7e0aa93f243cfd83785759b9731c
6
+ metadata.gz: 17f2d295f6e593f29c6f318e0a212ec49390f060aed6fda3f653437fc9a7c25a4e31745d449d8363e88829ad8bdb2fe282d04c3957005a5b4bbb7dad9791de53
7
+ data.tar.gz: 8ed6769c73d838c5bcf24764efd0fa36eacdf2008f8d2476986c4b04ddb75d0e1827d7dc87d47c7bc4b596e4449e1e6fe9d95f6b558f1effa32d0f4dcb0bb92e
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -6,6 +6,7 @@ require 'rexle'
6
6
  require 'rxfhelper'
7
7
  require 'rexle-builder'
8
8
 
9
+
9
10
  class JsMenuBuilder
10
11
  using ColouredText
11
12
 
@@ -189,7 +190,43 @@ STICKY_NAVBAR_CSS =<<EOF
189
190
  .sticky + .content {
190
191
  padding-top: 60px;
191
192
  }
193
+ /* see https://stackoverflow.com/questions/10732690/offsetting-an-html-anchor-to-adjust-for-fixed-header */
194
+ .anchor {
195
+ background-color: transparent;
196
+ padding-top: 70px;
197
+ margin-top: -70px;
198
+ display: block;
199
+ }
200
+
201
+ h2.anchor {
202
+ background-color: transparent;
203
+ padding-top: 60px;
204
+ margin-top: 0px;
205
+ }
206
+
207
+ EOF
208
+
209
+ VERTICAL_MENU_CSS =<<EOF
210
+ .vertical-menu {
211
+ width: 200px; /* Set a width if you like */
212
+ }
213
+
214
+ .vertical-menu a {
215
+ background-color: #eee; /* Grey background color */
216
+ color: black; /* Black text color */
217
+ display: block; /* Make the links appear below each other */
218
+ padding: 12px; /* Add some padding */
219
+ text-decoration: none; /* Remove underline from links */
220
+ }
192
221
 
222
+ .vertical-menu a:hover {
223
+ background-color: #ccc; /* Dark grey background on mouse-over */
224
+ }
225
+
226
+ .vertical-menu a.active {
227
+ background-color: #4CAF50; /* Add a green color to the "active/current" link */
228
+ color: white;
229
+ }
193
230
  EOF
194
231
 
195
232
  FULL_PAGE_TABS_JS =<<EOF
@@ -266,6 +303,10 @@ function myFunction() {
266
303
  }
267
304
  EOF
268
305
 
306
+ VERTICAL_MENU_JS = ''
307
+
308
+
309
+
269
310
  attr_reader :html, :css, :js
270
311
 
271
312
  def initialize(unknown=nil, options={})
@@ -290,7 +331,7 @@ EOF
290
331
  options = unknown
291
332
  end
292
333
 
293
- @types = %i(tabs full_page_tabs accordion sticky_navbar)
334
+ @types = %i(tabs full_page_tabs accordion sticky_navbar vertical_menu)
294
335
 
295
336
  build(type, options) if type
296
337
 
@@ -331,6 +372,10 @@ EOF
331
372
  @css
332
373
  end
333
374
 
375
+ def to_h()
376
+ @h
377
+ end
378
+
334
379
  def to_html()
335
380
  @html
336
381
  end
@@ -341,25 +386,29 @@ EOF
341
386
 
342
387
  def to_webpage()
343
388
 
389
+ r = block_given? ? yield(@css, @html, @js) : @css, @html, @js
390
+ css, html, js = *r.flatten
391
+ puts 'css: ' + css.inspect if @debug
392
+
344
393
  a = RexleBuilder.build do |xml|
345
394
  xml.html do
346
395
  xml.head do
347
396
  xml.meta name: "viewport", content: \
348
397
  "width=device-width, initial-scale=1"
349
- xml.style "\nbody {font-family: Arial;}\n\n" + @css
398
+ xml.style "\nbody {font-family: Arial;}\n\n" + css
350
399
  end
351
400
  xml.body
352
401
  end
353
402
  end
354
403
 
355
404
  doc = Rexle.new(a)
356
- e = Rexle.new("<html>%s</html>" % @html).root
405
+ e = Rexle.new("<html>%s</html>" % html).root
357
406
 
358
407
  e.children.each {|child| doc.root.element('body').add child }
359
408
 
360
409
  doc.root.element('body').add \
361
410
  Rexle::Element.new('script').add_text "\n" +
362
- @js.gsub(/^ +\/\/[^\n]+\n/,'')
411
+ js.gsub(/^ +\/\/[^\n]+\n/,'')
363
412
 
364
413
  "<!DOCTYPE html>\n" + doc.xml(pretty: true, declaration: false)\
365
414
  .gsub(/<\/div>/,'\0' + "\n").gsub(/\n *<!--[^>]+>/,'')
@@ -401,7 +450,7 @@ EOF
401
450
  puts 'inside build_h'.info if @debug
402
451
 
403
452
  h = doc.root.xpath('tag').inject({}) do |r,e|
404
- r.merge(e.attributes[:title] => e.children.join.strip)
453
+ r.merge(e.attributes[:title] => [e.children.join.strip, e.attributes[:class].join(' ')])
405
454
  end
406
455
 
407
456
  puts ('build_h: ' + h.inspect).debug if @debug
@@ -433,8 +482,9 @@ EOF
433
482
 
434
483
  a = RexleBuilder.build do |xml|
435
484
  xml.tags({mode: type}) do
436
- entries.each do |heading, content|
437
- xml.tag({title: heading}, content )
485
+ entries.each do |heading, value|
486
+ content, klass = value
487
+ xml.tag({title: heading, class: klass}, content )
438
488
  end
439
489
  end
440
490
  end
@@ -537,7 +587,7 @@ EOF
537
587
 
538
588
  panels = opt[:accordion]
539
589
 
540
- h = panels.group_by {|key, value| key.upcase[0]}
590
+ @h = h = panels.group_by {|key, value| key.upcase[0]}
541
591
 
542
592
  debug = @debug
543
593
 
@@ -546,25 +596,24 @@ EOF
546
596
  a = RexleBuilder.build do |xml|
547
597
 
548
598
  xml.html do
549
-
550
- xml.div(id: 'navbar') do
599
+
600
+ h.sort.each do |char, rows|
551
601
 
552
- h.each do |char, _|
553
- xml.a({href: '#' + char.downcase}, char)
554
- end
602
+ xml.h2({class: 'anchor', id: char.downcase}, char)
555
603
 
556
- end
557
-
558
- h.each do |char, rows|
559
-
560
- xml.h2({id: char.downcase}, char)
561
-
562
- rows.each do |heading, inner_html|
604
+ rows.each do |heading, value|
605
+
606
+ puts 'value: ' + value.inspect if @debug
607
+ inner_html, attrclass = value
608
+
563
609
  puts 'inner_html: ' + inner_html.inspect if debug
564
- xml.a({name: heading.downcase.gsub(/\W/,'-').gsub(/-{2,}/,'-')\
565
- .gsub(/^-|-$/,'')})
610
+ xml.a({class: 'anchor', name: heading.downcase.gsub(/\W/,'-')\
611
+ .gsub(/-{2,}/,'-').gsub(/^-|-$/,'')})
566
612
  xml.button({class:'accordion'}, heading.to_s)
567
- xml.div({class:'panel'}, inner_html)
613
+
614
+ s = 'panel'
615
+ s += ' ' + attrclass if attrclass
616
+ xml.div({class: s}, inner_html)
568
617
 
569
618
  end
570
619
  end
@@ -580,7 +629,8 @@ EOF
580
629
 
581
630
  def sticky_navbar(opt={})
582
631
 
583
-
632
+ puts 'inside sticky_navbar' if @debug
633
+
584
634
  navhtml = if opt[:html] then
585
635
 
586
636
  opt[:html]
@@ -593,8 +643,8 @@ EOF
593
643
 
594
644
  xml.div(id: 'navbar') do
595
645
 
596
- h.each do |char, _|
597
- xml.a({href: '#' + char.downcase}, char)
646
+ opt[:sticky_navbar].each do |title, href|
647
+ xml.a({href: href}, title)
598
648
  end
599
649
 
600
650
  end
@@ -609,6 +659,40 @@ EOF
609
659
  return doc
610
660
 
611
661
 
612
- end
662
+ end
663
+
664
+ def vertical_menu(opt={})
665
+
666
+ puts 'inside vertical_navbar' if @debug
667
+
668
+ navhtml = if opt[:html] then
669
+
670
+ opt[:html]
671
+
672
+ elsif opt[:items]
673
+
674
+ RexleBuilder.build do |xml|
675
+
676
+ xml.html do
677
+
678
+ xml.div(class: 'vertical-menu') do
679
+
680
+ opt[:items].each do |title, href|
681
+ xml.a({href: href}, title)
682
+ end
683
+
684
+ end
685
+
686
+ end
687
+ end
688
+ end
689
+
690
+ doc = Rexle.new(navhtml)
691
+ puts 'doc: ' + doc.xml.inspect if @debug
692
+
693
+ return doc
694
+
695
+
696
+ end
613
697
 
614
698
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsmenubuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,31 +11,31 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwNzEwMjIyNTAxWhcN
15
- MjAwNzA5MjIyNTAxWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCsiwlw
17
- p3DM4VpbJzWbQbeMzzYfJtfLQ2Mfo96Dj/DKL03wCenhOaiYlLUtsI2zudQtIS6U
18
- Rkf2wXnxHR8hSG7euQXXq0GEqoHPufrcr2Ih/vsm2CgBCpYFqJtjOK/T//+Cdy6e
19
- hXsQ82b0LOJ+IU/I7h5eIcjLa1JMAvtRt8aLFNK0PfIWeFQRs2t0cCYltmgKoyyk
20
- sfGEE4wBLEz5T21KzkRR6EDLWsF72qUju3LFL0mr+FJySv/0d9dSmzoZdFscIoSt
21
- nilxwI7RugyksjmFn4CpAl5/xH47h0towB57RDrDVwcEsPK0x6P+IqYsTqhba4Qi
22
- 5lqntIUzMUxZz/45BeRnar8mZMJp33naqmGjjcVyxhinRfraJTp5FC6z5j53FRYv
23
- 2hOFAgH/yipiZR6DvlJGEkyREso2jd+Lbf+11KE0+f7SOkz7542TuLw7txmmXd06
24
- rKwhE34SftBdURBklKJCr/O5ZGmrv+154tu2AYah1eio+r/kFBQH2VLjG30CAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUyu7i7rNy
26
- ZWIxghQsXnfmarZLGdwwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMTE3MjAxMDI3WhcN
15
+ MjIwMTE3MjAxMDI3WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC2UBXg
17
+ dSeJqcBwxeYBSbb4Juz+zVFhmlo/usgbmk+Y8bbO/hI+AlPyH5UnWhNDSWh23AXa
18
+ pP1do4VSJ7ne25KRB7Qdb843fndoLtowgb1vmpoovKAj0/aNMjXl1OqbWxp4tisU
19
+ TTrzOiihBReECZLnRhUtcnODAK1lCyrtQpLFQXPH+hAK02QZhIqPt8r+/4Ou1ZR2
20
+ KDpxOaaueNxiD2LmCbYnp4LAbQYbQCY3V+gnSkEnogIwaIQ/Z1OZp58b2nv3Fl8+
21
+ lQZdEBj0Q7MhFeeM41hzAgypwAty6WBCVKo8BnUGyF46+Z9dCa9l3maQ/yBARqGh
22
+ 8CjvQPrtOndZfZ8IuvA8MGOrB9keFHccpetHnPUrcZThr1yfATudu/bHNFNJ9Vgz
23
+ Sk6iQaFZ7zGCUnMc7BstDb9nx0B+mTdAjDHAhNIkHleqXH7iQ/+tNevbC7gqS7E5
24
+ nfsSWJJk7GonsT0P5Vxq2dypljI229fvbiB+vWUEoIgBj7+/2bQORt4UUT0CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUzHu1LvAL
26
+ lMU8BO9RyzXJexVkI/UwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAar65C+urbSpDbEQ1qKNNqltEuQ2qGTBc6lU9z9J4
29
- rm0JguXlcFgJ5EVOZrLR2AmeF93NdFrR4FJC/2o/Hq1CQNesuW2JMIjDF0I6Du/0
30
- jyp3wfilD0QU5mkd10Cf5oNwJj58Z5frCpAOvr3WQ/+pnYbSHXP2apVyi8IiiPeJ
31
- Nv948ScbwvKxuS/Kse91M9iT5Enf+VvD7IbHwyc37Yj32f4bAj/eM3n8BT434cuB
32
- J87qb8cHPcBKBJlzAjqmv7B8TTdUMiUwbf0Yzaa145GXYjIZU8DYAXZqJqvDOity
33
- HqT8Qpv1d/qgsBRSZuzR5/9+GaGsig7+nHjdhG8pW/YZsQGbGGVG+lLUJBsZjO4B
34
- XF6C/51+tUiA0WG6T2/20uNe8aN+CEMxBoTBuzQgO55w6d3utEk4X2+yKuktQ/GR
35
- haYJPATx3zs+9jtQoiFg+keM0CPYk/5LgCv9jxxzQcSS20C8O9MWRVvYfIr47ak7
36
- yXrDPmRvbJLTNjDv6Tkg3vU6
28
+ BgkqhkiG9w0BAQsFAAOCAYEAB3veD2cecAEwrICnXn9pYFc+eC9fIMwyyboP1jgf
29
+ uoxV7buwI6jKolHBuGanDQdqFMUib2JrX0mKZ/9KZw4cCen8grmFRIRRGSooZZEt
30
+ F5wMy0Mte8+nVnhi8tBU5+0bwqR2USL9LKVoeDCyd6sxOlkffVqYZFRGQB3/K3o9
31
+ XaAfiwiXOcq1hYBPh76N/rcNUvjlON4WpoJbwGiREKsLgFXpExXloeUUo8EhCVs5
32
+ g5n20V75pNW/1y8jOxbrKq/M4uaJkyvFMc96ms/NO5Av1OO/GfFJmecuupUvi80E
33
+ yD+/vvvKT8C6A+7Luv70eCEqNC2kmI5k2FKlfkkfaHacRtDz4Ntzw+W216u2ewBB
34
+ 4DzeVtqMQq2g7T4xVjQRRwdBJkdERbyx4TD/2HNa6VNC/V8R5aVlKNyjjglPSC3P
35
+ stR9WM2Qrn9oxHHjgt05mQb9lgp7uGqcCvQoP82U8lJawp7oLLsO25kTe4Hj28T1
36
+ +BcAGJd5hR/dFCHvJ6rtQss3
37
37
  -----END CERTIFICATE-----
38
- date: 2020-02-23 00:00:00.000000000 Z
38
+ date: 2021-01-17 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rexle
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.5'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.5.3
49
+ version: 1.5.9
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,7 +56,7 @@ dependencies:
56
56
  version: '1.5'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.5.3
59
+ version: 1.5.9
60
60
  description:
61
61
  email: james@jamesrobertson.eu
62
62
  executables: []
@@ -83,7 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  requirements: []
86
- rubygems_version: 3.0.3
86
+ rubyforge_project:
87
+ rubygems_version: 2.7.10
87
88
  signing_key:
88
89
  specification_version: 4
89
90
  summary: Generates HTML based tabs using HTML, CSS, and JavaScript.
metadata.gz.sig CHANGED
Binary file