Changeset 459

Show
Ignore:
Timestamp:
08/10/06 11:48:39
Author:
piv
Message:

realise 0.2

Files:

Legend:

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

    r458 r459  
    2121 
    2222    skinstool=getToolByName(self, 'portal_skins') 
    23     addDirectoryViews(skinstool, SKINS_DIR, GLOBALS) 
    2423    for skin in skinstool.getSkinSelections(): 
    2524        path = skinstool.getSkinPath(skin) 
     
    7776    out = StringIO() 
    7877 
     78    out.write('setupSkin... \n') 
     79    skinstool = getToolByName(self, 'portal_skins') 
     80    addDirectoryViews(skinstool, SKINS_DIR, GLOBALS) 
     81    setupSkin(self, out, PROJECT_NAME) 
     82 
     83    mtool = getToolByName(self, 'portal_migration') 
     84    plone_version = mtool.getFileSystemVersion() 
     85    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) 
     88 
    7989    addConfiglet(self, out) 
    80  
    81     out.write('setupSkin... \n') 
    82     setupSkin(self, out, PROJECT_NAME) 
    8390 
    8491    return out.getvalue() 
     
    9299 
    93100    out.write('removeSkin... \n') 
    94     removeSkin(self, [PROJECT_NAME,]) 
     101    removeSkin(self, [PROJECT_NAME, PROJECT_NAME+'/2.0.5']) 
    95102 
    96103    return out.getvalue() 
  • qPloneTabs/trunk/HISTORY.txt

    r458 r459  
     10.2.0 
     2 
     3  * fixed bug with reordering actions after delete 
     4   
     5  * fixed bug with 'Advanced' section 
     6   
     7  * compatible with Plone 2.0.5 
     8   
     9  * focus 'name' text field on editing 
     10 
    1110.1.0 
    212 
  • qPloneTabs/trunk/TODO.txt

    r458 r459  
    22  * Opera compatibility 
    33  * 'portal-globalnav' visualization without page reloading 
     4  * sliding 'Advanced' section 
     5  * intelligent url processing 
  • qPloneTabs/trunk/skins/qPloneTabs/javascripts/qplonetabs.js

    r458 r459  
    5858        {parameters:'idx='+num+'&id=' + item.id.replace('tabslist_', ''), 
    5959         onComplete: function(request) { 
    60            new Effect.Fade(item, {duration: 0.7, afterFinish: function(){Element.remove(item);}}); 
    61              } 
     60           new Effect.Fade(item, {duration: 0.7, afterFinish: function(){ 
     61             Element.remove(item); 
     62             $A($('tabslist').getElementsByTagName('INPUT')).findAll(function(h){return h.type=='hidden';}).each(function(f,idx){f.value=idx;}); 
     63           }}); 
     64         } 
    6265        } 
    6366      ); 
     
    6770  'app #tabslist dt.collapsibleHeader' : function(el){el.onclick = toggleCollapsible;}, 
    6871  '#tabslist li span' : function(el){ 
    69     el.onclick = function(){ 
    70       var li = el.parentNode
     72    el.onclick = function(ev){ 
     73      var ev = ev?ev:window.event, li = Event.findElement(ev, 'LI')
    7174      Element.classNames('app').set('editing'); 
    7275      removeEdition(el); 
    7376      Element.classNames(li).set('current'); 
     77      li.getElementsByTagName('INPUT')[1].focus(); 
    7478    } 
    7579  }, 
     
    101105  '#tabslist input.editcancel' : function(el){ 
    102106    el.onclick = function(ev){Behaviour.apply(); 
    103       var ev = ev?ev:window.event; 
     107      var ev = ev ? ev:window.event; 
    104108      new Ajax.Request('qpt_gettabslist', 
    105109        {method: 'get', 
     
    130134  }, 
    131135  '#buttonadd' : function(el){ 
    132     el.onclick = function(){ 
    133       var v = validateField; 
     136    el.onclick = function(ev){ 
     137      var ev = ev?ev:window.event, dl = Event.findElement(ev, 'FORM').getElementsByTagName('DL')[2], 
     138          v = validateField; 
    134139      if (v('actname',$F('actname')) && v('actid',$F('actid'))) { 
    135140        var idx = $('tabslist').getElementsByTagName('LI').length; 
     
    140145             Form.reset('addaction'); 
    141146             Element.classNames('app').set('viewing'); 
     147             dl.className = dl.className.replace(/expandedBlockCollapsible/g,'collapsedBlockCollapsible'); 
    142148             Behaviour.apply(); 
    143149           }, 
     
    153159  }, 
    154160  '#buttoncancel' : function(el){ 
    155     el.onclick = function(){ 
     161    el.onclick = function(ev){ 
     162      var ev = ev ? ev : window.event, dl = Event.findElement(ev, 'FORM').getElementsByTagName('DL')[2]; 
    156163      Element.classNames('app').set('viewing'); 
    157164      Form.reset('addaction'); 
     165      dl.className = dl.className.replace(/expandedBlockCollapsible/g,'collapsedBlockCollapsible'); 
    158166      Behaviour.apply(); 
    159167      return false; 
  • qPloneTabs/trunk/skins/qPloneTabs/prefs_tabs_form.cpt

    r458 r459  
    1010<head> 
    1111  <metal:javascript_head_slot fill-slot="javascript_head_slot"> 
     12        <script type="text/javascript" 
     13                tal:condition="exists: portal/register_function.js" 
     14                tal:attributes="src string:$portal_url/register_function.js"></script> 
     15        <script type="text/javascript" 
     16                tal:condition="exists: portal/nodeutilities.js" 
     17                tal:attributes="src string:$portal_url/nodeutilities.js"></script> 
     18        <script type="text/javascript" 
     19                tal:condition="exists: portal/cssQuery.js" 
     20                tal:attributes="src string:$portal_url/cssQuery.js"></script> 
     21        <script type="text/javascript" 
     22                tal:condition="exists: portal/collapsiblesections.js" 
     23                tal:attributes="src string:$portal_url/collapsiblesections.js"></script> 
    1224        <script type="text/javascript" src="javascripts/prototype.js"></script> 
    1325        <script type="text/javascript" src="javascripts/scriptaculous.js"></script> 
     
    5365            <dd><input id="actaction" type="text" value="" size="30" 
    5466                        name="action" /></dd></dl> 
    55         
     67 
    5668        <dl class="advanced collapsible collapsedOnLoad"> 
    5769          <dt class="collapsibleHeader">Advanced</dt> 
     
    7688                       generated_tabs request/generated_tabs | generated_tabs; 
    7789                       error errors/generated_tabs | nothing;" 
    78            tal:attributes="class python:test(error, 'field error', 'field')"> 
     90           tal:attributes="class python:test(error, 'field error', 'field')" 
     91           tal:on-error="string:"> 
    7992        <input type="checkbox" 
    8093               id="generated_tabs" 
  • qPloneTabs/trunk/skins/qPloneTabs/qplonetabs.css.dtml

    r458 r459  
    11/* <dtml-with base_properties> (do not remove this :) */ 
    22/* <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */ 
     3 
     4<dtml-var collapsible.css missing > 
    35 
    46#app ul.csshover          .delete {display: none;} 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_add.py

    r458 r459  
    3232        <dd><input type="text"     value="%(name)s"      name="i%(idx)s_name"                /></dd> 
    3333      </dl> 
    34       <br /> 
    3534      <dl class="collapsible collapsedBlockCollapsible"> 
    3635        <dt class="collapsibleHeader">Advanced</dt> 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_delete.py

    r458 r459  
    99## 
    1010 
    11 act_tool = context.portal_actions 
    12 actions = act_tool.listActionInfos([],context,0,0,0) 
    13 tabs = filter(lambda a: a['category'] == 'portal_tabs', actions) 
    14 if tabs[int(idx)]['id'] == id: 
    15     act_tool.deleteActions([actions.index(tabs[int(idx)]),]) 
     11from Products.qPloneTabs.utils import deleteAction 
     12 
     13return deleteAction(context, idx, id) 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_edit.py

    r458 r459  
    3232        <dd><input type="text"     value="%(name)s"      name="i%(idx)s_name"                /></dd> 
    3333      </dl> 
    34       <br /> 
    3534      <dl class="collapsible collapsedBlockCollapsible"> 
    3635        <dt class="collapsibleHeader">Advanced</dt> 
  • qPloneTabs/trunk/utils.py

    r458 r459  
    22   Utility functions for portal_tab actions modifications. 
    33""" 
    4  
     4from Products.CMFCore.Expression import Expression 
    55from Products.CMFCore.utils import getToolByName 
    66 
     
    1313    actions = getToolByName(self, 'portal_actions')._actions 
    1414    tabs = filter(lambda a: a.category == 'portal_tabs', actions) 
    15     tabs[int(num)].edit(id=id,title=name, action=action, condition=condition) 
     15    tab = tabs[int(num)] 
     16    if id: tab.id = id 
     17    if name: tab.title = name 
     18    if isinstance(condition, basestring): tab.condition = Expression(condition) 
     19    if isinstance(action, basestring): tab.setActionExpression(Expression(action)) 
    1620    return True 
    1721 
     
    2630    portal_actions._actions = tuple(actions) 
    2731    return idxs 
     32 
     33def deleteAction(self, idx, id): 
     34    """ Delete portal_tabs action with given index """ 
     35    portal_actions = getToolByName(self, 'portal_actions') 
     36    actions = portal_actions._cloneActions() 
     37    tabs = filter(lambda a: a.category == 'portal_tabs', actions) 
     38    if tabs[int(idx)].id == id: 
     39        portal_actions.deleteActions([actions.index(tabs[int(idx)]),]) 
     40    return id