htmr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in htmr.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "htmr/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "htmr"
7
+ s.version = HTMr::VERSION
8
+ s.authors = ["James Birtles"]
9
+ s.email = ["itsme@jamesbirtles.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{HTMr is a way of writing html in ruby}
12
+ s.description = %q{HTMr is a way of writing html (and a bit of javascript) in ruby}
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_development_dependency "pry"
19
+ end
@@ -0,0 +1,6 @@
1
+ require "htmr/version"
2
+ require "htmr/application"
3
+
4
+ module HTMr
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,96 @@
1
+ module HTMr
2
+ class Application
3
+ def method_missing(name, *args, &block)
4
+ if @type == :js
5
+ @cur_elem = name
6
+ else
7
+ if name == :on
8
+ # TODO: do something with javascript
9
+ else
10
+ name = :p if name == :para
11
+ @elem_depth[name] = {:properties => {}}
12
+ unless args[0].class == Hash
13
+ @elem_depth[name][:properties].merge!({ :text => args[0] })
14
+ args.delete_at 0
15
+ end
16
+ @elem_depth[name][:properties].merge!(args[0]) unless args.empty?
17
+ old_elem_depth = @elem_depth
18
+ prev_elem = @cur_elem
19
+ @elem_depth = @elem_depth[name]
20
+ @cur_elem = name
21
+ instance_eval &block if block
22
+ @cur_elem = prev_elem
23
+ @elem_depth = old_elem_depth
24
+ end
25
+ end
26
+ end
27
+
28
+ def p *args, &block
29
+ para *args, &block
30
+ end
31
+
32
+ def initialize(title, &block)
33
+ puts "Creating new app called '#{title}'"
34
+ @elements = {
35
+ :html => {
36
+ :head => {
37
+ :title => {
38
+ :properties => {
39
+ :text => title
40
+ }
41
+ }
42
+ },
43
+ :body => {}
44
+ }
45
+ }
46
+ @elem_depth = @elements[:html][:body]
47
+ @cur_elem = :body
48
+ @type = :html
49
+ @indent = 0
50
+ instance_eval &block if block
51
+ end
52
+
53
+ def render
54
+ render_each @elements
55
+ end
56
+
57
+ private
58
+ def generate_js_from_block &block
59
+ @type = :js
60
+ instance_eval &block
61
+ @type = :html
62
+ end
63
+
64
+ def render_each elements
65
+ render = ""
66
+ elements.each do |element, hash|
67
+ if element == :properties
68
+ render = element
69
+ break
70
+ else
71
+ @indent += 1
72
+ props = ""
73
+ text = ""
74
+ content = render_each(hash)
75
+ if content == :properties
76
+ properties = hash[:properties]
77
+ properties.each do |property, value|
78
+ if property == :text
79
+ text << value
80
+ else
81
+ props << " #{property.to_s}=\"#{value}\""
82
+ end
83
+ end
84
+
85
+ hash.delete(:properties)
86
+ content = render_each(hash)
87
+ end
88
+ text = "#{" " * @indent}#{text}\n" unless text == ""
89
+ render << "#{" " * (@indent - 1)}<#{element.to_s}#{props}>\n#{text}#{content}#{" " * (@indent -1 )}</#{element.to_s}>\n"
90
+ @indent -= 1
91
+ end
92
+ end
93
+ render
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,6 @@
1
+ module HTMr
2
+ MAJOR = "0"
3
+ MINOR = "0"
4
+ PATCH = "1"
5
+ VERSION = [MAJOR, MINOR, PATCH].join('.')
6
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ $:.push File.expand_path("../../lib", __FILE__)
3
+
4
+ require 'pry'
5
+ require "htmr"
6
+ puts "Starting HTMr prompt"
7
+ Pry.new.repl
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ $:.push File.expand_path("../../lib", __FILE__)
3
+ require "htmr"
4
+
5
+ app = HTMr::Application.new "My App" do
6
+ header :width => "500", :style => "color: white;" do
7
+ h1 "Hello World", :style => "color: black;" do
8
+ on :click, %Q{
9
+ clicked = document.getElementById("clicked");
10
+ clicked.innerHTML = "You clicked a #{@cur_elem} tag!"
11
+ }
12
+ end
13
+ end
14
+ section "hi" do
15
+ p "hello", :style => "color: black;" do
16
+ p "world" do
17
+ on :click, %Q{
18
+ clicked = document.getElementById("clicked");
19
+ clicked.innerHTML = "You clicked a #{@cur_elem} tag!"
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ puts app.render
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: htmr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - James Birtles
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-25 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: pry
16
+ requirement: &70335081175740 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70335081175740
25
+ description: HTMr is a way of writing html (and a bit of javascript) in ruby
26
+ email:
27
+ - itsme@jamesbirtles.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - Rakefile
35
+ - htmr.gemspec
36
+ - lib/htmr.rb
37
+ - lib/htmr/application.rb
38
+ - lib/htmr/version.rb
39
+ - script/console
40
+ - script/test
41
+ homepage: ''
42
+ licenses: []
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 1.8.10
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: HTMr is a way of writing html in ruby
65
+ test_files: []