1.1 --- a/actions/SectionBreakout.py Sun Feb 20 21:15:05 2011 +0100
1.2 +++ b/actions/SectionBreakout.py Sun Feb 20 22:02:35 2011 +0100
1.3 @@ -13,7 +13,7 @@
1.4
1.5 from MoinMoin.action import ActionBase
1.6 from MoinMoin.PageEditor import PageEditor
1.7 -from MoinContentSupport import ActionSupport, getHeadingDetails, escape, escattr
1.8 +from MoinContentSupport import *
1.9 import re
1.10
1.11 # Action class and supporting functions.
1.12 @@ -108,6 +108,8 @@
1.13 # Acquire all heading details from the page.
1.14
1.15 page_body = page.get_raw_body()
1.16 + categories = getCategoryMembership(page_body)
1.17 +
1.18 regions = []
1.19 current_region_start = None
1.20
1.21 @@ -141,6 +143,7 @@
1.22
1.23 retained_regions = []
1.24 retained_region_start = 0
1.25 + new_page_names = {}
1.26
1.27 for heading, start, end in regions:
1.28
1.29 @@ -148,13 +151,29 @@
1.30
1.31 new_page_name = "%s/%s" % (page.page_name, heading)
1.32
1.33 + # Distinguish between pages which use the same heading.
1.34 +
1.35 + n = new_page_names.get(new_page_name, 0)
1.36 + if n:
1.37 + new_page_names[new_page_name] = n + 1
1.38 + new_page_name += " (%d)" % (n + 1)
1.39 + else:
1.40 + new_page_names[new_page_name] = n + 1
1.41 +
1.42 # Open the page for editing.
1.43
1.44 new_page = PageEditor(request, new_page_name)
1.45 + new_page_body = page_body[start:end]
1.46 + new_page_categories = getCategoryMembership(new_page_body)
1.47
1.48 - # Save the new version of the page.
1.49 + # Add categories if the parent page has any.
1.50
1.51 - new_page.saveText(page_body[start:end], 0)
1.52 + if new_page_categories != categories:
1.53 + new_page_body += getCategoryDeclaration(categories)
1.54 +
1.55 + # Save the new page.
1.56 +
1.57 + new_page.saveText(new_page_body, 0)
1.58
1.59 # Retain the preceding region for the current page.
1.60
1.61 @@ -176,7 +195,18 @@
1.62 # Edit the current page.
1.63
1.64 edited_page = PageEditor(request, page.page_name)
1.65 - edited_page.saveText("".join(retained_regions), 0)
1.66 + edited_page_body = "".join(retained_regions)
1.67 + edited_page_categories = getCategoryMembership(edited_page_body)
1.68 +
1.69 + # Add categories if the parent page should have any, but these were
1.70 + # broken out.
1.71 +
1.72 + if edited_page_categories != categories:
1.73 + edited_page_body += getCategoryDeclaration(categories)
1.74 +
1.75 + # Save the current page.
1.76 +
1.77 + edited_page.saveText(edited_page_body, 0)
1.78
1.79 # NOTE: Perhaps show a message upon failure.
1.80