refinerycms 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/helpers/application_helper.rb +7 -0
- data/db/seeds.rb +1 -1
- data/public/javascripts/wymeditor/boot_wym.js +147 -147
- data/public/stylesheets/refinery.css +23 -12
- data/vendor/plugins/images/lib/tasks/images.rake +18 -1
- data/vendor/plugins/inquiries/init.rb +4 -1
- data/vendor/plugins/pages/app/controllers/admin/page_parts_controller.rb +6 -25
- data/vendor/plugins/pages/app/views/admin/pages/_form.html.erb +117 -26
- data/vendor/plugins/pages/app/views/admin/pages/_page_part_field.html.erb +4 -0
- data/vendor/plugins/pages/config/routes.rb +2 -3
- data/vendor/plugins/refinery/lib/crud.rb +4 -1
- data/vendor/plugins/refinery/{app/controllers/admin/base_controller.rb → lib/refinery/admin_base_controller.rb} +1 -1
- data/vendor/plugins/refinery/{app/helpers → lib/refinery}/application_helper.rb +1 -1
- metadata +6 -5
- data/vendor/plugins/pages/app/views/admin/page_parts/new.html.erb +0 -11
@@ -0,0 +1,7 @@
|
|
1
|
+
# Methods added to this helper will be available to all templates in the application.
|
2
|
+
|
3
|
+
# You can extend refinery with your own functions here and they will likely not get overriden in an update.
|
4
|
+
module ApplicationHelper
|
5
|
+
include Refinery::ApplicationHelper # leave this line in to include all of Refinery's core helper methods.
|
6
|
+
|
7
|
+
end
|
data/db/seeds.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
[{:name => "site_name", :value => "Company Name"},
|
2
|
-
{:name => "new_page_parts", :value =>
|
2
|
+
{:name => "new_page_parts", :value => false},
|
3
3
|
{:name => "activity_show_limit", :value => 10},
|
4
4
|
{:name => "preferred_image_view", :value => :grid},
|
5
5
|
{:name => "analytics_page_code", :value => "UA-xxxxxx-x"},
|
@@ -1,154 +1,154 @@
|
|
1
1
|
jQuery.noConflict();
|
2
2
|
var wymeditor_inputs = [];
|
3
|
-
|
4
|
-
{
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
3
|
+
var wymeditors_loaded = 0;
|
4
|
+
var wymeditor_boot_options = {
|
5
|
+
skin: 'refinery'
|
6
|
+
, basePath: "/javascripts/wymeditor/"
|
7
|
+
, wymPath: "/javascripts/wymeditor/jquery.refinery.wymeditor.js"
|
8
|
+
, cssSkinPath: "/stylesheets/wymeditor/skins/"
|
9
|
+
, jsSkinPath: "/javascripts/wymeditor/skins/"
|
10
|
+
, langPath: "/javascripts/wymeditor/lang/"
|
11
|
+
, iframeBasePath: '/'
|
12
|
+
, toolsItems: [
|
13
|
+
{'name': 'Bold', 'title': 'Bold', 'css': 'wym_tools_strong'}
|
14
|
+
,{'name': 'Italic', 'title': 'Emphasis', 'css': 'wym_tools_emphasis'}
|
15
|
+
,{'name': 'InsertOrderedList', 'title': 'Ordered_List', 'css': 'wym_tools_ordered_list'}
|
16
|
+
,{'name': 'InsertUnorderedList', 'title': 'Unordered_List', 'css': 'wym_tools_unordered_list'}
|
17
|
+
,{'name': 'CreateLink', 'title': 'Link', 'css': 'wym_tools_link'}
|
18
|
+
,{'name': 'Unlink', 'title': 'Unlink', 'css': 'wym_tools_unlink'}
|
19
|
+
,{'name': 'InsertImage', 'title': 'Image', 'css': 'wym_tools_image'}
|
20
|
+
,{'name': 'InsertTable', 'title': 'Table', 'css': 'wym_tools_table'}
|
21
|
+
,{'name': 'ToggleHtml', 'title': 'HTML', 'css': 'wym_tools_html'}
|
22
|
+
,{'name': 'Paste', 'title': 'Paste_From_Word', 'css': 'wym_tools_paste'}
|
23
|
+
]
|
24
|
+
|
25
|
+
,toolsHtml: "<ul class='wym_tools wym_section'>" + WYMeditor.TOOLS_ITEMS + WYMeditor.CLASSES + "</ul>"
|
26
|
+
|
27
|
+
,toolsItemHtml:
|
28
|
+
"<li class='" + WYMeditor.TOOL_CLASS + "'>"
|
29
|
+
+ "<a href='#' name='" + WYMeditor.TOOL_NAME + "' title='" + WYMeditor.TOOL_TITLE + "'>" + WYMeditor.TOOL_TITLE + "</a>"
|
30
|
+
+ "</li>"
|
31
|
+
|
32
|
+
//containersItems will be appended after tools in postInit.
|
33
|
+
, containersItems: [
|
34
|
+
{'name': 'h1', 'title':'Heading_1', 'css':'wym_containers_h1'}
|
35
|
+
,{'name': 'h2', 'title':'Heading_2', 'css':'wym_containers_h2'}
|
36
|
+
,{'name': 'h3', 'title':'Heading_3', 'css':'wym_containers_h3'}
|
37
|
+
,{'name': 'p', 'title':'Paragraph', 'css':'wym_containers_p'}
|
38
|
+
]
|
39
|
+
|
40
|
+
, classesHtml: "<li class='wym_tools_class'><a href='#' name='" + WYMeditor.APPLY_CLASS + "' title='"+ titleize(WYMeditor.APPLY_CLASS) +"'></a><ul class='wym_classes wym_classes_hidden'>" + WYMeditor.CLASSES_ITEMS + "</ul></li>"
|
41
|
+
|
42
|
+
, classesItemHtml: "<li><a href='#' name='"+ WYMeditor.CLASS_NAME + "'>"+ WYMeditor.CLASS_TITLE+ "</a></li>"
|
43
|
+
, classesItemHtmlMultiple: "<li class='wym_tools_class_multiple_rules'><span>" + WYMeditor.CLASS_TITLE + "</span><ul>{classesItemHtml}</ul></li>"
|
44
|
+
|
45
|
+
, classesItems: [{name:'text-align', rules:['left', 'center', 'right', 'justify'], join: '-'}, {name: 'image-align', rules:['left', 'right'], join: '-'}, {name: 'font-size', rules:['small','normal','large'], join: '-'}]
|
46
|
+
|
47
|
+
, containersHtml: "<ul class='wym_containers wym_section'>" + WYMeditor.CONTAINERS_ITEMS + "</ul>"
|
48
|
+
|
49
|
+
, containersItemHtml:
|
50
|
+
"<li class='" + WYMeditor.CONTAINER_CLASS + "'>"
|
51
|
+
+ "<a href='#' name='" + WYMeditor.CONTAINER_NAME + "' title='" + WYMeditor.CONTAINER_TITLE + "'></a>"
|
35
52
|
+ "</li>"
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
,{'name': 'p', 'title':'Paragraph', 'css':'wym_containers_p'}
|
43
|
-
]
|
44
|
-
|
45
|
-
, classesHtml: "<li class='wym_tools_class'><a href='#' name='" + WYMeditor.APPLY_CLASS + "' title='"+ titleize(WYMeditor.APPLY_CLASS) +"'></a><ul class='wym_classes wym_classes_hidden'>" + WYMeditor.CLASSES_ITEMS + "</ul></li>"
|
46
|
-
|
47
|
-
, classesItemHtml: "<li><a href='#' name='"+ WYMeditor.CLASS_NAME + "'>"+ WYMeditor.CLASS_TITLE+ "</a></li>"
|
48
|
-
, classesItemHtmlMultiple: "<li class='wym_tools_class_multiple_rules'><span>" + WYMeditor.CLASS_TITLE + "</span><ul>{classesItemHtml}</ul></li>"
|
49
|
-
|
50
|
-
, classesItems: [{name:'text-align', rules:['left', 'center', 'right', 'justify'], join: '-'}, {name: 'image-align', rules:['left', 'right'], join: '-'}, {name: 'font-size', rules:['small','normal','large'], join: '-'}]
|
51
|
-
|
52
|
-
, containersHtml: "<ul class='wym_containers wym_section'>" + WYMeditor.CONTAINERS_ITEMS + "</ul>"
|
53
|
-
|
54
|
-
, containersItemHtml:
|
55
|
-
"<li class='" + WYMeditor.CONTAINER_CLASS + "'>"
|
56
|
-
+ "<a href='#' name='" + WYMeditor.CONTAINER_NAME + "' title='" + WYMeditor.CONTAINER_TITLE + "'></a>"
|
57
|
-
+ "</li>"
|
58
|
-
|
59
|
-
, boxHtml:
|
60
|
-
"<div class='wym_box'>"
|
61
|
-
+ "<div class='wym_area_top'>"
|
62
|
-
+ WYMeditor.TOOLS
|
63
|
-
+ WYMeditor.CONTAINERS
|
64
|
-
+ "</div>"
|
65
|
-
+ "<div class='wym_area_main'>"
|
66
|
-
+ WYMeditor.HTML
|
67
|
-
+ WYMeditor.IFRAME
|
68
|
-
+ WYMeditor.STATUS
|
69
|
-
+ "</div>"
|
53
|
+
|
54
|
+
, boxHtml:
|
55
|
+
"<div class='wym_box'>"
|
56
|
+
+ "<div class='wym_area_top'>"
|
57
|
+
+ WYMeditor.TOOLS
|
58
|
+
+ WYMeditor.CONTAINERS
|
70
59
|
+ "</div>"
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
"<div class='wym_dialog wym_dialog_table'>"
|
85
|
-
+ "<form>"
|
86
|
-
+ "<input type='hidden' id='wym_dialog_type' class='wym_dialog_type' value='"+ WYMeditor.DIALOG_TABLE + "' />"
|
87
|
-
+ "<div class='field'>"
|
88
|
-
+ "<label for='wym_caption'>{Caption}</label>"
|
89
|
-
+ "<input type='text' id='wym_caption' class='wym_caption' value='' size='40' />"
|
90
|
-
+ "</div>"
|
91
|
-
+ "<div class='field'>"
|
92
|
-
+ "<label for='wym_rows'>{Number_Of_Rows}</label>"
|
93
|
-
+ "<input type='text' id='wym_rows' class='wym_rows' value='3' size='3' />"
|
94
|
-
+ "</div>"
|
95
|
-
+ "<div class='field'>"
|
96
|
-
+ "<label for='wym_cols'>{Number_Of_Cols}</label>"
|
97
|
-
+ "<input type='text' id='wym_cols' class='wym_cols' value='2' size='3' />"
|
98
|
-
+ "</div>"
|
99
|
-
+ "<div id='dialog-form-actions' class='form-actions'>"
|
100
|
-
+ "<input class='wym_submit' type='button' value='{Insert}' />"
|
101
|
-
+ " or "
|
102
|
-
+ "<a class='wym_cancel close_dialog' type='button' href=''>{Cancel}</a>"
|
103
|
-
+ "</div>"
|
104
|
-
+ "</form>"
|
105
|
-
+ "</div>"
|
106
|
-
|
107
|
-
, dialogPasteHtml:
|
108
|
-
"<div class='wym_dialog wym_dialog_paste'>"
|
109
|
-
+ "<form>"
|
110
|
-
+ "<input type='hidden' id='wym_dialog_type' class='wym_dialog_type' value='" + WYMeditor.DIALOG_PASTE + "' />"
|
111
|
-
+ "<div class='field'>"
|
112
|
-
+ "<label for='wym_text'>{Text_From_Word}</label"
|
113
|
-
+ "<textarea class='wym_text' rows='10' cols='50'></textarea>"
|
114
|
-
+ "</div>"
|
115
|
-
+ "<div id='dialog-form-actions' class='form-actions'>"
|
116
|
-
+ "<input class='wym_submit' type='button' value='{Insert}' />"
|
117
|
-
+ " or "
|
118
|
-
+ "<a class='wym_cancel close_dialog' type='button' href=''>{Cancel}</a>"
|
119
|
-
+ "</div>"
|
120
|
-
+ "</form>"
|
121
|
-
+ "</div>"
|
122
|
-
|
123
|
-
, dialogPath: "/admin/dialogs/"
|
124
|
-
, dialogFeatures: "?width=958&height=460&modal=true&titlebar=true&auto_size_content=true&draggable=true"
|
125
|
-
, dialogInlineFeatures: "?width=600&height=320&modal=true&titlebar=true&auto_size_content=true&draggable=true"
|
126
|
-
|
127
|
-
, dialogId: 'TB_window'
|
128
|
-
|
129
|
-
, dialogHtml:
|
130
|
-
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
|
131
|
-
+ "<html dir='" + WYMeditor.DIRECTION + "'>"
|
132
|
-
+ "<head>"
|
133
|
-
+ "<link rel='stylesheet' type='text/css' media='screen' href='" + WYMeditor.CSS_PATH + "' />"
|
134
|
-
+ "<title>" + WYMeditor.DIALOG_TITLE + "</title>"
|
135
|
-
+ "<script type='text/javascript' src='" + WYMeditor.JQUERY_PATH + "'></script>"
|
136
|
-
+ "<script type='text/javascript' src='" + WYMeditor.WYM_PATH + "'></script>"
|
137
|
-
+ "</head>"
|
138
|
-
+ "<div id='page'>" + WYMeditor.DIALOG_BODY + "</div>"
|
139
|
-
+ "</html>"
|
140
|
-
|
141
|
-
, postInit: function(wym)
|
142
|
-
{
|
143
|
-
wym._iframe.style.height = wym._element.height() + "px";
|
144
|
-
wym_editors_loaded += 1;
|
145
|
-
if(WYMeditor.INSTANCES.length == wym_editors_loaded){
|
146
|
-
WYMeditor.loaded();
|
147
|
-
}
|
148
|
-
}
|
149
|
-
});
|
60
|
+
+ "<div class='wym_area_main'>"
|
61
|
+
+ WYMeditor.HTML
|
62
|
+
+ WYMeditor.IFRAME
|
63
|
+
+ WYMeditor.STATUS
|
64
|
+
+ "</div>"
|
65
|
+
+ "</div>"
|
66
|
+
|
67
|
+
, iframeHtml:
|
68
|
+
"<div class='wym_iframe wym_section'>"
|
69
|
+
+ "<iframe src='" + WYMeditor.IFRAME_BASE_PATH + "wymiframe' frameborder='0'"
|
70
|
+
+ "onload='this.contentWindow.parent.WYMeditor.INSTANCES[" + WYMeditor.INDEX + "].initIframe(this); init_tooltips();'>"
|
71
|
+
+ "</iframe>"
|
72
|
+
+"</div>"
|
150
73
|
|
151
|
-
|
74
|
+
, dialogImageHtml: ""
|
75
|
+
|
76
|
+
, dialogLinkHtml: ""
|
77
|
+
|
78
|
+
, dialogTableHtml:
|
79
|
+
"<div class='wym_dialog wym_dialog_table'>"
|
80
|
+
+ "<form>"
|
81
|
+
+ "<input type='hidden' id='wym_dialog_type' class='wym_dialog_type' value='"+ WYMeditor.DIALOG_TABLE + "' />"
|
82
|
+
+ "<div class='field'>"
|
83
|
+
+ "<label for='wym_caption'>{Caption}</label>"
|
84
|
+
+ "<input type='text' id='wym_caption' class='wym_caption' value='' size='40' />"
|
85
|
+
+ "</div>"
|
86
|
+
+ "<div class='field'>"
|
87
|
+
+ "<label for='wym_rows'>{Number_Of_Rows}</label>"
|
88
|
+
+ "<input type='text' id='wym_rows' class='wym_rows' value='3' size='3' />"
|
89
|
+
+ "</div>"
|
90
|
+
+ "<div class='field'>"
|
91
|
+
+ "<label for='wym_cols'>{Number_Of_Cols}</label>"
|
92
|
+
+ "<input type='text' id='wym_cols' class='wym_cols' value='2' size='3' />"
|
93
|
+
+ "</div>"
|
94
|
+
+ "<div id='dialog-form-actions' class='form-actions'>"
|
95
|
+
+ "<input class='wym_submit' type='button' value='{Insert}' />"
|
96
|
+
+ " or "
|
97
|
+
+ "<a class='wym_cancel close_dialog' type='button' href=''>{Cancel}</a>"
|
98
|
+
+ "</div>"
|
99
|
+
+ "</form>"
|
100
|
+
+ "</div>"
|
101
|
+
|
102
|
+
, dialogPasteHtml:
|
103
|
+
"<div class='wym_dialog wym_dialog_paste'>"
|
104
|
+
+ "<form>"
|
105
|
+
+ "<input type='hidden' id='wym_dialog_type' class='wym_dialog_type' value='" + WYMeditor.DIALOG_PASTE + "' />"
|
106
|
+
+ "<div class='field'>"
|
107
|
+
+ "<label for='wym_text'>{Text_From_Word}</label"
|
108
|
+
+ "<textarea class='wym_text' rows='10' cols='50'></textarea>"
|
109
|
+
+ "</div>"
|
110
|
+
+ "<div id='dialog-form-actions' class='form-actions'>"
|
111
|
+
+ "<input class='wym_submit' type='button' value='{Insert}' />"
|
112
|
+
+ " or "
|
113
|
+
+ "<a class='wym_cancel close_dialog' type='button' href=''>{Cancel}</a>"
|
114
|
+
+ "</div>"
|
115
|
+
+ "</form>"
|
116
|
+
+ "</div>"
|
117
|
+
|
118
|
+
, dialogPath: "/admin/dialogs/"
|
119
|
+
, dialogFeatures: "?width=958&height=460&modal=true&titlebar=true&auto_size_content=true&draggable=true"
|
120
|
+
, dialogInlineFeatures: "?width=600&height=320&modal=true&titlebar=true&auto_size_content=true&draggable=true"
|
121
|
+
|
122
|
+
, dialogId: 'TB_window'
|
123
|
+
|
124
|
+
, dialogHtml:
|
125
|
+
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
|
126
|
+
+ "<html dir='" + WYMeditor.DIRECTION + "'>"
|
127
|
+
+ "<head>"
|
128
|
+
+ "<link rel='stylesheet' type='text/css' media='screen' href='" + WYMeditor.CSS_PATH + "' />"
|
129
|
+
+ "<title>" + WYMeditor.DIALOG_TITLE + "</title>"
|
130
|
+
+ "<script type='text/javascript' src='" + WYMeditor.JQUERY_PATH + "'></script>"
|
131
|
+
+ "<script type='text/javascript' src='" + WYMeditor.WYM_PATH + "'></script>"
|
132
|
+
+ "</head>"
|
133
|
+
+ "<div id='page'>" + WYMeditor.DIALOG_BODY + "</div>"
|
134
|
+
+ "</html>"
|
135
|
+
|
136
|
+
, postInit: function(wym)
|
137
|
+
{
|
138
|
+
wym._iframe.style.height = wym._element.height() + "px";
|
139
|
+
wymeditors_loaded += 1;
|
140
|
+
if(WYMeditor.INSTANCES.length == wymeditors_loaded){
|
141
|
+
WYMeditor.loaded();
|
142
|
+
}
|
143
|
+
}
|
144
|
+
};
|
152
145
|
|
153
146
|
// custom function added by us to hook into when all wymeditor instances on the page have finally loaded:
|
154
|
-
WYMeditor.loaded = function(){}
|
147
|
+
WYMeditor.loaded = function(){}
|
148
|
+
|
149
|
+
jQuery(function()
|
150
|
+
{
|
151
|
+
wymeditor_inputs = jQuery('.wymeditor');
|
152
|
+
wymeditor_inputs.hide();
|
153
|
+
wymeditor_inputs.wymeditor(wymeditor_boot_options);
|
154
|
+
});
|
@@ -888,8 +888,13 @@ a img {
|
|
888
888
|
/* page parts */
|
889
889
|
|
890
890
|
ul#page_parts {
|
891
|
-
|
892
|
-
|
891
|
+
float: left;
|
892
|
+
width: 95%;
|
893
|
+
}
|
894
|
+
|
895
|
+
ul#page_parts, ul#page_parts_controls {
|
896
|
+
margin: 20px 0 0 0;
|
897
|
+
padding: 0;
|
893
898
|
}
|
894
899
|
|
895
900
|
ul#page_parts li {
|
@@ -899,30 +904,36 @@ ul#page_parts li {
|
|
899
904
|
}
|
900
905
|
|
901
906
|
ul#page_parts li a {
|
907
|
+
float: left;
|
902
908
|
line-height: 27px;
|
903
|
-
display: block;
|
904
909
|
background: #c2c3b3;
|
905
910
|
padding: 0px 8px;
|
906
911
|
border-bottom: none;
|
907
912
|
margin-top: 6px;
|
908
913
|
}
|
909
914
|
|
910
|
-
ul#page_parts li
|
915
|
+
ul#page_parts li.active a {
|
911
916
|
background: #808080;
|
912
917
|
line-height: 33px;
|
913
918
|
color: white;
|
914
919
|
margin-top: 0px;
|
915
920
|
}
|
921
|
+
ul#page_parts_controls {
|
922
|
+
float: right;
|
923
|
+
width: 5%;
|
924
|
+
}
|
916
925
|
|
917
|
-
#
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
margin-top: 9px;
|
922
|
-
display: block;
|
923
|
-
float: left;
|
926
|
+
ul#page_parts_controls li {
|
927
|
+
list-style: none;
|
928
|
+
float: right;
|
929
|
+
margin: 12px 3px 0px 3px;
|
924
930
|
}
|
925
|
-
|
931
|
+
|
932
|
+
ul#page_parts_controls li a {
|
933
|
+
border: 0px none;
|
934
|
+
}
|
935
|
+
|
936
|
+
ul#page_parts_controls img {
|
926
937
|
vertical-align: middle;
|
927
938
|
}
|
928
939
|
|
@@ -24,5 +24,22 @@ namespace :images do
|
|
24
24
|
|
25
25
|
puts "Image regeneration complete."
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
desc "Update thumbnails. Useful for when you have added new thumbnail sizes and you just need to regenerate those without regenerating all the thumbnails again."
|
29
|
+
task :update => :environment do
|
30
|
+
originals = Image.originals
|
31
|
+
|
32
|
+
puts "Preparing to update #{originals.size} images. This may take a few minutes. Please wait..."
|
33
|
+
|
34
|
+
originals.each do |image|
|
35
|
+
begin
|
36
|
+
image.save
|
37
|
+
rescue Exception => e
|
38
|
+
puts "--> ERROR image #{image.id} could not be saved because #{e.message}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
puts "Thumbnail update complete."
|
43
|
+
end
|
44
|
+
|
28
45
|
end
|
@@ -8,4 +8,7 @@ Refinery::Plugin.register do |plugin|
|
|
8
8
|
{:class => Inquiry, :title => "name", :url_prefix => "", :created_image => "user_comment.png", :updated_image => "user_edit.png"},
|
9
9
|
{:class => InquirySetting, :url_prefix => "edit", :title => 'name', :url_prefix => 'edit', :created_image => "user_comment.png", :updated_image => "user_edit.png"}
|
10
10
|
]
|
11
|
-
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Set the actionmailer root so that it'll work for delivering emails from this plugin.
|
14
|
+
ActionMailer::Base.template_root = "#{REFINERY_ROOT}/vendor/plugins/inquiries/app/views"
|
@@ -1,34 +1,15 @@
|
|
1
1
|
class Admin::PagePartsController < Admin::BaseController
|
2
|
-
|
3
|
-
layout 'admin_dialog'
|
4
|
-
|
5
|
-
crudify :page_part, :order => "position ASC"
|
6
2
|
|
7
3
|
def new
|
8
|
-
|
9
|
-
@page_part = @page.parts.new
|
4
|
+
render :partial => "/admin/pages/page_part_field", :locals => {:title => params[:title], :body => params[:body], :new_part => true, :part_index => params[:part_index]}
|
10
5
|
end
|
11
6
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
saved = @page_part.save
|
18
|
-
flash[:error] = "You must enter a title for the part to be added to this page" unless saved
|
19
|
-
|
20
|
-
unless request.xhr?
|
21
|
-
redirect_to edit_admin_page_url(@page)
|
7
|
+
def destroy
|
8
|
+
part = PagePart.find(params[:id])
|
9
|
+
if part.destroy
|
10
|
+
render :text => "'#{part.title}' deleted."
|
22
11
|
else
|
23
|
-
|
24
|
-
flash.now[:notice] = "The new content section was added. Please close this dialog and reload the page to use it. Make sure you save any changes you have made."
|
25
|
-
end
|
26
|
-
|
27
|
-
render :update do |page|
|
28
|
-
page.replace_html 'flash_container', :partial => "/shared/message"
|
29
|
-
page[:flash].appear
|
30
|
-
end
|
31
|
-
flash.discard # Get rid of the flash message, we don't need it anymore.. otherwise it'll show up on next page load.
|
12
|
+
render :text => "'#{part.title}' not deleted."
|
32
13
|
end
|
33
14
|
end
|
34
15
|
|
@@ -9,22 +9,29 @@
|
|
9
9
|
<div class='clearfix'>
|
10
10
|
<ul id='page_parts'>
|
11
11
|
<% @page.parts.each do |p| %>
|
12
|
-
<li class='tab'>
|
13
|
-
<%= link_to p.title.titleize, "#part_#{p.title}"
|
12
|
+
<li class='tab<%= " active" if @page.parts.index(p) == 0 %>'>
|
13
|
+
<%= link_to p.title.titleize, "#part_#{p.title}" %>
|
14
14
|
</li>
|
15
15
|
<% end %>
|
16
16
|
</ul>
|
17
17
|
<% if RefinerySetting.find_or_set(:new_page_parts, false) and not @page.new_record? %>
|
18
|
-
|
18
|
+
<ul id='page_parts_controls'>
|
19
|
+
<li>
|
20
|
+
<%= link_to refinery_icon_tag("add.png"), "#", :id => "add_page_part", :title => "Create Content Section" %>
|
21
|
+
</li>
|
22
|
+
<li>
|
23
|
+
<%= link_to(refinery_icon_tag("delete.png"), "#", :title => 'Delete content section', :class => 'delete_page_part', :name => "Delete Content Section", :id => "delete_page_part") %>
|
24
|
+
</li>
|
25
|
+
</ul>
|
19
26
|
<% end %>
|
20
27
|
</div>
|
21
28
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
<div id='page_part_editors'>
|
30
|
+
<% part_index = -1 %>
|
31
|
+
<% f.fields_for :parts do |p| %>
|
32
|
+
<%= render :partial => "page_part_field", :locals => {:title => p.object.title, :body => p.object.body, :part_index => (part_index += 1), :new_part => false} %>
|
33
|
+
<% end %>
|
34
|
+
</div>
|
28
35
|
</div>
|
29
36
|
<p>
|
30
37
|
<%= link_to "» Hide/Show Advanced Options", "", :id => "toggle_advanced_options",
|
@@ -34,10 +41,10 @@
|
|
34
41
|
<div class='field'>
|
35
42
|
<%= label_tag :custom_title %>
|
36
43
|
<%= label_tag "", 'Type:', :class => "stripped" %>
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
44
|
+
<% ["none", "text", "image"].each do |type| %>
|
45
|
+
<%= f.radio_button :custom_title_type, "#{type}" %>
|
46
|
+
<%= label_tag "page_custom_title_type_#{type}", "#{type.titleize}", :class => "stripped" %>
|
47
|
+
<% end %>
|
41
48
|
<br/>
|
42
49
|
<div id='custom_title_none'></div>
|
43
50
|
<div id='custom_title_text' style='display: <%= @page.custom_title_type == 'text' ? 'block' : 'none' %>'>
|
@@ -52,19 +59,17 @@
|
|
52
59
|
<%= f.hidden_field :custom_title_image_id %>
|
53
60
|
<div>
|
54
61
|
<a id='current_image_link' href="<%= insert_admin_images_url %>?thickbox=true&modal=true&titlebar=true&field=page_custom_title_image_id&update_image=current_custom_title_image&callback=custom_title_image_changed&thumbnail=&KeepThis=true&TB_iframe=true&width=950&height=510" style='border: 0px' title='Change Image' name='Change Image' class='thickbox'>
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
62
|
+
<% unless @page.custom_title_image.nil? %>
|
63
|
+
<%= image_fu @page.custom_title_image, nil, {:class => "brown_border", :id => "current_custom_title_image"} %>
|
64
|
+
<% else %>
|
65
|
+
<img id="current_custom_title_image" class="" src="" alt="" />
|
66
|
+
<% end %>
|
67
|
+
<span id='no_custom_title_image_selected' <%= "style='display: none;'" unless @page.custom_title_image.nil? %>>
|
68
|
+
There is currently no image selected. Click here to add one
|
69
|
+
</span>
|
63
70
|
</a>
|
64
71
|
<br/>
|
65
|
-
|
66
|
-
Remove Current Image
|
67
|
-
</a>
|
72
|
+
<%= link_to "Remove Current Image", "", :id => "remove_custom_title_image", :style => "margin-top:8px;display:inline-block;width:auto;#{"display:none;" if @page.custom_title_image.nil?}" %>
|
68
73
|
</div>
|
69
74
|
</div>
|
70
75
|
</div>
|
@@ -122,6 +127,18 @@
|
|
122
127
|
or
|
123
128
|
<%= link_to "Cancel", admin_pages_url, :title => "Cancelling will lose all changes you've made to this page"%>
|
124
129
|
</div>
|
130
|
+
<div id='new_page_part_dialog' style='display: none'>
|
131
|
+
<div class='field'>
|
132
|
+
<label for='new_page_part_title'>Title</label>
|
133
|
+
<input id='new_page_part_title' value='' class='larger' size='40' />
|
134
|
+
<input id='new_page_part_index' type='hidden' value='<%= @page.parts.size %>' />
|
135
|
+
</div>
|
136
|
+
<div id='dialog-form-actions' class='form-actions'>
|
137
|
+
<%= f.submit 'Save', :id => "new_page_part_save" %>
|
138
|
+
or
|
139
|
+
<%= link_to "Cancel", "#", :id => "new_page_part_cancel" %>
|
140
|
+
</div>
|
141
|
+
</div>
|
125
142
|
<% end %>
|
126
143
|
<% content_for :head do %>
|
127
144
|
<script type='text/javascript'>
|
@@ -160,6 +177,80 @@
|
|
160
177
|
this.hide();
|
161
178
|
e.stop();
|
162
179
|
});
|
180
|
+
|
181
|
+
$('add_page_part').observe('click', function(e) {
|
182
|
+
tb_show('Create Content Section', '#?auto_size_content=true&draggable=true&titlebar=true&inlineId=new_page_part_dialog&TB_inline=true&modal=true');
|
183
|
+
|
184
|
+
e.stop();
|
185
|
+
});
|
186
|
+
|
187
|
+
$('new_page_part_save').observe('click', function(e) {
|
188
|
+
if ((part_title = $('new_page_part_title').value).length > 0) {
|
189
|
+
tab_title = part_title.toLowerCase().gsub(" ", "_");
|
190
|
+
if ($$('#part_' + tab_title).size() == 0) {
|
191
|
+
// first get the response from the server
|
192
|
+
new Ajax.Request("<%= new_admin_page_part_url %>", {
|
193
|
+
asynchronous: true
|
194
|
+
, method: 'get'
|
195
|
+
, parameters: {
|
196
|
+
title: tab_title
|
197
|
+
, part_index: $('new_page_part_index').value
|
198
|
+
, body: ''
|
199
|
+
}
|
200
|
+
, onComplete: function(e){
|
201
|
+
$('page_part_editors').insert(e.transport.responseText , {position: 'bottom'});
|
202
|
+
// Add a new tab for the new content section.
|
203
|
+
$$('#page_parts').first().insert((new Element("li").addClassName("tab").insert(new Element("a", {href: "#part_" + tab_title}).update(part_title))));
|
204
|
+
|
205
|
+
// turn the new textarea into a wymeditor.
|
206
|
+
jQuery('#page_parts_attributes_' + $('new_page_part_index').value + "_body").wymeditor(wymeditor_boot_options);
|
207
|
+
|
208
|
+
// Wipe the title and increment the index counter by one.
|
209
|
+
$('new_page_part_index').value = (parseInt($('new_page_part_index').value) + 1);
|
210
|
+
$('new_page_part_title').value = "";
|
211
|
+
}
|
212
|
+
});
|
213
|
+
|
214
|
+
tb_remove();
|
215
|
+
} else {
|
216
|
+
alert("A content section with that title already exists, please choose another.");
|
217
|
+
}
|
218
|
+
} else {
|
219
|
+
alert("You have not entered a title for the content section, please enter one.");
|
220
|
+
}
|
221
|
+
});
|
222
|
+
|
223
|
+
$('new_page_part_cancel').observe('click', function(e) {
|
224
|
+
$('new_page_part_title').value = "";
|
225
|
+
tb_remove();
|
226
|
+
e.stop();
|
227
|
+
});
|
228
|
+
|
229
|
+
$('delete_page_part').observe('click', function(e) {
|
230
|
+
selected_part_link = $$('#page_parts li.active a').first();
|
231
|
+
part_container = $(selected_part_link.getAttribute('href').gsub("#", ""));
|
232
|
+
result = confirm("This will remove the content section '" + selected_part_link.innerHTML + "' when the page is saved and erase all content that has been entered into it, Are you sure?");
|
233
|
+
if (result) {
|
234
|
+
if ((part_id = $(part_container.down('textarea').id.gsub('_body', '_id'))) != null) {
|
235
|
+
new Ajax.Request("<%= admin_page_parts_url %>/" + part_id.value, {
|
236
|
+
asynchronous: true
|
237
|
+
, method: "DELETE"
|
238
|
+
, parameters:
|
239
|
+
{
|
240
|
+
authenticity_token: $$('input[name=authenticity_token]').first().value
|
241
|
+
}
|
242
|
+
});
|
243
|
+
}
|
244
|
+
|
245
|
+
// remove actual elements from DOM.
|
246
|
+
part_container.remove();
|
247
|
+
selected_part_link.up('li').remove();
|
248
|
+
|
249
|
+
WYMeditor.loaded();
|
250
|
+
}
|
251
|
+
|
252
|
+
e.stop();
|
253
|
+
});
|
163
254
|
});
|
164
255
|
|
165
256
|
custom_title_image_changed = function()
|
@@ -172,8 +263,8 @@
|
|
172
263
|
// Hook into the loaded function. This will be called when WYMeditor has done its thing.
|
173
264
|
WYMeditor.loaded = function()
|
174
265
|
{
|
175
|
-
new Control.Tabs('page_parts').first();
|
266
|
+
new Control.Tabs('page_parts', {setClassOnContainer: true}).first();
|
176
267
|
}
|
177
268
|
|
178
269
|
</script>
|
179
|
-
<% end %>
|
270
|
+
<% end %>
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<div class='page_part field' id='part_<%= title.downcase.gsub(" ", "_") %>'>
|
2
|
+
<%= hidden_field_tag "page[parts_attributes][#{part_index}][title]", title if new_part %>
|
3
|
+
<%= text_area_tag "page[parts_attributes][#{part_index}][body]", body, :rows => 20, :cols => 140, :class => 'wymeditor' %>
|
4
|
+
</div>
|
@@ -2,9 +2,8 @@ ActionController::Routing::Routes.draw do |map|
|
|
2
2
|
map.resources :pages
|
3
3
|
|
4
4
|
map.namespace(:admin) do |admin|
|
5
|
-
admin.resources :pages
|
6
|
-
|
7
|
-
end
|
5
|
+
admin.resources :pages
|
6
|
+
admin.resources :page_parts
|
8
7
|
|
9
8
|
admin.resources :pages_dialogs, :as => "pages/dialogs", :controller => :page_dialogs,
|
10
9
|
:collection => {:link_to => :get, :test_url => :get, :test_email => :get}
|
@@ -79,7 +79,10 @@ module Crud
|
|
79
79
|
module_eval %(
|
80
80
|
def index
|
81
81
|
if searching?
|
82
|
-
@#{plural_name} = #{class_name}.paginate_search params[:search],
|
82
|
+
@#{plural_name} = #{class_name}.paginate_search params[:search],
|
83
|
+
:page => params[:page],
|
84
|
+
:order => "#{options[:order]}",
|
85
|
+
:conditions => "#{options[:conditions]}"
|
83
86
|
else
|
84
87
|
@#{plural_name} = #{class_name}.paginate :page => params[:page],
|
85
88
|
:order => "#{options[:order]}",
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Methods added to this helper will be available to all templates in the application.
|
2
|
-
module ApplicationHelper
|
2
|
+
module Refinery::ApplicationHelper
|
3
3
|
|
4
4
|
def add_meta_tags
|
5
5
|
content_for :head, "<meta name=\"keywords\" content=\"#{@page.meta_keywords}\" />" unless @page.meta_keywords.blank?
|
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.
|
4
|
+
version: 0.9.4
|
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: 2009-10-
|
14
|
+
date: 2009-10-16 00:00:00 +13:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -446,9 +446,9 @@ files:
|
|
446
446
|
- vendor/plugins/pages/app/models/page_part.rb
|
447
447
|
- vendor/plugins/pages/app/views/admin/page_dialogs/_page_link.html.erb
|
448
448
|
- vendor/plugins/pages/app/views/admin/page_dialogs/link_to.html.erb
|
449
|
-
- vendor/plugins/pages/app/views/admin/page_parts/new.html.erb
|
450
449
|
- vendor/plugins/pages/app/views/admin/pages/_form.html.erb
|
451
450
|
- vendor/plugins/pages/app/views/admin/pages/_list.html.erb
|
451
|
+
- vendor/plugins/pages/app/views/admin/pages/_page_part_field.html.erb
|
452
452
|
- vendor/plugins/pages/app/views/admin/pages/_sortable_list.html.erb
|
453
453
|
- vendor/plugins/pages/app/views/admin/pages/edit.html.erb
|
454
454
|
- vendor/plugins/pages/app/views/admin/pages/index.html.erb
|
@@ -457,9 +457,10 @@ files:
|
|
457
457
|
- vendor/plugins/pages/app/views/pages/show.html.erb
|
458
458
|
- vendor/plugins/pages/config/routes.rb
|
459
459
|
- vendor/plugins/pages/init.rb
|
460
|
-
- vendor/plugins/refinery/app/controllers/admin/base_controller.rb
|
461
460
|
- vendor/plugins/refinery/app/controllers/admin/refinery_core_controller.rb
|
462
|
-
-
|
461
|
+
- app/helpers/application_helper.rb
|
462
|
+
- vendor/plugins/refinery/lib/refinery/application_helper.rb
|
463
|
+
- vendor/plugins/refinery/lib/refinery/admin_base_controller.rb
|
463
464
|
- vendor/plugins/refinery/app/views/admin/_head.html.erb
|
464
465
|
- vendor/plugins/refinery/app/views/admin/_menu.html.erb
|
465
466
|
- vendor/plugins/refinery/app/views/layouts/admin.html.erb
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<% send :"form_#{'remote_' if from_dialog?}for", [:admin, @page, @page_part] do |f| %>
|
2
|
-
<div class='field'>
|
3
|
-
<%= f.label :title %>
|
4
|
-
<%= f.text_field :title %>
|
5
|
-
</div>
|
6
|
-
<div class='form-actions'>
|
7
|
-
<%= f.submit 'Save', :id => "submit_button" %>
|
8
|
-
or
|
9
|
-
<%= link_to "Cancel", edit_admin_page_url(@page), :class => "close_dialog" %>
|
10
|
-
</div>
|
11
|
-
<% end %>
|