aslakjo-comatose 2.0.5.2
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/CHANGELOG +195 -0
- data/INSTALL +20 -0
- data/LICENSE +20 -0
- data/MANIFEST +91 -0
- data/README.markdown +159 -0
- data/Rakefile +176 -0
- data/SPECS +61 -0
- data/about.yml +7 -0
- data/bin/comatose +112 -0
- data/comatose.gemspec +113 -0
- data/generators/comatose_migration/USAGE +15 -0
- data/generators/comatose_migration/comatose_migration_generator.rb +74 -0
- data/generators/comatose_migration/templates/migration.rb +35 -0
- data/generators/comatose_migration/templates/v4_upgrade.rb +15 -0
- data/generators/comatose_migration/templates/v6_upgrade.rb +23 -0
- data/generators/comatose_migration/templates/v7_upgrade.rb +22 -0
- data/init.rb +2 -0
- data/install.rb +18 -0
- data/lib/acts_as_versioned.rb +543 -0
- data/lib/comatose/comatose_drop.rb +79 -0
- data/lib/comatose/configuration.rb +69 -0
- data/lib/comatose/page_wrapper.rb +119 -0
- data/lib/comatose/processing_context.rb +69 -0
- data/lib/comatose/tasks/admin.rb +60 -0
- data/lib/comatose/tasks/data.rb +82 -0
- data/lib/comatose/tasks/setup.rb +52 -0
- data/lib/comatose/version.rb +4 -0
- data/lib/comatose.rb +33 -0
- data/lib/comatose_admin_controller.rb +395 -0
- data/lib/comatose_admin_helper.rb +37 -0
- data/lib/comatose_controller.rb +138 -0
- data/lib/comatose_helper.rb +3 -0
- data/lib/comatose_page.rb +141 -0
- data/lib/liquid/block.rb +96 -0
- data/lib/liquid/context.rb +190 -0
- data/lib/liquid/document.rb +17 -0
- data/lib/liquid/drop.rb +48 -0
- data/lib/liquid/errors.rb +7 -0
- data/lib/liquid/extensions.rb +53 -0
- data/lib/liquid/file_system.rb +62 -0
- data/lib/liquid/htmltags.rb +64 -0
- data/lib/liquid/standardfilters.rb +111 -0
- data/lib/liquid/standardtags.rb +399 -0
- data/lib/liquid/strainer.rb +42 -0
- data/lib/liquid/tag.rb +25 -0
- data/lib/liquid/template.rb +88 -0
- data/lib/liquid/variable.rb +39 -0
- data/lib/liquid.rb +52 -0
- data/lib/redcloth.rb +1129 -0
- data/lib/support/class_options.rb +36 -0
- data/lib/support/inline_rendering.rb +48 -0
- data/lib/support/route_mapper.rb +50 -0
- data/lib/text_filters/markdown.rb +14 -0
- data/lib/text_filters/markdown_smartypants.rb +15 -0
- data/lib/text_filters/none.rb +8 -0
- data/lib/text_filters/rdoc.rb +13 -0
- data/lib/text_filters/simple.rb +8 -0
- data/lib/text_filters/textile.rb +15 -0
- data/lib/text_filters.rb +140 -0
- data/rails/init.rb +3 -0
- data/resources/layouts/comatose_admin_template.html.erb +28 -0
- data/resources/public/images/collapsed.gif +0 -0
- data/resources/public/images/expanded.gif +0 -0
- data/resources/public/images/no-children.gif +0 -0
- data/resources/public/images/page.gif +0 -0
- data/resources/public/images/spinner.gif +0 -0
- data/resources/public/images/title-hover-bg.gif +0 -0
- data/resources/public/javascripts/comatose_admin.js +401 -0
- data/resources/public/stylesheets/comatose_admin.css +404 -0
- data/tasks/comatose.rake +9 -0
- data/test/behaviors.rb +106 -0
- data/test/fixtures/comatose_pages.yml +96 -0
- data/test/functional/comatose_admin_controller_test.rb +114 -0
- data/test/functional/comatose_controller_test.rb +44 -0
- data/test/javascripts/test.html +26 -0
- data/test/javascripts/test_runner.js +307 -0
- data/test/test_helper.rb +55 -0
- data/test/unit/class_options_test.rb +52 -0
- data/test/unit/comatose_page_test.rb +136 -0
- data/test/unit/processing_context_test.rb +108 -0
- data/test/unit/text_filters_test.rb +52 -0
- data/views/comatose_admin/_form.html.erb +96 -0
- data/views/comatose_admin/_page_list_item.html.erb +60 -0
- data/views/comatose_admin/delete.html.erb +18 -0
- data/views/comatose_admin/edit.html.erb +5 -0
- data/views/comatose_admin/index.html.erb +29 -0
- data/views/comatose_admin/new.html.erb +5 -0
- data/views/comatose_admin/reorder.html.erb +30 -0
- data/views/comatose_admin/versions.html.erb +40 -0
- data/views/layouts/comatose_admin.html.erb +837 -0
- data/views/layouts/comatose_admin_customize.html.erb +28 -0
- data/views/layouts/comatose_content.html.erb +17 -0
- metadata +148 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'comatose'
|
3
|
+
|
4
|
+
class ProcessingContextTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
fixtures :comatose_pages
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@root = comatose_page( :home_page )
|
10
|
+
@binding = Comatose::ProcessingContext.new(@root)
|
11
|
+
end
|
12
|
+
|
13
|
+
# should "process liquid tags with no filters correctly" do
|
14
|
+
# result = TextFilters.transform('{{ page.title }}', @binding, :none, :liquid)
|
15
|
+
# assert_equal 'Home Page', result
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
should "process erb tags correctly" do
|
19
|
+
result = TextFilters.transform('<%= page.title %>', @binding, :none, :erb)
|
20
|
+
assert_equal 'Home Page', result
|
21
|
+
end
|
22
|
+
|
23
|
+
should "support text translation and processing with ERB" do
|
24
|
+
src = 'The title is *<%= title %>*'
|
25
|
+
if TextFilters.all.keys.include? 'None'
|
26
|
+
assert_equal "The title is *Home Page*", TextFilters.transform(src, @binding, :none, :erb)
|
27
|
+
end
|
28
|
+
if TextFilters.all.keys.include? 'Textile'
|
29
|
+
assert_equal "<p>The title is <strong>Home Page</strong></p>", TextFilters.transform(src, @binding, :textile, :erb)
|
30
|
+
end
|
31
|
+
if TextFilters.all.keys.include? 'Markdown'
|
32
|
+
assert_equal "<p>The title is <em>Home Page</em></p>", TextFilters.transform(src, @binding, 'Markdown', :erb)
|
33
|
+
end
|
34
|
+
if TextFilters.all.keys.include? 'RDoc'
|
35
|
+
assert_equal "<p>\nThe title is *Home Page*\n</p>\n", TextFilters.transform(src, @binding, :rdoc, :erb)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
should "support text translation and processing with Liquid" do
|
40
|
+
src = 'The title is *{{ page.title }}*'
|
41
|
+
assert_equal "The title is *Home Page*", TextFilters.transform(src, @binding, :none, :liquid)
|
42
|
+
if TextFilters.all_titles.include? 'Textile'
|
43
|
+
assert_equal "<p>The title is <strong>Home Page</strong></p>", TextFilters.transform(src, @binding, :textile, :liquid)
|
44
|
+
end
|
45
|
+
if TextFilters.all_titles.include? 'Markdown'
|
46
|
+
assert_equal "<p>The title is <em>Home Page</em></p>", TextFilters.transform(src, @binding, :markdown, :liquid)
|
47
|
+
end
|
48
|
+
if TextFilters.all_titles.include? 'RDoc'
|
49
|
+
assert_equal "<p>\nThe title is *Home Page*\n</p>\n", TextFilters.transform(src, @binding, :rdoc, :liquid)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
UNSAFE_PROPS = %w(version position)
|
54
|
+
SAFE_PROPS = %w(id full_path uri slug keywords title to_html filter_type author updated_on created_on)
|
55
|
+
|
56
|
+
should "allow access to safe properties and methods when processing with ERB" do
|
57
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
58
|
+
SAFE_PROPS.each do |prop|
|
59
|
+
assert_not_equal '', TextFilters.transform("<%= page.#{prop} %>", binding, :none, :liquid), "on page.#{prop}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
should "prevent access to protected properties and methods when processing with ERB" do
|
64
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
65
|
+
UNSAFE_PROPS.each do |prop|
|
66
|
+
assert_equal "<%= page.#{prop} %>", TextFilters.transform("<%= page.#{prop} %>", binding, :none, :liquid), "on page.#{prop}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
should "allow access to safe properties and methods when processing with Liquid" do
|
71
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
72
|
+
SAFE_PROPS.each do |prop|
|
73
|
+
assert_not_equal '', TextFilters.transform("{{ page.#{prop} }}", binding, :none, :liquid), "on page.#{prop}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
should "prevent access to protected properties and methods when processing with Liquid" do
|
78
|
+
binding = Comatose::ProcessingContext.new( comatose_page(:faq) )
|
79
|
+
UNSAFE_PROPS.each do |prop|
|
80
|
+
assert_equal '', TextFilters.transform("{{ page.#{prop} }}", binding, :none, :liquid), "on page.#{prop}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
should "allow referenceing of defined ComatoseDrops" do
|
85
|
+
Comatose.define_drop "app" do
|
86
|
+
def test
|
87
|
+
"TEST"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
result = TextFilters.transform('{{ app.test }}', @binding, :none, :liquid)
|
92
|
+
assert_equal 'TEST', result
|
93
|
+
|
94
|
+
result2 = TextFilters.transform('<%= app.test %>', @binding, :none, :erb)
|
95
|
+
assert_equal 'TEST', result2
|
96
|
+
end
|
97
|
+
|
98
|
+
should "let ComatoseDrop errors bubble upward" do
|
99
|
+
Comatose.define_drop "broken" do
|
100
|
+
def test
|
101
|
+
"TEST #{crap}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
assert_raise(RuntimeError) { TextFilters.transform('{{ broken.test }}', @binding, :none, :liquid) }
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'liquid'
|
5
|
+
|
6
|
+
require 'text_filters'
|
7
|
+
# require 'comatose/page'
|
8
|
+
# require 'comatose/processing_context'
|
9
|
+
|
10
|
+
class TextFiltersTest < Test::Unit::TestCase
|
11
|
+
# fixtures :comatose_pages
|
12
|
+
# self.use_instantiated_fixtures = true
|
13
|
+
|
14
|
+
should "not alter output when using filter :none" do
|
15
|
+
assert_equal "line one\nline two", TextFilters.render_text("line one\nline two", :none)
|
16
|
+
end
|
17
|
+
|
18
|
+
should "convert newlines into <br/>s when using :simple filter" do
|
19
|
+
assert_equal "line one<br/>line two", TextFilters.render_text("line one\nline two", :simple)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "support Textile, if it's available, using :textile or 'Textile' as a key" do
|
23
|
+
if TextFilters.all.keys.include? 'Textile'
|
24
|
+
assert_equal "<p>testing <strong>bold</strong></p>", TextFilters.render_text("testing *bold*", :textile)
|
25
|
+
assert_equal "<p>testing <strong>bold</strong></p>", TextFilters.render_text("testing *bold*", 'Textile')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
should "support Markdown, if it's available, using :markdown or 'Markdown' as a key" do
|
30
|
+
if TextFilters.all.keys.include? 'Markdown'
|
31
|
+
assert_equal "<p>testing <em>bold</em></p>", TextFilters.render_text("testing *bold*", :markdown)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
should "support RDoc, if it's available, using :rdoc or 'RDoc' as a key" do
|
36
|
+
if TextFilters.all.keys.include? 'RDoc'
|
37
|
+
assert_equal "<p>\ntesting <b>bold</b>\n</p>\n", TextFilters.render_text("testing *bold*", :rdoc)
|
38
|
+
assert_equal "<p>\ntesting <b>bold</b>\n</p>\n", TextFilters.render_text("testing *bold*", 'RDoc')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
should "support transformation of parameters via ERB" do
|
43
|
+
src = 'Hello, <%= name %>'
|
44
|
+
assert_equal "Hello, Matt", TextFilters.transform(src, {'name'=>'Matt'}, :none, :erb)
|
45
|
+
end
|
46
|
+
|
47
|
+
should "support transformation of parameters via Liquid" do
|
48
|
+
src = 'Hello, {{ name }}'
|
49
|
+
assert_equal "Hello, Matt", TextFilters.transform(src, {'name'=>'Matt'}, :none, :liquid)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
<%= error_messages_for :page %>
|
2
|
+
|
3
|
+
<% form_for :page, @page do |f| %>
|
4
|
+
<table class="page-form" cellpadding="0" cellspacing="0">
|
5
|
+
|
6
|
+
<tr>
|
7
|
+
<td class="label"><label for="page_title">Title</label></td>
|
8
|
+
<td class="field"><%= f.text_field :title, :tabindex=>1, :maxlength=>255, :size=>50 %> <%= link_to_function "More...", "ComatoseEditForm.toggle_extra_fields(this)", :id=>'more-options' %></td>
|
9
|
+
</tr>
|
10
|
+
|
11
|
+
<tr id="slug_row" class="meta-info">
|
12
|
+
<td class="label"><label for="page_slug">Slug</label></td>
|
13
|
+
<td class="field"><%= f.text_field :slug, :tabindex=>6, :maxlength=>255, :size=>50, :disabled=>@root_pages.include?(@page) %></td>
|
14
|
+
</tr>
|
15
|
+
|
16
|
+
<% if show_field? 'keywords' %>
|
17
|
+
<tr id="keywords_row" class="meta-info">
|
18
|
+
<td class="label"><label for="page_keywords">Keywords</label></td>
|
19
|
+
<td class="field"><%= f.text_field :keywords, :tabindex=>7, :maxlength=>1000, :size=>50 %></td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<% if show_field? 'parent' %>
|
24
|
+
<tr id="parent_row" class="meta-info">
|
25
|
+
<td class="label"><label for="page_parent">Parent</label></td>
|
26
|
+
<td class="field">
|
27
|
+
<% if mode != :new and @root_pages.include? @page %>
|
28
|
+
<select id="page_parent" disabled="true"><option><%= @page.title %> is a root page</option></select>
|
29
|
+
<% else %>
|
30
|
+
<select id="page_parent" name="page[parent_id]" tabindex="8"><%= tree_select_box @root_pages, @page.parent_id, @page.id %></select>
|
31
|
+
<% end %>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
|
36
|
+
<tr>
|
37
|
+
<td class="label body"><label for="page_body">Body</label></td>
|
38
|
+
<td class="field"><%= f.text_area :body, :rows=>20, :tabindex=>2 %></td>
|
39
|
+
</tr>
|
40
|
+
|
41
|
+
<% if show_field? 'filter' %>
|
42
|
+
<tr id="filter_row" class="meta-info">
|
43
|
+
<td class="label"><label for="page_filter_type">Filter</label></td>
|
44
|
+
<td class="field">
|
45
|
+
<%= select_tag 'page[filter_type]', options_for_select(TextFilters.all_titles.sort, @page.filter_type || Comatose.config.default_filter), :tabindex=>3, :id=>'page_filter_type' %>
|
46
|
+
<span class="field-help">Converts plain text into html</span>
|
47
|
+
</td>
|
48
|
+
</tr>
|
49
|
+
<% end %>
|
50
|
+
|
51
|
+
<% if show_field? 'created_on' %>
|
52
|
+
<tr id="created_row" class="meta-info">
|
53
|
+
<td class="label"><label for="page_created_on">Created</label></td>
|
54
|
+
<td class="field">
|
55
|
+
<%= f.datetime_select :created_on %>
|
56
|
+
</td>
|
57
|
+
</tr>
|
58
|
+
<% end %>
|
59
|
+
|
60
|
+
</table>
|
61
|
+
|
62
|
+
<div id="button-group">
|
63
|
+
<% unless @page.updated_on.nil? %>
|
64
|
+
<div class="last-update">
|
65
|
+
<label>
|
66
|
+
Updated <%= time_ago_in_words @page.updated_on, true %> ago by
|
67
|
+
<%= @page.author %>.
|
68
|
+
<%= link_to(pluralize(@page.versions.length, 'revision', 'revisions'), :action=>'versions', :id=>@page) if @page.versions.length > 0 %>
|
69
|
+
</label>
|
70
|
+
</div>
|
71
|
+
<% end %>
|
72
|
+
<%= image_tag 'comatose/spinner.gif', :id=>'spinner', :align=>'absmiddle', :style=>'display:none;' %>
|
73
|
+
<%= button_to_function('Preview', "ComatoseEditForm.preview_content('#{url_for :controller=>controller.controller_name, :action=>'preview', :id=>@page}')", :tabindex=>3, :id=>'preview-btn' ) if show_field? 'preview' %>
|
74
|
+
<%= submit_tag ((mode == :edit) ? 'Save Changes' : 'Create Page'), :tabindex=>4 %>
|
75
|
+
<% if @page.versions.length > 0 %>
|
76
|
+
<%= link_to "Revert", :action=>'versions', :id=>@page %>
|
77
|
+
<% end %>
|
78
|
+
or
|
79
|
+
<a href="<%= url_for :controller=>controller.controller_name, :action=>'index' %>" onlick="ComatoseEditForm.cancel(this.href); return false;" tabindex="5">Cancel</a>
|
80
|
+
</div>
|
81
|
+
<% end %>
|
82
|
+
|
83
|
+
<div id="preview-area">
|
84
|
+
<fieldset>
|
85
|
+
<legend>Page Preview</legend>
|
86
|
+
<div class="preview-body">
|
87
|
+
<div id="preview-panel"><span style='color:blue;'>Loading Preview...</span></div>
|
88
|
+
<div style="clear:both"></div>
|
89
|
+
</div>
|
90
|
+
</fieldset>
|
91
|
+
<div class="commands">
|
92
|
+
<a href="#" onclick="$('preview-area').hide();">Close Preview</a> or <a href="#">Back to top</a>
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
|
96
|
+
<%= javascript_tag "ComatoseEditForm.init('#{mode.to_s}');" %>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<%# Params:
|
2
|
+
# - page (Page Node)
|
3
|
+
# - level (integer indicating current tree depth)
|
4
|
+
# Called From:
|
5
|
+
# - index
|
6
|
+
# Description:
|
7
|
+
# This partial is used recursively. Render it with the root node, and it will recurse
|
8
|
+
# down all of the child nodes to build a list with proper indentation to indicate
|
9
|
+
# tree depth.
|
10
|
+
%>
|
11
|
+
|
12
|
+
<%
|
13
|
+
# Create the page-level links...
|
14
|
+
links = []
|
15
|
+
links << link_to(pluralize(page.versions.length, 'revision', 'revisions'), :action=>'versions', :id=>page) if !page.nil? and !page.versions.nil? and page.versions.length > 0
|
16
|
+
links << link_to('add child page', {:action=>'new', :parent=>page}, :title=>"Add a child to '#{page.title}'", :class=>'add-page')
|
17
|
+
links << link_to_function('reorder children', "ComatoseList.toggle_reorder('page_list_#{page.id}',this,#{page.id})", :title=>"Reorder children of '#{page.title}'", :class=>'reorder-children', :href=>url_for(:action=>'reorder', :id=>page)) if !page.children.empty? and page.children.length > 1
|
18
|
+
links << link_to('delete', {:action=>'delete', :id=>page}, :confirm=>'This will delete this page, and any children. Are you sure?', :title=>"Delete page '#{page.title}' and all it's children", :class=>'delete-page', :method=>'post', :onmouseover=>"ComatoseList.item_hover('page_#{page.id}', 'over', true)", :onmouseout=>"ComatoseList.item_hover('page_#{page.id}', 'out', true)") unless @root_pages.include? page
|
19
|
+
# Level check, one, two, three...
|
20
|
+
collapse_children = (level >= Comatose.config.default_tree_level)
|
21
|
+
%>
|
22
|
+
|
23
|
+
<li id="page_<%= page.id %>">
|
24
|
+
<table cellpadding="0" cellspacing="0">
|
25
|
+
<tr>
|
26
|
+
<td rowspan="2" valign="center">
|
27
|
+
<% if !page.children.empty? %>
|
28
|
+
<%= image_tag( ((collapse_children) ? 'comatose/collapsed.gif' : 'comatose/expanded.gif'), :title=>'Expand/Collapse', :onclick=>"ComatoseList.toggle_tree_nodes(this,#{page.id});", :class=>'tree-controller', :size=>'12x12', :id=>"page_controller_#{page.id}" ) %>
|
29
|
+
<% else %>
|
30
|
+
<%= image_tag 'comatose/no-children.gif', :size=>'12x12', :class=>'tree-controller' %>
|
31
|
+
<% end %>
|
32
|
+
</td>
|
33
|
+
<td rowspan="2" valign="center">
|
34
|
+
<%= image_tag 'comatose/page.gif', :size=>'25x31', :align=>"absmiddle" %>
|
35
|
+
<span class="handle">DRAG</span>
|
36
|
+
</td>
|
37
|
+
<td>
|
38
|
+
<%= link_to page.title, {:action=>'edit', :id=>page}, :title=>"Path:#{page.full_path}", :class=>'page' %>
|
39
|
+
</td>
|
40
|
+
</tr>
|
41
|
+
<tr>
|
42
|
+
<td class="commands">
|
43
|
+
Updated <span title="Created on <%= page.created_on %>"><%= time_ago_in_words page.updated_on, true %> ago</span><%= " by #{page.author}" unless page.author.nil? or page.author.empty? %>,
|
44
|
+
<%= links.join(', ') %>.
|
45
|
+
</td>
|
46
|
+
</tr>
|
47
|
+
</table>
|
48
|
+
|
49
|
+
<ul id="page_list_<%= page.id %>" old="lvl-<%= page.id %>" class="page-list <%= 'collapsed' if collapse_children %>" >
|
50
|
+
<% for child in page.children %>
|
51
|
+
<%= render :partial=>'page_list_item', :locals=>{ :page=>child, :level=>level+1 } %>
|
52
|
+
<% end %>
|
53
|
+
</ul>
|
54
|
+
|
55
|
+
<%= sortable_element( "page_list_#{page.id}",
|
56
|
+
:complete => visual_effect(:highlight, "page_list_#{page.id}"),
|
57
|
+
:handle=>'handle',
|
58
|
+
:update=>'flash-content',
|
59
|
+
:url => { :action => "reorder", :id=>page } ) if !page.children.empty? and page.children.length > 1 %>
|
60
|
+
</li>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<h1>
|
2
|
+
Page Delete Confirmation
|
3
|
+
</h1>
|
4
|
+
|
5
|
+
<blockquote>
|
6
|
+
<p>Are you sure you want to delete the page titled "<b><%= @page.title %></b>"?</p>
|
7
|
+
<% unless @page.children.empty? %>
|
8
|
+
<p>It has <b><%= @page.children.length %></b> child pages that will also be deleted...</p>
|
9
|
+
<% end %>
|
10
|
+
</blockquote>
|
11
|
+
|
12
|
+
<%= start_form_tag %>
|
13
|
+
<div id="button-group">
|
14
|
+
<%= submit_tag "Yes, Delete The Page" %>
|
15
|
+
or
|
16
|
+
<%= link_to "Cancel", :action=>'index' %>
|
17
|
+
</div>
|
18
|
+
<%= end_form_tag %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<div class="action">
|
2
|
+
<%= link_to 'Clear Page Cache', :controller=>controller.controller_name, :action=>'expire_page_cache' %>
|
3
|
+
<% if Comatose.config.allow_import_export %>
|
4
|
+
<%= link_to 'Import', '#', :id => 'import_link2', :onclick => "$('import_form').setStyle({display: 'inline'}); return false;" %>
|
5
|
+
<%= link_to 'Export', :controller=>controller.controller_name, :action=>'export' %>
|
6
|
+
<div id="import_form" style="display: none;">
|
7
|
+
<% form_tag(url_for(:action => 'import'), :multipart => true) do %>
|
8
|
+
<%= file_field_tag 'import_file' %>
|
9
|
+
<%= submit_tag 'Upload and Import' %>
|
10
|
+
<a href="#" onclick="$('import_form').hide(); return false;">Cancel</a>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<h1>
|
17
|
+
Page List
|
18
|
+
<%= image_tag 'comatose/spinner.gif', :id=>'spinner', :align=>'absmiddle', :style=>'display:none;' %>
|
19
|
+
</h1>
|
20
|
+
|
21
|
+
<ul class="page-list root">
|
22
|
+
<% @root_pages.each do |page| %>
|
23
|
+
<%= render :partial=>'page_list_item', :locals=>{ :page=>page, :level=>1 } %>
|
24
|
+
<% end %>
|
25
|
+
</ul>
|
26
|
+
|
27
|
+
<div id="status"></div>
|
28
|
+
|
29
|
+
<%= javascript_tag "ComatoseList.init()" %>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<h1>Reorder Pages</h1>
|
2
|
+
|
3
|
+
<h3>"<%= @page.title %>" child pages:</h3>
|
4
|
+
|
5
|
+
<ul class="page-list">
|
6
|
+
<% @page.children.each do |page| %>
|
7
|
+
<li>
|
8
|
+
<table cellpadding="0" cellspacing="0">
|
9
|
+
<tr>
|
10
|
+
<td rowspan="2" valign="center">
|
11
|
+
<%= image_tag 'comatose/page.gif', :size=>'25x31', :align=>"absmiddle" %>
|
12
|
+
</td>
|
13
|
+
<td>
|
14
|
+
<a class="page"><%= page.title %></a>
|
15
|
+
</td>
|
16
|
+
</tr>
|
17
|
+
<tr>
|
18
|
+
<td class="commands">
|
19
|
+
<%= link_to "Move Up", :action=>'reorder', :cmd=>'up', :page=>page.id %>,
|
20
|
+
<%= link_to "Move Down", :action=>'reorder', :cmd=>'down', :page=>page.id %>
|
21
|
+
</td>
|
22
|
+
</tr>
|
23
|
+
</table>
|
24
|
+
</li>
|
25
|
+
<% end %>
|
26
|
+
</ul>
|
27
|
+
|
28
|
+
<div id="button-group">
|
29
|
+
<%= link_to "Finished", :action=>'index' %>
|
30
|
+
</div>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<h1>Page Revisions</h1>
|
2
|
+
<form>
|
3
|
+
<div class="revisions older-content">
|
4
|
+
<div class="header">
|
5
|
+
<div class="header-actions">
|
6
|
+
<% form_tag :action => 'versions', :id => @page, :html => { :method => :get } do %>
|
7
|
+
View Version: <%= select_tag "version", options_from_collection_for_select(@page.versions, 'version', 'version', @version_num), {'onchange'=>'this.form.submit();'} %>
|
8
|
+
<%= submit_tag 'Go', {'id'=>'go-btn'} %>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
Version <%= @version_num %>
|
12
|
+
</div>
|
13
|
+
<div class="meta">
|
14
|
+
<label class="title"><span>Title:</span><%= @version.title %></label>
|
15
|
+
<label><span>Slug:</span> <%= @version.slug %></label>
|
16
|
+
<label><span>Keywords:</span> <%= @version.keywords %></label>
|
17
|
+
</div>
|
18
|
+
<%= @version.body.split("\n").join('<br/>') unless @version.body.nil? %>
|
19
|
+
<div id="button-group" class="footer">
|
20
|
+
<% form_tag :action=>'set_version', :id => @page, :version => @version_num do %>
|
21
|
+
<%= submit_tag "Set As Current Version" %>
|
22
|
+
or
|
23
|
+
<%= link_to "Cancel", :action=>'index' %>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="revisions current-content">
|
29
|
+
<div class="header">
|
30
|
+
Current Version
|
31
|
+
</div>
|
32
|
+
<div class="meta">
|
33
|
+
<label class="title"><span>Title:</span><%= @page.title %></label>
|
34
|
+
<label><span>Slug:</span> <%= @page.slug %></label>
|
35
|
+
<label><span>Keywords:</span> <%= @page.keywords %></label>
|
36
|
+
</div>
|
37
|
+
<%= @page.body.split("\n").join('<br/>') unless @page.body.nil? %>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div style="clear:both"> </div>
|