aboutsummaryrefslogtreecommitdiff
path: root/node_modules/react-dom/lib/CallbackQueue.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/react-dom/lib/CallbackQueue.js')
-rw-r--r--node_modules/react-dom/lib/CallbackQueue.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/node_modules/react-dom/lib/CallbackQueue.js b/node_modules/react-dom/lib/CallbackQueue.js
new file mode 100644
index 000000000..4405c5f49
--- /dev/null
+++ b/node_modules/react-dom/lib/CallbackQueue.js
@@ -0,0 +1,118 @@
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ *
+ */
+
+'use strict';
+
+var _prodInvariant = require('./reactProdInvariant');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var PooledClass = require('./PooledClass');
+
+var invariant = require('fbjs/lib/invariant');
+
+/**
+ * A specialized pseudo-event module to help keep track of components waiting to
+ * be notified when their DOM representations are available for use.
+ *
+ * This implements `PooledClass`, so you should never need to instantiate this.
+ * Instead, use `CallbackQueue.getPooled()`.
+ *
+ * @class ReactMountReady
+ * @implements PooledClass
+ * @internal
+ */
+
+var CallbackQueue = function () {
+ function CallbackQueue(arg) {
+ _classCallCheck(this, CallbackQueue);
+
+ this._callbacks = null;
+ this._contexts = null;
+ this._arg = arg;
+ }
+
+ /**
+ * Enqueues a callback to be invoked when `notifyAll` is invoked.
+ *
+ * @param {function} callback Invoked when `notifyAll` is invoked.
+ * @param {?object} context Context to call `callback` with.
+ * @internal
+ */
+
+
+ CallbackQueue.prototype.enqueue = function enqueue(callback, context) {
+ this._callbacks = this._callbacks || [];
+ this._callbacks.push(callback);
+ this._contexts = this._contexts || [];
+ this._contexts.push(context);
+ };
+
+ /**
+ * Invokes all enqueued callbacks and clears the queue. This is invoked after
+ * the DOM representation of a component has been created or updated.
+ *
+ * @internal
+ */
+
+
+ CallbackQueue.prototype.notifyAll = function notifyAll() {
+ var callbacks = this._callbacks;
+ var contexts = this._contexts;
+ var arg = this._arg;
+ if (callbacks && contexts) {
+ !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;
+ this._callbacks = null;
+ this._contexts = null;
+ for (var i = 0; i < callbacks.length; i++) {
+ callbacks[i].call(contexts[i], arg);
+ }
+ callbacks.length = 0;
+ contexts.length = 0;
+ }
+ };
+
+ CallbackQueue.prototype.checkpoint = function checkpoint() {
+ return this._callbacks ? this._callbacks.length : 0;
+ };
+
+ CallbackQueue.prototype.rollback = function rollback(len) {
+ if (this._callbacks && this._contexts) {
+ this._callbacks.length = len;
+ this._contexts.length = len;
+ }
+ };
+
+ /**
+ * Resets the internal queue.
+ *
+ * @internal
+ */
+
+
+ CallbackQueue.prototype.reset = function reset() {
+ this._callbacks = null;
+ this._contexts = null;
+ };
+
+ /**
+ * `PooledClass` looks for this.
+ */
+
+
+ CallbackQueue.prototype.destructor = function destructor() {
+ this.reset();
+ };
+
+ return CallbackQueue;
+}();
+
+module.exports = PooledClass.addPoolingTo(CallbackQueue); \ No newline at end of file