diff options
| -rw-r--r-- | lib/dom_utils.coffee | 18 | ||||
| -rw-r--r-- | tests/dom_tests/dom_tests.html | 2 | ||||
| -rw-r--r-- | tests/dom_tests/dom_utils_test.coffee | 12 | 
3 files changed, 23 insertions, 9 deletions
| diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 3fc08b78..9a6c1b09 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -3,15 +3,15 @@ DomUtils =    # Runs :callback if the DOM has loaded, otherwise runs it on load    #    documentReady: do -> -    isReady = false -    (callback) -> -      if document.readyState == "loading" and not isReady -        window.addEventListener "DOMContentLoaded", handler = -> -          isReady = true -          window.removeEventListener "DOMContentLoaded", handler -          callback() -      else -        callback() +    [isReady, callbacks] = [document.readyState != "loading", []] +    unless isReady +      window.addEventListener "DOMContentLoaded", onDOMContentLoaded = -> +        window.removeEventListener "DOMContentLoaded", onDOMContentLoaded +        isReady = true +        callback() for callback in callbacks +        callbacks = null + +    (callback) -> if isReady then callback() else callbacks.push callback    createElement: (tagName) ->      element = document.createElement tagName diff --git a/tests/dom_tests/dom_tests.html b/tests/dom_tests/dom_tests.html index ab48a88a..d2e795d1 100644 --- a/tests/dom_tests/dom_tests.html +++ b/tests/dom_tests/dom_tests.html @@ -32,6 +32,8 @@      <script type="text/javascript" src="../../lib/utils.js"></script>      <script type="text/javascript" src="../../lib/keyboard_utils.js"></script>      <script type="text/javascript" src="../../lib/dom_utils.js"></script> +    <!-- For DomUtils.documentReady() tests; see ./dom_utils_test.coffee. --> +    <script>DomUtils.documentReady(function() {window.documentReadyListenerCalled = true;})</script>      <script type="text/javascript" src="../../lib/rect.js"></script>      <script type="text/javascript" src="../../lib/handler_stack.js"></script>      <script type="text/javascript" src="../../lib/clipboard.js"></script> diff --git a/tests/dom_tests/dom_utils_test.coffee b/tests/dom_tests/dom_utils_test.coffee index ce8fa370..98c7cc8d 100644 --- a/tests/dom_tests/dom_utils_test.coffee +++ b/tests/dom_tests/dom_utils_test.coffee @@ -1,3 +1,15 @@ +context "DOM content loaded", + +  # The DOM content has already loaded, this should be called immediately. +  should "call callback immediately.", -> +    called = false +    DomUtils.documentReady -> called = true +    assert.isTrue called + +  # See ./dom_tests.html; the callback there was installed before the document was ready. +  should "already have called callback embedded in test page.", -> +    assert.isTrue window.documentReadyListenerCalled? and window.documentReadyListenerCalled +  context "Check visibility",    should "detect visible elements as visible", -> | 
