Changeset 463 in products for qPloneDropDownMenu
- Timestamp:
- Aug 14, 2006 12:44:42 PM (18 years ago)
- Location:
- qPloneDropDownMenu/branches/0.2
- Files:
-
- 27 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
qPloneDropDownMenu/branches/0.2/Extensions/Install.py
r59 r463 4 4 from Products.CMFCore.utils import getToolByName 5 5 from Products.CMFCore.DirectoryView import addDirectoryViews 6 7 from Products.CMFPlone.migrations.migration_util import safeEditProperty 8 from Products.CMFCore.Expression import Expression, createExprContext 6 from Products.CMFCore.CMFCorePermissions import ManagePortal 9 7 10 8 from Products.qPloneDropDownMenu.config import * 11 9 12 configlets = ({'id':PROJECT _NAME,10 configlets = ({'id':PROJECTNAME, 13 11 'name':'Drop Down Menu', 14 12 'action':'string:${portal_url}/prefs_dropdownmenu_edit_form', … … 16 14 'category':'Products', 17 15 'visible':1, 18 'appId':PROJECT_NAME, 19 'permission':VIEW_PERMISSION, 20 'imageUrl':'qplonedropdownmenu.gif'}, 21 {'id':'csshover', 22 'name':'CSS Hover', 23 'action':'string:${portal_url}/prefs_csshover_edit_form', 24 'condition':'', 25 'category':'Products', 26 'visible':1, 27 'appId':'csshover', 28 'permission':VIEW_PERMISSION},) 16 'appId':PROJECTNAME, 17 'permission':ManagePortal, 18 'imageUrl':'qplonedropdownmenu.gif'},) 19 20 def setupConfiglets(self, out): 21 configTool = getToolByName(self, 'portal_controlpanel', None) 22 if configTool: 23 for conf in configlets: 24 configTool.registerConfiglet(**conf) 25 out.write('Added configlet %s\n' % conf['id']) 26 27 def removeConfiglets(self, out): 28 configTool = getToolByName(self, 'portal_controlpanel', None) 29 if configTool: 30 for conf in configlets: 31 configTool.unregisterConfiglet(conf['id']) 32 out.write('Removed configlet %s\n' % conf['id']) 29 33 30 34 def registerCSS(self, out): 31 32 35 qi = getToolByName(self, 'portal_quickinstaller', None) 33 36 if qi is not None: … … 49 52 50 53 def unregisterCSS(self, out): 51 52 54 qi = getToolByName(self, 'portal_quickinstaller', None) 53 55 if qi is not None: … … 65 67 pass 66 68 67 def updateMenu(self):68 out = ''69 70 pu = getToolByName(self, 'plone_utils')71 72 if hasattr(pu, 'createTopLevelTabs'):73 pactions = getToolByName(self, 'portal_actions').listFilteredActionsFor(self)74 tl_tabs = pu.createTopLevelTabs(pactions)75 76 for act in tl_tabs:77 out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">' % \78 (act['id'], act['url']) + act['name'] + '</a></li>\n'79 else:80 portal = getToolByName(self, 'portal_url').getPortalObject()81 82 portal_act = getToolByName(self, 'portal_actions')83 actions=portal_act._cloneActions()84 85 for act in actions:86 if act.category == 'portal_tabs':87 out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">%s</a></li>\n' % \88 (act.id, \89 Expression(act.getActionExpression())(createExprContext(portal, portal, portal)), \90 act.title)91 92 portal_props = getToolByName(self, 'portal_properties')93 if not hasattr(portal_props, PROPERTY_SHEET):94 portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties')95 ap = getattr(portal_props, PROPERTY_SHEET)96 safeEditProperty(ap, 'menu', out, 'text')97 98 69 def setupSkin(self, out, skinFolder): 99 100 70 skinstool=getToolByName(self, 'portal_skins') 101 102 addDirectoryViews(skinstool, SKINS_DIR, GLOBALS)103 104 71 for skin in skinstool.getSkinSelections(): 105 72 path = skinstool.getSkinPath(skin) 106 path = map( string.strip, string.split( path,',' ) ) 107 73 path = map(string.strip, string.split(path,',')) 108 74 if not skinFolder in path: 109 75 try: 110 path.insert( path.index( 'custom')+1, skinFolder)76 path.insert(path.index('custom')+1, skinFolder) 111 77 except ValueError: 112 78 path.append(skinFolder) 113 path = string.join( path, ', ')114 skinstool.addSkinSelection( skin, path)79 path = string.join(path, ', ') 80 skinstool.addSkinSelection(skin, path) 115 81 out.write(' %s layer sucessfully installed into skin %s.\n' % (skinFolder, skin)) 116 82 else: 117 83 out.write(' %s layer was already installed into skin %s.\n' % (skinFolder, skin)) 118 84 119 def setupTool(self): 85 def removeSkin(self, skins=[]): 86 if skins: 87 skinstool = getToolByName(self, 'portal_skins') 88 for skinName in skinstool.getSkinSelections(): 89 path = skinstool.getSkinPath(skinName) 90 path = [i.strip() for i in path.split(',')] 91 for s in skins: 92 if s in path: 93 path.remove(s) 94 s += '/' 95 for layer in path: 96 if layer.startswith(s): 97 path.remove(layer) 98 path = ','.join(path) 99 skinstool.addSkinSelection(skinName, path) 120 100 101 def setupTool(self, out): 102 if hasattr(self, UNIQUE_ID): 103 self.manage_delObjects([UNIQUE_ID]) 104 out.write('Deleting old %s\n' % (UNIQUE_ID)) 121 105 portal_url = getToolByName(self, 'portal_url') 122 106 p = portal_url.getPortalObject() 123 x = p.manage_addProduct[PROJECT_NAME].manage_addTool(type='DropDownMenu Tool') 107 x = p.manage_addProduct[PROJECTNAME].manage_addTool(type='DropDownMenu Tool') 108 109 def deleteTool(self, out): 110 if hasattr(self, UNIQUE_ID): 111 self.manage_delObjects([UNIQUE_ID]) 112 out.write('Deleted %s tool\n' % (UNIQUE_ID)) 124 113 125 114 def install(self): 126 115 out = StringIO() 127 128 116 registerCSS(self, out) 129 130 configTool = getToolByName(self, 'portal_controlpanel', None) 131 if configTool: 132 for conf in configlets: 133 configTool.registerConfiglet(**conf) 134 out.write('Added configlet %s\n' % conf['id']) 135 136 if hasattr(self, UNIQUE_ID): 137 self.manage_delObjects([UNIQUE_ID]) 138 out.write('Deleting old %s\n' % (UNIQUE_ID)) 139 setupTool(self) 117 out.write('setupSkin... \n') 118 skinstool=getToolByName(self, 'portal_skins') 119 addDirectoryViews(skinstool, SKINS_DIR, GLOBALS) 120 setupSkin(self, out, 'qPloneDropDownMenu') 121 mtool = getToolByName(self, 'portal_migration') 122 plone_version = mtool.getFileSystemVersion() 123 if plone_version == '2.0.5': 124 setupSkin(self, out, PROJECTNAME+'/2.0.5') 125 out.write('Added %s/2.0.5 Layer to portal_skins\n' % PROJECTNAME) 126 setupConfiglets(self, out) 140 127 out.write('Added %s to the portal root folder\n' % (UNIQUE_ID)) 141 142 portal_props = getToolByName(self, 'portal_properties') 143 if not hasattr(portal_props, PROPERTY_SHEET): 144 out.write('updateMenu... \n') 145 updateMenu(self) 146 else: 147 out.write('skipping updateMenu... \n') 148 149 out.write('setupSkin... \n') 150 setupSkin(self, out, 'qPloneDropDownMenu') 151 128 setupTool(self, out) 152 129 return out.getvalue() 153 130 154 131 def uninstall(self): 155 132 out = StringIO() 156 157 133 unregisterCSS(self, out) 158 159 configTool = getToolByName(self, 'portal_controlpanel', None) 160 if configTool: 161 for conf in configlets: 162 configTool.unregisterConfiglet(conf['id']) 163 out.write('Removed configlet %s\n' % conf['id']) 164 134 removeConfiglets(self, out) 135 removeSkin(self, [PROJECTNAME, PROJECTNAME+'/2.0.5']) 136 deleteTool(self, out) 165 137 return out.getvalue() -
qPloneDropDownMenu/branches/0.2/README.txt
r59 r463 26 26 Usage 27 27 28 You have a list of items of your top level menu, which you can edit in29 'drop down menu' configlet form. Now, to add submenu to the certain30 menu item, you need to add unordered list inside of top level menu31 item ('<li>...</li>') after its title ('<a></a>')::32 33 <ul><li>...</li>...<li>...</li></ul>34 35 To make your changes live click 'save' button.36 37 Sample menu with 2 submenus::38 39 <li id="portaltab-index_html" class="plain"><a href="http://example.com/" accesskey="t">Home</a></li>40 <li id="portaltab-Members" class="plain"><a href="http://example.com/Members" accesskey="t">Members</a>41 <ul>42 <li><a href="http://example.com/Members/jdoe">John Doe</a><li>43 <li><a href="http://example.com/Members/mmajor">Mary Major</a><li>44 </ul>45 </li>46 <li id="portaltab-news" class="plain"><a href="http://example.com/news" accesskey="t">News</a></li>47 <li id="portaltab-events" class="plain"><a href="http://example.com/events" accesskey="t">Events</a>48 <ul>49 <li><a href="http://example.com/events/previous">Past Events</a><li>50 <li><a href="http://example.com/calendar">Calendar</a><li>51 </ul>52 </li>53 54 In this example we added submenus to our 'Members', and 'Events' tabs.55 56 57 Customize the following elements in your's css files to58 changed the appearance of drop down menu:59 60 * #portal-globalnav - global navigation bar61 * #portal-globalnav .csshover li.plain a, #portal-globalnav li a - global navigation link62 * #portal-globalnav .csshover li.plain a:hover, #portal-globalnav li a:hover - global navigation link hover63 * #portal-globalnav .csshover li.plain ul, #portal-globalnav li ul - global navigation drop-down box64 * #portal-globalnav .csshover li.plain ul li a, #portal-globalnav li ul li a - global navigation drop-down link65 * #portal-globalnav .csshover li.plain ul li a:hover, #portal-globalnav li ul li a:hover - global navigation66 drop-down link hover67 68 69 You can click button on 'drop down menu' configlet form to reset menu.70 This can be usefull in case broken html of menu code. Generated code is based71 on status of 'Automatically generate tabs' in your 'Navigation settings'72 (in Plone 2.1+). However you will lose your previous code of menu with all submenus73 after click on 'regenerate menu'.74 75 If you want to 'regenerate menu' you should pay attention to status of76 'Automatically generate tabs' in your 'Navigation settings' (in Plone 2.1+).77 78 28 79 29 Authors -
qPloneDropDownMenu/branches/0.2/__init__.py
r59 r463 1 from AccessControl import allow_module2 1 from Products.CMFCore import utils 3 2 from Products.CMFCore.DirectoryView import registerDirectory 4 3 5 4 from Products.qPloneDropDownMenu.DropDownMenuTool import DropDownMenuTool 6 from Products.qPloneDropDownMenu.config import PROJECT_NAME, SKINS_DIR, GLOBALS, VIEW_PERMISSION 7 8 allow_module('Products.qPloneDropDownMenu.utils') 5 from Products.qPloneDropDownMenu.config import * 9 6 10 7 registerDirectory(SKINS_DIR, GLOBALS) 11 8 12 9 tools = (DropDownMenuTool,) 13 10 14 11 def initialize(context): 15 utils.ToolInit( PROJECT_NAME,16 17 product_name = PROJECT_NAME,18 19 12 utils.ToolInit(PROJECTNAME, 13 tools = tools, 14 product_name = PROJECTNAME, 15 icon='tool.gif' 16 ).initialize(context) -
qPloneDropDownMenu/branches/0.2/config.py
r59 r463 1 from Products.CMFCore import CMFCorePermissions 2 3 VIEW_PERMISSION = CMFCorePermissions.ManagePortal 1 PROJECTNAME = 'qPloneDropDownMenu' 4 2 5 PROJECT_NAME = 'qPloneDropDownMenu'6 3 UNIQUE_ID = "portal_dropdownmenu" 7 4 SKINS_DIR = 'skins' … … 9 6 GLOBALS = globals() 10 7 11 PROPERTY_SHEET = 'dropdownmenu_properties' 12 MENU_HTML = '''<ul><li><a class="first-item" href="http://www.bmc.com">Home</a></li><li><a href="http://www.bmc.com/products/">Solutions & Products</a><ul> 13 <li><a href="http://www.bmc.com/BMC/Common/Templates/hou_generic_tab/0,,19052_34957721,00.html">Business Service Management</a></li> 14 <li><a href="http://www.bmc.com/BMC/Common/Templates/hou_generic_tab/0,,19052_34829607,00.html">Best Practices & Compliance</a></li> 15 <li><a href="http://www.bmc.com/BMC/Common/Templates/hou_generic_tab/0,,19052_34830527,00.html">Small & Mid-Sized Business </a></li> 16 <li><a href="http://www.bmc.comBMC/Common/Templates/hou_generic_tab/0,3846,19052_34818399,00.html">Industry Solutions</a></li> 17 <li><a href="http://www.bmc.com/BMC/Products/CDA/hou_Products_Index/0,2830,19052_23655657,00.html">Product Families</a></li> 18 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,19052_19432,00.html">Services</a></li> 19 <li><a href="http://www.bmc.com/products/productlist/0,,19052,00.html">Product List A to Z</a></li> 20 <li><a href="http://www.bmc.com/BMC/Products/CDA/hou_Products_Index/0,2830,19052_23655660,00.html">Downloads & Resources</a></li> 21 <li><a href="http://www.bmc.com/pricelist/">Global Pricing</a></li> 22 </ul></li><li><a href="http://www.bmc.com/partners/">Partners</a><ul> 23 <li><a href="http://www.bmc.com/BMC/Partners/CDA/hou_Partner_Generic/0,3319,5377102_5379132,00.html">Find a Partner</a></li> 24 <li><a href="http://www.bmc.com/BMC/Partners/CDA/hou_Partner_Generic/0,3319,5377102_5379134,00.html">Become a Partner</a></li> 25 <li><a href="http://www.bmc.com/BMC/Partners/CDA/hou_Partner_Generic/0,3317,5377102_5379136,00.html">Find a Market Zone Product</a></li> 26 </ul></li><li><a href="http://www.bmc.com/support_home">Support</a><ul> 27 <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736148,00.html">Case Tracking & Reporting</a></li> 28 <li><a href="http://www.bmc.com/support/vantive_bridge.cfm?path=http://selfserve.bmc.com/support/Forms/frmResolutionSearch.asp">Knowledge Database</a></li> 29 <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736152,00.html">My Support Admin</a></li> 30 <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736150,00.html">PTFs, FTP & Installation</a></li> 31 <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736154,00.html">Policies & Guidelines</a></li> 32 <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736144,00.html">Product Lists & Manuals</a></li> 33 <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4718041,00.html">Support Contacts</a></li> 34 <li><a href="http://www.bmc.com/info_center_support/All_News/0,2560,19097,00.html">Support News</a></li> 35 </ul></li><li><a href="http://shop.bmc.com/">Store</a><ul> 36 <li><a href="http://shop.bmc.com/shopping_support.cfm">Shopping Support</a></li> 37 <li><a href="http://shop.bmc.com/licensing.cfm">Licensing Information</a></li> 38 <li><a href="http://shop.bmc.com/download.cfm">Download Facility</a></li> 39 <li><a href="http://shop.bmc.com/retrieve_cart.cfm">Retrieve Your Quote</a></li> 40 </ul></li><li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,,11629550_11650861_11651561,00.html?c=products_header&n=education_linksupport_homet=11503">Education</a><ul> 41 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,11629550_11650863,00.html">Certification Program</a></li> 42 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,11629550_11681301,00.html">Placement Tests</a></li> 43 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,11629550_11651556,00.html">Product Education</a></li> 44 </ul></li><li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_10667925,00.html">Communities</a><ul> 45 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_10636326,00.html">Thought Leadership Council</a></li> 46 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,9926222_33961809,00.html">Enterprise Leadership</a></li> 47 <li><a href="http://talk.bmc.com/">Blogs & Podcasts @TalkBMC</a></li> 48 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_33455235,00.html">External Communities</a></li> 49 <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_10636328,00.html">User Groups</a></li> 50 <li><a href="http://devcon.bmc.com/">Developer Connection</a></li> 51 <li><a href="http://www.bmc.com/BMC/Common/Views/hou_vw_redirect_url/0,3411,9926222_34207904,00.html">Partner Network Login</a></li> 52 </ul></li></ul>''' 8 #PROPERTY_SHEET = 'dropdownmenu_properties' -
qPloneDropDownMenu/branches/0.2/skins/qPloneDropDownMenu/drop_down.css.dtml
r122 r463 2 2 /* <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */ 3 3 4 body {5 behavior:url("&dtml-portal_url;/csshover.htc");6 } 4 /*body { 5 behavior:url("&dtml-portal_url;/csshover.htc"); 6 }*/ 7 7 8 8 … … 69 69 visibility: visible; 70 70 } 71 #portal-globalnav .csshover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li:hover li:hover li ul { 71 #portal-globalnav .csshover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li:hover li:hover li ul { 72 72 visibility: hidden; 73 73 } … … 78 78 } 79 79 80 /* ------ Make-up 80 /* ------ Make-up -------- */ 81 81 82 82 #portal-globalnav li.invisibleHeightKeeper { … … 94 94 95 95 #portal-globalnav .csshover ul li:hover ul a { 96 background-color: &dtml-backgroundColor; ;96 background-color: &dtml-backgroundColor; 97 97 } 98 98 … … 188 188 } 189 189 190 /*Configlet styles************************************************************/191 192 .ieVisible {display:none;}193 194 * html .ieHidden {display: none;}195 196 * html .ieVisible {display: block;}197 198 199 190 /* </dtml-with> (do not remove this either :) */ -
qPloneDropDownMenu/branches/0.2/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt.metadata
r59 r463 5 5 title=Edit Drop Down Menu 6 6 7 [validators]8 validators..Save=validate_dropdownmenu_edit9 validators..Regenerate=validate_dropdownmenu_edit10 11 7 [actions] 12 action.success..Save=traverse_to:string:dropdownmenu_edit 13 action.success..Regenerate=redirect_to:string:dropdownmenu_update 14 action.failure..Save=traverse_to:string:prefs_dropdownmenu_edit_form 15 action.failure..Regenerate=traverse_to:string:prefs_dropdownmenu_edit_form 8 action.success=redirect_to:string:prefs_dropdownmenu_edit_form 9 action.failure=traverse_to:string:prefs_dropdownmenu_edit_form
Note: See TracChangeset
for help on using the changeset viewer.