[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - SkinsTool: Added the ability to do a diff comparison between items
Jens Vagelpohl
jens at dataflake.org
Tue Aug 26 10:50:09 EDT 2008
Log message for revision 90336:
- SkinsTool: Added the ability to do a diff comparison between items
found using the portal_skins "Find" ZMI tab.
(https://bugs.launchpad.net/zope-cmf/+bug/238489)
Changed:
U Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
U Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
A Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml
U Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml
-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2008-08-26 14:36:23 UTC (rev 90335)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2008-08-26 14:50:09 UTC (rev 90336)
@@ -4,8 +4,13 @@
2.2.0 (unreleased)
------------------
+- SkinsTool: Added the ability to do a diff comparison between items
+ found using the portal_skins "Find" ZMI tab.
+ (https://bugs.launchpad.net/zope-cmf/+bug/238489)
+
- fiveactionstool: fix typo in a method name that isn't even used in the CMF
or Plone.
+ (https://bugs.launchpad.net/zope-cmf/+bug/257259)
- TypeInformation and TypesTool: Added support for add view actions.
Type infos now have a new 'add_view_expr' property and implement IAction.
Modified: Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py 2008-08-26 14:36:23 UTC (rev 90335)
+++ Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py 2008-08-26 14:50:09 UTC (rev 90336)
@@ -41,6 +41,7 @@
from utils import _dtmldir
from utils import getToolByName
from utils import UniqueObject
+from difflib import unified_diff
def modifiedOptions():
# Remove the existing "Properties" option and add our own.
@@ -107,8 +108,10 @@
manage_findForm = DTMLFile('findForm', _dtmldir,
management_view='Find')
+ security.declareProtected(ManagePortal, 'manage_compareResults')
+ manage_compareResults = DTMLFile('compareResults', _dtmldir,
+ management_view='Compare')
-
security.declareProtected(ManagePortal, 'manage_skinLayers')
def manage_skinLayers(self, chosen=(), add_skin=0, del_skin=0,
skinname='', skinpath='', REQUEST=None):
@@ -370,4 +373,25 @@
if make_default:
self.default_skin = skinname
+ security.declareProtected(AccessContentsInformation, 'getDiff')
+ def getDiff(self, item_one_path, item_two_path, reverse=0):
+ """ Return a diff between one and two.
+ """
+ if not reverse:
+ item_one = self.unrestrictedTraverse(item_one_path)
+ item_two = self.unrestrictedTraverse(item_two_path)
+ else:
+ item_one = self.unrestrictedTraverse(item_two_path)
+ item_two = self.unrestrictedTraverse(item_one_path)
+
+ res = unified_diff( item_one.read().splitlines()
+ , item_two.read().splitlines()
+ , item_one_path
+ , item_two_path
+ , ''
+ , ''
+ , lineterm=""
+ )
+ return res
+
InitializeClass(SkinsTool)
Added: Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml (rev 0)
+++ Products.CMFCore/trunk/Products/CMFCore/dtml/compareResults.dtml 2008-08-26 14:50:09 UTC (rev 90336)
@@ -0,0 +1,52 @@
+<dtml-var manage_page_header>
+<dtml-var manage_tabs>
+
+<dtml-if btn_submit>
+ <br/>
+
+ <dtml-if expr="len(item_paths) != 2">
+
+ Please select two items to compare on the <i>Find</i> page.
+
+ <dtml-else>
+
+ <form action="manage_compareResults" method="POST">
+ <dtml-in item_paths>
+ <input name="item_paths:list" value="&dtml-sequence-item;" type="hidden"/>
+ </dtml-in>
+ <input name="reverse:int" value=<dtml-var expr="abs(REQUEST.get('reverse',0)-1)"> type="hidden"/>
+ <input type="submit" name="btn_submit" value="Reverse Diff">
+ </form>
+
+ <dtml-let lines="[line for line in getDiff(item_paths[0], item_paths[1], REQUEST.get('reverse', 0))]">
+
+ <dtml-if lines>
+ <dtml-in "lines">
+ <dtml-let line="_['sequence-item']">
+
+ <dtml-if "line.startswith('---')">
+ <pre style="color: green; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+ <dtml-elif "line.startswith('+++')">
+ <pre style="color: green; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+ <dtml-elif "line.startswith('@@')">
+ <pre style="color: #daa520; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+ <dtml-elif "line.startswith('-')">
+ <pre style="color: purple; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+ <dtml-elif "line.startswith('+')">
+ <pre style="color: #20b2aa; margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+ <dtml-else>
+ <pre style="margin: 0; padding: 0;"><dtml-var line html_quote></pre>
+ </dtml-if>
+
+ </dtml-let>
+ </dtml-in>
+ <dtml-else>
+ No changes
+ </dtml-if>
+ </dtml-let>
+
+ </dtml-if>
+</dtml-if>
+
+Back to <a href="manage_findForm">Find</a>
+<dtml-var manage_page_footer>
Modified: Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml 2008-08-26 14:36:23 UTC (rev 90335)
+++ Products.CMFCore/trunk/Products/CMFCore/dtml/findResult.dtml 2008-08-26 14:50:09 UTC (rev 90336)
@@ -72,6 +72,8 @@
</tr>
</dtml-if>
</table>
+
+<FORM ACTION="manage_compareResults" METHOD="GET">
<TABLE width="100%" CELLSPACING="0" CELLPADDING="2" border="0">
<dtml-in results size="batch_size" start="query_start" sort_expr="skey" reverse_expr="rkey">
<dtml-if sequence-odd>
@@ -79,7 +81,8 @@
<dtml-else>
<TR class="row-hilite">
</dtml-if>
- <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="16">
+ <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="40">
+ <input type="checkbox" value="&dtml.url_quote-sequence-key;" name="item_paths:list"/>
<A HREF="&dtml.url_quote-sequence-key;/manage_workspace">
<IMG SRC="&dtml-BASEPATH1;/&dtml-icon;"
ALT="[&dtml-meta_type;]" BORDER="0"></A>
@@ -100,7 +103,10 @@
</TR>
</dtml-in>
</TABLE>
+<INPUT TYPE="SUBMIT" NAME="btn_submit" VALUE="Compare">
+</FORM>
</dtml-with>
+
</dtml-if>
<a name="form">
More information about the Checkins
mailing list