Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml	(revision 48)
@@ -2,4 +2,6 @@
     xmlns="http://namespaces.zope.org/zope"
     xmlns:browser="http://namespaces.zope.org/browser">
+    
+    <include file="manage.zcml" />
     
     <include file="kssactions.zcml" />
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml	(revision 48)
@@ -35,3 +35,19 @@
         />
     
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="editAction"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-editAction"
+        permission="cmf.ManagePortal"
+        />
+    
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="editCancel"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-editCancel"
+        permission="cmf.ManagePortal"
+        />
+    
 </configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/manage.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/manage.zcml	(revision 48)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/manage.zcml	(revision 48)
@@ -0,0 +1,70 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+    
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="manage_setAutogeneration"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="manage-setAutogeneration"
+        permission="cmf.ManagePortal"
+        />
+    
+<!--    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="manage_toggleGeneratedTabs"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="manage-toggleGeneratedTabs"
+        permission="cmf.ManagePortal"
+        />
+    
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="manage_toggleNonFolderishTabs"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="manage-toggleNonFolderishTabs"
+        permission="cmf.ManagePortal"
+        />-->
+    
+    
+<!--    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="toggleActionsVisibility"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-toggleActionsVisibility"
+        permission="cmf.ManagePortal"
+        />-->
+    
+<!--    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="manage_toggleRootsVisibility"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="manage-toggleRootsVisibility"
+        permission="cmf.ManagePortal"
+        />-->
+    
+<!--    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="deleteAction"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-deleteAction"
+        permission="cmf.ManagePortal"
+        />
+    
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="editAction"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-editAction"
+        permission="cmf.ManagePortal"
+        />
+    
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="editCancel"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-editCancel"
+        permission="cmf.ManagePortal"
+        />-->
+    
+</configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py	(revision 48)
@@ -1,2 +1,4 @@
+import copy
+
 from Acquisition import aq_inner
 
@@ -32,4 +34,5 @@
     return [s.strip() for s in text.split("- ") if s]
 
+ACTION_ATTRS = ["id", "visible", "description", "url_expr", "title", "available_expr"]
 
 class PloneTabsControlPanel(PloneKSSView):
@@ -210,4 +213,20 @@
                 #withKssSetup="False")
     
+    def validateAction(self, id, category, prefix="tabslist_"):
+        """ If action with given id and category doesn't exist - raise kss exception """
+        portal_actions = getToolByName(self.context, "portal_actions")
+        
+        # remove prefix, added for making ids on configlet unique ("tabslist_")
+        act_id = id[len("tabslist_"):]
+        
+        if category not in portal_actions.objectIds():
+            raise KSSExplicitError, "Unexistent root portal actions category %s" % category
+        
+        cat_container = portal_actions[category]
+        if act_id not in map(lambda x: x.id, filter(lambda x: IAction.providedBy(x), cat_container.objectValues())):
+            raise KSSExplicitError, "%s action does not exist in %s category" % (act_id, category)
+        
+        return (cat_container, act_id)
+    
     @kssaction
     def toggleGeneratedTabs(self, field, checked='0'):
@@ -233,14 +252,5 @@
         """ Toggle visibility for portal actions """
         portal_actions = getToolByName(self.context, "portal_actions")
-        
-        if category not in portal_actions.objectIds():
-            raise KSSExplicitError, "Unexistent root portal actions category %s" % category
-        
-        # remove prefix, added for making ids on configlet unique ("tabslist_")
-        act_id = id[len("tabslist_"):]
-        
-        cat_container = portal_actions[category]
-        if act_id not in map(lambda x: x.id, filter(lambda x: IAction.providedBy(x), cat_container.objectValues())):
-            raise KSSExplicitError, "%s action does not exist in %s category" % (act_id, category)
+        cat_container, act_id = self.validateAction(id, category)
         
         if checked == '1':
@@ -292,14 +302,5 @@
         """ Delete portal action with given id & category """
         portal_actions = getToolByName(self.context, "portal_actions")
-        
-        if category not in portal_actions.objectIds():
-            raise KSSExplicitError, "Unexistent root portal actions category %s" % category
-        
-        # remove prefix, added for making ids on configlet unique ("tabslist_")
-        act_id = id[len("tabslist_"):]
-        
-        cat_container = portal_actions[category]
-        if act_id not in map(lambda x: x.id, filter(lambda x: IAction.providedBy(x), cat_container.objectValues())):
-            raise KSSExplicitError, "%s action does not exist in %s category" % (act_id, category)
+        cat_container, act_id = self.validateAction(id, category)
         
         cat_container.manage_delObjects(ids=[act_id,])
@@ -320,9 +321,102 @@
             self.updateGlobalSections(ksscore)
     
-
-
-
-
-
-
-
+    @kssaction
+    def editAction(self, id, category):
+        """ Show edit form for given action """
+        cat_container, act_id = self.validateAction(id, category)
+        
+        # collect data
+        action_info = self.copyAction(cat_container[act_id])
+        action_info["editing"] = True
+        
+        ksscore = self.getCommandSet("core")
+        content = self.actionslist_template(tabs=[action_info,])
+        replace_id = id
+        
+        ksscore.replaceHTML(ksscore.getHtmlIdSelector(replace_id), content)
+        
+        # focus name field
+        ksscore.focus(ksscore.getCssSelector("#%s input[name=name_%s]" % (id, act_id)))
+    
+    @kssaction
+    def editCancel(self, id, category):
+        """ Hide edit form for given action """
+        cat_container, act_id = self.validateAction(id, category)
+        
+        ksscore = self.getCommandSet("core")
+        content = self.actionslist_template(tabs=[cat_container[act_id],])
+        replace_id = id
+        
+        ksscore.replaceHTML(ksscore.getHtmlIdSelector(replace_id), content)
+    
+    
+    # Methods for processing configlet actions without javascript/ajax
+    
+    def manage_setAutogeneration(self, generated_tabs="0", nonfolderish_tabs="0"):
+        """ Process managing autogeneration settings """
+        
+        # set excludeFromNav property for root objects
+        portal = getMultiAdapter((aq_inner(self.context), self.request), name='plone_portal_state').portal()
+        form = self.request.form
+        
+        for item in self.getRootTabs():
+            obj = getattr(portal, item['id'], None)
+            if obj is not None:
+                checked = form.get(item['id'], None)
+                if checked == '1':
+                    obj.update(excludeFromNav=False)
+                else:
+                    obj.update(excludeFromNav=True)
+
+        # set disable_folder_sections property
+        changeProperties = getToolByName(self.context, "portal_properties").site_properties.manage_changeProperties
+        
+        if int(generated_tabs) == 1:
+            changeProperties(disable_folder_sections=False)
+        else:
+            changeProperties(disable_folder_sections=True)
+        
+        # set disable_nonfolderish_sections property
+        if int(nonfolderish_tabs) == 1:
+            changeProperties(disable_nonfolderish_sections=False)
+        else:
+            changeProperties(disable_nonfolderish_sections=True)
+        
+        self.redirect()
+
+    
+    def redirect(self, url="", search="", hash=""):
+        """ Redirect to @@plonetabs-controlpanel configlet """
+        
+        if url == "":
+            portal_url =  getMultiAdapter((self.context, self.request), name=u"plone_portal_state").portal_url()
+            url = "%s/%s" % (portal_url, "@@plonetabs-controlpanel")
+        
+        if search != "":
+            search = "?%s" % search
+        
+        if hash != "":
+            hash = "#%s" % hash
+        
+        self.request.response.redirect("%s%s%s" % (url, search, hash))
+    
+    
+    # Utility Methods
+    
+    def copyAction(self, action):
+        """ Copyt action to dictionary """
+        action_info = {}
+        for attr in ACTION_ATTRS:
+            action_info[attr] = getattr(action, attr)
+        return action_info
+    
+
+
+
+
+
+
+
+
+
+
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css	(revision 48)
@@ -47,6 +47,6 @@
 #app.viewing li.editing             .tab-title,
 #app                                .drag-handle,
-#app                                .delete,
-#app                                .visibility,
+#app.kssActive                      .delete,
+#app.kssActive                      .visibility,
 #app                                .editform,
 #app.sorting                        #addaction,
@@ -73,4 +73,13 @@
 
 /**********************************************************/
+/* Additional style for functionality withou javascript   */
+#app.kssActive #autogeneration_controls {
+    display: none;
+}
+
+
+
+
+/**********************************************************/
 
 #app.sorting #tabslist img.drag-handle {
@@ -291,16 +300,24 @@
 }
 
-dl.expandedBlock dt.headerAdvanced {
+#app dl.expandedBlock dt.headerAdvanced {
     padding: 0 6px 0 22px;
-    background: url(++resource++treeExpanded.gif) no-repeat 6px 50%;
-}
-
-dl.collapsedBlock dt.headerAdvanced {
+    background: transparent url(++resource++treeExpanded.gif) no-repeat 6px 50%;
+}
+
+#app dl.collapsedBlock dt.headerAdvanced {
     padding: 0 0 0 22px;
-    background: url(++resource++treeCollapsed.gif) no-repeat 6px 50%;
+    background: transparent url(++resource++treeCollapsed.gif) no-repeat 6px 50%;
  }
 
 #app dl.advanced { 
     clear: both;
+}
+
+#app dl.expandedBlock dd.contentAdvanced {
+    display: block;
+}
+
+#app dl.collapsedBlock dd.contentAdvanced {
+    display: none;
 }
 
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss	(revision 48)
@@ -23,5 +23,5 @@
 
  /*Hovering for IE especially */
-#app li:mouseover {
+/*#app li:mouseover {
     action-client: addClass;
     addClass-value: onHover;
@@ -31,5 +31,5 @@
     action-client: removeClass;
     removeClass-value: onHover;
-}
+}*/
 
 
@@ -48,5 +48,5 @@
 
 /* Visibility switching */
-#tabslist .visibility:click {
+#tabslist input.visibility:click {
     action-server: plonetabs-toggleActionsVisibility;
     plonetabs-toggleActionsVisibility-id: nodeAttr(id, true);
@@ -63,6 +63,5 @@
 /* Delete action link */
 #tabslist .delete:click {
-    evt-click-preventdefault: True;
-    evt-click-allowbubbling: True;
+    evt-click-preventdefault: true;
     action-server: plonetabs-deleteAction;
     plonetabs-deleteAction-id: nodeAttr(id, true);
@@ -70,3 +69,41 @@
 }
 
+/* Actions edit */
+#tabslist .tab-title:click {
+    action-server: plonetabs-editAction;
+    plonetabs-editAction-id: nodeAttr(id, true);
+    plonetabs-editAction-category: stateVar(plonetabs-category);
+}
 
+/*#tabslist .url-helper:click {
+    action-client: executeCommand;
+    executeCommand-name: addClass;
+    executeCommand-selector: #tabslist li;
+    executeCommand-selectorType: parentnode;
+    executeCommand-value: editing;
+}*/
+
+/* Edit cancel button */
+#tabslist .editcancel:click {
+    evt-click-preventdefault: true;
+    action-server: plonetabs-editCancel;
+    plonetabs-editCancel-id: nodeAttr(id, true);
+    plonetabs-editCancel-category: stateVar(plonetabs-category);
+}
+
+/* Edit save button */
+#tabslist .editsave:click {
+    evt-click-preventdefault: true;
+    action-server: plonetabs-editSave;
+    plonetabs-editSave-id: nodeAttr(id, true);
+    
+    plonetabs-editSave-category: stateVar(plonetabs-category);
+}
+
+/* Collapsible sections */
+.collapseAdvanced .headerAdvanced:click {
+    action-client: plonetabs-toggleCollapsible;
+}
+
+
+
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt	(revision 48)
@@ -2,40 +2,48 @@
                       dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT');
                       category python:options.get('category', None) or 'portal_tabs'"
-          tal:repeat="tab python:view.getPortalActions(category)">
+          tal:repeat="tab options/tabs|python:view.getPortalActions(category)">
 <li tal:define="id tab/id;
                 visible tab/visible;
-                index repeat/tab/index"
+                editing tab/editing|nothing;
+                klass python:test(visible, [], ['invisible']);
+                klass python:test(editing, klass + ['editing'], klass)"
     tal:attributes="id string:tabslist_${id};
                     title tab/description;
-                    class python:test(visible, '', 'invisible')">
+                    class python:' '.join(klass)">
+
   <img class="drag-handle" src="++resource++drag.gif" alt="" height="11" width="25" />
+
   <div class="bridge">
-    <input type="checkbox" class="visibility" value="1" name="visibility" title="visibility"
+    <input type="checkbox" class="visibility" value="1" name="visible" title="visibility"
            tal:attributes="checked python:test(visible, 'checked', None);
-                           name string:i${index}_${attrs/name}" />
+                           name string:${attrs/name}_${id}" />
   </div>
+
   <a class="delete" href="#">Delete</a>
   <span class="url-helper" tal:content="tab/url_expr">Tab Action</span>
   <span class="tab-title" tal:content="tab/title">Tab Name</span>
+
   <form class="editform"
         method="post"
         action="@@plonetabs-controlpanel"
+        name="edit_form"
         tal:attributes="action string:${context/portal_url}/${attrs/action};
-                        name string:f$index">
-      <input type="hidden" name="idx" tal:attributes="value index" />
+                        name string:${attrs/name}_${id}">
+
       <dl>
         <dt><label>Name</label></dt>
-        <dd><input type="text" value="" name="name"
+        <dd><input type="text" value="" name="title"
                    tal:attributes="value tab/title;
-                                   name string:i${index}_${attrs/name}"      /></dd>
+                                   name string:${attrs/name}_${id}" /></dd>
       </dl>
-      <dl class="collapseAdvanced expandedBlock">
+
+      <dl class="collapseAdvanced collapsedBlock">
         <dt class="headerAdvanced">Advanced</dt>
         <dd class="contentAdvanced">
           <dl>
             <dt><label>URL (Expression)</label></dt>
-            <dd><input type="text" value="" name="action"     size="30"
+            <dd><input type="text" value="" name="url_expr"     size="30"
                        tal:attributes="value tab/url_expr;
-                                       name string:i${index}_${attrs/name}" /></dd>
+                                       name string:${attrs/name}_${id}" /></dd>
           </dl>
           <dl>
@@ -43,5 +51,5 @@
             <dd><input type="text" value="" name="id"
                        tal:attributes="value tab/id;
-                                       name string:i${index}_${attrs/name}" /></dd>
+                                       name string:${attrs/name}_${id}" /></dd>
           </dl>
           <dl>
@@ -49,14 +57,17 @@
             <dd><input type="text" value="" name="condition"  size="30"
                        tal:attributes="value tab/available_expr;
-                                       name string:i${index}_${attrs/name}" /></dd>
+                                       name string:${attrs/name}_${id}" /></dd>
           </dl>
           <div class="visualClear"><!-- --></div>
         </dd>
       </dl>
+
       <div>
         <input type="submit" class="editsave"   i18n:attributes="value" value="Save"   />
         <input type="submit" class="editcancel" i18n:attributes="value" value="Cancel" />
       </div>
+
   </form>
+
 </li>
 </tal:tabs>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt	(revision 48)
@@ -11,14 +11,14 @@
           tal:repeat="tab view/getRootTabs">
 <li tal:define="id tab/id;
-                visible python:not tab['exclude_from_nav']"
+                visible not: tab/exclude_from_nav"
     tal:attributes="id string:roottabs_${id};
                     title tab/description|nothing;
                     class python:view.test(visible, '', 'invisible')">
   <div class="bridge">
-    <input type="checkbox" class="visibility" value="1" name="rootvis"  title="visibility"
-           tal:attributes="name string:i${repeat/tab/index}_${attrs/name};
+    <input type="checkbox" class="visibility" value="1" name="id"  title="visibility"
+           tal:attributes="name id;
                            checked python:view.test(visible, 'checked', None)" />
   </div>
-  <span class="url-helper" tal:content="python:tab['url']">Tab Action</span>
+  <span class="url-helper" tal:content="tab/url">Tab Action</span>
   <span class="tab-title"  tal:content="tab/name">Tab Name</span>
 </li>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt	(revision 47)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt	(revision 48)
@@ -67,5 +67,5 @@
   <form id="addaction"
         method="post"
-        action="@@plonetabs_controlpanel"
+        action="@@plonetabs-controlpanel"
         tal:attributes="action string:${portal_url}/${attrs/action}">
     <dl class="field-visible bridge">
@@ -123,40 +123,51 @@
   <tal:autogeneration condition="python:category == 'portal_tabs'">
 
-    <div class="field"
-         tal:define="generated_tabs request/generated_tabs|view/isGeneratedTabs;
-                     error errors/generated_tabs|nothing"
-         tal:attributes="class python:test(error, 'field error', 'field')">
-      <input type="checkbox"
-             id="generated_tabs"
-             name="generated_tabs"
-             value="1"
-             tal:attributes="checked python:test(generated_tabs, 'checked', None)" />
-      <label for="generated_tabs" i18n:translate="label_generated_tabs_enable">Automatically generate tabs</label>
-      <div class="formHelp" i18n:translate="help_generated_tabs">
-        By default, all folders created at the root level will have global section
-        navigation generated. You can turn this off if you prefer manually constructing
-        this part of the navigation.
+    <form name="generated_tabs_form"
+          action="@@manage-setAutogeneration"
+          method="post"
+          tal:attributes="action string:${portal_url}/${attrs/action}">
+
+      <div class="field"
+           tal:define="generated_tabs request/generated_tabs|view/isGeneratedTabs;
+                       error errors/generated_tabs|nothing"
+           tal:attributes="class python:test(error, 'field error', 'field')">
+        <input type="checkbox"
+               id="generated_tabs"
+               name="generated_tabs"
+               value="1"
+               tal:attributes="checked python:test(generated_tabs, 'checked', None)" />
+        <label for="generated_tabs" i18n:translate="label_generated_tabs_enable">Automatically generate tabs</label>
+        <div class="formHelp" i18n:translate="help_generated_tabs">
+          By default, all folders created at the root level will have global section
+          navigation generated. You can turn this off if you prefer manually constructing
+          this part of the navigation.
+        </div>
       </div>
-    </div>
 
-    <div class="field"
-         tal:define="nonfolderish_tabs request/nonfolderish_tabs|view/isNotFoldersGenerated;
-                     error errors/nonfolderish_tabs|nothing"
-         tal:attributes="class python:test(error, 'field error', 'field')">
-      <input type="checkbox"
-             id="nonfolderish_tabs"
-             name="nonfolderish_tabs"
-             value="1"
-             tal:attributes="checked python:test(nonfolderish_tabs, 'checked', None)" />
-      <label for="nonfolderish_tabs" i18n:translate="label_nonfolderish_tabs_enable">Generate tabs for items other than folders</label>
-      <div class="formHelp" i18n:translate="help_nonfolderish_tabs">
-        By default, any content item in the root of the portal will be shown as
-        a global section. If you turn this option off, only folders will be shown.
-        This only has an effect if "Automatically generate tabs" is enabled
+      <div class="field"
+           tal:define="nonfolderish_tabs request/nonfolderish_tabs|view/isNotFoldersGenerated;
+                       error errors/nonfolderish_tabs|nothing"
+           tal:attributes="class python:test(error, 'field error', 'field')">
+        <input type="checkbox"
+               id="nonfolderish_tabs"
+               name="nonfolderish_tabs"
+               value="1"
+               tal:attributes="checked python:test(nonfolderish_tabs, 'checked', None)" />
+        <label for="nonfolderish_tabs" i18n:translate="label_nonfolderish_tabs_enable">Generate tabs for items other than folders</label>
+        <div class="formHelp" i18n:translate="help_nonfolderish_tabs">
+          By default, any content item in the root of the portal will be shown as
+          a global section. If you turn this option off, only folders will be shown.
+          This only has an effect if "Automatically generate tabs" is enabled
+        </div>
       </div>
-    </div>
 
-    <ul class="csshover" id="roottabs"
-        tal:content="structure view/getGeneratedTabs" />
+      <ul class="csshover" id="roottabs"
+          tal:content="structure view/getGeneratedTabs" />
+
+      <div id="autogeneration_controls">
+          <input class="submit-button" type="submit" name="generated_roots_button" value="Save" />
+      </div>
+
+    </form>
 
   </tal:autogeneration>
