weaver 0.8.0 → 0.8.1
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 +5 -5
- data/Rakefile +1 -1
- data/bin/console +3 -3
- data/exe/weaver +112 -122
- data/lib/weaver.rb +24 -2654
- data/lib/weaver/element_types/accordion.rb +122 -0
- data/lib/weaver/element_types/action.rb +38 -0
- data/lib/weaver/element_types/code.rb +81 -0
- data/lib/weaver/element_types/dynamic_table.rb +324 -0
- data/lib/weaver/element_types/dynamic_table_cell.rb +16 -0
- data/lib/weaver/element_types/form.rb +47 -0
- data/lib/weaver/element_types/form_elements.rb +297 -0
- data/lib/weaver/element_types/javascript_object.rb +28 -0
- data/lib/weaver/element_types/modal_dialog.rb +68 -0
- data/lib/weaver/element_types/panel.rb +124 -0
- data/lib/weaver/element_types/row.rb +117 -0
- data/lib/weaver/element_types/tabs.rb +75 -0
- data/lib/weaver/element_types/textfield_javascript.rb +58 -0
- data/lib/weaver/elements.rb +406 -0
- data/lib/weaver/page_types/center_page.rb +25 -0
- data/lib/weaver/page_types/empty_page.rb +26 -0
- data/lib/weaver/page_types/nav_page.rb +39 -0
- data/lib/weaver/page_types/nonnav_page.rb +35 -0
- data/lib/weaver/page_types/page.rb +234 -0
- data/lib/weaver/page_types/raw_page.rb +17 -0
- data/lib/weaver/page_types/sidenav_page.rb +119 -0
- data/lib/weaver/page_types/structured_page.rb +19 -0
- data/lib/weaver/page_types/topnav_page.rb +167 -0
- data/lib/weaver/version.rb +1 -1
- data/lib/weaver/weave.rb +44 -0
- data/weaver.gemspec +27 -24
- metadata +37 -13
@@ -0,0 +1,19 @@
|
|
1
|
+
module Weaver
|
2
|
+
# Page that uses columns and rows
|
3
|
+
class StructuredPage < Page
|
4
|
+
def initialize(title, global_settings, options, &block)
|
5
|
+
@rows = []
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def header(&block)
|
10
|
+
row(class: 'wrapper border-bottom white-bg page-heading', &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def row(options = {}, &block)
|
14
|
+
r = Row.new(self, @anchors, options)
|
15
|
+
r.instance_eval(&block)
|
16
|
+
@rows << r
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'weaver/page_types/nav_page'
|
2
|
+
module Weaver
|
3
|
+
class TopNavPage < NavPage
|
4
|
+
def initialize(title, global_settings, options, &block)
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def generate(level)
|
9
|
+
instance_eval &@block
|
10
|
+
rows = @rows.map do |row|
|
11
|
+
<<-ENDROW
|
12
|
+
<div class="row #{row.extra_classes}" style="#{row.style}">
|
13
|
+
#{row.generate}
|
14
|
+
</div>
|
15
|
+
ENDROW
|
16
|
+
end.join
|
17
|
+
|
18
|
+
@body_class = 'top-navigation'
|
19
|
+
@loading_bar_visible = true
|
20
|
+
|
21
|
+
menu = @menu
|
22
|
+
|
23
|
+
navigation = Elements.new(self, @anchors)
|
24
|
+
navigation.instance_eval do
|
25
|
+
menu.items.each do |item|
|
26
|
+
next unless item[:options][:position] != :right
|
27
|
+
|
28
|
+
li item[:options] do
|
29
|
+
if item.key? :menu
|
30
|
+
|
31
|
+
li class: 'dropdown' do
|
32
|
+
a "aria-expanded": 'false',
|
33
|
+
role: 'button',
|
34
|
+
href: '#',
|
35
|
+
class: 'dropdown-toggle',
|
36
|
+
"data-toggle": 'dropdown' do
|
37
|
+
|
38
|
+
icon item[:icon]
|
39
|
+
text item[:name]
|
40
|
+
span class: 'caret' do
|
41
|
+
text ''
|
42
|
+
end
|
43
|
+
end
|
44
|
+
ul role: 'menu', class: 'dropdown-menu' do
|
45
|
+
item[:menu].items.each do |inneritem|
|
46
|
+
li inneritem[:options] do
|
47
|
+
if inneritem.key?(:menu)
|
48
|
+
raise 'Second level menu not supported'
|
49
|
+
else
|
50
|
+
hyperlink inneritem[:link], inneritem[:name]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
elsif
|
57
|
+
hyperlink (item[:link]).to_s do
|
58
|
+
span class: 'nav-label' do
|
59
|
+
icon item[:icon]
|
60
|
+
text item[:name]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
navigation_right = Elements.new(self, @anchors)
|
69
|
+
navigation_right.instance_eval do
|
70
|
+
menu.items.each do |item|
|
71
|
+
next unless item[:options][:position] == :right
|
72
|
+
|
73
|
+
li item[:options] do
|
74
|
+
if item.key? :menu
|
75
|
+
|
76
|
+
li class: 'dropdown' do
|
77
|
+
a "aria-expanded": 'false',
|
78
|
+
role: 'button',
|
79
|
+
href: '#',
|
80
|
+
class: 'dropdown-toggle',
|
81
|
+
"data-toggle": 'dropdown' do
|
82
|
+
|
83
|
+
icon item[:icon]
|
84
|
+
text item[:name]
|
85
|
+
span class: 'caret' do
|
86
|
+
text ''
|
87
|
+
end
|
88
|
+
end
|
89
|
+
ul role: 'menu', class: 'dropdown-menu' do
|
90
|
+
item[:menu].items.each do |inneritem|
|
91
|
+
li inneritem[:options] do
|
92
|
+
if inneritem.key?(:menu)
|
93
|
+
raise 'Second level menu not supported'
|
94
|
+
else
|
95
|
+
hyperlink inneritem[:link], inneritem[:name]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
elsif
|
102
|
+
hyperlink (item[:link]).to_s do
|
103
|
+
span class: 'nav-label' do
|
104
|
+
icon item[:icon]
|
105
|
+
text item[:name]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
brand_content = ''
|
114
|
+
|
115
|
+
if @brand
|
116
|
+
brand_content = <<-BRAND_CONTENT
|
117
|
+
|
118
|
+
<div class="navbar-header">
|
119
|
+
|
120
|
+
<a href="#{root}" class="navbar-brand">#{@brand}</a>
|
121
|
+
</div>
|
122
|
+
BRAND_CONTENT
|
123
|
+
end
|
124
|
+
|
125
|
+
@content =
|
126
|
+
<<-ENDBODY
|
127
|
+
<div id="wrapper">
|
128
|
+
|
129
|
+
<div id="page-wrapper" class="gray-bg">
|
130
|
+
<div class="row border-bottom white-bg">
|
131
|
+
|
132
|
+
<nav class="navbar navbar-static-top" role="navigation">
|
133
|
+
<button aria-controls="navbar" aria-expanded="false" data-target="#navbar" data-toggle="collapse" class="navbar-toggle collapsed" type="button">
|
134
|
+
<i class="fa fa-reorder"></i>
|
135
|
+
</button>
|
136
|
+
#{brand_content}
|
137
|
+
|
138
|
+
<div class="navbar-collapse collapse" id="navbar">
|
139
|
+
<ul class="nav navbar-nav">
|
140
|
+
#{navigation.generate}
|
141
|
+
</ul>
|
142
|
+
<ul class="nav navbar-top-links navbar-right">
|
143
|
+
#{navigation_right.generate}
|
144
|
+
</ul>
|
145
|
+
</div>
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
</nav>
|
150
|
+
</div>
|
151
|
+
|
152
|
+
|
153
|
+
<div class="wrapper-content">
|
154
|
+
<div class="container">
|
155
|
+
#{rows}
|
156
|
+
</div>
|
157
|
+
</div>
|
158
|
+
</div>
|
159
|
+
</div>
|
160
|
+
ENDBODY
|
161
|
+
|
162
|
+
super
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
Weaver::Weave.register_page_type(:topnav_page, Weaver::TopNavPage)
|
data/lib/weaver/version.rb
CHANGED
data/lib/weaver/weave.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Weaver
|
2
|
+
# Handles .weave file
|
3
|
+
class Weave
|
4
|
+
attr_accessor :pages
|
5
|
+
def initialize(file, options = {})
|
6
|
+
@pages = {}
|
7
|
+
@file = file
|
8
|
+
@global_settings = options
|
9
|
+
|
10
|
+
@global_settings[:root] = @global_settings[:root] || '/'
|
11
|
+
unless @global_settings[:root].end_with? '/'
|
12
|
+
@global_settings[:root] = "#{@global_settings[:root]}/"
|
13
|
+
end
|
14
|
+
instance_eval(File.read(file), file)
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_global(key, value)
|
18
|
+
@global_settings[key] = value
|
19
|
+
end
|
20
|
+
|
21
|
+
def include(file)
|
22
|
+
dir = File.dirname(@file)
|
23
|
+
filename = File.join([dir, file])
|
24
|
+
File.read(filename)
|
25
|
+
load filename
|
26
|
+
end
|
27
|
+
|
28
|
+
class << self
|
29
|
+
def register_page_type(symbol, class_constant)
|
30
|
+
define_method symbol,
|
31
|
+
(proc do |path = '', title = nil, options = {}, &block|
|
32
|
+
if title.nil?
|
33
|
+
title = path
|
34
|
+
path = ''
|
35
|
+
end
|
36
|
+
|
37
|
+
p = class_constant.new(title, @global_settings, options,
|
38
|
+
&block)
|
39
|
+
@pages[path] = p
|
40
|
+
end)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/weaver.gemspec
CHANGED
@@ -1,36 +1,39 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'weaver/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
|
-
spec.
|
6
|
+
unless spec.respond_to?(:metadata)
|
7
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host',
|
8
|
+
# or delete this section to allow pushing this gem to any host.
|
9
|
+
raise <<-ERR
|
10
|
+
RubyGems 2.0 or newer is required to protect against public gem pushes.
|
11
|
+
ERR
|
12
|
+
end
|
13
|
+
|
14
|
+
spec.name = 'weaver'
|
8
15
|
spec.version = Weaver::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
16
|
+
spec.authors = ['David Siaw']
|
17
|
+
spec.email = ['davidsiaw@gmail.com']
|
11
18
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
19
|
+
spec.summary = 'Website generator'
|
20
|
+
spec.description = 'Site generator with a simple DSL'
|
21
|
+
spec.homepage = 'https://davidsiaw.github.io/weaver-docs/'
|
22
|
+
spec.license = 'MIT'
|
16
23
|
|
17
|
-
|
18
|
-
|
19
|
-
if spec.respond_to?(:metadata)
|
20
|
-
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
21
|
-
else
|
22
|
-
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
25
|
+
f.match(%r{^(test|spec|features)/})
|
23
26
|
end
|
24
|
-
|
25
|
-
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
-
spec.bindir = "exe"
|
27
|
+
spec.bindir = 'exe'
|
27
28
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
-
spec.require_paths = [
|
29
|
+
spec.require_paths = ['lib']
|
30
|
+
|
31
|
+
spec.add_dependency 'activesupport'
|
32
|
+
spec.add_dependency 'optimist'
|
33
|
+
spec.add_dependency 'sinatra', '~> 2.0.3'
|
29
34
|
|
30
|
-
spec.
|
31
|
-
spec.
|
32
|
-
spec.add_dependency "optimist"
|
35
|
+
spec.add_development_dependency 'bundler', '~> 1.9'
|
36
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
33
37
|
|
34
|
-
spec.
|
35
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
38
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
36
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weaver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Siaw
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -25,33 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: optimist
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: sinatra
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.3
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31324,7 +31324,31 @@ files:
|
|
31324
31324
|
- data/weaver/js/weaver.js
|
31325
31325
|
- exe/weaver
|
31326
31326
|
- lib/weaver.rb
|
31327
|
+
- lib/weaver/element_types/accordion.rb
|
31328
|
+
- lib/weaver/element_types/action.rb
|
31329
|
+
- lib/weaver/element_types/code.rb
|
31330
|
+
- lib/weaver/element_types/dynamic_table.rb
|
31331
|
+
- lib/weaver/element_types/dynamic_table_cell.rb
|
31332
|
+
- lib/weaver/element_types/form.rb
|
31333
|
+
- lib/weaver/element_types/form_elements.rb
|
31334
|
+
- lib/weaver/element_types/javascript_object.rb
|
31335
|
+
- lib/weaver/element_types/modal_dialog.rb
|
31336
|
+
- lib/weaver/element_types/panel.rb
|
31337
|
+
- lib/weaver/element_types/row.rb
|
31338
|
+
- lib/weaver/element_types/tabs.rb
|
31339
|
+
- lib/weaver/element_types/textfield_javascript.rb
|
31340
|
+
- lib/weaver/elements.rb
|
31341
|
+
- lib/weaver/page_types/center_page.rb
|
31342
|
+
- lib/weaver/page_types/empty_page.rb
|
31343
|
+
- lib/weaver/page_types/nav_page.rb
|
31344
|
+
- lib/weaver/page_types/nonnav_page.rb
|
31345
|
+
- lib/weaver/page_types/page.rb
|
31346
|
+
- lib/weaver/page_types/raw_page.rb
|
31347
|
+
- lib/weaver/page_types/sidenav_page.rb
|
31348
|
+
- lib/weaver/page_types/structured_page.rb
|
31349
|
+
- lib/weaver/page_types/topnav_page.rb
|
31327
31350
|
- lib/weaver/version.rb
|
31351
|
+
- lib/weaver/weave.rb
|
31328
31352
|
- weaver.gemspec
|
31329
31353
|
homepage: https://davidsiaw.github.io/weaver-docs/
|
31330
31354
|
licenses:
|
@@ -31347,7 +31371,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
31347
31371
|
version: '0'
|
31348
31372
|
requirements: []
|
31349
31373
|
rubyforge_project:
|
31350
|
-
rubygems_version: 2.
|
31374
|
+
rubygems_version: 2.7.8
|
31351
31375
|
signing_key:
|
31352
31376
|
specification_version: 4
|
31353
31377
|
summary: Website generator
|