refinerycms-theming 0.9.8.1 → 0.9.8.2
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.
- data/app/models/theme.rb +13 -2
- data/lib/gemspec.rb +1 -1
- data/lib/refinerycms-theming.rb +1 -1
- data/lib/theme_server.rb +2 -2
- data/readme.md +46 -9
- data/refinerycms-theming.gemspec +2 -2
- metadata +4 -4
data/app/models/theme.rb
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
class Theme
|
2
2
|
|
3
|
-
def self.current_theme(env)
|
4
|
-
RefinerySetting[:theme]
|
3
|
+
def self.current_theme(env = nil)
|
4
|
+
::RefinerySetting[:theme]
|
5
5
|
end
|
6
6
|
|
7
|
+
def self.root
|
8
|
+
Pathname.new( File.expand_path('../../../', __FILE__) )
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.current_theme_dir
|
12
|
+
theme = self.current_theme
|
13
|
+
theme_dir = Rails.root.join("themes",theme)
|
14
|
+
theme_dir = self.root.join('themes', theme) unless theme_dir.directory?
|
15
|
+
theme_dir
|
16
|
+
end
|
17
|
+
|
7
18
|
end
|
data/lib/gemspec.rb
CHANGED
data/lib/refinerycms-theming.rb
CHANGED
@@ -16,7 +16,7 @@ module Refinery
|
|
16
16
|
# add back theme paths if there is a theme present.
|
17
17
|
if (theme = ::Theme.current_theme(request.env)).present?
|
18
18
|
# Set up view path again for the current theme.
|
19
|
-
view_paths.unshift
|
19
|
+
view_paths.unshift ::Theme.current_theme_dir.join("views").to_s
|
20
20
|
|
21
21
|
# Ensure that routes within the application are top priority.
|
22
22
|
# Here we grab all the routes that are under the application's view folder
|
data/lib/theme_server.rb
CHANGED
@@ -12,7 +12,7 @@ module Refinery
|
|
12
12
|
def call(env)
|
13
13
|
if env["PATH_INFO"] =~ /^\/theme\/(stylesheets|javascripts|images)/ and (theme = Theme.current_theme(env)).present?
|
14
14
|
env["PATH_INFO"].gsub!(/^\/theme\//, '')
|
15
|
-
if (file_path = (dir =
|
15
|
+
if (file_path = (dir = Theme.current_theme_dir).join(env["PATH_INFO"])).exist?
|
16
16
|
etag = Digest::MD5.hexdigest("#{file_path.to_s}#{file_path.mtime}")
|
17
17
|
unless (etag == env["HTTP_IF_NONE_MATCH"])
|
18
18
|
status, headers, body = Rack::File.new(dir).call(env)
|
@@ -29,4 +29,4 @@ module Refinery
|
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
32
|
-
end
|
32
|
+
end
|
data/readme.md
CHANGED
@@ -11,6 +11,17 @@ Think of a theme as your ``app/views`` directory with a few extra things like im
|
|
11
11
|
|
12
12
|
It's worth noting you don't need to use a theme if you don't want to. Placing files in the ``app/views`` directory like any other Rails app will work just fine. It's only if you want to wrap your design up into a single location that you would use a theme or allow your client to easily change between designs.
|
13
13
|
|
14
|
+
## How do I make my own Theme?
|
15
|
+
|
16
|
+
__Uncomment the gem 'refinerycms-theming' in your project's Gemfile & run ``bundle install``__
|
17
|
+
|
18
|
+
Then, simply use the Theme generator to make the basic structure of a new theme.
|
19
|
+
|
20
|
+
rails generate refinery_theme name_of_theme
|
21
|
+
|
22
|
+
Don't forget to "activate" this new theme by setting the theme setting to the name of this new theme. The __first__ time you create a theme, this setting will be created and set for you. If you already have a theme from an earlier project but no setting, you can create it manually in the __refinery admin / settings__ section. __The setting name is ``theme``__.
|
23
|
+
|
24
|
+
|
14
25
|
## The Structure of a Theme
|
15
26
|
|
16
27
|
Themes sit in your Rails app like this
|
@@ -46,7 +57,7 @@ Let's take the ``mytheme`` example theme shown above. This is how the theme is s
|
|
46
57
|
|- layouts
|
47
58
|
|- application.html.erb
|
48
59
|
|
49
|
-
|
60
|
+
|
50
61
|
### Images
|
51
62
|
|
52
63
|
Usually this would be just what you have in ``public/images`` except we move that to the theme instead.
|
@@ -59,17 +70,43 @@ Same with javascripts, just what you normally have in ``public/javascripts`` but
|
|
59
70
|
|
60
71
|
The ``README`` file is just a description of your theme.
|
61
72
|
|
62
|
-
###
|
73
|
+
### Partials && /shared Content
|
63
74
|
|
64
|
-
|
75
|
+
In the default views, you will notice lines such as:
|
65
76
|
|
66
|
-
|
77
|
+
<%= render :partial => '/shared/header' %>
|
67
78
|
|
68
|
-
|
79
|
+
These are built-in partials for RefineryCMS. To __override__ these partials, run the command:
|
69
80
|
|
70
|
-
|
81
|
+
rake refinery:override view=shared/* theme=theme-name
|
71
82
|
|
72
|
-
|
83
|
+
__theme=theme-name is optional__ but is convenient for keeping things together.
|
84
|
+
|
85
|
+
|
86
|
+
### content_for :body\_content\_title, :body\_content\_left, etc.
|
87
|
+
|
88
|
+
These are the default sections built up in __/shared/\_content\_page.html.erb__
|
89
|
+
You can add your own sections or rename these as you'd like. Say you wanted to add a left side bar, you could modify the __/shared/\_content\_page partial__ like so:
|
90
|
+
|
91
|
+
sections = [
|
92
|
+
{:yield => :body_content_title, :fallback => page_title, :id => 'body_content_page_title', :title => true},
|
93
|
+
{:yield => :body_content_sidebar, :fallback => nil},
|
94
|
+
{:yield => :body_content_left, :fallback => (@page.present? ? @page[Page.default_parts.first.to_sym] : nil)},
|
95
|
+
{:yield => :body_content_right, :fallback => (@page.present? ? @page[Page.default_parts.second.to_sym] : nil)}.reject {|section| hide_sections.include?(section[:yield]) }
|
96
|
+
|
97
|
+
Where you'll see I added "body_content_sidebar". And of course you could set the fallback to whatever you like.
|
98
|
+
|
99
|
+
Including the partial /shared/content_page is what causes all your content_for blocks to work. So you would use
|
100
|
+
|
101
|
+
<% content_for :body_content_sidebar do -%>
|
102
|
+
blah
|
103
|
+
<% end -%>
|
104
|
+
|
105
|
+
in this instance.
|
106
|
+
|
107
|
+
### Views
|
108
|
+
|
109
|
+
This is exactly the same as how you lay your views out in ``app/views/`` just instead of putting them in ``app/views/`` you put them into ``themes/mytheme/views/``
|
73
110
|
|
74
111
|
## How do I select which Theme Refinery should use?
|
75
112
|
|
@@ -87,7 +124,7 @@ Just copy their theme directory into your themes folder and Refinery will see it
|
|
87
124
|
|
88
125
|
## How can I Convert my Current Views into a Theme?
|
89
126
|
|
90
|
-
This should be fairly straightforward, just follow the directory structure outlined in 'The structure of a Theme'.
|
127
|
+
This should be fairly straightforward, just follow the directory structure outlined in 'The structure of a Theme'.
|
91
128
|
|
92
129
|
But there is one important difference that need to be addressed to convert your current site into a theme.
|
93
130
|
|
@@ -112,7 +149,7 @@ This is the same with linking to Javascript and Stylesheets in your view. Say ou
|
|
112
149
|
You just need to change that to:
|
113
150
|
|
114
151
|
<%= stylesheet_link_tag 'application', :theme => true %>
|
115
|
-
|
152
|
+
|
116
153
|
## I'm Stuck, is there an Example Theme?
|
117
154
|
|
118
155
|
Yep, there is an example theme called "demolicious" that comes with Refinery located in ``/themes/demolicious``. If you find yourself getting stuck, just check out that theme and get a feel for how it works.
|
data/refinerycms-theming.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{refinerycms-theming}
|
3
|
-
s.version = %q{0.9.8.
|
3
|
+
s.version = %q{0.9.8.2}
|
4
4
|
s.description = %q{Theming functionality for the Refinery CMS project, extracted from Refinery CMS core.}
|
5
|
-
s.date = %q{2010-
|
5
|
+
s.date = %q{2010-10-27}
|
6
6
|
s.summary = %q{Theming functionality for the Refinery CMS project.}
|
7
7
|
s.email = %q{info@refinerycms.com}
|
8
8
|
s.homepage = %q{http://refinerycms.com}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinerycms-theming
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 35
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 8
|
10
|
-
-
|
11
|
-
version: 0.9.8.
|
10
|
+
- 2
|
11
|
+
version: 0.9.8.2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Resolve Digital
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-
|
19
|
+
date: 2010-10-27 00:00:00 +13:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|