refinerycms 0.9.6.2 → 0.9.6.3
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/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
|
|