From c8323fc0343bee7d9cceea1f8b253cd40a46d6c7 Mon Sep 17 00:00:00 2001 From: Klaus Leithoff Date: Sat, 28 Nov 2009 14:32:33 +0000 Subject: [PATCH] hack to influence selectbox width behavior for MSIE; applied to all selectboxes created by html::select and etemplate.js loaded --- etemplate/js/etemplate.js | 202 ++++++++++++++++++++++++++++++++ phpgwapi/inc/class.html.inc.php | 12 ++ 2 files changed, 214 insertions(+) diff --git a/etemplate/js/etemplate.js b/etemplate/js/etemplate.js index fb5a1c43e2..f3e8ec4c72 100644 --- a/etemplate/js/etemplate.js +++ b/etemplate/js/etemplate.js @@ -298,3 +298,205 @@ function add_upload(upload) newUpload.id += parent.childNodes.length; parent.insertBefore(upload,newUpload); } + +function dropdown_menu_hack(el) +{ + if(el.runtimeStyle) + { + if(el.runtimeStyle.behavior.toLowerCase()=="none"){return;} + el.runtimeStyle.behavior="none"; + + var ie5 = (document.namespaces==null); + el.ondblclick = function(e) + { + window.event.returnValue=false; + return false; + } + + if(window.createPopup==null) + { + var fid = "dropdown_menu_hack_" + Date.parse(new Date()); + + window.createPopup = function() + { + if(window.createPopup.frameWindow==null) + { + el.insertAdjacentHTML("MyFrame",""); + var f = document.frames[fid]; + f.document.open(); + f.document.write(""); + f.document.close(); + f.fid = fid; + + + var fwin = document.getElementById(fid); + fwin.style.cssText="position:absolute;top:0;left:0;display:none;z-index:99999;"; + + + f.show = function(px,py,pw,ph,baseElement) + { + py = py + baseElement.getBoundingClientRect().top + Math.max( document.body.scrollTop, document.documentElement.scrollTop) ; + px = px + baseElement.getBoundingClientRect().left + Math.max( document.body.scrollLeft, document.documentElement.scrollLeft) ; + fwin.style.width = pw + "px"; + fwin.style.height = ph + "px"; + fwin.style.posLeft =px ; + fwin.style.posTop = py ; + fwin.style.display="block"; + } + + + f_hide = function(e) + { + if(window.event && window.event.srcElement && window.event.srcElement.tagName && window.event.srcElement.tagName.toLowerCase()=="select"){return true;} + fwin.style.display="none"; + } + f.hide = f_hide; + document.attachEvent("onclick",f_hide); + document.attachEvent("onkeydown",f_hide); + + } + return f; + } + } + + function showMenu() + { + + function selectMenu(obj) + { + var o = document.createElement("option"); + o.value = obj.value; + //alert("val"+o.value) + o.innerHTML = obj.innerHTML; + while(el.options.length>0){el.options[0].removeNode(true);} + el.appendChild(o); + el.title = o.innerHTML; + el.contentIndex = obj.selectedIndex ; + el.menu.hide(); + if(el.onchange) + { + el.onchange(); + } + } + + + el.menu.show(0 , el.offsetHeight , 10, 10, el); + var mb = el.menu.document.body; + + mb.style.cssText ="border:solid 1px black;margin:0;padding:0;overflow-y:auto;overflow-x:auto;background:white;font:12px Tahoma, sans-serif;"; + var t = el.contentHTML; + //alert("1"+t); + t = t.replace(/