You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2015/12/19 01:41:46 UTC
[jira] [Commented] (CB-3785) Channel.prototype.subscribe to support
EventListener interface
[ https://issues.apache.org/jira/browse/CB-3785?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15065071#comment-15065071 ]
ASF GitHub Bot commented on CB-3785:
------------------------------------
GitHub user rayshan opened a pull request:
https://github.com/apache/cordova-js/pull/130
Fix CB-3785 - enable EventListener interface support
This patch enables support for `EventListener` interface for `Channel.prototype.subscribe` / `unsubscribe`, based on the patch by @motorro in https://issues.apache.org/jira/browse/CB-3785.
This bug prevents other frameworks that make heavy use of the EventListener interface to work with Cordova, such as [Montage](https://github.com/montagejs/montage) and its `EventManager`.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/rayshan/cordova-js master
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/cordova-js/pull/130.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #130
----
commit 0cca16c84e6b95e29abbe68803d54b3f12ee9316
Author: Ray Shan <ra...@shan.io>
Date: 2015-12-19T00:32:08Z
Fix CB-3785
Enable support of EventListener interface for
Channel.prototype.subscribe / unsubscribe
----
> Channel.prototype.subscribe to support EventListener interface
> --------------------------------------------------------------
>
> Key: CB-3785
> URL: https://issues.apache.org/jira/browse/CB-3785
> Project: Apache Cordova
> Issue Type: Improvement
> Components: CordovaJS
> Affects Versions: 2.8.0
> Environment: All platforms
> Reporter: Nikolai Kotchetkov
> Labels: features, javascript, patch
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> As number of Cordova-specific events use monkey-patch for add/remove/fire listeners it would be nice if Channel functions support EventListener interface:
> - https://developer.mozilla.org/en-US/docs/Web/API/EventListener
> - http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventListener
> I assume only a small patch to Channel module is required. Here are the modified functions to resolve the issue:
> {code:javascript}
> /**
> * Subscribes the given function to the channel. Any time that
> * Channel.fire is called so too will the function.
> * Optionally specify an execution context for the function
> * and a guid that can be used to stop subscribing to the channel.
> * Returns the guid.
> */
> Channel.prototype.subscribe = function(f, c) {
> var func;
> if (f && "object" === typeof f) {
> // EventListener interface
> func = f["handleEvent"];
> c = f;
> } else {
> // Function interface
> func = f;
> }
> // need a function to call
> forceFunction(func);
> if (this.state == 2) {
> func.apply(c || this, this.fireArgs);
> return;
> }
> var guid = f.observer_guid;
> if (typeof c == "object") { func = utils.close(c, func); }
> if (!guid) {
> // first time any channel has seen this subscriber
> guid = '' + nextGuid++;
> }
> func.observer_guid = guid;
> f.observer_guid = guid;
> // Don't add the same handler more than once.
> if (!this.handlers[guid]) {
> this.handlers[guid] = func;
> this.numHandlers++;
> if (this.numHandlers == 1) {
> this.onHasSubscribersChange && this.onHasSubscribersChange();
> }
> }
> };
> /**
> * Unsubscribes the function with the given guid from the channel.
> */
> Channel.prototype.unsubscribe = function(f) {
> var func;
> if (f && "object" === typeof f) {
> // EventListener interface
> func = f["handleEvent"];
> c = f;
> } else {
> // Function interface
> func = f;
> }
> // need a function to unsubscribe
> forceFunction(func);
> var guid = f.observer_guid,
> handler = this.handlers[guid];
> if (handler) {
> delete this.handlers[guid];
> this.numHandlers--;
> if (this.numHandlers === 0) {
> this.onHasSubscribersChange && this.onHasSubscribersChange();
> }
> }
> };
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org