Changeset 778

Show
Ignore:
Timestamp:
01/29/07 10:09:45
Author:
piv
Message:

added support for any actions category

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneTabs/trunk/Extensions/Install.py

    r777 r778  
    55from Products.CMFCore.DirectoryView import addDirectoryViews 
    66 
     7from Products.CMFPlone.migrations.migration_util import safeEditProperty 
    78from Products.qPloneTabs.config import * 
    89 
    9 configlets = ({'id':PROJECT_NAME, 
     10configlets = ({'id':PROJECTNAME, 
    1011    'name':'Plone Tabs', 
    1112    'action':'string:${portal_url}/prefs_tabs_form', 
     
    1314    'category':'Products', 
    1415    'visible':1, 
    15     'appId':PROJECT_NAME, 
     16    'appId':PROJECTNAME, 
    1617    'permission':VIEW_PERMISSION, 
    1718    'imageUrl':'qplonetabs.gif' },) 
     19 
     20def addPropertySheet(self, out): 
     21    """ Add tabs_properties property sheet to portal_properties and some needed field to it """ 
     22    portal_props = getToolByName(self, 'portal_properties') 
     23    if not hasattr(portal_props, PROPERTY_SHEET): 
     24        portal_props.addPropertySheet(PROPERTY_SHEET, SHEET_TITLE) 
     25        out.write('Added %s property sheet to portal_properties\n' % PROPERTY_SHEET) 
     26    else: 
     27        out.write('Skipped adding %s property sheet to portal_properties\n' % PROPERTY_SHEET) 
     28    sheet = getattr(portal_props, PROPERTY_SHEET) 
     29 
     30    if not hasattr(sheet, FIELD_NAME): 
     31        safeEditProperty(sheet, FIELD_NAME, PROPERTY_FIELD, 'lines') 
     32        out.write('Added %s property field to %s property sheet\n' % (FIELD_NAME, PROPERTY_SHEET)) 
     33    else: 
     34        out.write('Skipped adding %s property field to %s property sheet\n' % (FIELD_NAME, PROPERTY_SHEET)) 
    1835 
    1936def setupSkin(self, out, skinFolder): 
     
    7996    skinstool = getToolByName(self, 'portal_skins') 
    8097    addDirectoryViews(skinstool, SKINS_DIR, GLOBALS) 
    81     setupSkin(self, out, PROJECT_NAME) 
     98    setupSkin(self, out, PROJECTNAME) 
    8299 
    83100    mtool = getToolByName(self, 'portal_migration') 
    84101    plone_version = mtool.getFileSystemVersion() 
    85102    if plone_version == '2.0.5': 
    86          setupSkin(self, out, PROJECT_NAME+'/2.0.5') 
    87          out.write('Added %s/2.0.5 Layer to portal_skins\n' % PROJECT_NAME) 
     103         setupSkin(self, out, PROJECTNAME+'/2.0.5') 
     104         out.write('Added %s/2.0.5 Layer to portal_skins\n' % PROJECTNAME) 
     105 
     106    addPropertySheet(self, out) 
    88107 
    89108    addConfiglet(self, out) 
     
    99118 
    100119    out.write('removeSkin... \n') 
    101     removeSkin(self, [PROJECT_NAME, PROJECT_NAME+'/2.0.5']) 
     120    removeSkin(self, [PROJECTNAME, PROJECTNAME+'/2.0.5']) 
    102121 
    103122    return out.getvalue() 
  • qPloneTabs/trunk/HISTORY.txt

    r777 r778  
     10.3.0 
     2 
     3  * added support for any actions category 
     4 
     5  * fixed reordering bug on server with empty list 
     6   
     7  * hidden reordering controls when the list of actions is empty 
     8 
    190.2.2 
    210 
  • qPloneTabs/trunk/TODO.txt

    r777 r778  
    11  * Opera compatibility 
    22  * 'portal-globalnav' visualization without page reloading 
     3  * using kukit framework 
  • qPloneTabs/trunk/__init__.py

    r777 r778  
    55 
    66allow_module('Products.qPloneTabs.utils') 
     7allow_module('Products.qPloneTabs.config') 
    78registerDirectory(SKINS_DIR, GLOBALS) 
    89 
    9 from Products.qPloneTabs.utils import getPortalTab
     10from Products.qPloneTabs.utils import getPortalAction
    1011from Products.qPloneTabs.utils import getRootTabs 
  • qPloneTabs/trunk/config.py

    r777 r778  
    33VIEW_PERMISSION = CMFCorePermissions.ManagePortal 
    44 
    5 PROJECT_NAME = 'qPloneTabs' 
     5PROJECTNAME = 'qPloneTabs' 
    66SKINS_DIR = 'skins' 
    77 
    88GLOBALS = globals() 
     9 
     10PROPERTY_SHEET = 'tabs_properties' 
     11SHEET_TITLE    = 'Portal Tabs Properties' 
     12FIELD_NAME = 'titles' 
     13PROPERTY_FIELD = ['portal_tabs|Portal Tabs Configuration', 'portal_footer|Portal Footer Configuration'] 
  • qPloneTabs/trunk/skins/qPloneTabs/javascripts/qplonetabs.js

    r777 r778  
    33var gBeforeReorderFragment = null;  // document fragment for insertion in UL after clicking cancel button after reorder 
    44var gBeforeEditData = {};  // hash for storage tabs fields before editing 
     5var category = 'portal_tabs'; 
    56 
    67/* Main part - rules for element on our form */ 
     
    2021  '#app #save' : function(el){ 
    2122    el.onclick = function(ev){ 
    22       var ev = ev?ev:window.event, params = ''
    23       $A($('tabslist').getElementsByTagName('INPUT')).findAll(function(h){return h.type=='hidden';}).each(function(f,idx){params += idx==0?'idxs='+f.value:'&idxs='+f.value;}); 
     23      var ev = ev?ev:window.event, params = 'category='+category
     24      $A($('tabslist').getElementsByTagName('INPUT')).findAll(function(h){return h.type=='hidden';}).each(function(f,idx){params += '&idxs='+f.value;}); 
    2425      new Ajax.Request('qpt_reorder', 
    2526        {method: 'post', 
     
    8283      } 
    8384      else { 
    84         params['parameters'] = 'num='+num+'&visibility='+el.checked+'&'+Form.serialize(li.getElementsByTagName('FORM')[0]); 
     85        params['parameters'] = 'category='+category+'&num='+num+'&visibility='+el.checked+'&'+Form.serialize(li.getElementsByTagName('FORM')[0]); 
    8586        new Ajax.Request('qpt_edit', params); 
    8687      }; 
     
    9596          num = $A($('tabslist').getElementsByTagName('LI')).indexOf(item); 
    9697      new Ajax.Request('qpt_delete', 
    97         {parameters:'idx='+num+'&id=' + item.id.replace('tabslist_', ''), 
     98        {parameters:'category='+category+'&idx='+num+'&id=' + item.id.replace('tabslist_', ''), 
    9899         onComplete: function(request) { 
    99100           new Effect.Fade(item, {duration: 0.3, afterFinish: function(){ 
     
    151152         var num = $A($('tabslist').getElementsByTagName('LI')).indexOf(li); 
    152153         new Ajax.Request('qpt_edit', 
    153            {parameters:'num='+num+'&'+Form.serialize(Event.findElement(ev, 'FORM')), 
     154           {parameters:'category='+category+'&num='+num+'&'+Form.serialize(Event.findElement(ev, 'FORM')), 
    154155            onSuccess: function(request){ 
    155156              new Effect.BlindUp(dd, { 
     
    223224        var idx = $('tabslist').getElementsByTagName('LI').length; 
    224225        new Ajax.Request('qpt_add', 
    225           {parameters:'idx='+idx+'&'+Form.serialize('addaction'), 
     226          {parameters:'category='+category+'&idx='+idx+'&'+Form.serialize('addaction'), 
    226227           onSuccess: function(request){ 
    227228             var dl = $('addaction').getElementsByTagName('DL')[3], dd = dl.getElementsByTagName('DD')[0]; 
     
    302303 
    303304Event.observe(window, 'load', collapseAdvanced); 
     305Event.observe(window, 'load', function() { 
     306    var category_input = document.getElementById('actions_category'); 
     307    if (category_input && typeof(category_input.value) != 'undefined') { 
     308        category_input.value ? category = category_input.value : {}; 
     309    }; 
     310}); 
    304311Event.observe(window, 'unload', function(){gBeforeReorderFragment = null; gBeforeEditData = null;}); 
    305312 
  • qPloneTabs/trunk/skins/qPloneTabs/prefs_tabs_form.cpt

    r777 r778  
    2222<body> 
    2323  <div metal:fill-slot="prefs_configlet_main" 
    24        tal:define="errors python:request.get('errors', {})"> 
    25  
     24       tal:define="errors python:request.get('errors', {}); 
     25                   category here/REQUEST/category|nothing; 
     26                   category python:test(category and category!='', category, 'portal_tabs')"> 
    2627    <div id="app" class="viewing"> 
    27       <h1 i18n:translate="heading_plonetabs">Plone Tabs Configuration <span id="busy"><img src='busy_icon.gif' alt="" /></span></h1> 
     28      <h1 i18n:translate="heading_plonetabs"> 
     29        <span tal:content="python:context.getPageTitle(category)" /><span id="busy"><img src='busy_icon.gif' alt="" /></span></h1> 
    2830      <a href="" 
    2931       class="link-parent" 
     
    3234          Up to Site Setup 
    3335      </a> 
     36      <input type="hidden" name="category" value="portal_tabs" id="actions_category" 
     37             tal:attributes="value category" /> 
    3438      <div class="reorder-controls"> 
    3539        <a href="#" id="reorder">Reorder</a> 
     
    4044      </div> 
    4145      <ul class="csshover" 
    42           id="tabslist" tal:content="structure here/qpt_gettabslist" /> 
     46          id="tabslist" tal:content="structure python:here.qpt_gettabslist(category=category)" /> 
    4347      <form id="addaction" 
    4448            method="post" 
     
    7680                       error errors/generated_tabs | nothing;" 
    7781           tal:attributes="class python:test(error, 'field error', 'field')" 
    78            tal:on-error="string:"> 
     82           tal:on-error="string:" 
     83           tal:condition="python:category == 'portal_tabs'"> 
    7984        <input type="checkbox" 
    8085               id="generated_tabs" 
     
    9196      <ul class="csshover" id="roottabs" 
    9297          tal:on-error="string:" 
    93           tal:content="structure here/qpt_getroottabs" /> 
     98          tal:content="structure here/qpt_getroottabs" 
     99          tal:condition="python:category == 'portal_tabs'" /> 
    94100    </div> 
    95101 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_add.py

    r777 r778  
    55##bind script=script 
    66##bind subpath=traverse_subpath 
    7 ##parameters= idx, name, action='', id, condition='', visible=False 
     7##parameters= idx, name, action='', id, category='portal_tabs', condition='', visible=False 
    88##title= 
    99## 
     
    2323    visible = False 
    2424params = {'id':id, 'name':name, 'action':action, 'condition':condition, 
    25           'permission':'View', 'category':'portal_tabs', 'visible':visible} 
     25          'permission':'View', 'category':category, 'visible':visible} 
    2626act_tool = getToolByName(context, 'portal_actions') 
    2727act_tool.addAction(**params) 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_delete.py

    r777 r778  
    55##bind script=script 
    66##bind subpath=traverse_subpath 
    7 ##parameters= idx, id 
     7##parameters= idx, id, category='portal_tabs' 
    88##title= 
    99## 
     
    1111from Products.qPloneTabs.utils import deleteAction 
    1212 
    13 return deleteAction(context, idx, id
     13return deleteAction(context, idx, id, category
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_edit.py

    r777 r778  
    55##bind script=script 
    66##bind subpath=traverse_subpath 
    7 ##parameters= idx, num, visibility=[] 
     7##parameters= idx, num, visibility=[], category='portal_tabs' 
    88##title= 
    99## 
    1010 
    1111req = context.REQUEST 
    12 params = {'self':context,'num':num
     12params = {'self':context,'num':num, 'category':category
    1313fields = ['name', 'action', 'id', 'condition'] 
    1414if visibility != []: params['visibility'] = visibility 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_gettabslist.pt

    r777 r778  
    1 <tal:tabs tal:define="dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT')" 
    2           tal:repeat="tab python:modules['Products.qPloneTabs'].getPortalTabs(here)"> 
     1<tal:tabs tal:define="dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT'); 
     2                      category python:options.get('category', None) or 'portal_tabs'" 
     3          tal:repeat="tab python:modules['Products.qPloneTabs'].getPortalActions(here, category)"> 
    34<li tal:define="id tab/id; 
    45                visible tab/visible|nothing; 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_reorder.py

    r777 r778  
    55##bind script=script 
    66##bind subpath=traverse_subpath 
    7 ##parameters= idxs 
     7##parameters= idxs=[], category='portal_tabs' 
    88##title= 
    99## 
    1010 
     11if not idxs: return 'No items' 
     12 
    1113from Products.qPloneTabs.utils import reorderActions 
    1214 
    13 return reorderActions(context, idxs
     15return reorderActions(context, idxs, category
  • qPloneTabs/trunk/utils.py

    r777 r778  
    55from Products.CMFCore.utils import getToolByName 
    66 
    7 def getPortalTabs(self): 
     7def getPortalActions(self, category='portal_tabs'): 
    88    """ Return all portal actions with 'portal_tabs' category """ 
    9     return filter(lambda a: a.category == 'portal_tabs', getToolByName(self, 'portal_actions')._cloneActions()) 
     9    return filter(lambda a: a.category == category, getToolByName(self, 'portal_actions')._cloneActions()) 
    1010 
    11 def editAction(self, num, name, id, action='', condition='', visibility=[]): 
     11def editAction(self, num, name, id, action='', condition='', visibility=[], category='portal_tabs'): 
    1212    """ Function for editing given action """ 
    1313    actions = getToolByName(self, 'portal_actions')._actions 
    14     tabs = filter(lambda a: a.category == 'portal_tabs', actions) 
     14    tabs = filter(lambda a: a.category == category, actions) 
    1515    tab = tabs[int(num)] 
    1616    if visibility != []: 
     
    2525    return True 
    2626 
    27 def reorderActions(self, idxs): 
     27def reorderActions(self, idxs, category='portal_tabs'): 
    2828    """ Reorder portal_tabs actions in given order """ 
    2929    idxs = list(map(int,idxs)) 
    3030    portal_actions = getToolByName(self, 'portal_actions') 
    3131    actions = portal_actions._cloneActions() 
    32     tabs = [[action, actions.index(action)] for action in actions if action.category == 'portal_tabs'
     32    tabs = [[action, actions.index(action)] for action in actions if action.category == category
    3333    for idx in range(len(idxs)): 
    3434        actions[tabs[idx][1]] = tabs[idxs[idx]][0] 
     
    3636    return idxs 
    3737 
    38 def deleteAction(self, idx, id): 
     38def deleteAction(self, idx, id, category='portal_tabs'): 
    3939    """ Delete portal_tabs action with given index """ 
    4040    portal_actions = getToolByName(self, 'portal_actions') 
    4141    actions = portal_actions._cloneActions() 
    42     tabs = filter(lambda a: a.category == 'portal_tabs', actions) 
     42    tabs = filter(lambda a: a.category == category, actions) 
    4343    if tabs[int(idx)].id == id: 
    4444        portal_actions.deleteActions([actions.index(tabs[int(idx)]),]) 
  • qPloneTabs/trunk/version.txt

    r777 r778  
    1 0.2.2 
     10.3.0