themeable 1.1.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +29 -7
- data/lib/themeable/generator_concern.rb +25 -4
- data/lib/themeable/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75b3c47db91293c2e49684d97d70f775791730d1
|
4
|
+
data.tar.gz: 232ff8ac46a535c430b5dbaa897415efd86d5e81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7df2f4254fe2cdf39cea6019b4f76e6f3496b0ff75061e005307f94828d225f05b4625bbc6fc39d2470d632a9a1b47ee67d4d90ea042466d8b4b23ca842f2df
|
7
|
+
data.tar.gz: a8438169271767e7f894cbf98e35653d2a8a0411fe9354517b80837d276a901bf3f65c7f7c022931ad8f980e48cb65ff0d7faf6b6013375c164871ec556a4148
|
data/README.md
CHANGED
@@ -71,7 +71,7 @@ Some vendor files have relative urls in the CSS files for imports, images, etc.
|
|
71
71
|
Add gem to Rails app:
|
72
72
|
|
73
73
|
gem 'theme_my_theme', path: 'path_of_theme_my_theme'
|
74
|
-
|
74
|
+
|
75
75
|
Use theme in controller:
|
76
76
|
|
77
77
|
By default you need to remove `views/layouts/application.html.erb` from Rails app, make sure Rails can use theme's layout.
|
@@ -88,9 +88,9 @@ Or, you can make this controller use dynamic themes:
|
|
88
88
|
acts_as_themeable :choose_theme
|
89
89
|
def index
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
private
|
93
|
-
|
93
|
+
|
94
94
|
def choose_theme
|
95
95
|
case params[:theme]
|
96
96
|
when 'my_theme' then 'my_theme'
|
@@ -103,7 +103,7 @@ Or, you can make this controller use dynamic themes:
|
|
103
103
|
### Use `theme_my_theme` as theme to scaffold controller views
|
104
104
|
|
105
105
|
$ rails g scaffold_controller User --theme=my_theme
|
106
|
-
|
106
|
+
|
107
107
|
create app/controllers/users_controller.rb
|
108
108
|
invoke erb
|
109
109
|
create app/views/users
|
@@ -142,11 +142,11 @@ To choose admin template, run:
|
|
142
142
|
In your Rails project, if you feel `theme_my_theme` is not perfect, and want to make some changes to it only affect current Rails project, instead of all Rails projects which are using gem `theme_my_theme`, now you can do this:
|
143
143
|
|
144
144
|
$ rails g theme_my_theme:copy_assets
|
145
|
-
|
145
|
+
|
146
146
|
exist app/assets/themes
|
147
147
|
create app/assets/themes/my_theme/application.css
|
148
148
|
create app/assets/themes/my_theme/application.js
|
149
|
-
|
149
|
+
|
150
150
|
$ rails g theme_my_theme:copy_views
|
151
151
|
create app/themes/my_theme
|
152
152
|
create app/themes/my_theme/layouts/.gitkeep
|
@@ -180,8 +180,30 @@ in config/application.rb, add `config.generators.theme = :my_theme`
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
|
+
### Automatically choose theme scaffold template
|
184
|
+
|
185
|
+
Also, you can use a mapping to set `--theme` and `--theme-scaffold` automatically according to module name
|
186
|
+
|
187
|
+
module TestTheme
|
188
|
+
class Application < Rails::Application
|
189
|
+
|
190
|
+
....
|
191
|
+
|
192
|
+
config.generators.theme_scaffold_mapping = {
|
193
|
+
# Admin::UsersController uses scaffold template from lib/templates/erb/scaffold/my_theme/admin
|
194
|
+
admin: { theme: 'my_theme', theme_scaffold: 'admin' },
|
195
|
+
|
196
|
+
# Agent::ProductsController uses scaffold template from lib/templates/erb/scaffold/my_theme/agent
|
197
|
+
agent: { theme: 'my_theme', theme_scaffold: 'agent' },
|
183
198
|
|
199
|
+
# Member::ProfileController uses scaffold template from lib/templates/erb/scaffold/other_theme/admin
|
200
|
+
member: { theme: 'other_theme', theme_scaffold: 'admin' },
|
184
201
|
|
202
|
+
# HomeController uses scaffold template from lib/templates/erb/scaffold/other_theme/default
|
203
|
+
default: { theme: 'other_theme', theme_scaffold: 'default' }
|
204
|
+
}
|
185
205
|
|
186
|
-
|
206
|
+
...
|
187
207
|
|
208
|
+
end
|
209
|
+
end
|
@@ -7,11 +7,32 @@ module Themeable
|
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
+
def resolve_themeable_value(key)
|
11
|
+
return options[key] if options[key].present?
|
12
|
+
if theme_scaffold_mapping.size > 0
|
13
|
+
folders = name.split('/')
|
14
|
+
folders.pop
|
15
|
+
loop do
|
16
|
+
break if folders.size == 0
|
17
|
+
path = folders.join('/')
|
18
|
+
v = theme_scaffold_mapping.fetch(path.intern) { theme_scaffold_mapping.fetch(path.to_s, nil) }
|
19
|
+
vv = v && (v[key.intern] || v[key.to_s])
|
20
|
+
return vv if vv.present?
|
21
|
+
folders.pop
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def theme_scaffold_mapping
|
27
|
+
Rails.application.config.generators.theme_scaffold_mapping
|
28
|
+
end
|
29
|
+
|
10
30
|
# Support theme and template
|
11
31
|
def find_in_source_paths(file)
|
12
|
-
|
13
|
-
theme_scaffold
|
14
|
-
|
32
|
+
theme = resolve_themeable_value(:theme)
|
33
|
+
theme_scaffold = resolve_themeable_value(:theme_scaffold)
|
34
|
+
theme_scaffold ||= 'default' if theme
|
35
|
+
themed_file = [theme, theme_scaffold, file].compact.join('/')
|
15
36
|
super(themed_file)
|
16
37
|
rescue Thor::Error => e
|
17
38
|
if e.message =~ /^Could not find /
|
@@ -22,4 +43,4 @@ module Themeable
|
|
22
43
|
end
|
23
44
|
end
|
24
45
|
end
|
25
|
-
end
|
46
|
+
end
|
data/lib/themeable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: themeable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xiaohui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|