radiant-copy_move-extension 2.2.0 → 2.3.0
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/README.textile +53 -0
- data/VERSION +1 -1
- data/app/views/admin/pages/_copy_move_extra_td.html.haml +13 -0
- data/app/views/admin/pages/{_copy_move_extra_th.haml → _copy_move_extra_th.html.haml} +0 -0
- data/app/views/admin/pages/_copy_move_form.html.haml +20 -0
- data/app/views/admin/pages/copy_children.html.haml +6 -0
- data/app/views/admin/pages/copy_page.html.haml +6 -0
- data/app/views/admin/pages/copy_tree.html.haml +6 -0
- data/app/views/admin/pages/move_page.html.haml +13 -0
- data/config/locales/de.yml +17 -1
- data/config/locales/en.yml +19 -15
- data/config/locales/nl.yml +20 -16
- data/config/routes.rb +6 -6
- data/copy_move_extension.rb +5 -6
- data/lib/copy_move/controller.rb +49 -21
- data/lib/copy_move/model.rb +5 -2
- data/public/images/admin/copy-move.png +0 -0
- data/radiant-copy_move-extension.gemspec +4 -3
- data/spec/controllers/copy_move_controller_spec.rb +7 -7
- data/spec/models/copy_move_spec.rb +8 -5
- metadata +15 -12
- data/README +0 -47
- data/app/views/admin/pages/_copy_move_extra_td.haml +0 -13
- data/app/views/admin/pages/_copy_move_popup.haml +0 -27
- data/public/stylesheets/admin/copy_move.css +0 -30
data/README.textile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
h1. CopyMove
|
2
|
+
|
3
|
+
* Created by: Andrea Franz - http://gravityblast.com
|
4
|
+
* Version: 2.3.0 (compatible with Radiant >= 0.9.1)
|
5
|
+
* Contact: andrea AT gravityblast DOT com
|
6
|
+
|
7
|
+
* This fork merged from others, refactored and extended by: Andrew vonderLuft - http://avlux.net
|
8
|
+
* Contact: avonderluft AT avlux DOT net
|
9
|
+
|
10
|
+
h2. Description
|
11
|
+
|
12
|
+
This extension adds a new action ('CopyMove') in the Radiant's administration interface near the 'Add child' button. With this extension you can copy or move a page with or without its children.
|
13
|
+
|
14
|
+
h2. Updates
|
15
|
+
|
16
|
+
* 2.3.0 - 03/2011 - merged updates from othe forks, refactored for Blade UI in Radiant 0.9 or greater - Andrew vonderLuft
|
17
|
+
|
18
|
+
h2. Requirements
|
19
|
+
|
20
|
+
* For Radiant versions < 0.6.7 You need the "shards extension":http://groups.google.com/group/radiantcms-dev/browse_frm/thread/d07f7fffd84b3ce0/5efa6fd6c2e1668e?lnk=gst&q=shards#5efa6fd6c2e1668e
|
21
|
+
* Radiant versions >= 0.6.7 and greater have Shards built in.
|
22
|
+
|
23
|
+
h2. Installation
|
24
|
+
|
25
|
+
# Get the latest version of CopyMove extension code:
|
26
|
+
|
27
|
+
<pre>
|
28
|
+
cd vendor/extensions
|
29
|
+
git clone git://github.com/avonderluft/radiant-copy-move.git copy_move
|
30
|
+
</pre>
|
31
|
+
|
32
|
+
## For Radiant versions < 0.6.7
|
33
|
+
|
34
|
+
Open the environment.rb and set shards as first extension to be loaded:
|
35
|
+
config.extensions = [ :shards, :textile_filter, :markdown_filter, :all ]
|
36
|
+
|
37
|
+
# From your Rails app root type this command:
|
38
|
+
<pre>
|
39
|
+
rake RAILS_ENV=production radiant:extensions:copy_move:install
|
40
|
+
</pre>
|
41
|
+
which will copy some needed files to the public directory of your app.
|
42
|
+
|
43
|
+
h2. Contributors
|
44
|
+
|
45
|
+
* Benny Degezelle
|
46
|
+
* Mario T. Lanza
|
47
|
+
* Daniel Collis-Puro
|
48
|
+
* Sean Cribbs
|
49
|
+
* Andrew vonderLuft
|
50
|
+
|
51
|
+
h2. Credits
|
52
|
+
|
53
|
+
This extension contains icons from the FamFamFam Silk icon set. See http://famfamfam.com/
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
@@ -0,0 +1,13 @@
|
|
1
|
+
- unless simple
|
2
|
+
%td.actions
|
3
|
+
- if page.respond_to?('children')
|
4
|
+
= link_to image('copy-move', :alt => 'CopyMove') + ' ' + t('copy_move.button'), "#copy_move_#{page.id}", :class => "action dropdown"
|
5
|
+
%ul.menu{:id => "copy_move_#{page.id}"}
|
6
|
+
- if page.children.any?
|
7
|
+
%li.copy_page_only= link_to image('page_white') + ' ' + t('copy_move.copy_page_only'), copy_page_path(page.id), :class => 'popup'
|
8
|
+
%li.copy_with_first_level_children= link_to image('page_white_copy') + ' ' + t('copy_move.copy_with_first_level_children'), copy_children_path(page.id), :class => 'popup'
|
9
|
+
%li.copy_whole_subtree= link_to image('page_white_stack') + ' ' + t('copy_move.copy_whole_subtree'), copy_tree_path(page.id), :class => 'popup'
|
10
|
+
%li.move_entire_subtree= link_to image('page_white_go') + ' ' + t('copy_move.move_entire_subtree'), move_page_path(page.id), :class => 'popup'
|
11
|
+
- else
|
12
|
+
%li.copy_page= link_to image('page_white') + ' ' + t('copy_move.copy_page'), copy_page_path(page.id), :class => 'popup'
|
13
|
+
%li.move_page= link_to image('page_white_go') + ' ' + t('copy_move.move_page'), move_page_path(page.id), :class => 'popup'
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
- status_msg = "#{self.request.path_parameters[:action].humanize} is being performed on #{@page.title} page ..."
|
2
|
+
- form_tag self.request.path_parameters, :method => :post, 'data-onsubmit_status' => status_msg do
|
3
|
+
%p
|
4
|
+
%label= "Page: #{@page.title} ( #{@page.path} )"
|
5
|
+
%p
|
6
|
+
%label= "Parent: #{@page.parent.title} ( #{@page.parent.path} )"
|
7
|
+
%hr
|
8
|
+
%p
|
9
|
+
%label{:for => 'parent_id'}
|
10
|
+
New parent:
|
11
|
+
= page_parent_select_tag
|
12
|
+
%p
|
13
|
+
%label{:for => 'status_id'}
|
14
|
+
New status:
|
15
|
+
= select_tag "status_id", options_for_select(Status.find_all.map{ |s| [s.name, s.id] }.unshift(['Use the same status', nil]))
|
16
|
+
|
17
|
+
%p.buttons
|
18
|
+
= submit_tag "OK"
|
19
|
+
= t('or')
|
20
|
+
= link_to_function t('cancel'), "$(this).closePopup();"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.popup
|
2
|
+
%h3.title
|
3
|
+
= image('page_white_go')
|
4
|
+
- if @page.children.any?
|
5
|
+
= t('copy_move.move_entire_subtree')
|
6
|
+
- else
|
7
|
+
= t('copy_move.move_page')
|
8
|
+
%h4
|
9
|
+
- if @page.children.any?
|
10
|
+
= t('copy_move.move_tree_description')
|
11
|
+
- else
|
12
|
+
= t('copy_move.move_page_description')
|
13
|
+
= render :partial => 'copy_move_form'
|
data/config/locales/de.yml
CHANGED
@@ -1,10 +1,26 @@
|
|
1
1
|
de:
|
2
2
|
copy_move:
|
3
|
+
button: "Copy/Move"
|
4
|
+
copy_or_move_page: "Copy or Move Page"
|
5
|
+
copy_page: "Copy Page"
|
6
|
+
copy_page_only: "Copy Page Only"
|
7
|
+
copy_page_description: "This will create a copy of this single page under a new parent"
|
8
|
+
copy_whole_subtree: "Copy Whole Subtree"
|
9
|
+
copy_tree_description: "This will create a copy of this page and all its descendants under a new parent"
|
10
|
+
move_entire_subtree: "Move Entire Subtree"
|
11
|
+
move_tree_description: "This will move this page and all its descendants under a new parent"
|
12
|
+
move_page: "Move Page"
|
13
|
+
move_page_description: "This will move this page under a new parent"
|
14
|
+
copy_with_first_level_children: "Copy With First-level Children"
|
15
|
+
copy_children_description: "This will create a copy of this page and its immediate first-level children under a new parent"
|
16
|
+
|
3
17
|
copied:
|
4
18
|
'Eine Kopie von <strong>{{page}}</strong> wurde unterhalb von <strong>{{parent}}</strong> erstellt.'
|
19
|
+
moved:
|
20
|
+
'Page <strong>{{page}}</strong> was moved under <strong>{{parent}}</strong>.'
|
5
21
|
immediate_children_copied:
|
6
22
|
'Eine Kopie der Seite <strong>{{page}}</strong> sowie der unmittelbaren Unterseiten wurde unter <strong>{{parent}}</strong> erstellt.'
|
7
23
|
descendants_copied:
|
8
24
|
'Eine Kopie der Seite <strong>{{page}}</strong> sowie aller Unterseiten wurde unter <strong>{{parent}}</strong> erstellt.'
|
9
25
|
descendants_moved:
|
10
|
-
'Die Seite <strong>{{page}}</strong> und alle Unterseiten wurden verschoben in <strong>{{parent}}</strong>.'
|
26
|
+
'Die Seite <strong>{{page}}</strong> und alle Unterseiten wurden verschoben in <strong>{{parent}}</strong>.'
|
data/config/locales/en.yml
CHANGED
@@ -1,22 +1,26 @@
|
|
1
1
|
en:
|
2
2
|
copy_move:
|
3
|
+
button: "Copy/Move"
|
4
|
+
copy_or_move_page: "Copy or Move Page"
|
5
|
+
copy_page: "Copy Page"
|
6
|
+
copy_page_only: "Copy Page Only"
|
7
|
+
copy_page_description: "This will create a copy of this single page under a new parent"
|
8
|
+
copy_whole_subtree: "Copy Whole Subtree"
|
9
|
+
copy_tree_description: "This will create a copy of this page and all its descendants under a new parent"
|
10
|
+
move_entire_subtree: "Move Entire Subtree"
|
11
|
+
move_tree_description: "This will move this page and all its descendants under a new parent"
|
12
|
+
move_page: "Move Page"
|
13
|
+
move_page_description: "This will move this page under a new parent"
|
14
|
+
copy_with_first_level_children: "Copy With First-level Children"
|
15
|
+
copy_children_description: "This will create a copy of this page and its immediate first-level children under a new parent"
|
16
|
+
|
3
17
|
copied:
|
4
18
|
'A copy of <strong>{{page}}</strong> was created under <strong>{{parent}}</strong>.'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
copy_page_and_direct_children:
|
10
|
-
"Copy this page and its first-level children."
|
19
|
+
moved:
|
20
|
+
'Page <strong>{{page}}</strong> was moved under <strong>{{parent}}</strong>.'
|
21
|
+
immediate_children_copied:
|
22
|
+
'Copies of <strong>{{page}}</strong> and its immediate children were created under <strong>{{parent}}</strong>'
|
11
23
|
descendants_copied:
|
12
24
|
'Copies of <strong>{{page}}</strong> and all its descendants were created under <strong>{{parent}}</strong>.'
|
13
25
|
descendants_moved:
|
14
|
-
'Page <strong>{{page}}</strong> and all its descendants were moved under <strong>{{parent}}</strong>.'
|
15
|
-
immediate_children_copied:
|
16
|
-
'Copies of <strong>{{page}}</strong> and its immediate children were created under <strong>{{parent}}</strong>'
|
17
|
-
move_page:
|
18
|
-
'Move this page'
|
19
|
-
move_page_and_children:
|
20
|
-
'Move this page and its children'
|
21
|
-
what_do_you_want_to_do:
|
22
|
-
'What do you want to do?'
|
26
|
+
'Page <strong>{{page}}</strong> and all its descendants were moved under <strong>{{parent}}</strong>.'
|
data/config/locales/nl.yml
CHANGED
@@ -1,22 +1,26 @@
|
|
1
1
|
nl:
|
2
2
|
copy_move:
|
3
|
+
button: "Copy/Move"
|
4
|
+
copy_page: "Copy Page"
|
5
|
+
copy_or_move_page: "Copy or Move Page"
|
6
|
+
copy_page_only: "Copy Page Only"
|
7
|
+
copy_page_description: "This will create a copy of this single page under a new parent"
|
8
|
+
copy_whole_subtree: "Copy Whole Subtree"
|
9
|
+
copy_tree_description: "This will create a copy of this page and all its descendants under a new parent"
|
10
|
+
move_entire_subtree: "Move Entire Subtree"
|
11
|
+
move_tree_description: "This will move this page and all its descendants under a new parent"
|
12
|
+
move_page: "Move Page"
|
13
|
+
move_page_description: "This will move this page under a new parent"
|
14
|
+
copy_with_first_level_children: "Copy With First-level Children"
|
15
|
+
copy_children_description: "This will create a copy of this page and its immediate first-level children under a new parent"
|
16
|
+
|
3
17
|
copied:
|
4
18
|
'Er werd een kopie van <strong>{{page}}</strong> gemaakt onder <strong>{{parent}}</strong>.'
|
5
|
-
|
6
|
-
|
7
|
-
copy_page_and_all_children:
|
8
|
-
"Pagina en alle child-pagina's kopieëren"
|
9
|
-
copy_page_and_direct_children:
|
10
|
-
"Pagina en directe child-pagina's kopieëren"
|
11
|
-
descendants_copied:
|
12
|
-
"Kopieën van <strong>{{page}}</strong> en alle onderliggende pagina's zijn gemaakt onder <strong>{{parent}}</strong>"
|
13
|
-
descendants_moved:
|
14
|
-
"De pagina <strong>{{page}}</strong> en alle onderliggende pagina's zijn verplaatst onder <strong>{{parent}}</strong>"
|
19
|
+
moved:
|
20
|
+
'Page <strong>{{page}}</strong> was moved under <strong>{{parent}}</strong>.'
|
15
21
|
immediate_children_copied:
|
16
22
|
"Kopieën van <strong>{{page}}</strong> en de eerst onderliggende pagina's zijn gemaakt onder <strong>{{parent}}</strong>"
|
17
|
-
|
18
|
-
'
|
19
|
-
|
20
|
-
"
|
21
|
-
what_do_you_want_to_do:
|
22
|
-
'What do you want to do?'
|
23
|
+
descendants_copied:
|
24
|
+
"Kopieën van <strong>{{page}}</strong> en alle onderliggende pagina's zijn gemaakt onder <strong>{{parent}}</strong>."
|
25
|
+
descendants_moved:
|
26
|
+
"De pagina <strong>{{page}}</strong> en alle onderliggende pagina's zijn verplaatst onder <strong>{{parent}}</strong>."
|
data/config/routes.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
ActionController::Routing::Routes.draw do |map|
|
2
|
-
map.with_options(:controller => "admin/pages") do |
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
map.with_options(:controller => "admin/pages") do |page|
|
3
|
+
page.copy_page '/admin/pages/:id/copy_page', :action => 'copy_page'
|
4
|
+
page.copy_children '/admin/pages/:id/copy_children', :action => 'copy_children'
|
5
|
+
page.copy_tree '/admin/pages/:id/copy_tree', :action => 'copy_tree'
|
6
|
+
page.move_page '/admin/pages/:id/move_page', :action => 'move_page'
|
7
7
|
end
|
8
|
-
end
|
8
|
+
end
|
data/copy_move_extension.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require_dependency 'application_controller'
|
2
2
|
|
3
3
|
class CopyMoveExtension < Radiant::Extension
|
4
|
-
version "2.
|
5
|
-
description "Adds the ability to copy
|
6
|
-
url "
|
4
|
+
version "2.3.0"
|
5
|
+
description "Adds the ability to copy or move a page with or without its children"
|
6
|
+
url "https://github.com/avonderluft/radiant-copy-move"
|
7
7
|
|
8
8
|
def activate
|
9
9
|
Admin::PagesController.class_eval do
|
@@ -11,8 +11,7 @@ class CopyMoveExtension < Radiant::Extension
|
|
11
11
|
helper :copy_move
|
12
12
|
end
|
13
13
|
Page.class_eval { include CopyMove::Model }
|
14
|
-
admin.page.index.add :sitemap_head, 'copy_move_extra_th'
|
15
|
-
admin.page.index.add :node, 'copy_move_extra_td', :
|
16
|
-
admin.page.index.add :bottom, 'copy_move_popup'
|
14
|
+
admin.page.index.add :sitemap_head, 'copy_move_extra_th', :before => 'actions_column_header'
|
15
|
+
admin.page.index.add :node, 'copy_move_extra_td', :before => 'actions_column'
|
17
16
|
end
|
18
17
|
end
|
data/lib/copy_move/controller.rb
CHANGED
@@ -2,39 +2,67 @@ module CopyMove
|
|
2
2
|
module Controller
|
3
3
|
def self.included(base)
|
4
4
|
base.class_eval do
|
5
|
-
before_filter
|
6
|
-
c.include_stylesheet 'admin/copy_move'
|
7
|
-
end
|
8
|
-
before_filter :load_page, :only => [:copy_page, :copy_children, :copy_tree, :move]
|
9
|
-
before_filter :load_parent, :only => [:copy_page, :copy_children, :copy_tree, :move]
|
5
|
+
before_filter :load_page, :only => [:copy_page, :copy_children, :copy_tree, :move_page]
|
10
6
|
end
|
11
7
|
end
|
12
8
|
|
13
9
|
def copy_page
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
if request.request_method() == :get
|
11
|
+
respond_to do |format|
|
12
|
+
format.any {render :copy_page, :content_type => "text/html", :layout => false }
|
13
|
+
end
|
14
|
+
elsif request.request_method() == :post
|
15
|
+
load_parent
|
16
|
+
@new_page = @page.copy_to(@parent, params[:status_id])
|
17
|
+
flash[:notice] = I18n.t('copied', :scope => :copy_move, :page => @page.title, :parent => @parent.title)
|
18
|
+
redirect_to admin_pages_url
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def copy_children
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
if request.request_method() == :get
|
24
|
+
respond_to do |format|
|
25
|
+
format.any {render :copy_children, :content_type => "text/html", :layout => false }
|
26
|
+
end
|
27
|
+
elsif request.request_method() == :post
|
28
|
+
load_parent
|
29
|
+
@new_page = @page.copy_with_children_to(@parent, params[:status_id])
|
30
|
+
flash[:notice] = I18n.t('immediate_children_copied', :scope => :copy_move, :page => @page.title, :parent => @parent.title)
|
31
|
+
redirect_to admin_pages_url
|
32
|
+
end
|
23
33
|
end
|
24
34
|
|
25
35
|
def copy_tree
|
26
|
-
|
27
|
-
|
28
|
-
|
36
|
+
if request.request_method() == :get
|
37
|
+
respond_to do |format|
|
38
|
+
format.any {render :copy_tree, :content_type => "text/html", :layout => false }
|
39
|
+
end
|
40
|
+
elsif request.request_method() == :post
|
41
|
+
load_parent
|
42
|
+
@new_page = @page.copy_tree_to(@parent, params[:status_id])
|
43
|
+
flash[:notice] = I18n.t('descendants_copied', :scope => :copy_move, :page => @page.title, :parent => @parent.title)
|
44
|
+
redirect_to admin_pages_url
|
45
|
+
end
|
29
46
|
end
|
30
47
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
48
|
+
def move_page
|
49
|
+
if request.request_method() == :get
|
50
|
+
respond_to do |format|
|
51
|
+
format.any {render :move_page, :content_type => "text/html", :layout => false }
|
52
|
+
end
|
53
|
+
elsif request.request_method() == :post
|
54
|
+
load_parent
|
55
|
+
@page.move_under(@parent, params[:status_id])
|
56
|
+
if @page.children.any?
|
57
|
+
flash[:notice] = I18n.t('descendants_moved', :scope => :copy_move, :page => @page.title, :parent => @parent.title)
|
58
|
+
else
|
59
|
+
flash[:notice] = I18n.t('moved', :scope => :copy_move, :page => @page.title, :parent => @parent.title)
|
60
|
+
end
|
61
|
+
redirect_to admin_pages_url
|
62
|
+
end
|
63
|
+
rescue CopyMove::CircularHierarchy => e
|
64
|
+
flash[:error] = e.message
|
65
|
+
redirect_to admin_pages_url
|
38
66
|
end
|
39
67
|
|
40
68
|
private
|
data/lib/copy_move/model.rb
CHANGED
@@ -13,9 +13,11 @@ module CopyMove
|
|
13
13
|
{:slug => test_page.slug, :title => test_page.title, :breadcrumb => test_page.breadcrumb}
|
14
14
|
end
|
15
15
|
|
16
|
-
def move_under(parent)
|
16
|
+
def move_under(parent, status = nil)
|
17
17
|
raise CircularHierarchy.new(self) if parent == self || parent.ancestors.include?(self)
|
18
|
-
|
18
|
+
status_id = status.blank? ? self.status_id : status
|
19
|
+
update_attributes!(:parent_id => parent.id, :status_id => status_id)
|
20
|
+
assume_bottom_position if defined?(Reorder)
|
19
21
|
end
|
20
22
|
|
21
23
|
def copy_to(parent, status = nil)
|
@@ -23,6 +25,7 @@ module CopyMove
|
|
23
25
|
self.parts.each do |part|
|
24
26
|
new_page.parts << part.clone
|
25
27
|
end
|
28
|
+
new_page.send :add_to_list_bottom if defined?(Reorder)
|
26
29
|
new_page.status_id = status.blank? ? new_page.status_id : status
|
27
30
|
new_page.save!
|
28
31
|
end
|
Binary file
|
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{radiant-copy_move-extension}
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Benny Degezelle"]
|
12
|
-
s.date = %q{2010-10-
|
13
|
-
s.description = %q{
|
12
|
+
s.date = %q{2010-10-14}
|
13
|
+
s.description = %q{Adds the ability to copy or move a page with or without its children}
|
14
14
|
s.email = %q{benny@gorilla-webdesign.be}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"app/views/admin/pages/_copy_move_extra_td.haml",
|
29
29
|
"app/views/admin/pages/_copy_move_extra_th.haml",
|
30
30
|
"app/views/admin/pages/_copy_move_popup.haml",
|
31
|
+
"app/views/copy_move/index.html.haml",
|
31
32
|
"config/locales/de.yml",
|
32
33
|
"config/locales/en.yml",
|
33
34
|
"config/locales/nl.yml",
|
@@ -5,7 +5,7 @@ describe Admin::PagesController do
|
|
5
5
|
before :each do
|
6
6
|
login_as :existing
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
describe "routes" do
|
10
10
|
it "should route URLs to the copy_page action" do
|
11
11
|
route_for(:controller => "admin/pages", :action => "copy_page", :id => "1").should == "/admin/pages/1/copy_page"
|
@@ -22,9 +22,9 @@ describe Admin::PagesController do
|
|
22
22
|
params_from(:post, "/admin/pages/1/copy_tree").should == {:controller => "admin/pages", :action => "copy_tree", :id => "1"}
|
23
23
|
end
|
24
24
|
|
25
|
-
it "should route URLs to the
|
26
|
-
route_for(:controller => "admin/pages", :action => "
|
27
|
-
params_from(:post, "/admin/pages/1/
|
25
|
+
it "should route URLs to the move_page action" do
|
26
|
+
route_for(:controller => "admin/pages", :action => "move_page", :id => "1").should == "/admin/pages/1/move_page"
|
27
|
+
params_from(:post, "/admin/pages/1/move_page").should == {:controller => "admin/pages", :action => "move_page", :id => "1"}
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -115,10 +115,10 @@ describe Admin::PagesController do
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
-
describe "POST to /admin/pages/:id/
|
118
|
+
describe "POST to /admin/pages/:id/move_page" do
|
119
119
|
describe "when moving to a valid parent" do
|
120
120
|
before :each do
|
121
|
-
post :
|
121
|
+
post :move_page, :id => page_id(:first), :parent_id => page_id(:another)
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should load the page" do
|
@@ -144,7 +144,7 @@ describe Admin::PagesController do
|
|
144
144
|
|
145
145
|
describe "when moving to an invalid parent" do
|
146
146
|
before :each do
|
147
|
-
post :
|
147
|
+
post :move_page, :id => page_id(:parent), :parent_id => page_id(:child)
|
148
148
|
end
|
149
149
|
|
150
150
|
it "should load the page" do
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
|
3
3
|
describe CopyMove do
|
4
|
-
dataset :pages
|
5
|
-
|
4
|
+
dataset :pages, :users
|
5
|
+
|
6
6
|
describe "suggesting a new slug and title" do
|
7
7
|
it "should use the same slug and title when there is not a child page of the new parent that has the same slug or title" do
|
8
|
-
pages(:first).new_slug_and_title_under(pages(:parent)).should == {:slug => "first", :title => "First"}
|
8
|
+
pages(:first).new_slug_and_title_under(pages(:parent)).should == {:slug => "first", :title => "First", :breadcrumb => "First"}
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should use a different slug and title when there is a conflicting child page of the new parent" do
|
12
12
|
pages(:first).new_slug_and_title_under(pages(:home)).should_not == {:slug => "first", :title => "First"}
|
13
|
-
pages(:first).new_slug_and_title_under(pages(:home)).should == {:slug => "first-1", :title => "First
|
13
|
+
pages(:first).new_slug_and_title_under(pages(:home)).should == {:slug => "first-copy-1", :title => "First Copy 1", :breadcrumb => "First Copy 1"}
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -32,11 +32,14 @@ describe CopyMove do
|
|
32
32
|
describe "copying the page" do
|
33
33
|
before :each do
|
34
34
|
@page = pages(:first)
|
35
|
+
UserActionObserver.current_user = users(:existing)
|
36
|
+
@page.update_attribute(:created_by_id, user_id(:existing))
|
35
37
|
end
|
36
38
|
|
37
39
|
it "should duplicate the page" do
|
38
40
|
@new_page = @page.copy_to(pages(:another))
|
39
|
-
|
41
|
+
# adding :position to excluded attributes to temporarily accommodate reorder extension
|
42
|
+
@page.attributes.delete_if {|k,v| [:id, :parent_id, :position].include?(k.to_sym) }.each do |key,value|
|
40
43
|
@new_page[key].should == value
|
41
44
|
end
|
42
45
|
@page.parts.each do |part|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: radiant-copy_move-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 2.
|
10
|
+
version: 2.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Benny Degezelle
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-03-15 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -42,19 +42,23 @@ extensions: []
|
|
42
42
|
|
43
43
|
extra_rdoc_files:
|
44
44
|
- LICENSE
|
45
|
-
- README
|
45
|
+
- README.textile
|
46
46
|
- TODO
|
47
47
|
files:
|
48
48
|
- HELP.rdoc
|
49
49
|
- LICENSE
|
50
|
-
- README
|
50
|
+
- README.textile
|
51
51
|
- Rakefile
|
52
52
|
- TODO
|
53
53
|
- VERSION
|
54
54
|
- app/helpers/copy_move_helper.rb
|
55
|
-
- app/views/admin/pages/_copy_move_extra_td.haml
|
56
|
-
- app/views/admin/pages/_copy_move_extra_th.haml
|
57
|
-
- app/views/admin/pages/
|
55
|
+
- app/views/admin/pages/_copy_move_extra_td.html.haml
|
56
|
+
- app/views/admin/pages/_copy_move_extra_th.html.haml
|
57
|
+
- app/views/admin/pages/_copy_move_form.html.haml
|
58
|
+
- app/views/admin/pages/copy_children.html.haml
|
59
|
+
- app/views/admin/pages/copy_page.html.haml
|
60
|
+
- app/views/admin/pages/copy_tree.html.haml
|
61
|
+
- app/views/admin/pages/move_page.html.haml
|
58
62
|
- config/locales/de.yml
|
59
63
|
- config/locales/en.yml
|
60
64
|
- config/locales/nl.yml
|
@@ -70,7 +74,6 @@ files:
|
|
70
74
|
- public/images/admin/page_white_copy.png
|
71
75
|
- public/images/admin/page_white_go.png
|
72
76
|
- public/images/admin/page_white_stack.png
|
73
|
-
- public/stylesheets/admin/copy_move.css
|
74
77
|
- radiant-copy_move-extension.gemspec
|
75
78
|
- spec/controllers/copy_move_controller_spec.rb
|
76
79
|
- spec/models/copy_move_spec.rb
|
@@ -81,8 +84,8 @@ homepage: http://github.com/jomz/radiant-comments-extension
|
|
81
84
|
licenses: []
|
82
85
|
|
83
86
|
post_install_message:
|
84
|
-
rdoc_options:
|
85
|
-
|
87
|
+
rdoc_options: []
|
88
|
+
|
86
89
|
require_paths:
|
87
90
|
- lib
|
88
91
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/README
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
= CopyMove
|
2
|
-
|
3
|
-
Created by: Andrea Franz - http://gravityblast.com
|
4
|
-
Version: 2.1.0
|
5
|
-
Contact: andrea AT gravityblast DOT com
|
6
|
-
|
7
|
-
This extension adds a new action ('CopyMove') in the Radiant's administration interface near the 'Add child' button. With this extension you can copy or move a page (and all of its children).
|
8
|
-
|
9
|
-
== Requirements
|
10
|
-
|
11
|
-
You need the shards extension for this to work for Radiant versions 0.6.6 and under. Versions 0.6.7 and greater have Shards built in.
|
12
|
-
|
13
|
-
See http://groups.google.com/group/radiantcms-dev/browse_frm/thread/d07f7fffd84b3ce0/5efa6fd6c2e1668e?lnk=gst&q=shards#5efa6fd6c2e1668e
|
14
|
-
|
15
|
-
== Installation
|
16
|
-
|
17
|
-
1. Get the latest version of CopyMove extension code:
|
18
|
-
|
19
|
-
cd vendor/extensions
|
20
|
-
|
21
|
-
git clone git://github.com/pilu/radiant-copy-move.git copy_move
|
22
|
-
|
23
|
-
1.a FOR RADIANT VERSION < 0.6.7
|
24
|
-
|
25
|
-
Open the environment.rb and set shards as first extension to be loaded:
|
26
|
-
config.extensions = [ :shards, :textile_filter, :markdown_filter, :all ]
|
27
|
-
|
28
|
-
1.b FOR RADIANT VERSION >= 0.6.7
|
29
|
-
|
30
|
-
Shards is already installed and loaded.
|
31
|
-
|
32
|
-
2. From your Rails app root type this command:
|
33
|
-
|
34
|
-
rake RAILS_ENV=production radiant:extensions:copy_move:install
|
35
|
-
|
36
|
-
Which will copy some needed files to the public directory of your app.
|
37
|
-
|
38
|
-
== Contributors
|
39
|
-
|
40
|
-
Benny Degezelle
|
41
|
-
Mario T. Lanza
|
42
|
-
Daniel Collis-Puro
|
43
|
-
Sean Cribbs
|
44
|
-
|
45
|
-
== Credits
|
46
|
-
|
47
|
-
This extension contains icons from the FamFamFam Silk icon set. See http://famfamfam.com/
|
@@ -1,13 +0,0 @@
|
|
1
|
-
- unless simple
|
2
|
-
%td.copy-move
|
3
|
-
- if page.respond_to?('children')
|
4
|
-
= link_to_function image('copy-move', :alt => 'CopyMove', :style => "margin: 6px 0 -6px 0"), "$$('ul.popup-menu').each(function(ul){ul.hide()});$(this).next('ul').toggle();Event.stop(event);", :class => "action"
|
5
|
-
%ul.popup-menu{:style => "display:none"}
|
6
|
-
- if page.children.any?
|
7
|
-
%li= link_to t('copy_move.copy_page_only'), copy_page_admin_page_url(page), :style =>"background-image: url(/images/admin/page_white.png)"
|
8
|
-
%li= link_to t('copy_move.copy_page_and_direct_children'), copy_children_admin_page_url(page), :style =>"background-image: url(/images/admin/page_white_copy.png)"
|
9
|
-
%li= link_to t('copy_move.copy_page_and_all_children'), copy_tree_admin_page_url(page), :style =>"background-image: url(/images/admin/page_white_stack.png)"
|
10
|
-
%li= link_to t('copy_move.move_page_and_children'), move_admin_page_url(page), :style =>"background-image: url(/images/admin/page_white_go.png)"
|
11
|
-
- else
|
12
|
-
%li= link_to t('copy_move.copy_page_only'), copy_page_admin_page_url(page), :style =>"background-image: url(/images/admin/page_white.png)"
|
13
|
-
%li= link_to t('copy_move.move_page'), move_admin_page_url(page), :style =>"background-image: url(/images/admin/page_white_go.png)"
|
@@ -1,27 +0,0 @@
|
|
1
|
-
- content_for :popups do
|
2
|
-
#copy-move.popup{:style => "display:none"}
|
3
|
-
- form_tag '#', :method => :post do
|
4
|
-
%h3 Copy or move page
|
5
|
-
%p
|
6
|
-
%label{:for => 'parent_id'} New parent:
|
7
|
-
= page_parent_select_tag
|
8
|
-
%p
|
9
|
-
%label{:for => 'status_id'} New status:
|
10
|
-
= select_tag "status_id", options_for_select(Status.find_all.map{ |s| [s.name, s.id] }.unshift(['Use the same status', nil]))
|
11
|
-
%p.buttons
|
12
|
-
= submit_tag "OK"
|
13
|
-
or
|
14
|
-
= link_to_function "Cancel", "$(this).up('.popup').hide();"
|
15
|
-
- content_for :page_scripts do
|
16
|
-
:plain
|
17
|
-
document.observe('dom:loaded', function(){
|
18
|
-
$(document.body).observe('click', function(){$$('ul.popup-menu').invoke('hide');});
|
19
|
-
$$('td.copy-move ul.popup-menu a').each(function(element){
|
20
|
-
element.observe('click', function(evt){
|
21
|
-
evt.stop();
|
22
|
-
element.up('ul').hide();
|
23
|
-
$('copy-move').centerInViewport();
|
24
|
-
$('copy-move').show().down('form').setAttribute('action', element.href);
|
25
|
-
});
|
26
|
-
});
|
27
|
-
});
|
@@ -1,30 +0,0 @@
|
|
1
|
-
#content table.index .copy-move {
|
2
|
-
padding-left:0pt;
|
3
|
-
width:100px;
|
4
|
-
}
|
5
|
-
|
6
|
-
td.copy-move {
|
7
|
-
position: relative; }
|
8
|
-
td.copy-move ul.popup-menu {
|
9
|
-
position: absolute;
|
10
|
-
z-index: 1000;
|
11
|
-
margin-top: 0.5em;
|
12
|
-
margin-left: -1.5em;
|
13
|
-
background: white;
|
14
|
-
border-width: 1px;
|
15
|
-
border-color: #bbb;
|
16
|
-
border-style: solid;
|
17
|
-
border-bottom: none;
|
18
|
-
padding: 0; }
|
19
|
-
td.copy-move ul.popup-menu li {
|
20
|
-
list-style: none; }
|
21
|
-
td.copy-move ul.popup-menu li a {
|
22
|
-
display: block;
|
23
|
-
padding: 0.5em;
|
24
|
-
padding-left: 24px;
|
25
|
-
background-position: 4px center;
|
26
|
-
background-repeat: no-repeat;
|
27
|
-
border-bottom: 1px solid #bbb;
|
28
|
-
color: black; }
|
29
|
-
td.copy-move ul.popup-menu li a:hover {
|
30
|
-
background-color: rgb(255, 255, 179); }
|