Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drafthouse.com - Drop-down menu is not responding #126385

Open
hungrymonkey opened this issue Aug 27, 2023 — with webcompat-app · 12 comments
Open

drafthouse.com - Drop-down menu is not responding #126385

hungrymonkey opened this issue Aug 27, 2023 — with webcompat-app · 12 comments
Labels
browser-firefox-mobile browser-focus-geckoview diagnosis-priority-p1 engine-gecko The browser uses the Gecko rendering engine priority-normal severity-important A non-core broken piece of functionality, not behaving the way you would expect. sitepatch-applied There is an UA override/intervention in place for this site trend-button OKR Label- Issues where buttons on the page are not functional type-fastclick Dependency on FastClick JS library
Milestone

Comments

@hungrymonkey
Copy link

URL: https://drafthouse.com/food-and-drink

Browser / Version: Firefox Mobile 117.0
Operating System: Android 13
Tested Another Browser: Yes Other

Problem type: Site is not usable
Description: Buttons or links not working
Steps to Reproduce:
This dropdown element doesn't work on Firefox mobile or Firefox focus. This element works on Firefox desktop with mobile user agent. This bug does not affect chrome mobile either.

"Please select your local Alamo"

<select name="market" on change="ADC.setMarket(this.value)";>

View the screenshot Screenshot
Browser Configuration
  • gfx.webrender.all: false
  • gfx.webrender.blob-images: true
  • gfx.webrender.enabled: false
  • buildID: 20230821145345
  • channel: release
  • hasTouchScreen: true
  • mixed active content blocked: false
  • mixed passive content blocked: false
  • tracking content blocked: false
  • hasFastClick: true

View console log messages

From webcompat.com with ❤️

@webcompat-bot webcompat-bot added this to the needstriage milestone Aug 27, 2023
@webcompat-bot webcompat-bot added type-fastclick Dependency on FastClick JS library browser-focus-geckoview engine-gecko The browser uses the Gecko rendering engine labels Aug 27, 2023
@hungrymonkey
Copy link
Author

Screenshot_20230827-152018

@hungrymonkey
Copy link
Author

I do not know how to access the developer console in Firefox mobile

@hungrymonkey
Copy link
Author

hungrymonkey commented Aug 27, 2023

Navigating from Firefox mobile beta and release from https://drafthouse.com/](https://drafthouse.com/) to food & drink will show an "OK"

This website have so many random behaviors.

I cannot reproduce this behavior as directly navigating to https://drafthouse.com/food-and-drink fixes the "OK" only page behavior. This behavior requires a fresh firefox install.

@softvision-raul-bucata
Copy link

We appreciate your report. I was able to reproduce the issue using Firefox Focus (Release and Nightly) and on the latest Firefox Fenix Nightly. The drop-down menu does not respond.

Tested with:

Browser / Version: Firefox Focus Release 117.0 (372332003-🦎117.0-20230821145345🦎)/ Firefox Fenix Nightly 118.0a1 (2015970787-🦎118.0a1-20230827090435🦎)/ Firefox Focus Nightly 118.0a1 (372400408-🦎118.0a1-20230827090435🦎)
Operating System: Samsung A51 (Android 11) -1080 × 2400 pixels 20:9 aspect ratio (~405 ppi density)
Operating System: Google Pixel 3 (Android 12) -1080 x 2160 pixels, 18:9 ratio (~443 ppi density)

Notes:

  1. Reproducible regardless of the status of ETP.
  2. Reproducible on the latest build of Firefox Fenix Nightly.
  3. Works as expected using Chrome.

Moving this to NeedsDiagnosis for further investigations.

[qa_35/2023]

@softvision-raul-bucata softvision-raul-bucata changed the title drafthouse.com - site is not usable drafthouse.com - Drop-down menu is not responding Aug 28, 2023
@softvision-raul-bucata softvision-raul-bucata added browser-firefox-mobile trend-button OKR Label- Issues where buttons on the page are not functional severity-important A non-core broken piece of functionality, not behaving the way you would expect. priority-normal labels Aug 28, 2023
@hungrymonkey
Copy link
Author

This error becomes spit out.
Screen Shot 2023-08-28 at 3 37 38 AM

@ksy36 ksy36 added action-needssitepatch This web bug needs a GoFaster site patch. diagnosis-priority-p1 labels Aug 28, 2023
@wisniewskit
Copy link
Member

wisniewskit commented Aug 30, 2023

@hungrymonkey, @softvision-raul-bucata is this still not working for you? I just tried it on my phone and it's working fine. The site does seem to be using FastClick, but it isn't breaking anything on the page for me. Does it maybe only happen on Android 13 somehow?

Edit: @ksy36 says it reproduces for her, so hopefully we can figure out why it's not consistent.

@wisniewskit
Copy link
Member

Ah! We found it. FastClick has a special case in its notNeeded function:

documentElement.scrollWidth <= window.outerWidth

It seems that on my devices, this is true, so FastClick doesn't activate, but for some reason on Ksenia's device it's false, so FastClick does activate. Weird! At least we should be able to work around this inconsistency.

@hungrymonkey
Copy link
Author

@wisniewskit Why don't you try to contact the website?

https://drafthouse.com/los-angeles/theaters

@hungrymonkey
Copy link
Author

! function() {
    "use strict";
    /**
     * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
     *
     * @codingstandard ftlabs-jsv2
     * @copyright The Financial Times Limited [All Rights Reserved]
     * @license MIT License (see LICENSE.txt)
     */
    function a(b, d) {
        function e(a, b) {
            return function() {
                return a.apply(b, arguments)
            }
        }
        var f;
        if (d = d || {}, this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = d.touchBoundary || 10, this.layer = b, this.tapDelay = d.tapDelay || 200, this.tapTimeout = d.tapTimeout || 700, !a.notNeeded(b)) {
            for (var g = ["onMouse", "onClick", "onTouchStart", "onTouchMove", "onTouchEnd", "onTouchCancel"], h = this, i = 0, j = g.length; j > i; i++) h[g[i]] = e(h[g[i]], h);
            c && (b.addEventListener("mouseover", this.onMouse, !0), b.addEventListener("mousedown", this.onMouse, !0), b.addEventListener("mouseup", this.onMouse, !0)), b.addEventListener("click", this.onClick, !0), b.addEventListener("touchstart", this.onTouchStart, !1), b.addEventListener("touchmove", this.onTouchMove, !1), b.addEventListener("touchend", this.onTouchEnd, !1), b.addEventListener("touchcancel", this.onTouchCancel, !1), Event.prototype.stopImmediatePropagation || (b.removeEventListener = function(a, c, d) {
                var e = Node.prototype.removeEventListener;
                "click" === a ? e.call(b, a, c.hijacked || c, d) : e.call(b, a, c, d)
            }, b.addEventListener = function(a, c, d) {
                var e = Node.prototype.addEventListener;
                "click" === a ? e.call(b, a, c.hijacked || (c.hijacked = function(a) {
                    a.propagationStopped || c(a)
                }), d) : e.call(b, a, c, d)
            }), "function" == typeof b.onclick && (f = b.onclick, b.addEventListener("click", function(a) {
                f(a)
            }, !1), b.onclick = null)
        }
    }
    var b = navigator.userAgent.indexOf("Windows Phone") >= 0,
        c = navigator.userAgent.indexOf("Android") > 0 && !b,
        d = /iP(ad|hone|od)/.test(navigator.userAgent) && !b,
        e = d && /OS 4_\d(_\d)?/.test(navigator.userAgent),
        f = d && /OS [6-7]_\d/.test(navigator.userAgent),
        g = navigator.userAgent.indexOf("BB10") > 0;
    a.prototype.needsClick = function(a) {
        switch (a.nodeName.toLowerCase()) {
            case "button":
            case "select":
            case "textarea":
                if (a.disabled) return !0;
                break;
            case "input":
                if (d && "file" === a.type || a.disabled) return !0;
                break;
            case "label":
            case "iframe":
            case "video":
                return !0
        }
        return /\bneedsclick\b/.test(a.className)
    }, a.prototype.needsFocus = function(a) {
        switch (a.nodeName.toLowerCase()) {
            case "textarea":
                return !0;
            case "select":
                return !c;
            case "input":
                switch (a.type) {
                    case "button":
                    case "checkbox":
                    case "file":
                    case "image":
                    case "radio":
                    case "submit":
                        return !1
                }
                return !a.disabled && !a.readOnly;
            default:
                return /\bneedsfocus\b/.test(a.className)
        }
    }, a.prototype.sendClick = function(a, b) {
        var c, d;
        document.activeElement && document.activeElement !== a && document.activeElement.blur(), d = b.changedTouches[0], c = document.createEvent("MouseEvents"), c.initMouseEvent(this.determineEventType(a), !0, !0, window, 1, d.screenX, d.screenY, d.clientX, d.clientY, !1, !1, !1, !1, 0, null), c.forwardedTouchEvent = !0, a.dispatchEvent(c)
    }, a.prototype.determineEventType = function(a) {
        return c && "select" === a.tagName.toLowerCase() ? "mousedown" : "click"
    }, a.prototype.focus = function(a) {
        var b;
        d && a.setSelectionRange && 0 !== a.type.indexOf("date") && "time" !== a.type && "month" !== a.type ? (b = a.value.length, a.setSelectionRange(b, b)) : a.focus()
    }, a.prototype.updateScrollParent = function(a) {
        var b, c;
        if (b = a.fastClickScrollParent, !b || !b.contains(a)) {
            c = a;
            do {
                if (c.scrollHeight > c.offsetHeight) {
                    b = c, a.fastClickScrollParent = c;
                    break
                }
                c = c.parentElement
            } while (c)
        }
        b && (b.fastClickLastScrollTop = b.scrollTop)
    }, a.prototype.getTargetElementFromEventTarget = function(a) {
        return a.nodeType === Node.TEXT_NODE ? a.parentNode : a
    }, a.prototype.onTouchStart = function(a) {
        var b, c, f;
        if (a.targetTouches.length > 1) return !0;
        if (b = this.getTargetElementFromEventTarget(a.target), c = a.targetTouches[0], d) {
            if (f = window.getSelection(), f.rangeCount && !f.isCollapsed) return !0;
            if (!e) {
                if (c.identifier && c.identifier === this.lastTouchIdentifier) return a.preventDefault(), !1;
                this.lastTouchIdentifier = c.identifier, this.updateScrollParent(b)
            }
        }
        return this.trackingClick = !0, this.trackingClickStart = a.timeStamp, this.targetElement = b, this.touchStartX = c.pageX, this.touchStartY = c.pageY, a.timeStamp - this.lastClickTime < this.tapDelay && a.preventDefault(), !0
    }, a.prototype.touchHasMoved = function(a) {
        var b = a.changedTouches[0],
            c = this.touchBoundary;
        return Math.abs(b.pageX - this.touchStartX) > c || Math.abs(b.pageY - this.touchStartY) > c ? !0 : !1
    }, a.prototype.onTouchMove = function(a) {
        return this.trackingClick ? ((this.targetElement !== this.getTargetElementFromEventTarget(a.target) || this.touchHasMoved(a)) && (this.trackingClick = !1, this.targetElement = null), !0) : !0
    }, a.prototype.findControl = function(a) {
        return void 0 !== a.control ? a.control : a.htmlFor ? document.getElementById(a.htmlFor) : a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")
    }, a.prototype.onTouchEnd = function(a) {
        var b, g, h, i, j, k = this.targetElement;
        if (!this.trackingClick) return !0;
        if (a.timeStamp - this.lastClickTime < this.tapDelay) return this.cancelNextClick = !0, !0;
        if (a.timeStamp - this.trackingClickStart > this.tapTimeout) return !0;
        if (this.cancelNextClick = !1, this.lastClickTime = a.timeStamp, g = this.trackingClickStart, this.trackingClick = !1, this.trackingClickStart = 0, f && (j = a.changedTouches[0], k = document.elementFromPoint(j.pageX - window.pageXOffset, j.pageY - window.pageYOffset) || k, k.fastClickScrollParent = this.targetElement.fastClickScrollParent), h = k.tagName.toLowerCase(), "label" === h) {
            if (b = this.findControl(k)) {
                if (this.focus(k), c) return !1;
                k = b
            }
        } else if (this.needsFocus(k)) return a.timeStamp - g > 100 || d && window.top !== window && "input" === h ? (this.targetElement = null, !1) : (this.focus(k), this.sendClick(k, a), d && "select" === h || (this.targetElement = null, a.preventDefault()), !1);
        return d && !e && (i = k.fastClickScrollParent, i && i.fastClickLastScrollTop !== i.scrollTop) ? !0 : (this.needsClick(k) || (a.preventDefault(), this.sendClick(k, a)), !1)
    }, a.prototype.onTouchCancel = function() {
        this.trackingClick = !1, this.targetElement = null
    }, a.prototype.onMouse = function(a) {
        return this.targetElement ? a.forwardedTouchEvent ? !0 : a.cancelable && (!this.needsClick(this.targetElement) || this.cancelNextClick) ? (a.stopImmediatePropagation ? a.stopImmediatePropagation() : a.propagationStopped = !0, a.stopPropagation(), a.preventDefault(), !1) : !0 : !0
    }, a.prototype.onClick = function(a) {
        var b;
        return this.trackingClick ? (this.targetElement = null, this.trackingClick = !1, !0) : "submit" === a.target.type && 0 === a.detail ? !0 : (b = this.onMouse(a), b || (this.targetElement = null), b)
    }, a.prototype.destroy = function() {
        var a = this.layer;
        c && (a.removeEventListener("mouseover", this.onMouse, !0), a.removeEventListener("mousedown", this.onMouse, !0), a.removeEventListener("mouseup", this.onMouse, !0)), a.removeEventListener("click", this.onClick, !0), a.removeEventListener("touchstart", this.onTouchStart, !1), a.removeEventListener("touchmove", this.onTouchMove, !1), a.removeEventListener("touchend", this.onTouchEnd, !1), a.removeEventListener("touchcancel", this.onTouchCancel, !1)
    }, a.notNeeded = function(a) {
        var b, d, e, f;
        if ("undefined" == typeof window.ontouchstart) return !0;
        if (d = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1]) {
            if (!c) return !0;
            if (b = document.querySelector("meta[name=viewport]")) {
                if (-1 !== b.content.indexOf("user-scalable=no")) return !0;
                if (d > 31 && document.documentElement.scrollWidth <= window.outerWidth) return !0
            }
        }
        if (g && (e = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/), e[1] >= 10 && e[2] >= 3 && (b = document.querySelector("meta[name=viewport]")))) {
            if (-1 !== b.content.indexOf("user-scalable=no")) return !0;
            if (document.documentElement.scrollWidth <= window.outerWidth) return !0
        }
        return "none" === a.style.msTouchAction || "manipulation" === a.style.touchAction ? !0 : (f = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1], f >= 27 && (b = document.querySelector("meta[name=viewport]"), b && (-1 !== b.content.indexOf("user-scalable=no") || document.documentElement.scrollWidth <= window.outerWidth)) ? !0 : "none" === a.style.touchAction || "manipulation" === a.style.touchAction ? !0 : !1)
    }, a.attach = function(b, c) {
        return new a(b, c)
    }, "function" == typeof define && "object" == typeof define.amd && define.amd ? define(function() {
        return a
    }) : "undefined" != typeof module && module.exports ? (module.exports = a.attach, module.exports.FastClick = a) : window.FastClick = a
}();

https://drafthouse.com/assets/codekit/bower_components/foundation/js/vendor/fastclick.js

@wisniewskit
Copy link
Member

@hungrymonkey we do generally attempt outreach, but there are many other sites using FastClick, and it and some of those sites are no longer actively maintained, so finding out how to deal with it without having to contact every site is also worthwhile.

Would you happen to be a dev for drafthouse.com?

@hungrymonkey
Copy link
Author

Nope. Some user.

@hungrymonkey
Copy link
Author

If I was a dev for drafthouse.com, I would had already debug and fixed it.

@ksy36 ksy36 modified the milestones: needsdiagnosis, needscontact Nov 1, 2023
@ksy36 ksy36 added sitepatch-applied There is an UA override/intervention in place for this site and removed action-needssitepatch This web bug needs a GoFaster site patch. labels Nov 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
browser-firefox-mobile browser-focus-geckoview diagnosis-priority-p1 engine-gecko The browser uses the Gecko rendering engine priority-normal severity-important A non-core broken piece of functionality, not behaving the way you would expect. sitepatch-applied There is an UA override/intervention in place for this site trend-button OKR Label- Issues where buttons on the page are not functional type-fastclick Dependency on FastClick JS library
Projects
None yet
Development

No branches or pull requests

5 participants