www_app 1.0.1 → 1.1.0

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: 314db5f05be4d54977a9370a2e673eb5c565bd68
4
- data.tar.gz: aeca39fff563301a42e6478099b711166d88ca90
3
+ metadata.gz: fbfdf7458b157b502e9cf03a522b7d3d41883a6e
4
+ data.tar.gz: dff3da5abcc509526f77e5b511306c5f113e4a9a
5
5
  SHA512:
6
- metadata.gz: d3be19391e62718cd337f6c2a1a428bd0608a89fc60eb970985e04d02432cb361d8713764f5d5dc0ca872e4a7b54de7d379b5cc85a123afee57c1644d7f0642e
7
- data.tar.gz: 3900d7a3efe2b6bdc378b68b4fb6d9d4fe65e3ebcdf697a5a17a77e9d8be8aeb4aeda4497705630e0e6249495aed878c99799650cbd424698b023960644da0af
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
- div {
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
- border '1px solid #000'
25
- background_color 'grey'
32
+ div {
26
33
 
27
- on('scary') {
28
- border '2px dotted red'
29
- background_color 'white'
30
- }
34
+ border '1px solid #000'
35
+ background_color 'grey'
31
36
 
32
- p { 'Click the button to make me scared.' }
37
+ on('scary') {
38
+ border '2px dotted red'
39
+ background_color 'white'
40
+ }
33
41
 
34
- button {
35
- parent 'div'
36
- add_class 'scary'
42
+ p { 'Click the button to make me scared.' }
37
43
 
38
- 'Scary-ify'
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.1.0
@@ -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) :
@@ -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
 
@@ -0,0 +1,11 @@
1
+
2
+ describe "page_title" do
3
+
4
+ it "creates only one :title tag" do
5
+ WWW_App.new {
6
+ page_title { 'yo' }
7
+ }.render.scan(/<title>[^>]+<\/title>/).
8
+ should == ['<title>yo</title>']
9
+ end # === it creates on :title tag
10
+
11
+ end # === describe "page_title"
@@ -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="&#47;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"
@@ -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
@@ -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" , ">= 0.2"
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.1
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-01-22 00:00:00.000000000 Z
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: '0.2'
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: '0.2'
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:
@@ -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
-
@@ -1,14 +0,0 @@
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
-
@@ -1,17 +0,0 @@
1
-
2
- I am ...
3
- I am bored.
4
- I am happy.
5
- I am Batman.
6
- I am busy.
7
-
8
- Contest:
9
- Page:
10
- Note:
11
- Random thought:
12
- New Command:
13
- Make me laugh.
14
-
15
- It is friends only.
16
-
17
-