datalist: use draft getClientRects, works (better) on ff, ie, webkit - jscancer - Javascript crap (relatively small)
 (HTM) git clone git://git.codemadness.org/jscancer
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 887ccc8411a5bb8673657133b894b689aab82a81
 (DIR) parent 4b633a3a0d2361d17515a108f97b04ca829ec732
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Thu,  1 Jun 2017 19:54:40 +0200
       
       datalist: use draft getClientRects, works (better) on ff, ie, webkit
       
       Diffstat:
         M datalist/datalist.js                |      16 ++++------------
       
       1 file changed, 4 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/datalist/datalist.js b/datalist/datalist.js
       @@ -59,20 +59,12 @@ function datalist_init(input) {
                };
                var datalist_render = function(m) {
                        var dd = dropdown.cloneNode(false);
       -                var left = 0, top = 0;
       -                for (var c = input; c; c = c.offsetParent) {
       -                        left += c.offsetLeft;
       -                        top += c.offsetTop;
       -                        if (c.style.position == "fixed") {
       -                                left += window.pageXOffset;
       -                                top += window.pageYOffset;
       -                                break;
       -                        }
       +                var r = input.getClientRects() || [];
       +                if (r.length) {
       +                        dd.style.left = String(r[0].left + window.pageXOffset) + "px";
       +                        dd.style.top = String(r[0].top + input.offsetHeight + window.pageYOffset) + "px";
                        }
       -                dd.style.left = String(left) + "px";
       -                dd.style.top = String(top + input.offsetHeight) + "px";
                        dd.style.minWidth = String(input.clientWidth) + "px";
       -
                        for (var i = 0; i < m.length; i++)
                                dd.appendChild(m[i].el);
                        dropdown.parentNode.replaceChild(dd, dropdown)