| Index: third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js
|
| diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dde8ec88cf7eab4129301b9ff7740ccf9d4f3d00
|
| --- /dev/null
|
| +++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js
|
| @@ -0,0 +1,111 @@
|
| +// Copyright 2013 The Closure Library Authors. All Rights Reserved.
|
| +//
|
| +// Licensed under the Apache License, Version 2.0 (the "License");
|
| +// you may not use this file except in compliance with the License.
|
| +// You may obtain a copy of the License at
|
| +//
|
| +// http://www.apache.org/licenses/LICENSE-2.0
|
| +//
|
| +// Unless required by applicable law or agreed to in writing, software
|
| +// distributed under the License is distributed on an "AS-IS" BASIS,
|
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +// See the License for the specific language governing permissions and
|
| +// limitations under the License.
|
| +
|
| +goog.provide('goog.Thenable');
|
| +
|
| +
|
| +
|
| +/**
|
| + * Provides a more strict interface for Thenables in terms of
|
| + * http://promisesaplus.com for interop with {@see goog.Promise}.
|
| + *
|
| + * @interface
|
| + * @extends {IThenable.<TYPE>}
|
| + * @template TYPE
|
| + */
|
| +goog.Thenable = function() {};
|
| +
|
| +
|
| +/**
|
| + * Adds callbacks that will operate on the result of the Thenable, returning a
|
| + * new child Promise.
|
| + *
|
| + * If the Thenable is fulfilled, the {@code onFulfilled} callback will be
|
| + * invoked with the fulfillment value as argument, and the child Promise will
|
| + * be fulfilled with the return value of the callback. If the callback throws
|
| + * an exception, the child Promise will be rejected with the thrown value
|
| + * instead.
|
| + *
|
| + * If the Thenable is rejected, the {@code onRejected} callback will be invoked
|
| + * with the rejection reason as argument, and the child Promise will be rejected
|
| + * with the return value of the callback or thrown value.
|
| + *
|
| + * @param {?(function(this:THIS, TYPE):
|
| + * (RESULT|IThenable.<RESULT>|Thenable))=} opt_onFulfilled A
|
| + * function that will be invoked with the fulfillment value if the Promise
|
| + * is fullfilled.
|
| + * @param {?(function(this:THIS, *): *)=} opt_onRejected A function that will
|
| + * be invoked with the rejection reason if the Promise is rejected.
|
| + * @param {THIS=} opt_context An optional context object that will be the
|
| + * execution context for the callbacks. By default, functions are executed
|
| + * with the default this.
|
| + * @return {!goog.Promise.<RESULT>} A new Promise that will receive the result
|
| + * of the fulfillment or rejection callback.
|
| + * @template RESULT,THIS
|
| + */
|
| +goog.Thenable.prototype.then = function(opt_onFulfilled, opt_onRejected,
|
| + opt_context) {};
|
| +
|
| +
|
| +/**
|
| + * An expando property to indicate that an object implements
|
| + * {@code goog.Thenable}.
|
| + *
|
| + * {@see addImplementation}.
|
| + *
|
| + * @const
|
| + */
|
| +goog.Thenable.IMPLEMENTED_BY_PROP = '$goog_Thenable';
|
| +
|
| +
|
| +/**
|
| + * Marks a given class (constructor) as an implementation of Thenable, so
|
| + * that we can query that fact at runtime. The class must have already
|
| + * implemented the interface.
|
| + * Exports a 'then' method on the constructor prototype, so that the objects
|
| + * also implement the extern {@see goog.Thenable} interface for interop with
|
| + * other Promise implementations.
|
| + * @param {function(new:goog.Thenable,...[?])} ctor The class constructor. The
|
| + * corresponding class must have already implemented the interface.
|
| + */
|
| +goog.Thenable.addImplementation = function(ctor) {
|
| + goog.exportProperty(ctor.prototype, 'then', ctor.prototype.then);
|
| + if (COMPILED) {
|
| + ctor.prototype[goog.Thenable.IMPLEMENTED_BY_PROP] = true;
|
| + } else {
|
| + // Avoids dictionary access in uncompiled mode.
|
| + ctor.prototype.$goog_Thenable = true;
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @param {*} object
|
| + * @return {boolean} Whether a given instance implements {@code goog.Thenable}.
|
| + * The class/superclass of the instance must call {@code addImplementation}.
|
| + */
|
| +goog.Thenable.isImplementedBy = function(object) {
|
| + if (!object) {
|
| + return false;
|
| + }
|
| + try {
|
| + if (COMPILED) {
|
| + return !!object[goog.Thenable.IMPLEMENTED_BY_PROP];
|
| + }
|
| + return !!object.$goog_Thenable;
|
| + } catch (e) {
|
| + // Property access seems to be forbidden.
|
| + return false;
|
| + }
|
| +};
|
|
|