Changeset 459
- Timestamp:
- 08/10/06 11:48:39
- Files:
-
- qPloneTabs/trunk/Extensions/Install.py (modified) (3 diffs)
- qPloneTabs/trunk/HISTORY.txt (modified) (1 diff)
- qPloneTabs/trunk/TODO.txt (modified) (1 diff)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5 (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/collapsible.css.dtml (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/collapsiblesections.js (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/cssQuery.js (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/nodeutilities.js (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/prefs_main_template.pt (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/prefs_main_template.pt.metadata (added)
- qPloneTabs/trunk/skins/qPloneTabs/2.0.5/register_function.js (added)
- qPloneTabs/trunk/skins/qPloneTabs/javascripts/qplonetabs.js (modified) (6 diffs)
- qPloneTabs/trunk/skins/qPloneTabs/prefs_tabs_form.cpt (modified) (3 diffs)
- qPloneTabs/trunk/skins/qPloneTabs/qplonetabs.css.dtml (modified) (1 diff)
- qPloneTabs/trunk/skins/qPloneTabs/qpt_add.py (modified) (1 diff)
- qPloneTabs/trunk/skins/qPloneTabs/qpt_delete.py (modified) (1 diff)
- qPloneTabs/trunk/skins/qPloneTabs/qpt_edit.py (modified) (1 diff)
- qPloneTabs/trunk/utils.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qPloneTabs/trunk/Extensions/Install.py
r458 r459 21 21 22 22 skinstool=getToolByName(self, 'portal_skins') 23 addDirectoryViews(skinstool, SKINS_DIR, GLOBALS)24 23 for skin in skinstool.getSkinSelections(): 25 24 path = skinstool.getSkinPath(skin) … … 77 76 out = StringIO() 78 77 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 79 89 addConfiglet(self, out) 80 81 out.write('setupSkin... \n')82 setupSkin(self, out, PROJECT_NAME)83 90 84 91 return out.getvalue() … … 92 99 93 100 out.write('removeSkin... \n') 94 removeSkin(self, [PROJECT_NAME, ])101 removeSkin(self, [PROJECT_NAME, PROJECT_NAME+'/2.0.5']) 95 102 96 103 return out.getvalue() qPloneTabs/trunk/HISTORY.txt
r458 r459 1 0.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 1 11 0.1.0 2 12 qPloneTabs/trunk/TODO.txt
r458 r459 2 2 * Opera compatibility 3 3 * 'portal-globalnav' visualization without page reloading 4 * sliding 'Advanced' section 5 * intelligent url processing qPloneTabs/trunk/skins/qPloneTabs/javascripts/qplonetabs.js
r458 r459 58 58 {parameters:'idx='+num+'&id=' + item.id.replace('tabslist_', ''), 59 59 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 } 62 65 } 63 66 ); … … 67 70 'app #tabslist dt.collapsibleHeader' : function(el){el.onclick = toggleCollapsible;}, 68 71 '#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'); 71 74 Element.classNames('app').set('editing'); 72 75 removeEdition(el); 73 76 Element.classNames(li).set('current'); 77 li.getElementsByTagName('INPUT')[1].focus(); 74 78 } 75 79 }, … … 101 105 '#tabslist input.editcancel' : function(el){ 102 106 el.onclick = function(ev){Behaviour.apply(); 103 var ev = ev ?ev:window.event;107 var ev = ev ? ev:window.event; 104 108 new Ajax.Request('qpt_gettabslist', 105 109 {method: 'get', … … 130 134 }, 131 135 '#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; 134 139 if (v('actname',$F('actname')) && v('actid',$F('actid'))) { 135 140 var idx = $('tabslist').getElementsByTagName('LI').length; … … 140 145 Form.reset('addaction'); 141 146 Element.classNames('app').set('viewing'); 147 dl.className = dl.className.replace(/expandedBlockCollapsible/g,'collapsedBlockCollapsible'); 142 148 Behaviour.apply(); 143 149 }, … … 153 159 }, 154 160 '#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]; 156 163 Element.classNames('app').set('viewing'); 157 164 Form.reset('addaction'); 165 dl.className = dl.className.replace(/expandedBlockCollapsible/g,'collapsedBlockCollapsible'); 158 166 Behaviour.apply(); 159 167 return false; qPloneTabs/trunk/skins/qPloneTabs/prefs_tabs_form.cpt
r458 r459 10 10 <head> 11 11 <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> 12 24 <script type="text/javascript" src="javascripts/prototype.js"></script> 13 25 <script type="text/javascript" src="javascripts/scriptaculous.js"></script> … … 53 65 <dd><input id="actaction" type="text" value="" size="30" 54 66 name="action" /></dd></dl> 55 67 56 68 <dl class="advanced collapsible collapsedOnLoad"> 57 69 <dt class="collapsibleHeader">Advanced</dt> … … 76 88 generated_tabs request/generated_tabs | generated_tabs; 77 89 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:"> 79 92 <input type="checkbox" 80 93 id="generated_tabs" qPloneTabs/trunk/skins/qPloneTabs/qplonetabs.css.dtml
r458 r459 1 1 /* <dtml-with base_properties> (do not remove this :) */ 2 2 /* <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */ 3 4 <dtml-var collapsible.css missing > 3 5 4 6 #app ul.csshover .delete {display: none;} qPloneTabs/trunk/skins/qPloneTabs/qpt_add.py
r458 r459 32 32 <dd><input type="text" value="%(name)s" name="i%(idx)s_name" /></dd> 33 33 </dl> 34 <br />35 34 <dl class="collapsible collapsedBlockCollapsible"> 36 35 <dt class="collapsibleHeader">Advanced</dt> qPloneTabs/trunk/skins/qPloneTabs/qpt_delete.py
r458 r459 9 9 ## 10 10 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)]),]) 11 from Products.qPloneTabs.utils import deleteAction 12 13 return deleteAction(context, idx, id) qPloneTabs/trunk/skins/qPloneTabs/qpt_edit.py
r458 r459 32 32 <dd><input type="text" value="%(name)s" name="i%(idx)s_name" /></dd> 33 33 </dl> 34 <br />35 34 <dl class="collapsible collapsedBlockCollapsible"> 36 35 <dt class="collapsibleHeader">Advanced</dt> qPloneTabs/trunk/utils.py
r458 r459 2 2 Utility functions for portal_tab actions modifications. 3 3 """ 4 4 from Products.CMFCore.Expression import Expression 5 5 from Products.CMFCore.utils import getToolByName 6 6 … … 13 13 actions = getToolByName(self, 'portal_actions')._actions 14 14 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)) 16 20 return True 17 21 … … 26 30 portal_actions._actions = tuple(actions) 27 31 return idxs 32 33 def 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
