opalla 0.1.0 → 0.1.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.
@@ -0,0 +1,168 @@
1
+ module Opalla
2
+ module TagHelper
3
+ BOOLEAN_ATTRIBUTES = %w(allowfullscreen async autofocus autoplay checked
4
+ compact controls declare default defaultchecked
5
+ defaultmuted defaultselected defer disabled
6
+ enabled formnovalidate hidden indeterminate inert
7
+ ismap itemscope loop multiple muted nohref
8
+ noresize noshade novalidate nowrap open
9
+ pauseonexit readonly required reversed scoped
10
+ seamless selected sortable truespeed typemustmatch
11
+ visible).to_set
12
+
13
+ BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES.map(&:to_sym))
14
+
15
+ TAG_PREFIXES = ["aria", "data", :aria, :data].to_set
16
+
17
+ PRE_CONTENT_STRINGS = Hash.new { "" }
18
+ PRE_CONTENT_STRINGS[:textarea] = "\n"
19
+ PRE_CONTENT_STRINGS["textarea"] = "\n"
20
+
21
+ class TagBuilder #:nodoc:
22
+ VOID_ELEMENTS = %i(area base br col embed hr img input keygen link meta param source track wbr).to_set
23
+
24
+ def initialize(view_context)
25
+ @view_context = view_context
26
+ end
27
+
28
+ def tag_string(name, content = nil, escape_attributes: true, **options, &block)
29
+ content = @view_context.capture(self, &block) if block_given?
30
+ if VOID_ELEMENTS.include?(name) && content.nil?
31
+ "<#{name.to_s.dasherize}#{tag_options(options, escape_attributes)}>"
32
+ else
33
+ content_tag_string(name.to_s.dasherize, content || "", options, escape_attributes)
34
+ end
35
+ end
36
+
37
+ def content_tag_string(name, content, options, escape = true)
38
+ tag_options = tag_options(options, escape) if options
39
+ "<#{name}#{tag_options}>#{PRE_CONTENT_STRINGS[name]}#{content}</#{name}>"
40
+ end
41
+
42
+ def tag_options(options, escape = true)
43
+ return if options.blank?
44
+ output = "".dup
45
+ sep = " "
46
+ options.each_pair do |key, value|
47
+ if TAG_PREFIXES.include?(key) && value.is_a?(Hash)
48
+ value.each_pair do |k, v|
49
+ next if v.nil?
50
+ output += sep
51
+ output += prefix_tag_option(key, k, v, escape)
52
+ end
53
+ elsif BOOLEAN_ATTRIBUTES.include?(key)
54
+ if value
55
+ output += sep
56
+ output += boolean_tag_option(key)
57
+ end
58
+ elsif !value.nil?
59
+ output += sep
60
+ output += tag_option(key, value, escape)
61
+ end
62
+ end
63
+ output unless output.empty?
64
+ end
65
+
66
+ def boolean_tag_option(key)
67
+ %(#{key}="#{key}")
68
+ end
69
+
70
+ def tag_option(key, value, escape)
71
+ if value.is_a?(Array)
72
+ value = value.join(" ".freeze)
73
+ else
74
+ value = value.to_s
75
+ end
76
+ %(#{key}="#{value.gsub('"'.freeze, '&quot;'.freeze)}")
77
+ end
78
+
79
+ private
80
+ def prefix_tag_option(prefix, key, value, escape)
81
+ key = "#{prefix}-#{key.to_s.dasherize}"
82
+ unless value.is_a?(String) || value.is_a?(Symbol) || value.is_a?(Numeric)
83
+ value = value.to_json
84
+ end
85
+ tag_option(key, value, escape)
86
+ end
87
+
88
+ def respond_to_missing?(*args)
89
+ true
90
+ end
91
+
92
+ def method_missing(called, *args, &block)
93
+ tag_string(called, *args, &block)
94
+ end
95
+ end
96
+
97
+ def tag(name = nil, options = nil, open = false, escape = true)
98
+ if name.nil?
99
+ tag_builder
100
+ else
101
+ "<#{name}#{tag_builder.tag_options(options, escape) if options}#{open ? ">" : " />"}"
102
+ end
103
+ end
104
+
105
+ def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
106
+ if block_given?
107
+ options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
108
+ tag_builder.content_tag_string(name, capture(&block), options, escape)
109
+ else
110
+ tag_builder.content_tag_string(name, content_or_options_with_block, options, escape)
111
+ end
112
+ end
113
+
114
+ def cdata_section(content)
115
+ splitted = content.to_s.gsub(/\]\]\>/, "]]]]><![CDATA[>")
116
+ "<![CDATA[#{splitted}]]>"
117
+ end
118
+
119
+ def escape_once(html)
120
+ ERB::Util.html_escape_once(html)
121
+ end
122
+
123
+ private
124
+ def tag_builder
125
+ @tag_builder ||= TagBuilder.new(self)
126
+ end
127
+ end
128
+
129
+ module ViewHelper
130
+ def link_to(name = nil, options = nil, html_options = nil, &block)
131
+ html_options, options, name = options, name, block if block_given?
132
+ options ||= {}
133
+
134
+ html_options = convert_options_to_data_attributes(options, html_options)
135
+
136
+ url = options
137
+ html_options["href".freeze] ||= url
138
+
139
+ content_tag("a".freeze, name || url, html_options, &block)
140
+ end
141
+
142
+ def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
143
+ if block_given?
144
+ options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
145
+ tag_builder.content_tag_string(name, capture(&block), options, escape)
146
+ else
147
+ tag_builder.content_tag_string(name, content_or_options_with_block, options, escape)
148
+ end
149
+ end
150
+
151
+ protected
152
+
153
+ def tag_builder
154
+ @tag_builder ||= Opalla::TagHelper::TagBuilder.new
155
+ end
156
+
157
+ def convert_options_to_data_attributes(options, html_options)
158
+ if html_options
159
+
160
+ method = html_options.delete('method')
161
+
162
+ add_method_to_attributes!(html_options, method) if method
163
+
164
+ html_options
165
+ end
166
+ end
167
+ end
168
+ end
@@ -31,4 +31,12 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_development_dependency "bundler", "~> 1.14"
33
33
  spec.add_development_dependency "rake", "~> 10.0"
34
+
35
+ spec.add_dependency 'activesupport'
36
+ spec.add_dependency 'opal'
37
+ spec.add_dependency 'opal-jquery'
38
+ spec.add_dependency 'opal-browser'
39
+ spec.add_dependency 'opal-activesupport'
40
+ spec.add_dependency 'opal-rails', '0.9.3'
41
+
34
42
  end
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opalla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pedro Maciel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-15 00:00:00.000000000 Z
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,90 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: opal
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: opal-jquery
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: opal-browser
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: opal-activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: opal-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.3
41
125
  description:
42
126
  email:
43
127
  - pedrozath@gmail.com
@@ -54,8 +138,31 @@ files:
54
138
  - bin/console
55
139
  - bin/setup
56
140
  - lib/opalla.rb
141
+ - lib/opalla/component_helper.rb
142
+ - lib/opalla/controller_add_on.rb
143
+ - lib/opalla/engine.rb
144
+ - lib/opalla/middleware.rb
145
+ - lib/opalla/util.rb
57
146
  - lib/opalla/version.rb
147
+ - lib/rails/generators/opalla/assets_generator.rb
148
+ - lib/rails/generators/opalla/collection_generator.rb
149
+ - lib/rails/generators/opalla/component_generator.rb
150
+ - lib/rails/generators/opalla/install_generator.rb
151
+ - lib/rails/generators/opalla/model_generator.rb
152
+ - opal/collection.rb
153
+ - opal/component.rb
154
+ - opal/controller.rb
155
+ - opal/diffDOM.js
156
+ - opal/diff_dom.rb
157
+ - opal/element.rb
158
+ - opal/hex_random.rb
159
+ - opal/model.rb
160
+ - opal/opalla.rb
161
+ - opal/router.rb
162
+ - opal/sha1.js
163
+ - opal/view_helper.rb
58
164
  - opalla.gemspec
165
+ - opalla.gif
59
166
  homepage: http://github.com/pedrozath/opalla
60
167
  licenses:
61
168
  - MIT