radiant 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of radiant might be problematic. Click here for more details.
- data/CHANGELOG +1 -0
- data/CONTRIBUTORS +12 -0
- data/LICENSE +9 -0
- data/README +91 -0
- data/Rakefile +10 -0
- data/app/behaviors/archive_behavior.rb +42 -0
- data/app/behaviors/archive_day_index_behavior.rb +30 -0
- data/app/behaviors/archive_month_index_behavior.rb +30 -0
- data/app/behaviors/archive_year_index_behavior.rb +30 -0
- data/app/behaviors/env_behavior.rb +18 -0
- data/app/behaviors/page_missing_behavior.rb +31 -0
- data/app/controllers/admin/export_controller.rb +8 -0
- data/app/controllers/admin/layout_controller.rb +23 -0
- data/app/controllers/admin/model_controller.rb +119 -0
- data/app/controllers/admin/page_controller.rb +119 -0
- data/app/controllers/admin/snippet_controller.rb +6 -0
- data/app/controllers/admin/user_controller.rb +45 -0
- data/app/controllers/admin/welcome_controller.rb +39 -0
- data/app/controllers/application.rb +32 -0
- data/app/controllers/site_controller.rb +54 -0
- data/app/filters/markdown_filter.rb +9 -0
- data/app/filters/textile_filter.rb +9 -0
- data/app/helpers/admin/export_helper.rb +2 -0
- data/app/helpers/admin/layout_helper.rb +2 -0
- data/app/helpers/admin/page_helper.rb +10 -0
- data/app/helpers/admin/snippet_helper.rb +2 -0
- data/app/helpers/admin/user_helper.rb +2 -0
- data/app/helpers/admin/welcome_helper.rb +2 -0
- data/app/helpers/application_helper.rb +141 -0
- data/app/helpers/site_helper.rb +2 -0
- data/app/models/archive_finder.rb +66 -0
- data/app/models/behavior.rb +194 -0
- data/app/models/layout.rb +13 -0
- data/app/models/page.rb +91 -0
- data/app/models/page_context.rb +526 -0
- data/app/models/page_part.rb +13 -0
- data/app/models/radiant/config.rb +53 -0
- data/app/models/radiant/exporter.rb +11 -0
- data/app/models/response_cache.rb +112 -0
- data/app/models/snippet.rb +16 -0
- data/app/models/status.rb +31 -0
- data/app/models/text_filter.rb +11 -0
- data/app/models/user.rb +70 -0
- data/app/models/user_action_observer.rb +13 -0
- data/app/views/admin/layout/index.rhtml +38 -0
- data/app/views/admin/layout/new.rhtml +37 -0
- data/app/views/admin/layout/remove.rhtml +17 -0
- data/app/views/admin/page/_node.rhtml +51 -0
- data/app/views/admin/page/_part.rhtml +17 -0
- data/app/views/admin/page/children.rhtml +4 -0
- data/app/views/admin/page/index.rhtml +172 -0
- data/app/views/admin/page/new.rhtml +164 -0
- data/app/views/admin/page/remove.rhtml +14 -0
- data/app/views/admin/snippet/index.rhtml +36 -0
- data/app/views/admin/snippet/new.rhtml +28 -0
- data/app/views/admin/snippet/remove.rhtml +16 -0
- data/app/views/admin/user/index.rhtml +43 -0
- data/app/views/admin/user/new.rhtml +48 -0
- data/app/views/admin/user/preferences.rhtml +29 -0
- data/app/views/admin/user/remove.rhtml +16 -0
- data/app/views/admin/welcome/login.rhtml +51 -0
- data/app/views/layouts/application.rhtml +75 -0
- data/app/views/site/not_found.rhtml +3 -0
- data/bin/radiant +305 -0
- data/config/boot.rb +80 -0
- data/config/database.mysql.yml +20 -0
- data/config/database.postgresql.yml +20 -0
- data/config/database.sqlite.yml +20 -0
- data/config/environment.rb +76 -0
- data/config/environments/development.rb +20 -0
- data/config/environments/production.rb +22 -0
- data/config/environments/test.rb +20 -0
- data/config/locomotive.yml +6 -0
- data/config/routes.rb +64 -0
- data/db/development_structure.sql +80 -0
- data/db/migrate/001_create_radiant_tables.rb +73 -0
- data/db/migrate/002_insert_initial_data.rb +45 -0
- data/db/migrate/003_rename_behavior_column.rb +9 -0
- data/db/migrate/004_rename_filter_column.rb +11 -0
- data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
- data/db/migrate/006_integer_columns_to_boolean.rb +11 -0
- data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
- data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
- data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
- data/db/schema.rb +74 -0
- data/db/templates/empty.yml +2 -0
- data/db/templates/simple-blog.yml +197 -0
- data/db/templates/styled-blog.yml +472 -0
- data/lib/advanced_delegation.rb +21 -0
- data/lib/archive_index_behavior_tags_and_methods.rb +48 -0
- data/lib/generators/behavior/USAGE +16 -0
- data/lib/generators/behavior/behavior_generator.rb +22 -0
- data/lib/generators/behavior/templates/model.rb.template +9 -0
- data/lib/generators/behavior/templates/unit_test.rb.template +16 -0
- data/lib/generators/filter/USAGE +16 -0
- data/lib/generators/filter/filter_generator.rb +22 -0
- data/lib/generators/filter/templates/model.rb.template +8 -0
- data/lib/generators/filter/templates/unit_test.rb.template +7 -0
- data/lib/inheritable_class_attributes.rb +65 -0
- data/lib/login_system.rb +80 -0
- data/lib/plugins/index_quoting_fix/init.rb +32 -0
- data/lib/plugins/string_io/init.rb +2 -0
- data/lib/radiant.rb +5 -0
- data/lib/registerable.rb +70 -0
- data/lib/tasks/release.rake +84 -0
- data/public/404.html +8 -0
- data/public/500.html +8 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +24 -0
- data/public/dispatch.rb +10 -0
- data/public/favicon.ico +0 -0
- data/public/images/add-child.png +0 -0
- data/public/images/brown-bottom-line.gif +0 -0
- data/public/images/clear-page-cache.png +0 -0
- data/public/images/collapse.png +0 -0
- data/public/images/expand.png +0 -0
- data/public/images/minus.png +0 -0
- data/public/images/new-homepage.png +0 -0
- data/public/images/new-layout.png +0 -0
- data/public/images/new-snippet.png +0 -0
- data/public/images/new-user.png +0 -0
- data/public/images/page.png +0 -0
- data/public/images/plus.png +0 -0
- data/public/images/remove-disabled.png +0 -0
- data/public/images/remove.png +0 -0
- data/public/images/snippet.png +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/images/view-site.gif +0 -0
- data/public/images/virtual-page.png +0 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/controls.js +815 -0
- data/public/javascripts/dragdrop.js +913 -0
- data/public/javascripts/effects.js +958 -0
- data/public/javascripts/pngfix.js +78 -0
- data/public/javascripts/prototype.js +2006 -0
- data/public/javascripts/ruledtable.js +28 -0
- data/public/javascripts/string.js +23 -0
- data/public/javascripts/tabcontrol.js +140 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/admin.css +464 -0
- data/script/about +3 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/process/spinner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/setup_database +297 -0
- data/test/fixtures/layouts.yml +26 -0
- data/test/fixtures/page_parts.yml +99 -0
- data/test/fixtures/pages.yml +359 -0
- data/test/fixtures/pages.yml.rej +28 -0
- data/test/fixtures/snippets.yml +18 -0
- data/test/fixtures/users.yml +30 -0
- data/test/functional/admin/export_controller_test.rb +22 -0
- data/test/functional/admin/layout_controller_test.rb +40 -0
- data/test/functional/admin/model_controller_test.rb +152 -0
- data/test/functional/admin/page_controller_test.rb +179 -0
- data/test/functional/admin/snippet_controller_test.rb +11 -0
- data/test/functional/admin/user_controller_test.rb +71 -0
- data/test/functional/admin/welcome_controller_test.rb +48 -0
- data/test/functional/application_controller_test.rb +44 -0
- data/test/functional/login_system_test.rb +155 -0
- data/test/functional/site_controller_test.rb +172 -0
- data/test/helpers/archive_index_test_helper.rb +35 -0
- data/test/helpers/behavior_render_test_helper.rb +34 -0
- data/test/helpers/behavior_test_helper.rb +47 -0
- data/test/helpers/caching_test_helper.rb +41 -0
- data/test/helpers/layout_test_helper.rb +35 -0
- data/test/helpers/page_part_test_helper.rb +49 -0
- data/test/helpers/page_test_helper.rb +36 -0
- data/test/helpers/snippet_test_helper.rb +32 -0
- data/test/helpers/user_test_helper.rb +34 -0
- data/test/helpers/validation_test_helper.rb +42 -0
- data/test/test_helper.rb +54 -0
- data/test/unit/behavior_test.rb +196 -0
- data/test/unit/behaviors/archive_behavior_test.rb +33 -0
- data/test/unit/behaviors/archive_day_index_behavior_test.rb +21 -0
- data/test/unit/behaviors/archive_month_index_behavior_test.rb +21 -0
- data/test/unit/behaviors/archive_year_index_behavior_test.rb +21 -0
- data/test/unit/behaviors/page_missing_behavior_test.rb +27 -0
- data/test/unit/filters/markdown_filter_test.rb +14 -0
- data/test/unit/filters/textile_filter_test.rb +14 -0
- data/test/unit/inheritable_class_attributes_test.rb +47 -0
- data/test/unit/layout_test.rb +29 -0
- data/test/unit/page_context_test.rb +375 -0
- data/test/unit/page_context_test.rb.rej +26 -0
- data/test/unit/page_part_test.rb +44 -0
- data/test/unit/page_test.rb +224 -0
- data/test/unit/radiant/config_test.rb +46 -0
- data/test/unit/radiant/exporter_test.rb +26 -0
- data/test/unit/registerable_test.rb +68 -0
- data/test/unit/response_cache_test.rb +133 -0
- data/test/unit/snippet_test.rb +47 -0
- data/test/unit/status_test.rb +43 -0
- data/test/unit/text_filter_test.rb +14 -0
- data/test/unit/user_action_observer_test.rb +40 -0
- data/test/unit/user_test.rb +138 -0
- metadata +355 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
<%
|
2
|
+
@part = part
|
3
|
+
@index = (params[:index] || @index || 1).to_i
|
4
|
+
-%>
|
5
|
+
<div class="page" id="page-<%= @index %>">
|
6
|
+
<div class="part" id="part-<%= @index %>">
|
7
|
+
<%= hidden_field_tag "part[#{@index - 1}][name]", @part.name %>
|
8
|
+
<p>
|
9
|
+
<label for="part[<%= @index - 1 %>}][filter_id]">Filter</label>
|
10
|
+
<%= select_tag "part[#{@index - 1}][filter_id]", options_for_select([['<none>', '']] + TextFilter.find_all.map { |s| s.registered_id }, @part.filter_id) %>
|
11
|
+
</p>
|
12
|
+
<div><%= text_area_tag "part[#{@index - 1}][content]", h(@part.content), :class => "textarea", :style => "width: 100%" %></div>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
<%
|
16
|
+
@index += 1;
|
17
|
+
-%>
|
@@ -0,0 +1,172 @@
|
|
1
|
+
<% content_for('page_scripts') do -%>
|
2
|
+
var SiteMap = Class.create();
|
3
|
+
SiteMap.prototype = Object.extend({}, RuledTable.prototype); // Inherit from RuledTable
|
4
|
+
Object.extend(SiteMap.prototype, {
|
5
|
+
|
6
|
+
onRowSetup: function(row) {
|
7
|
+
Event.observe(row, 'click', this.onMouseClickRow.bindAsEventListener(this), false);
|
8
|
+
},
|
9
|
+
|
10
|
+
onMouseClickRow: function(event) {
|
11
|
+
var element = Event.element(event);
|
12
|
+
if (this.isExpander(element)) {
|
13
|
+
var row = Event.findElement(event, 'tr');
|
14
|
+
if (this.hasChildren(row)) {
|
15
|
+
this.toggleBranch(row, element);
|
16
|
+
}
|
17
|
+
}
|
18
|
+
},
|
19
|
+
|
20
|
+
hasChildren: function(row) {
|
21
|
+
return ! /\bno-children\b/.test(row.className);
|
22
|
+
},
|
23
|
+
|
24
|
+
isExpander: function(element) {
|
25
|
+
return (element.tagName.strip().downcase() == 'img') && /\bexpander\b/i.test(element.className);
|
26
|
+
},
|
27
|
+
|
28
|
+
isExpanded: function(row) {
|
29
|
+
return /\bchildren-visible\b/i.test(row.className);
|
30
|
+
},
|
31
|
+
|
32
|
+
isRow: function(element) {
|
33
|
+
return element.tagName && (element.tagName.strip().downcase() == 'tr');
|
34
|
+
},
|
35
|
+
|
36
|
+
extractLevel: function(row) {
|
37
|
+
if (/level-(\d+)/i.test(row.className))
|
38
|
+
return RegExp.$1.toInteger();
|
39
|
+
},
|
40
|
+
|
41
|
+
extractPageId: function(row) {
|
42
|
+
if (/page-(\d+)/i.test(row.id))
|
43
|
+
return RegExp.$1.toInteger();
|
44
|
+
},
|
45
|
+
|
46
|
+
getExpanderImageForRow: function(row) {
|
47
|
+
var images = $A(row.getElementsByTagName('img', row));
|
48
|
+
var expanders = [];
|
49
|
+
images.each(function(image){
|
50
|
+
expanders.push(image);
|
51
|
+
}.bind(this));
|
52
|
+
return expanders.first();
|
53
|
+
},
|
54
|
+
|
55
|
+
hideBranch: function(row, img) {
|
56
|
+
var level = this.extractLevel(row);
|
57
|
+
var sibling = row.nextSibling;
|
58
|
+
while(sibling != null) {
|
59
|
+
if (this.isRow(sibling)) {
|
60
|
+
if (this.extractLevel(sibling) <= level) break;
|
61
|
+
Element.hide(sibling);
|
62
|
+
}
|
63
|
+
sibling = sibling.nextSibling;
|
64
|
+
}
|
65
|
+
if (img == null)
|
66
|
+
img = this.getExpanderImageForRow(row);
|
67
|
+
img.src = img.src.replace(/collapse/, 'expand');
|
68
|
+
Element.removeClassName(row, 'children-visible');
|
69
|
+
Element.addClassName(row, 'children-hidden');
|
70
|
+
},
|
71
|
+
|
72
|
+
showBranch: function(row, img) {
|
73
|
+
var level = this.extractLevel(row);
|
74
|
+
var sibling = row.nextSibling;
|
75
|
+
var children = false;
|
76
|
+
while(sibling != null) {
|
77
|
+
if (this.isRow(sibling)) {
|
78
|
+
var siblingLevel = this.extractLevel(sibling);
|
79
|
+
if (siblingLevel <= level) break;
|
80
|
+
if (siblingLevel == level + 1) {
|
81
|
+
Element.show(sibling);
|
82
|
+
this.hideBranch(sibling);
|
83
|
+
}
|
84
|
+
children = true;
|
85
|
+
}
|
86
|
+
sibling = sibling.nextSibling;
|
87
|
+
}
|
88
|
+
if (!children)
|
89
|
+
this.getBranch(row);
|
90
|
+
if (img == null)
|
91
|
+
img = this.getExpanderImageForRow(row);
|
92
|
+
img.src = img.src.replace(/expand/, 'collapse');
|
93
|
+
Element.removeClassName(row, 'children-hidden');
|
94
|
+
Element.addClassName(row, 'children-visible');
|
95
|
+
},
|
96
|
+
|
97
|
+
getBranch: function(row) {
|
98
|
+
var level = this.extractLevel(row).toString();
|
99
|
+
var id = this.extractPageId(row).toString();
|
100
|
+
new Ajax.Updater(
|
101
|
+
row,
|
102
|
+
'<%= admin_url %>/ui/pages/children/' + id + '/' + level,
|
103
|
+
{
|
104
|
+
asynchronous: true,
|
105
|
+
insertion: Insertion.After,
|
106
|
+
onLoading: function(request) {
|
107
|
+
Element.show('busy-' + id);
|
108
|
+
this.updating = true;
|
109
|
+
}.bind(this),
|
110
|
+
onComplete: function(request) {
|
111
|
+
var sibling = row.nextSibling;
|
112
|
+
while (sibling != null) {
|
113
|
+
if (this.isRow(sibling)) {
|
114
|
+
var siblingLevel = this.extractLevel(sibling);
|
115
|
+
if (siblingLevel <= level) break;
|
116
|
+
this.setupRow(sibling);
|
117
|
+
}
|
118
|
+
sibling = sibling.nextSibling;
|
119
|
+
}
|
120
|
+
this.updating = false;
|
121
|
+
Effect.Fade('busy-' + id);
|
122
|
+
}.bind(this)
|
123
|
+
}
|
124
|
+
);
|
125
|
+
},
|
126
|
+
|
127
|
+
toggleBranch: function(row, img) {
|
128
|
+
if (! this.updating) {
|
129
|
+
if (this.isExpanded(row)) {
|
130
|
+
this.hideBranch(row, img);
|
131
|
+
} else {
|
132
|
+
this.showBranch(row, img);
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
});
|
138
|
+
<% end -%>
|
139
|
+
|
140
|
+
<h1>Pages</h1>
|
141
|
+
|
142
|
+
<table id="site-map" class="index" cellpadding="0" cellspacing="0" border="0">
|
143
|
+
<thead>
|
144
|
+
<tr>
|
145
|
+
<th class="page">Page</th>
|
146
|
+
<th class="status">Status</th>
|
147
|
+
<th class="modify" colspan="2">Modify</th>
|
148
|
+
</tr>
|
149
|
+
</thead>
|
150
|
+
<tbody>
|
151
|
+
<% if @homepage -%>
|
152
|
+
<%= render_node @homepage -%>
|
153
|
+
<% else -%>
|
154
|
+
<tr>
|
155
|
+
<td colspan="4" class="note">No Pages</td>
|
156
|
+
</tr>
|
157
|
+
<% end -%>
|
158
|
+
</tbody>
|
159
|
+
</table>
|
160
|
+
<script type="text/javascript">
|
161
|
+
// <![CDATA[
|
162
|
+
new SiteMap('site-map');
|
163
|
+
// ]]>
|
164
|
+
</script>
|
165
|
+
<form action="<%= clear_cache_url %>" method="post">
|
166
|
+
<p>
|
167
|
+
<% unless @homepage -%>
|
168
|
+
<%= link_to image_tag('new-homepage', :alt => 'New Homepage'), homepage_new_url %>
|
169
|
+
<% end -%>
|
170
|
+
<%= image_submit_tag 'clear-page-cache' %>
|
171
|
+
</p>
|
172
|
+
</form>
|
@@ -0,0 +1,164 @@
|
|
1
|
+
<% content_for('page_scripts') do -%>
|
2
|
+
function part_added() {
|
3
|
+
var partNameField = $('part-name-field');
|
4
|
+
var partIndexField = $('part-index-field');
|
5
|
+
var index = parseInt(partIndexField.value);
|
6
|
+
var tab = 'tab-' + index;
|
7
|
+
var caption = partNameField.value;
|
8
|
+
var page = 'page-' + index;
|
9
|
+
tabControl.addTab(tab, caption, page);
|
10
|
+
Element.hide('add-part-popup');
|
11
|
+
Element.hide('busy');
|
12
|
+
partNameField.value = '';
|
13
|
+
partIndexField.value = (index + 1).toString();
|
14
|
+
$('add-part-button').disabled = false;
|
15
|
+
Field.focus(partNameField);
|
16
|
+
tabControl.select(tab);
|
17
|
+
}
|
18
|
+
function part_loading() {
|
19
|
+
$('add-part-button').disabled = true;
|
20
|
+
new Effect.Appear('busy');
|
21
|
+
}
|
22
|
+
function valid_part_name() {
|
23
|
+
var partNameField = $('part-name-field');
|
24
|
+
var name = partNameField.value.downcase().strip();
|
25
|
+
var result = true;
|
26
|
+
if (name == '') {
|
27
|
+
alert('Part name cannot be empty.');
|
28
|
+
return false;
|
29
|
+
}
|
30
|
+
tabControl.tabs.each(function(pair){
|
31
|
+
if (tabControl.tabs[pair.key].caption == name) {
|
32
|
+
result = false;
|
33
|
+
alert('Part name must be unique.');
|
34
|
+
throw $break;
|
35
|
+
}
|
36
|
+
})
|
37
|
+
return result;
|
38
|
+
}
|
39
|
+
function center(element) {
|
40
|
+
var header = $('header')
|
41
|
+
element = $(element);
|
42
|
+
element.style.position = 'fixed'
|
43
|
+
var dim = Element.getDimensions(element)
|
44
|
+
element.style.top = '200px';
|
45
|
+
element.style.left = ((header.offsetWidth - dim.width) / 2) + 'px';
|
46
|
+
}
|
47
|
+
function toggle_add_part_popup() {
|
48
|
+
var popup = $('add-part-popup');
|
49
|
+
var partNameField = $('part-name-field');
|
50
|
+
center(popup);
|
51
|
+
Element.toggle(popup);
|
52
|
+
Field.focus(partNameField);
|
53
|
+
}
|
54
|
+
<% end -%>
|
55
|
+
|
56
|
+
<% if @page.new_record? -%>
|
57
|
+
<h1 id="new_page">New Page</h1>
|
58
|
+
<% else -%>
|
59
|
+
<h1 id="edit_page">Edit Page</h1>
|
60
|
+
<% end -%>
|
61
|
+
|
62
|
+
<form method="post">
|
63
|
+
<div class="form-area">
|
64
|
+
<p class="title">
|
65
|
+
<label for="page_title">Page Title</label>
|
66
|
+
<%= text_field "page", "title", :class => 'textbox', :maxlength => 255 %>
|
67
|
+
</p>
|
68
|
+
<div id="extended-metadata" class="row"<%= meta_visible(:meta) %>>
|
69
|
+
<table class="fieldset" cellpadding="0" cellspacing="0" border="0">
|
70
|
+
<tr>
|
71
|
+
<td><label for="page_slug">Slug</label></td>
|
72
|
+
<td class="field"><%= text_field "page", "slug", :class => 'textbox', :maxlength => 100 %></td>
|
73
|
+
</tr>
|
74
|
+
<tr>
|
75
|
+
<td><label for="page_breadcrumb">Breadcrumb</label></td>
|
76
|
+
<td class="field"><%= text_field "page", "breadcrumb", :class => 'textbox', :maxlength => 160 %></td>
|
77
|
+
</tr>
|
78
|
+
</table>
|
79
|
+
<script type="text/javascript">
|
80
|
+
// <![CDATA[
|
81
|
+
$title = $('page_title');
|
82
|
+
$slug = $('page_slug');
|
83
|
+
$breadcrumb = $('page_breadcrumb');
|
84
|
+
$old_title = $title.value || '';
|
85
|
+
function title_updated() {
|
86
|
+
if ($old_title.toSlug() == $slug.value) $slug.value = $title.value.toSlug();
|
87
|
+
if ($old_title == $breadcrumb.value) $breadcrumb.value = $title.value;
|
88
|
+
$old_title = $title.value;
|
89
|
+
}
|
90
|
+
Event.observe('page_title', 'keyup', title_updated);
|
91
|
+
// ]]>
|
92
|
+
</script>
|
93
|
+
</div>
|
94
|
+
<p class="more-or-less">
|
95
|
+
<small>
|
96
|
+
<a href="<%= toggle_javascript_for('extended-metadata') %>"<%= meta_visible(:meta_more) %> id="more-extended-metadata">More</a>
|
97
|
+
<a href="<%= toggle_javascript_for('extended-metadata') %>"<%= meta_visible(:meta_less) %> id="less-extended-metadata">Less</a>
|
98
|
+
</small>
|
99
|
+
</p>
|
100
|
+
<div id="tab-control">
|
101
|
+
<div id="tabs" class="tabs">
|
102
|
+
<div id="tab-toolbar">
|
103
|
+
<%= link_to image_tag('plus'), 'javascript: toggle_add_part_popup()', :title => 'Add Tab' %>
|
104
|
+
<%= link_to image_tag('minus'), 'javascript: tabControl.removeTab(tabControl.selected)', :title => 'Remove Tab', :confirm => 'Delete the current tab?' %>
|
105
|
+
</div>
|
106
|
+
</div>
|
107
|
+
<div id="pages" class="pages">
|
108
|
+
<%= render :partial => 'part', :collection => @page.parts %>
|
109
|
+
</div>
|
110
|
+
</div>
|
111
|
+
<script type="text/javascript">
|
112
|
+
// <![CDATA[
|
113
|
+
var tabControl = new TabControl('tab-control');
|
114
|
+
<%
|
115
|
+
@index = 0
|
116
|
+
for @part in @page.parts do
|
117
|
+
@index += 1
|
118
|
+
-%>
|
119
|
+
tabControl.addTab('tab-<%= @index %>', '<%= @part.name %>', 'page-<%= @index %>');
|
120
|
+
<%
|
121
|
+
end
|
122
|
+
-%>
|
123
|
+
tabControl.select(tabControl.firstTab());
|
124
|
+
// ]]>
|
125
|
+
</script>
|
126
|
+
<div class="row">
|
127
|
+
<p><label for="page_layout_id">Layout</label>
|
128
|
+
<%= select "page", "layout_id", [['<inherit>', '']] + Layout.find_all.map { |s| [s.name, s.id] } %></p>
|
129
|
+
<p><label for="page_behavior">Behavior</label>
|
130
|
+
<%= select "page", "behavior_id", [['<none>', '']] + Behavior.find_all.map { |s| s.registered_id } %></p>
|
131
|
+
<p><label for="page_status_id">Status</label>
|
132
|
+
<%= select "page", "status_id", Status.find_all.map { |s| [s.name, s.id] } %></p>
|
133
|
+
</div>
|
134
|
+
<span class="clear"> </span>
|
135
|
+
<%= updated_stamp @page %>
|
136
|
+
</div>
|
137
|
+
<p class="buttons">
|
138
|
+
<%= save_model_button(@page) %> <%= save_model_and_continue_editing_button(@page) %> or <%= link_to "Cancel", page_index_url %>
|
139
|
+
</p>
|
140
|
+
</form>
|
141
|
+
|
142
|
+
<div id="popups">
|
143
|
+
<div class="popup" id="add-part-popup" style="display:none;">
|
144
|
+
<div id="busy" class="busy" style="display: none"><%= image_tag 'spinner.gif' %></div>
|
145
|
+
<h3>Add Part</h3>
|
146
|
+
<%= form_remote_tag(
|
147
|
+
:url => page_add_part_url,
|
148
|
+
:update => "pages",
|
149
|
+
:position => :bottom,
|
150
|
+
:loading => 'part_loading()',
|
151
|
+
:complete => 'part_added()',
|
152
|
+
:condition => 'valid_part_name()'
|
153
|
+
) %>
|
154
|
+
<div>
|
155
|
+
<%= hidden_field_tag 'index', @index + 1, :id => 'part-index-field' %>
|
156
|
+
<%= text_field_tag "part[name]", "", :id => 'part-name-field', :maxlength => 100 %>
|
157
|
+
<%= submit_tag "Add Part", :id => 'add-part-button' %>
|
158
|
+
</div>
|
159
|
+
<p><%= link_to_function 'Close', "Element.hide('add-part-popup')", :class => 'close-link' %></p>
|
160
|
+
<%= end_form_tag %>
|
161
|
+
</div>
|
162
|
+
</div>
|
163
|
+
|
164
|
+
<%= focus 'page_title' %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% pages = pluralize(@page.children.count + 1, 'Page') -%>
|
2
|
+
|
3
|
+
<h1 id="remove_article">Remove <%= pages %></h1>
|
4
|
+
<p>Are you sure you want to <strong class="warning">permanently remove</strong> the following <%= pages.downcase %>?</p>
|
5
|
+
|
6
|
+
<table id="site-map" class="index" cellpadding="0" cellspacing="0" border="0">
|
7
|
+
<tbody>
|
8
|
+
<%= render_node @page, :simple => true -%>
|
9
|
+
</tbody>
|
10
|
+
</table>
|
11
|
+
|
12
|
+
<form method="post">
|
13
|
+
<p class="buttons"><%= submit_tag "Delete #{pages}", :class => 'button' %> or <%= link_to 'Cancel', page_index_url %></p>
|
14
|
+
</form>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<h1>Snippets</h1>
|
2
|
+
|
3
|
+
<p>Snippets are generally small pieces of content which are included in other pages or layouts.</p>
|
4
|
+
|
5
|
+
<table id="snippets" class="index" cellpadding="0" cellspacing="0" border="0">
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th class="snippet">Snippet</th>
|
9
|
+
<th class="modify">Modify</th>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<% unless @snippets.empty? -%>
|
14
|
+
<% for snippet in @snippets -%>
|
15
|
+
<tr class="node level-1">
|
16
|
+
<td class="snippet">
|
17
|
+
<%= image_tag "snippet", :class => "icon", :alt => 'snippet-icon', :title => '', :align => 'center' %>
|
18
|
+
<%= link_to snippet.name, snippet_edit_url(:id => snippet) %></span>
|
19
|
+
</td>
|
20
|
+
<td class="remove"><%= link_to image_tag('remove', :alt => 'Remove Snippet'), snippet_remove_url(:id => snippet) %></td>
|
21
|
+
</tr>
|
22
|
+
<% end -%>
|
23
|
+
<% else -%>
|
24
|
+
<tr>
|
25
|
+
<td colspan="2" class="note">No Snippets</td>
|
26
|
+
</tr>
|
27
|
+
<% end -%>
|
28
|
+
</tbody>
|
29
|
+
</table>
|
30
|
+
<script type="text/javascript">
|
31
|
+
// <![CDATA[
|
32
|
+
new RuledTable('snippets');
|
33
|
+
// ]]>
|
34
|
+
</script>
|
35
|
+
|
36
|
+
<p><%= link_to image_tag('new-snippet', :alt => 'New Snippet'), snippet_new_url %></p>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% if @snippet.new_record? -%>
|
2
|
+
<h1>New Snippet</h1>
|
3
|
+
<% else -%>
|
4
|
+
<h1>Edit Snippet</h1>
|
5
|
+
<% end -%>
|
6
|
+
|
7
|
+
<form method="post">
|
8
|
+
<div class="form-area">
|
9
|
+
<p class="title">
|
10
|
+
<label for="snippet_name">Name</label>
|
11
|
+
<%= text_field "snippet", "name", :class => 'textbox', :maxlength => 100 %>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<p class="content">
|
15
|
+
<label for="snippet_content">Body</label>
|
16
|
+
<%= text_area "snippet", "content", :class => "textarea", :style => "width: 100%" %></p>
|
17
|
+
<p>
|
18
|
+
<label for="snippet_filter">Filter</label>
|
19
|
+
<%= select_tag "snippet[filter_id]", options_for_select([['none', '']] + TextFilter.find_all.map { |f| f.registered_id }, @snippet.filter_id) %>
|
20
|
+
</p>
|
21
|
+
<%= updated_stamp @snippet %>
|
22
|
+
</div>
|
23
|
+
<p class="buttons">
|
24
|
+
<%= save_model_button(@snippet) %> <%= save_model_and_continue_editing_button(@snippet) %> or <%= link_to "Cancel", snippet_index_url %>
|
25
|
+
</p>
|
26
|
+
</form>
|
27
|
+
|
28
|
+
<%= focus 'snippet_name' %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<h1>Remove Snippet</h1>
|
2
|
+
<p>Are you sure you want to <strong class="warning">permanently remove</strong> the following snippet?</p>
|
3
|
+
|
4
|
+
<table id="snippets" class="index" cellpadding="0" cellspacing="0" border="0">
|
5
|
+
<tbody>
|
6
|
+
<tr class="node level-1" onmouseover="Element.addClassName(this, 'highlight');" onmouseout="Element.removeClassName(this, 'highlight');">
|
7
|
+
<td class="snippet">
|
8
|
+
<%= @snippet.name %>
|
9
|
+
</td>
|
10
|
+
</tr>
|
11
|
+
</tbody>
|
12
|
+
</table>
|
13
|
+
|
14
|
+
<form method="post">
|
15
|
+
<p class="buttons"><%= submit_tag "Delete Snippet", :class => 'button' %> or <%= link_to 'Cancel', snippet_index_url %></p>
|
16
|
+
</form>
|