Changeset 1174
- Timestamp:
- 07/24/08 06:21:33
- Files:
-
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup.plonetabs.egg-info/PKG-INFO (modified) (1 diff)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup.plonetabs.egg-info/SOURCES.txt (modified) (2 diffs)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml (modified) (1 diff)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py (modified) (16 diffs)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css (modified) (3 diffs)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss (modified) (2 diffs)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt (modified) (3 diffs)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt (modified) (1 diff)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt (modified) (5 diffs)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs_header_macro.pt (added)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/sections.pt (modified) (1 diff)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/configure.zcml (modified) (1 diff)
- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/plugin.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup.plonetabs.egg-info/PKG-INFO
r1081 r1174 1 1 Metadata-Version: 1.0 2 2 Name: quintagroup.plonetabs 3 Version: 0.5dev 3 Version: 0.5dev-r1095 4 4 Summary: Quintagroup Plone Tabs 5 5 Home-page: http://projects.quintagroup.com/products/wiki/qPloneTabs qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup.plonetabs.egg-info/SOURCES.txt
r1081 r1174 2 2 setup.cfg 3 3 setup.py 4 docs/HISTORY.txt 5 docs/INSTALL.txt 6 docs/LICENSE.GPL 7 docs/LICENSE.txt 4 8 quintagroup/__init__.py 5 9 quintagroup.plonetabs.egg-info/PKG-INFO … … 9 13 quintagroup.plonetabs.egg-info/namespace_packages.txt 10 14 quintagroup.plonetabs.egg-info/not-zip-safe 11 quintagroup.plonetabs.egg-info/paster_plugins.txt12 15 quintagroup.plonetabs.egg-info/requires.txt 13 16 quintagroup.plonetabs.egg-info/top_level.txt 14 17 quintagroup/plonetabs/__init__.py 18 quintagroup/plonetabs/config.py 19 quintagroup/plonetabs/configure.zcml 20 quintagroup/plonetabs/profiles.zcml 15 21 quintagroup/plonetabs/tests.py 22 quintagroup/plonetabs/version.txt 23 quintagroup/plonetabs/browser/__init__.py 24 quintagroup/plonetabs/browser/configure.zcml 25 quintagroup/plonetabs/browser/interfaces.py 26 quintagroup/plonetabs/browser/kssactions.zcml 27 quintagroup/plonetabs/browser/manage.zcml 28 quintagroup/plonetabs/browser/plonetabs.py 29 quintagroup/plonetabs/browser/resources.zcml 30 quintagroup/plonetabs/browser/images/busy_icon.gif 31 quintagroup/plonetabs/browser/images/drag.gif 32 quintagroup/plonetabs/browser/images/plonetabs.gif 33 quintagroup/plonetabs/browser/images/trash.gif 34 quintagroup/plonetabs/browser/images/treeCollapsed.gif 35 quintagroup/plonetabs/browser/images/treeExpanded.gif 36 quintagroup/plonetabs/browser/resources/plonetabs.css 37 quintagroup/plonetabs/browser/resources/plonetabs.kss 38 quintagroup/plonetabs/browser/templates/actionslist.pt 39 quintagroup/plonetabs/browser/templates/autogenerated.pt 40 quintagroup/plonetabs/browser/templates/plonetabs.pt 41 quintagroup/plonetabs/browser/templates/sections.pt 42 quintagroup/plonetabs/plugins/__init__.py 43 quintagroup/plonetabs/plugins/configure.zcml 44 quintagroup/plonetabs/plugins/plugin.js 45 quintagroup/plonetabs/profiles/default/actionicons.xml 46 quintagroup/plonetabs/profiles/default/controlpanel.xml 47 quintagroup/plonetabs/profiles/default/cssregistry.xml 48 quintagroup/plonetabs/profiles/default/kssregistry.xml 49 quintagroup/plonetabs/profiles/default/propertiestool.xml qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml
r1092 r1174 16 16 allowed_interface = ".interfaces.IPloneTabsControlPanel" 17 17 /> 18 19 <browser:page 20 name="plonetabs-header-macro" 21 for="*" 22 template="templates/plonetabs_header_macro.pt" 23 permission="zope.Public" 24 /> 18 25 19 26 </configure> qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py
r1094 r1174 1 1 import copy, sys 2 3 2 from Acquisition import aq_inner 3 from OFS.CopySupport import CopyError 4 4 5 5 from zope.interface import implements … … 8 8 from zope.schema.interfaces import IVocabularyFactory 9 9 from zope.exceptions import UserError 10 11 from OFS.CopySupport import CopyError 10 from zope.app.container.interfaces import INameChooser 12 11 13 12 from Products.CMFCore.utils import getToolByName … … 15 14 from Products.CMFCore.ActionInformation import Action, ActionCategory 16 15 from Products.CMFCore.Expression import Expression 17 from Products.CMFEditions.setuphandlers import DEFAULT_POLICIES18 16 from Products.CMFPlone import PloneMessageFactory as _ 19 from Products.CMFPlone import PloneMessageFactory as pmf20 17 from Products.CMFPlone import utils 21 18 from Products.CMFPlone.browser.navigation import get_view_url … … 42 39 actionslist_template = ViewPageTemplateFile("templates/actionslist.pt") 43 40 autogenerated_template = ViewPageTemplateFile("templates/autogenerated.pt") 41 42 # custom templates used to update page sections 44 43 sections_template = ViewPageTemplateFile("templates/sections.pt") 45 44 … … 55 54 56 55 # action handler def handler(self, form) 57 if action == "add_action":58 if submitted:56 if submitted: 57 if form.has_key('add.add'): 59 58 postback = self.manage_addAction(form, errors) 60 elif action == "edit_action": 61 if submitted: 59 elif form.has_key("edit.save"): 62 60 postback = self.manage_editAction(form, errors) 63 elif action == "delete_action": 64 postback = self.manage_deleteAction(self.request, errors) 65 #elif action == "visible_action": 66 #pass 67 elif action == "moveup_action": 68 postback = self.manage_moveUpAction(self.request, errors) 69 elif action == "movedown_action": 70 postback = self.manage_moveDownAction(self.request, errors) 71 elif action == "set_autogeneration": 72 if submitted: 61 elif form.has_key("edit.delete"): 62 postback = self.manage_deleteAction(form, errors) 63 elif form.has_key("edit.moveup"): 64 postback = self.manage_moveUpAction(form, errors) 65 elif form.has_key("edit.movedown"): 66 postback = self.manage_moveDownAction(form, errors) 67 elif form.has_key("autogenerated.save"): 73 68 postback = self.manage_setAutogeneration(form, errors) 74 else:75 postback = True69 else: 70 postback = True 76 71 77 72 if postback: … … 119 114 return False 120 115 121 def manage_addAction(self, form, err ors):116 def manage_addAction(self, form, errs): 122 117 """ Add a new action to given category, if category doesn't exist, create it """ 123 124 # extract data from request's form 125 id = form.get("id") 126 category = form.get("category") 118 cat_name = form['category'] 127 119 128 120 # before checking for existence category we will validate all input data 129 121 # and issue errors if needed 130 131 # create and validate action 132 if not id: 133 errors["id"] = _(u"Id field is required") 134 if not form.get("title"): 135 errors["title"] = _(u"Title field is required") 136 137 action = Action(id) 138 for prop in ACTION_ATTRS: 139 if prop != "id": 140 try: 141 if prop == "visible": 142 value = int(form.get(prop, '0')) 143 else: 144 value = form.get(prop) 145 146 action._setPropValue(prop, value) 147 except Exception, e: 148 errors[prop] = "%s" % str(e) 122 errors = self.validateActionFields(form) 149 123 150 124 # if not errors find (or create) category and set action to it 151 125 if not errors: 152 portal_actions = getToolByName(self.context, "portal_actions") 153 cat_container = None 154 155 if category not in map(lambda x: x.id, filter(lambda x: IActionCategory.providedBy(x), portal_actions.objectValues())): 156 try: 157 portal_actions._setObject(category, ActionCategory(category)) 158 except Exception, e: 159 errors["select_category"] = "%s" % str(e) 160 else: 161 cat_container = portal_actions[category] 162 else: 163 cat_container = portal_actions[category] 164 165 if cat_container is not None: 166 try: 167 cat_container._setObject(id, action) 168 except Exception, e: 169 errors["id"] = "%s" % str(e) 170 171 if not errors: 172 IStatusMessage(self.request).addStatusMessage(_(u"'%s' action successfully added." % id), type="info") 173 self.redirect(search="category=%s" % category) 126 action = self.addAction(cat_name, form) 127 IStatusMessage(self.request).addStatusMessage(_(u"'%s' action successfully added." % action.id), type="info") 128 self.redirect(search="category=%s" % cat_name) 174 129 return False 175 130 else: 131 errs.update(errors) 176 132 IStatusMessage(self.request).addStatusMessage(_(u"Please correct the indicated errors."), type="error") 177 133 return True 178 134 179 def manage_editAction(self, form, err ors):180 """ Add a new action to given category, if category doesn't exist, create it """135 def manage_editAction(self, form, errs): 136 """ Process after edit form post """ 181 137 portal_actions = getToolByName(self.context, "portal_actions") 182 138 … … 251 207 return True 252 208 253 def manage_deleteAction(self, request, errors):209 def manage_deleteAction(self, form, errors): 254 210 """ Delete action with given id/category """ 255 211 portal_actions = getToolByName(self.context, "portal_actions") 256 212 257 id = request.get("id", "")258 category = request.get("category", "")213 id = form.get("orig_id", "") 214 category = form.get("category", "") 259 215 260 216 if category not in portal_actions.objectIds(): … … 267 223 cat_container.manage_delObjects(ids=[id,]) 268 224 IStatusMessage(self.request).addStatusMessage(_(u"'%s' action in '%s' category successfully deleted" % (id, category)), type="info") 269 270 self.redirect(search="category=%s" % category) 271 return False 272 273 def manage_moveUpAction(self, request, errors): 225 226 # redirect to form after successfull deletion 227 self.redirect(search="category=%s" % category) 228 return False 229 230 # return form with errors 231 return True 232 233 234 def manage_moveUpAction(self, form, errors): 274 235 """ Move up given action by one position """ 275 236 portal_actions = getToolByName(self.context, "portal_actions") 276 277 id = request.get("id", "")278 category = request.get("category", "")237 238 id = form.get("orig_id", "") 239 category = form.get("category", "") 279 240 280 241 if category not in portal_actions.objectIds(): … … 287 248 cat_container.moveObjectsUp([id,], 1) 288 249 IStatusMessage(self.request).addStatusMessage(_(u"'%s' action in '%s' category moved up" % (id, category)), type="info") 289 290 self.redirect(search="category=%s" % category) 291 return False 292 293 def manage_moveDownAction(self, request, errors): 250 251 # redirect to form after successfull deletion 252 self.redirect(search="category=%s" % category) 253 return False 254 255 # return form with errors 256 return True 257 258 def manage_moveDownAction(self, form, errors): 294 259 """ Move up given action by one position """ 295 260 portal_actions = getToolByName(self.context, "portal_actions") 296 297 id = request.get("id", "")298 category = request.get("category", "")261 262 id = form.get("orig_id", "") 263 category = form.get("category", "") 299 264 300 265 if category not in portal_actions.objectIds(): … … 307 272 cat_container.moveObjectsDown([id,], 1) 308 273 IStatusMessage(self.request).addStatusMessage(_(u"'%s' action in '%s' category moved down" % (id, category)), type="info") 309 310 self.redirect(search="category=%s" % category) 311 return False 274 275 # redirect to form after successfull deletion 276 self.redirect(search="category=%s" % category) 277 return False 278 279 # return form with errors 280 return True 312 281 313 282 def redirect(self, url="", search="", hash=""): … … 478 447 ########################## 479 448 480 def updateGlobalSections(self, ksscore):481 """ Method for updating global-sections on client """482 ksscore.replaceHTML(483 ksscore.getHtmlIdSelector("portal-globalnav"),484 self.sections_template(),485 withKssSetup="False")486 487 488 # XXX TODO489 #def updateSection(self, ksscore, section):490 #""" Method for updating global-sections on client """491 492 #replace_id = section493 #macro = SECTION_MAPPING.get(section, None)494 495 #if macro is not None:496 #ksscore.replaceHTML(497 #ksscore.getHtmlIdSelector(replace_id),498 #self.macroContent(macro),499 ##self.sections_template(),500 #withKssSetup="False")501 502 449 def validateAction(self, id, category, prefix="tabslist_"): 503 450 """ If action with given id and category doesn't exist - raise kss exception """ … … 533 480 534 481 # update global-sections viewlet 535 self.update GlobalSections(ksscore)482 self.updatePortalTabs() 536 483 537 484 @kssaction … … 554 501 ksscore.addClass(ksscore.getHtmlIdSelector(id), value="invisible") 555 502 556 # update global-sections viewlet 557 if category == "portal_tabs": 558 self.updateGlobalSections(ksscore) 503 self.updatePage(category) 559 504 560 505 @kssaction … … 583 528 584 529 # update global-sections viewlet 585 self.update GlobalSections(ksscore)530 self.updatePortalTabs() 586 531 587 532 @kssaction … … 604 549 # XXX TODO: fade effect during removing, for this kukit js action/command plugin needed 605 550 606 # update global-sections viewlet 607 if category == "portal_tabs": 608 self.updateGlobalSections(ksscore) 551 self.updatePage(category) 552 553 @kssaction 554 def oldAddAction(self, id, name, action='', category='portal_tabs', condition='', visible=False): 555 pass 609 556 610 557 @kssaction … … 646 593 return action_info 647 594 648 649 650 651 652 653 654 655 656 657 595 596 597 if not id: 598 errors["id"] = _(u"Id field is required") 599 if not form.get("title"): 600 errors["title"] = _(u"Title field is required") 601 602 action = Action(id) 603 for prop in ACTION_ATTRS: 604 if prop != "id": 605 try: 606 if prop == "visible": 607 value = int(form.get(prop, '0')) 608 else: 609 value = form.get(prop) 610 611 action._setPropValue(prop, value) 612 except Exception, e: 613 errors[prop] = "%s" % str(e) 614 615 def validateActionFields(self, data): 616 """ Check action fields on validity """ 617 errors = {} 618 619 # get or create (if necessary) actions category 620 cat_name = data['category'] 621 category = self.getOrCreateCategory(cat_name) 622 623 # validate action id 624 chooser = INameChooser(category) 625 try: 626 chooser.checkName(data['id'], self.context) 627 except Exception, e: 628 errors['id'] = "%s" % str(e) 629 630 # validate action name 631 if not data['title'].strip(): 632 errors['title'] = 'Empty or invalid id specified' 633 634 # validate condition expression 635 if data['available_expr']: 636 try: 637 Expression(data['available_expr']) 638 except Exception, e: 639 errors["available_expr"] = "%s" % str(e) 640 641 # validate action expression 642 if data['url_expr']: 643 try: 644 Expression(data['url_expr']) 645 except Exception, e: 646 errors["url_expr"] = "%s" % str(e) 647 648 return errors 649 650 def getOrCreateCategory(self, name): 651 portal_actions = getToolByName(self.context, 'portal_actions') 652 if name not in map(lambda x: x.id, filter(lambda x: IActionCategory.providedBy(x), portal_actions.objectValues())): 653 portal_actions._setObject(name, ActionCategory(name)) 654 category = portal_actions[name] 655 else: 656 category = portal_actions[name] 657 return category 658 659 def addAction(self, cat_name, data): 660 """ Create and add new action to category with given name """ 661 662 # get or create category if it's necessary 663 id = data.pop('id') 664 category = self.getOrCreateCategory(cat_name) 665 666 # add action 667 action = Action(id, **data) 668 category._setObject(id, action) 669 return action 670 671 # KSS Methods that are used to update different parts of the page 672 # according to category 673 674 def updatePage(self, category): 675 """ Seek for according method in class and calls it if found 676 Example of making up method's name: 677 portal_tabs => updatePortalTabs """ 678 method_name = 'update%sPageSection' % ''.join(map(lambda x: x.capitalize(), category.split('_'))) 679 if hasattr(self, method_name): 680 getattr(self, method_name)() 681 682 def updatePortalTabsPageSection(self): 683 """ Method for updating global-sections on client """ 684 ksscore = self.getCommandSet("core") 685 ksscore.replaceHTML( 686 ksscore.getHtmlIdSelector("portal-globalnav"), 687 self.sections_template(), 688 withKssSetup="False") 689 690 def updateSiteActionsPageSection(self): 691 """ Method for updating site action on client """ 692 ksszope = self.getCommandSet("zope") 693 ksszope.refreshViewlet( 694 self.getCommandSet("core").getHtmlIdSelector("portal-siteactions"), 695 "plone.portalheader", 696 "plone.site_actions") 697 698 def updateUserPageSection(self): 699 """ Method for updating site action on client """ 700 ksszope = self.getCommandSet("zope") 701 ksszope.refreshViewlet( 702 self.getCommandSet("core").getHtmlIdSelector("portal-personaltools-wrapper"), 703 "plone.portaltop", 704 "plone.personal_bar") 705 706 707 708 709 710 711 712 713 714 715 qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css
r1095 r1174 60 60 61 61 #app .drag-handle, 62 .kssTabsActive #app.delete,62 #app .delete, 63 63 .kssTabsActive #app .visibility, 64 64 /* .kssTabsActive #app .editform, */ … … 73 73 .kssTabsActive #app .add-controls, 74 74 .kssTabsActive #app .change-button, 75 .kssTabsActive #app .up-arrow,76 .kssTabsActive #app .down-arrow,77 75 #app .editcancel { 78 76 display: none; … … 80 78 81 79 #app.working #busy, 82 #app.viewing ul.csshover li:hover .delete,83 #app.viewing ul.csshover li.onHover .delete,80 .kssTabsActive #app.viewing ul.csshover li:hover .delete, 81 .kssTabsActive #app.viewing ul.csshover li.onHover .delete, 84 82 #app.viewing ul.csshover li:hover .visibility, 85 83 #app.viewing ul.csshover li.onHover .visibility, qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss
r1092 r1174 16 16 } 17 17 18 # actions_category:load {18 #select_category:load { 19 19 action-client: setStateVar; 20 20 setStateVar-varname: plonetabs-category; … … 24 24 #select_category:change { 25 25 action-client: plonetabs-redirectTo; 26 plonetabs-redirectTo-search: currentFormVar(); 26 plonetabs-redirectTo-searchparams: 'category'; 27 plonetabs-redirectTo-searchvalues: currentFormVar(); 27 28 } 28 29 qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt
r1095 r1174 17 17 <a class="delete" href="#" 18 18 tal:attributes="href string:${context/portal_url}/@@plonetabs-controlpanel?action=delete_action&category=${category}&id=${id}">Delete</a> 19 <a href="#" title="Move up" class="up-arrow"20 tal:condition="not:repeat/tab/start"21 tal:attributes="href string:${context/portal_url}/@@plonetabs-controlpanel?action=moveup_action&category=${category}&id=${id}">22 ↑23 </a>24 <a href="#" title="Move down" class="down-arrow"25 tal:condition="not:repeat/tab/end"26 tal:attributes="href string:${context/portal_url}/@@plonetabs-controlpanel?action=movedown_action&category=${category}&id=${id}">27 ↓28 </a>29 19 30 20 <span class="url-helper" tal:content="tab/url_expr">Tab Action</span> … … 39 29 40 30 <input type="hidden" name="orig_id" value="orig_id" tal:attributes="value id" /> 41 <input type="hidden" name="action" value="edit_action" />42 31 <input type="hidden" name="category" value="current_category" tal:attributes="value category" /> 43 32 <input type="hidden" name="form.submitted:boolean" value="True" /> … … 107 96 108 97 <div> 109 <input type="submit" class="editsave" i18n:attributes="value" value="Save" /> 110 <input type="submit" class="editcancel" i18n:attributes="value" value="Cancel" /> 111 <input type="reset" class="editreset" i18n:attributes="value" value="Reset" /> 98 <input type="submit" class="editsave" i18n:attributes="value" name="edit.save" value="Save" /> 99 <input type="submit" class="editcancel" i18n:attributes="value" name="edit.cancel" value="Cancel" /> 100 <input type="reset" class="editreset" i18n:attributes="value" name="edit.reset" value="Reset" /> 101 <input type="submit" class="editdelete" i18n:attributes="value" name="edit.delete" value="Delete" /> 102 <input type="submit" class="editmoveup" i18n:attributes="value" name="edit.moveup" value="Move Up" 103 tal:condition="not:repeat/tab/start" /> 104 <input type="submit" class="editmovedown" i18n:attributes="value" name="edit.movedown" value="Move Down" 105 tal:condition="not:repeat/tab/end" /> 112 106 </div> 113 107 qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt
r1087 r1174 1 <metal:block use-macro="here/global_defines/macros/defines" /> 2 3 <tal:cache tal:define="lang language; 4 charset site_properties/default_charset|string:utf-8"> 5 <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders"> 6 Get the global cache headers located in global_cache_settings. 7 </metal:cache> 8 </tal:cache> 1 <metal:header_macro use-macro="context/@@plonetabs-header-macro/macros/header" /> 9 2 10 3 <tal:tabs tal:define="dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1996 05:00:00 GMT')" qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt
r1094 r1174 60 60 </tal:options> 61 61 </select> 62 <input class="change-button" type="submit" name=" selectcategory_button" value="Change" />62 <input class="change-button" type="submit" name="category.change" value="Change" /> 63 63 </div> 64 64 </form> 65 65 </div> 66 67 <input type="hidden" name="category" value="portal_tabs" id="actions_category"68 tal:attributes="value category" />69 66 70 67 <div class="reorder-controls" … … 88 85 action="@@plonetabs-controlpanel" 89 86 tal:attributes="action string:${portal_url}/${attrs/action}"> 90 <input type="hidden" name="action" value="add_action" />91 87 <input type="hidden" name="form.submitted:boolean" value="True" /> 92 88 <input type="hidden" name="category" value="category" tal:attributes="value category" /> … … 155 151 </dl> 156 152 <div class="add-controls"> 157 <input type="submit" id="buttonadd" i18n:attributes="value" value="Add" />158 <input type="submit" id="buttoncancel" i18n:attributes="value" value="Cancel" />153 <input type="submit" id="buttonadd" i18n:attributes="value" name="add.add" value="Add" /> 154 <input type="submit" id="buttoncancel" i18n:attributes="value" name="add.cancel" value="Cancel" /> 159 155 </div> 160 156 </form> … … 167 163 tal:attributes="action string:${portal_url}/${attrs/action}"> 168 164 169 <input type="hidden" name="action" value="set_autogeneration" />170 165 <input type="hidden" name="form.submitted:boolean" value="True" /> 171 166 … … 208 203 209 204 <div id="autogeneration_controls"> 210 <input class="submit-button" type="submit" name=" generated_roots_button" value="Save" />205 <input class="submit-button" type="submit" name="autogenerated.save" value="Save" /> 211 206 </div> 212 207 qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/sections.pt
r1085 r1174 1 <metal:block use-macro="here/global_defines/macros/defines" /> 2 3 <tal:cache tal:define="lang language; 4 charset site_properties/default_charset|string:utf-8"> 5 <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders"> 6 Get the global cache headers located in global_cache_settings. 7 </metal:cache> 8 </tal:cache> 1 <metal:header_macro use-macro="here/@@plonetabs-header-macro/macros/header" /> 9 2 10 3 <tal:tabs i18n:domain="plone"> qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/configure.zcml
r1082 r1174 14 14 jsfile="plugin.js" 15 15 params_mandatory="" 16 params_optional="protocol host pathname search hash"16 params_optional="protocol host pathname search searchparams searchvalues hash" 17 17 /> 18 18 19 <!--<kss:action20 name="plone -removeLockProtection"19 <kss:action 20 name="plonetabs-toggleCollapsible" 21 21 command_factory="selector" 22 22 jsfile="plugin.js" 23 params_mandatory="" 24 params_optional="collapsed expanded" 23 25 /> 24 25 <kss:action 26 name="plone-initLockingProtection" 27 command_factory="selector" 28 jsfile="plugin.js" 29 /> 30 31 <kss:action 32 name="plone-initKupu" 33 command_factory="selector" 34 jsfile="plugin.js" 35 /> 36 37 <kss:action 38 name="plone-followLink" 39 command_factory="selector" 40 jsfile="plugin.js" 41 /> 42 43 <kss:action 44 name="plone-submitCurrentForm" 45 command_factory="selector" 46 jsfile="plugin.js" 47 /> 48 49 <kss:action 50 name="plone-initFormTabs" 51 command_factory="selector" 52 jsfile="plugin.js" 53 /> 54 55 <kss:action 56 name="plone-formProtectionCheck" 57 command_factory="selector" 58 jsfile="plugin.js" 59 /> 60 61 <kss:eventtype 62 name="plone-formProtectionChecked" 63 jsfile="plugin.js" 64 /> 65 66 <kss:eventtype 67 name="plone-formProtectionFailed" 68 jsfile="plugin.js" 69 /> 70 71 <kss:action 72 name="plone-initFormProtection" 73 command_factory="selector" 74 jsfile="plugin.js" 75 /> 76 77 <kss:action 78 name="plone-initShiftDetection" 79 command_factory="global" 80 jsfile="plugin.js" 81 /> 82 83 <kss:action 84 name="plone-initCheckBoxSelection" 85 command_factory="global" 86 jsfile="plugin.js" 87 /> 88 89 <kss:action 90 name="plone-createCheckBoxSelection" 91 command_factory="selector" 92 jsfile="plugin.js" 93 /> 94 95 <kss:action 96 name="plone-initDragAndDrop" 97 command_factory="global" 98 jsfile="plugin.js" 99 />--> 100 26 101 27 </configure> qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/plugin.js
r1087 r1174 7 7 ;;; oper.componentName = "[plonetabs-redirectTo] action"; 8 8 var wl = window.location; 9 oper.evaluateParameters([], {"protocol" : wl.protocol, 10 "host" : wl.host, 11 "pathname" : wl.pathname, 12 "search" : wl.search, 13 "hash" : wl.hash}); 9 oper.evaluateParameters([], {"protocol" : wl.protocol, 10 "host" : wl.host, 11 "pathname" : wl.pathname, 12 "search" : wl.search, 13 "searchparams" : "", 14 "searchvalues" : "", 15 "hash" : wl.hash}); 14 16 15 17 // normalize parameters … … 17 19 var host = oper.parms.host; 18 20 var pathname = oper.parms.pathname; 19 var search = (oper.parms.search.substr(0, 1) == "?") ? "" : "?" + oper.parms.search; 21 if ((params = oper.parms.searchparams) && (values = oper.parms.searchvalues)) { 22 search = "?"; 23 params = params.split(","); 24 values = values.split(","); 25 for (var i = 0; i < params.length; i++) { 26 search += params[i] + '=' + values[i] + '&'; 27 } 28 search = (search.slice(search.length - 1) == '&') ? search.slice(0, search.length - 1) : search; 29 } else { 30 search = oper.parms.search; 31 search = (search && search.substr(0, 1) == "?") ? search : (search ? "?" + search : ""); 32 } 20 33 var hash = (oper.parms.hash.length > 1) ? ((oper.parms.hash.substr(0, 1) == "#" ? "" : "#") + oper.parms.hash) : ""; 21 34
