www_app 1.0.1 → 1.1.0
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 +4 -4
- data/README.md +25 -14
- data/VERSION +1 -1
- data/lib/www_app.rb +59 -7
- data/specs/sample.rb +40 -0
- data/specs/{as_ruby → server-side}/0000-new.rb +0 -0
- data/specs/{as_ruby → server-side}/0010-attrs.rb +0 -0
- data/specs/{as_ruby → server-side}/0011-class.rb +0 -0
- data/specs/{as_ruby → server-side}/0011-href.rb +0 -0
- data/specs/{as_ruby → server-side}/0011-id.rb +0 -0
- data/specs/{as_ruby → server-side}/0020-tag.rb +0 -0
- data/specs/{as_ruby → server-side}/0020-tag_content.rb +0 -0
- data/specs/{as_ruby → server-side}/0021-body.rb +0 -0
- data/specs/{as_ruby → server-side}/0021-form.rb +0 -0
- data/specs/{as_ruby → server-side}/0021-link.rb +0 -0
- data/specs/server-side/0021-page_title.rb +11 -0
- data/specs/{as_ruby → server-side}/0021-script.rb +0 -0
- data/specs/{as_ruby → server-side}/0030-mustache.rb +0 -0
- data/specs/server-side/0030-style.rb +63 -0
- data/specs/{as_ruby → server-side}/0040-css.rb +0 -0
- data/specs/server-side/0041-font_family.rb +15 -0
- data/specs/{as_ruby → server-side}/0050-on.rb +0 -0
- data/www_app.gemspec +1 -1
- metadata +21 -21
- data/specs/lib/sample.rb +0 -23
- data/specs/sampe.2.rb +0 -14
- data/specs/sample.3.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbfdf7458b157b502e9cf03a522b7d3d41883a6e
|
4
|
+
data.tar.gz: dff3da5abcc509526f77e5b511306c5f113e4a9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 938a2941e13c3912b4a9b6603d47fc77f0ac0e4b7c8813f66f27ad07392db2e00e66187e23bb6c02c6e9644ad4ec6ea244651b053800ec68e8ae520e7a18c4bf
|
7
|
+
data.tar.gz: 1580b1995dca04033a640ceee1131b328d086b525e3bdd1f681f57d45b9e992c2be756a7b9a7de466b7b8a8681049b124229b76d5557d279b18fffaf52913145
|
data/README.md
CHANGED
@@ -19,26 +19,37 @@ To install:
|
|
19
19
|
To Use:
|
20
20
|
|
21
21
|
```ruby
|
22
|
-
|
22
|
+
WWW_App.new {
|
23
|
+
|
24
|
+
style {
|
25
|
+
a {
|
26
|
+
_link { color '#fff' }
|
27
|
+
_visited { color '#f88' }
|
28
|
+
_hover { color '#ccc' }
|
29
|
+
}
|
30
|
+
}
|
23
31
|
|
24
|
-
|
25
|
-
background_color 'grey'
|
32
|
+
div {
|
26
33
|
|
27
|
-
|
28
|
-
|
29
|
-
background_color 'white'
|
30
|
-
}
|
34
|
+
border '1px solid #000'
|
35
|
+
background_color 'grey'
|
31
36
|
|
32
|
-
|
37
|
+
on('scary') {
|
38
|
+
border '2px dotted red'
|
39
|
+
background_color 'white'
|
40
|
+
}
|
33
41
|
|
34
|
-
|
35
|
-
parent 'div'
|
36
|
-
add_class 'scary'
|
42
|
+
p { 'Click the button to make me scared.' }
|
37
43
|
|
38
|
-
|
39
|
-
|
44
|
+
button {
|
45
|
+
parent 'div'
|
46
|
+
add_class 'scary'
|
40
47
|
|
41
|
-
|
48
|
+
'Scary-ify'
|
49
|
+
}
|
50
|
+
|
51
|
+
}
|
52
|
+
}.to_html
|
42
53
|
```
|
43
54
|
|
44
55
|
It generates the CSS, JS, and HTML.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.1.0
|
data/lib/www_app.rb
CHANGED
@@ -100,6 +100,7 @@ class WWW_App < BasicObject
|
|
100
100
|
|
101
101
|
Unescaped = ::Class.new(::StandardError)
|
102
102
|
Not_Unique = ::Class.new(::StandardError)
|
103
|
+
Wrong_Parent = ::Class.new(::StandardError)
|
103
104
|
HTML_ID_Duplicate = ::Class.new(Not_Unique)
|
104
105
|
|
105
106
|
ALWAYS_END_TAGS = [:script]
|
@@ -159,6 +160,21 @@ class WWW_App < BasicObject
|
|
159
160
|
:at_rules => [ 'font-face', 'media' ],
|
160
161
|
:protocols => [ :relative ],
|
161
162
|
|
163
|
+
:pseudo => %w[
|
164
|
+
active checked default dir() disabled
|
165
|
+
empty enabled
|
166
|
+
first first-child first-of-type fullscreen focus
|
167
|
+
hover
|
168
|
+
indeterminate in-range invalid
|
169
|
+
lang() last-child last-of-type left link
|
170
|
+
not() nth-child() nth-last-child() nth-last-of-type() nth-of-type()
|
171
|
+
only-child only-of-type optional out-of-range
|
172
|
+
read-only read-write required right root
|
173
|
+
scope
|
174
|
+
target
|
175
|
+
valid visited
|
176
|
+
].select { |name| name[/\A[a-z0-9\-]+\Z/] }.map { |name| name.gsub('-', '_').to_sym },
|
177
|
+
|
162
178
|
# From: Sanitize::Config::RELAXED[:css][:properties]
|
163
179
|
:properties => %w[
|
164
180
|
background bottom font_variant_numeric position
|
@@ -220,10 +236,11 @@ class WWW_App < BasicObject
|
|
220
236
|
end # === class self ==============================================
|
221
237
|
|
222
238
|
def initialize *files
|
223
|
-
@js
|
224
|
-
@style
|
225
|
-
@css_arr
|
239
|
+
@js = []
|
240
|
+
@style = {}
|
241
|
+
@css_arr = []
|
226
242
|
@css_id_override = nil
|
243
|
+
@render_it = true
|
227
244
|
|
228
245
|
@title = nil
|
229
246
|
@scripts = []
|
@@ -231,6 +248,7 @@ class WWW_App < BasicObject
|
|
231
248
|
@compiled = nil
|
232
249
|
@cache = {}
|
233
250
|
@is_doc = false
|
251
|
+
@page_title = nil
|
234
252
|
@default_ids = {}
|
235
253
|
|
236
254
|
@state = [:create]
|
@@ -364,6 +382,10 @@ class WWW_App < BasicObject
|
|
364
382
|
|
365
383
|
private # =========================================================
|
366
384
|
|
385
|
+
# =================================================================
|
386
|
+
# Parent-related methods
|
387
|
+
# =================================================================
|
388
|
+
|
367
389
|
#
|
368
390
|
# NOTE: Properties are defined first,
|
369
391
|
# so :elements methods can over-write them,
|
@@ -391,7 +413,10 @@ class WWW_App < BasicObject
|
|
391
413
|
EOF
|
392
414
|
}
|
393
415
|
|
394
|
-
#
|
416
|
+
# =================================================================
|
417
|
+
# Future features...
|
418
|
+
# =================================================================
|
419
|
+
|
395
420
|
def section
|
396
421
|
fail
|
397
422
|
end
|
@@ -407,7 +432,11 @@ class WWW_App < BasicObject
|
|
407
432
|
def at_bottom_of
|
408
433
|
fail
|
409
434
|
end
|
410
|
-
|
435
|
+
|
436
|
+
|
437
|
+
# =================================================================
|
438
|
+
# Miscellaneaous Helpers
|
439
|
+
# =================================================================
|
411
440
|
|
412
441
|
def is_doc?
|
413
442
|
@is_doc || !@style[:css].empty? || !@js.empty?
|
@@ -628,7 +657,8 @@ class WWW_App < BasicObject
|
|
628
657
|
:childs => [],
|
629
658
|
:parent_index => @current_tag_index,
|
630
659
|
:is_closed => false,
|
631
|
-
:tag_index => @tag_arr.size
|
660
|
+
:tag_index => @tag_arr.size,
|
661
|
+
:render? => @render_it
|
632
662
|
}
|
633
663
|
|
634
664
|
@tag_arr << e
|
@@ -693,6 +723,14 @@ class WWW_App < BasicObject
|
|
693
723
|
# CSS-related methods
|
694
724
|
# =================================================================
|
695
725
|
|
726
|
+
def style
|
727
|
+
orig = @render_it
|
728
|
+
@render_it = false
|
729
|
+
results = yield
|
730
|
+
@render_it = orig
|
731
|
+
results
|
732
|
+
end
|
733
|
+
|
696
734
|
def css_property name, val = nil
|
697
735
|
prop = {:name=>name, :value=>val, :parent=>parent? ? parent : nil}
|
698
736
|
|
@@ -705,13 +743,24 @@ class WWW_App < BasicObject
|
|
705
743
|
@css_arr.pop
|
706
744
|
end
|
707
745
|
|
746
|
+
Methods[:css][:pseudo].each { |name|
|
747
|
+
eval <<-EOF, nil, __FILE__, __LINE__ + 1
|
748
|
+
def _#{name}
|
749
|
+
orig = @css_id_override
|
750
|
+
@css_id_override = ':#{name}'.freeze
|
751
|
+
result = yield
|
752
|
+
@css_id_override = orig
|
753
|
+
result
|
754
|
+
end
|
755
|
+
EOF
|
756
|
+
}
|
708
757
|
|
709
758
|
# =================================================================
|
710
759
|
|
711
760
|
def page_title
|
712
761
|
@is_doc = true
|
713
762
|
in_tag(@head) {
|
714
|
-
tag(:title) { yield }
|
763
|
+
tag(:title) { @page_title = yield }
|
715
764
|
}
|
716
765
|
self
|
717
766
|
end
|
@@ -748,6 +797,7 @@ class WWW_App < BasicObject
|
|
748
797
|
h = vals
|
749
798
|
h.map { |raw_k,styles|
|
750
799
|
k = raw_k.to_s
|
800
|
+
|
751
801
|
<<-EOF
|
752
802
|
#{Sanitize.css_selector k} {
|
753
803
|
#{to_clean_text :styles, styles}
|
@@ -866,6 +916,8 @@ class WWW_App < BasicObject
|
|
866
916
|
to_clean_text(:html, @tag_arr[tag_index])
|
867
917
|
}.join(NEW_LINE).strip
|
868
918
|
|
919
|
+
return unless h[:render?]
|
920
|
+
|
869
921
|
if html.empty? && h[:text]
|
870
922
|
html = h[:text].is_a?(::Symbol) ?
|
871
923
|
h[:text].to_mustache(:html) :
|
data/specs/sample.rb
CHANGED
@@ -1,4 +1,17 @@
|
|
1
1
|
|
2
|
+
NAME: user
|
3
|
+
|
4
|
+
/define
|
5
|
+
name: username
|
6
|
+
is: one_line_text
|
7
|
+
length between: 3, 10
|
8
|
+
only chars: a-z A-Z 0-9 _ - *
|
9
|
+
unique: enforce
|
10
|
+
|
11
|
+
/after_create
|
12
|
+
|
13
|
+
-----------------------------
|
14
|
+
|
2
15
|
background {
|
3
16
|
url "/imgs/squares.png"
|
4
17
|
}
|
@@ -41,4 +54,31 @@ div.^(:col).^(:creations) {
|
|
41
54
|
|
42
55
|
} # div.col.creations
|
43
56
|
|
57
|
+
----------------------------
|
58
|
+
|
59
|
+
|
60
|
+
title "Hello, World!"
|
61
|
+
|
62
|
+
form {
|
63
|
+
button "send"
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
col.c_1! {
|
68
|
+
box {
|
69
|
+
p.first!.hello { "Hiya" }
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
col.c_2! {
|
74
|
+
box {
|
75
|
+
p.second!.hello.again {
|
76
|
+
border "1px solid #fff"
|
77
|
+
"Hiya, again."
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
|
44
84
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,63 @@
|
|
1
|
+
|
2
|
+
describe "css pseudo" do
|
3
|
+
|
4
|
+
%w[link visited hover].each { |name|
|
5
|
+
it "adds :#{name} pseudo-class" do
|
6
|
+
target :style, <<-EOF
|
7
|
+
a:#{name} {
|
8
|
+
color: #fff;
|
9
|
+
}
|
10
|
+
EOF
|
11
|
+
|
12
|
+
actual do
|
13
|
+
style {
|
14
|
+
a {
|
15
|
+
send("_#{name}".to_sym) { color '#fff' }
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end # === it
|
20
|
+
}
|
21
|
+
|
22
|
+
it "does not add anything to :body" do
|
23
|
+
target :body, <<-EOF
|
24
|
+
<p>empty</p>
|
25
|
+
EOF
|
26
|
+
|
27
|
+
actual do
|
28
|
+
style {
|
29
|
+
a { _link { color '#fff' } }
|
30
|
+
}
|
31
|
+
p {
|
32
|
+
'empty'
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end # === it does not add anything
|
36
|
+
|
37
|
+
it "adds tag to :body when used outside of :style" do
|
38
|
+
target :body, <<-EOF
|
39
|
+
<a id="main" href="/test">test</a>
|
40
|
+
EOF
|
41
|
+
actual do
|
42
|
+
a.*(:main).href("/test") {
|
43
|
+
_link { color '#fff' }
|
44
|
+
"test"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end # === it adds tag to :body when used outside of :style
|
48
|
+
|
49
|
+
it "uses :id in :style tag if specified" do
|
50
|
+
target :style, <<-EOF
|
51
|
+
#main:link {
|
52
|
+
color: #ffc;
|
53
|
+
}
|
54
|
+
EOF
|
55
|
+
actual do
|
56
|
+
a.*(:main).href("/test") {
|
57
|
+
_link { color '#ffc' }
|
58
|
+
"test"
|
59
|
+
}
|
60
|
+
end
|
61
|
+
end # === it uses :id in :style tag if specified
|
62
|
+
|
63
|
+
end # === describe "css pseudo"
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
describe :font_family do
|
3
|
+
|
4
|
+
it "allows commas: Tommy, Harry, Sally" do
|
5
|
+
target :style, %^
|
6
|
+
body {
|
7
|
+
font-family: Ubuntu, Segoe UI, Helvetica, sans-serif;
|
8
|
+
}
|
9
|
+
^
|
10
|
+
actual {
|
11
|
+
font_family "Ubuntu, Segoe UI, Helvetica, sans-serif"
|
12
|
+
}
|
13
|
+
end # === it allows commas: Tommy, Harry, Sally
|
14
|
+
|
15
|
+
end # === describe :font_family
|
File without changes
|
data/www_app.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.required_ruby_version = '>= 2.2.0'
|
25
25
|
|
26
26
|
spec.add_runtime_dependency "yajl-ruby" , ">= 1.2"
|
27
|
-
spec.add_runtime_dependency "escape_escape_escape" , ">=
|
27
|
+
spec.add_runtime_dependency "escape_escape_escape" , ">= 1.4.2"
|
28
28
|
spec.add_runtime_dependency "mustache" , ">= 0.99"
|
29
29
|
|
30
30
|
spec.add_development_dependency "multi_json" , ">= 1.10.1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: www_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- da99
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yajl-ruby
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.4.2
|
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: 1.4.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mustache
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,30 +219,30 @@ files:
|
|
219
219
|
- lib/www_app/Clean.rb
|
220
220
|
- lib/www_app/dsl.rb
|
221
221
|
- lib/www_app/source.rb
|
222
|
-
- specs/as_ruby/0000-new.rb
|
223
|
-
- specs/as_ruby/0010-attrs.rb
|
224
|
-
- specs/as_ruby/0011-class.rb
|
225
|
-
- specs/as_ruby/0011-href.rb
|
226
|
-
- specs/as_ruby/0011-id.rb
|
227
|
-
- specs/as_ruby/0020-tag.rb
|
228
|
-
- specs/as_ruby/0020-tag_content.rb
|
229
|
-
- specs/as_ruby/0021-body.rb
|
230
|
-
- specs/as_ruby/0021-form.rb
|
231
|
-
- specs/as_ruby/0021-link.rb
|
232
|
-
- specs/as_ruby/0021-script.rb
|
233
|
-
- specs/as_ruby/0030-mustache.rb
|
234
|
-
- specs/as_ruby/0040-css.rb
|
235
|
-
- specs/as_ruby/0050-on.rb
|
236
222
|
- specs/client-side/index.html
|
237
223
|
- specs/client-side/index.js
|
238
224
|
- specs/lib/config.ru
|
239
225
|
- specs/lib/helpers.rb
|
240
226
|
- specs/lib/qunit/qunit-1.15.0.css
|
241
227
|
- specs/lib/qunit/qunit-1.15.0.js
|
242
|
-
- specs/lib/sample.rb
|
243
|
-
- specs/sampe.2.rb
|
244
|
-
- specs/sample.3.rb
|
245
228
|
- specs/sample.rb
|
229
|
+
- specs/server-side/0000-new.rb
|
230
|
+
- specs/server-side/0010-attrs.rb
|
231
|
+
- specs/server-side/0011-class.rb
|
232
|
+
- specs/server-side/0011-href.rb
|
233
|
+
- specs/server-side/0011-id.rb
|
234
|
+
- specs/server-side/0020-tag.rb
|
235
|
+
- specs/server-side/0020-tag_content.rb
|
236
|
+
- specs/server-side/0021-body.rb
|
237
|
+
- specs/server-side/0021-form.rb
|
238
|
+
- specs/server-side/0021-link.rb
|
239
|
+
- specs/server-side/0021-page_title.rb
|
240
|
+
- specs/server-side/0021-script.rb
|
241
|
+
- specs/server-side/0030-mustache.rb
|
242
|
+
- specs/server-side/0030-style.rb
|
243
|
+
- specs/server-side/0040-css.rb
|
244
|
+
- specs/server-side/0041-font_family.rb
|
245
|
+
- specs/server-side/0050-on.rb
|
246
246
|
- www_app.gemspec
|
247
247
|
homepage: https://github.com/da99/www_app
|
248
248
|
licenses:
|
data/specs/lib/sample.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
|
2
|
-
title "Hello, World!"
|
3
|
-
|
4
|
-
form {
|
5
|
-
button "send"
|
6
|
-
}
|
7
|
-
|
8
|
-
|
9
|
-
col.c_1! {
|
10
|
-
box {
|
11
|
-
p.first!.hello { "Hiya" }
|
12
|
-
}
|
13
|
-
}
|
14
|
-
|
15
|
-
col.c_2! {
|
16
|
-
box {
|
17
|
-
p.second!.hello.again {
|
18
|
-
border "1px solid #fff"
|
19
|
-
"Hiya, again."
|
20
|
-
}
|
21
|
-
}
|
22
|
-
}
|
23
|
-
|
data/specs/sampe.2.rb
DELETED