Changeset 152

Show
Ignore:
Timestamp:
01/05/06 09:56:26
Author:
piv
Message:

added menu editor tool via ZMI

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneDropDownMenu/branches/0.2/DropDownMenuTool.py

    r151 r152  
     1import os 
     2 
     3from cStringIO import StringIO 
     4 
    15from Globals import InitializeClass 
     6from Globals import package_home 
    27from OFS.SimpleItem import SimpleItem 
    38from AccessControl import ClassSecurityInfo 
    4   
    5 from Products.CMFCore.utils import UniqueObject, getToolByName 
     9 
     10from Products.PageTemplates.PageTemplateFile import PageTemplateFile 
     11from Products.CMFCore.utils import getToolByName, UniqueObject 
     12from Products.CMFCore.Expression import Expression, createExprContext 
    613 
    714from Products.qPloneDropDownMenu.Extensions.Install import updateMenu 
    8 from config import VIEW_PERMISSION, PROJECT_NAME, UNIQUE_ID 
    9  
     15from config import VIEW_PERMISSION, UNIQUE_ID 
     16 
     17from zLOG import LOG 
     18 
     19_wwwdir = os.path.join(package_home(globals()), 'www') 
     20 
     21class MenuItem(UniqueObject, SimpleItem): 
     22 
     23    security = ClassSecurityInfo() 
     24 
     25    def __init__(self, title, url=None, sub_menu=None): 
     26        """ Init """ 
     27        self._title = title 
     28        self._url = url 
     29        self._sub_menu = sub_menu 
     30 
     31    security.declarePublic( 'getTitle' ) 
     32    def getTitle(self): 
     33        """ Simple accessor. """ 
     34        return self._title 
     35 
     36    security.declareProtected(VIEW_PERMISSION, 'setTitle') 
     37    def setTitle(self, title): 
     38        """ Set menu item's title """ 
     39        self._title = title 
     40 
     41    security.declarePublic('getUrl') 
     42    def getUrl(self): 
     43        """ Simple accessor. """ 
     44        return self._url 
     45 
     46    security.declareProtected(VIEW_PERMISSION, 'setUrl') 
     47    def setUrl(self, url): 
     48        """ Set menu item's url """ 
     49        self._url = url 
     50 
     51    security.declarePublic('getSubMenu') 
     52    def getSubMenu(self): 
     53        """ Simple accessor. """ 
     54        return self._sub_menu or None 
     55 
     56    security.declareProtected(VIEW_PERMISSION, 'setSubMenu') 
     57    def setSubMenu(self, sub_menu): 
     58        """ Set menu item's subMenu object """ 
     59        self._sub_menu = sub_menu 
     60 
     61InitializeClass(MenuItem) 
     62 
     63class subMenu(UniqueObject, SimpleItem): 
     64 
     65    security = ClassSecurityInfo() 
     66 
     67 
     68    def __init__(self): 
     69        """  Init """ 
     70        self._menu_items = () 
     71 
     72    security.declarePublic('listMenuItems') 
     73    def listMenuItems( self ): 
     74        """Get all the menu items in subMenu. """ 
     75        return [x.__of__(self) for x in self._menu_items] or () 
     76 
     77InitializeClass(subMenu) 
    1078 
    1179class DropDownMenuTool(UniqueObject, SimpleItem): 
     
    1583    title="DropDown Menu Tool" 
    1684 
     85    _submenu_mapping = {} 
     86 
    1787    security = ClassSecurityInfo() 
     88 
     89    manage_options = ({ 'label' : 'Sub Menus', 
     90                        'action' : 'manage_editsubMenus'},) + SimpleItem.manage_options 
     91 
     92    security.declareProtected(VIEW_PERMISSION, 'manage_editsubMenus') 
     93    manage_editsubMenus = PageTemplateFile('ddmtEdit', _wwwdir) 
     94 
     95    security.declareProtected(VIEW_PERMISSION, 'manage_editMenuItems') 
     96    manage_editMenuItems = PageTemplateFile('editMenuItems', _wwwdir) 
    1897 
    1998    security.declareProtected(VIEW_PERMISSION, 'regenerateMenu') 
    2099    def regenerateMenu(self): 
     100        """ Update initiale portal menu. """ 
    21101        updateMenu(self) 
    22102 
     103    security.declareProtected(VIEW_PERMISSION, 'listPortalTabActions') 
     104    def listPortalTabActions(self): 
     105        """ Return all portal actions with 'portal_tabs' category. """ 
     106        result = [] 
     107        pu = getToolByName(self, 'plone_utils') 
     108 
     109        if hasattr(pu, 'createTopLevelTabs'): 
     110            pactions = getToolByName(self, 'portal_actions').listFilteredActionsFor(self) 
     111            tl_tabs = pu.createTopLevelTabs(pactions) 
     112 
     113            for act in tl_tabs: 
     114                data = {'title': act['name'], 
     115                        'id':act['id'], 
     116                        'actionExpression': act['url']} 
     117                result.append(data) 
     118 
     119        else: 
     120            portal = getToolByName(self, 'portal_url').getPortalObject() 
     121            portal_act = getToolByName(self, 'portal_actions') 
     122            actions=portal_act._cloneActions() 
     123 
     124            for act in actions: 
     125                if act.category == 'portal_tabs': 
     126                    data = {'title': act.title, 
     127                             'id': act.id, 
     128                             'actionExpression': \ 
     129                             Expression(act.getActionExpression())(createExprContext(portal, portal, portal))} 
     130                result.append(data) 
     131        return result 
     132 
     133    security.declareProtected(VIEW_PERMISSION, 'generatesubMenuMapping') 
     134    def generatesubMenuMapping(self): 
     135        """  Create top-level subMenu mapping. """ 
     136        mapping = self._submenu_mapping 
     137        for item in mapping.keys(): 
     138            for tab in self.listPortalTabActions(): 
     139                if item == tab['id']: 
     140                    param = 1 
     141                    break 
     142                else: param = 0 
     143            if param == 0: del mapping[item] 
     144        for tab in self.listPortalTabActions(): 
     145            if tab['id'] not in self._submenu_mapping.keys(): 
     146                mapping[tab['id']] = '' 
     147        self._submenu_mapping = mapping 
     148        return self._submenu_mapping 
     149 
     150    security.declareProtected(VIEW_PERMISSION, 'getMappingKeys') 
     151    def getMappingKeys(self): 
     152        """ Return keys from _submenu_mapping. """ 
     153        return [key for key in self._submenu_mapping.keys()] 
     154 
     155    security.declareProtected(VIEW_PERMISSION, 'getMappingValues') 
     156    def getMappingValues(self): 
     157        """ Return values from _submenu_mapping. """ 
     158        return [value for value in self._submenu_mapping.values()] 
     159 
     160    security.declareProtected(VIEW_PERMISSION, 'getMapping') 
     161    def getMapping(self): 
     162        """ Simple accessor """ 
     163        return self._submenu_mapping 
     164 
     165    security.declareProtected(VIEW_PERMISSION, 'getValueByKey') 
     166    def getValueByKey(self, key): 
     167        """  Return value from _submenu_mapping for given key """ 
     168        try: 
     169            return self._submenu_mapping[key] 
     170        except KeyError: 
     171            return None 
     172 
     173    security.declareProtected(VIEW_PERMISSION, 'validateId') 
     174    def validateTitle(self, title): 
     175        """ Safeguard against duplicate title. """ 
     176        if (title == '') or (title == ' '): 
     177            raise ValueError, 'Please, enter title' 
     178        else: return 1 
     179 
     180    security.declareProtected(VIEW_PERMISSION, 'getElementsBysubMenuPath') 
     181    def getElementsBysubMenuPath(self, submenu_path): 
     182        """  Return MenuItem and it's sub_menu field for a given submenu_path """ 
     183        mapping = self._submenu_mapping 
     184        LOG('getElementsBysubMenuPath', 111, repr(submenu_path), repr(mapping.keys())) 
     185        if submenu_path in mapping.keys(): 
     186            return (mapping[submenu_path], submenu_path, None) 
     187            LOG('getElementsBysubMenuPath', 111, repr(submenu_path), repr(mapping.keys())) 
     188        else: 
     189            submenu_path = submenu_path.strip() 
     190            path_list = submenu_path.split('/') 
     191            del path_list[0] 
     192            top_submenu = mapping[submenu_path.split('/')[0]] 
     193            return self.parsesubMenuPath(top_submenu, path_list) 
     194 
     195    security.declareProtected(VIEW_PERMISSION, 'parsesubMenuPath') 
     196    def parsesubMenuPath(self, top_submenu, path_list): 
     197        """ Parse submenu_path and return corresponding objects """ 
     198        menuitems = top_submenu.listMenuItems() 
     199        submenu = top_submenu 
     200        d = 0 
     201        for index in path_list: 
     202            d += 1 
     203            menuitem = menuitems[int(index)] 
     204            if d != len(path_list): 
     205                submenu = menuitem.getSubMenu() 
     206                menuitems = submenu.listMenuItems() 
     207        if menuitem.getSubMenu(): 
     208            next_submenu = menuitem.getSubMenu() 
     209        else: 
     210            next_submenu = None 
     211        return (submenu, menuitem, next_submenu) 
     212 
     213    security.declareProtected(VIEW_PERMISSION, 'getLevel') 
     214    def getLevel(self, submenu, space, list): 
     215        if submenu != None: 
     216    #        if submenu.listMenuItems() != None: 
     217            space += '    ' 
     218            for menuitem in submenu.listMenuItems(): 
     219                list += space + menuitem.getTitle() + '  ==  ' + str(menuitem.getSubMenu()) + '\n' 
     220                list = str(self.getLevel(menuitem.getSubMenu(), space, list)) 
     221            return list 
     222        else: return list 
     223 
     224    security.declareProtected(VIEW_PERMISSION, 'getMenuTree') 
     225    def getMenuTree(self): 
     226        """ Return all submenu with it's menuitems """ 
     227        out = '\n' 
     228        mapping = self._submenu_mapping 
     229        for item in mapping.items(): 
     230            space = '' 
     231            out += space + item[0] + '  ---  ' + str(item[1]) + '\n' 
     232            if item[1] != '': 
     233                out += space + str(mapping[item[0]]) + '\n' + str(self.getLevel(mapping[item[0]], space, list='')) 
     234        return out 
     235 
     236    security.declareProtected(VIEW_PERMISSION, 'deletesubMenu') 
     237    def deletesubMenu( self, submenu_path): 
     238        """ Delete a submenu for the given menu item. """ 
     239        mapping = self._submenu_mapping 
     240        if submenu_path in mapping.keys(): 
     241            mapping[submenu_path] = '' 
     242            self._submenu_mapping = mapping 
     243        else: 
     244            data = self.getElementsBysubMenuPath(submenu_path) 
     245            data[1].setSubMenu(None) 
     246 
     247    security.declareProtected(VIEW_PERMISSION, 'manage_deletesubMenu') 
     248    def manage_deletesubMenu(self, submenu_path, REQUEST=None): 
     249        """ Delete a submenu for the given portal-tab action via the ZMI. """ 
     250        self.deletesubMenu(submenu_path) 
     251 
     252        path = submenu_path.split('/') 
     253        if submenu_path in self._submenu_mapping.keys(): 
     254            edit_form = 'manage_editsubMenus' 
     255            new_path = submenu_path 
     256        else: 
     257            edit_form = 'manage_editMenuItems' 
     258            del path[-1] 
     259            new_path = '/'.join(path) 
     260        LOG('manage_deletesubMenu', 111, new_path, submenu_path) 
     261 
     262        if REQUEST: 
     263            REQUEST['RESPONSE'].redirect( '%s/%s' 
     264                                          '?manage_tabs_message=SubMenu+deleted.&submenu_path=%s' 
     265                                        % (self.absolute_url(), edit_form, new_path) 
     266                                        ) 
     267 
     268    security.declareProtected(VIEW_PERMISSION, 'addsubMenu') 
     269    def addsubMenu(self, submenu_path): 
     270        """ Add a submenu for the given menu item """ 
     271        javs = 1 
     272        new_submenu = subMenu() 
     273        mapping = self._submenu_mapping 
     274        if submenu_path in mapping.keys(): 
     275            mapping[submenu_path] = new_submenu 
     276            self._submenu_mapping = mapping 
     277        else: 
     278            data = self.getElementsBysubMenuPath(submenu_path) 
     279            if data == () or data[1] == None: javs = 0 
     280            data[1].setSubMenu(new_submenu) 
     281        return javs 
     282 
     283    security.declareProtected( VIEW_PERMISSION, 'manage_addsubMenu' ) 
     284    def manage_addsubMenu(self, submenu_path, REQUEST=None): 
     285        """ Add an sub menu for the given portal-tab action via the ZMI. """ 
     286        self.addsubMenu(submenu_path) 
     287 
     288        path = submenu_path.split('/') 
     289        if submenu_path in self._submenu_mapping.keys(): 
     290            edit_form = 'manage_editsubMenus' 
     291            new_path = submenu_path 
     292        else: 
     293            edit_form = 'manage_editMenuItems' 
     294            del path[-1] 
     295            new_path = '/'.join(path) 
     296 
     297        if REQUEST: 
     298            REQUEST['RESPONSE'].redirect( '%s/%s' 
     299                                          '?manage_tabs_message=SubMenu+added.&submenu_path=%s' 
     300                                        % (self.absolute_url(), edit_form, new_path) 
     301                                        ) 
     302 
     303    security.declareProtected(VIEW_PERMISSION, 'addMenuItem') 
     304    def addMenuItem(self, submenu_path, title, url=None): 
     305        """ Add MenuItem """ 
     306        javs = 1 
     307        if self.validateTitle(title) != 1: javs = 0 
     308        mapping = self._submenu_mapping 
     309        if submenu_path in mapping.keys(): 
     310            submenu = mapping[submenu_path] 
     311            if submenu == None: javs = 0 
     312        else: 
     313            submenu = self.getElementsBysubMenuPath(submenu_path)[1].getSubMenu() 
     314            if submenu == None: javs = 0 
     315        menuitems = list(submenu._menu_items) 
     316        menuitems.append(MenuItem(title, url)) 
     317        submenu._menu_items = tuple(menuitems) 
     318        if submenu._menu_items == (): javs = 0 
     319        return javs 
     320 
     321    security.declareProtected(VIEW_PERMISSION, 'manage_addMenuItem') 
     322    def manage_addMenuItem(self, submenu_path, title, url=None, REQUEST=None): 
     323        """ Add MenuItem via ZMI """ 
     324        self.addMenuItem(submenu_path, title, url) 
     325 
     326        if REQUEST: 
     327            REQUEST['RESPONSE'].redirect( '%s/manage_editMenuItems' 
     328                                          '?manage_tabs_message=MenuItem+\'+%s+\'+added+to+subMenu.&submenu_path=%s' 
     329                                        % (self.absolute_url(), title, submenu_path)) 
     330 
     331    security.declareProtected(VIEW_PERMISSION, 'manage_saveMenuItems') 
     332    def manage_saveMenuItems(self, submenu_path, REQUEST=None): 
     333        """  Save MenuItems for given subMenu via ZMI. """ 
     334        records = REQUEST.get('menuitems') 
     335        mapping = self._submenu_mapping 
     336        if submenu_path in mapping.keys(): 
     337            submenu = mapping[submenu_path] 
     338        else: 
     339            submenu = self.getElementsBysubMenuPath(submenu_path)[1].getSubMenu() 
     340        menuitems = submenu._menu_items 
     341 
     342        if records: 
     343             for i in range(len(menuitems)): 
     344                 menuitems[i].setTitle(records[i].get('title')) 
     345                 menuitems[i].setUrl(records[i].get('url')) 
     346        submenu._menu_items = tuple( menuitems ) 
     347 
     348        if REQUEST: 
     349            REQUEST['RESPONSE'].redirect( '%s/manage_editMenuItems' 
     350                               '?manage_tabs_message=MenuItems+list+updated.&submenu_path=%s' 
     351                               % (self.absolute_url(), submenu_path)) 
     352 
     353    security.declareProtected(VIEW_PERMISSION, 'removeMenuItem') 
     354    def removeMenuItem(self, submenu_path): 
     355        """  Remove MenuItem """ 
     356        javs = 1 
     357        mapping = self._submenu_mapping 
     358        path = submenu_path.split('/') 
     359        if len(path) == 2: 
     360            submenu = mapping[path[0]] 
     361            if submenu == None: javs = 0 
     362        else: 
     363            submenu = self.getElementsBysubMenuPath(submenu_path)[0] 
     364            if submenu == None: javs = 0 
     365        menuitems = [item for item in submenu.listMenuItems()] 
     366        if (menuitems == []) or (menuitems[int(path[-1])] == None): javs = 0 
     367        del menuitems[int(path[-1])] 
     368        submenu._menu_items = tuple(menuitems) 
     369        if submenu._menu_items == (): javs = 0 
     370        return javs 
     371 
     372    security.declareProtected(VIEW_PERMISSION, 'manage_removeMenuItem') 
     373    def manage_removeMenuItem(self, submenu_path, REQUEST=None): 
     374        """ Remove MenuItem via ZMI """ 
     375        self.removeMenuItem(submenu_path) 
     376 
     377        path = submenu_path.split('/') 
     378        del path[-1] 
     379        new_path = '/'.join(path) 
     380 
     381        if REQUEST: 
     382            REQUEST['RESPONSE'].redirect( '%s/manage_editMenuItems' 
     383                                          '?manage_tabs_message=MenuItem+removed.&submenu_path=%s' 
     384                                        % (self.absolute_url(), new_path)) 
     385 
     386    security.declareProtected(VIEW_PERMISSION, 'moveMenuItemDown') 
     387    def moveMenuItemDown(self, submenu_path): 
     388        """ Move the MenuItem down """ 
     389        javs = 1 
     390        mapping = self._submenu_mapping 
     391        path = submenu_path.split('/') 
     392        if len(path) == 2: 
     393            submenu = mapping[path[0]] 
     394            if submenu == None: javs = 0 
     395        else: 
     396            submenu = self.getElementsBysubMenuPath(submenu_path)[0] 
     397            if submenu == None: javs = 0 
     398        menuitems = [item for item in submenu.listMenuItems()] 
     399        if menuitems == []: javs = 0 
     400        submenu._menu_items = tuple(self.moveItem(path[-1], int(path[-1]) + 1, menuitems)) 
     401        if submenu._menu_items == (): javs = 0 
     402        return javs 
     403 
     404    security.declareProtected(VIEW_PERMISSION, 'moveMenuItemUp') 
     405    def moveMenuItemUp(self, submenu_path): 
     406        """ Move the MenuItem up """ 
     407        javs = 1 
     408        mapping = self._submenu_mapping 
     409        path = submenu_path.split('/') 
     410        if len(path) == 2: 
     411            submenu = mapping[path[0]] 
     412            if submenu == None: javs = 0 
     413        else: 
     414            submenu = self.getElementsBysubMenuPath(submenu_path)[0] 
     415            if submenu == None: javs = 0 
     416        menuitems = [item for item in submenu.listMenuItems()] 
     417        if menuitems == []: javs = 0 
     418        submenu._menu_items = tuple(self.moveItem(path[-1], int(path[-1]) - 1, menuitems)) 
     419        if submenu._menu_items == (): javs = 0 
     420        return javs 
     421 
     422    security.declareProtected(VIEW_PERMISSION, 'manage_moveMenuItemDown') 
     423    def manage_moveMenuItemDown(self, submenu_path, REQUEST=None): 
     424        """ Move the MenuItem down via ZMI """ 
     425        self.moveMenuItemDown(submenu_path) 
     426 
     427        path = submenu_path.split('/') 
     428        del path[-1] 
     429        new_path = '/'.join(path) 
     430 
     431        if REQUEST: 
     432            REQUEST['RESPONSE'].redirect( '%s/manage_editMenuItems' 
     433                                          '?manage_tabs_message=MenuItem+moved+down.&submenu_path=%s' 
     434                                        % (self.absolute_url(), new_path)) 
     435 
     436    security.declareProtected(VIEW_PERMISSION, 'manage_moveMenuItemUp') 
     437    def manage_moveMenuItemUp(self, submenu_path, REQUEST=None): 
     438        """ Move the MenuItem up via ZMI """ 
     439        self.moveMenuItemUp(submenu_path) 
     440 
     441        path = submenu_path.split('/') 
     442        del path[-1] 
     443        new_path = '/'.join(path) 
     444 
     445        if REQUEST: 
     446            REQUEST['RESPONSE'].redirect( '%s/manage_editMenuItems' 
     447                                          '?manage_tabs_message=MenuItem+moved+up.&submenu_path=%s' 
     448                                        % (self.absolute_url(), new_path)) 
     449 
     450    security.declareProtected(VIEW_PERMISSION, 'moveItem') 
     451    def moveItem(self, index, position, menuitems): 
     452        """ Move an item to the given position.""" 
     453        if index == position: 
     454            return 
     455        elif position < 0: 
     456            position = 0 
     457        menuitems = list(menuitems) 
     458        menuitem = menuitems.pop(int(index)) 
     459        menuitems.insert(int(position), menuitem) 
     460        return menuitems 
     461 
     462    security.declareProtected(VIEW_PERMISSION, 'getMenuItemPosition') 
     463    def getMenuItemPosition(self, submenu_path): 
     464        """ Return MenuItem position by submenu_path """ 
     465        path = submenu_path.split('/') 
     466        return int(path[-1]) 
     467 
    23468InitializeClass(DropDownMenuTool) 
  • qPloneDropDownMenu/branches/0.2/HISTORY.txt

    r151 r152  
     10.2 
     2 
     3  * added menu editor tool in ZMI 
     4 
    150.1.8  
    26 
  • qPloneDropDownMenu/branches/0.2/TODO.txt

    r151 r152  
    1  
    2  * next optimization of csshover.htc script 
  • qPloneDropDownMenu/branches/0.2/skins/qPloneDropDownMenu/global_sections.pt

    r151 r152  
    44<body> 
    55 
    6   <!-- THE SECTION TABS DEFINITION --> 
     6<!-- THE SECTION TABS DEFINITION --> 
     7<div metal:define-macro="portal_tabs" 
     8     tal:omit-tag="" 
     9     tal:define="selected_tabs python:here.selectedTabs(template_id, here); 
     10                 selected_portal_tab selected_tabs/portal;" 
     11     tal:condition="portal_tabs"> 
     12    <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5> 
    713 
    8    <div metal:define-macro="portal_tabs" 
    9         tal:omit-tag=""> 
    10       <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>  
    11      <div id="portal-globalnav"> 
    12        <div class="csshover"> 
    13          <ul> 
    14            <span tal:replace="structure portal/portal_properties/dropdownmenu_properties/menu | string:qPloneDropDownMenu broken" /> 
    15            <li class="invisibleHeightKeeper">&nbsp;</li> 
    16          </ul> 
    17        </div> 
    18      </div> 
    19    </div> 
     14<div id="portal-globalnav" class="csshover"> 
     15 
     16    <ul> 
     17        <tal:tabs tal:repeat="tab portal_tabs"> 
     18            <li tal:attributes="id string:portaltab-${tab/id}; 
     19                class python:test(selected_portal_tab==tab['id'], 'selected', 'plain');"> 
     20                <a href="" 
     21                   tal:content="tab/name" 
     22                   tal:attributes="href tab/url; 
     23                                   title tab/description|nothing"> 
     24                Tab Name 
     25                </a> 
     26 
     27                <tal:submenu tal:define="tab_id tab/id; 
     28                                         submenu python:here.portal_dropdownmenu.getValueByKey(tab_id)" 
     29                             tal:condition="submenu"> 
     30 
     31                        <ul> 
     32                        <div metal:use-macro="here/global_sections/macros/submenu" /> 
     33                        </ul> 
     34 
     35                </tal:submenu> 
     36 
     37            </li> 
     38        </tal:tabs> 
     39    </ul> 
     40 
     41</div> 
     42 
     43</div> 
     44 
     45<ul metal:define-macro="submenu" tal:omit-tag=""> 
     46<tal:menuitem tal:repeat="menuitem submenu/listMenuItems"> 
     47<li tal:attributes="id string:portaltab-${menuitem/getTitle}"> 
     48    <a href="" 
     49       tal:content="menuitem/getTitle" 
     50       tal:attributes="href menuitem/getUrl"> 
     51    MenuItem Title 
     52    </a> 
     53 
     54    <ul tal:define="submenu menuitem/getSubMenu" 
     55        tal:condition="submenu"> 
     56        <metal:submenu use-macro="here/global_sections/macros/submenu" /> 
     57    </ul> 
     58</li> 
     59</tal:menuitem> 
     60</ul> 
     61 
    2062</body> 
    2163</html> 
  • qPloneDropDownMenu/branches/0.2/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt

    r151 r152  
    44      lang="en-US" 
    55      metal:use-macro="here/prefs_main_template/macros/master" 
    6       i18n:domain="qPloneDropDownMenu">  
     6      i18n:domain="qPloneDropDownMenu"> 
    77 
    88  <metal:block fill-slot="top_slot" 
     
    1212  <div metal:fill-slot="prefs_configlet_main" 
    1313       tal:define="errors python:request.get('errors', {})"> 
    14    
     14 
    1515    <h1 i18n:translate="heading_plonedropdownmenu">Plone Drop Down Menu</h1> 
    1616    <a href="" 
     
    2020    Up to Plone Setup 
    2121    </a> 
    22      
     22 
    2323    <div class="documentDescription" 
    2424         i18n:translate="description_plonedropdownmenu"> 
    25     Plone Drop Down Menu ...  
     25    Plone Drop Down Menu ... 
    2626    </div> 
    2727 
     
    3434    can only click <a href="dropdownmenu_update">regenerate menu</a>, and 
    3535    you'll get the initial portal menu.</p> 
    36   
     36 
    3737    <form name="menu_edit_form" 
    3838          action="."  
     
    4848                name="form.button.Regenerate" 
    4949                i18n:attributes="value" 
    50                 tal:attributes="tabindex tabindex/next" 
    51                 /> 
    52            
     50                tal:attributes="tabindex tabindex/next" /> 
    5351     </div> 
    5452 
    5553     <div class="field"> 
    5654         <label for="menu" i18n:translate="label_portaltabs">Portal tabs</label> 
    57                      
    5855         <div class="formHelp" i18n:translate="help_portaltabs_edit"> 
    5956         Here you can change your portal tabs.  
    6057         </div> 
    61       
    6258         <textarea cols="80"  
    6359                   rows="20" 
     
    6965                   >Portal Tabs</textarea> 
    7066     </div> 
    71    
     67 
    7268     <div class="formControls" 
    7369             tal:define="process_creation request/process_creation|nothing;"> 
     
    7874                name="form.button.Save" 
    7975                i18n:attributes="value" 
    80                 tal:attributes="tabindex tabindex/next" 
    81                 /> 
    82            
     76                tal:attributes="tabindex tabindex/next" /> 
    8377     </div> 
    8478 
     
    8680    </form> 
    8781 
    88              
    8982  </div> 
    9083</body> 
  • qPloneDropDownMenu/branches/0.2/version.txt

    r151 r152  
    1 0.1.8 
     10.2.0 (development)