refinerycms 0.9.6.2 → 0.9.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/config/preinitializer.rb +3 -3
- data/db/seeds.rb +1 -1
- data/lib/refinery_initializer.rb +1 -1
- data/public/javascripts/refinery/admin.js +62 -10
- data/public/javascripts/wymeditor/jquery.refinery.wymeditor.js +10 -10
- data/public/stylesheets/refinery/refinery.css +9 -0
- data/vendor/plugins/images/app/models/image.rb +14 -14
- data/vendor/plugins/inquiries/app/models/inquiry.rb +1 -1
- data/vendor/plugins/news/app/models/news_item.rb +2 -2
- data/vendor/plugins/pages/app/models/page.rb +23 -23
- data/vendor/plugins/pages/app/models/page_part.rb +1 -1
- data/vendor/plugins/refinery/app/views/admin/_head.html.erb +0 -1
- data/vendor/plugins/refinery/app/views/shared/_head.html.erb +3 -2
- data/vendor/plugins/refinery/app/views/shared/admin/_resource_picker.html.erb +25 -13
- data/vendor/plugins/refinery/lib/generators/refinery/templates/model.rb +1 -1
- data/vendor/plugins/refinery/lib/refinery/application_controller.rb +1 -1
- data/vendor/plugins/refinery/lib/refinery/application_helper.rb +52 -26
- data/vendor/plugins/refinery/lib/refinery/initializer.rb +2 -3
- data/vendor/plugins/refinery/lib/tasks/refinery.rake +4 -4
- data/vendor/plugins/refinery/plugins.md +1 -1
- data/vendor/plugins/refinery/rails/init.rb +1 -1
- data/vendor/plugins/resources/app/models/resource.rb +15 -16
- data/vendor/plugins/resources/app/views/admin/resources/insert.html.erb +2 -3
- data/vendor/plugins/themes/app/controllers/themes_controller.rb +9 -10
- data/vendor/plugins/themes/app/models/theme.rb +2 -2
- data/vendor/plugins/themes/config/routes.rb +3 -3
- data/vendor/plugins/themes/themes.md +2 -2
- metadata +2 -2
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@ require 'tasks/rails'
|
|
17
17
|
|
18
18
|
extra_rake_tasks = []
|
19
19
|
# When running Refinery from a gem we lose the rake tasks, so add them back in:
|
20
|
-
extra_rake_tasks << Dir[File.join(REFINERY_ROOT, %w(vendor plugins * ** tasks ** *.rake))].sort unless REFINERY_ROOT ==
|
20
|
+
extra_rake_tasks << Dir[File.join(REFINERY_ROOT, %w(vendor plugins * ** tasks ** *.rake))].sort unless REFINERY_ROOT.to_s == Rails.root.to_s
|
21
21
|
# We also need to load in the rake tasks from gem plugins whether Refinery is a gem or not:
|
22
22
|
extra_rake_tasks << $refinery_gem_plugin_lib_paths.collect {|path| Dir[File.join(%W(#{path} tasks ** *.rake))].sort} if defined?($refinery_gem_plugin_lib_paths) && !$refinery_gem_plugin_lib_paths.nil?
|
23
23
|
extra_rake_tasks.flatten.compact.uniq.each {|rake| load rake }
|
@@ -45,7 +45,7 @@ begin
|
|
45
45
|
namespace :bump do
|
46
46
|
desc "Bump the gemspec by a build version."
|
47
47
|
task :build => [:version_required, :version] do
|
48
|
-
version = Jeweler::VersionHelper.new(
|
48
|
+
version = Jeweler::VersionHelper.new(Rails.root.to_s)
|
49
49
|
version.update_to(version.major, version.minor, version.patch, ((version.build || 0).to_i + 1))
|
50
50
|
version.write
|
51
51
|
$stdout.puts "Updated version: #{version.to_s}"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.6.
|
1
|
+
0.9.6.3
|
data/config/preinitializer.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# pick the refinery root path
|
2
|
-
if File.exist?(
|
3
|
-
require
|
2
|
+
if File.exist?(File.join(%W(#{RAILS_ROOT} lib refinery_initializer.rb)))
|
3
|
+
require File.join(%W(#{RAILS_ROOT} lib refinery_initializer.rb))
|
4
4
|
else
|
5
5
|
require 'rubygems'
|
6
6
|
version = if defined? REFINERY_GEM_VERSION
|
@@ -21,7 +21,7 @@ else
|
|
21
21
|
end
|
22
22
|
|
23
23
|
|
24
|
-
REFINERY_ROOT =
|
24
|
+
REFINERY_ROOT = Rails.root.to_s unless defined? REFINERY_ROOT
|
25
25
|
|
26
26
|
# Set to true in your environment specific file (e.g. production.rb) to use Amazon's Simple
|
27
27
|
# Storage Service instead of the default file system for resources and images
|
data/db/seeds.rb
CHANGED
@@ -118,7 +118,7 @@ Page.create(:title => "Down for maintenance",
|
|
118
118
|
})
|
119
119
|
|
120
120
|
# Install default themes.
|
121
|
-
FileUtils::mkdir
|
121
|
+
FileUtils::mkdir Rails.root.join(themes) unless Rails.root.join("themes").directory?
|
122
122
|
Dir[File.join(%W(#{REFINERY_ROOT} themes *.zip))].each do |theme|
|
123
123
|
Theme.create(:uploaded_data => {
|
124
124
|
"size" => File.size(theme),
|
data/lib/refinery_initializer.rb
CHANGED
@@ -35,15 +35,16 @@ init_modal_dialogs = function(){
|
|
35
35
|
$('a[href*="dialog=true"]').each(function(i, anchor)
|
36
36
|
{
|
37
37
|
$(anchor).click(function(e){
|
38
|
-
|
39
|
-
iframe.dialog({
|
38
|
+
$("<iframe id='dialog_iframe' src='" + $(this).attr('href') + "'></iframe>").dialog({
|
40
39
|
title: $(anchor).attr('title') || $(anchor).attr('name') || $(anchor).html() || null,
|
41
40
|
modal: true,
|
42
41
|
resizable: false,
|
43
42
|
autoOpen: true,
|
44
43
|
width: (parseInt($(anchor.href.match("width=([0-9]*)")).last().get(0))||928),
|
45
|
-
height: (parseInt($(anchor.href.match("height=([0-9]*)")).last().get(0))||473)
|
44
|
+
height: (parseInt($(anchor.href.match("height=([0-9]*)")).last().get(0))||473),
|
45
|
+
beforeclose: function(){$(document.body).removeClass('hide-overflow')}
|
46
46
|
});
|
47
|
+
$(document.body).addClass('hide-overflow');
|
47
48
|
e.preventDefault();
|
48
49
|
});
|
49
50
|
});
|
@@ -143,6 +144,7 @@ var link_dialog = {
|
|
143
144
|
this.test_url = test_url;
|
144
145
|
this.test_email = test_email;
|
145
146
|
this.init_tabs();
|
147
|
+
this.init_resources_submit();
|
146
148
|
this.init_close();
|
147
149
|
this.page_tab();
|
148
150
|
this.web_tab();
|
@@ -161,6 +163,41 @@ var link_dialog = {
|
|
161
163
|
link_dialog.switch_area(selected);
|
162
164
|
},
|
163
165
|
|
166
|
+
init_resources_submit: function(){
|
167
|
+
$('#dialog-form-actions #submit_button').click(function(e){
|
168
|
+
e.preventDefault();
|
169
|
+
if((resource_selected = $('#existing_resource_area_content ul li.linked a')).length > 0) {
|
170
|
+
resourceUrl = parseURL(resource_selected.attr('href'));
|
171
|
+
relevant_href = resourceUrl.pathname;
|
172
|
+
if (resourceUrl.protocol == "" && resourceUrl.hostname == "system") {
|
173
|
+
relevant_href = "/system" + relevant_href;
|
174
|
+
}
|
175
|
+
|
176
|
+
// Add any alternate resource stores that need a absolute URL in the regex below
|
177
|
+
if( resourceUrl.hostname.match(/s3.amazonaws.com/) ) {
|
178
|
+
relevant_href = resourceUrl.protocol + '//' + resourceUrl.host + relevant_href;
|
179
|
+
}
|
180
|
+
|
181
|
+
if (typeof(resource_picker.callback) == "function") {
|
182
|
+
resource_picker.callback({
|
183
|
+
id: resource_selected.attr('id').replace("resource_", "")
|
184
|
+
, href: relevant_href
|
185
|
+
, html: resource_selected.html()
|
186
|
+
});
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
if(parent && typeof(parent.tb_remove) == "function"){
|
191
|
+
parent.tb_remove();
|
192
|
+
}
|
193
|
+
});
|
194
|
+
|
195
|
+
$('#dialog-form-actions #cancel_button').click(function(e){
|
196
|
+
e.preventDefault();
|
197
|
+
parent.tb_remove();
|
198
|
+
});
|
199
|
+
},
|
200
|
+
|
164
201
|
init_close: function(){
|
165
202
|
$('#TB_title .close_dialog, #dialog_container .close_dialog').click(function(e) {
|
166
203
|
e.preventDefault();
|
@@ -235,7 +272,7 @@ var link_dialog = {
|
|
235
272
|
|
236
273
|
},
|
237
274
|
|
238
|
-
email_tab: function(){
|
275
|
+
email_tab: function() {
|
239
276
|
$('#email_address_text, #email_default_subject_text, #email_default_body_text').change(function(e){
|
240
277
|
var default_subject = $('#email_default_subject_text').val(),
|
241
278
|
default_body = $('#email_default_body_text').val(),
|
@@ -272,14 +309,21 @@ var link_dialog = {
|
|
272
309
|
});
|
273
310
|
},
|
274
311
|
|
275
|
-
update_parent: function(url, title, target){
|
276
|
-
|
277
|
-
parent.document.getElementById('
|
278
|
-
|
312
|
+
update_parent: function(url, title, target) {
|
313
|
+
if (parent != null) {
|
314
|
+
if ((wym_href = parent.document.getElementById('wym_href')) != null) {
|
315
|
+
wym_href.value = url;
|
316
|
+
}
|
317
|
+
if ((wym_title = parent.document.getElementById('wym_title')) != null) {
|
318
|
+
wym_title.value = title;
|
319
|
+
}
|
320
|
+
if ((wym_target = parent.document.getElementById('wym_target')) != null) {
|
321
|
+
wym_target.value = target || "";
|
322
|
+
}
|
323
|
+
}
|
279
324
|
}
|
280
325
|
}
|
281
326
|
|
282
|
-
|
283
327
|
var page_options = {
|
284
328
|
init: function(enable_parts, new_part_url, del_part_url){
|
285
329
|
this.enable_parts = enable_parts;
|
@@ -513,7 +557,7 @@ var list_reorder = {
|
|
513
557
|
, 'items': 'li'
|
514
558
|
, 'axis': 'y'
|
515
559
|
});
|
516
|
-
|
560
|
+
|
517
561
|
$('#reorder_action').hide();
|
518
562
|
$('#reorder_action_done').show();
|
519
563
|
}
|
@@ -596,6 +640,14 @@ var image_picker = {
|
|
596
640
|
}
|
597
641
|
}
|
598
642
|
|
643
|
+
var resource_picker = {
|
644
|
+
callback: null
|
645
|
+
|
646
|
+
, init: function(callback) {
|
647
|
+
this.callback = callback;
|
648
|
+
}
|
649
|
+
}
|
650
|
+
|
599
651
|
//parse a URL to form an object of properties
|
600
652
|
parseURL = function(url)
|
601
653
|
{
|
@@ -1365,7 +1365,7 @@ WYMeditor.editor.prototype.paste = function(sData) {
|
|
1365
1365
|
wym.format_block();
|
1366
1366
|
|
1367
1367
|
var sTmp;
|
1368
|
-
replaceable =
|
1368
|
+
replaceable = $(wym._doc.body).find('#replace_me_with_' + wym._current_unique_stamp);
|
1369
1369
|
|
1370
1370
|
// replaceable doesn't actually get replaced here, it's just used as a marker for where the cursor was.
|
1371
1371
|
var container = replaceable.get(0) || this.selected();
|
@@ -1380,10 +1380,10 @@ WYMeditor.editor.prototype.paste = function(sData) {
|
|
1380
1380
|
sTmp = aP[x];
|
1381
1381
|
//simple newlines are replaced by a break
|
1382
1382
|
sTmp = sTmp.replace(rExp, "<br />");
|
1383
|
-
if (x == 0 &&
|
1384
|
-
|
1383
|
+
if (x == 0 && $(container).html().replace(/<br\ ?\/?>/, "").length == 0) {
|
1384
|
+
$(container).html(sTmp);
|
1385
1385
|
} else {
|
1386
|
-
|
1386
|
+
$(container).after("<p>" + sTmp + "</p>");
|
1387
1387
|
}
|
1388
1388
|
}
|
1389
1389
|
} else {
|
@@ -1391,10 +1391,10 @@ WYMeditor.editor.prototype.paste = function(sData) {
|
|
1391
1391
|
sTmp = aP[x];
|
1392
1392
|
//simple newlines are replaced by a break
|
1393
1393
|
sTmp = sTmp.replace(rExp, "<br />");
|
1394
|
-
if (x == 0 &&
|
1395
|
-
|
1394
|
+
if (x == 0 && $(container).html().replace(/<br\ ?\/?>/, "").length == 0) {
|
1395
|
+
$(container).html(sTmp);
|
1396
1396
|
} else {
|
1397
|
-
|
1397
|
+
$(wym._doc.body).append("<p>" + sTmp + "</p>");
|
1398
1398
|
}
|
1399
1399
|
}
|
1400
1400
|
}
|
@@ -4312,7 +4312,7 @@ WYMeditor.WymClassMozilla.prototype.initIframe = function(iframe) {
|
|
4312
4312
|
$(this._doc).bind("keyup", this.keyup);
|
4313
4313
|
|
4314
4314
|
//bind editor paste events
|
4315
|
-
|
4315
|
+
$(this._doc).bind("paste", this.intercept_paste);
|
4316
4316
|
|
4317
4317
|
//bind editor focus events (used to reset designmode - Gecko bug)
|
4318
4318
|
$(this._doc).bind("focus", this.enableDesignMode);
|
@@ -4596,7 +4596,7 @@ WYMeditor.WymClassOpera.prototype.initIframe = function(iframe) {
|
|
4596
4596
|
$(this._doc).bind("keyup", this.keyup);
|
4597
4597
|
|
4598
4598
|
// bind paste events for when this is supported.
|
4599
|
-
|
4599
|
+
$(this._doc).bind("paste", this.intercept_paste);
|
4600
4600
|
|
4601
4601
|
//post-init functions
|
4602
4602
|
if($.isFunction(this._options.postInit)) this._options.postInit(this);
|
@@ -4725,7 +4725,7 @@ WYMeditor.WymClassSafari.prototype.initIframe = function(iframe) {
|
|
4725
4725
|
$(this._doc).bind("keyup", this.keyup);
|
4726
4726
|
|
4727
4727
|
// bind paste events
|
4728
|
-
|
4728
|
+
$(this._doc).bind("paste", this.intercept_paste);
|
4729
4729
|
|
4730
4730
|
//post-init functions
|
4731
4731
|
if($.isFunction(this._options.postInit)) this._options.postInit(this);
|
@@ -1217,4 +1217,13 @@ ul#plugins li {
|
|
1217
1217
|
margin-top:1px;
|
1218
1218
|
_margin-bottom:1px;
|
1219
1219
|
width: 100% !important;
|
1220
|
+
}
|
1221
|
+
|
1222
|
+
.hide-overflow {
|
1223
|
+
overflow: hidden;
|
1224
|
+
}
|
1225
|
+
#remove_resource {
|
1226
|
+
margin-top:8px;
|
1227
|
+
display:inline-block;
|
1228
|
+
width:auto;
|
1220
1229
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Image < ActiveRecord::Base
|
2
|
-
|
2
|
+
|
3
3
|
# Docs for attachment_fu http://github.com/technoweenie/attachment_fu
|
4
4
|
has_attachment :content_type => :image,
|
5
5
|
:storage => (USE_S3_BACKEND ? :s3 : :file_system),
|
@@ -7,31 +7,31 @@ class Image < ActiveRecord::Base
|
|
7
7
|
:processor => 'Rmagick',
|
8
8
|
:thumbnails => ((((thumbnails = RefinerySetting.find_or_set(:image_thumbnails, {})).is_a?(Hash) ? thumbnails : (RefinerySetting[:image_thumbnails] = {}))) rescue {}),
|
9
9
|
:max_size => 50.megabytes
|
10
|
-
|
10
|
+
|
11
|
+
validates_as_attachment
|
12
|
+
|
11
13
|
# Docs for acts_as_indexed http://github.com/dougal/acts_as_indexed
|
12
14
|
acts_as_indexed :fields => [:title],
|
13
|
-
:index_file => [
|
15
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
14
16
|
|
15
17
|
named_scope :thumbnails, :conditions => "parent_id NOT NULL"
|
16
18
|
named_scope :originals, :conditions => {:parent_id => nil}
|
17
|
-
|
19
|
+
|
18
20
|
# when a dialog pops up with images, how many images per page should there be
|
19
21
|
PAGES_PER_DIALOG = 18
|
20
|
-
|
22
|
+
|
21
23
|
# when listing images out in the admin area, how many images should show per page
|
22
24
|
PAGES_PER_ADMIN_INDEX = 20
|
23
|
-
|
24
|
-
validates_as_attachment
|
25
|
-
|
26
|
-
# Returns a titleized version of the filename
|
27
|
-
# my_file.jpg returns My File
|
28
|
-
def title
|
29
|
-
self.filename.gsub(/\.\w+$/, '').titleize
|
30
|
-
end
|
31
|
-
|
25
|
+
|
32
26
|
# How many images per page should be displayed?
|
33
27
|
def self.per_page(dialog = false)
|
34
28
|
dialog ? PAGES_PER_DIALOG : PAGES_PER_ADMIN_INDEX
|
35
29
|
end
|
30
|
+
|
31
|
+
# Returns a titleized version of the filename
|
32
|
+
# my_file.jpg returns My File
|
33
|
+
def title
|
34
|
+
self.filename.gsub(/\.\w+$/, '').titleize
|
35
|
+
end
|
36
36
|
|
37
37
|
end
|
@@ -6,7 +6,7 @@ class Inquiry < ActiveRecord::Base
|
|
6
6
|
:message => 'must be valid'
|
7
7
|
|
8
8
|
acts_as_indexed :fields => [:name, :email, :message, :phone],
|
9
|
-
|
9
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
10
10
|
|
11
11
|
def self.closed
|
12
12
|
find_all_by_open(false, :order => "created_at DESC")
|
@@ -3,10 +3,10 @@ class NewsItem < ActiveRecord::Base
|
|
3
3
|
validates_presence_of :title, :content
|
4
4
|
alias_attribute :content, :body
|
5
5
|
|
6
|
-
has_friendly_id :title, :use_slug => true
|
6
|
+
has_friendly_id :title, :use_slug => true
|
7
7
|
|
8
8
|
acts_as_indexed :fields => [:title, :body],
|
9
|
-
|
9
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
10
10
|
|
11
11
|
def self.latest(amount = 10)
|
12
12
|
find(:all, :order => "publish_date DESC", :limit => amount,
|
@@ -3,25 +3,25 @@ class Page < ActiveRecord::Base
|
|
3
3
|
validates_presence_of :title
|
4
4
|
|
5
5
|
acts_as_tree :order => "position ASC", :include => [:children, :slugs]
|
6
|
-
|
6
|
+
|
7
7
|
# Docs for friendly_id http://github.com/norman/friendly_id
|
8
|
-
has_friendly_id :title, :use_slug => true
|
8
|
+
has_friendly_id :title, :use_slug => true
|
9
9
|
|
10
10
|
has_many :parts, :class_name => "PagePart", :order => "position ASC"
|
11
11
|
accepts_nested_attributes_for :parts, :allow_destroy => true
|
12
|
-
|
12
|
+
|
13
13
|
# Docs for acts_as_indexed http://github.com/dougal/acts_as_indexed
|
14
14
|
acts_as_indexed :fields => [:title, :meta_keywords, :meta_description, :custom_title, :browser_title, :all_page_part_content],
|
15
|
-
:index_file =>
|
15
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
16
16
|
|
17
17
|
before_destroy :deletable?
|
18
18
|
|
19
19
|
# when a dialog pops up to link to a page, how many pages per page should there be
|
20
20
|
PAGES_PER_DIALOG = 14
|
21
|
-
|
21
|
+
|
22
22
|
# when listing pages out in the admin area, how many pages should show per page
|
23
23
|
PAGES_PER_ADMIN_INDEX = 20
|
24
|
-
|
24
|
+
|
25
25
|
# when collecting the pages path how is each of the pages seperated?
|
26
26
|
PATH_SEPERATOR = " - "
|
27
27
|
|
@@ -45,7 +45,7 @@ class Page < ActiveRecord::Base
|
|
45
45
|
puts "unset .menu_match," if self.menu_match.present?
|
46
46
|
puts "set .deletable to true" unless self.deletable
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
return false
|
50
50
|
end
|
51
51
|
end
|
@@ -75,11 +75,11 @@ class Page < ActiveRecord::Base
|
|
75
75
|
self.title
|
76
76
|
end
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
# When this page is rendered in the navigation, where should it link?
|
80
80
|
# If a custom "link_url" is set, it uses that otherwise it defaults to a normal page URL.
|
81
81
|
# The "link_url" is often used to link to a plugin rather than a page.
|
82
|
-
#
|
82
|
+
#
|
83
83
|
# For example if I had a "Contact Us" page I don't want it to just render a contact us page
|
84
84
|
# I want it to show the Inquiries form so I can collect inquiries. So I would set the "link_url"
|
85
85
|
# to "/inquiries/new"
|
@@ -90,29 +90,29 @@ class Page < ActiveRecord::Base
|
|
90
90
|
"/pages/#{self.to_param}"
|
91
91
|
end
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
# Returns true if this page is "published"
|
95
95
|
def live?
|
96
96
|
not self.draft?
|
97
97
|
end
|
98
|
-
|
99
|
-
# Return true if this page can be shown in the navigation.
|
98
|
+
|
99
|
+
# Return true if this page can be shown in the navigation.
|
100
|
+
# If it's a draft or is set to not show in the menu it will return false.
|
101
|
+
# If any of the page's ancestors aren't to be shown in the menu then this page is not either.
|
100
102
|
def in_menu?
|
101
|
-
|
102
|
-
self.ancestors.each {|a| is_in_menu = false unless a.in_menu? }
|
103
|
-
is_in_menu
|
103
|
+
self.live? && self.show_in_menu? && !self.ancestors.any? { |a| !a.in_menu? }
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
# Returns true if this page is the home page or links to it.
|
107
107
|
def home?
|
108
108
|
self.link_url == "/"
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
# Returns all visible sibling pages that can be rendered for the menu
|
112
112
|
def shown_siblings
|
113
113
|
self.siblings.reject { |sibling| not sibling.in_menu? }
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
# Returns all the top level pages, usually to render the top level navigation.
|
117
117
|
def self.top_level(include_children = false)
|
118
118
|
include_associations = [:parts]
|
@@ -120,10 +120,10 @@ class Page < ActiveRecord::Base
|
|
120
120
|
include_associations.push(:children) if include_children
|
121
121
|
find_all_by_parent_id(nil,:conditions => {:show_in_menu => true, :draft => false}, :order => "position ASC", :include => include_associations)
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
# Accessor method to get a page part from a page.
|
125
125
|
# Example:
|
126
|
-
#
|
126
|
+
#
|
127
127
|
# Page.first[:body]
|
128
128
|
#
|
129
129
|
# Will return the body page part of the first page.
|
@@ -139,13 +139,13 @@ class Page < ActiveRecord::Base
|
|
139
139
|
|
140
140
|
super_value
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
# In the admin area we use a slightly different title to inform the which pages are draft or hidden pages
|
144
144
|
def title_with_meta
|
145
145
|
title = self.title
|
146
146
|
title << " <em>(hidden)</em>" unless self.show_in_menu?
|
147
147
|
title << " <em>(draft)</em>" if self.draft?
|
148
|
-
|
148
|
+
|
149
149
|
title.strip
|
150
150
|
end
|
151
151
|
|
@@ -153,7 +153,7 @@ class Page < ActiveRecord::Base
|
|
153
153
|
def all_page_part_content
|
154
154
|
self.parts.collect {|p| p.body}.join(" ")
|
155
155
|
end
|
156
|
-
|
156
|
+
|
157
157
|
# Returns how many pages per page should there be when paginating pages
|
158
158
|
def self.per_page(dialog = false)
|
159
159
|
dialog ? PAGES_PER_DIALOG : PAGES_PER_ADMIN_INDEX
|
@@ -14,6 +14,5 @@
|
|
14
14
|
<%= javascript_include_tag 'jquery', 'jquery-ui-1.8rc1.min.js', :cache => (use_caching ? "cache/libraries" : nil) if !using_google_libs or local_request? %>
|
15
15
|
<%= javascript_include_tag 'admin', 'thickbox', 'wymeditor/jquery.refinery.wymeditor.js', 'refinery/boot_wym', 'refinery/admin', :cache => (use_caching ? "cache/admin" : false) %>
|
16
16
|
<%= javascript_include_tag "http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js" if RefinerySetting.find_or_set(:show_firebug_lite, false) -%>
|
17
|
-
<%= "<script type='text/javascript'>jQuery(document).ready(function(){ jQuery('#flash').fadeIn(550); });</script>" unless flash.empty? -%>
|
18
17
|
<%= yield :head %>
|
19
18
|
</head>
|
@@ -2,8 +2,9 @@
|
|
2
2
|
<head>
|
3
3
|
<title><%= browser_title(yield(:title)) %></title>
|
4
4
|
<%= render :partial => 'shared/google_analytics' unless local_request? %>
|
5
|
-
<%= stylesheet_link_tag "
|
6
|
-
<%= stylesheet_link_tag "
|
5
|
+
<%= stylesheet_link_tag "application", "formatting", :theme => theme %>
|
6
|
+
<%= stylesheet_link_tag "theme" %>
|
7
|
+
<%= stylesheet_link_tag "home", :theme => theme if home_page? %>
|
7
8
|
<%= "<!--[if IE 7]>#{stylesheet_link_tag 'ie7'}<![endif]-->" if request.env['HTTP_USER_AGENT'] =~ /MSIE/ -%>
|
8
9
|
<%= auto_discovery_link_tag(:rss, news_items_url(:format => 'rss')) %>
|
9
10
|
<link rel="shortcut icon" href="/favicon.ico" />
|
@@ -1,40 +1,52 @@
|
|
1
1
|
<%= f.hidden_field field %>
|
2
2
|
<div>
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
<%= link_to "<span id='no_resource_selected' #{"style='display: none;'" if resource.present?}>
|
4
|
+
There is currently no #{description ||= resource} selected, click here to add one.
|
5
|
+
</span>", insert_admin_resources_url(:dialog => true,
|
6
|
+
:thickbox => true,
|
7
|
+
:update_resource => 'current_resource',
|
8
|
+
:update_text => 'current_resource_text',
|
9
|
+
:callback => 'resource_changed',
|
10
|
+
:field => "#{f.object.class.name.underscore.downcase}_#{field}",
|
11
|
+
:current_link => "#{resource.public_filename if resource.present?}"),
|
12
|
+
:name => "Add #{(description ||= 'resource').titleize}",
|
13
|
+
:id => "current_resource_link"
|
14
|
+
%>
|
8
15
|
<div id='current_resource_container' <%= "style='display:none'" unless resource.present? %>>
|
9
|
-
Current <%= description ||= "resource"
|
16
|
+
<span id='current_resource_tag'>Current <%= description ||= "resource" %>:</span>
|
10
17
|
<span id='current_resource_text'>
|
11
18
|
<%= "#{resource.title} (#{resource.public_filename})" if resource.present? %>
|
12
19
|
</span>
|
13
20
|
<br/>
|
14
|
-
<%= link_to "#{refinery_icon_tag("page_white_put.png")} Download current #{description ||= "resource"} (<em>Opens in a new window</em>)", "#{resource.public_filename
|
21
|
+
<%= link_to "#{refinery_icon_tag("page_white_put.png")} Download current #{description ||= "resource"} (<em>Opens in a new window</em>)", "#{resource.public_filename if resource.present?}",
|
15
22
|
:id => "current_resource",
|
16
23
|
:target => "_blank" %>
|
17
24
|
</div>
|
18
25
|
<br/>
|
19
26
|
<%= link_to "Remove current #{description ||= "resource"}", "",
|
20
27
|
:id => "remove_resource",
|
21
|
-
:style => "
|
28
|
+
:style => "#{"display:none;" unless resource.present?}" %>
|
22
29
|
</div>
|
23
30
|
|
24
31
|
<% content_for :head do %>
|
25
32
|
<script type='text/javascript'>
|
26
|
-
resource_changed = function() {
|
27
|
-
$('#current_resource_link').attr('href', $('#current_resource_link').attr('href').replace(/current_link=([^&])*&/, "current_link=" + $('#current_resource').attr('href') + "&"));
|
33
|
+
resource_changed = function(callback_args) {
|
28
34
|
$('#remove_resource').show();
|
29
35
|
$('#current_resource_container').show();
|
30
36
|
$('#no_resource_selected').hide();
|
37
|
+
$('iframe#dialog_iframe').dialog("close");
|
38
|
+
$('iframe#dialog_iframe').remove().parents(".ui-dialog").remove();
|
39
|
+
$('#<%= f.object.class.name.underscore.downcase %>_<%= field %>').val(callback_args.id);
|
40
|
+
$('#current_resource_link').attr('href', $('#current_resource_link').attr('href').replace(/current_link=([^&])*&/, "current_link=" + callback_args.href + "&"));
|
41
|
+
$("#current_resource").attr('href', callback_args.href);
|
42
|
+
$('#current_resource_text').html(callback_args.html);
|
31
43
|
}
|
32
44
|
|
33
45
|
$(document).ready(function(e) {
|
34
46
|
$('#remove_resource').click(function(e) {
|
35
|
-
$('#<%= f.object.class.name.underscore.downcase %>_<%= field %>').
|
47
|
+
$('#<%= f.object.class.name.underscore.downcase %>_<%= field %>').val("");
|
36
48
|
$('#current_resource_container').hide();
|
37
|
-
$('#current_resource_text').
|
49
|
+
$('#current_resource_text').html('');
|
38
50
|
$('#no_resource_selected').show();
|
39
51
|
$('#current_resource_link').attr('href', $('#current_resource_link').attr('href').replace(/current_link=([^&])*&/, "current_link=&"));
|
40
52
|
$(this).hide();
|
@@ -42,4 +54,4 @@
|
|
42
54
|
});
|
43
55
|
});
|
44
56
|
</script>
|
45
|
-
<% end %>
|
57
|
+
<% end %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class <%= class_name %> < ActiveRecord::Base
|
2
2
|
|
3
3
|
acts_as_indexed :fields => [:<%= attributes.collect{ |attribute| attribute.name if attribute.type.to_s =~ /string|text/ }.compact.uniq.join(", :") %>],
|
4
|
-
:index_file =>
|
4
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
5
5
|
|
6
6
|
validates_presence_of :<%= attributes.first.name %>
|
7
7
|
validates_uniqueness_of :<%= attributes.first.name %>
|
@@ -44,7 +44,7 @@ class Refinery::ApplicationController < ActionController::Base
|
|
44
44
|
protected
|
45
45
|
|
46
46
|
def setup_theme
|
47
|
-
self.view_paths = ::ActionController::Base.view_paths.dup.unshift(
|
47
|
+
self.view_paths = ::ActionController::Base.view_paths.dup.unshift(Rails.root.join("themes", RefinerySetting[:theme], "views").to_s)
|
48
48
|
end
|
49
49
|
|
50
50
|
def take_down_for_maintenance?
|
@@ -3,10 +3,6 @@ module Refinery::ApplicationHelper
|
|
3
3
|
|
4
4
|
include Refinery::HtmlTruncationHelper
|
5
5
|
|
6
|
-
def setup
|
7
|
-
logger.warn("*** Refinery::ApplicationHelper::setup has now been deprecated from the Refinery API. ***")
|
8
|
-
end
|
9
|
-
|
10
6
|
def browser_title(yield_title=nil)
|
11
7
|
[
|
12
8
|
yield_title.present? ? yield_title : nil,
|
@@ -15,6 +11,47 @@ module Refinery::ApplicationHelper
|
|
15
11
|
].compact.join(" - ")
|
16
12
|
end
|
17
13
|
|
14
|
+
# replace all system images with a thumbnail version of them (handy for all images inside a page part)
|
15
|
+
def content_fu(content, thumbnail)
|
16
|
+
content.scan(/\/system\/images([^\"\ ]*)/).flatten.each do |match|
|
17
|
+
parts = match.split(".")
|
18
|
+
extension = parts.pop
|
19
|
+
content.gsub!(match, "#{parts.join(".")}_#{thumbnail}.#{extension}")
|
20
|
+
end
|
21
|
+
|
22
|
+
return content
|
23
|
+
end
|
24
|
+
|
25
|
+
def descendant_page_selected?(page)
|
26
|
+
page.descendants.any? {|descendant| selected_page?(descendant) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def image_fu(image, thumbnail = nil , options={})
|
30
|
+
if image.present?
|
31
|
+
image_thumbnail = image.thumbnails.detect {|t| t.thumbnail == thumbnail.to_s}
|
32
|
+
image_thumbnail = image unless image_thumbnail.present?
|
33
|
+
image_tag image_thumbnail.public_filename, {:alt => image.title, :width => image_thumbnail.width, :height => image_thumbnail.height}.merge!(options)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def image_tag(source, options={})
|
38
|
+
theme = (options.delete(:theme) == true)
|
39
|
+
tag = super
|
40
|
+
# inject /theme/ into the image tag src if this is themed.
|
41
|
+
tag.gsub!(/src=[\"|\']/) { |m| "#{m}/theme/" }.gsub!("//", "/") if theme
|
42
|
+
|
43
|
+
tag
|
44
|
+
end
|
45
|
+
|
46
|
+
def javascript_include_tag(*sources)
|
47
|
+
theme = (arguments = sources.dup).extract_options![:theme] == true # don't ruin the current sources object
|
48
|
+
tag = super
|
49
|
+
# inject /theme/ into the javascript include tag src if this is themed.
|
50
|
+
tag.gsub!(/\/javascripts\//, "/theme/javascripts/").gsub!(/theme=(.+?)\ /, '') if theme
|
51
|
+
|
52
|
+
tag
|
53
|
+
end
|
54
|
+
|
18
55
|
# you can override the object used for the title by supplying options[:object]
|
19
56
|
# this object must support custom_title_type if you want custom titles.
|
20
57
|
def page_title(options = {})
|
@@ -64,36 +101,25 @@ module Refinery::ApplicationHelper
|
|
64
101
|
end
|
65
102
|
end
|
66
103
|
|
67
|
-
def
|
68
|
-
|
104
|
+
def refinery_icon_tag(filename, options = {})
|
105
|
+
image_tag "refinery/icons/#{filename}", {:width => 16, :height => 16}.merge!(options)
|
69
106
|
end
|
70
107
|
|
71
108
|
def selected_page?(page)
|
72
109
|
selected = current_page?(page) or (request.path =~ Regexp.new(page.menu_match) unless page.menu_match.blank?) or (request.path == page.link_url)
|
73
110
|
end
|
74
111
|
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
image_tag image.public_filename(thumbnail), {:alt => image.title}.merge!(options)
|
81
|
-
end
|
82
|
-
end
|
112
|
+
def stylesheet_link_tag(*sources)
|
113
|
+
theme = (arguments = sources.dup).extract_options![:theme] == true # don't ruin the current sources object
|
114
|
+
tag = super
|
115
|
+
# inject /theme/ into the stylesheet link tag href if this is themed.
|
116
|
+
tag.gsub!(/\/stylesheets\//, "/theme/stylesheets/").gsub!(/theme=(.+?)\ /, '') if theme
|
83
117
|
|
84
|
-
|
85
|
-
image_tag "refinery/icons/#{filename}", {:width => 16, :height => 16}.merge!(options)
|
118
|
+
tag
|
86
119
|
end
|
87
120
|
|
88
|
-
|
89
|
-
|
90
|
-
content.scan(/\/system\/images([^\"\ ]*)/).flatten.each do |match|
|
91
|
-
parts = match.split(".")
|
92
|
-
extension = parts.pop
|
93
|
-
content.gsub!(match, "#{parts.join(".")}_#{thumbnail}.#{extension}")
|
94
|
-
end
|
95
|
-
|
96
|
-
return content
|
121
|
+
def setup
|
122
|
+
logger.warn("*** Refinery::ApplicationHelper::setup has now been deprecated from the Refinery API. ***")
|
97
123
|
end
|
98
124
|
|
99
|
-
end
|
125
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
begin
|
2
2
|
# Try to include the rails initializer. If this isn't in a gem, this will fail.
|
3
|
-
require 'initializer' unless REFINERY_ROOT == RAILS_ROOT # A Refinery gem install's
|
3
|
+
require 'initializer' unless REFINERY_ROOT == RAILS_ROOT # A Refinery gem install's Rails.root is not the REFINERY_ROOT.
|
4
4
|
rescue LoadError => load_error
|
5
5
|
end
|
6
6
|
|
@@ -21,7 +21,7 @@ module Refinery
|
|
21
21
|
# add plugin lib paths to the $LOAD_PATH so that rake tasks etc. can be run when using a gem for refinery or gems for plugins.
|
22
22
|
search_for = Regexp.new(File.join(%W(\( #{REFINERY_ROOT} vendor plugins \)? .+? lib)))
|
23
23
|
paths = plugins.collect{ |plugin| plugin.load_paths }.flatten.reject{|path| path.scan(search_for).empty? or path.include?('/rails-') }
|
24
|
-
paths = paths.reject{ |path| path.include?(REFINERY_ROOT) } if REFINERY_ROOT ==
|
24
|
+
paths = paths.reject{ |path| path.include?(REFINERY_ROOT) } if REFINERY_ROOT == Rails.root.to_s # superfluous when not in gem.
|
25
25
|
($refinery_gem_plugin_lib_paths = paths).each do |path|
|
26
26
|
$LOAD_PATH.unshift path
|
27
27
|
end
|
@@ -34,7 +34,6 @@ module Refinery
|
|
34
34
|
class Initializer < Rails::Initializer
|
35
35
|
def self.run(command = :process, configuration = Configuration.new)
|
36
36
|
Rails.configuration = configuration
|
37
|
-
#configuration.reload_plugins = true if RAILS_ENV =~ /development/ and REFINERY_ROOT == RAILS_ROOT # seems to work, don't in gem.
|
38
37
|
configuration.plugin_loader = Refinery::PluginLoader
|
39
38
|
super
|
40
39
|
end
|
@@ -4,8 +4,8 @@ namespace :refinery do
|
|
4
4
|
task :override => :environment do
|
5
5
|
dirs = ["app", "app/views", "app/views/layouts", "app/views/admin", "app/views/shared", "app/controllers", "app/models", "app/controllers/admin", "app/helpers", "app/helpers/admin"]
|
6
6
|
dirs.each do |dir|
|
7
|
-
dir =
|
8
|
-
|
7
|
+
dir = Rails.root.join(dir.split('/').join(File::SEPARATOR))
|
8
|
+
dir.mkdir unless dir.directory?
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -26,8 +26,8 @@ namespace :refinery do
|
|
26
26
|
namespace :cache do
|
27
27
|
desc "Eliminate existing cache files for javascript and stylesheet resources in default directories"
|
28
28
|
task :clear => :environment do
|
29
|
-
FileUtils.rm(Dir[
|
30
|
-
FileUtils.rm(Dir[
|
29
|
+
FileUtils.rm(Dir[Rails.root.join("public", "javascripts", "cache", "[^.]*")])
|
30
|
+
FileUtils.rm(Dir[Rails.root.join("public", "stylesheets", "cache", "[^.]*")])
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -169,7 +169,7 @@ In our example above we extended Refinery to manage a products area. The problem
|
|
169
169
|
|
170
170
|
To achieve this all you need to do is open up the product model (found in ``/vendor/plugins/products/app/models/product.rb``) and add the following line inside your class:
|
171
171
|
|
172
|
-
has_friendly_id :title, :use_slug => true
|
172
|
+
has_friendly_id :title, :use_slug => true
|
173
173
|
|
174
174
|
Note you want to change ``:title`` to the field which you want to show up in the URL.
|
175
175
|
|
@@ -9,6 +9,6 @@ end
|
|
9
9
|
require_dependency 'refinery/form_helpers'
|
10
10
|
require_dependency 'refinery/base_presenter'
|
11
11
|
|
12
|
-
presenters_path = "
|
12
|
+
presenters_path = Rails.root.join("app", "presenters").to_s
|
13
13
|
$LOAD_PATH << presenters_path
|
14
14
|
::ActiveSupport::Dependencies.load_paths << presenters_path
|
@@ -1,24 +1,25 @@
|
|
1
1
|
class Resource < ActiveRecord::Base
|
2
2
|
|
3
|
+
# Docs for attachment_fu http://github.com/technoweenie/attachment_fu
|
3
4
|
has_attachment :storage => (USE_S3_BACKEND ? :s3 : :file_system),
|
4
5
|
:size => 0.kilobytes..50.megabytes,
|
5
6
|
:path_prefix => (USE_S3_BACKEND ? nil : 'public/system/resources')
|
6
7
|
|
8
|
+
validates_as_attachment
|
9
|
+
|
10
|
+
# Docs for acts_as_indexed http://github.com/dougal/acts_as_indexed
|
7
11
|
acts_as_indexed :fields => [:title, :type_of_content],
|
8
|
-
|
12
|
+
:index_file => [Rails.root.to_s, "tmp", "index"]
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
# when a dialog pops up with images, how many images per page should there be
|
15
|
+
PAGES_PER_DIALOG = 12
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
enum = attachment_options[attr_name]
|
16
|
-
unless enum.nil? || enum.include?(send(attr_name))
|
17
|
-
errors.add_to_base("Files should be smaller than 50 MB in size")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
17
|
+
# when listing images out in the admin area, how many images should show per page
|
18
|
+
PAGES_PER_ADMIN_INDEX = 20
|
21
19
|
|
20
|
+
# How many images per page should be displayed?
|
21
|
+
def self.per_page(dialog = false)
|
22
|
+
dialog ? PAGES_PER_DIALOG : PAGES_PER_ADMIN_INDEX
|
22
23
|
end
|
23
24
|
|
24
25
|
# used for searching
|
@@ -26,12 +27,10 @@ class Resource < ActiveRecord::Base
|
|
26
27
|
self.content_type.split("/").join(" ")
|
27
28
|
end
|
28
29
|
|
30
|
+
# Returns a titleized version of the filename
|
31
|
+
# my_file.pdf returns My File
|
29
32
|
def title
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.per_page(dialog = false)
|
34
|
-
size = (dialog ? 12 : 20)
|
33
|
+
self.filename.gsub(/\.\w+$/, '').titleize
|
35
34
|
end
|
36
35
|
|
37
36
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class='clearfix'>
|
2
2
|
<div id='dialog_menu_left'>
|
3
3
|
<% unless @resources.empty? %>
|
4
|
-
<span id='existing_resource_radio' class='radio'>
|
4
|
+
<span id='existing_resource_radio' class='radio<%= " selected_radio" if @resource.errors.empty? and @resources.size > 0 %>'>
|
5
5
|
<input type='radio' name='resource_type' value='existing_resource' id='resource_type_existing' <%= "checked='true'" if @resource.errors.empty? %> />
|
6
6
|
<label for='resource_type_existing' class='stripped'>Existing File</label>
|
7
7
|
</span>
|
@@ -44,8 +44,6 @@
|
|
44
44
|
<% if @thickbox %>
|
45
45
|
<div id='dialog-form-actions' class='form-actions'>
|
46
46
|
<%= submit_tag 'Insert', :id => "submit_button" %>
|
47
|
-
or
|
48
|
-
<%= link_to "Cancel", "", :id => "cancel_button", :class => "close_dialog" %>
|
49
47
|
|
50
48
|
<%= will_paginate @resources,
|
51
49
|
:previous_label => '« Previous',
|
@@ -59,6 +57,7 @@
|
|
59
57
|
<script type='text/javascript'>
|
60
58
|
$(document).ready(function(){
|
61
59
|
link_dialog.init();
|
60
|
+
resource_picker.init(<%= @callback.present? ? "self.parent.#{@callback}" : "null" %>);
|
62
61
|
});
|
63
62
|
</script>
|
64
63
|
<% end %>
|
@@ -1,28 +1,27 @@
|
|
1
1
|
class ThemesController < ApplicationController
|
2
|
-
|
2
|
+
|
3
3
|
def stylesheets
|
4
4
|
render_theme_item(:stylesheets, params[:filepath])
|
5
|
-
end
|
6
|
-
|
7
|
-
def javascripts
|
5
|
+
end
|
6
|
+
|
7
|
+
def javascripts
|
8
8
|
render_theme_item(:javascripts, params[:filepath])
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def images
|
12
12
|
render_theme_item(:images, params[:filepath])
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
protected
|
16
|
-
|
16
|
+
|
17
17
|
def render_theme_item(type, relative_path)
|
18
|
-
file_path = File.join(
|
19
|
-
if File.exists? file_path
|
18
|
+
if File.exist?(file_path = File.join(Rails.root, "themes", RefinerySetting[:theme], type.to_s, relative_path))
|
20
19
|
send_file(file_path, :type => mime_for(relative_path), :disposition => 'inline', :stream => true)
|
21
20
|
else
|
22
21
|
return error_404
|
23
22
|
end
|
24
23
|
end
|
25
|
-
|
24
|
+
|
26
25
|
def mime_for(filename)
|
27
26
|
# could we use the built in Rails mime types to work this out?
|
28
27
|
case filename.last.downcase
|
@@ -36,7 +36,7 @@ class Theme < ActiveRecord::Base
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def theme_path
|
39
|
-
|
39
|
+
Rails.root.join("themes", folder_title).to_s
|
40
40
|
end
|
41
41
|
|
42
42
|
def preview_image
|
@@ -50,7 +50,7 @@ class Theme < ActiveRecord::Base
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def self.directory_is_writable?
|
53
|
-
|
53
|
+
Rails.root.join("themes").writable? # Heroku users (or users with read-only filesystem) will receive false here
|
54
54
|
end
|
55
55
|
|
56
56
|
end
|
@@ -5,8 +5,8 @@ ActionController::Routing::Routes.draw do |map|
|
|
5
5
|
end
|
6
6
|
|
7
7
|
# allows theme files that are not in the Rails public directory to be served back to the client
|
8
|
-
map.connect 'stylesheets
|
9
|
-
map.connect 'javascripts
|
10
|
-
map.connect 'images
|
8
|
+
map.connect 'theme/stylesheets/*filepath', :controller => 'themes', :action => 'stylesheets'
|
9
|
+
map.connect 'theme/javascripts/*filepath', :controller => 'themes', :action => 'javascripts'
|
10
|
+
map.connect 'theme/images/*filepath', :controller => 'themes', :action => 'images'
|
11
11
|
|
12
12
|
end
|
@@ -119,7 +119,7 @@ You need to update the URL so it requests ``/images/themes`` instead of just ``/
|
|
119
119
|
So the result is simply:
|
120
120
|
|
121
121
|
#footer {
|
122
|
-
background: url('/images/
|
122
|
+
background: url('/theme/images/footer_background.png') repeat-x;
|
123
123
|
}
|
124
124
|
|
125
125
|
This is the same with linking to Javascript and Stylesheets in your view. Say our ``application.html.erb`` layout had something like this:
|
@@ -128,7 +128,7 @@ This is the same with linking to Javascript and Stylesheets in your view. Say ou
|
|
128
128
|
|
129
129
|
You just need to change that to:
|
130
130
|
|
131
|
-
<%= stylesheet_link_tag '
|
131
|
+
<%= stylesheet_link_tag 'application', :theme => true %>
|
132
132
|
|
133
133
|
## I'm Stuck, is there an Example Theme?
|
134
134
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinerycms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.6.
|
4
|
+
version: 0.9.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Resolve Digital
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2010-02-
|
14
|
+
date: 2010-02-08 00:00:00 +13:00
|
15
15
|
default_executable:
|
16
16
|
dependencies: []
|
17
17
|
|