framework7-rails 0.7.4.0 → 0.9.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +50 -45
  3. data/app/helpers/app_helper.rb +1 -1
  4. data/app/helpers/bar_helper.rb +45 -0
  5. data/app/helpers/bar_item_helper.rb +105 -0
  6. data/app/helpers/content_block_helper.rb +66 -0
  7. data/app/helpers/framework7_helper.rb +26 -0
  8. data/app/helpers/list_block_helper.rb +180 -0
  9. data/app/helpers/pages_helper.rb +66 -0
  10. data/app/helpers/panel_helper.rb +27 -0
  11. data/app/helpers/toolbar_helper.rb +52 -0
  12. data/app/helpers/views_helper.rb +36 -0
  13. data/app/presenters/framework7/base_presenter.rb +24 -0
  14. data/framework7-rails.gemspec +5 -1
  15. data/lib/framework7.rb +6 -0
  16. data/lib/framework7/rails/version.rb +1 -1
  17. data/lib/generators/f7/install/examples/examples_generator.rb +17 -0
  18. data/lib/generators/f7/install/examples/templates/app/controllers/examples_controller.rb +16 -0
  19. data/lib/generators/f7/install/examples/templates/app/views/examples/about.html.erb +27 -0
  20. data/lib/generators/f7/install/examples/templates/app/views/examples/form.html.erb +227 -0
  21. data/lib/generators/f7/install/examples/templates/app/views/examples/index.html.erb +80 -0
  22. data/lib/generators/f7/install/examples/templates/app/views/examples/services.html.erb +27 -0
  23. data/lib/generators/f7/install/install_generator.rb +1 -1
  24. data/lib/generators/f7/install/templates/application.css +1 -0
  25. data/lib/generators/f7/layout/layout_generator.rb +17 -3
  26. data/lib/generators/f7/layout/templates/layout.html.erb +9 -82
  27. data/lib/generators/f7/layout/templates/setup.coffee +10 -0
  28. data/lib/generators/f7/layout/templates/setup.js +12 -0
  29. data/vendor/assets/javascripts/framework7.js +5859 -1140
  30. data/vendor/assets/stylesheets/framework7.css +2569 -244
  31. data/vendor/assets/stylesheets/framework7.rtl.css +427 -0
  32. data/vendor/assets/stylesheets/framework7.themes.css +279 -0
  33. metadata +56 -15
  34. data/lib/generators/f7/layout/templates/app.js.coffee.erb +0 -77
  35. data/vendor/assets/images/i-form-checkbox-black.png +0 -0
  36. data/vendor/assets/images/i-form-checkbox-blue.png +0 -0
  37. data/vendor/assets/images/i-form-checkbox-white.png +0 -0
  38. data/vendor/assets/images/i-form-radio-black.png +0 -0
  39. data/vendor/assets/images/i-form-radio-blue.png +0 -0
  40. data/vendor/assets/images/i-form-radio-white.png +0 -0
  41. data/vendor/assets/javascripts/framework7.min.js +0 -16
  42. data/vendor/assets/stylesheets/framework7.min.css +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11e8ce51feb9ce116f9e303434a92a1168702abd
4
- data.tar.gz: 05db8570c39cc12a1871833824361c0b5212889c
3
+ metadata.gz: a2ba8e602132ea3cb757f45c6e4804b0fc467c9b
4
+ data.tar.gz: 2b292a842226449526496ec5c85953f136c57144
5
5
  SHA512:
6
- metadata.gz: c4fb08aebc439ceb2addcdc2a4db89c875f1071b16de2b958635f026004ef632028a09466518374b8fbe39a3ed752422da28a7a3278ed6a737903956935fc412
7
- data.tar.gz: 874adf1ae3ca6a6cca48d1f4dbaae755edaa9224caa8e5816af8aa8524c9201464fb0bf13493c4d42c17447e84302cd0dfd44138229b679ce380ad9a917d099a
6
+ metadata.gz: 1f29aa1226eac22f9555991ff787326b16c1fdfb17eccb0ac5e0d37295cf1afe27d71778b1a014b98e6c14f92bc109dd221df778cf08de81dc2972aa08ea1df9
7
+ data.tar.gz: 2a70ef7cb2876d16a5cb08168c442869a62ef6674615af2a2381cf77cf66b1f3a06317e6759e3a4b092f742a5221edcc4399dd59d9c5556a10ae241e8b595ae4
data/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/framework7-rails.svg)](http://badge.fury.io/rb/framework7-rails)
4
4
 
5
5
  Brings the excellent [Framework7](https://github.com/nolimits4web/framework7/)
6
- into the Rails 3.1+ Asset Pipeline.
6
+ into the Rails 3.1.x - 4.x Asset Pipeline.
7
7
 
8
- The gem version number ``x.y.z`` is kept in sync with the version of Framework7
8
+ The gem version number `x.y.z` is kept in sync with the version of Framework7
9
9
  being supported.
10
10
 
11
11
  ## Installation
@@ -13,6 +13,10 @@ being supported.
13
13
  Add this line to your application's Gemfile:
14
14
 
15
15
  gem 'framework7-rails'
16
+
17
+ If you want bleeding edge, not yet in ruby gems version, add this instead:
18
+
19
+ gem 'framework7-rails', :git => 'https://github.com/twss/framework7-rails.git'`
16
20
 
17
21
  And then execute:
18
22
 
@@ -30,8 +34,6 @@ The easiest way to set up ready for use is to use the generator
30
34
 
31
35
  You can do it manually if you want to, as outlined below:
32
36
 
33
- ### Development/Debugging
34
-
35
37
  In your application.js file, add the line:
36
38
 
37
39
  //= require framework7
@@ -39,16 +41,7 @@ In your application.js file, add the line:
39
41
  In your application.css file, add the line:
40
42
 
41
43
  *= require framework7
42
-
43
- ### Production
44
-
45
- In your application.js file, add the line:
46
-
47
- //= require framework7.min
48
-
49
- In your application.css file, add the line:
50
-
51
- *= require framework7.min
44
+ *= require framework7.theme
52
45
 
53
46
  ## Generators
54
47
 
@@ -60,33 +53,30 @@ This generator will add the necessary require statements as outlined above.
60
53
 
61
54
  This sets up an application-level layout, and will generate two files:
62
55
 
63
- app/assets/javascripts/<app_name>.js.coffee
56
+ app/assets/javascripts/<app_name>.js or app/assets/javascripts/<app_name>.coffee
64
57
  app/views/layouts/application.html.erb
65
-
66
- The javascript file creates a wrapping class around the main `Framework7` class.
67
- This new class is named after your application, an instance is created with the
68
- lower camel-cased application.
69
58
 
70
- e.g If you did `rails new contacts_app` the javascript file will contain:
59
+ For now, at least, the javascript generated has been scaled back, to be:
71
60
 
72
- var contactsApp;
73
-
74
- ContactsApp = function() {
75
- ...
76
- };
77
-
78
- contactsApp = new ContactsApp();
61
+ ```javascript
62
+ window.F7H = {
63
+ app: new Framework7(),
64
+ dom: Dom7
65
+ };
79
66
 
80
- If you ever need to get back to the Framework7 application instance, this is
81
- achieved as follows:
67
+ window.Phone = {
68
+ Views: {}
69
+ };
70
+
71
+ Phone.Views.Main = F7H.app.addView('.view-main', {
72
+ dynamicNavbar: true
73
+ });
74
+ ```
75
+
76
+ ### f7:install:examples
77
+
78
+ *Removed, as they didn't really add anything of value.*
82
79
 
83
- app = contactsApp.getInstance();
84
-
85
- This may be necessary for future plans, but not too sure. For now it will be
86
- left in, but you can always fallback to the Framework7 native way of doing
87
- things by using the above line and never touching that `contactsApp` variable
88
- again.
89
-
90
80
  ### And there's more...
91
81
 
92
82
  To find out about the rest of the generators, be sure to
@@ -95,21 +85,36 @@ be updated as more become available.
95
85
 
96
86
  ## Helpers
97
87
 
98
- None yet, but this will be listed here, and refer to the [wiki] for the
99
- documentation.
88
+ Refer to the [wiki] for the usage/documentation.
89
+
90
+ * [f7_app]
91
+ * [f7_views]
92
+ * [f7_view]
93
+ * [f7_navbar]
94
+ * [f7_pages]
95
+ * [f7_page]
100
96
 
101
97
  ## Future Improvements
102
98
 
103
- Currently, the gem only brings in the assets. But it is the intention to add
104
- layout/view generators and helpers.
99
+ In the immediate future we'd like to:
100
+
101
+ * Make the code a bit more DRY.
102
+ * Move all the grunt work out of the helpers, into Presenters/Decorators.
103
+ * Add javascript generation for the more dynamic elements.
105
104
 
106
105
  ## Contributing
107
106
 
108
- 1. Fork it ( http://github.com/twss/framework7-rails/fork )
109
- 2. Create your feature branch (`git checkout -b my-new-feature`)
110
- 3. Commit your changes (`git commit -am 'Add some feature'`)
111
- 4. Push to the branch (`git push origin my-new-feature`)
112
- 5. Create new Pull Request
107
+ 1. Fork it [http://github.com/twss/framework7-rails/fork](http://github.com/twss/framework7-rails/fork).
108
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
109
+ 3. Commit your changes (`git commit -am 'Add some feature'`).
110
+ 4. Push to the branch (`git push origin my-new-feature`).
111
+ 5. Create new Pull Request.
113
112
 
114
113
 
115
114
  [wiki]: https://github.com/twss/framework7-rails/wiki "wiki"
115
+ [f7_app]: https://github.com/twss/framework7-rails/wiki/helpers/f7_app
116
+ [f7_navbar]: https://github.com/twss/framework7-rails/wiki/helpers/f7_navbar
117
+ [f7_page]: https://github.com/twss/framework7-rails/wiki/helpers/f7_page
118
+ [f7_pages]: https://github.com/twss/framework7-rails/wiki/helpers/f7_pages
119
+ [f7_view]: https://github.com/twss/framework7-rails/wiki/helpers/f7_view
120
+ [f7_views]: https://github.com/twss/framework7-rails/wiki/helpers/f7_views
@@ -1,6 +1,6 @@
1
1
  module AppHelper
2
2
  # Provides the skeleton application layout ready to be customised
3
- def f7_app(options={}, &block)
3
+ def f7_app(*args, &block)
4
4
  output = []
5
5
  output << statusbar_overlay_div
6
6
  output << panel_overlay_div
@@ -0,0 +1,45 @@
1
+ module BarHelper
2
+
3
+ @f7_bartype = nil
4
+ @has_labels = false
5
+
6
+ def f7_navbar(html_options={}, &block)
7
+ @f7_bartype = :navbar
8
+
9
+ html_options[:class] = ([html_options[:class]] || []) << @f7_bartype
10
+
11
+ content_tag :div, html_options do
12
+ content_tag :div, :class => ['navbar-inner'] do
13
+ yield if block_given?
14
+ end
15
+ end
16
+ end
17
+
18
+ def f7_toolbar(options={}, &block)
19
+ @f7_bartype = :toolbar
20
+ css_classes = []
21
+ css_classes << @f7_bartype
22
+ css_classes += [options[:class]] if options[:class]
23
+ css_classes.flatten!
24
+
25
+ @f7_bartype = :tabbar if options[:type].to_s.include?('tabbar')
26
+
27
+ if @f7_bartype == :tabbar
28
+ css_classes << 'tabbar'
29
+ if options[:type] == :tabbar_labels
30
+ css_classes << 'tabbar-labels'
31
+ @has_labels = true
32
+ end
33
+ end
34
+ options[:class] = css_classes
35
+ div_options = options.reject { |k, v| [:type].include? k }
36
+
37
+ content_tag :div, div_options do
38
+ content_tag :div, :class => ['toolbar-inner'] do
39
+ yield if block_given?
40
+ end
41
+
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,105 @@
1
+ module BarItemHelper
2
+
3
+ def f7_bar_item(title_or_options, options=nil, &block)
4
+ output = []
5
+ if title_or_options.class == Hash
6
+ options = title_or_options
7
+ title = options[:title]
8
+ else
9
+ title = title_or_options
10
+ options ||= {}
11
+ options[:title] = title
12
+ end
13
+
14
+ position = (options[:position] || :left) unless @f7_bartype == :tabbar
15
+ transition = options[:tansition]
16
+
17
+ css_classes = []
18
+ css_classes << position
19
+ css_classes << [transition].flatten if options[:transition]
20
+ options[:class] = ([options[:class]] || []) + css_classes
21
+
22
+ html_options = options.reject { |k, v| [:position, :title].include? k }
23
+
24
+ if block_given?
25
+ output << capture(&block)
26
+ else
27
+ if options[:href]
28
+ link_options = options.select { |k, v| [:title, :href, :icon, :badge].include? k.to_sym }
29
+ output << f7_bar_link(link_options)
30
+ else
31
+ output << title
32
+ end
33
+ end
34
+
35
+ if @f7_bartype == :tabbar
36
+ output.join("\n").html_safe
37
+ else
38
+ content_tag :div, :class => css_classes do
39
+ output.join("\n").html_safe
40
+ end
41
+ end
42
+ end
43
+
44
+ def f7_bar_link(title_or_options, options=nil)
45
+ output = []
46
+ link_classes = []
47
+
48
+ if title_or_options.class == Hash
49
+ options = title_or_options
50
+ title = options[:title]
51
+ else
52
+ title = title_or_options
53
+ options ||= {}
54
+ end
55
+
56
+ href = options[:href] || '#'
57
+ icon = options[:icon]
58
+
59
+ if @f7_bartype == :tabbar
60
+ link_classes << 'tab-link'
61
+ else
62
+ link_classes << :link
63
+ end
64
+
65
+ link_classes << 'icon-only' if title.blank?
66
+ options[:class] = ([options[:class]] || []) + link_classes
67
+
68
+ link_attr = options.reject { |k, v| [:title, :icon, :badge].include? k }
69
+
70
+ span_class = (@f7_bartype == :tabbar ? {:class => 'tabbar-label'} : nil)
71
+
72
+ if icon.blank?
73
+ content_tag :a, title, link_attr
74
+ else
75
+ badge = nil
76
+ link_options = {}
77
+ if @f7_bartype == :tabbar
78
+ if options[:badge].kind_of? Hash
79
+ badge_data = options[:badge]
80
+ badge_classes = [:badge]
81
+ badge_classes << badge_data[:class] unless badge_data[:class].blank?
82
+ badge = content_tag :span, badge_data[:text], :class => badge_classes
83
+ else
84
+ badge = content_tag :span, options[:badge], :class => [:badge, 'badge-red']
85
+ end
86
+ link = link_icon_i(options[:icon], badge)
87
+ end
88
+ puts " has labels: #{@has_labels ? 'true' : 'false'}"
89
+ content_tag :a, :href => href, :class => link_classes do
90
+ output << link_icon_i(options[:icon], badge)
91
+ output << content_tag(:span, title, span_class) if !title.blank? && @has_labels
92
+ output.join("\n").html_safe
93
+ end
94
+ end
95
+ end
96
+
97
+ private
98
+
99
+ def link_icon_i(icon)
100
+ if icon
101
+ content_tag :i, '', :class => ['icon', icon]
102
+ end
103
+ end
104
+
105
+ end
@@ -0,0 +1,66 @@
1
+ module ContentBlockHelper
2
+
3
+ def f7_content_block(*args, &block)
4
+ output = []
5
+ title = nil
6
+ options = {}
7
+ if args.count > 0
8
+ if (args.first.kind_of?(String) || args.first.kind_of?(Symbol))
9
+ title = args.first
10
+ options = args.second || {}
11
+ elsif arg.first.kind_of? Hash
12
+ options = args.first
13
+ title = options[:title]
14
+ options = options.reject { |k,v| k == :title }
15
+ end
16
+ end
17
+ output << content_block_title_div(title) unless title.nil?
18
+ output << content_block_div(options) do
19
+ yield if block_given?
20
+ end
21
+ output.join("\n").html_safe
22
+ end
23
+
24
+
25
+
26
+ private
27
+
28
+ def content_block_div(options, &block)
29
+ format = []
30
+ output = []
31
+ css_classes = []
32
+ css_classes << "content-block"
33
+
34
+ if options[:format]
35
+ format = [options[:format]].flatten!.map { |v| v.to_sym }
36
+ if format.include? :inset
37
+ css_classes << "inset"
38
+ elsif format.include? :tablet_inset
39
+ css_classes << "tablet-inset"
40
+ end
41
+ end
42
+ css_classes += [options[:class]] if options[:class]
43
+
44
+ options.reject! { |k, v| [:class, :format].include? k }
45
+ options[:class] = css_classes.uniq
46
+
47
+ content_tag :div, options do
48
+ if format.include? :inner
49
+ content_tag :div, :class => [ 'content-block-inner' ] do
50
+ output << capture(&block) if block_given?
51
+ output.join("\n").html_safe
52
+ end
53
+ else
54
+ output << capture(&block) if block_given?
55
+ output.join("\n").html_safe
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+
62
+ def content_block_title_div(title)
63
+ content_tag :div, title, :class => [ 'content-block-title' ]
64
+ end
65
+
66
+ end
@@ -0,0 +1,26 @@
1
+ module Framework7Helper
2
+ def present(object, klass = nil)
3
+ klass ||= "#{object.class}Presenter".constantize if Rails.const_defined?("#{object.class}Presenter")
4
+ klass ||= "Framework7::#{object.class.name.demodulize}Presenter".constantize
5
+ presenter = klass.new(object, self)
6
+ yield presenter if block_given?
7
+ presenter
8
+ end
9
+
10
+ # def f7_link(name = nil, options = nil, html_options = nil, &block)
11
+ # if name.blank?
12
+ # if html_options[:class]
13
+ # html_options[:class] = ['link', 'icon-only'].merge!(html_options[:class])
14
+ # else
15
+ # html_options[:class] = ['link', 'icon-only']
16
+ # end
17
+
18
+ # if options[:icon]
19
+ # icon = options[:icon]
20
+ # name = content_tag(:i, '', :class => ['icon', "icon-#{icon}"])
21
+ # options.reject! { |k, v| k == :icon }
22
+ # end
23
+ # else
24
+ # link_to name, options, html_options, block
25
+ # end
26
+ end
@@ -0,0 +1,180 @@
1
+ module ListBlockHelper
2
+
3
+ def f7_list_block(*args, &block)
4
+ output = []
5
+ title = nil
6
+ options = {}
7
+ if args.count > 0
8
+ if (args.first.kind_of?(String) || args.first.kind_of?(Symbol))
9
+ title = args.first
10
+ options = args.second || {}
11
+ elsif arg.first.kind_of? Hash
12
+ options = args.first
13
+ title = options[:title]
14
+ options = options.reject{ |k,v| k == :title }
15
+ end
16
+ end
17
+ list_block_div(options) do
18
+ concat content_block_title_div(title) unless title.blank?
19
+ concat list_block_ul(&block)
20
+ concat list_block_label(options) unless options[:label].blank?
21
+ end
22
+ end
23
+
24
+
25
+ def f7_list_divider(title_or_options, options = nil, &block)
26
+ if title_or_options.class == Hash
27
+ options = title_or_options if options.nil?
28
+ title_or_options = options[:title]
29
+ end
30
+ title = title_or_options
31
+
32
+ content_tag :li do
33
+ content_tag :div, title, :class => ['item-divider']
34
+ end
35
+ end
36
+
37
+
38
+
39
+ def f7_list_group(title_or_options, options = nil, &block)
40
+ if title_or_options.class == Hash
41
+ options = title_or_options if options.nil?
42
+ title_or_options = options[:title]
43
+ end
44
+ title = title_or_options
45
+
46
+ content_tag :div, :class => ["list-group"] do
47
+ concat list_group_title title unless title.blank?
48
+ yield if block_given?
49
+ end
50
+ end
51
+
52
+
53
+ def f7_list_group_title(title, options = {}, &block)
54
+ list_group_li(title, options)
55
+ end
56
+
57
+
58
+
59
+ def f7_list_item(title, options = {}, &block)
60
+ content_tag :li do
61
+ css_classes = ["item-content"]
62
+ tag = options[:href] ? :a : :div
63
+ css_classes << "item-link" if tag == :a
64
+ css_classes.concat(options[:class]) if options[:class]
65
+
66
+ tag_options = options.reject { |k, v| [:title, :icon, :after].include? k }
67
+ tag_options[:class] = css_classes
68
+
69
+ content_tag tag, tag_options do
70
+ concat list_icon_i(options[:icon]) if options[:icon]
71
+ concat list_item_inner(title, options)
72
+ end
73
+ end
74
+ end
75
+
76
+
77
+
78
+ private
79
+
80
+ def list_block_div(options={}, &block)
81
+ output = []
82
+ css_classes = ["list-block"]
83
+ if options[:format]
84
+ format = [options[:format]].flatten.map { |v| v.to_sym }
85
+ if format.include? :inset
86
+ css_classes << "inset"
87
+ elsif format.include? :tablet_inset
88
+ css_classes << "tablet-inset"
89
+ end
90
+ end
91
+ css_classes += [options[:class]] if options[:class]
92
+
93
+ block_options = options.reject { |k, v| [:class, :format, :label].include? k }
94
+ block_options[:class] = css_classes.uniq
95
+
96
+ content_tag :div, block_options do
97
+ output << capture(&block) if block_given?
98
+ output.join("\n").html_safe
99
+ end
100
+ end
101
+
102
+
103
+
104
+ def list_block_ul(&block)
105
+ content_tag :ul do
106
+ yield if block_given?
107
+ end
108
+ end
109
+
110
+
111
+
112
+ def list_group_title(title, options={})
113
+ content_tag :li, title, :class => ["list-group-title"]
114
+ end
115
+
116
+
117
+
118
+ def list_item_inner(title, options={})
119
+ content_tag :div, :class => ["item-inner"] do
120
+ concat content_tag :div, title, :class => ["item-title"]
121
+ concat list_item_inner_div(options)
122
+ end
123
+ end
124
+
125
+
126
+
127
+ def list_item_inner_div(options={}, &block)
128
+ if options[:after] || options[:badge]
129
+ content_tag :div, :class => ['item-after'] do
130
+ if options[:after]
131
+ if options[:after].kind_of? Hash
132
+ after = options[:after].first
133
+ case after[0].to_sym
134
+ when :icon
135
+ klass = "icon #{after[1]}"
136
+ concat content_tag(:span, '', :class => klass)
137
+ when :badge
138
+ badge_or_options = after[1]
139
+ if badge_or_options.kind_of? Hash
140
+ badge_data = badge_or_options
141
+ badge_classes = [:badge]
142
+ badge_classes << badge_data[:class] unless badge_data[:class].blank?
143
+ badge = content_tag :span, badge_data[:text], :class => badge_classes
144
+ else
145
+ badge = content_tag :span, badge_or_options, :class => [:badge, 'badge-red']
146
+ end
147
+ when :text
148
+ concat after[1]
149
+ end
150
+ else
151
+ concat "#{options[:after]}"
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+
159
+
160
+ def list_item_badge(value, options={})
161
+ content_tag :span, value, :class => ["badge"]
162
+ end
163
+
164
+
165
+
166
+ def list_icon_i(icon)
167
+ content_tag :div, :class => ['item-media'] do
168
+ content_tag :i, '', :class => ['icon', icon]
169
+ end
170
+ end
171
+
172
+
173
+
174
+ def list_block_label(options={}, &block)
175
+ content_tag :div, :class => "list-block-label" do
176
+ content_tag :p, options[:label] if options[:label]
177
+ end
178
+ end
179
+
180
+ end