diff --git a/src/Posting/Captcha.v2.coffee b/src/Posting/Captcha.v2.coffee index 57dfe0ffa..abce1d18b 100644 --- a/src/Posting/Captcha.v2.coffee +++ b/src/Posting/Captcha.v2.coffee @@ -34,6 +34,8 @@ Captcha.v2 = $.on window, 'captcha:success', => # XXX Greasemonkey 1.x workaround to gain access to GM_* functions. $.queueTask => @save false + new MutationObserver(@watchBubbles.bind @).observe d.body, + childList: true initFrame: -> if token = $('.fbc-verification-token > textarea')?.value @@ -228,3 +230,20 @@ Captcha.v2 = window.grecaptcha.reset(container.dataset.widgetID); })(); ''' + + watchBubbles: (mutations) -> + for mutation in mutations + for node in mutation.addedNodes + if $ 'iframe[src^="https://www.google.com/recaptcha/api2/frame"]', node + new MutationObserver(@fixBubble.bind(@, node)).observe node, + attributes: true + + fixBubble: (node) -> + {bottom, right, width} = node.getBoundingClientRect() + if ( + bottom > 0 and # not deliberately offscreen + right > doc.clientWidth # offscreen to right + ) + qrLeft = QR.nodes.el.getBoundingClientRect().left + newLeft = Math.max 0, qrLeft - width + node.style.left = "#{newLeft}px"