weaver 0.1.5 → 0.1.6

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
  SHA1:
3
- metadata.gz: 8f29fdf1b626538dff95f90118555b633c51df40
4
- data.tar.gz: 7b614f4d8a338910961288efaa5ebd9e005dbca3
3
+ metadata.gz: 4d8b80348cb5de93c99164db39391927fc07c02f
4
+ data.tar.gz: 4c3d9e71c8d1c7d6dc0f22e08b0a97c1f91313a8
5
5
  SHA512:
6
- metadata.gz: c4abcab0eb5a2ed0d79b95960479bcfb62d109db1cc0d4d5b9a51a02b8b233721401d703c8291573b14d53bb8aa90ae2489dae171ef5d667f57c17471b96ae7e
7
- data.tar.gz: 57d140836acb5cdb9c95d1ad785e6dda72649236be110b966ae923cfd052d08d45e174e400878570a3ecd96884a9cfa997d9d94dbec3277f18dd2da8a36a6806
6
+ metadata.gz: 5dd06ecd9491b151a2c1e49e9786262f3240bc3519f9c7da7e9305735c7c6d92d64c91abce67aac2aa559d4defc20aa138137c9e589a3e8f371c9d9a5d56330b
7
+ data.tar.gz: 502699eba012bbc3c80f208394396f395c1023b3177e8d5143d17358f5e8f64a69fdc3299582b37bf2ff7d10c92b2723d2b22af8b0209a3709edca732c0b5e2d
data/bin/weaver CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/exec ruby
2
2
 
3
3
  require 'weaver'
4
+ require 'trollop'
4
5
 
5
6
  class Website < Sinatra::Base
6
7
 
@@ -55,16 +56,33 @@ class Website < Sinatra::Base
55
56
  site.pages[path].generate(level)
56
57
 
57
58
  else
59
+ puts "Not found: #{viewname} in #{viewFile}"
60
+ puts "Path is: #{path}"
58
61
  status 404
59
62
  end
60
63
  else
64
+ puts "Not found: #{viewname} in #{viewFile}"
65
+ puts "Path is: #{path}"
61
66
  status 404
62
67
  end
63
68
  end
64
69
 
65
70
  end
66
71
 
67
- def build!
72
+ def build!(args)
73
+
74
+ opts = Trollop::options do
75
+ banner <<-EOS
76
+ Generate website
77
+
78
+ Usage:
79
+ weaver build [options]
80
+ where [options] are:
81
+ EOS
82
+
83
+ opt :root, "The root URL to be used in links (e.g.) https://astrobunny.net", type: :string, default: "/"
84
+ end
85
+
68
86
  puts "Building site..."
69
87
 
70
88
  buildDir = "#{Dir.pwd}/build"
@@ -78,7 +96,7 @@ def build!
78
96
  files.each do |file|
79
97
  baseDir = file.chomp('.weave').chomp('index').sub(/^source\//, "")
80
98
 
81
- site = Weaver::Weave.new(file)
99
+ site = Weaver::Weave.new(file, opts)
82
100
 
83
101
  site.pages.each do |localPath, page|
84
102
  resultPath = File.join(baseDir, localPath)
@@ -100,8 +118,9 @@ def preview!
100
118
  Website.run!
101
119
  end
102
120
 
103
- if ARGV[0] == "build"
104
- build!
121
+ command = ARGV.shift
122
+ if command == "build"
123
+ build!(ARGV)
105
124
  else
106
125
  preview!
107
126
  end
@@ -1,3 +1,3 @@
1
1
  module Weaver
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
data/lib/weaver.rb CHANGED
@@ -7,9 +7,10 @@ module Weaver
7
7
 
8
8
  class Elements
9
9
 
10
- def initialize(anchors)
10
+ def initialize(page, anchors)
11
11
  @inner_content = []
12
12
  @anchors = anchors
13
+ @page = page
13
14
  end
14
15
 
15
16
  def method_missing(name, *args, &block)
@@ -19,7 +20,7 @@ module Weaver
19
20
  inner = args.shift
20
21
  end
21
22
  if block
22
- elem = Elements.new(@anchors)
23
+ elem = Elements.new(@page, @anchors)
23
24
  elem.instance_eval(&block)
24
25
  inner = elem.generate
25
26
  end
@@ -49,7 +50,7 @@ module Weaver
49
50
  end
50
51
 
51
52
  def ibox(&block)
52
- panel = Panel.new(@anchors)
53
+ panel = Panel.new(@page, @anchors)
53
54
  panel.instance_eval(&block)
54
55
  @inner_content << panel.generate
55
56
  end
@@ -75,7 +76,7 @@ module Weaver
75
76
 
76
77
  end
77
78
 
78
- img class: "img-responsive #{options[:class]}", src: "/images/#{name}", style: style
79
+ img class: "img-responsive #{options[:class]}", src: "#{@page.root}images/#{name}", style: style
79
80
  end
80
81
 
81
82
  def crossfade_image(image_normal, image_hover)
@@ -101,18 +102,40 @@ module Weaver
101
102
  @inner_content << theText
102
103
  end
103
104
 
104
- def link(url, title=nil)
105
+ def link(url, title=nil, &block)
105
106
  if !title
106
107
  title = url
107
108
  end
108
109
 
109
- a href: url, target: "_blank" do
110
- span do
111
- text title
112
- text " "
113
- icon :external_link
110
+ if url.start_with? "/"
111
+ url.sub!(/^\//, @page.root)
112
+ if block
113
+ a href: url, &block
114
+ else
115
+ a title, href: url
116
+ end
117
+ else
118
+
119
+ if block
120
+ a href: url, target: "_blank" do
121
+ span do
122
+ span &block
123
+ icon :external_link
124
+ end
125
+ end
126
+ else
127
+ a href: url, target: "_blank" do
128
+ span do
129
+ text title
130
+ text " "
131
+ icon :external_link
132
+ end
133
+ end
114
134
  end
115
135
  end
136
+
137
+
138
+
116
139
  end
117
140
 
118
141
  def accordion(&block)
@@ -138,7 +161,7 @@ module Weaver
138
161
  end
139
162
 
140
163
  def row(options={}, &block)
141
- r = Row.new(@anchors, options)
164
+ r = Row.new(@page, @anchors, options)
142
165
  r.instance_eval(&block)
143
166
 
144
167
  @inner_content << <<-ENDROW
@@ -153,7 +176,7 @@ ENDROW
153
176
  additional_style = ""
154
177
 
155
178
  if options[:background]
156
- additional_style += " background-image: url('/images/#{options[:background]}'); background-position: center center; background-size: cover;"
179
+ additional_style += " background-image: url('#{@page.root}images/#{options[:background]}'); background-position: center center; background-size: cover;"
157
180
  end
158
181
 
159
182
  if options[:height]
@@ -318,8 +341,8 @@ ENDROW
318
341
  end
319
342
 
320
343
  class Panel < Elements
321
- def initialize(anchors)
322
- super(anchors)
344
+ def initialize(page, anchors)
345
+ super
323
346
  @title = nil
324
347
  @footer = nil
325
348
  @type = :ibox
@@ -327,6 +350,7 @@ ENDROW
327
350
  @body = true
328
351
  @extra = nil
329
352
  @min_height = nil
353
+ @page = page
330
354
  end
331
355
 
332
356
  def generate
@@ -352,7 +376,7 @@ ENDROW
352
376
  classNames = types[@type]
353
377
  min_height = @min_height
354
378
 
355
- elem = Elements.new(@anchors)
379
+ elem = Elements.new(@page, @anchors)
356
380
 
357
381
  elem.instance_eval do
358
382
  div class: classNames[:outer] do
@@ -397,7 +421,7 @@ ENDROW
397
421
  def title(title=nil, &block)
398
422
  @title = title
399
423
  if block
400
- elem = Elements.new(@anchors)
424
+ elem = Elements.new(@page, @anchors)
401
425
  elem.instance_eval(&block)
402
426
  @title = elem.generate
403
427
  end
@@ -405,7 +429,7 @@ ENDROW
405
429
 
406
430
  def extra(&block)
407
431
  if block
408
- elem = Elements.new(@anchors)
432
+ elem = Elements.new(@page, @anchors)
409
433
  elem.instance_eval(&block)
410
434
  @extra = elem.generate
411
435
  end
@@ -414,14 +438,14 @@ ENDROW
414
438
  def footer(footer=nil, &block)
415
439
  @footer = footer
416
440
  if block
417
- elem = Elements.new(@anchors)
441
+ elem = Elements.new(@page, @anchors)
418
442
  elem.instance_eval(&block)
419
443
  @footer = elem.generate
420
444
  end
421
445
  end
422
446
 
423
447
  def tabs(&block)
424
- tabs = Tabs.new(@anchors)
448
+ tabs = Tabs.new(@page, @anchors)
425
449
  tabs.instance_eval(&block)
426
450
 
427
451
  @tabs = tabs
@@ -429,11 +453,12 @@ ENDROW
429
453
  end
430
454
 
431
455
  class Accordion
432
- def initialize(anchors)
456
+ def initialize(page, anchors)
433
457
  @anchors = anchors
434
458
  @tabs = {}
435
459
  @paneltype = :panel
436
460
  @is_collapsed = false
461
+ @page = page
437
462
 
438
463
  if !@anchors["accordia"]
439
464
  @anchors["accordia"] = []
@@ -461,7 +486,7 @@ ENDROW
461
486
 
462
487
  tabArray = @anchors["tabs"]
463
488
 
464
- elem = Elements.new(@anchors)
489
+ elem = Elements.new(@page, @anchors)
465
490
  elem.instance_eval(&block)
466
491
 
467
492
  tabname = "tab#{tabArray.length}"
@@ -476,7 +501,7 @@ ENDROW
476
501
  end
477
502
 
478
503
  def generate
479
- tabbar = Elements.new(@anchors)
504
+ tabbar = Elements.new(@page, @anchors)
480
505
 
481
506
  tabs = @tabs
482
507
  paneltype = @paneltype
@@ -528,9 +553,10 @@ ENDROW
528
553
  end
529
554
 
530
555
  class Tabs
531
- def initialize(anchors)
556
+ def initialize(page, anchors)
532
557
  @anchors = anchors
533
558
  @tabs = {}
559
+ @page = page
534
560
  end
535
561
 
536
562
  def tab(title, &block)
@@ -541,7 +567,7 @@ ENDROW
541
567
 
542
568
  tabArray = @anchors["tabs"]
543
569
 
544
- elem = Elements.new(@anchors)
570
+ elem = Elements.new(@page, @anchors)
545
571
  elem.instance_eval(&block)
546
572
 
547
573
  tabname = "tab#{tabArray.length}"
@@ -556,7 +582,7 @@ ENDROW
556
582
  end
557
583
 
558
584
  def generate_body
559
- tabbar = Elements.new(@anchors)
585
+ tabbar = Elements.new(@page, @anchors)
560
586
  tabs = @tabs
561
587
 
562
588
  tabbar.instance_eval do
@@ -578,7 +604,7 @@ ENDROW
578
604
 
579
605
  def generate_tabs
580
606
 
581
- tabbar = Elements.new(@anchors)
607
+ tabbar = Elements.new(@page, @anchors)
582
608
  tabs = @tabs
583
609
 
584
610
  tabbar.instance_eval do
@@ -610,11 +636,16 @@ ENDROW
610
636
 
611
637
  class Page
612
638
 
613
- def initialize(title)
639
+ def initialize(title, options)
614
640
  @title = title
615
641
  @content = ""
616
642
  @body_class = nil
617
643
  @anchors = {}
644
+ @options = options
645
+ end
646
+
647
+ def root
648
+ return @options[:root]
618
649
  end
619
650
 
620
651
  def generate(back_folders, options={})
@@ -682,11 +713,12 @@ ENDROW
682
713
  class Row
683
714
  attr_accessor :extra_classes
684
715
 
685
- def initialize(anchors, options)
716
+ def initialize(page, anchors, options)
686
717
  @columns = []
687
718
  @free = 12
688
719
  @extra_classes = options[:class] || ""
689
720
  @anchors = anchors
721
+ @page = page
690
722
  end
691
723
 
692
724
  def twothirds(&block)
@@ -736,7 +768,7 @@ ENDROW
736
768
 
737
769
  def col(occupies, options={}, &block)
738
770
  raise "Not enough columns!" if @free < occupies
739
- elem = Elements.new(@anchors)
771
+ elem = Elements.new(@page, @anchors)
740
772
  elem.instance_eval(&block)
741
773
 
742
774
  @columns << { occupy: occupies, elem: elem, options: options }
@@ -779,7 +811,7 @@ ENDROW
779
811
  end
780
812
 
781
813
  class NavPage < Page
782
- def initialize(title)
814
+ def initialize(title, options)
783
815
  super
784
816
  @menu = Menu.new
785
817
  end
@@ -792,7 +824,7 @@ ENDROW
792
824
 
793
825
 
794
826
  class SideNavPage < NavPage
795
- def initialize(title)
827
+ def initialize(title, options)
796
828
  @rows = []
797
829
  super
798
830
  end
@@ -807,7 +839,7 @@ ENDROW
807
839
  end
808
840
 
809
841
  def row(options={}, &block)
810
- r = Row.new(@anchors, options)
842
+ r = Row.new(self, @anchors, options)
811
843
  r.instance_eval(&block)
812
844
  @rows << r
813
845
  end
@@ -823,8 +855,7 @@ ENDROW
823
855
 
824
856
  menu = @menu
825
857
 
826
-
827
- navigation = Elements.new(@anchors)
858
+ navigation = Elements.new(@page, @anchors)
828
859
  navigation.instance_eval do
829
860
 
830
861
  menu.items.each do |item|
@@ -848,9 +879,7 @@ ENDROW
848
879
  if inneritem.has_key?(:menu)
849
880
  raise "Second level menu not supported"
850
881
  else
851
- a href:inneritem[:link] do
852
- text inneritem[:name]
853
- end
882
+ link inneritem[:name], href:inneritem[:link]
854
883
  end
855
884
  end
856
885
  end
@@ -914,7 +943,7 @@ ENDROW
914
943
  end
915
944
 
916
945
  class TopNavPage < NavPage
917
- def initialize(title)
946
+ def initialize(title, options)
918
947
  @rows = []
919
948
  super
920
949
  end
@@ -929,7 +958,7 @@ ENDROW
929
958
  end
930
959
 
931
960
  def row(options={}, &block)
932
- r = Row.new(@anchors, options)
961
+ r = Row.new(self, @anchors, options)
933
962
  r.instance_eval(&block)
934
963
  @rows << r
935
964
  end
@@ -948,7 +977,7 @@ ENDROW
948
977
 
949
978
  menu = @menu
950
979
 
951
- navigation = Elements.new(@anchors)
980
+ navigation = Elements.new(self, @anchors)
952
981
  navigation.instance_eval do
953
982
 
954
983
  menu.items.each do |item|
@@ -975,16 +1004,14 @@ ENDROW
975
1004
  if inneritem.has_key?(:menu)
976
1005
  raise "Second level menu not supported"
977
1006
  else
978
- a href:inneritem[:link] do
979
- text inneritem[:name]
980
- end
1007
+ link inneritem[:name], href:inneritem[:link]
981
1008
  end
982
1009
  end
983
1010
  end
984
1011
  end
985
1012
  end
986
1013
  elsif
987
- a href: "#{item[:link]}" do
1014
+ link "#{item[:link]}" do
988
1015
  span :class => "nav-label" do
989
1016
  icon item[:icon]
990
1017
  text item[:name]
@@ -1051,9 +1078,13 @@ ENDROW
1051
1078
 
1052
1079
 
1053
1080
  class CenterPage < Page
1054
- def initialize(title, element)
1055
- @element = element
1056
- super(title)
1081
+ def initialize(title, options)
1082
+ @element = Elements.new(self, {})
1083
+ super
1084
+ end
1085
+
1086
+ def element=(value)
1087
+ @element = value
1057
1088
  end
1058
1089
 
1059
1090
  def generate(level)
@@ -1071,28 +1102,36 @@ ENDROW
1071
1102
 
1072
1103
  class Weave
1073
1104
  attr_accessor :pages
1074
- def initialize(file)
1105
+ def initialize(file, options={})
1075
1106
  @pages = {}
1076
1107
  @file = file
1108
+ @options = options
1109
+
1110
+ @options[:root] = @options[:root] || "/"
1111
+ @options[:root] = "#{@options[:root]}/" unless @options[:root].end_with? "/"
1077
1112
  instance_eval(File.read(file), file)
1078
1113
  end
1079
1114
 
1080
1115
  def center_page(path, title, &block)
1081
- elem = Elements.new({})
1116
+
1117
+ p = CenterPage.new(title, @options)
1118
+
1119
+ elem = Elements.new(p, {})
1082
1120
  elem.instance_eval(&block) if block
1083
1121
 
1084
- p = CenterPage.new(title, elem)
1122
+ p.element=elem
1123
+
1085
1124
  @pages[path] = p
1086
1125
  end
1087
1126
 
1088
1127
  def sidenav_page(path, title, &block)
1089
- p = SideNavPage.new(title)
1128
+ p = SideNavPage.new(title, @options)
1090
1129
  p.instance_eval(&block) if block
1091
1130
  @pages[path] = p
1092
1131
  end
1093
1132
 
1094
1133
  def topnav_page(path, title, &block)
1095
- p = TopNavPage.new(title)
1134
+ p = TopNavPage.new(title, @options)
1096
1135
  p.instance_eval(&block) if block
1097
1136
  @pages[path] = p
1098
1137
  end
data/weaver.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  end
24
24
 
25
25
  spec.add_dependency "sinatra"
26
+ spec.add_dependency "trollop"
26
27
 
27
28
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
29
  spec.bindir = "bin"
metadata CHANGED
@@ -1,55 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weaver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Siaw
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-31 00:00:00.000000000 Z
11
+ date: 2015-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: trollop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ~>
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
47
  version: '1.9'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ~>
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.9'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '10.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '10.0'
55
69
  description: Site generator with a simple DSL
@@ -62,9 +76,9 @@ executables:
62
76
  extensions: []
63
77
  extra_rdoc_files: []
64
78
  files:
65
- - .gitignore
66
- - .rspec
67
- - .travis.yml
79
+ - ".gitignore"
80
+ - ".rspec"
81
+ - ".travis.yml"
68
82
  - CODE_OF_CONDUCT.md
69
83
  - Gemfile
70
84
  - LICENSE.txt
@@ -639,17 +653,17 @@ require_paths:
639
653
  - lib
640
654
  required_ruby_version: !ruby/object:Gem::Requirement
641
655
  requirements:
642
- - - '>='
656
+ - - ">="
643
657
  - !ruby/object:Gem::Version
644
658
  version: '0'
645
659
  required_rubygems_version: !ruby/object:Gem::Requirement
646
660
  requirements:
647
- - - '>='
661
+ - - ">="
648
662
  - !ruby/object:Gem::Version
649
663
  version: '0'
650
664
  requirements: []
651
665
  rubyforge_project:
652
- rubygems_version: 2.4.7
666
+ rubygems_version: 2.4.6
653
667
  signing_key:
654
668
  specification_version: 4
655
669
  summary: Website generator