weaver 0.1.5 → 0.1.6

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
  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