Chromium Code Reviews| Index: Source/devtools/front_end/framework_support/EventListeners.js |
| diff --git a/Source/devtools/front_end/framework_support/EventListeners.js b/Source/devtools/front_end/framework_support/EventListeners.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f6b602e16641b9a84de4908b2f6c78430d72b294 |
| --- /dev/null |
| +++ b/Source/devtools/front_end/framework_support/EventListeners.js |
| @@ -0,0 +1,129 @@ |
| +/* |
| + * Copyright 2015 The Chromium Authors. All rights reserved. |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +WebInspector.EventListenersFrameworkSupport = {} |
| + |
| +WebInspector.EventListenersFrameworkSupport._frameworkSupportInitializedSymbol = Symbol("frameworkSupportInitialized"); |
| + |
| +/** |
| + * @param {?WebInspector.ExecutionContext} context |
| + * @return {!Promise<void>} |
| + */ |
| +WebInspector.EventListenersFrameworkSupport.initializeOnContext = function(context) |
| +{ |
| + return new Promise(initializeFrameworksSupport); |
| + |
| + /** |
| + * @param {function(?)} fulfill |
| + * @param {function(*)} reject |
| + */ |
| + function initializeFrameworksSupport(fulfill, reject) |
| + { |
| + var initializeFunction = ["(function(){", |
| + initializeFrameworkUserEventListeners.toString(), |
| + "initializeFrameworkUserEventListeners();", |
| + initializeFrameworkInternalEventHandlers.toString(), |
| + "initializeFrameworkInternalEventHandlers();", |
| + "})();"].join("\n"); |
| + if (!context) { |
| + reject("Empty context"); |
| + return; |
| + } |
| + if (WebInspector.EventListenersFrameworkSupport._frameworkSupportInitializedSymbol in context) { |
| + fulfill(undefined); |
| + return; |
| + } |
| + context[WebInspector.EventListenersFrameworkSupport._frameworkSupportInitializedSymbol] = true; |
| + context.evaluate(initializeFunction, "EventListenersFrameworkSupport", false, true, true, false, fulfill); |
| + } |
| +} |
| + |
| +function initializeFrameworkUserEventListeners() |
| +{ |
| + // We should call this function once per context. |
| + self.devtoolsFrameworkUserEventListeners = self.devtoolsFrameworkUserEventListeners || []; |
|
paulirish
2015/08/14 21:03:16
self.devtoolsFrameworkEventListeners
I understand
|
| + self.devtoolsFrameworkUserEventListeners.push(jQueryUserEventListeners); |
| + |
| + /** |
| + * @param {!Object} node |
| + * @return {!Array<!{type: string, listener: function(), useCapture: boolean}>} |
| + */ |
| + function jQueryUserEventListeners(node) |
| + { |
| + if (!(node instanceof Node)) |
| + return []; |
| + var hasJQuery = (typeof jQuery !== 'undefined') && jQuery.fn; |
| + if (!hasJQuery) |
| + return []; |
| + var listeners = []; |
| + var data = jQuery._data || jQuery.data; |
| + if (typeof data === "function") { |
| + var events = data(node, "events"); |
| + for (var type in events) { |
| + for (var key in events[type]) { |
| + var frameworkListener = events[type][key]; |
| + if (typeof frameworkListener === "object" || typeof frameworkListener === "function") { |
| + var listener = { |
| + handler: frameworkListener.handler || frameworkListener, |
| + useCapture: true, |
| + type: type |
| + }; |
| + listeners.push(listener); |
| + } |
| + } |
| + } |
| + } |
| + var entry = jQuery(node)[0]; |
| + if (entry) { |
| + var entryEvents = entry["$events"]; |
| + for (var type in entryEvents) { |
| + var events = entryEvents[type]; |
| + for (var key in events) { |
| + if (typeof events[key] === "function") { |
| + var listener = { |
| + handler: events[key], |
| + useCapture: true, |
| + type: type |
| + }; |
| + listeners.push(listener); |
| + } |
| + } |
| + } |
| + } |
| + return listeners; |
| + } |
| +} |
| + |
| +function initializeFrameworkInternalEventHandlers() |
| +{ |
| + // We should call this function once per context. |
| + self.devtoolsFrameworkInternalEventHandlers = self.devtoolsFrameworkInternalEventHandlers || []; |
| + self.devtoolsFrameworkInternalEventHandlers.push(jQueryInternalEventHandlers); |
| + |
| + /** |
| + * @param {!Object} node |
| + * @return {!Array<function()>} |
| + */ |
| + function jQueryInternalEventHandlers(node) |
| + { |
| + if (!(node instanceof Node)) |
| + return []; |
| + var hasJQuery = (typeof jQuery !== 'undefined') && jQuery.fn; |
| + if (!hasJQuery) |
| + return []; |
| + var handlers = []; |
| + var data = jQuery._data || jQuery.data; |
| + if (typeof data === "function") { |
| + var nodeData = data(node); |
| + if (typeof nodeData.handle === "function") |
| + handlers.push(nodeData.handle); |
| + } |
| + var entry = jQuery(node)[0]; |
| + if (entry && entry["$handle"]) |
| + handlers.push(entry["$handle"]); |
| + return handlers; |
| + } |
| +} |