Ignore:
Timestamp:
Aug 18, 2006 6:53:26 PM (18 years ago)
Author:
piv
Message:

added sliding, url processing, visibility functionality under developing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • qPloneTabs/tags/0.2.1/skins/qPloneTabs/javascripts/qplonetabs.js

    r459 r485  
    1 /* Global variables */ 
    2  
    3 var gBeforeReorderData = [];        // storage for actions before sorting 
    4 var gBeforeReorderFragment = null;  // document fragment for insertion in UL after clicking cancel button after reorder 
    5 var gBeforeEditData = {};           // hash for storage tabs fields before editing 
    6 var category = 'portal_tabs'; 
    7  
    8 /* Main part - rules for element on our form */ 
    9  
    101var myrules = { 
    11   '#app #reorder' : function(el){ 
    12     el.onclick = function(ev){ 
    13       var ev = ev ? ev : window.event; 
    14       // remember current actions state for 'cancel sorting' case 
    15 //       gBeforeReorderFragment = document.getElementById('tabslist').innerHTML; 
    16       var lis = $A($('tabslist').getElementsByTagName('LI')); 
    17       gBeforeReorderData = []; 
    18       lis.each(function(el, idx) { 
    19           gBeforeReorderData.push(grepInfo(el)); 
    20       }); 
    21  
    22       shiftClassNames('app', 'viewing', 'sorting'); 
     2  '#reorder' : function(el){ 
     3    el.onclick = function(){ 
     4      Element.classNames('app').set('sorting'); 
    235      Sortable.create('tabslist', {handle: 'drag-handle'}); 
    24       removeEdition('tabslist'); 
    25       Event.stop(ev); 
     6      removeEdition(el); 
    267      return false; 
    278    } 
    289  }, 
    29   '#app #save' : function(el){ 
    30     el.onclick = function(ev){ 
    31       var ev = ev?ev:window.event, params = 'category='+category; 
    32       $A($('tabslist').getElementsByTagName('INPUT')).findAll(function(h){return h.type=='hidden';}).each(function(f,idx){params += '&idxs='+f.value;}); 
     10  '#save' : function(el){ 
     11    el.onclick = function(){ 
     12      var params = ''; 
     13      $A($('tabslist').getElementsByTagName('INPUT')).findAll(function(h){return h.type=='hidden';}).each(function(f,idx){params += idx==0?'idxs='+f.value:'&idxs='+f.value;}); 
    3314      new Ajax.Request('qpt_reorder', 
    3415        {method: 'post', 
    3516         parameters: params, 
    3617         onSuccess: function(request){ 
    37            var lis = $A($('tabslist').getElementsByTagName('LI')), 
    38                inputs = function(li){return $A(li.getElementsByTagName('INPUT'))}; 
    39            lis.each(function(el,idx){ 
    40              inputs(el).each(function(inpt){ 
    41                inpt.type == 'hidden' ? inpt.value = idx : inpt.name = inpt.name.replace(/i\d+_/, 'i'+idx+'_'); 
    42              }); 
    43            }); 
    44            shiftClassNames('app', 'sorting', 'viewing'); 
     18           $A($('tabslist').getElementsByTagName('INPUT')).findAll(function(h){return h.type=='hidden';}).each(function(f,idx){f.value=idx;}); 
     19           Element.classNames('app').set('viewing'); 
    4520           Sortable.destroy('tabslist'); 
    4621           new Effect.Highlight('tabslist',{}); 
    47            updateGlobalSections(); 
     22         }, 
     23         onComplete: function(request){ 
     24           $A($('tabslist').getElementsByTagName('LI')).each(function(li){new Element.ClassNames(li).remove('hover');}); 
     25           Behaviour.apply(); 
     26         } 
     27        } 
     28      ); 
     29      return false; 
     30    } 
     31  }, 
     32  '#cancel' : function(el){ 
     33    el.onclick = function(){ 
     34      new Ajax.Request('qpt_gettabslist', 
     35        {method: 'get', 
     36         onSuccess: function(request){Element.update('tabslist',request.responseText.replace(/collapsedOnLoad/g,'collapsedBlockCollapsible'));}, 
     37         onComplete: function(request){Element.classNames('app').set('viewing');Behaviour.apply();} 
     38        } 
     39      ); 
     40      Sortable.destroy('tabslist'); 
     41      return false; 
     42    } 
     43  }, 
     44  'app #tabslist li' : function(el){ 
     45     if (el.attachEvent){ 
     46      if (!el.hovers) el.hovers = {}; 
     47      if (el.hovers['hover']) return; 
     48      el.hovers['hover'] = true; 
     49      el.attachEvent('onmouseover', function(){el.className += ' hover';}); 
     50      el.attachEvent('onmouseout',  function(){el.className = el.className.replace((new RegExp('\\s+hover')),'');}); 
     51     } 
     52  }, 
     53  '.delete' : function(el){ 
     54    el.onclick = function(ev){ 
     55      var item = el.parentNode, 
     56          num = $A($('tabslist').getElementsByTagName('LI')).indexOf(item); 
     57      new Ajax.Request('qpt_delete', 
     58        {parameters:'idx='+num+'&id=' + item.id.replace('tabslist_', ''), 
     59         onComplete: function(request) { 
     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         } 
     65        } 
     66      ); 
     67      return false; 
     68    } 
     69  }, 
     70  'app #tabslist dt.collapsibleHeader' : function(el){el.onclick = toggleCollapsible;}, 
     71  '#tabslist li span' : function(el){ 
     72    el.onclick = function(ev){ 
     73      var ev = ev?ev:window.event, li = Event.findElement(ev, 'LI'); 
     74      Element.classNames('app').set('editing'); 
     75      removeEdition(el); 
     76      Element.classNames(li).set('current'); 
     77      li.getElementsByTagName('INPUT')[1].focus(); 
     78    } 
     79  }, 
     80  '#tabslist input.editsave' : function(el){ 
     81    el.onclick = function(ev){ 
     82      var ev = ev?ev:window.event, v = validateField, 
     83          li = Event.findElement(ev, 'LI'), tds = document.getElementsByTagName('INPUT'); 
     84      if (v('actname',$F(tds[1])) && v('actid',$F(tds[3]))) { 
     85         var num = $A($('tabslist').getElementsByTagName('LI')).indexOf(li); 
     86         new Ajax.Request('qpt_edit', 
     87           {parameters:'num='+num+'&'+Form.serialize(Event.findElement(ev, 'FORM')), 
     88            onSuccess: function(request){ 
     89              Element.update(li, request.responseText); 
     90              Element.classNames('app').set('viewing'); 
     91              Element.classNames(li).set(''); 
     92              li.id = 'tabslist_'+$F(tds[3]); 
     93           }, 
     94           onFailure: function(request){ 
     95             var message = (/Error Value\s*<\/dt>\s*<dd>(.*?)<\/dd>/i).exec(request.responseText); 
     96             window.alert(message[1]); 
     97           }, 
     98           onComplete: function(){Behaviour.apply();} 
     99          } 
     100        ); 
     101      }; 
     102      return false; 
     103    } 
     104  }, 
     105  '#tabslist input.editcancel' : function(el){ 
     106    el.onclick = function(ev){Behaviour.apply(); 
     107      var ev = ev ? ev:window.event; 
     108      new Ajax.Request('qpt_gettabslist', 
     109        {method: 'get', 
     110         onSuccess: function(request){ 
     111           Element.update('tabslist',request.responseText.replace(/collapsedOnLoad/g,'collapsedBlockCollapsible')); 
     112           Element.classNames('app').set('viewing'); 
     113           Element.classNames(Event.findElement(ev, 'LI')).set(''); 
    48114         }, 
    49115         onComplete: function(request){Behaviour.apply();} 
    50116        } 
    51117      ); 
    52       Event.stop(ev); 
    53118      return false; 
    54119    } 
    55120  }, 
    56   '#app #cancel' : function(el){ 
    57     el.onclick = function(ev){ 
    58       var ev = ev ? ev : window.event; 
    59       Sortable.destroy('tabslist'); 
    60       shiftClassNames('app', 'sorting', 'viewing'); 
    61  
    62       // update action to before sorting state 
    63 //      Element.update('tabslist', gBeforeReorderFragment); 
    64       var tabslist = $('tabslist'); 
    65       tabslist.innerHTML = ""; 
    66       for (var i = 0, li; li = gBeforeReorderData[i]; i++) { 
    67           tabslist.appendChild(recoverAction(li)); 
    68       } 
    69  
    70       el.attachEvent ? ieHover() : ''; 
    71       Behaviour.apply(); 
    72       Event.stop(ev); 
    73       return false; 
    74     } 
    75   }, 
    76   '#app .csshover li' : function(el){ 
    77     if (Element.hasClassName(el, 'onHover')) {Element.removeClassName(el, 'onHover');}; 
    78   }, 
    79   '#app .visibility' : function(el){ 
    80     el.onclick = function(ev) { 
    81       var ev = ev?ev:window.event, li = Event.findElement(ev, 'LI'), 
    82           num = $A($('tabslist').getElementsByTagName('LI')).indexOf(li), 
    83           params = { 
    84             onSuccess: function(request){ 
    85               if (Element.hasClassName(li, 'invisible')) { 
    86                 Element.removeClassName(li, 'invisible'); 
    87               } 
    88               else { 
    89                 Element.addClassName(li, 'invisible'); 
    90               }; 
    91               updateGlobalSections(); 
    92             }, 
    93             onFailure: function(request){ 
    94               var message = (/Error Value\s*<\/dt>\s*<dd>(.*?)<\/dd>/i).exec(request.responseText); 
    95               window.alert(message[1]); 
    96             } 
    97           }; 
    98       if (Event.findElement(ev, 'UL').id == 'roottabs'){ 
    99         params['parameters'] = 'id='+el.id+'&visibility='+el.checked; 
    100         new Ajax.Request('qpt_setvisibility', params); 
    101       } 
    102       else { 
    103         params['parameters'] = 'category='+category+'&num='+num+'&visibility='+el.checked+'&'+Form.serialize(li.getElementsByTagName('FORM')[0]); 
    104         new Ajax.Request('qpt_edit', params); 
    105       }; 
    106       if (ev.stopPropagation) {ev.stopPropagation();} 
    107       else {ev.cancelBubble = true;}; 
    108       return true; 
    109     } 
    110   }, 
    111   '#app .delete' : function(el){ 
    112     el.onclick = function(ev){ 
    113       var ev = ev?ev:window.event, item = el.parentNode, 
    114           num = $A($('tabslist').getElementsByTagName('LI')).indexOf(item); 
    115       new Ajax.Request('qpt_delete', 
    116         {parameters:'category='+category+'&idx='+num+'&id=' + item.id.replace('tabslist_', ''), 
    117          onComplete: function(request) { 
    118            new Effect.Fade(item, {duration: 0.3, afterFinish: function(){ 
    119              Element.remove(item); 
    120              var lis = $A($('tabslist').getElementsByTagName('LI')), 
    121                  inputs = function(li){return $A(li.getElementsByTagName('INPUT'))}; 
    122              if (lis.length > 0) { 
    123                lis.each(function(el,idx){ 
    124                  inputs(el).each(function(inpt){ 
    125                    inpt.type=='hidden'?inpt.value=idx:inpt.name=inpt.name.replace(/i\d+_/, 'i'+idx+'_'); 
    126                  }); 
    127                }); 
    128              } else { 
    129                  Element.addClassName('reorder', 'noitems'); 
    130              }; 
    131            }}); 
    132            updateGlobalSections(); 
    133          } 
    134         } 
    135       ); 
    136       Event.stop(ev); 
    137       return false; 
    138     } 
    139   }, 
    140   '#app .headerAdvanced' : function(el){ 
    141     el.onclick =  function(ev){ 
    142       var ev = ev?ev:window.event, dl = Event.findElement(ev, 'DL'), 
    143           dd = dl.getElementsByTagName('DD')[0]; 
    144       if (!Element.visible(dd)) { 
    145         shiftClassNames(dl, 'collapsedBlock', 'expandedBlock'); 
    146         Effect.BlindDown(dd, {duration:0.1}); 
    147       } 
    148       else { 
    149         shiftClassNames(dl, 'expandedBlock', 'collapsedBlock'); 
    150         Effect.BlindUp(dd, {duration:0.1}); 
    151       }; 
    152       Event.stop(ev); 
    153       return false; 
    154     } 
    155   }, 
    156   '#app #tabslist li' : function(el){ 
    157     el.onclick = function(ev){ 
    158       if (!el.sel) el.sel = true; 
    159       else {return;}; 
    160       var ev = ev?ev:window.event, 
    161           inputs = $A(el.getElementsByTagName('FORM')[0].getElementsByTagName('INPUT')), tmp = []; 
    162       inputs.each(function(e,idx){(0<idx && idx<5)?tmp.push(e.value):''}); 
    163       gBeforeEditData[el.id] = tmp; 
    164       Element.addClassName(el, 'editing'); 
    165       inputs[1].focus(); 
    166       return true; 
     121  '#actname' : function(el){ 
     122    var re = new RegExp('[^a-zA-Z0-9-_~,.\$\(\)# ]','g'), initialVal = $F(el); 
     123    el.onfocus = function(){ 
     124      Element.classNames('app').set('adding'); 
     125      removeEdition(el); 
    167126    }; 
    168   }, 
    169   '#app #tabslist input.editsave' : function(el){ 
    170     el.onclick = function(ev){ 
    171       var ev = ev?ev:window.event, v = validateField, 
    172           li = Event.findElement(ev, 'LI'), tds = Event.findElement(ev, 'FORM').getElementsByTagName('INPUT'), title = $F(tds[1]); 
    173       if (v('actname',title) && v('actid',$F(tds[3]))) { 
    174          var dl = li.getElementsByTagName('DL')[1], dd = dl.getElementsByTagName('DD')[0]; 
    175          var num = $A($('tabslist').getElementsByTagName('LI')).indexOf(li); 
    176          new Ajax.Request('qpt_edit', 
    177            {parameters:'category='+category+'&num='+num+'&'+Form.serialize(Event.findElement(ev, 'FORM')), 
    178             onSuccess: function(request){ 
    179               new Effect.BlindUp(dd, { 
    180                 duration : 0.1, 
    181                 afterFinish : function(){ 
    182                   shiftClassNames(dl, 'expandedBlock', 'collapsedBlock'); 
    183                   Element.removeClassName(li, 'editing'); 
    184                   li.id = 'tabslist_'+title; 
    185                   var spans = li.getElementsByTagName('SPAN'); 
    186                   Element.update(spans[1], title); 
    187                   Element.update(spans[0], $F(tds[2])); 
    188                   Behaviour.apply(); 
    189                 } 
    190               }); 
    191               updateGlobalSections(); 
    192             }, 
    193             onFailure: function(request){ 
    194               var message = (/Error Value\s*<\/dt>\s*<dd>(.*?)<\/dd>/i).exec(request.responseText); 
    195               window.alert(message[1]); 
    196             }, 
    197             onComplete: function(request){if (li.sel) {li.sel = null;};} 
    198            } 
    199          ); 
    200       }; 
    201       Event.stop(ev); 
    202       return false; 
    203     } 
    204   }, 
    205   '#app #tabslist input.editcancel' : function(el){ 
    206     el.onclick = function(ev){ 
    207       var ev = ev?ev:window.event, li = Event.findElement(ev, 'LI'), 
    208           inputs = $A(li.getElementsByTagName('FORM')[0].getElementsByTagName('INPUT')), 
    209           values = $A(gBeforeEditData[li.id]), 
    210           dl = li.getElementsByTagName('DL')[1], dd = dl.getElementsByTagName('DD')[0]; 
    211       values.each(function(el,idx){inputs[idx+1].value = el}); 
    212       if (Element.visible(dd)) { 
    213         Effect.BlindUp(dd, { 
    214           duration : 0.1, 
    215           afterFinish : function(){ 
    216               shiftClassNames(dl, 'expandedBlock', 'collapsedBlock'); 
    217               Element.removeClassName(li, 'editing'); 
    218           } 
    219         }); 
    220       } 
    221       else {Element.removeClassName(li, 'editing');}; 
    222       if (li.sel) {li.sel = null;}; 
    223       Event.stop(ev); 
    224       return false; 
    225     } 
    226   }, 
    227   '#app #addaction' : function(el){ 
    228     el.onsubmit = function(ev){ 
    229         document.getElementById('actname').blur(); 
    230         return false; 
    231     }; 
    232   }, 
    233   '#app #actname' : function(el){ 
    234     var re = new RegExp('[^a-zA-Z0-9-_~,.\\$\\(\\)# ]','g'), initialVal = $F(el); 
    235     el.onfocus = function(){Element.addClassName('addaction', 'adding');}; 
    236127    el.onkeyup = function() { 
    237128      var name = $F(el), id = $F('actid'); 
     
    242133    }; 
    243134  }, 
    244   '#app #buttonadd' : function(el){ 
     135  '#buttonadd' : function(el){ 
    245136    el.onclick = function(ev){ 
    246       var ev = ev?ev:window.event, v = validateField; 
     137      var ev = ev?ev:window.event, dl = Event.findElement(ev, 'FORM').getElementsByTagName('DL')[2], 
     138          v = validateField; 
    247139      if (v('actname',$F('actname')) && v('actid',$F('actid'))) { 
    248140        var idx = $('tabslist').getElementsByTagName('LI').length; 
    249141        new Ajax.Request('qpt_add', 
    250           {parameters:'category='+category+'&idx='+idx+'&'+Form.serialize('addaction'), 
     142          {parameters:'idx='+idx+'&'+Form.serialize('addaction'), 
    251143           onSuccess: function(request){ 
    252              var dl = $('addaction').getElementsByTagName('DL')[3], dd = dl.getElementsByTagName('DD')[0]; 
    253              Effect.BlindUp(dd, { 
    254                duration : 0.1, 
    255                afterFinish : function(){ 
    256                  shiftClassNames(dl, 'expandedBlock', 'collapsedBlock'); 
    257                  new Insertion.Bottom('tabslist', request.responseText); 
    258                  Form.reset('addaction'); 
    259                  Element.removeClassName('addaction', 'adding'); 
    260                  var dls = $A($('tabslist').getElementsByTagName('DL')).findAll( 
    261                    function(dl){return Element.hasClassName(dl, 'collapseAdvanced');} 
    262                  ); 
    263                  collapseLi(dls[dls.length-1]); 
    264                  if ($A($('tabslist').getElementsByTagName('LI').length > 0)) { 
    265                      Element.removeClassName('reorder', 'noitems'); 
    266                  }; 
    267                  ieHover(); 
    268                  Behaviour.apply(); 
    269                } 
    270              }); 
    271              updateGlobalSections(); 
     144             new Insertion.Bottom('tabslist', request.responseText); 
     145             Form.reset('addaction'); 
     146             Element.classNames('app').set('viewing'); 
     147             dl.className = dl.className.replace(/expandedBlockCollapsible/g,'collapsedBlockCollapsible'); 
     148             Behaviour.apply(); 
    272149           }, 
    273150           onFailure: function(request){ 
     
    278155        ); 
    279156      }; 
    280       return true; 
    281     } 
    282   }, 
    283   '#app #buttoncancel' : function(el){ 
    284     el.onclick = function(ev){ 
    285       var ev = ev ? ev : window.event, dl = $('addaction').getElementsByTagName('DL')[3], dd = dl.getElementsByTagName('DD')[0]; 
    286       Effect.BlindUp(dd, { 
    287         duration : 0.1, 
    288         afterFinish : function(){ 
    289           shiftClassNames(dl, 'expandedBlock', 'collapsedBlock'); 
    290           Form.reset('addaction'); 
    291           Element.removeClassName('addaction', 'adding'); 
    292           Behaviour.apply(); 
    293        } 
    294       }); 
    295       Event.stop(ev); 
    296157      return false; 
    297158    } 
    298159  }, 
    299   '#app #generated_tabs' : function(el){ 
     160  '#buttoncancel' : function(el){ 
    300161    el.onclick = function(ev){ 
    301       new Ajax.Request('qpt_setproperty', { 
    302         parameters : 'generated_tabs='+el.checked, 
    303         onSuccess : function(){ 
    304           new Ajax.Updater({success:'roottabs'}, 'qpt_getroottabs', { 
    305             method : 'get', 
    306             onComplete : function(){ 
    307               el.attachEvent?ieHover():''; 
    308               Behaviour.apply(); 
    309               updateGlobalSections(); 
    310             } 
    311           }); 
    312        } 
    313       }); 
     162      var ev = ev ? ev : window.event, dl = Event.findElement(ev, 'FORM').getElementsByTagName('DL')[2]; 
     163      Element.classNames('app').set('viewing'); 
     164      Form.reset('addaction'); 
     165      dl.className = dl.className.replace(/expandedBlockCollapsible/g,'collapsedBlockCollapsible'); 
     166      Behaviour.apply(); 
     167      return false; 
    314168    } 
     169  }, 
     170  '#generated_tabs' : function(el){ 
     171    el.onclick = function(ev){new Ajax.Request('qpt_setproperty', {parameters:'generated_tabs='+el.checked});} 
    315172  } 
    316173}; 
    317174 
    318 /* Registerin previous rules with Behaviour.js */ 
    319  
    320175Behaviour.register(myrules); 
    321  
    322 /* Registering global handlers for Ajax requests through Prototype */ 
    323176 
    324177var globalHandlers = { 
     
    329182Ajax.Responders.register(globalHandlers); 
    330183 
    331 /* Adding event listeners for hovering in IE & collapsing Advanced sections on loading */ 
    332  
    333 Event.observe(window, 'load', collapseAdvanced); 
    334 Event.observe(window, 'load', function() { 
    335     var category_input = document.getElementById('actions_category'); 
    336     if (category_input && typeof(category_input.value) != 'undefined') { 
    337         category_input.value ? category = category_input.value : {}; 
    338     }; 
    339 }); 
    340 Event.observe(window, 'unload', function() { 
    341     // cleanup memory to prevent memory lack 
    342     delete gBeforeReorderFragment; 
    343     delete gBeforeEditData; 
    344     delete gBeforeReorderData 
    345 }); 
    346  
    347 if (window.attachEvent) {Event.observe(window, 'load', ieHover, false);} 
    348  
    349 /* Utility functions */ 
    350  
    351 function ieHover(){ 
    352   $A($('app').getElementsByTagName('LI')).each(function(el){ 
    353     if (el.attachEvent){ 
    354       if (!el.hovers) el.hovers = {}; 
    355       if (el.hovers['hover']) return; 
    356       el.hovers['hover'] = true; 
    357       el.attachEvent('onmouseover', function(){ 
    358         if (!Element.hasClassName(el, 'onHover')) {Element.addClassName(el, 'onHover');}; 
    359       }); 
    360       el.attachEvent('onmouseout',  function(){Element.removeClassName(el, 'onHover');}); 
    361     } 
    362   }); 
    363 }; 
    364  
    365 function collapseLi(dl) { 
    366   var dd = dl.getElementsByTagName('DD')[0]; 
    367   if (!Element.hasClassName(dl, 'collapsedBlock') && Element.visible(dd)) { 
    368     shiftClassNames(dl, 'expandedBlock', 'collapsedBlock'); 
    369   }; 
    370   Element.hide(dd); 
    371 }; 
    372  
    373 function collapseAdvanced() { 
    374   var dls = $A($('app').getElementsByTagName('DL')).findAll( 
    375     function(dl){return Element.hasClassName(dl, 'collapseAdvanced');} 
    376   ); 
    377   $A(dls).each(collapseLi); 
    378 }; 
    379  
    380 function shiftClassNames(el, from, to) { 
    381   Element.removeClassName(el, from); 
    382   Element.addClassName(el, to); 
    383 }; 
    384  
    385184function validateField(id, val) { 
    386185  var re = new RegExp('[^a-zA-Z0-9-_~,.\$\(\)# ]','g'); 
    387186  if (!val) { 
    388187    window.alert(id.replace(/act/,'') + ' field is required!'); 
    389     document.getElementById(id).focus(); 
    390188    return false; 
    391189  } 
    392190  else { 
    393191    er = id != 'actid' ? true : val.search(re) == -1 ? true : false; 
    394     if (!er) { 
    395       window.alert(val+' is not a legal name.\n The following characters are invalid:' + val.match(re).toString()); 
    396       document.getElementById(id).focus(); 
    397     } 
     192    if (!er) window.alert(val+' is not a legal name.\n The following characters are invalid:' + val.match(re).toString()); 
    398193  } 
    399194  return er; 
     
    401196 
    402197function removeEdition(el) { 
    403   var el = el ? el : 'tabslist'; 
    404   $A($(el).getElementsByTagName('LI')).each(function(li,idx){if(li != el) li.onclick=function(event){return false;};}); 
     198  $A($('tabslist').getElementsByTagName('SPAN')).each(function(sp,idx){if(sp != el) sp.onclick='';}); 
    405199}; 
    406  
    407  
    408 // API for updating global_sections tabs 
    409  
    410 function updateGlobalSections() { 
    411     new Ajax.Updater({success : 'portal-globalnav'}, 'qpt_globalsections', { 
    412             method : 'post', 
    413             insertion : Insertion.Instead 
    414     }); 
    415 } 
    416  
    417 // Insertion object defined in prototype javascript library 
    418 Insertion.Instead = Class.create(); 
    419 Insertion.Instead.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { 
    420   initialize: function(element, content) { 
    421     this.element = $(element); 
    422     this.content = content.stripScripts(); 
    423  
    424     var ul = document.createElement("UL"); 
    425     ul.id = "portal-globalnav"; 
    426     ul.innerHTML = this.content; 
    427  
    428     var parent = this.element.parentNode; 
    429     parent.removeChild(this.element); 
    430     parent.appendChild(ul); 
    431  
    432     setTimeout(function() {content.evalScripts()}, 10); 
    433   } 
    434  
    435 }); 
    436  
    437 //********************************************** 
    438  
    439 //    Fixed bug: innerHTML return not actual data, now used DOM 
    440  
    441  
    442 function grepInfo(li) { 
    443      
    444     // grep li state 
    445     var info = {"li.id" : li.id, "li.title": li.title, "li.className" : li.className}; 
    446      
    447     // grep visibility checkbox state 
    448     var vis_box = li.getElementsByTagName("INPUT")[0]; 
    449     info["vis_box.checked"] = vis_box.checked; 
    450     info["vis_box.name"] = vis_box.name; 
    451      
    452     var spans = li.getElementsByTagName("SPAN"); 
    453      
    454     // grep url helper state 
    455     info["url_helper.text"] = spans[0].innerHTML; 
    456      
    457     // grep tab title state 
    458     info["tab_title.text"] = spans[1].innerHTML; 
    459      
    460     // grep edit form state 
    461     var edit_form = li.getElementsByTagName("FORM")[0]; 
    462     info["edit_form.name"] = edit_form.name; 
    463     info["edit_form.action"] = edit_form.action; 
    464      
    465     var inputs = edit_form.getElementsByTagName("INPUT"); 
    466      
    467     // grep hidden input index value 
    468     info["input_idx.value"] = inputs[0].value; 
    469      
    470     // grep action name input state 
    471     info["input_name.name"] = inputs[1].name; 
    472     info["input_name.value"] = inputs[1].value; 
    473      
    474     // grep dl advanced section class name 
    475     info["dl_advanced.className"] = edit_form.getElementsByTagName("DL")[1].className; 
    476     info["dd_advanced.style.display"] = edit_form.getElementsByTagName("DD")[1].style.display; 
    477      
    478     // grep url input state 
    479     info["input_url.name"] = inputs[2].name; 
    480     info["input_url.value"] = inputs[2].value; 
    481      
    482     // grep id input state 
    483     info["input_id.name"] = inputs[3].name; 
    484     info["input_id.value"] = inputs[3].value; 
    485      
    486     // grep condition input state 
    487     info["input_condition.name"] = inputs[4].name; 
    488     info["input_condition.value"] = inputs[4].value; 
    489      
    490     // grep buttons state 
    491     info["save_button.value"] = inputs[5].value; 
    492     info["cancel_button.value"] = inputs[6].value; 
    493      
    494     return info; 
    495 } 
    496  
    497 function recoverAction(info) { 
    498      
    499     // create list item and assign corresponding attributes 
    500     var li = document.createElement("LI"); 
    501     li.id = info["li.id"]; 
    502     li.title = info["li.title"]; 
    503     li.className = info["li.className"]; 
    504      
    505     // create drag handle image and assign corresponding attributes 
    506     var drag_handle = document.createElement("IMG"); 
    507     drag_handle.className = "drag-handle"; 
    508     drag_handle.src = "drag.gif"; 
    509     drag_handle.alt = ""; 
    510     drag_handle.height = "11"; 
    511     drag_handle.width = "25"; 
    512      
    513     li.appendChild(drag_handle); 
    514      
    515     // create bridge div element for visibility checkbox 
    516     var bridge = document.createElement("DIV"); 
    517     bridge.className = "bridge"; 
    518      
    519     // create checkbox for visibility control 
    520     var vis_box = document.createElement("INPUT"); 
    521     vis_box.type = "checkbox"; 
    522     vis_box.className = "visibility"; 
    523     vis_box.value = "1"; 
    524     vis_box.title = "visibility"; 
    525     vis_box.name = info["vis_box.name"]; 
    526      
    527     bridge.appendChild(vis_box); 
    528  
    529     // buggy IE 
    530     if (info["vis_box.checked"]) { 
    531         vis_box.setAttribute("checked", "checked"); 
    532         vis_box.defaultChecked = true; 
    533     } 
    534  
    535     li.appendChild(bridge); 
    536      
    537     // create Delete link 
    538     var del_link = document.createElement("A"); 
    539     del_link.className = "delete"; 
    540     del_link.href = "#"; 
    541     del_link.appendChild(document.createTextNode("Delete")); 
    542      
    543     li.appendChild(del_link); 
    544      
    545     // create url-helper element 
    546     var url_helper = document.createElement("SPAN"); 
    547     url_helper.className = "url-helper"; 
    548     url_helper.appendChild(document.createTextNode(info["url_helper.text"])); 
    549      
    550     li.appendChild(url_helper); 
    551      
    552     // create tab title element 
    553     var tab_title = document.createElement("SPAN"); 
    554     tab_title.className = "tab-title"; 
    555     tab_title.appendChild(document.createTextNode(info["tab_title.text"])); 
    556      
    557     li.appendChild(tab_title); 
    558      
    559     // create edit form 
    560     var edit_form = document.createElement("FORM"); 
    561     edit_form.className = "editform"; 
    562     edit_form.method = "post"; 
    563     edit_form.name = info["edit_form.name"]; 
    564     edit_form.action = info["edit_form.action"]; 
    565      
    566     // create hidden input with index value 
    567     var input_idx = document.createElement("INPUT"); 
    568     input_idx.type = "hidden"; 
    569     input_idx.name = "idx"; 
    570     input_idx.value = info["input_idx.value"]; 
    571      
    572     edit_form.appendChild(input_idx); 
    573      
    574     // create dl element for name input section 
    575     var dl_name = document.createElement("DL"); 
    576     var dt_name = document.createElement("DT"); 
    577     var name_label = document.createElement("LABEL"); 
    578     name_label.appendChild(document.createTextNode("Name")); 
    579      
    580     dt_name.appendChild(name_label); 
    581     dl_name.appendChild(dt_name); 
    582      
    583     // crete input for action name 
    584     var dd_name = document.createElement("DD"); 
    585     var input_name = document.createElement("INPUT"); 
    586     input_name.type = "text"; 
    587     input_name.size = "30"; 
    588     input_name.name = info["input_name.name"]; 
    589     input_name.value = info["input_name.value"]; 
    590      
    591     dd_name.appendChild(input_name); 
    592     dl_name.appendChild(dd_name); 
    593     edit_form.appendChild(dl_name); 
    594      
    595     // create dl element for advanced inputs 
    596     var dl_advanced = document.createElement("DL"); 
    597     dl_advanced.className = info["dl_advanced.className"]; 
    598      
    599     // create collapsible header 
    600     var dt_advanced = document.createElement("DT"); 
    601     dt_advanced.className = "headerAdvanced"; 
    602     dt_advanced.appendChild(document.createTextNode("Advanced")); 
    603      
    604     dl_advanced.appendChild(dt_advanced); 
    605      
    606     // create collapsible content 
    607     var dd_advanced = document.createElement("DD"); 
    608     dd_advanced.className = "contentAdvanced"; 
    609     dd_advanced.style.display = info["dd_advanced.style.display"]; 
    610      
    611     // add URL section 
    612     // add url header 
    613     var dl_url = document.createElement("DL"); 
    614     var dt_url = document.createElement("DT"); 
    615     var label_url = document.createElement("LABEL"); 
    616     label_url.appendChild(document.createTextNode("URL (Expression)")); 
    617      
    618     dt_url.appendChild(label_url); 
    619     dl_url.appendChild(dt_url); 
    620      
    621     //add url value 
    622     var dd_url = document.createElement("DD"); 
    623     var input_url = document.createElement("INPUT"); 
    624     input_url.type = "text"; 
    625     input_url.size = "30"; 
    626     input_url.name = info["input_url.name"]; 
    627     input_url.value = info["input_url.value"]; 
    628      
    629     dd_url.appendChild(input_url); 
    630     dl_url.appendChild(dd_url); 
    631     dd_advanced.appendChild(dl_url); 
    632      
    633     // add ID section 
    634     // add id header 
    635     var dl_id = document.createElement("DL"); 
    636     var dt_id = document.createElement("DT"); 
    637     var label_id = document.createElement("LABEL"); 
    638     label_id.appendChild(document.createTextNode("Id")); 
    639      
    640     dt_id.appendChild(label_id); 
    641     dl_id.appendChild(dt_id); 
    642      
    643     //add id value 
    644     var dd_id = document.createElement("DD"); 
    645     var input_id = document.createElement("INPUT"); 
    646     input_id.type = "text"; 
    647     input_id.name = info["input_id.name"]; 
    648     input_id.value = info["input_id.value"]; 
    649      
    650     dd_id.appendChild(input_id); 
    651     dl_id.appendChild(dd_id); 
    652     dd_advanced.appendChild(dl_id); 
    653      
    654     // add Condition section 
    655     // add condition header 
    656     var dl_condition = document.createElement("DL"); 
    657     var dt_condition = document.createElement("DT"); 
    658     var label_condition = document.createElement("LABEL"); 
    659     label_condition.appendChild(document.createTextNode("Condition (Expression)")); 
    660      
    661     dt_condition.appendChild(label_condition); 
    662     dl_condition.appendChild(dt_condition); 
    663      
    664     //add condition value 
    665     var dd_condition = document.createElement("DD"); 
    666     var input_condition = document.createElement("INPUT"); 
    667     input_condition.type = "text"; 
    668     input_condition.size = "30"; 
    669     input_condition.name = info["input_condition.name"]; 
    670     input_condition.value = info["input_condition.value"]; 
    671      
    672     dd_condition.appendChild(input_condition); 
    673     dl_condition.appendChild(dd_condition); 
    674     dd_advanced.appendChild(dl_condition); 
    675      
    676     // add visual clear div to advanced dd element 
    677     var visual_clear = document.createElement("DIV"); 
    678     visual_clear.className = "visualClear"; 
    679     visual_clear.appendChild = document.createTextNode("<!-- -->"); 
    680      
    681     dd_advanced.appendChild(visual_clear); 
    682     dl_advanced.appendChild(dd_advanced); 
    683     edit_form.appendChild(dl_advanced); 
    684      
    685     // create div element for form controls 
    686     var form_controls = document.createElement("DIV"); 
    687      
    688     // add save button 
    689     var save_button = document.createElement("INPUT"); 
    690     save_button.type = "submit"; 
    691     save_button.className = "editsave"; 
    692     save_button.value = info["save_button.value"]; 
    693     form_controls.appendChild(save_button); 
    694      
    695     // add cancel button 
    696     var cancel_button = document.createElement("INPUT"); 
    697     cancel_button.type = "submit"; 
    698     cancel_button.className = "editcancel"; 
    699     cancel_button.value = info["cancel_button.value"]; 
    700     form_controls.appendChild(cancel_button); 
    701      
    702     edit_form.appendChild(form_controls); 
    703     li.appendChild(edit_form); 
    704  
    705     return li; 
    706 } 
Note: See TracChangeset for help on using the changeset viewer.