theme_generator 1.2.2 → 1.3.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.
- data/MIT-LICENSE +1 -3
- data/Rakefile +10 -18
- data/USAGE +2 -2
- data/templates/LICENSE +20 -0
- data/templates/README +91 -54
- data/templates/about.markdown +1 -1
- data/templates/actioncontroller_ex.rb +19 -1
- data/templates/actionview_ex.rb +5 -1
- data/templates/init.rb +7 -7
- data/templates/{liquid_helpers.rb → liquid_theme_tags.rb} +5 -4
- data/templates/rhtml_theme_tags.rb +60 -0
- data/templates/routeset_ex.rb +24 -16
- data/templates/theme.css +3 -1
- data/templates/theme_controller.rb +6 -4
- data/templates/theme_helper.rb +3 -0
- data/templates/themes.rake +1 -2
- data/theme_generator.rb +31 -22
- metadata +7 -5
- data/templates/theme_helpers.rb +0 -66
data/MIT-LICENSE
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
Copyright (c) 2005 Tobias Luetke
|
2
|
-
|
3
|
-
Theme Generator additions Copyright (c) 2005 Matthew McCray
|
1
|
+
Copyright (c) 2005 Matt McCray, based on code from Typo by Tobias Luetke
|
4
2
|
|
5
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
6
4
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'rake/rdoctask'
|
|
6
6
|
require 'rake/gempackagetask'
|
7
7
|
require 'rake/contrib/rubyforgepublisher'
|
8
8
|
|
9
|
-
PKG_VERSION = "1.
|
9
|
+
PKG_VERSION = "1.3.0"
|
10
10
|
PKG_NAME = "theme_generator"
|
11
11
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
12
12
|
PKG_SUMMARY = "[Rails] Theme generator adds support for themes into Rails applications"
|
@@ -18,13 +18,6 @@ PKG_FILES = FileList[
|
|
18
18
|
desc "Default Task"
|
19
19
|
task :default => [ :lines ]
|
20
20
|
|
21
|
-
desc "Delete tar.gz / zip / rdoc"
|
22
|
-
task :cleanup => [ :rm_packages, :clobber_rdoc ]
|
23
|
-
|
24
|
-
task :install => [:package] do
|
25
|
-
`gem install pkg/#{PKG_FILE_NAME}.gem`
|
26
|
-
end
|
27
|
-
|
28
21
|
task :syntax do
|
29
22
|
filelist = Dir.glob('**/*.rb')
|
30
23
|
filelist.each do |file|
|
@@ -38,13 +31,12 @@ task :syntax do
|
|
38
31
|
puts 'Syntax OK'
|
39
32
|
end
|
40
33
|
|
41
|
-
#
|
42
|
-
# NEEDS TO BE MOD'ED
|
34
|
+
# Generate the RDoc documentation
|
43
35
|
Rake::RDocTask.new { |rdoc|
|
44
36
|
rdoc.rdoc_dir = 'doc'
|
45
37
|
rdoc.title = "Theme Generator"
|
46
38
|
rdoc.options << '--line-numbers --inline-source'
|
47
|
-
rdoc.rdoc_files.include('templates/*.rb')
|
39
|
+
rdoc.rdoc_files.include('templates/*.rb', 'templates/README')
|
48
40
|
}
|
49
41
|
|
50
42
|
task :lines do
|
@@ -66,21 +58,21 @@ task :lines do
|
|
66
58
|
end
|
67
59
|
|
68
60
|
spec = Gem::Specification.new do |s|
|
69
|
-
s.name = PKG_NAME
|
70
|
-
s.version = PKG_VERSION
|
71
|
-
s.summary = PKG_SUMMARY
|
72
|
-
s.has_rdoc = true
|
73
|
-
s.files = PKG_FILES #Dir['lib/**/*']
|
74
|
-
|
75
61
|
s.author = 'M@ McCray'
|
76
62
|
s.email = 'darthapo@gmail.com'
|
77
63
|
s.homepage = 'http://www.mattmccray.com'
|
64
|
+
|
65
|
+
s.name = PKG_NAME
|
66
|
+
s.version = PKG_VERSION
|
67
|
+
s.summary = PKG_SUMMARY
|
68
|
+
|
69
|
+
s.has_rdoc = false
|
70
|
+
s.files = PKG_FILES
|
78
71
|
end
|
79
72
|
|
80
73
|
Rake::GemPackageTask.new(spec) do |p|
|
81
74
|
#puts " File List:"
|
82
75
|
#puts " - #{PKG_FILES.join("\n - ")}"
|
83
|
-
|
84
76
|
p.gem_spec = spec
|
85
77
|
p.need_tar = true
|
86
78
|
p.need_zip = true
|
data/USAGE
CHANGED
@@ -3,7 +3,7 @@ NAME
|
|
3
3
|
folder structure.
|
4
4
|
|
5
5
|
SYNOPSIS
|
6
|
-
theme [
|
6
|
+
theme [theme_name] (use _system_ to update theme system files only)
|
7
7
|
|
8
8
|
DESCRIPTION
|
9
9
|
This generator creates general purpose theme support. It's designed to leverage
|
@@ -24,6 +24,6 @@ EXAMPLE
|
|
24
24
|
This will generate the file structure for a theme named 'default' and prepare
|
25
25
|
the rails application for theme support.
|
26
26
|
|
27
|
-
|
27
|
+
You can update the theme support files by running:
|
28
28
|
|
29
29
|
./script/generate theme _system_
|
data/templates/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2005 Matt McCray, based on code from Typo by Tobias Luetke
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWAR
|
data/templates/README
CHANGED
@@ -1,33 +1,87 @@
|
|
1
|
+
= Theme Support for Rails Applications
|
2
|
+
|
3
|
+
This plugin provides support for themes to the rails application environment.
|
4
|
+
It supports theme specific images, stylesheets, javascripts, and views. The
|
5
|
+
views can be in ERb (rhtml) or liquid formats. Optionally, you can configure
|
6
|
+
the theme system to ignore any templates except liquid ones.
|
7
|
+
|
8
|
+
|
1
9
|
== Usage
|
2
10
|
|
3
|
-
|
11
|
+
This plugin automatically makes any patches needed for theme support. You can
|
12
|
+
use the theme_generator to create the file structure needed, or create it
|
13
|
+
yourself.
|
14
|
+
|
15
|
+
It expects the following theme folder structure.
|
16
|
+
|
17
|
+
themes/
|
18
|
+
[theme_name]
|
19
|
+
layouts/ <- layout .rhtml or .liquid templates
|
20
|
+
images/
|
21
|
+
stylesheets/
|
22
|
+
javascripts/
|
23
|
+
views/ <- you can override application views
|
24
|
+
about.markdown
|
25
|
+
preview.png
|
26
|
+
|
27
|
+
When run in production mode, it will automatically cache the theme files so that
|
28
|
+
the web-server will deliver them in subsequent requests. You can pre-cache all of
|
29
|
+
the theme files by using the included rake tasks:
|
30
|
+
|
31
|
+
$ rake theme_create_cache
|
32
|
+
|
33
|
+
The theme file cache uses the following file structure:
|
34
|
+
|
35
|
+
public/
|
36
|
+
themes/
|
37
|
+
[theme_name]/
|
38
|
+
images/
|
39
|
+
stylesheets/
|
40
|
+
javascripts/
|
41
|
+
|
42
|
+
All of the included rake tasks:
|
43
|
+
|
44
|
+
* theme_create_cache
|
45
|
+
* theme_remove_cache
|
46
|
+
* theme_update_cache
|
47
|
+
|
48
|
+
You specify which theme to use in your controller by using the 'theme' helper.
|
49
|
+
It's used just like the 'layout' helper. In fact, you can use them both
|
50
|
+
simultaneously. The following will render actions using the 'default' layout
|
51
|
+
in the 'blue_bird' theme (theme/blue_bird/layouts/default.rhtml):
|
4
52
|
|
5
53
|
class ApplicationController < ActionController::Base
|
6
|
-
|
7
54
|
layout 'default'
|
8
|
-
|
9
|
-
|
55
|
+
|
56
|
+
theme 'blue_bird'
|
57
|
+
|
58
|
+
...
|
10
59
|
end
|
11
60
|
|
12
|
-
|
13
|
-
stored in the user object, you could implement that like this:
|
61
|
+
You can also defer the theme lookup to a controller method:
|
14
62
|
|
15
63
|
class ApplicationController < ActionController::Base
|
16
|
-
|
17
64
|
layout 'default'
|
18
|
-
theme :get_user_theme
|
19
65
|
|
20
|
-
|
21
|
-
|
22
|
-
def
|
23
|
-
|
24
|
-
|
66
|
+
theme :get_theme
|
67
|
+
|
68
|
+
def get_theme
|
69
|
+
|
70
|
+
# If you let the user choose their own theme, you might
|
71
|
+
# add a User#theme field...
|
72
|
+
|
73
|
+
current_user.theme
|
25
74
|
end
|
26
|
-
|
75
|
+
|
76
|
+
...
|
27
77
|
end
|
28
78
|
|
79
|
+
|
80
|
+
Note: By setting it in the ApplicationController you can set the theme for the
|
81
|
+
whole application.
|
82
|
+
|
29
83
|
In your application views, there are theme specific helper tags
|
30
|
-
available to you.
|
84
|
+
available to you. For ERb templates they are:
|
31
85
|
|
32
86
|
- theme_image_tag
|
33
87
|
- theme_image_path
|
@@ -36,51 +90,28 @@ available to you.
|
|
36
90
|
- theme_stylesheet_link_tag
|
37
91
|
- theme_stylesheet_path
|
38
92
|
|
39
|
-
|
40
|
-
|
93
|
+
For liquid templates there is a single helper, themeitem, that will determine
|
94
|
+
the path base on the theme file extension. Here's how you'd use it:
|
41
95
|
|
42
|
-
|
43
|
-
|
96
|
+
<link rel="StyleSheet" href="{% themeitem %} default.css {% endthemeitem %}" />
|
97
|
+
...
|
98
|
+
<img src="{% themeitem %} logo.png {% endthemeitem %}" />
|
44
99
|
|
45
|
-
|
46
|
-
|
47
|
-
layout 'default'
|
48
|
-
theme 'blue'
|
100
|
+
The output from those two calls are:
|
49
101
|
|
50
|
-
|
102
|
+
<link rel="StyleSheet" href="/themes/[current_theme]/images/default.css" />
|
103
|
+
...
|
104
|
+
<img src="/themes/[current_theme]/images/logo.png" />
|
51
105
|
|
52
|
-
end
|
53
|
-
|
54
|
-
If force_liquid is set to true, the theme system will only render .liquid
|
55
|
-
template files. If .rhtml templates are found, an exception is raised.
|
56
|
-
|
57
|
-
Note: force_liquid is only for theme templates. Your
|
58
|
-
application templates can still be ERb (.rhtml)
|
59
|
-
files.
|
60
|
-
|
61
|
-
Before hosting, I would recommend running the rake task to pre-cache all of
|
62
|
-
the theme files:
|
63
|
-
|
64
|
-
rake theme_create_cache
|
65
|
-
|
66
|
-
There is also a handy rake task for removing all the cached theme files:
|
67
|
-
|
68
|
-
rake theme_remove_cache
|
69
|
-
|
70
|
-
You can also update the cache:
|
71
|
-
|
72
|
-
rake theme_update_cache
|
73
|
-
|
74
|
-
== Upgrading
|
75
|
-
|
76
|
-
Starting with version 1.2, you can update just the theme system files by
|
77
|
-
running:
|
78
|
-
|
79
|
-
./script/generate theme _system_
|
80
|
-
|
81
106
|
|
82
107
|
== Changelog
|
83
108
|
|
109
|
+
1.3.0 - The theme_system component is no longer needed. All of the
|
110
|
+
theme support is driven by a single plugin named, oddly enough,
|
111
|
+
'theme_support'. Also improved theme route support. Instead of
|
112
|
+
overriding RouteSet#reload, RouteSet#draw is overridden, making
|
113
|
+
the theme support entirely transparent -- hopefully ;-)
|
114
|
+
|
84
115
|
1.2.2 - More Bug-fixes.
|
85
116
|
|
86
117
|
1.2.1 - Bug-fixes and documentation clean up.
|
@@ -100,7 +131,8 @@ running:
|
|
100
131
|
|
101
132
|
1.1.0 - [Breaking] Abstraction of the Typo theme system. The themes are
|
102
133
|
now the same as is used in Typo. The theme engine itself is a
|
103
|
-
combination of plugins and a component.
|
134
|
+
combination of plugins and a component. No more symlinks, thank
|
135
|
+
goodness.
|
104
136
|
|
105
137
|
1.0.2 - The current_theme is now retrieved from the controller. Where
|
106
138
|
symlinks are created on *nix systems, shortcuts are created
|
@@ -110,3 +142,8 @@ running:
|
|
110
142
|
to the appropriate directories on supported platforms.
|
111
143
|
|
112
144
|
1.0.0 - Initial release
|
145
|
+
|
146
|
+
|
147
|
+
---
|
148
|
+
Copyright (c) 2005 Matt McCray, based on code from Typo by Tobias Luetke
|
149
|
+
released under the MIT license
|
data/templates/about.markdown
CHANGED
@@ -1,20 +1,37 @@
|
|
1
1
|
# Extend the Base ActionController to support themes
|
2
|
-
#
|
3
2
|
ActionController::Base.class_eval do
|
4
3
|
|
5
4
|
attr_accessor :current_theme
|
6
5
|
attr_accessor :force_liquid_template
|
7
6
|
|
7
|
+
# Use this in your controller just like the <tt>layout</tt> macro.
|
8
|
+
# Example:
|
9
|
+
#
|
10
|
+
# theme 'theme_name'
|
11
|
+
#
|
12
|
+
# -or-
|
13
|
+
#
|
14
|
+
# theme :get_theme
|
15
|
+
#
|
16
|
+
# def get_theme
|
17
|
+
# 'theme_name'
|
18
|
+
# end
|
8
19
|
def self.theme(theme_name, conditions = {})
|
9
20
|
# TODO: Allow conditions... (?)
|
10
21
|
write_inheritable_attribute "theme", theme_name
|
11
22
|
end
|
12
23
|
|
24
|
+
# Set <tt>force_liquid</tt> to true in your controlelr to only allow
|
25
|
+
# Liquid template in themes.
|
26
|
+
# Example:
|
27
|
+
#
|
28
|
+
# force_liquid true
|
13
29
|
def self.force_liquid(force_liquid_value, conditions = {})
|
14
30
|
# TODO: Allow conditions... (?)
|
15
31
|
write_inheritable_attribute "force_liquid", force_liquid_value
|
16
32
|
end
|
17
33
|
|
34
|
+
# Retrieves the current set theme
|
18
35
|
def current_theme(passed_theme=nil)
|
19
36
|
theme = passed_theme || self.class.read_inheritable_attribute("theme")
|
20
37
|
|
@@ -25,6 +42,7 @@ ActionController::Base.class_eval do
|
|
25
42
|
end
|
26
43
|
end
|
27
44
|
|
45
|
+
# Retrieves the force liquid flag
|
28
46
|
def force_liquid_template(passed_value=nil)
|
29
47
|
force_liquid = passed_value || self.class.read_inheritable_attribute("force_liquid")
|
30
48
|
|
data/templates/actionview_ex.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
#
|
1
|
+
# Extending <tt>ActionView::Base</tt> to support rendering themes
|
2
2
|
#
|
3
3
|
module ActionView
|
4
|
+
# <tt>ThemeError</tt> is thrown when <tt>force_liquid</tt> is true, and
|
5
|
+
# a <tt>.liquid</tt> template isn't found.
|
4
6
|
class ThemeError < StandardError
|
5
7
|
end
|
6
8
|
|
9
|
+
# Extending <tt>ActionView::Base</tt> to support rendering themes
|
7
10
|
class Base
|
8
11
|
alias_method :__render_file, :render_file
|
9
12
|
|
13
|
+
# Overrides the default <tt>Base#render_file</tt> to allow theme-specific views
|
10
14
|
def render_file(template_path, use_full_path = true, local_assigns = {})
|
11
15
|
search_path = [
|
12
16
|
"../themes/#{controller.current_theme}/views", # for components
|
data/templates/init.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require '
|
1
|
+
# Initializes theme support by extending some of the core Rails classes
|
2
|
+
require 'patches/actionview_ex'
|
3
|
+
require 'patches/actioncontroller_ex'
|
4
|
+
require 'patches/routeset_ex'
|
5
5
|
|
6
|
+
# Add the tag helpers for rhtml and, optionally, liquid templates
|
7
|
+
require 'helpers/rhtml_theme_tags'
|
6
8
|
begin
|
7
|
-
require '
|
9
|
+
require 'helpers/liquid_theme_tags'
|
8
10
|
rescue
|
9
11
|
# I guess Liquid isn't being used...
|
10
12
|
end
|
11
|
-
|
12
|
-
ActionController::Routing::Routes.install_theme_routes
|
@@ -12,7 +12,7 @@ class Themeitem < Liquid::Block
|
|
12
12
|
|
13
13
|
def initialize(markup, tokens)
|
14
14
|
super
|
15
|
-
#@
|
15
|
+
#@theme_name = markup.strip
|
16
16
|
end
|
17
17
|
|
18
18
|
def block_delimiter
|
@@ -26,18 +26,19 @@ class Themeitem < Liquid::Block
|
|
26
26
|
def render(context)
|
27
27
|
# Which, if either, of these are correct?
|
28
28
|
base_url = context['request'].relative_url_root || ActionController::Base.asset_host.to_s
|
29
|
+
theme_name = @theme_name || context['active_theme']
|
29
30
|
|
30
31
|
filename = @nodelist.join('').strip
|
31
32
|
ext = File.extname( filename )
|
32
33
|
|
33
34
|
if @@image_exts.include?( ext )
|
34
|
-
"#{base_url}/themes/#{
|
35
|
+
"#{base_url}/themes/#{theme_name}/images/#{filename}"
|
35
36
|
|
36
37
|
elsif @@stylesheet_exts.include?( ext )
|
37
|
-
"#{base_url}/themes/#{
|
38
|
+
"#{base_url}/themes/#{theme_name}/stylesheets/#{filename}"
|
38
39
|
|
39
40
|
elsif @@javascript_exts.include?( ext )
|
40
|
-
"#{base_url}/themes/#{
|
41
|
+
"#{base_url}/themes/#{theme_name}/javascripts/#{filename}"
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#
|
2
|
+
# These are theme helper tags
|
3
|
+
#
|
4
|
+
module ActionView::Helpers::AssetTagHelper
|
5
|
+
|
6
|
+
# returns the public path to a theme stylesheet
|
7
|
+
def theme_stylesheet_path( source=nil, theme=nil )
|
8
|
+
theme = theme || controller.current_theme
|
9
|
+
compute_public_path(source || "theme", "themes/#{theme}/stylesheets", 'css')
|
10
|
+
end
|
11
|
+
|
12
|
+
# returns the path to a theme image
|
13
|
+
def theme_image_path( source, theme=nil )
|
14
|
+
theme = theme || controller.current_theme
|
15
|
+
compute_public_path(source, "themes/#{theme}/images", 'png')
|
16
|
+
end
|
17
|
+
|
18
|
+
# returns the path to a theme javascript
|
19
|
+
def theme_javascript_path( source, theme=nil )
|
20
|
+
theme = theme || controller.current_theme
|
21
|
+
compute_public_path(source, "themes/#{theme}/javascript", 'js')
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
# This tag it will automatially include theme specific css files
|
26
|
+
def theme_stylesheet_link_tag(*sources)
|
27
|
+
sources.uniq!
|
28
|
+
options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
|
29
|
+
sources.collect { |source|
|
30
|
+
source = theme_stylesheet_path(source)
|
31
|
+
tag("link", { "rel" => "Stylesheet", "type" => "text/css", "media" => "screen", "href" => source }.merge(options))
|
32
|
+
}.join("\n")
|
33
|
+
end
|
34
|
+
|
35
|
+
# This tag will return a theme-specific IMG
|
36
|
+
def theme_image_tag(source, options = {})
|
37
|
+
options.symbolize_keys
|
38
|
+
|
39
|
+
options[:src] = theme_image_path(source)
|
40
|
+
options[:alt] ||= File.basename(options[:src], '.*').split('.').first.capitalize
|
41
|
+
|
42
|
+
if options[:size]
|
43
|
+
options[:width], options[:height] = options[:size].split("x")
|
44
|
+
options.delete :size
|
45
|
+
end
|
46
|
+
|
47
|
+
tag("img", options)
|
48
|
+
end
|
49
|
+
|
50
|
+
# This tag can be used to return theme-specific javscripts
|
51
|
+
def theme_javascript_include_tag(*sources)
|
52
|
+
options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
|
53
|
+
sources = ['prototype', 'effects', 'controls', 'dragdrop'] if sources.first == :defaults
|
54
|
+
sources.collect { |source|
|
55
|
+
source = theme_javascript_path(source)
|
56
|
+
content_tag("script", "", { "type" => "text/javascript", "src" => source }.merge(options))
|
57
|
+
}.join("\n")
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/templates/routeset_ex.rb
CHANGED
@@ -1,25 +1,33 @@
|
|
1
|
-
|
1
|
+
# Extends <tt>ActionController::Routing::RouteSet</tt> to automatically add the theme routes
|
2
2
|
class ActionController::Routing::RouteSet
|
3
3
|
|
4
|
-
alias_method :
|
4
|
+
alias_method :__draw, :draw
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
# Overrides the default <tt>RouteSet#draw</tt> to automatically
|
7
|
+
# include the routes needed by the <tt>ThemeController</tt>
|
8
|
+
def draw
|
9
|
+
old_routes = @routes
|
10
|
+
@routes = []
|
11
|
+
|
12
|
+
begin
|
13
|
+
create_theme_routes
|
14
|
+
yield self
|
15
|
+
rescue
|
16
|
+
@routes = old_routes
|
17
|
+
raise
|
18
|
+
end
|
19
|
+
|
20
|
+
write_generation
|
21
|
+
write_recognition
|
9
22
|
end
|
10
23
|
|
11
|
-
|
12
|
-
|
13
|
-
named_route '
|
14
|
-
named_route '
|
24
|
+
# Creates the required routes for the <tt>ThemeController</tt>...
|
25
|
+
def create_theme_routes
|
26
|
+
named_route 'theme_images', "/themes/:theme/images/:filename", :controller=>'theme', :action=>'images'
|
27
|
+
named_route 'theme_stylesheets', "/themes/:theme/stylesheets/:filename", :controller=>'theme', :action=>'stylesheets'
|
28
|
+
named_route 'theme_javascript', "/themes/:theme/javascript/:filename", :controller=>'theme', :action=>'javascript'
|
15
29
|
|
16
|
-
connect "/themes/*", :controller=>'
|
30
|
+
connect "/themes/*whatever", :controller=>'theme', :action=>'error'
|
17
31
|
end
|
18
32
|
|
19
|
-
def install_theme_routes
|
20
|
-
create_theme_routes
|
21
|
-
write_generation
|
22
|
-
write_recognition
|
23
|
-
ActionController::Routing::NamedRoutes.install
|
24
|
-
end
|
25
33
|
end
|
data/templates/theme.css
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# The controller for serving/cacheing theme content...
|
2
|
+
#
|
3
|
+
class ThemeController < ActionController::Base
|
2
4
|
|
3
5
|
after_filter :cache_theme_files
|
4
6
|
|
@@ -28,9 +30,9 @@ class ThemeSystem::ThemeController < ActionController::Base
|
|
28
30
|
def cache_theme_files
|
29
31
|
path = request.request_uri
|
30
32
|
begin
|
31
|
-
|
33
|
+
ThemeController.cache_page( response.body, path )
|
32
34
|
rescue
|
33
|
-
|
35
|
+
STERR.puts "Cache Exception: #{$!}"
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -53,7 +55,7 @@ class ThemeSystem::ThemeController < ActionController::Base
|
|
53
55
|
'application/binary'
|
54
56
|
end
|
55
57
|
end
|
56
|
-
|
57
58
|
|
58
59
|
end
|
59
60
|
|
61
|
+
|
data/templates/themes.rake
CHANGED
@@ -16,8 +16,7 @@ end
|
|
16
16
|
|
17
17
|
desc "Removes the cached (public) theme folders"
|
18
18
|
task :theme_remove_cache do
|
19
|
-
puts "
|
20
|
-
#FileUtils.rm_r Dir.glob("#{RAILS_ROOT}/public/themes/*")
|
19
|
+
puts "Removing #{RAILS_ROOT}/public/themes"
|
21
20
|
FileUtils.rm_r "#{RAILS_ROOT}/public/themes", :force => true
|
22
21
|
end
|
23
22
|
|
data/theme_generator.rb
CHANGED
@@ -4,7 +4,6 @@ class ThemeGenerator < Rails::Generator::NamedBase
|
|
4
4
|
record do |m|
|
5
5
|
|
6
6
|
if file_name != '_system_'
|
7
|
-
|
8
7
|
# Theme folder(s)
|
9
8
|
m.directory File.join( "themes", file_name )
|
10
9
|
m.template 'about.markdown', File.join( 'themes', file_name, 'about.markdown' )
|
@@ -20,29 +19,39 @@ class ThemeGenerator < Rails::Generator::NamedBase
|
|
20
19
|
m.directory File.join( "themes", file_name, "views" )
|
21
20
|
m.directory File.join( "themes", file_name, "images" )
|
22
21
|
m.directory File.join( "themes", file_name, "javascript" )
|
23
|
-
|
24
22
|
end
|
23
|
+
|
24
|
+
theme_support_dir = File.join( "vendor", "plugins", "theme_support" )
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
if !File.directory?( theme_support_dir ) or file_name == '_system_'
|
27
|
+
|
28
|
+
# Readme file
|
29
|
+
m.template 'README', "README_THEMES"
|
30
|
+
|
31
|
+
# The ThemeEngine plugins
|
32
|
+
m.directory File.join( "vendor", "plugins", "theme_support" )
|
33
|
+
m.template 'README', File.join( "vendor", "plugins", "theme_support", 'README' )
|
34
|
+
m.template 'LICENSE', File.join( "vendor", "plugins", "theme_support", 'LICENSE' )
|
35
|
+
m.template 'init.rb', File.join( 'vendor', 'plugins', 'theme_support', 'init.rb' )
|
36
|
+
|
37
|
+
m.directory File.join( "vendor", "plugins", "theme_support", "lib" )
|
38
|
+
m.template 'theme.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', 'theme.rb' )
|
39
|
+
m.template 'theme_controller.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', 'theme_controller.rb' )
|
40
|
+
m.template 'theme_helper.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', 'theme_helper.rb' )
|
41
|
+
|
42
|
+
m.directory File.join( "vendor", "plugins", "theme_support", "lib", "patches" )
|
43
|
+
m.template 'actionview_ex.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', "patches", 'actionview_ex.rb' )
|
44
|
+
m.template 'routeset_ex.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', "patches", 'routeset_ex.rb' )
|
45
|
+
m.template 'actioncontroller_ex.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', "patches", 'actioncontroller_ex.rb' )
|
46
|
+
|
47
|
+
m.directory File.join( "vendor", "plugins", "theme_support", "lib", "helpers" )
|
48
|
+
m.template 'liquid_theme_tags.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', 'helpers', 'liquid_theme_tags.rb' )
|
49
|
+
m.template 'rhtml_theme_tags.rb', File.join( 'vendor', 'plugins', 'theme_support', 'lib', 'helpers', 'rhtml_theme_tags.rb' )
|
50
|
+
|
51
|
+
m.directory File.join( "vendor", "plugins", "theme_support", "tasks" )
|
52
|
+
m.template 'themes.rake', File.join( 'vendor', 'plugins', 'theme_support', 'tasks', 'themes.rake' )
|
53
|
+
|
54
|
+
end
|
46
55
|
end
|
47
56
|
end
|
48
57
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: theme_generator
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2005-11-
|
6
|
+
version: 1.3.0
|
7
|
+
date: 2005-11-13 00:00:00 -06:00
|
8
8
|
summary: "[Rails] Theme generator adds support for themes into Rails applications"
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -15,7 +15,7 @@ description:
|
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
|
-
has_rdoc:
|
18
|
+
has_rdoc: false
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
21
|
-
|
@@ -35,14 +35,16 @@ files:
|
|
35
35
|
- templates/init.rb
|
36
36
|
- templates/layout.liquid
|
37
37
|
- templates/layout.rhtml
|
38
|
-
- templates/
|
38
|
+
- templates/LICENSE
|
39
|
+
- templates/liquid_theme_tags.rb
|
39
40
|
- templates/preview.png
|
40
41
|
- templates/README
|
42
|
+
- templates/rhtml_theme_tags.rb
|
41
43
|
- templates/routeset_ex.rb
|
42
44
|
- templates/theme.css
|
43
45
|
- templates/theme.rb
|
44
46
|
- templates/theme_controller.rb
|
45
|
-
- templates/
|
47
|
+
- templates/theme_helper.rb
|
46
48
|
- templates/themes.rake
|
47
49
|
- MIT-LICENSE
|
48
50
|
- Rakefile
|
data/templates/theme_helpers.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# These are theme helper tags
|
3
|
-
#
|
4
|
-
module ActionView
|
5
|
-
module Helpers
|
6
|
-
module AssetTagHelper
|
7
|
-
|
8
|
-
# TODO: Convert these to user the named route helpers (?)
|
9
|
-
|
10
|
-
# returns the public path to a theme stylesheet
|
11
|
-
def theme_stylesheet_path( source=nil, theme=nil )
|
12
|
-
theme = theme || controller.current_theme
|
13
|
-
compute_public_path(source || "theme", "themes/#{theme}/stylesheets", 'css')
|
14
|
-
end
|
15
|
-
|
16
|
-
# returns the path to a theme image
|
17
|
-
def theme_image_path( source, theme=nil )
|
18
|
-
theme = theme || controller.current_theme
|
19
|
-
compute_public_path(source, "themes/#{theme}/images", 'png')
|
20
|
-
end
|
21
|
-
|
22
|
-
# returns the path to a theme javascript
|
23
|
-
def theme_javascript_path( source, theme=nil )
|
24
|
-
theme = theme || controller.current_theme
|
25
|
-
compute_public_path(source, "themes/#{theme}/javascript", 'js')
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
# This tag it will automatially include theme specific css files
|
30
|
-
def theme_stylesheet_link_tag(*sources)
|
31
|
-
sources.uniq!
|
32
|
-
options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
|
33
|
-
sources.collect { |source|
|
34
|
-
source = theme_stylesheet_path(source)
|
35
|
-
tag("link", { "rel" => "Stylesheet", "type" => "text/css", "media" => "screen", "href" => source }.merge(options))
|
36
|
-
}.join("\n")
|
37
|
-
end
|
38
|
-
|
39
|
-
# This tag will return a theme-specific IMG
|
40
|
-
def theme_image_tag(source, options = {})
|
41
|
-
options.symbolize_keys
|
42
|
-
|
43
|
-
options[:src] = theme_image_path(source)
|
44
|
-
options[:alt] ||= File.basename(options[:src], '.*').split('.').first.capitalize
|
45
|
-
|
46
|
-
if options[:size]
|
47
|
-
options[:width], options[:height] = options[:size].split("x")
|
48
|
-
options.delete :size
|
49
|
-
end
|
50
|
-
|
51
|
-
tag("img", options)
|
52
|
-
end
|
53
|
-
|
54
|
-
# This tag can be used to return theme-specific javscripts
|
55
|
-
def theme_javascript_include_tag(*sources)
|
56
|
-
options = sources.last.is_a?(Hash) ? sources.pop.stringify_keys : { }
|
57
|
-
sources = ['prototype', 'effects', 'controls', 'dragdrop'] if sources.first == :defaults
|
58
|
-
sources.collect { |source|
|
59
|
-
source = theme_javascript_path(source)
|
60
|
-
content_tag("script", "", { "type" => "text/javascript", "src" => source }.merge(options))
|
61
|
-
}.join("\n")
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|