diff --git a/src/editor.coffee b/src/editor.coffee index f09e40935..50761d51f 100644 --- a/src/editor.coffee +++ b/src/editor.coffee @@ -1175,7 +1175,7 @@ class Editor extends View updateDisplay: (options={}) -> return unless @attached and @activeEditSession return if @activeEditSession.destroyed - unless @isVisible() + unless @isOnDom() and @isVisible() @redrawOnReattach = true return diff --git a/src/jquery-extensions.coffee b/src/jquery-extensions.coffee index 1b6e7f4fd..c749b1ce5 100644 --- a/src/jquery-extensions.coffee +++ b/src/jquery-extensions.coffee @@ -35,7 +35,21 @@ $.fn.isOnDom = -> @closest(document.body).length is 1 $.fn.isVisible = -> - @is(':visible') + !@isHidden() + +$.fn.isHidden = -> + # Implementation taken from jQuery's `:hidden` expression code: + # https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js + # + # We were using a pseudo selector: @is(':hidden'). But jQuery's pseudo + # selector code checks the element's webkitMatchesSelector, which is always + # false, and is really really really slow. + + elem = this[0] + + return null unless elem + + elem.offsetWidth <= 0 and elem.offsetHeight <= 0 $.fn.isDisabled = -> !!@attr('disabled')