Author: tom_gross Date: Mon Sep 29 14:40:53 2008 New Revision: 10083 Added: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/kssview.py (contents, props changed) MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/referencebrowser/ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/referencebrowser/referencebrowser.kss MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/profiles/default/kssregistry.xml MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_kss.py (contents, props changed) Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/configure.zcml MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt Log: added kss-sorting support Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/configure.zcml ============================================================================== --- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/configure.zcml (original) +++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/configure.zcml Mon Sep 29 14:40:53 2008 @@ -3,6 +3,13 @@ xmlns:zope="http://namespaces.zope.org/zope" i18n_domain="atreferencebrowserwidget"> + <!-- resources --> + <resourceDirectory + name="referencebrowser" + directory="referencebrowser" + /> + + <!-- pages and views --> <page name="refbrowserhelper" permission="zope2.Public" @@ -32,4 +39,21 @@ provides="zope.formlib.namedtemplate.INamedTemplate" /> + <!-- KSS views --> + <page + for="*" + class=".kssview.KSSMoveReferencesView" + attribute="moveUp" + name="moveUp" + permission="zope2.View" + /> + + <page + for="*" + class=".kssview.KSSMoveReferencesView" + attribute="moveDown" + name="moveDown" + permission="zope2.View" + /> + </configure> Added: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/kssview.py ============================================================================== --- (empty file) +++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/kssview.py Mon Sep 29 14:40:53 2008 @@ -0,0 +1,48 @@ +from kss.core import KSSView + +class KSSMoveReferencesView(KSSView): + + idpat = 'ref-%s-%s' + kssattrpat = "kssattr-pos-%s kssattr-length-%s kssattr-field-%s" + + def _move(self, pos, newpos, length, field): + currid = self.idpat % (field, pos) + newid = self.idpat % (field, newpos) + + selector = 'li#' + currid + + core = self.getCommandSet('core') + if pos > newpos: + core.moveNodeBefore(selector, newid) + core.setAttribute('li#' + newid, 'id', currid) + core.setAttribute(selector, 'id', newid) + else: + core.moveNodeAfter(selector, newid) + core.setAttribute(selector, 'id', newid) + core.setAttribute('li#' + newid, 'id', currid) + + # fix kss-attributes of changed items + for htmlid, p in zip([currid, newid], [pos, newpos]): + kssattr = self.kssattrpat % (p, length, field) + + core.setAttribute('li#%s img.moveUp' % htmlid, + 'class', + 'moveUp %s' % kssattr) + core.setAttribute('li#%s img.moveDown' % htmlid, + 'class', + "moveDown %s" % kssattr) + + def moveUp(self, pos, length, field): + if pos: + pos = int(pos) + self._move(pos, pos-1, length, field) + + return self.render() + + def moveDown(self, pos, length, field): + pos = int(pos) + if pos < int(length)-1: + self._move(pos, pos+1, length, field) + + return self.render() + Added: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/referencebrowser/referencebrowser.kss ============================================================================== --- (empty file) +++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/referencebrowser/referencebrowser.kss Mon Sep 29 14:40:53 2008 @@ -0,0 +1,13 @@ +img.moveUp:click { + action-server: moveUp; + moveUp-pos: kssAttr(pos); + moveUp-length: kssAttr(length); + moveUp-field: kssAttr(field); +} + +img.moveDown:click { + action-server: moveDown; + moveDown-pos: kssAttr(pos); + moveDown-length: kssAttr(length); + moveDown-field: kssAttr(field); +} Added: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/profiles/default/kssregistry.xml ============================================================================== --- (empty file) +++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/profiles/default/kssregistry.xml Mon Sep 29 14:40:53 2008 @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<object name="portal_kss" meta_type="KSS Registry" autogroup="False"> + + <kineticstylesheet + cacheable="True" + compression="safe" + cookable="True" + enabled="on" + expression="" + id="++resource++referencebrowser/referencebrowser.kss" + /> + +</object> Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt ============================================================================== --- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt (original) +++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt Mon Sep 29 14:40:53 2008 @@ -149,7 +149,7 @@ <tal:block replace="python: show_path and '%s (%s)' % (title, obj_path.replace(portal_path, '')) or title" /> </label> -<!-- <img src="#" alt="up" + <img src="#" alt="up" tal:condition="multipleitems" tal:attributes="src string:${portal_url}/arrowUp.gif; class string:moveUp kssattr-pos-${repeat/set/index} kssattr-length-${repeat/set/length} kssattr-field-${fieldName}" @@ -158,7 +158,7 @@ tal:condition="multipleitems" tal:attributes="src string:${portal_url}/arrowDown.gif; class string:moveDown kssattr-pos-${repeat/set/index} kssattr-length-${repeat/set/length} kssattr-field-${fieldName}" - /> --> + /> </li> </ul> Added: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_kss.py ============================================================================== --- (empty file) +++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_kss.py Mon Sep 29 14:40:53 2008 @@ -0,0 +1,100 @@ +import unittest +from pprint import pprint +from kss.core.tests.base import KSSViewTestCaseMixin + +from plone.app.kss.tests.kss_and_plone_layer import KSSAndPloneLayer + +from Products.Archetypes.tests.utils import makeContent + +from archetypes.referencebrowserwidget.tests.base import FunctionalTestCase +from archetypes.referencebrowserwidget.browser import kssview + +class KSSTestCase(FunctionalTestCase, KSSViewTestCaseMixin): + """ Test KSS features """ + + layer = KSSAndPloneLayer + + def afterSetUp(self): + self.setDebugRequest() + + + def test_moveup(self): + view = kssview.KSSMoveReferencesView(self.portal, self.app.REQUEST) + assert view.moveUp(1, 2, 'foo') == [ + {'name': 'moveNodeBefore', + 'params': {'html_id': u'ref-foo-0'}, + 'selector': 'li#ref-foo-1', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'id', 'value': u'ref-foo-1'}, + 'selector': 'li#ref-foo-0', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'id', 'value': u'ref-foo-0'}, + 'selector': 'li#ref-foo-1', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveUp kssattr-pos-1 kssattr-length-2 kssattr-field-foo'}, + 'selector': 'li#ref-foo-1 img.moveUp', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveDown kssattr-pos-1 kssattr-length-2 kssattr-field-foo'}, + 'selector': 'li#ref-foo-1 img.moveDown', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveUp kssattr-pos-0 kssattr-length-2 kssattr-field-foo'}, + 'selector': 'li#ref-foo-0 img.moveUp', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveDown kssattr-pos-0 kssattr-length-2 kssattr-field-foo'}, + 'selector': 'li#ref-foo-0 img.moveDown', + 'selectorType': ''}] + + def test_movedown(self): + view = kssview.KSSMoveReferencesView(self.portal, self.app.REQUEST) + # pprint(view.moveDown(0, 2, 'bar')) + assert view.moveDown(0, 2, 'bar') == [ + {'name': 'moveNodeAfter', + 'params': {'html_id': u'ref-bar-1'}, + 'selector': 'li#ref-bar-0', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'id', 'value': u'ref-bar-1'}, + 'selector': 'li#ref-bar-0', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'id', 'value': u'ref-bar-0'}, + 'selector': 'li#ref-bar-1', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveUp kssattr-pos-0 kssattr-length-2 kssattr-field-bar'}, + 'selector': 'li#ref-bar-0 img.moveUp', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveDown kssattr-pos-0 kssattr-length-2 kssattr-field-bar'}, + 'selector': 'li#ref-bar-0 img.moveDown', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveUp kssattr-pos-1 kssattr-length-2 kssattr-field-bar'}, + 'selector': 'li#ref-bar-1 img.moveUp', + 'selectorType': ''}, + {'name': 'setAttribute', + 'params': {'name': u'class', + 'value': u'moveDown kssattr-pos-1 kssattr-length-2 kssattr-field-bar'}, + 'selector': 'li#ref-bar-1 img.moveDown', + 'selectorType': ''}] + +def test_suite(): + return unittest.TestSuite([ + unittest.makeSuite(KSSTestCase), + ]) + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') |