Changeset 1070

Show
Ignore:
Timestamp:
03/03/08 04:16:18
Author:
piv
Message:

fixed js bug: checked attribute (checkbox) not working in IE

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneTabs/trunk/HISTORY.txt

    r779 r1070  
     10.3.1 
     2 
     3  * fixed js bug: after cancel of sort action innerHTML return not actual data for updating action to previous state, 
     4                  now instead of innerHTML property used DOM creation of actions list 
     5 
     6  * fixed css bug: when action's url is too long it overlap drag handle on sorting thus disabling drug&drop of this action 
     7 
    180.3.0 
    29 
  • qPloneTabs/trunk/skins/qPloneTabs/javascripts/qplonetabs.js

    r1068 r1070  
    11/* Global variables */ 
    22 
     3var gBeforeReorderData = [];        // storage for actions before sorting 
    34var gBeforeReorderFragment = null;  // document fragment for insertion in UL after clicking cancel button after reorder 
    4 var gBeforeEditData = {};  // hash for storage tabs fields before editing 
     5var gBeforeEditData = {};           // hash for storage tabs fields before editing 
    56var category = 'portal_tabs'; 
    67 
     
    1112    el.onclick = function(ev){ 
    1213      var ev = ev ? ev : window.event; 
    13       gBeforeReorderFragment = document.getElementById('tabslist').innerHTML; 
     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 
    1422      shiftClassNames('app', 'viewing', 'sorting'); 
    1523      Sortable.create('tabslist', {handle: 'drag-handle'}); 
     
    5058      Sortable.destroy('tabslist'); 
    5159      shiftClassNames('app', 'sorting', 'viewing'); 
    52       Element.update('tabslist', gBeforeReorderFragment); 
     60 
     61      // update action to before sorting state 
     62//      Element.update('tabslist', gBeforeReorderFragment); 
     63      var tabslist = $('tabslist'); 
     64      tabslist.innerHTML = ""; 
     65      for (var i = 0, li; li = gBeforeReorderData[i]; i++) { 
     66          tabslist.appendChild(recoverAction(li)); 
     67      } 
     68 
    5369      el.attachEvent ? ieHover() : ''; 
    5470      Behaviour.apply(); 
     
    316332    }; 
    317333}); 
    318 Event.observe(window, 'unload', function(){gBeforeReorderFragment = null; gBeforeEditData = null;}); 
     334Event.observe(window, 'unload', function() { 
     335    // cleanup memory to prevent memory lack 
     336    delete gBeforeReorderFragment; 
     337    delete gBeforeEditData; 
     338    delete gBeforeReorderData 
     339}); 
    319340 
    320341if (window.attachEvent) {Event.observe(window, 'load', ieHover, false);} 
     
    377398  $A($(el).getElementsByTagName('LI')).each(function(li,idx){if(li != el) li.onclick=function(event){return false;};}); 
    378399}; 
     400 
     401 
     402//********************************************** 
     403 
     404//    Fixed bug: innerHTML return not actual data, now used DOM 
     405 
     406 
     407function grepInfo(li) { 
     408     
     409    // grep li state 
     410    var info = {"li.id" : li.id, "li.title": li.title, "li.className" : li.className}; 
     411     
     412    // grep visibility checkbox state 
     413    var vis_box = li.getElementsByTagName("INPUT")[0]; 
     414    info["vis_box.checked"] = vis_box.checked; 
     415    info["vis_box.name"] = vis_box.name; 
     416     
     417    var spans = li.getElementsByTagName("SPAN"); 
     418     
     419    // grep url helper state 
     420    info["url_helper.text"] = spans[0].innerHTML; 
     421     
     422    // grep tab title state 
     423    info["tab_title.text"] = spans[1].innerHTML; 
     424     
     425    // grep edit form state 
     426    var edit_form = li.getElementsByTagName("FORM")[0]; 
     427    info["edit_form.name"] = edit_form.name; 
     428    info["edit_form.action"] = edit_form.action; 
     429     
     430    var inputs = edit_form.getElementsByTagName("INPUT"); 
     431     
     432    // grep hidden input index value 
     433    info["input_idx.value"] = inputs[0].value; 
     434     
     435    // grep action name input state 
     436    info["input_name.name"] = inputs[1].name; 
     437    info["input_name.value"] = inputs[1].value; 
     438     
     439    // grep dl advanced section class name 
     440    info["dl_advanced.className"] = edit_form.getElementsByTagName("DL")[1].className; 
     441    info["dd_advanced.style.display"] = edit_form.getElementsByTagName("DD")[1].style.display; 
     442     
     443    // grep url input state 
     444    info["input_url.name"] = inputs[2].name; 
     445    info["input_url.value"] = inputs[2].value; 
     446     
     447    // grep id input state 
     448    info["input_id.name"] = inputs[3].name; 
     449    info["input_id.value"] = inputs[3].value; 
     450     
     451    // grep condition input state 
     452    info["input_condition.name"] = inputs[4].name; 
     453    info["input_condition.value"] = inputs[4].value; 
     454     
     455    // grep buttons state 
     456    info["save_button.value"] = inputs[5].value; 
     457    info["cancel_button.value"] = inputs[6].value; 
     458     
     459    return info; 
     460} 
     461 
     462function recoverAction(info) { 
     463     
     464    // create list item and assign corresponding attributes 
     465    var li = document.createElement("LI"); 
     466    li.id = info["li.id"]; 
     467    li.title = info["li.title"]; 
     468    li.className = info["li.className"]; 
     469     
     470    // create drag handle image and assign corresponding attributes 
     471    var drag_handle = document.createElement("IMG"); 
     472    drag_handle.className = "drag-handle"; 
     473    drag_handle.src = "drag.gif"; 
     474    drag_handle.alt = ""; 
     475    drag_handle.height = "11"; 
     476    drag_handle.width = "25"; 
     477     
     478    li.appendChild(drag_handle); 
     479     
     480    // create bridge div element for visibility checkbox 
     481    var bridge = document.createElement("DIV"); 
     482    bridge.className = "bridge"; 
     483     
     484    // create checkbox for visibility control 
     485    var vis_box = document.createElement("INPUT"); 
     486    vis_box.type = "checkbox"; 
     487    vis_box.className = "visibility"; 
     488    vis_box.value = "1"; 
     489    vis_box.title = "visibility"; 
     490    vis_box.name = info["vis_box.name"]; 
     491     
     492    bridge.appendChild(vis_box); 
     493 
     494    // buggy IE 
     495    if (info["vis_box.checked"]) { 
     496        vis_box.setAttribute("checked", "checked"); 
     497        vis_box.defaultChecked = true; 
     498    } 
     499 
     500    li.appendChild(bridge); 
     501     
     502    // create Delete link 
     503    var del_link = document.createElement("A"); 
     504    del_link.className = "delete"; 
     505    del_link.href = "#"; 
     506    del_link.appendChild(document.createTextNode("Delete")); 
     507     
     508    li.appendChild(del_link); 
     509     
     510    // create url-helper element 
     511    var url_helper = document.createElement("SPAN"); 
     512    url_helper.className = "url-helper"; 
     513    url_helper.appendChild(document.createTextNode(info["url_helper.text"])); 
     514     
     515    li.appendChild(url_helper); 
     516     
     517    // create tab title element 
     518    var tab_title = document.createElement("SPAN"); 
     519    tab_title.className = "tab-title"; 
     520    tab_title.appendChild(document.createTextNode(info["tab_title.text"])); 
     521     
     522    li.appendChild(tab_title); 
     523     
     524    // create edit form 
     525    var edit_form = document.createElement("FORM"); 
     526    edit_form.className = "editform"; 
     527    edit_form.method = "post"; 
     528    edit_form.name = info["edit_form.name"]; 
     529    edit_form.action = info["edit_form.action"]; 
     530     
     531    // create hidden input with index value 
     532    var input_idx = document.createElement("INPUT"); 
     533    input_idx.type = "hidden"; 
     534    input_idx.name = "idx"; 
     535    input_idx.value = info["input_idx.value"]; 
     536     
     537    edit_form.appendChild(input_idx); 
     538     
     539    // create dl element for name input section 
     540    var dl_name = document.createElement("DL"); 
     541    var dt_name = document.createElement("DT"); 
     542    var name_label = document.createElement("LABEL"); 
     543    name_label.appendChild(document.createTextNode("Name")); 
     544     
     545    dt_name.appendChild(name_label); 
     546    dl_name.appendChild(dt_name); 
     547     
     548    // crete input for action name 
     549    var dd_name = document.createElement("DD"); 
     550    var input_name = document.createElement("INPUT"); 
     551    input_name.type = "text"; 
     552    input_name.size = "30"; 
     553    input_name.name = info["input_name.name"]; 
     554    input_name.value = info["input_name.value"]; 
     555     
     556    dd_name.appendChild(input_name); 
     557    dl_name.appendChild(dd_name); 
     558    edit_form.appendChild(dl_name); 
     559     
     560    // create dl element for advanced inputs 
     561    var dl_advanced = document.createElement("DL"); 
     562    dl_advanced.className = info["dl_advanced.className"]; 
     563     
     564    // create collapsible header 
     565    var dt_advanced = document.createElement("DT"); 
     566    dt_advanced.className = "headerAdvanced"; 
     567    dt_advanced.appendChild(document.createTextNode("Advanced")); 
     568     
     569    dl_advanced.appendChild(dt_advanced); 
     570     
     571    // create collapsible content 
     572    var dd_advanced = document.createElement("DD"); 
     573    dd_advanced.className = "contentAdvanced"; 
     574    dd_advanced.style.display = info["dd_advanced.style.display"]; 
     575     
     576    // add URL section 
     577    // add url header 
     578    var dl_url = document.createElement("DL"); 
     579    var dt_url = document.createElement("DT"); 
     580    var label_url = document.createElement("LABEL"); 
     581    label_url.appendChild(document.createTextNode("URL (Expression)")); 
     582     
     583    dt_url.appendChild(label_url); 
     584    dl_url.appendChild(dt_url); 
     585     
     586    //add url value 
     587    var dd_url = document.createElement("DD"); 
     588    var input_url = document.createElement("INPUT"); 
     589    input_url.type = "text"; 
     590    input_url.size = "30"; 
     591    input_url.name = info["input_url.name"]; 
     592    input_url.value = info["input_url.value"]; 
     593     
     594    dd_url.appendChild(input_url); 
     595    dl_url.appendChild(dd_url); 
     596    dd_advanced.appendChild(dl_url); 
     597     
     598    // add ID section 
     599    // add id header 
     600    var dl_id = document.createElement("DL"); 
     601    var dt_id = document.createElement("DT"); 
     602    var label_id = document.createElement("LABEL"); 
     603    label_id.appendChild(document.createTextNode("Id")); 
     604     
     605    dt_id.appendChild(label_id); 
     606    dl_id.appendChild(dt_id); 
     607     
     608    //add id value 
     609    var dd_id = document.createElement("DD"); 
     610    var input_id = document.createElement("INPUT"); 
     611    input_id.type = "text"; 
     612    input_id.name = info["input_id.name"]; 
     613    input_id.value = info["input_id.value"]; 
     614     
     615    dd_id.appendChild(input_id); 
     616    dl_id.appendChild(dd_id); 
     617    dd_advanced.appendChild(dl_id); 
     618     
     619    // add Condition section 
     620    // add condition header 
     621    var dl_condition = document.createElement("DL"); 
     622    var dt_condition = document.createElement("DT"); 
     623    var label_condition = document.createElement("LABEL"); 
     624    label_condition.appendChild(document.createTextNode("Condition (Expression)")); 
     625     
     626    dt_condition.appendChild(label_condition); 
     627    dl_condition.appendChild(dt_condition); 
     628     
     629    //add condition value 
     630    var dd_condition = document.createElement("DD"); 
     631    var input_condition = document.createElement("INPUT"); 
     632    input_condition.type = "text"; 
     633    input_condition.size = "30"; 
     634    input_condition.name = info["input_condition.name"]; 
     635    input_condition.value = info["input_condition.value"]; 
     636     
     637    dd_condition.appendChild(input_condition); 
     638    dl_condition.appendChild(dd_condition); 
     639    dd_advanced.appendChild(dl_condition); 
     640     
     641    // add visual clear div to advanced dd element 
     642    var visual_clear = document.createElement("DIV"); 
     643    visual_clear.className = "visualClear"; 
     644    visual_clear.appendChild = document.createTextNode("<!-- -->"); 
     645     
     646    dd_advanced.appendChild(visual_clear); 
     647    dl_advanced.appendChild(dd_advanced); 
     648    edit_form.appendChild(dl_advanced); 
     649     
     650    // create div element for form controls 
     651    var form_controls = document.createElement("DIV"); 
     652     
     653    // add save button 
     654    var save_button = document.createElement("INPUT"); 
     655    save_button.type = "submit"; 
     656    save_button.className = "editsave"; 
     657    save_button.value = info["save_button.value"]; 
     658    form_controls.appendChild(save_button); 
     659     
     660    // add cancel button 
     661    var cancel_button = document.createElement("INPUT"); 
     662    cancel_button.type = "submit"; 
     663    cancel_button.className = "editcancel"; 
     664    cancel_button.value = info["cancel_button.value"]; 
     665    form_controls.appendChild(cancel_button); 
     666     
     667    edit_form.appendChild(form_controls); 
     668    li.appendChild(edit_form); 
     669 
     670    return li; 
     671} 
  • qPloneTabs/trunk/skins/qPloneTabs/qpt_gettabslist.pt

    r778 r1070  
    2020        tal:attributes="action string:${here/portal_url}/prefs_tabs_form; 
    2121                        name string:f$index"> 
    22     <input type="hidden" name="idx" tal:attributes="value index" /> 
     22      <input type="hidden" name="idx" tal:attributes="value index" /> 
    2323      <dl> 
    2424        <dt><label>Name</label></dt> 
     
    5151        </dd> 
    5252      </dl> 
    53     <div> 
    54       <input type="submit" class="editsave"   i18n:attributes="value" value="Save"   /> 
    55       <input type="submit" class="editcancel" i18n:attributes="value" value="Cancel" /> 
    56     </div> 
     53      <div> 
     54        <input type="submit" class="editsave"   i18n:attributes="value" value="Save"   /> 
     55        <input type="submit" class="editcancel" i18n:attributes="value" value="Cancel" /> 
     56      </div> 
    5757  </form> 
    5858</li> 
  • qPloneTabs/trunk/version.txt

    r778 r1070  
    1 0.3.0 
     10.3.1