selenium-webdriver 2.43.5 → 2.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +20 -0
- package/README.md +8 -13
- package/builder.js +4 -3
- package/docs/class_webdriver_Alert.html +6 -6
- package/docs/class_webdriver_AlertPromise.html +6 -6
- package/docs/class_webdriver_UnhandledAlertError.html +4 -4
- package/docs/class_webdriver_WebDriver.html +39 -37
- package/docs/class_webdriver_WebDriver_Logs.html +3 -3
- package/docs/class_webdriver_WebDriver_Navigation.html +5 -5
- package/docs/class_webdriver_WebDriver_Options.html +9 -9
- package/docs/class_webdriver_WebDriver_TargetLocator.html +6 -6
- package/docs/class_webdriver_WebDriver_Timeouts.html +4 -4
- package/docs/class_webdriver_WebDriver_Window.html +6 -6
- package/docs/class_webdriver_WebElement.html +23 -23
- package/docs/class_webdriver_WebElementPromise.html +22 -22
- package/docs/class_webdriver_promise_CancellationError.html +3 -0
- package/docs/class_webdriver_promise_ControlFlow.html +32 -32
- package/docs/class_webdriver_promise_Deferred.html +7 -8
- package/docs/class_webdriver_promise_Frame_.html +14 -30
- package/docs/class_webdriver_promise_Promise.html +2 -2
- package/docs/class_webdriver_promise_Task_.html +12 -12
- package/docs/class_webdriver_until_Condition.html +3 -0
- package/docs/enum_webdriver_Key.html +1 -1
- package/docs/enum_webdriver_promise_ControlFlow_EventType.html +1 -1
- package/docs/enum_webdriver_promise_Deferred_State_.html +1 -1
- package/docs/index.html +8 -13
- package/docs/interface_webdriver_promise_Thenable.html +8 -10
- package/docs/license.html +1 -1
- package/docs/module_selenium-webdriver.html +2 -2
- package/docs/module_selenium-webdriver__base.html +1 -1
- package/docs/module_selenium-webdriver__base_class_Context.html +1 -1
- package/docs/module_selenium-webdriver_builder.html +1 -1
- package/docs/module_selenium-webdriver_builder_class_Builder.html +1 -1
- package/docs/module_selenium-webdriver_chrome.html +1 -1
- package/docs/module_selenium-webdriver_chrome_class_Driver.html +2 -2
- package/docs/module_selenium-webdriver_chrome_class_Options.html +2 -2
- package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +1 -1
- package/docs/module_selenium-webdriver_error.html +1 -1
- package/docs/module_selenium-webdriver_executors.html +1 -1
- package/docs/module_selenium-webdriver_firefox.html +1 -1
- package/docs/module_selenium-webdriver_firefox_binary.html +1 -1
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +1 -1
- package/docs/module_selenium-webdriver_firefox_class_Driver.html +2 -2
- package/docs/module_selenium-webdriver_firefox_class_Options.html +1 -1
- package/docs/module_selenium-webdriver_firefox_extension.html +1 -1
- package/docs/module_selenium-webdriver_firefox_profile.html +1 -1
- package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +1 -1
- package/docs/module_selenium-webdriver_http.html +1 -1
- package/docs/module_selenium-webdriver_http_class_HttpClient.html +1 -1
- package/docs/module_selenium-webdriver_http_util.html +1 -1
- package/docs/module_selenium-webdriver_io.html +1 -1
- package/docs/module_selenium-webdriver_io_exec.html +1 -1
- package/docs/module_selenium-webdriver_net.html +1 -1
- package/docs/module_selenium-webdriver_net_portprober.html +1 -1
- package/docs/module_selenium-webdriver_phantomjs.html +1 -1
- package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +2 -2
- package/docs/module_selenium-webdriver_proxy.html +1 -1
- package/docs/module_selenium-webdriver_remote.html +1 -1
- package/docs/module_selenium-webdriver_remote_class_DriverService.html +2 -2
- package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +2 -2
- package/docs/module_selenium-webdriver_testing.html +16 -29
- package/docs/module_selenium-webdriver_testing_assert.html +1 -1
- package/docs/namespace_webdriver_promise.html +18 -20
- package/docs/namespace_webdriver_stacktrace.html +15 -15
- package/docs/namespace_webdriver_until.html +32 -0
- package/docs/source/_base.js.src.html +1 -1
- package/docs/source/builder.js.src.html +1 -1
- package/docs/source/chrome.js.src.html +1 -1
- package/docs/source/error.js.src.html +1 -1
- package/docs/source/executors.js.src.html +1 -1
- package/docs/source/firefox/binary.js.src.html +1 -1
- package/docs/source/firefox/extension.js.src.html +1 -1
- package/docs/source/firefox/index.js.src.html +1 -1
- package/docs/source/firefox/profile.js.src.html +1 -1
- package/docs/source/http/index.js.src.html +1 -1
- package/docs/source/http/util.js.src.html +1 -1
- package/docs/source/index.js.src.html +1 -1
- package/docs/source/io/exec.js.src.html +1 -1
- package/docs/source/io/index.js.src.html +1 -1
- package/docs/source/lib/atoms/error.js.src.html +1 -1
- package/docs/source/lib/atoms/json.js.src.html +1 -1
- package/docs/source/lib/atoms/response.js.src.html +1 -1
- package/docs/source/lib/atoms/userAgent.js.src.html +1 -1
- package/docs/source/lib/goog/array/array.js.src.html +1 -1
- package/docs/source/lib/goog/asserts/asserts.js.src.html +1 -1
- package/docs/source/lib/goog/async/nexttick.js.src.html +1 -1
- package/docs/source/lib/goog/async/run.js.src.html +1 -1
- package/docs/source/lib/goog/base.js.src.html +1 -1
- package/docs/source/lib/goog/debug/debug.js.src.html +1 -1
- package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +1 -1
- package/docs/source/lib/goog/debug/error.js.src.html +1 -1
- package/docs/source/lib/goog/debug/logbuffer.js.src.html +1 -1
- package/docs/source/lib/goog/debug/logger.js.src.html +1 -1
- package/docs/source/lib/goog/debug/logrecord.js.src.html +1 -1
- package/docs/source/lib/goog/deps.js.src.html +1 -1
- package/docs/source/lib/goog/disposable/disposable.js.src.html +1 -1
- package/docs/source/lib/goog/disposable/idisposable.js.src.html +1 -1
- package/docs/source/lib/goog/dom/browserfeature.js.src.html +1 -1
- package/docs/source/lib/goog/dom/dom.js.src.html +1 -1
- package/docs/source/lib/goog/dom/nodetype.js.src.html +1 -1
- package/docs/source/lib/goog/dom/tagname.js.src.html +1 -1
- package/docs/source/lib/goog/dom/vendor.js.src.html +1 -1
- package/docs/source/lib/goog/events/browserevent.js.src.html +1 -1
- package/docs/source/lib/goog/events/browserfeature.js.src.html +1 -1
- package/docs/source/lib/goog/events/event.js.src.html +1 -1
- package/docs/source/lib/goog/events/eventid.js.src.html +1 -1
- package/docs/source/lib/goog/events/events.js.src.html +1 -1
- package/docs/source/lib/goog/events/eventtarget.js.src.html +1 -1
- package/docs/source/lib/goog/events/eventtype.js.src.html +1 -1
- package/docs/source/lib/goog/events/keycodes.js.src.html +1 -1
- package/docs/source/lib/goog/events/listenable.js.src.html +1 -1
- package/docs/source/lib/goog/events/listener.js.src.html +1 -1
- package/docs/source/lib/goog/events/listenermap.js.src.html +1 -1
- package/docs/source/lib/goog/functions/functions.js.src.html +1 -1
- package/docs/source/lib/goog/iter/iter.js.src.html +1 -1
- package/docs/source/lib/goog/json/json.js.src.html +1 -1
- package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +1 -1
- package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +1 -1
- package/docs/source/lib/goog/labs/testing/matcher.js.src.html +1 -1
- package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +1 -1
- package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +1 -1
- package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +1 -1
- package/docs/source/lib/goog/labs/useragent/browser.js.src.html +1 -1
- package/docs/source/lib/goog/labs/useragent/engine.js.src.html +1 -1
- package/docs/source/lib/goog/labs/useragent/util.js.src.html +1 -1
- package/docs/source/lib/goog/math/box.js.src.html +1 -1
- package/docs/source/lib/goog/math/coordinate.js.src.html +1 -1
- package/docs/source/lib/goog/math/math.js.src.html +1 -1
- package/docs/source/lib/goog/math/rect.js.src.html +1 -1
- package/docs/source/lib/goog/math/size.js.src.html +1 -1
- package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +1 -1
- package/docs/source/lib/goog/net/xhrlike.js.src.html +1 -1
- package/docs/source/lib/goog/net/xmlhttp.js.src.html +1 -1
- package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +1 -1
- package/docs/source/lib/goog/object/object.js.src.html +1 -1
- package/docs/source/lib/goog/reflect/reflect.js.src.html +1 -1
- package/docs/source/lib/goog/string/string.js.src.html +1 -1
- package/docs/source/lib/goog/structs/collection.js.src.html +1 -1
- package/docs/source/lib/goog/structs/map.js.src.html +1 -1
- package/docs/source/lib/goog/structs/set.js.src.html +1 -1
- package/docs/source/lib/goog/structs/structs.js.src.html +1 -1
- package/docs/source/lib/goog/style/style.js.src.html +1 -1
- package/docs/source/lib/goog/testing/asserts.js.src.html +1 -1
- package/docs/source/lib/goog/testing/asynctestcase.js.src.html +1 -1
- package/docs/source/lib/goog/testing/events/events.js.src.html +1 -1
- package/docs/source/lib/goog/testing/functionmock.js.src.html +1 -1
- package/docs/source/lib/goog/testing/jsunit.js.src.html +1 -1
- package/docs/source/lib/goog/testing/loosemock.js.src.html +1 -1
- package/docs/source/lib/goog/testing/mock.js.src.html +1 -1
- package/docs/source/lib/goog/testing/mockclock.js.src.html +1 -1
- package/docs/source/lib/goog/testing/mockcontrol.js.src.html +1 -1
- package/docs/source/lib/goog/testing/mockinterface.js.src.html +1 -1
- package/docs/source/lib/goog/testing/mockmatchers.js.src.html +1 -1
- package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +1 -1
- package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +1 -1
- package/docs/source/lib/goog/testing/recordfunction.js.src.html +1 -1
- package/docs/source/lib/goog/testing/stacktrace.js.src.html +1 -1
- package/docs/source/lib/goog/testing/strictmock.js.src.html +1 -1
- package/docs/source/lib/goog/testing/testcase.js.src.html +1 -1
- package/docs/source/lib/goog/testing/testrunner.js.src.html +1 -1
- package/docs/source/lib/goog/testing/watchers.js.src.html +1 -1
- package/docs/source/lib/goog/uri/uri.js.src.html +1 -1
- package/docs/source/lib/goog/uri/utils.js.src.html +1 -1
- package/docs/source/lib/goog/useragent/product.js.src.html +1 -1
- package/docs/source/lib/goog/useragent/product_isversion.js.src.html +1 -1
- package/docs/source/lib/goog/useragent/useragent.js.src.html +1 -1
- package/docs/source/lib/webdriver/abstractbuilder.js.src.html +1 -1
- package/docs/source/lib/webdriver/actionsequence.js.src.html +1 -1
- package/docs/source/lib/webdriver/builder.js.src.html +1 -1
- package/docs/source/lib/webdriver/button.js.src.html +1 -1
- package/docs/source/lib/webdriver/capabilities.js.src.html +1 -1
- package/docs/source/lib/webdriver/command.js.src.html +1 -1
- package/docs/source/lib/webdriver/events.js.src.html +1 -1
- package/docs/source/lib/webdriver/firefoxdomexecutor.js.src.html +1 -1
- package/docs/source/lib/webdriver/http/corsclient.js.src.html +1 -1
- package/docs/source/lib/webdriver/http/http.js.src.html +1 -1
- package/docs/source/lib/webdriver/http/xhrclient.js.src.html +1 -1
- package/docs/source/lib/webdriver/key.js.src.html +1 -1
- package/docs/source/lib/webdriver/locators.js.src.html +1 -1
- package/docs/source/lib/webdriver/logging.js.src.html +1 -1
- package/docs/source/lib/webdriver/process.js.src.html +1 -1
- package/docs/source/lib/webdriver/promise.js.src.html +1 -1
- package/docs/source/lib/webdriver/session.js.src.html +1 -1
- package/docs/source/lib/webdriver/stacktrace.js.src.html +1 -1
- package/docs/source/lib/webdriver/testing/asserts.js.src.html +1 -1
- package/docs/source/lib/webdriver/testing/testcase.js.src.html +1 -1
- package/docs/source/lib/webdriver/until.js.src.html +1 -0
- package/docs/source/lib/webdriver/webdriver.js.src.html +1 -1
- package/docs/source/net/index.js.src.html +1 -1
- package/docs/source/net/portprober.js.src.html +1 -1
- package/docs/source/phantomjs.js.src.html +1 -1
- package/docs/source/proxy.js.src.html +1 -1
- package/docs/source/remote/index.js.src.html +1 -1
- package/docs/source/testing/assert.js.src.html +1 -1
- package/docs/source/testing/index.js.src.html +1 -1
- package/docs/types.js +1 -1
- package/example/google_search.js +9 -17
- package/example/google_search_generator.js +6 -7
- package/example/google_search_test.js +10 -18
- package/example/parallel_flows.js +4 -7
- package/index.js +6 -0
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/goog/deps.js +7 -5
- package/lib/test/index.js +0 -8
- package/lib/webdriver/promise.js +263 -251
- package/lib/webdriver/stacktrace.js +15 -1
- package/lib/webdriver/test/promise_flow_test.js +82 -76
- package/lib/webdriver/test/promise_test.js +22 -62
- package/lib/webdriver/test/stacktrace_test.js +18 -0
- package/lib/webdriver/test/until_test.js +388 -0
- package/lib/webdriver/test/webdriver_test.js +41 -0
- package/lib/webdriver/until.js +408 -0
- package/lib/webdriver/webdriver.js +91 -29
- package/package.json +2 -2
- package/test/element_finding_test.js +6 -6
- package/test/http/util_test.js +4 -5
- package/test/page_loading_test.js +7 -7
- package/test/stale_element_test.js +2 -10
- package/testing/index.js +9 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta http-equiv="Content-Language" content="en" /><title>disposable.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><div id="main-wrapper"><input type="checkbox" id="sidenav-toggle" /><main><header><h1>lib/goog/disposable/disposable.js</h1></header><pre><table class="srcfile"><tbody><tr><td><a name="l1" href="#l1">1</a><td>// Copyright 2005 The Closure Library Authors. All Rights Reserved.<tr><td><a name="l2" href="#l2">2</a><td>//<tr><td><a name="l3" href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a name="l4" href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a name="l5" href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a name="l6" href="#l6">6</a><td>//<tr><td><a name="l7" href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a name="l8" href="#l8">8</a><td>//<tr><td><a name="l9" href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a name="l10" href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a name="l11" href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a name="l12" href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a name="l13" href="#l13">13</a><td>// limitations under the License.<tr><td><a name="l14" href="#l14">14</a><td><tr><td><a name="l15" href="#l15">15</a><td>/**<tr><td><a name="l16" href="#l16">16</a><td> * @fileoverview Implements the disposable interface. The dispose method is used<tr><td><a name="l17" href="#l17">17</a><td> * to clean up references and resources.<tr><td><a name="l18" href="#l18">18</a><td> * @author arv@google.com (Erik Arvidsson)<tr><td><a name="l19" href="#l19">19</a><td> */<tr><td><a name="l20" href="#l20">20</a><td><tr><td><a name="l21" href="#l21">21</a><td><tr><td><a name="l22" href="#l22">22</a><td>goog.provide('goog.Disposable');<tr><td><a name="l23" href="#l23">23</a><td>/** @suppress {extraProvide} */<tr><td><a name="l24" href="#l24">24</a><td>goog.provide('goog.dispose');<tr><td><a name="l25" href="#l25">25</a><td>/** @suppress {extraProvide} */<tr><td><a name="l26" href="#l26">26</a><td>goog.provide('goog.disposeAll');<tr><td><a name="l27" href="#l27">27</a><td><tr><td><a name="l28" href="#l28">28</a><td>goog.require('goog.disposable.IDisposable');<tr><td><a name="l29" href="#l29">29</a><td><tr><td><a name="l30" href="#l30">30</a><td><tr><td><a name="l31" href="#l31">31</a><td><tr><td><a name="l32" href="#l32">32</a><td>/**<tr><td><a name="l33" href="#l33">33</a><td> * Class that provides the basic implementation for disposable objects. If your<tr><td><a name="l34" href="#l34">34</a><td> * class holds one or more references to COM objects, DOM nodes, or other<tr><td><a name="l35" href="#l35">35</a><td> * disposable objects, it should extend this class or implement the disposable<tr><td><a name="l36" href="#l36">36</a><td> * interface (defined in goog.disposable.IDisposable).<tr><td><a name="l37" href="#l37">37</a><td> * @constructor<tr><td><a name="l38" href="#l38">38</a><td> * @implements {goog.disposable.IDisposable}<tr><td><a name="l39" href="#l39">39</a><td> */<tr><td><a name="l40" href="#l40">40</a><td>goog.Disposable = function() {<tr><td><a name="l41" href="#l41">41</a><td> if (goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {<tr><td><a name="l42" href="#l42">42</a><td> if (goog.Disposable.INCLUDE_STACK_ON_CREATION) {<tr><td><a name="l43" href="#l43">43</a><td> this.creationStack = new Error().stack;<tr><td><a name="l44" href="#l44">44</a><td> }<tr><td><a name="l45" href="#l45">45</a><td> goog.Disposable.instances_[goog.getUid(this)] = this;<tr><td><a name="l46" href="#l46">46</a><td> }<tr><td><a name="l47" href="#l47">47</a><td> // Support sealing<tr><td><a name="l48" href="#l48">48</a><td> this.disposed_ = this.disposed_;<tr><td><a name="l49" href="#l49">49</a><td> this.onDisposeCallbacks_ = this.onDisposeCallbacks_;<tr><td><a name="l50" href="#l50">50</a><td>};<tr><td><a name="l51" href="#l51">51</a><td><tr><td><a name="l52" href="#l52">52</a><td><tr><td><a name="l53" href="#l53">53</a><td>/**<tr><td><a name="l54" href="#l54">54</a><td> * @enum {number} Different monitoring modes for Disposable.<tr><td><a name="l55" href="#l55">55</a><td> */<tr><td><a name="l56" href="#l56">56</a><td>goog.Disposable.MonitoringMode = {<tr><td><a name="l57" href="#l57">57</a><td> /**<tr><td><a name="l58" href="#l58">58</a><td> * No monitoring.<tr><td><a name="l59" href="#l59">59</a><td> */<tr><td><a name="l60" href="#l60">60</a><td> OFF: 0,<tr><td><a name="l61" href="#l61">61</a><td> /**<tr><td><a name="l62" href="#l62">62</a><td> * Creating and disposing the goog.Disposable instances is monitored. All<tr><td><a name="l63" href="#l63">63</a><td> * disposable objects need to call the {@code goog.Disposable} base<tr><td><a name="l64" href="#l64">64</a><td> * constructor. The PERMANENT mode must be switched on before creating any<tr><td><a name="l65" href="#l65">65</a><td> * goog.Disposable instances.<tr><td><a name="l66" href="#l66">66</a><td> */<tr><td><a name="l67" href="#l67">67</a><td> PERMANENT: 1,<tr><td><a name="l68" href="#l68">68</a><td> /**<tr><td><a name="l69" href="#l69">69</a><td> * INTERACTIVE mode can be switched on and off on the fly without producing<tr><td><a name="l70" href="#l70">70</a><td> * errors. It also doesn't warn if the disposable objects don't call the<tr><td><a name="l71" href="#l71">71</a><td> * {@code goog.Disposable} base constructor.<tr><td><a name="l72" href="#l72">72</a><td> */<tr><td><a name="l73" href="#l73">73</a><td> INTERACTIVE: 2<tr><td><a name="l74" href="#l74">74</a><td>};<tr><td><a name="l75" href="#l75">75</a><td><tr><td><a name="l76" href="#l76">76</a><td><tr><td><a name="l77" href="#l77">77</a><td>/**<tr><td><a name="l78" href="#l78">78</a><td> * @define {number} The monitoring mode of the goog.Disposable<tr><td><a name="l79" href="#l79">79</a><td> * instances. Default is OFF. Switching on the monitoring is only<tr><td><a name="l80" href="#l80">80</a><td> * recommended for debugging because it has a significant impact on<tr><td><a name="l81" href="#l81">81</a><td> * performance and memory usage. If switched off, the monitoring code<tr><td><a name="l82" href="#l82">82</a><td> * compiles down to 0 bytes.<tr><td><a name="l83" href="#l83">83</a><td> */<tr><td><a name="l84" href="#l84">84</a><td>goog.define('goog.Disposable.MONITORING_MODE', 0);<tr><td><a name="l85" href="#l85">85</a><td><tr><td><a name="l86" href="#l86">86</a><td><tr><td><a name="l87" href="#l87">87</a><td>/**<tr><td><a name="l88" href="#l88">88</a><td> * @define {boolean} Whether to attach creation stack to each created disposable<tr><td><a name="l89" href="#l89">89</a><td> * instance; This is only relevant for when MonitoringMode != OFF.<tr><td><a name="l90" href="#l90">90</a><td> */<tr><td><a name="l91" href="#l91">91</a><td>goog.define('goog.Disposable.INCLUDE_STACK_ON_CREATION', true);<tr><td><a name="l92" href="#l92">92</a><td><tr><td><a name="l93" href="#l93">93</a><td><tr><td><a name="l94" href="#l94">94</a><td>/**<tr><td><a name="l95" href="#l95">95</a><td> * Maps the unique ID of every undisposed {@code goog.Disposable} object to<tr><td><a name="l96" href="#l96">96</a><td> * the object itself.<tr><td><a name="l97" href="#l97">97</a><td> * @type {!Object.<number, !goog.Disposable>}<tr><td><a name="l98" href="#l98">98</a><td> * @private<tr><td><a name="l99" href="#l99">99</a><td> */<tr><td><a name="l100" href="#l100">100</a><td>goog.Disposable.instances_ = {};<tr><td><a name="l101" href="#l101">101</a><td><tr><td><a name="l102" href="#l102">102</a><td><tr><td><a name="l103" href="#l103">103</a><td>/**<tr><td><a name="l104" href="#l104">104</a><td> * @return {!Array.<!goog.Disposable>} All {@code goog.Disposable} objects that<tr><td><a name="l105" href="#l105">105</a><td> * haven't been disposed of.<tr><td><a name="l106" href="#l106">106</a><td> */<tr><td><a name="l107" href="#l107">107</a><td>goog.Disposable.getUndisposedObjects = function() {<tr><td><a name="l108" href="#l108">108</a><td> var ret = [];<tr><td><a name="l109" href="#l109">109</a><td> for (var id in goog.Disposable.instances_) {<tr><td><a name="l110" href="#l110">110</a><td> if (goog.Disposable.instances_.hasOwnProperty(id)) {<tr><td><a name="l111" href="#l111">111</a><td> ret.push(goog.Disposable.instances_[Number(id)]);<tr><td><a name="l112" href="#l112">112</a><td> }<tr><td><a name="l113" href="#l113">113</a><td> }<tr><td><a name="l114" href="#l114">114</a><td> return ret;<tr><td><a name="l115" href="#l115">115</a><td>};<tr><td><a name="l116" href="#l116">116</a><td><tr><td><a name="l117" href="#l117">117</a><td><tr><td><a name="l118" href="#l118">118</a><td>/**<tr><td><a name="l119" href="#l119">119</a><td> * Clears the registry of undisposed objects but doesn't dispose of them.<tr><td><a name="l120" href="#l120">120</a><td> */<tr><td><a name="l121" href="#l121">121</a><td>goog.Disposable.clearUndisposedObjects = function() {<tr><td><a name="l122" href="#l122">122</a><td> goog.Disposable.instances_ = {};<tr><td><a name="l123" href="#l123">123</a><td>};<tr><td><a name="l124" href="#l124">124</a><td><tr><td><a name="l125" href="#l125">125</a><td><tr><td><a name="l126" href="#l126">126</a><td>/**<tr><td><a name="l127" href="#l127">127</a><td> * Whether the object has been disposed of.<tr><td><a name="l128" href="#l128">128</a><td> * @type {boolean}<tr><td><a name="l129" href="#l129">129</a><td> * @private<tr><td><a name="l130" href="#l130">130</a><td> */<tr><td><a name="l131" href="#l131">131</a><td>goog.Disposable.prototype.disposed_ = false;<tr><td><a name="l132" href="#l132">132</a><td><tr><td><a name="l133" href="#l133">133</a><td><tr><td><a name="l134" href="#l134">134</a><td>/**<tr><td><a name="l135" href="#l135">135</a><td> * Callbacks to invoke when this object is disposed.<tr><td><a name="l136" href="#l136">136</a><td> * @type {Array.<!Function>}<tr><td><a name="l137" href="#l137">137</a><td> * @private<tr><td><a name="l138" href="#l138">138</a><td> */<tr><td><a name="l139" href="#l139">139</a><td>goog.Disposable.prototype.onDisposeCallbacks_;<tr><td><a name="l140" href="#l140">140</a><td><tr><td><a name="l141" href="#l141">141</a><td><tr><td><a name="l142" href="#l142">142</a><td>/**<tr><td><a name="l143" href="#l143">143</a><td> * If monitoring the goog.Disposable instances is enabled, stores the creation<tr><td><a name="l144" href="#l144">144</a><td> * stack trace of the Disposable instance.<tr><td><a name="l145" href="#l145">145</a><td> * @const {string}<tr><td><a name="l146" href="#l146">146</a><td> */<tr><td><a name="l147" href="#l147">147</a><td>goog.Disposable.prototype.creationStack;<tr><td><a name="l148" href="#l148">148</a><td><tr><td><a name="l149" href="#l149">149</a><td><tr><td><a name="l150" href="#l150">150</a><td>/**<tr><td><a name="l151" href="#l151">151</a><td> * @return {boolean} Whether the object has been disposed of.<tr><td><a name="l152" href="#l152">152</a><td> * @override<tr><td><a name="l153" href="#l153">153</a><td> */<tr><td><a name="l154" href="#l154">154</a><td>goog.Disposable.prototype.isDisposed = function() {<tr><td><a name="l155" href="#l155">155</a><td> return this.disposed_;<tr><td><a name="l156" href="#l156">156</a><td>};<tr><td><a name="l157" href="#l157">157</a><td><tr><td><a name="l158" href="#l158">158</a><td><tr><td><a name="l159" href="#l159">159</a><td>/**<tr><td><a name="l160" href="#l160">160</a><td> * @return {boolean} Whether the object has been disposed of.<tr><td><a name="l161" href="#l161">161</a><td> * @deprecated Use {@link #isDisposed} instead.<tr><td><a name="l162" href="#l162">162</a><td> */<tr><td><a name="l163" href="#l163">163</a><td>goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed;<tr><td><a name="l164" href="#l164">164</a><td><tr><td><a name="l165" href="#l165">165</a><td><tr><td><a name="l166" href="#l166">166</a><td>/**<tr><td><a name="l167" href="#l167">167</a><td> * Disposes of the object. If the object hasn't already been disposed of, calls<tr><td><a name="l168" href="#l168">168</a><td> * {@link #disposeInternal}. Classes that extend {@code goog.Disposable} should<tr><td><a name="l169" href="#l169">169</a><td> * override {@link #disposeInternal} in order to delete references to COM<tr><td><a name="l170" href="#l170">170</a><td> * objects, DOM nodes, and other disposable objects. Reentrant.<tr><td><a name="l171" href="#l171">171</a><td> *<tr><td><a name="l172" href="#l172">172</a><td> * @return {void} Nothing.<tr><td><a name="l173" href="#l173">173</a><td> * @override<tr><td><a name="l174" href="#l174">174</a><td> */<tr><td><a name="l175" href="#l175">175</a><td>goog.Disposable.prototype.dispose = function() {<tr><td><a name="l176" href="#l176">176</a><td> if (!this.disposed_) {<tr><td><a name="l177" href="#l177">177</a><td> // Set disposed_ to true first, in case during the chain of disposal this<tr><td><a name="l178" href="#l178">178</a><td> // gets disposed recursively.<tr><td><a name="l179" href="#l179">179</a><td> this.disposed_ = true;<tr><td><a name="l180" href="#l180">180</a><td> this.disposeInternal();<tr><td><a name="l181" href="#l181">181</a><td> if (goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {<tr><td><a name="l182" href="#l182">182</a><td> var uid = goog.getUid(this);<tr><td><a name="l183" href="#l183">183</a><td> if (goog.Disposable.MONITORING_MODE ==<tr><td><a name="l184" href="#l184">184</a><td> goog.Disposable.MonitoringMode.PERMANENT &&<tr><td><a name="l185" href="#l185">185</a><td> !goog.Disposable.instances_.hasOwnProperty(uid)) {<tr><td><a name="l186" href="#l186">186</a><td> throw Error(this + ' did not call the goog.Disposable base ' +<tr><td><a name="l187" href="#l187">187</a><td> 'constructor or was disposed of after a clearUndisposedObjects ' +<tr><td><a name="l188" href="#l188">188</a><td> 'call');<tr><td><a name="l189" href="#l189">189</a><td> }<tr><td><a name="l190" href="#l190">190</a><td> delete goog.Disposable.instances_[uid];<tr><td><a name="l191" href="#l191">191</a><td> }<tr><td><a name="l192" href="#l192">192</a><td> }<tr><td><a name="l193" href="#l193">193</a><td>};<tr><td><a name="l194" href="#l194">194</a><td><tr><td><a name="l195" href="#l195">195</a><td><tr><td><a name="l196" href="#l196">196</a><td>/**<tr><td><a name="l197" href="#l197">197</a><td> * Associates a disposable object with this object so that they will be disposed<tr><td><a name="l198" href="#l198">198</a><td> * together.<tr><td><a name="l199" href="#l199">199</a><td> * @param {goog.disposable.IDisposable} disposable that will be disposed when<tr><td><a name="l200" href="#l200">200</a><td> * this object is disposed.<tr><td><a name="l201" href="#l201">201</a><td> */<tr><td><a name="l202" href="#l202">202</a><td>goog.Disposable.prototype.registerDisposable = function(disposable) {<tr><td><a name="l203" href="#l203">203</a><td> this.addOnDisposeCallback(goog.partial(goog.dispose, disposable));<tr><td><a name="l204" href="#l204">204</a><td>};<tr><td><a name="l205" href="#l205">205</a><td><tr><td><a name="l206" href="#l206">206</a><td><tr><td><a name="l207" href="#l207">207</a><td>/**<tr><td><a name="l208" href="#l208">208</a><td> * Invokes a callback function when this object is disposed. Callbacks are<tr><td><a name="l209" href="#l209">209</a><td> * invoked in the order in which they were added.<tr><td><a name="l210" href="#l210">210</a><td> * @param {function(this:T):?} callback The callback function.<tr><td><a name="l211" href="#l211">211</a><td> * @param {T=} opt_scope An optional scope to call the callback in.<tr><td><a name="l212" href="#l212">212</a><td> * @template T<tr><td><a name="l213" href="#l213">213</a><td> */<tr><td><a name="l214" href="#l214">214</a><td>goog.Disposable.prototype.addOnDisposeCallback = function(callback, opt_scope) {<tr><td><a name="l215" href="#l215">215</a><td> if (!this.onDisposeCallbacks_) {<tr><td><a name="l216" href="#l216">216</a><td> this.onDisposeCallbacks_ = [];<tr><td><a name="l217" href="#l217">217</a><td> }<tr><td><a name="l218" href="#l218">218</a><td><tr><td><a name="l219" href="#l219">219</a><td> this.onDisposeCallbacks_.push(<tr><td><a name="l220" href="#l220">220</a><td> goog.isDef(opt_scope) ? goog.bind(callback, opt_scope) : callback);<tr><td><a name="l221" href="#l221">221</a><td>};<tr><td><a name="l222" href="#l222">222</a><td><tr><td><a name="l223" href="#l223">223</a><td><tr><td><a name="l224" href="#l224">224</a><td>/**<tr><td><a name="l225" href="#l225">225</a><td> * Deletes or nulls out any references to COM objects, DOM nodes, or other<tr><td><a name="l226" href="#l226">226</a><td> * disposable objects. Classes that extend {@code goog.Disposable} should<tr><td><a name="l227" href="#l227">227</a><td> * override this method.<tr><td><a name="l228" href="#l228">228</a><td> * Not reentrant. To avoid calling it twice, it must only be called from the<tr><td><a name="l229" href="#l229">229</a><td> * subclass' {@code disposeInternal} method. Everywhere else the public<tr><td><a name="l230" href="#l230">230</a><td> * {@code dispose} method must be used.<tr><td><a name="l231" href="#l231">231</a><td> * For example:<tr><td><a name="l232" href="#l232">232</a><td> * <pre><tr><td><a name="l233" href="#l233">233</a><td> * mypackage.MyClass = function() {<tr><td><a name="l234" href="#l234">234</a><td> * mypackage.MyClass.base(this, 'constructor');<tr><td><a name="l235" href="#l235">235</a><td> * // Constructor logic specific to MyClass.<tr><td><a name="l236" href="#l236">236</a><td> * ...<tr><td><a name="l237" href="#l237">237</a><td> * };<tr><td><a name="l238" href="#l238">238</a><td> * goog.inherits(mypackage.MyClass, goog.Disposable);<tr><td><a name="l239" href="#l239">239</a><td> *<tr><td><a name="l240" href="#l240">240</a><td> * mypackage.MyClass.prototype.disposeInternal = function() {<tr><td><a name="l241" href="#l241">241</a><td> * // Dispose logic specific to MyClass.<tr><td><a name="l242" href="#l242">242</a><td> * ...<tr><td><a name="l243" href="#l243">243</a><td> * // Call superclass's disposeInternal at the end of the subclass's, like<tr><td><a name="l244" href="#l244">244</a><td> * // in C++, to avoid hard-to-catch issues.<tr><td><a name="l245" href="#l245">245</a><td> * mypackage.MyClass.base(this, 'disposeInternal');<tr><td><a name="l246" href="#l246">246</a><td> * };<tr><td><a name="l247" href="#l247">247</a><td> * </pre><tr><td><a name="l248" href="#l248">248</a><td> * @protected<tr><td><a name="l249" href="#l249">249</a><td> */<tr><td><a name="l250" href="#l250">250</a><td>goog.Disposable.prototype.disposeInternal = function() {<tr><td><a name="l251" href="#l251">251</a><td> if (this.onDisposeCallbacks_) {<tr><td><a name="l252" href="#l252">252</a><td> while (this.onDisposeCallbacks_.length) {<tr><td><a name="l253" href="#l253">253</a><td> this.onDisposeCallbacks_.shift()();<tr><td><a name="l254" href="#l254">254</a><td> }<tr><td><a name="l255" href="#l255">255</a><td> }<tr><td><a name="l256" href="#l256">256</a><td>};<tr><td><a name="l257" href="#l257">257</a><td><tr><td><a name="l258" href="#l258">258</a><td><tr><td><a name="l259" href="#l259">259</a><td>/**<tr><td><a name="l260" href="#l260">260</a><td> * Returns True if we can verify the object is disposed.<tr><td><a name="l261" href="#l261">261</a><td> * Calls {@code isDisposed} on the argument if it supports it. If obj<tr><td><a name="l262" href="#l262">262</a><td> * is not an object with an isDisposed() method, return false.<tr><td><a name="l263" href="#l263">263</a><td> * @param {*} obj The object to investigate.<tr><td><a name="l264" href="#l264">264</a><td> * @return {boolean} True if we can verify the object is disposed.<tr><td><a name="l265" href="#l265">265</a><td> */<tr><td><a name="l266" href="#l266">266</a><td>goog.Disposable.isDisposed = function(obj) {<tr><td><a name="l267" href="#l267">267</a><td> if (obj && typeof obj.isDisposed == 'function') {<tr><td><a name="l268" href="#l268">268</a><td> return obj.isDisposed();<tr><td><a name="l269" href="#l269">269</a><td> }<tr><td><a name="l270" href="#l270">270</a><td> return false;<tr><td><a name="l271" href="#l271">271</a><td>};<tr><td><a name="l272" href="#l272">272</a><td><tr><td><a name="l273" href="#l273">273</a><td><tr><td><a name="l274" href="#l274">274</a><td>/**<tr><td><a name="l275" href="#l275">275</a><td> * Calls {@code dispose} on the argument if it supports it. If obj is not an<tr><td><a name="l276" href="#l276">276</a><td> * object with a dispose() method, this is a no-op.<tr><td><a name="l277" href="#l277">277</a><td> * @param {*} obj The object to dispose of.<tr><td><a name="l278" href="#l278">278</a><td> */<tr><td><a name="l279" href="#l279">279</a><td>goog.dispose = function(obj) {<tr><td><a name="l280" href="#l280">280</a><td> if (obj && typeof obj.dispose == 'function') {<tr><td><a name="l281" href="#l281">281</a><td> obj.dispose();<tr><td><a name="l282" href="#l282">282</a><td> }<tr><td><a name="l283" href="#l283">283</a><td>};<tr><td><a name="l284" href="#l284">284</a><td><tr><td><a name="l285" href="#l285">285</a><td><tr><td><a name="l286" href="#l286">286</a><td>/**<tr><td><a name="l287" href="#l287">287</a><td> * Calls {@code dispose} on each member of the list that supports it. (If the<tr><td><a name="l288" href="#l288">288</a><td> * member is an ArrayLike, then {@code goog.disposeAll()} will be called<tr><td><a name="l289" href="#l289">289</a><td> * recursively on each of its members.) If the member is not an object with a<tr><td><a name="l290" href="#l290">290</a><td> * {@code dispose()} method, then it is ignored.<tr><td><a name="l291" href="#l291">291</a><td> * @param {...*} var_args The list.<tr><td><a name="l292" href="#l292">292</a><td> */<tr><td><a name="l293" href="#l293">293</a><td>goog.disposeAll = function(var_args) {<tr><td><a name="l294" href="#l294">294</a><td> for (var i = 0, len = arguments.length; i < len; ++i) {<tr><td><a name="l295" href="#l295">295</a><td> var disposable = arguments[i];<tr><td><a name="l296" href="#l296">296</a><td> if (goog.isArrayLike(disposable)) {<tr><td><a name="l297" href="#l297">297</a><td> goog.disposeAll.apply(null, disposable);<tr><td><a name="l298" href="#l298">298</a><td> } else {<tr><td><a name="l299" href="#l299">299</a><td> goog.dispose(disposable);<tr><td><a name="l300" href="#l300">300</a><td> }<tr><td><a name="l301" href="#l301">301</a><td> }<tr><td><a name="l302" href="#l302">302</a><td>};</table></pre></main><nav id="topnav"><div><div id="menubutton"><label for="sidenav-toggle">Menu</label></div><form id="searchbox"><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></nav><nav id="sidenav"><input type="checkbox" id="sidenav-types-ctrl" /><input type="checkbox" id="sidenav-files-ctrl" /><input type="checkbox" id="sidenav-modules-ctrl" /><a id="sidenav-overview"><div><h4>Overview</h4></div></a><div id="sidenav-types"><label for="sidenav-types-ctrl"><h4>Types</h4></label><i>Loading</i></div><div id="sidenav-modules"><label for="sidenav-modules-ctrl"><h4>Modules</h4></label><i>Loading</i></div><div id="sidenav-files"><label for="sidenav-files-ctrl"><h4>Files</h4></label><i>Loading</i></div><a href="license.html"><div><h4>License</h4></div></a></nav><div id="push-footer"></div></div><footer><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|
|
1
|
+
<!DOCTYPE html><meta charset="UTF-8"><meta http-equiv="Content-Language" content="en" /><title>disposable.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><div id="main-wrapper"><input type="checkbox" id="sidenav-toggle" /><main><header><h1>lib/goog/disposable/disposable.js</h1></header><pre><table class="srcfile"><tbody><tr><td><a name="l1" href="#l1">1</a><td>// Copyright 2005 The Closure Library Authors. All Rights Reserved.<tr><td><a name="l2" href="#l2">2</a><td>//<tr><td><a name="l3" href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a name="l4" href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a name="l5" href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a name="l6" href="#l6">6</a><td>//<tr><td><a name="l7" href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a name="l8" href="#l8">8</a><td>//<tr><td><a name="l9" href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a name="l10" href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a name="l11" href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a name="l12" href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a name="l13" href="#l13">13</a><td>// limitations under the License.<tr><td><a name="l14" href="#l14">14</a><td><tr><td><a name="l15" href="#l15">15</a><td>/**<tr><td><a name="l16" href="#l16">16</a><td> * @fileoverview Implements the disposable interface. The dispose method is used<tr><td><a name="l17" href="#l17">17</a><td> * to clean up references and resources.<tr><td><a name="l18" href="#l18">18</a><td> * @author arv@google.com (Erik Arvidsson)<tr><td><a name="l19" href="#l19">19</a><td> */<tr><td><a name="l20" href="#l20">20</a><td><tr><td><a name="l21" href="#l21">21</a><td><tr><td><a name="l22" href="#l22">22</a><td>goog.provide('goog.Disposable');<tr><td><a name="l23" href="#l23">23</a><td>/** @suppress {extraProvide} */<tr><td><a name="l24" href="#l24">24</a><td>goog.provide('goog.dispose');<tr><td><a name="l25" href="#l25">25</a><td>/** @suppress {extraProvide} */<tr><td><a name="l26" href="#l26">26</a><td>goog.provide('goog.disposeAll');<tr><td><a name="l27" href="#l27">27</a><td><tr><td><a name="l28" href="#l28">28</a><td>goog.require('goog.disposable.IDisposable');<tr><td><a name="l29" href="#l29">29</a><td><tr><td><a name="l30" href="#l30">30</a><td><tr><td><a name="l31" href="#l31">31</a><td><tr><td><a name="l32" href="#l32">32</a><td>/**<tr><td><a name="l33" href="#l33">33</a><td> * Class that provides the basic implementation for disposable objects. If your<tr><td><a name="l34" href="#l34">34</a><td> * class holds one or more references to COM objects, DOM nodes, or other<tr><td><a name="l35" href="#l35">35</a><td> * disposable objects, it should extend this class or implement the disposable<tr><td><a name="l36" href="#l36">36</a><td> * interface (defined in goog.disposable.IDisposable).<tr><td><a name="l37" href="#l37">37</a><td> * @constructor<tr><td><a name="l38" href="#l38">38</a><td> * @implements {goog.disposable.IDisposable}<tr><td><a name="l39" href="#l39">39</a><td> */<tr><td><a name="l40" href="#l40">40</a><td>goog.Disposable = function() {<tr><td><a name="l41" href="#l41">41</a><td> if (goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {<tr><td><a name="l42" href="#l42">42</a><td> if (goog.Disposable.INCLUDE_STACK_ON_CREATION) {<tr><td><a name="l43" href="#l43">43</a><td> this.creationStack = new Error().stack;<tr><td><a name="l44" href="#l44">44</a><td> }<tr><td><a name="l45" href="#l45">45</a><td> goog.Disposable.instances_[goog.getUid(this)] = this;<tr><td><a name="l46" href="#l46">46</a><td> }<tr><td><a name="l47" href="#l47">47</a><td> // Support sealing<tr><td><a name="l48" href="#l48">48</a><td> this.disposed_ = this.disposed_;<tr><td><a name="l49" href="#l49">49</a><td> this.onDisposeCallbacks_ = this.onDisposeCallbacks_;<tr><td><a name="l50" href="#l50">50</a><td>};<tr><td><a name="l51" href="#l51">51</a><td><tr><td><a name="l52" href="#l52">52</a><td><tr><td><a name="l53" href="#l53">53</a><td>/**<tr><td><a name="l54" href="#l54">54</a><td> * @enum {number} Different monitoring modes for Disposable.<tr><td><a name="l55" href="#l55">55</a><td> */<tr><td><a name="l56" href="#l56">56</a><td>goog.Disposable.MonitoringMode = {<tr><td><a name="l57" href="#l57">57</a><td> /**<tr><td><a name="l58" href="#l58">58</a><td> * No monitoring.<tr><td><a name="l59" href="#l59">59</a><td> */<tr><td><a name="l60" href="#l60">60</a><td> OFF: 0,<tr><td><a name="l61" href="#l61">61</a><td> /**<tr><td><a name="l62" href="#l62">62</a><td> * Creating and disposing the goog.Disposable instances is monitored. All<tr><td><a name="l63" href="#l63">63</a><td> * disposable objects need to call the {@code goog.Disposable} base<tr><td><a name="l64" href="#l64">64</a><td> * constructor. The PERMANENT mode must be switched on before creating any<tr><td><a name="l65" href="#l65">65</a><td> * goog.Disposable instances.<tr><td><a name="l66" href="#l66">66</a><td> */<tr><td><a name="l67" href="#l67">67</a><td> PERMANENT: 1,<tr><td><a name="l68" href="#l68">68</a><td> /**<tr><td><a name="l69" href="#l69">69</a><td> * INTERACTIVE mode can be switched on and off on the fly without producing<tr><td><a name="l70" href="#l70">70</a><td> * errors. It also doesn't warn if the disposable objects don't call the<tr><td><a name="l71" href="#l71">71</a><td> * {@code goog.Disposable} base constructor.<tr><td><a name="l72" href="#l72">72</a><td> */<tr><td><a name="l73" href="#l73">73</a><td> INTERACTIVE: 2<tr><td><a name="l74" href="#l74">74</a><td>};<tr><td><a name="l75" href="#l75">75</a><td><tr><td><a name="l76" href="#l76">76</a><td><tr><td><a name="l77" href="#l77">77</a><td>/**<tr><td><a name="l78" href="#l78">78</a><td> * @define {number} The monitoring mode of the goog.Disposable<tr><td><a name="l79" href="#l79">79</a><td> * instances. Default is OFF. Switching on the monitoring is only<tr><td><a name="l80" href="#l80">80</a><td> * recommended for debugging because it has a significant impact on<tr><td><a name="l81" href="#l81">81</a><td> * performance and memory usage. If switched off, the monitoring code<tr><td><a name="l82" href="#l82">82</a><td> * compiles down to 0 bytes.<tr><td><a name="l83" href="#l83">83</a><td> */<tr><td><a name="l84" href="#l84">84</a><td>goog.define('goog.Disposable.MONITORING_MODE', 0);<tr><td><a name="l85" href="#l85">85</a><td><tr><td><a name="l86" href="#l86">86</a><td><tr><td><a name="l87" href="#l87">87</a><td>/**<tr><td><a name="l88" href="#l88">88</a><td> * @define {boolean} Whether to attach creation stack to each created disposable<tr><td><a name="l89" href="#l89">89</a><td> * instance; This is only relevant for when MonitoringMode != OFF.<tr><td><a name="l90" href="#l90">90</a><td> */<tr><td><a name="l91" href="#l91">91</a><td>goog.define('goog.Disposable.INCLUDE_STACK_ON_CREATION', true);<tr><td><a name="l92" href="#l92">92</a><td><tr><td><a name="l93" href="#l93">93</a><td><tr><td><a name="l94" href="#l94">94</a><td>/**<tr><td><a name="l95" href="#l95">95</a><td> * Maps the unique ID of every undisposed {@code goog.Disposable} object to<tr><td><a name="l96" href="#l96">96</a><td> * the object itself.<tr><td><a name="l97" href="#l97">97</a><td> * @type {!Object.<number, !goog.Disposable>}<tr><td><a name="l98" href="#l98">98</a><td> * @private<tr><td><a name="l99" href="#l99">99</a><td> */<tr><td><a name="l100" href="#l100">100</a><td>goog.Disposable.instances_ = {};<tr><td><a name="l101" href="#l101">101</a><td><tr><td><a name="l102" href="#l102">102</a><td><tr><td><a name="l103" href="#l103">103</a><td>/**<tr><td><a name="l104" href="#l104">104</a><td> * @return {!Array.<!goog.Disposable>} All {@code goog.Disposable} objects that<tr><td><a name="l105" href="#l105">105</a><td> * haven't been disposed of.<tr><td><a name="l106" href="#l106">106</a><td> */<tr><td><a name="l107" href="#l107">107</a><td>goog.Disposable.getUndisposedObjects = function() {<tr><td><a name="l108" href="#l108">108</a><td> var ret = [];<tr><td><a name="l109" href="#l109">109</a><td> for (var id in goog.Disposable.instances_) {<tr><td><a name="l110" href="#l110">110</a><td> if (goog.Disposable.instances_.hasOwnProperty(id)) {<tr><td><a name="l111" href="#l111">111</a><td> ret.push(goog.Disposable.instances_[Number(id)]);<tr><td><a name="l112" href="#l112">112</a><td> }<tr><td><a name="l113" href="#l113">113</a><td> }<tr><td><a name="l114" href="#l114">114</a><td> return ret;<tr><td><a name="l115" href="#l115">115</a><td>};<tr><td><a name="l116" href="#l116">116</a><td><tr><td><a name="l117" href="#l117">117</a><td><tr><td><a name="l118" href="#l118">118</a><td>/**<tr><td><a name="l119" href="#l119">119</a><td> * Clears the registry of undisposed objects but doesn't dispose of them.<tr><td><a name="l120" href="#l120">120</a><td> */<tr><td><a name="l121" href="#l121">121</a><td>goog.Disposable.clearUndisposedObjects = function() {<tr><td><a name="l122" href="#l122">122</a><td> goog.Disposable.instances_ = {};<tr><td><a name="l123" href="#l123">123</a><td>};<tr><td><a name="l124" href="#l124">124</a><td><tr><td><a name="l125" href="#l125">125</a><td><tr><td><a name="l126" href="#l126">126</a><td>/**<tr><td><a name="l127" href="#l127">127</a><td> * Whether the object has been disposed of.<tr><td><a name="l128" href="#l128">128</a><td> * @type {boolean}<tr><td><a name="l129" href="#l129">129</a><td> * @private<tr><td><a name="l130" href="#l130">130</a><td> */<tr><td><a name="l131" href="#l131">131</a><td>goog.Disposable.prototype.disposed_ = false;<tr><td><a name="l132" href="#l132">132</a><td><tr><td><a name="l133" href="#l133">133</a><td><tr><td><a name="l134" href="#l134">134</a><td>/**<tr><td><a name="l135" href="#l135">135</a><td> * Callbacks to invoke when this object is disposed.<tr><td><a name="l136" href="#l136">136</a><td> * @type {Array.<!Function>}<tr><td><a name="l137" href="#l137">137</a><td> * @private<tr><td><a name="l138" href="#l138">138</a><td> */<tr><td><a name="l139" href="#l139">139</a><td>goog.Disposable.prototype.onDisposeCallbacks_;<tr><td><a name="l140" href="#l140">140</a><td><tr><td><a name="l141" href="#l141">141</a><td><tr><td><a name="l142" href="#l142">142</a><td>/**<tr><td><a name="l143" href="#l143">143</a><td> * If monitoring the goog.Disposable instances is enabled, stores the creation<tr><td><a name="l144" href="#l144">144</a><td> * stack trace of the Disposable instance.<tr><td><a name="l145" href="#l145">145</a><td> * @const {string}<tr><td><a name="l146" href="#l146">146</a><td> */<tr><td><a name="l147" href="#l147">147</a><td>goog.Disposable.prototype.creationStack;<tr><td><a name="l148" href="#l148">148</a><td><tr><td><a name="l149" href="#l149">149</a><td><tr><td><a name="l150" href="#l150">150</a><td>/**<tr><td><a name="l151" href="#l151">151</a><td> * @return {boolean} Whether the object has been disposed of.<tr><td><a name="l152" href="#l152">152</a><td> * @override<tr><td><a name="l153" href="#l153">153</a><td> */<tr><td><a name="l154" href="#l154">154</a><td>goog.Disposable.prototype.isDisposed = function() {<tr><td><a name="l155" href="#l155">155</a><td> return this.disposed_;<tr><td><a name="l156" href="#l156">156</a><td>};<tr><td><a name="l157" href="#l157">157</a><td><tr><td><a name="l158" href="#l158">158</a><td><tr><td><a name="l159" href="#l159">159</a><td>/**<tr><td><a name="l160" href="#l160">160</a><td> * @return {boolean} Whether the object has been disposed of.<tr><td><a name="l161" href="#l161">161</a><td> * @deprecated Use {@link #isDisposed} instead.<tr><td><a name="l162" href="#l162">162</a><td> */<tr><td><a name="l163" href="#l163">163</a><td>goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed;<tr><td><a name="l164" href="#l164">164</a><td><tr><td><a name="l165" href="#l165">165</a><td><tr><td><a name="l166" href="#l166">166</a><td>/**<tr><td><a name="l167" href="#l167">167</a><td> * Disposes of the object. If the object hasn't already been disposed of, calls<tr><td><a name="l168" href="#l168">168</a><td> * {@link #disposeInternal}. Classes that extend {@code goog.Disposable} should<tr><td><a name="l169" href="#l169">169</a><td> * override {@link #disposeInternal} in order to delete references to COM<tr><td><a name="l170" href="#l170">170</a><td> * objects, DOM nodes, and other disposable objects. Reentrant.<tr><td><a name="l171" href="#l171">171</a><td> *<tr><td><a name="l172" href="#l172">172</a><td> * @return {void} Nothing.<tr><td><a name="l173" href="#l173">173</a><td> * @override<tr><td><a name="l174" href="#l174">174</a><td> */<tr><td><a name="l175" href="#l175">175</a><td>goog.Disposable.prototype.dispose = function() {<tr><td><a name="l176" href="#l176">176</a><td> if (!this.disposed_) {<tr><td><a name="l177" href="#l177">177</a><td> // Set disposed_ to true first, in case during the chain of disposal this<tr><td><a name="l178" href="#l178">178</a><td> // gets disposed recursively.<tr><td><a name="l179" href="#l179">179</a><td> this.disposed_ = true;<tr><td><a name="l180" href="#l180">180</a><td> this.disposeInternal();<tr><td><a name="l181" href="#l181">181</a><td> if (goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {<tr><td><a name="l182" href="#l182">182</a><td> var uid = goog.getUid(this);<tr><td><a name="l183" href="#l183">183</a><td> if (goog.Disposable.MONITORING_MODE ==<tr><td><a name="l184" href="#l184">184</a><td> goog.Disposable.MonitoringMode.PERMANENT &&<tr><td><a name="l185" href="#l185">185</a><td> !goog.Disposable.instances_.hasOwnProperty(uid)) {<tr><td><a name="l186" href="#l186">186</a><td> throw Error(this + ' did not call the goog.Disposable base ' +<tr><td><a name="l187" href="#l187">187</a><td> 'constructor or was disposed of after a clearUndisposedObjects ' +<tr><td><a name="l188" href="#l188">188</a><td> 'call');<tr><td><a name="l189" href="#l189">189</a><td> }<tr><td><a name="l190" href="#l190">190</a><td> delete goog.Disposable.instances_[uid];<tr><td><a name="l191" href="#l191">191</a><td> }<tr><td><a name="l192" href="#l192">192</a><td> }<tr><td><a name="l193" href="#l193">193</a><td>};<tr><td><a name="l194" href="#l194">194</a><td><tr><td><a name="l195" href="#l195">195</a><td><tr><td><a name="l196" href="#l196">196</a><td>/**<tr><td><a name="l197" href="#l197">197</a><td> * Associates a disposable object with this object so that they will be disposed<tr><td><a name="l198" href="#l198">198</a><td> * together.<tr><td><a name="l199" href="#l199">199</a><td> * @param {goog.disposable.IDisposable} disposable that will be disposed when<tr><td><a name="l200" href="#l200">200</a><td> * this object is disposed.<tr><td><a name="l201" href="#l201">201</a><td> */<tr><td><a name="l202" href="#l202">202</a><td>goog.Disposable.prototype.registerDisposable = function(disposable) {<tr><td><a name="l203" href="#l203">203</a><td> this.addOnDisposeCallback(goog.partial(goog.dispose, disposable));<tr><td><a name="l204" href="#l204">204</a><td>};<tr><td><a name="l205" href="#l205">205</a><td><tr><td><a name="l206" href="#l206">206</a><td><tr><td><a name="l207" href="#l207">207</a><td>/**<tr><td><a name="l208" href="#l208">208</a><td> * Invokes a callback function when this object is disposed. Callbacks are<tr><td><a name="l209" href="#l209">209</a><td> * invoked in the order in which they were added.<tr><td><a name="l210" href="#l210">210</a><td> * @param {function(this:T):?} callback The callback function.<tr><td><a name="l211" href="#l211">211</a><td> * @param {T=} opt_scope An optional scope to call the callback in.<tr><td><a name="l212" href="#l212">212</a><td> * @template T<tr><td><a name="l213" href="#l213">213</a><td> */<tr><td><a name="l214" href="#l214">214</a><td>goog.Disposable.prototype.addOnDisposeCallback = function(callback, opt_scope) {<tr><td><a name="l215" href="#l215">215</a><td> if (!this.onDisposeCallbacks_) {<tr><td><a name="l216" href="#l216">216</a><td> this.onDisposeCallbacks_ = [];<tr><td><a name="l217" href="#l217">217</a><td> }<tr><td><a name="l218" href="#l218">218</a><td><tr><td><a name="l219" href="#l219">219</a><td> this.onDisposeCallbacks_.push(<tr><td><a name="l220" href="#l220">220</a><td> goog.isDef(opt_scope) ? goog.bind(callback, opt_scope) : callback);<tr><td><a name="l221" href="#l221">221</a><td>};<tr><td><a name="l222" href="#l222">222</a><td><tr><td><a name="l223" href="#l223">223</a><td><tr><td><a name="l224" href="#l224">224</a><td>/**<tr><td><a name="l225" href="#l225">225</a><td> * Deletes or nulls out any references to COM objects, DOM nodes, or other<tr><td><a name="l226" href="#l226">226</a><td> * disposable objects. Classes that extend {@code goog.Disposable} should<tr><td><a name="l227" href="#l227">227</a><td> * override this method.<tr><td><a name="l228" href="#l228">228</a><td> * Not reentrant. To avoid calling it twice, it must only be called from the<tr><td><a name="l229" href="#l229">229</a><td> * subclass' {@code disposeInternal} method. Everywhere else the public<tr><td><a name="l230" href="#l230">230</a><td> * {@code dispose} method must be used.<tr><td><a name="l231" href="#l231">231</a><td> * For example:<tr><td><a name="l232" href="#l232">232</a><td> * <pre><tr><td><a name="l233" href="#l233">233</a><td> * mypackage.MyClass = function() {<tr><td><a name="l234" href="#l234">234</a><td> * mypackage.MyClass.base(this, 'constructor');<tr><td><a name="l235" href="#l235">235</a><td> * // Constructor logic specific to MyClass.<tr><td><a name="l236" href="#l236">236</a><td> * ...<tr><td><a name="l237" href="#l237">237</a><td> * };<tr><td><a name="l238" href="#l238">238</a><td> * goog.inherits(mypackage.MyClass, goog.Disposable);<tr><td><a name="l239" href="#l239">239</a><td> *<tr><td><a name="l240" href="#l240">240</a><td> * mypackage.MyClass.prototype.disposeInternal = function() {<tr><td><a name="l241" href="#l241">241</a><td> * // Dispose logic specific to MyClass.<tr><td><a name="l242" href="#l242">242</a><td> * ...<tr><td><a name="l243" href="#l243">243</a><td> * // Call superclass's disposeInternal at the end of the subclass's, like<tr><td><a name="l244" href="#l244">244</a><td> * // in C++, to avoid hard-to-catch issues.<tr><td><a name="l245" href="#l245">245</a><td> * mypackage.MyClass.base(this, 'disposeInternal');<tr><td><a name="l246" href="#l246">246</a><td> * };<tr><td><a name="l247" href="#l247">247</a><td> * </pre><tr><td><a name="l248" href="#l248">248</a><td> * @protected<tr><td><a name="l249" href="#l249">249</a><td> */<tr><td><a name="l250" href="#l250">250</a><td>goog.Disposable.prototype.disposeInternal = function() {<tr><td><a name="l251" href="#l251">251</a><td> if (this.onDisposeCallbacks_) {<tr><td><a name="l252" href="#l252">252</a><td> while (this.onDisposeCallbacks_.length) {<tr><td><a name="l253" href="#l253">253</a><td> this.onDisposeCallbacks_.shift()();<tr><td><a name="l254" href="#l254">254</a><td> }<tr><td><a name="l255" href="#l255">255</a><td> }<tr><td><a name="l256" href="#l256">256</a><td>};<tr><td><a name="l257" href="#l257">257</a><td><tr><td><a name="l258" href="#l258">258</a><td><tr><td><a name="l259" href="#l259">259</a><td>/**<tr><td><a name="l260" href="#l260">260</a><td> * Returns True if we can verify the object is disposed.<tr><td><a name="l261" href="#l261">261</a><td> * Calls {@code isDisposed} on the argument if it supports it. If obj<tr><td><a name="l262" href="#l262">262</a><td> * is not an object with an isDisposed() method, return false.<tr><td><a name="l263" href="#l263">263</a><td> * @param {*} obj The object to investigate.<tr><td><a name="l264" href="#l264">264</a><td> * @return {boolean} True if we can verify the object is disposed.<tr><td><a name="l265" href="#l265">265</a><td> */<tr><td><a name="l266" href="#l266">266</a><td>goog.Disposable.isDisposed = function(obj) {<tr><td><a name="l267" href="#l267">267</a><td> if (obj && typeof obj.isDisposed == 'function') {<tr><td><a name="l268" href="#l268">268</a><td> return obj.isDisposed();<tr><td><a name="l269" href="#l269">269</a><td> }<tr><td><a name="l270" href="#l270">270</a><td> return false;<tr><td><a name="l271" href="#l271">271</a><td>};<tr><td><a name="l272" href="#l272">272</a><td><tr><td><a name="l273" href="#l273">273</a><td><tr><td><a name="l274" href="#l274">274</a><td>/**<tr><td><a name="l275" href="#l275">275</a><td> * Calls {@code dispose} on the argument if it supports it. If obj is not an<tr><td><a name="l276" href="#l276">276</a><td> * object with a dispose() method, this is a no-op.<tr><td><a name="l277" href="#l277">277</a><td> * @param {*} obj The object to dispose of.<tr><td><a name="l278" href="#l278">278</a><td> */<tr><td><a name="l279" href="#l279">279</a><td>goog.dispose = function(obj) {<tr><td><a name="l280" href="#l280">280</a><td> if (obj && typeof obj.dispose == 'function') {<tr><td><a name="l281" href="#l281">281</a><td> obj.dispose();<tr><td><a name="l282" href="#l282">282</a><td> }<tr><td><a name="l283" href="#l283">283</a><td>};<tr><td><a name="l284" href="#l284">284</a><td><tr><td><a name="l285" href="#l285">285</a><td><tr><td><a name="l286" href="#l286">286</a><td>/**<tr><td><a name="l287" href="#l287">287</a><td> * Calls {@code dispose} on each member of the list that supports it. (If the<tr><td><a name="l288" href="#l288">288</a><td> * member is an ArrayLike, then {@code goog.disposeAll()} will be called<tr><td><a name="l289" href="#l289">289</a><td> * recursively on each of its members.) If the member is not an object with a<tr><td><a name="l290" href="#l290">290</a><td> * {@code dispose()} method, then it is ignored.<tr><td><a name="l291" href="#l291">291</a><td> * @param {...*} var_args The list.<tr><td><a name="l292" href="#l292">292</a><td> */<tr><td><a name="l293" href="#l293">293</a><td>goog.disposeAll = function(var_args) {<tr><td><a name="l294" href="#l294">294</a><td> for (var i = 0, len = arguments.length; i < len; ++i) {<tr><td><a name="l295" href="#l295">295</a><td> var disposable = arguments[i];<tr><td><a name="l296" href="#l296">296</a><td> if (goog.isArrayLike(disposable)) {<tr><td><a name="l297" href="#l297">297</a><td> goog.disposeAll.apply(null, disposable);<tr><td><a name="l298" href="#l298">298</a><td> } else {<tr><td><a name="l299" href="#l299">299</a><td> goog.dispose(disposable);<tr><td><a name="l300" href="#l300">300</a><td> }<tr><td><a name="l301" href="#l301">301</a><td> }<tr><td><a name="l302" href="#l302">302</a><td>};</table></pre></main><nav id="topnav"><div><div id="menubutton"><label for="sidenav-toggle">Menu</label></div><form id="searchbox"><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></nav><nav id="sidenav"><input type="checkbox" id="sidenav-types-ctrl" /><input type="checkbox" id="sidenav-files-ctrl" /><input type="checkbox" id="sidenav-modules-ctrl" /><a id="sidenav-overview"><div><h4>Overview</h4></div></a><div id="sidenav-types"><label for="sidenav-types-ctrl"><h4>Types</h4></label><i>Loading</i></div><div id="sidenav-modules"><label for="sidenav-modules-ctrl"><h4>Modules</h4></label><i>Loading</i></div><div id="sidenav-files"><label for="sidenav-files-ctrl"><h4>Files</h4></label><i>Loading</i></div><a href="../../../../license.html"><div><h4>License</h4></div></a></nav><div id="push-footer"></div></div><footer><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta http-equiv="Content-Language" content="en" /><title>idisposable.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><div id="main-wrapper"><input type="checkbox" id="sidenav-toggle" /><main><header><h1>lib/goog/disposable/idisposable.js</h1></header><pre><table class="srcfile"><tbody><tr><td><a name="l1" href="#l1">1</a><td>// Copyright 2011 The Closure Library Authors. All Rights Reserved.<tr><td><a name="l2" href="#l2">2</a><td>//<tr><td><a name="l3" href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a name="l4" href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a name="l5" href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a name="l6" href="#l6">6</a><td>//<tr><td><a name="l7" href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a name="l8" href="#l8">8</a><td>//<tr><td><a name="l9" href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a name="l10" href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a name="l11" href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a name="l12" href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a name="l13" href="#l13">13</a><td>// limitations under the License.<tr><td><a name="l14" href="#l14">14</a><td><tr><td><a name="l15" href="#l15">15</a><td>/**<tr><td><a name="l16" href="#l16">16</a><td> * @fileoverview Definition of the disposable interface. A disposable object<tr><td><a name="l17" href="#l17">17</a><td> * has a dispose method to to clean up references and resources.<tr><td><a name="l18" href="#l18">18</a><td> * @author nnaze@google.com (Nathan Naze)<tr><td><a name="l19" href="#l19">19</a><td> */<tr><td><a name="l20" href="#l20">20</a><td><tr><td><a name="l21" href="#l21">21</a><td><tr><td><a name="l22" href="#l22">22</a><td>goog.provide('goog.disposable.IDisposable');<tr><td><a name="l23" href="#l23">23</a><td><tr><td><a name="l24" href="#l24">24</a><td><tr><td><a name="l25" href="#l25">25</a><td><tr><td><a name="l26" href="#l26">26</a><td>/**<tr><td><a name="l27" href="#l27">27</a><td> * Interface for a disposable object. If a instance requires cleanup<tr><td><a name="l28" href="#l28">28</a><td> * (references COM objects, DOM notes, or other disposable objects), it should<tr><td><a name="l29" href="#l29">29</a><td> * implement this interface (it may subclass goog.Disposable).<tr><td><a name="l30" href="#l30">30</a><td> * @interface<tr><td><a name="l31" href="#l31">31</a><td> */<tr><td><a name="l32" href="#l32">32</a><td>goog.disposable.IDisposable = function() {};<tr><td><a name="l33" href="#l33">33</a><td><tr><td><a name="l34" href="#l34">34</a><td><tr><td><a name="l35" href="#l35">35</a><td>/**<tr><td><a name="l36" href="#l36">36</a><td> * Disposes of the object and its resources.<tr><td><a name="l37" href="#l37">37</a><td> * @return {void} Nothing.<tr><td><a name="l38" href="#l38">38</a><td> */<tr><td><a name="l39" href="#l39">39</a><td>goog.disposable.IDisposable.prototype.dispose = goog.abstractMethod;<tr><td><a name="l40" href="#l40">40</a><td><tr><td><a name="l41" href="#l41">41</a><td><tr><td><a name="l42" href="#l42">42</a><td>/**<tr><td><a name="l43" href="#l43">43</a><td> * @return {boolean} Whether the object has been disposed of.<tr><td><a name="l44" href="#l44">44</a><td> */<tr><td><a name="l45" href="#l45">45</a><td>goog.disposable.IDisposable.prototype.isDisposed = goog.abstractMethod;</table></pre></main><nav id="topnav"><div><div id="menubutton"><label for="sidenav-toggle">Menu</label></div><form id="searchbox"><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></nav><nav id="sidenav"><input type="checkbox" id="sidenav-types-ctrl" /><input type="checkbox" id="sidenav-files-ctrl" /><input type="checkbox" id="sidenav-modules-ctrl" /><a id="sidenav-overview"><div><h4>Overview</h4></div></a><div id="sidenav-types"><label for="sidenav-types-ctrl"><h4>Types</h4></label><i>Loading</i></div><div id="sidenav-modules"><label for="sidenav-modules-ctrl"><h4>Modules</h4></label><i>Loading</i></div><div id="sidenav-files"><label for="sidenav-files-ctrl"><h4>Files</h4></label><i>Loading</i></div><a href="license.html"><div><h4>License</h4></div></a></nav><div id="push-footer"></div></div><footer><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|
|
1
|
+
<!DOCTYPE html><meta charset="UTF-8"><meta http-equiv="Content-Language" content="en" /><title>idisposable.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><div id="main-wrapper"><input type="checkbox" id="sidenav-toggle" /><main><header><h1>lib/goog/disposable/idisposable.js</h1></header><pre><table class="srcfile"><tbody><tr><td><a name="l1" href="#l1">1</a><td>// Copyright 2011 The Closure Library Authors. All Rights Reserved.<tr><td><a name="l2" href="#l2">2</a><td>//<tr><td><a name="l3" href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a name="l4" href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a name="l5" href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a name="l6" href="#l6">6</a><td>//<tr><td><a name="l7" href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a name="l8" href="#l8">8</a><td>//<tr><td><a name="l9" href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a name="l10" href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a name="l11" href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a name="l12" href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a name="l13" href="#l13">13</a><td>// limitations under the License.<tr><td><a name="l14" href="#l14">14</a><td><tr><td><a name="l15" href="#l15">15</a><td>/**<tr><td><a name="l16" href="#l16">16</a><td> * @fileoverview Definition of the disposable interface. A disposable object<tr><td><a name="l17" href="#l17">17</a><td> * has a dispose method to to clean up references and resources.<tr><td><a name="l18" href="#l18">18</a><td> * @author nnaze@google.com (Nathan Naze)<tr><td><a name="l19" href="#l19">19</a><td> */<tr><td><a name="l20" href="#l20">20</a><td><tr><td><a name="l21" href="#l21">21</a><td><tr><td><a name="l22" href="#l22">22</a><td>goog.provide('goog.disposable.IDisposable');<tr><td><a name="l23" href="#l23">23</a><td><tr><td><a name="l24" href="#l24">24</a><td><tr><td><a name="l25" href="#l25">25</a><td><tr><td><a name="l26" href="#l26">26</a><td>/**<tr><td><a name="l27" href="#l27">27</a><td> * Interface for a disposable object. If a instance requires cleanup<tr><td><a name="l28" href="#l28">28</a><td> * (references COM objects, DOM notes, or other disposable objects), it should<tr><td><a name="l29" href="#l29">29</a><td> * implement this interface (it may subclass goog.Disposable).<tr><td><a name="l30" href="#l30">30</a><td> * @interface<tr><td><a name="l31" href="#l31">31</a><td> */<tr><td><a name="l32" href="#l32">32</a><td>goog.disposable.IDisposable = function() {};<tr><td><a name="l33" href="#l33">33</a><td><tr><td><a name="l34" href="#l34">34</a><td><tr><td><a name="l35" href="#l35">35</a><td>/**<tr><td><a name="l36" href="#l36">36</a><td> * Disposes of the object and its resources.<tr><td><a name="l37" href="#l37">37</a><td> * @return {void} Nothing.<tr><td><a name="l38" href="#l38">38</a><td> */<tr><td><a name="l39" href="#l39">39</a><td>goog.disposable.IDisposable.prototype.dispose = goog.abstractMethod;<tr><td><a name="l40" href="#l40">40</a><td><tr><td><a name="l41" href="#l41">41</a><td><tr><td><a name="l42" href="#l42">42</a><td>/**<tr><td><a name="l43" href="#l43">43</a><td> * @return {boolean} Whether the object has been disposed of.<tr><td><a name="l44" href="#l44">44</a><td> */<tr><td><a name="l45" href="#l45">45</a><td>goog.disposable.IDisposable.prototype.isDisposed = goog.abstractMethod;</table></pre></main><nav id="topnav"><div><div id="menubutton"><label for="sidenav-toggle">Menu</label></div><form id="searchbox"><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></nav><nav id="sidenav"><input type="checkbox" id="sidenav-types-ctrl" /><input type="checkbox" id="sidenav-files-ctrl" /><input type="checkbox" id="sidenav-modules-ctrl" /><a id="sidenav-overview"><div><h4>Overview</h4></div></a><div id="sidenav-types"><label for="sidenav-types-ctrl"><h4>Types</h4></label><i>Loading</i></div><div id="sidenav-modules"><label for="sidenav-modules-ctrl"><h4>Modules</h4></label><i>Loading</i></div><div id="sidenav-files"><label for="sidenav-files-ctrl"><h4>Files</h4></label><i>Loading</i></div><a href="../../../../license.html"><div><h4>License</h4></div></a></nav><div id="push-footer"></div></div><footer><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><meta charset="UTF-8"><meta http-equiv="Content-Language" content="en" /><title>browserfeature.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><div id="main-wrapper"><input type="checkbox" id="sidenav-toggle" /><main><header><h1>lib/goog/dom/browserfeature.js</h1></header><pre><table class="srcfile"><tbody><tr><td><a name="l1" href="#l1">1</a><td>// Copyright 2010 The Closure Library Authors. All Rights Reserved.<tr><td><a name="l2" href="#l2">2</a><td>//<tr><td><a name="l3" href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a name="l4" href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a name="l5" href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a name="l6" href="#l6">6</a><td>//<tr><td><a name="l7" href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a name="l8" href="#l8">8</a><td>//<tr><td><a name="l9" href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a name="l10" href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a name="l11" href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a name="l12" href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a name="l13" href="#l13">13</a><td>// limitations under the License.<tr><td><a name="l14" href="#l14">14</a><td><tr><td><a name="l15" href="#l15">15</a><td>/**<tr><td><a name="l16" href="#l16">16</a><td> * @fileoverview Browser capability checks for the dom package.<tr><td><a name="l17" href="#l17">17</a><td> *<tr><td><a name="l18" href="#l18">18</a><td> */<tr><td><a name="l19" href="#l19">19</a><td><tr><td><a name="l20" href="#l20">20</a><td><tr><td><a name="l21" href="#l21">21</a><td>goog.provide('goog.dom.BrowserFeature');<tr><td><a name="l22" href="#l22">22</a><td><tr><td><a name="l23" href="#l23">23</a><td>goog.require('goog.userAgent');<tr><td><a name="l24" href="#l24">24</a><td><tr><td><a name="l25" href="#l25">25</a><td><tr><td><a name="l26" href="#l26">26</a><td>/**<tr><td><a name="l27" href="#l27">27</a><td> * Enum of browser capabilities.<tr><td><a name="l28" href="#l28">28</a><td> * @enum {boolean}<tr><td><a name="l29" href="#l29">29</a><td> */<tr><td><a name="l30" href="#l30">30</a><td>goog.dom.BrowserFeature = {<tr><td><a name="l31" href="#l31">31</a><td> /**<tr><td><a name="l32" href="#l32">32</a><td> * Whether attributes 'name' and 'type' can be added to an element after it's<tr><td><a name="l33" href="#l33">33</a><td> * created. False in Internet Explorer prior to version 9.<tr><td><a name="l34" href="#l34">34</a><td> */<tr><td><a name="l35" href="#l35">35</a><td> CAN_ADD_NAME_OR_TYPE_ATTRIBUTES: !goog.userAgent.IE ||<tr><td><a name="l36" href="#l36">36</a><td> goog.userAgent.isDocumentModeOrHigher(9),<tr><td><a name="l37" href="#l37">37</a><td><tr><td><a name="l38" href="#l38">38</a><td> /**<tr><td><a name="l39" href="#l39">39</a><td> * Whether we can use element.children to access an element's Element<tr><td><a name="l40" href="#l40">40</a><td> * children. Available since Gecko 1.9.1, IE 9. (IE<9 also includes comment<tr><td><a name="l41" href="#l41">41</a><td> * nodes in the collection.)<tr><td><a name="l42" href="#l42">42</a><td> */<tr><td><a name="l43" href="#l43">43</a><td> CAN_USE_CHILDREN_ATTRIBUTE: !goog.userAgent.GECKO && !goog.userAgent.IE ||<tr><td><a name="l44" href="#l44">44</a><td> goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) ||<tr><td><a name="l45" href="#l45">45</a><td> goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.9.1'),<tr><td><a name="l46" href="#l46">46</a><td><tr><td><a name="l47" href="#l47">47</a><td> /**<tr><td><a name="l48" href="#l48">48</a><td> * Opera, Safari 3, and Internet Explorer 9 all support innerText but they<tr><td><a name="l49" href="#l49">49</a><td> * include text nodes in script and style tags. Not document-mode-dependent.<tr><td><a name="l50" href="#l50">50</a><td> */<tr><td><a name="l51" href="#l51">51</a><td> CAN_USE_INNER_TEXT: (<tr><td><a name="l52" href="#l52">52</a><td> goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9')),<tr><td><a name="l53" href="#l53">53</a><td><tr><td><a name="l54" href="#l54">54</a><td> /**<tr><td><a name="l55" href="#l55">55</a><td> * MSIE, Opera, and Safari>=4 support element.parentElement to access an<tr><td><a name="l56" href="#l56">56</a><td> * element's parent if it is an Element.<tr><td><a name="l57" href="#l57">57</a><td> */<tr><td><a name="l58" href="#l58">58</a><td> CAN_USE_PARENT_ELEMENT_PROPERTY: goog.userAgent.IE || goog.userAgent.OPERA ||<tr><td><a name="l59" href="#l59">59</a><td> goog.userAgent.WEBKIT,<tr><td><a name="l60" href="#l60">60</a><td><tr><td><a name="l61" href="#l61">61</a><td> /**<tr><td><a name="l62" href="#l62">62</a><td> * Whether NoScope elements need a scoped element written before them in<tr><td><a name="l63" href="#l63">63</a><td> * innerHTML.<tr><td><a name="l64" href="#l64">64</a><td> * MSDN: http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx#1<tr><td><a name="l65" href="#l65">65</a><td> */<tr><td><a name="l66" href="#l66">66</a><td> INNER_HTML_NEEDS_SCOPED_ELEMENT: goog.userAgent.IE,<tr><td><a name="l67" href="#l67">67</a><td><tr><td><a name="l68" href="#l68">68</a><td> /**<tr><td><a name="l69" href="#l69">69</a><td> * Whether we use legacy IE range API.<tr><td><a name="l70" href="#l70">70</a><td> */<tr><td><a name="l71" href="#l71">71</a><td> LEGACY_IE_RANGES: goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)<tr><td><a name="l72" href="#l72">72</a><td>};</table></pre></main><nav id="topnav"><div><div id="menubutton"><label for="sidenav-toggle">Menu</label></div><form id="searchbox"><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></nav><nav id="sidenav"><input type="checkbox" id="sidenav-types-ctrl" /><input type="checkbox" id="sidenav-files-ctrl" /><input type="checkbox" id="sidenav-modules-ctrl" /><a id="sidenav-overview"><div><h4>Overview</h4></div></a><div id="sidenav-types"><label for="sidenav-types-ctrl"><h4>Types</h4></label><i>Loading</i></div><div id="sidenav-modules"><label for="sidenav-modules-ctrl"><h4>Modules</h4></label><i>Loading</i></div><div id="sidenav-files"><label for="sidenav-files-ctrl"><h4>Files</h4></label><i>Loading</i></div><a href="license.html"><div><h4>License</h4></div></a></nav><div id="push-footer"></div></div><footer><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|
|
1
|
+
<!DOCTYPE html><meta charset="UTF-8"><meta http-equiv="Content-Language" content="en" /><title>browserfeature.js</title><link href="../../../../dossier.css" rel="stylesheet" type="text/css"><div id="main-wrapper"><input type="checkbox" id="sidenav-toggle" /><main><header><h1>lib/goog/dom/browserfeature.js</h1></header><pre><table class="srcfile"><tbody><tr><td><a name="l1" href="#l1">1</a><td>// Copyright 2010 The Closure Library Authors. All Rights Reserved.<tr><td><a name="l2" href="#l2">2</a><td>//<tr><td><a name="l3" href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the "License");<tr><td><a name="l4" href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a name="l5" href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a name="l6" href="#l6">6</a><td>//<tr><td><a name="l7" href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a name="l8" href="#l8">8</a><td>//<tr><td><a name="l9" href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a name="l10" href="#l10">10</a><td>// distributed under the License is distributed on an "AS-IS" BASIS,<tr><td><a name="l11" href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a name="l12" href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a name="l13" href="#l13">13</a><td>// limitations under the License.<tr><td><a name="l14" href="#l14">14</a><td><tr><td><a name="l15" href="#l15">15</a><td>/**<tr><td><a name="l16" href="#l16">16</a><td> * @fileoverview Browser capability checks for the dom package.<tr><td><a name="l17" href="#l17">17</a><td> *<tr><td><a name="l18" href="#l18">18</a><td> */<tr><td><a name="l19" href="#l19">19</a><td><tr><td><a name="l20" href="#l20">20</a><td><tr><td><a name="l21" href="#l21">21</a><td>goog.provide('goog.dom.BrowserFeature');<tr><td><a name="l22" href="#l22">22</a><td><tr><td><a name="l23" href="#l23">23</a><td>goog.require('goog.userAgent');<tr><td><a name="l24" href="#l24">24</a><td><tr><td><a name="l25" href="#l25">25</a><td><tr><td><a name="l26" href="#l26">26</a><td>/**<tr><td><a name="l27" href="#l27">27</a><td> * Enum of browser capabilities.<tr><td><a name="l28" href="#l28">28</a><td> * @enum {boolean}<tr><td><a name="l29" href="#l29">29</a><td> */<tr><td><a name="l30" href="#l30">30</a><td>goog.dom.BrowserFeature = {<tr><td><a name="l31" href="#l31">31</a><td> /**<tr><td><a name="l32" href="#l32">32</a><td> * Whether attributes 'name' and 'type' can be added to an element after it's<tr><td><a name="l33" href="#l33">33</a><td> * created. False in Internet Explorer prior to version 9.<tr><td><a name="l34" href="#l34">34</a><td> */<tr><td><a name="l35" href="#l35">35</a><td> CAN_ADD_NAME_OR_TYPE_ATTRIBUTES: !goog.userAgent.IE ||<tr><td><a name="l36" href="#l36">36</a><td> goog.userAgent.isDocumentModeOrHigher(9),<tr><td><a name="l37" href="#l37">37</a><td><tr><td><a name="l38" href="#l38">38</a><td> /**<tr><td><a name="l39" href="#l39">39</a><td> * Whether we can use element.children to access an element's Element<tr><td><a name="l40" href="#l40">40</a><td> * children. Available since Gecko 1.9.1, IE 9. (IE<9 also includes comment<tr><td><a name="l41" href="#l41">41</a><td> * nodes in the collection.)<tr><td><a name="l42" href="#l42">42</a><td> */<tr><td><a name="l43" href="#l43">43</a><td> CAN_USE_CHILDREN_ATTRIBUTE: !goog.userAgent.GECKO && !goog.userAgent.IE ||<tr><td><a name="l44" href="#l44">44</a><td> goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) ||<tr><td><a name="l45" href="#l45">45</a><td> goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.9.1'),<tr><td><a name="l46" href="#l46">46</a><td><tr><td><a name="l47" href="#l47">47</a><td> /**<tr><td><a name="l48" href="#l48">48</a><td> * Opera, Safari 3, and Internet Explorer 9 all support innerText but they<tr><td><a name="l49" href="#l49">49</a><td> * include text nodes in script and style tags. Not document-mode-dependent.<tr><td><a name="l50" href="#l50">50</a><td> */<tr><td><a name="l51" href="#l51">51</a><td> CAN_USE_INNER_TEXT: (<tr><td><a name="l52" href="#l52">52</a><td> goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9')),<tr><td><a name="l53" href="#l53">53</a><td><tr><td><a name="l54" href="#l54">54</a><td> /**<tr><td><a name="l55" href="#l55">55</a><td> * MSIE, Opera, and Safari>=4 support element.parentElement to access an<tr><td><a name="l56" href="#l56">56</a><td> * element's parent if it is an Element.<tr><td><a name="l57" href="#l57">57</a><td> */<tr><td><a name="l58" href="#l58">58</a><td> CAN_USE_PARENT_ELEMENT_PROPERTY: goog.userAgent.IE || goog.userAgent.OPERA ||<tr><td><a name="l59" href="#l59">59</a><td> goog.userAgent.WEBKIT,<tr><td><a name="l60" href="#l60">60</a><td><tr><td><a name="l61" href="#l61">61</a><td> /**<tr><td><a name="l62" href="#l62">62</a><td> * Whether NoScope elements need a scoped element written before them in<tr><td><a name="l63" href="#l63">63</a><td> * innerHTML.<tr><td><a name="l64" href="#l64">64</a><td> * MSDN: http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx#1<tr><td><a name="l65" href="#l65">65</a><td> */<tr><td><a name="l66" href="#l66">66</a><td> INNER_HTML_NEEDS_SCOPED_ELEMENT: goog.userAgent.IE,<tr><td><a name="l67" href="#l67">67</a><td><tr><td><a name="l68" href="#l68">68</a><td> /**<tr><td><a name="l69" href="#l69">69</a><td> * Whether we use legacy IE range API.<tr><td><a name="l70" href="#l70">70</a><td> */<tr><td><a name="l71" href="#l71">71</a><td> LEGACY_IE_RANGES: goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)<tr><td><a name="l72" href="#l72">72</a><td>};</table></pre></main><nav id="topnav"><div><div id="menubutton"><label for="sidenav-toggle">Menu</label></div><form id="searchbox"><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></nav><nav id="sidenav"><input type="checkbox" id="sidenav-types-ctrl" /><input type="checkbox" id="sidenav-files-ctrl" /><input type="checkbox" id="sidenav-modules-ctrl" /><a id="sidenav-overview"><div><h4>Overview</h4></div></a><div id="sidenav-types"><label for="sidenav-types-ctrl"><h4>Types</h4></label><i>Loading</i></div><div id="sidenav-modules"><label for="sidenav-modules-ctrl"><h4>Modules</h4></label><i>Loading</i></div><div id="sidenav-files"><label for="sidenav-files-ctrl"><h4>Files</h4></label><i>Loading</i></div><a href="../../../../license.html"><div><h4>License</h4></div></a></nav><div id="push-footer"></div></div><footer><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></footer><script src="../../../../types.js"></script><script src="../../../../dossier.js"></script>
|