framework7-rails 0.7.4.0 → 0.9.6.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 (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