markaby 0.7.0 → 0.8.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.
Files changed (73) hide show
  1. data/.gitignore +19 -3
  2. data/CHANGELOG.rdoc +4 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lock +22 -0
  5. data/Markaby.gemspec +20 -118
  6. data/README.rdoc +20 -96
  7. data/Rakefile +20 -50
  8. data/VERSION +1 -1
  9. data/lib/markaby/builder.rb +25 -4
  10. data/lib/markaby/builder_tags.rb +22 -2
  11. data/lib/markaby/kernel_method.rb +1 -0
  12. data/lib/markaby/tags.rb +97 -1
  13. data/lib/markaby/version.rb +3 -0
  14. data/lib/markaby.rb +2 -6
  15. data/spec/markaby/css_proxy_spec.rb +12 -17
  16. data/spec/markaby/html5_spec.rb +100 -0
  17. data/spec/markaby/markaby_spec.rb +10 -69
  18. data/spec/markaby/markaby_test_unit_spec.rb +251 -0
  19. data/spec/spec_helper.rb +4 -6
  20. metadata +85 -124
  21. data/garlic.rb +0 -29
  22. data/init.rb +0 -6
  23. data/lib/markaby/rails/current.rb +0 -85
  24. data/lib/markaby/rails/deprecated.rb +0 -124
  25. data/lib/markaby/rails/rails_builder.rb +0 -74
  26. data/lib/markaby/rails.rb +0 -75
  27. data/lib/markaby/sinatra.rb +0 -18
  28. data/lib/markaby/tilt.rb +0 -42
  29. data/spec/markaby/markaby_other_static.mab +0 -1
  30. data/spec/markaby/rails/spec_helper.rb +0 -29
  31. data/spec/markaby/rails/views/layouts/layout.mab +0 -11
  32. data/spec/markaby/rails/views/markaby/_a_partial.mab +0 -3
  33. data/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +0 -1
  34. data/spec/markaby/rails/views/markaby/access_to_helpers.mab +0 -1
  35. data/spec/markaby/rails/views/markaby/broken.mab +0 -7
  36. data/spec/markaby/rails/views/markaby/commented_out_template.mab +0 -1
  37. data/spec/markaby/rails/views/markaby/correct_template_values.mab +0 -5
  38. data/spec/markaby/rails/views/markaby/double_output.mab +0 -8
  39. data/spec/markaby/rails/views/markaby/form_for.mab +0 -2
  40. data/spec/markaby/rails/views/markaby/form_for_with_fields.mab +0 -3
  41. data/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +0 -4
  42. data/spec/markaby/rails/views/markaby/no_values_passed.mab +0 -3
  43. data/spec/markaby/rails/views/markaby/partial_parent.mab +0 -1
  44. data/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +0 -7
  45. data/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +0 -1
  46. data/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
  47. data/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +0 -3
  48. data/spec/markaby/rails/views/markaby/render_with_ivar.mab +0 -3
  49. data/spec/markaby/rails/views/markaby/renders_erb.rhtml +0 -1
  50. data/spec/markaby/rails/views/markaby/routes.mab +0 -1
  51. data/spec/markaby/rails/views/markaby/yielding.mab +0 -3
  52. data/spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab +0 -5
  53. data/spec/markaby/rails/views/markaby/yielding_two.mab +0 -7
  54. data/spec/markaby/rails/views/markaby/yielding_with_content_for.mab +0 -3
  55. data/spec/markaby/rails_spec.rb +0 -361
  56. data/spec/markaby/rails_version_spec.rb +0 -37
  57. data/spec/markaby/sinatra/app.rb +0 -49
  58. data/spec/markaby/sinatra/sinatra_spec.rb +0 -64
  59. data/spec/markaby/sinatra/views/helpers.mab +0 -1
  60. data/spec/markaby/sinatra/views/layout.mab +0 -7
  61. data/spec/markaby/sinatra/views/markaby_template.mab +0 -0
  62. data/spec/markaby/sinatra/views/scope_instance_variables.mab +0 -3
  63. data/spec/markaby/sinatra/views/simple_html.mab +0 -4
  64. data/spec/markaby/sinatra/views/variables.mab +0 -3
  65. data/spec/markaby/tilt/erb.erb +0 -1
  66. data/spec/markaby/tilt/locals.mab +0 -1
  67. data/spec/markaby/tilt/markaby.mab +0 -1
  68. data/spec/markaby/tilt/markaby_other_static.mab +0 -1
  69. data/spec/markaby/tilt/render_twice.mab +0 -1
  70. data/spec/markaby/tilt/scope.mab +0 -1
  71. data/spec/markaby/tilt/yielding.mab +0 -2
  72. data/spec/markaby/tilt_spec.rb +0 -75
  73. /data/{spec/spec.opts → .rspec} +0 -0
data/.gitignore CHANGED
@@ -1,5 +1,21 @@
1
- doc
2
- coverage
3
1
  .garlic
4
2
  pkg
5
- _site
3
+ _site
4
+
5
+ *.gem
6
+ *.rbc
7
+ .bundle
8
+ .config
9
+ .yardoc
10
+ Gemfile.lock
11
+ InstalledFiles
12
+ _yardoc
13
+ coverage
14
+ doc/
15
+ lib/bundler/man
16
+ pkg
17
+ rdoc
18
+ spec/reports
19
+ test/tmp
20
+ test/version_tmp
21
+ tmp
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ = 0.7.1 (2010-08-19)
2
+
3
+ * Rails fixes for form_for called from erb templates
4
+
1
5
  = 0.7.0
2
6
 
3
7
  * Sinatra 1.0 support
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'builder'
4
+
5
+ group :test do
6
+ gem 'rake'
7
+ gem 'rspec'
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ builder (3.2.2)
5
+ diff-lcs (1.2.5)
6
+ rake (10.1.0)
7
+ rspec (2.14.1)
8
+ rspec-core (~> 2.14.0)
9
+ rspec-expectations (~> 2.14.0)
10
+ rspec-mocks (~> 2.14.0)
11
+ rspec-core (2.14.7)
12
+ rspec-expectations (2.14.4)
13
+ diff-lcs (>= 1.1.3, < 2.0)
14
+ rspec-mocks (2.14.4)
15
+
16
+ PLATFORMS
17
+ ruby
18
+
19
+ DEPENDENCIES
20
+ builder
21
+ rake
22
+ rspec
data/Markaby.gemspec CHANGED
@@ -1,122 +1,24 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'markaby/version'
5
5
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{markaby}
8
- s.version = "0.7.0"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "markaby"
8
+ spec.version = Markaby::VERSION
9
+ spec.authors = ["Scott Taylor", "judofyr", "_why"]
10
+ spec.email = ["scott@railsnewbie.com"]
11
+ spec.description = "_why's markaby templating language"
12
+ spec.summary = "A pure ruby based, html markup language"
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
9
15
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["_why", "Tim Fletcher", "John Barton", "spox", "smtlaissezfaire"]
12
- s.date = %q{2010-08-15}
13
- s.description = %q{Tim Fletcher and _why's ruby driven HTML templating system}
14
- s.email = %q{scott@railsnewbie.com}
15
- s.extra_rdoc_files = [
16
- "README.rdoc"
17
- ]
18
- s.files = [
19
- ".gitignore",
20
- "CHANGELOG.rdoc",
21
- "Markaby.gemspec",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "garlic.rb",
26
- "init.rb",
27
- "lib/markaby.rb",
28
- "lib/markaby/builder.rb",
29
- "lib/markaby/builder_tags.rb",
30
- "lib/markaby/cssproxy.rb",
31
- "lib/markaby/kernel_method.rb",
32
- "lib/markaby/rails.rb",
33
- "lib/markaby/rails/current.rb",
34
- "lib/markaby/rails/deprecated.rb",
35
- "lib/markaby/rails/rails_builder.rb",
36
- "lib/markaby/sinatra.rb",
37
- "lib/markaby/tags.rb",
38
- "lib/markaby/tilt.rb",
39
- "spec/markaby/builder_spec.rb",
40
- "spec/markaby/css_proxy_spec.rb",
41
- "spec/markaby/fragment_spec.rb",
42
- "spec/markaby/markaby_other_static.mab",
43
- "spec/markaby/markaby_spec.rb",
44
- "spec/markaby/rails/spec_helper.rb",
45
- "spec/markaby/rails/views/layouts/layout.mab",
46
- "spec/markaby/rails/views/markaby/_a_partial.mab",
47
- "spec/markaby/rails/views/markaby/_partial_child_with_locals.mab",
48
- "spec/markaby/rails/views/markaby/access_to_helpers.mab",
49
- "spec/markaby/rails/views/markaby/broken.mab",
50
- "spec/markaby/rails/views/markaby/commented_out_template.mab",
51
- "spec/markaby/rails/views/markaby/correct_template_values.mab",
52
- "spec/markaby/rails/views/markaby/double_output.mab",
53
- "spec/markaby/rails/views/markaby/form_for.mab",
54
- "spec/markaby/rails/views/markaby/form_for_with_fields.mab",
55
- "spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab",
56
- "spec/markaby/rails/views/markaby/no_values_passed.mab",
57
- "spec/markaby/rails/views/markaby/partial_parent.mab",
58
- "spec/markaby/rails/views/markaby/partial_parent_with_locals.mab",
59
- "spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb",
60
- "spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab",
61
- "spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab",
62
- "spec/markaby/rails/views/markaby/render_with_ivar.mab",
63
- "spec/markaby/rails/views/markaby/renders_erb.rhtml",
64
- "spec/markaby/rails/views/markaby/routes.mab",
65
- "spec/markaby/rails/views/markaby/yielding.mab",
66
- "spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab",
67
- "spec/markaby/rails/views/markaby/yielding_two.mab",
68
- "spec/markaby/rails/views/markaby/yielding_with_content_for.mab",
69
- "spec/markaby/rails_spec.rb",
70
- "spec/markaby/rails_version_spec.rb",
71
- "spec/markaby/sinatra/app.rb",
72
- "spec/markaby/sinatra/sinatra_spec.rb",
73
- "spec/markaby/sinatra/views/helpers.mab",
74
- "spec/markaby/sinatra/views/layout.mab",
75
- "spec/markaby/sinatra/views/markaby_template.mab",
76
- "spec/markaby/sinatra/views/scope_instance_variables.mab",
77
- "spec/markaby/sinatra/views/simple_html.mab",
78
- "spec/markaby/sinatra/views/variables.mab",
79
- "spec/markaby/tilt/erb.erb",
80
- "spec/markaby/tilt/locals.mab",
81
- "spec/markaby/tilt/markaby.mab",
82
- "spec/markaby/tilt/markaby_other_static.mab",
83
- "spec/markaby/tilt/render_twice.mab",
84
- "spec/markaby/tilt/scope.mab",
85
- "spec/markaby/tilt/yielding.mab",
86
- "spec/markaby/tilt_spec.rb",
87
- "spec/spec.opts",
88
- "spec/spec_helper.rb"
89
- ]
90
- s.homepage = %q{http://markaby.github.com/markaby/}
91
- s.rdoc_options = ["--charset=UTF-8"]
92
- s.require_paths = ["lib"]
93
- s.rubygems_version = %q{1.3.7}
94
- s.summary = %q{Markup as Ruby, write HTML in your native Ruby tongue}
95
- s.test_files = [
96
- "spec/markaby/builder_spec.rb",
97
- "spec/markaby/css_proxy_spec.rb",
98
- "spec/markaby/fragment_spec.rb",
99
- "spec/markaby/markaby_spec.rb",
100
- "spec/markaby/rails/spec_helper.rb",
101
- "spec/markaby/rails_spec.rb",
102
- "spec/markaby/rails_version_spec.rb",
103
- "spec/markaby/sinatra/app.rb",
104
- "spec/markaby/sinatra/sinatra_spec.rb",
105
- "spec/markaby/tilt_spec.rb",
106
- "spec/spec_helper.rb"
107
- ]
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
108
20
 
109
- if s.respond_to? :specification_version then
110
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
111
- s.specification_version = 3
112
-
113
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
114
- s.add_runtime_dependency(%q<builder>, [">= 2.0.0"])
115
- else
116
- s.add_dependency(%q<builder>, [">= 2.0.0"])
117
- end
118
- else
119
- s.add_dependency(%q<builder>, [">= 2.0.0"])
120
- end
21
+ spec.add_dependency "builder"
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake"
121
24
  end
122
-
data/README.rdoc CHANGED
@@ -5,75 +5,34 @@ It is an alternative to ERb which weaves the two languages together.
5
5
  Also a replacement for templating languages which use primitive languages
6
6
  that blend with HTML.
7
7
 
8
- == Using Markaby as a Rails plugin / gem
9
-
10
- Write Rails templates in pure Ruby. Example layout:
11
-
12
- html do
13
- head do
14
- title 'Products: ' + action_name
15
- stylesheet_link_tag 'scaffold'
16
- end
17
-
18
- body do
19
- p flash[:notice], :style => "color: green"
20
-
21
- div.signup! do
22
- form_for @user do |f|
23
- f.text_field :email
24
- end
25
- end
26
-
27
- yield
28
- end
29
- end
30
-
31
- Markaby templates end in .mab
32
-
33
- Markaby supports many versions of rails, including the latest rails:
34
-
35
- 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6, 2.2.0,
36
- 2.2.1, 2.2.2, 2.2.3, 2.3.1, 2.3.2, 2.3.2.1,
37
- 2.3.3, 2.3.3.1, 2.3.4, 2.3.5, 2.3.6, 2.3.7,
38
- 2.3.8
39
-
40
- Rails 3.0 support is planned.
41
-
42
- === Install it as a plugin
43
-
44
- script/plugin install git://github.com/markaby/markaby.git
45
-
46
8
  === Install it as a gem
47
9
 
48
10
  gem install markaby
49
11
 
50
- If you are loading it in a different way (from a gem), make sure
51
- it's on the $LOAD_PATH, and add the following in
52
- an initializer (config/initializers/markaby.rb will work):
53
-
54
- require 'markaby'
55
- require 'markaby/rails'
56
-
57
- Markaby::Rails.load
58
-
59
- Or, you could try config.gem, but that's now known as a bad idea.
60
-
61
-
62
12
  == Using Markaby with Sinatra (1.0+)
63
13
 
64
- require 'markaby/sinatra'
65
-
66
14
  get '/foo' do
67
15
  mab :my_template # my_template.mab in the sinatra view path
68
16
  end
69
17
 
70
18
  If you are looking for sinatra support pre 0.7, see http://github.com/sbfaulkner/sinatra-markaby
71
19
 
20
+ A note on Tilt - using markaby with html5 doesn't quite yet work properly. If you'd like to render a template with html 5, call this at the start of a .mab template:
21
+
22
+ enable_html5!
23
+
24
+ Or enable html 5 globally:
25
+
26
+ Markaby::Builder.class_eval do
27
+ @@options = Markaby::Builder::HTML5_OPTIONS
28
+ end
72
29
 
73
30
  == Using Markaby with other frameworks
74
31
 
75
- Markaby has a Tilt module, so in principle, any web framework that supports
76
- Tilt can/will also support Markaby.
32
+ Tilt has a Markaby module, so in principle, any web framework that supports
33
+ Tilt will also support Markaby. See the appropriate tilt documentation:
34
+
35
+ http://github.com/rtomayko/tilt
77
36
 
78
37
 
79
38
  == Using Markaby as a Ruby class
@@ -172,15 +131,15 @@ Which results in:
172
131
  == 3. Validate Your XHTML 1.0 Output
173
132
 
174
133
  If you'd like Markaby to help you assemble valid XHTML documents,
175
- you can use the <tt>xhtml_transitional</tt> or <tt>xhtml_strict</tt>
134
+ you can use the <tt>html5</tt>, <tt>xhtml_transitional</tt> or <tt>xhtml_strict</tt>
176
135
  methods in place of the normal <tt>html</tt> tag.
177
136
 
178
- xhtml_strict do
137
+ html5 do
179
138
  head { ... }
180
139
  body { ... }
181
140
  end
182
141
 
183
- This will add the XML instruction and the doctype tag to your document.
142
+ This will add the XML instruction and the doctype tag to your document (for xhtml_strict and xhtml_transitional).
184
143
  Also, a character set meta tag will be placed inside your <tt>head</tt>
185
144
  tag.
186
145
 
@@ -261,45 +220,6 @@ won't work with this technique.
261
220
  end
262
221
  end
263
222
 
264
- = A Note About Rails Helpers
265
-
266
- When used in Rails templates, the Rails helper object is passed into
267
- Markaby::Builder. When you call helper methods inside Markaby, the output
268
- from those methods will be output to the stream. This is incredibly
269
- handy, since most Rails helpers output HTML tags.
270
-
271
- head do
272
- javascript_include_tag 'prototype'
273
- autodiscovery_link_tag
274
- end
275
-
276
- However, some methods are designed to give back a String which you can use
277
- elsewhere. That's okay! Every method returns a Fragment object, which can
278
- be used as a string.
279
-
280
- p { "Total is: #{number_to_human_size @file_bytes}" }
281
-
282
- Also see the Quick Tour above, specifically the stuff about auto-stringification.
283
-
284
- If for any reason you have trouble with fragments, you can just
285
- call the <tt>@helpers</tt> object with the method and you'll get
286
- the String back and nothing will be output.
287
-
288
- p { "Total is: #{@helpers.number_to_human_size @file_bytes}" }
289
-
290
- Conversely, you may call instance variables from your controller by using
291
- a method and its value will be returned, nothing will be output.
292
-
293
- # Inside imaginary ProductController
294
- def list
295
- @products = Product.find :all
296
- end
297
-
298
- # Inside app/views/product/list.mab
299
- products.each do |product|
300
- p product.title
301
- end
302
-
303
223
  = Credits
304
224
 
305
225
  Markaby is a work of immense hope by Tim Fletcher and why the lucky stiff.
@@ -309,3 +229,7 @@ Thankyou for giving it a whirl.
309
229
  Markaby is inspired by the HTML library within cgi.rb. Hopefully it will
310
230
  turn around and take some cues.
311
231
 
232
+ == Patches from contributors:
233
+
234
+ aredridel (Aria Stewart - aredridel@nbtsc.org)
235
+ - Make exceptions inherit from StandardError (f259c0)
data/Rakefile CHANGED
@@ -1,42 +1,12 @@
1
1
  require 'rake'
2
- require 'spec/rake/spectask'
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
3
4
  require 'rake/clean'
4
5
 
5
- begin
6
- require 'hanna/rdoctask'
7
-
8
- Rake::RDocTask.new do |rdoc|
9
- rdoc.rdoc_dir = 'doc/rdoc'
10
- rdoc.options << '--line-numbers'
11
- rdoc.rdoc_files.add(['README.rdoc', 'CHANGELOG.rdoc', 'lib/**/*.rb'])
12
- end
13
- rescue LoadError
14
- puts "Could not load hanna-rdoc. Please install with mislav-hanna package"
15
- end
16
-
6
+ RSpec::Core::RakeTask.new(:spec)
17
7
  task :default => :spec
18
8
 
19
- desc 'Run the specs'
20
- Spec::Rake::SpecTask.new do |t|
21
- t.warning = false
22
- t.spec_opts = ["--color"]
23
- end
24
-
25
- begin
26
- require 'jeweler'
27
-
28
- Jeweler::Tasks.new do |gemspec|
29
- gemspec.name = "markaby"
30
- gemspec.summary = "Markup as Ruby, write HTML in your native Ruby tongue"
31
- gemspec.description = "Tim Fletcher and _why's ruby driven HTML templating system"
32
- gemspec.email = "scott@railsnewbie.com"
33
- gemspec.homepage = "http://markaby.github.com/markaby/"
34
- gemspec.authors = ["_why", "Tim Fletcher", "John Barton", "spox", "smtlaissezfaire"]
35
- gemspec.add_dependency 'builder', '>=2.0.0'
36
- end
37
- rescue LoadError
38
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
39
- end
9
+ Bundler::GemHelper.install_tasks
40
10
 
41
11
  desc "List any Markaby specific warnings"
42
12
  task :warnings do
@@ -59,19 +29,19 @@ namespace :gemspec do
59
29
  end
60
30
  end
61
31
 
62
- namespace :release do
63
- task :patch => [:spec, "version:bump:patch", :update_gemspec, :rerdoc, :tag_release, :build, :push_tags]
64
-
65
- task :update_gemspec => ["gemspec:generate", "gemspec:validate", "gemspec:commit"]
66
- task :tag_release do
67
- require File.dirname(__FILE__) + "/lib/markaby"
68
- version = "v#{Markaby::VERSION}"
69
- sh "git tag #{version}"
70
- end
71
-
72
- task :push_tags do
73
- sh "git push --tags"
74
- end
75
- end
76
-
77
- task :release => "release:patch"
32
+ # namespace :release do
33
+ # task :patch => [:spec, "version:bump:patch", :update_gemspec, :rerdoc, :tag_release, :build, :push_tags]
34
+ #
35
+ # task :update_gemspec => ["gemspec:generate", "gemspec:validate", "gemspec:commit"]
36
+ # task :tag_release do
37
+ # require File.dirname(__FILE__) + "/lib/markaby"
38
+ # version = "v#{Markaby::VERSION}"
39
+ # sh "git tag #{version}"
40
+ # end
41
+ #
42
+ # task :push_tags do
43
+ # sh "git push --tags"
44
+ # end
45
+ # end
46
+ #
47
+ # task :release => "release:patch"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.7.2
@@ -28,7 +28,7 @@ module Markaby
28
28
  :indent => 0,
29
29
  :output_helpers => true,
30
30
  :output_xml_instruction => true,
31
- :output_meta_tag => true,
31
+ :output_meta_tag => 'xhtml',
32
32
  :auto_validation => true,
33
33
  :tagset => Markaby::XHTMLTransitional,
34
34
  :root_attributes => {
@@ -38,12 +38,26 @@ module Markaby
38
38
  }
39
39
  }
40
40
 
41
+ HTML5_OPTIONS = {
42
+ :indent => 0,
43
+ :output_helpers => true,
44
+ :output_xml_instruction => false,
45
+ :output_meta_tag => 'html5',
46
+ :auto_validation => true,
47
+ :tagset => Markaby::HTML5,
48
+ :root_attributes => {}
49
+ }
50
+
41
51
  @@options = DEFAULT_OPTIONS.dup
42
52
 
43
53
  def self.restore_defaults!
44
54
  @@options = DEFAULT_OPTIONS.dup
45
55
  end
46
56
 
57
+ def self.set_html5_options!
58
+ @@options = HTML5_OPTIONS.dup
59
+ end
60
+
47
61
  def self.set(option, value)
48
62
  @@options[option] = value
49
63
  end
@@ -178,6 +192,13 @@ module Markaby
178
192
  raise InvalidXhtmlError, "id `#{ele_id}' already used (id's must be unique)."
179
193
  end
180
194
  end
195
+ if AttrsBoolean.include? atname
196
+ if v
197
+ attrs[k] = atname.to_s
198
+ else
199
+ attrs.delete k
200
+ end
201
+ end
181
202
  end
182
203
  end
183
204
  end
@@ -187,7 +208,7 @@ module Markaby
187
208
  block = proc { text(str) }
188
209
  end
189
210
 
190
- f = fragment { @builder.method_missing(tag, *args, &block) }
211
+ f = fragment { @builder.tag!(tag, *args, &block) }
191
212
  @used_ids[ele_id] = f if ele_id
192
213
  f
193
214
  end
@@ -276,8 +297,8 @@ module Markaby
276
297
  @transformed_stream = false
277
298
  end
278
299
 
279
- if RUBY_VERSION_ID >= 191
280
- undef_method :to_s, :inspect, :==
300
+ [:to_s, :inspect, :==].each do |method|
301
+ undef_method method if method_defined?(method)
281
302
  end
282
303
 
283
304
  private
@@ -1,6 +1,6 @@
1
1
  module Markaby
2
2
  module BuilderTags
3
- (XHTMLTransitional.tags - [:head]).each do |k|
3
+ (HTML5.tags - [:head]).each do |k|
4
4
  class_eval <<-CODE, __FILE__, __LINE__
5
5
  def #{k}(*args, &block)
6
6
  html_tag(#{k.inspect}, *args, &block)
@@ -28,7 +28,8 @@ module Markaby
28
28
  # set to <tt>text/html; charset=utf-8</tt>.
29
29
  def head(*args, &block)
30
30
  tag!(:head, *args) do
31
- tag!(:meta, "http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8") if @output_meta_tag
31
+ tag!(:meta, "http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8") if @output_meta_tag == 'xhtml'
32
+ tag!(:meta, "charset" => "utf-8") if @output_meta_tag == 'html5'
32
33
  instance_eval(&block)
33
34
  end
34
35
  end
@@ -53,6 +54,20 @@ module Markaby
53
54
  xhtml_html(attrs, &block)
54
55
  end
55
56
 
57
+ # Builds an html tag with HTML5 doctype instead.
58
+ def html5(attrs = {}, &block)
59
+ enable_html5!
60
+ html5_html(attrs, &block)
61
+ end
62
+
63
+ def enable_html5!
64
+ self.tagset = Markaby::HTML5
65
+
66
+ Markaby::Builder::HTML5_OPTIONS.each do |k, v|
67
+ self.instance_variable_set("@#{k}".to_sym, v)
68
+ end
69
+ end
70
+
56
71
  private
57
72
 
58
73
  def xhtml_html(attrs = {}, &block)
@@ -60,5 +75,10 @@ module Markaby
60
75
  declare!(:DOCTYPE, :html, :PUBLIC, *tagset.doctype)
61
76
  tag!(:html, @root_attributes.merge(attrs), &block)
62
77
  end
78
+
79
+ def html5_html(attrs = {}, &block)
80
+ declare!(:DOCTYPE, :html)
81
+ tag!(:html, @root_attributes.merge(attrs), &block)
82
+ end
63
83
  end
64
84
  end
@@ -5,3 +5,4 @@ module Kernel
5
5
  Markaby::Builder.new(*args, &block).to_s
6
6
  end
7
7
  end
8
+