summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/NotificationCenter.js
Side-by-side diff
Diffstat (limited to 'frontend/beta/js/Clipperz/NotificationCenter.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/NotificationCenter.js325
1 files changed, 325 insertions, 0 deletions
diff --git a/frontend/beta/js/Clipperz/NotificationCenter.js b/frontend/beta/js/Clipperz/NotificationCenter.js
new file mode 100644
index 0000000..815d4fd
--- a/dev/null
+++ b/frontend/beta/js/Clipperz/NotificationCenter.js
@@ -0,0 +1,325 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
+if (typeof(Clipperz.NotificationCenter) == 'undefined') { Clipperz.NotificationCenter = {}; }
+
+
+//#############################################################################
+
+Clipperz.NotificationCenterEvent = function(args) {
+ args = args || {};
+// MochiKit.Base.bindMethods(this);
+
+ this._source = args.source || null;
+ this._event = args.event || null;
+ this._parameters = args.parameters || null;
+ this._isSynchronous = args.isSynchronous || false;
+
+ return this;
+}
+
+//=============================================================================
+
+Clipperz.NotificationCenterEvent.prototype = MochiKit.Base.update(null, {
+
+ //-------------------------------------------------------------------------
+
+ 'toString': function() {
+ return "Clipperz.NotificationCenterEvent";
+ //return "Clipperz.NotificationCenterEvent {source: " + this.source() + ", event: " + this.event() + ", parameters: " + this.parameters() + "}";
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'source': function() {
+ return this._source;
+ },
+
+ 'setSource': function(aValue) {
+ this._source = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'event': function() {
+ return this._event;
+ },
+
+ 'setEvent': function(aValue) {
+ this._event = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'parameters': function() {
+ return this._parameters;
+ },
+
+ 'setParameters': function(aValue) {
+ this._parameters = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'isSynchronous': function() {
+ return this._isSynchronous;
+ },
+
+ //-------------------------------------------------------------------------
+ __syntaxFix__: "syntax fix"
+});
+
+
+//#############################################################################
+//#############################################################################
+
+Clipperz.NotificationCenter = function(args) {
+ args = args || {};
+// MochiKit.Base.bindMethods(this);
+
+ this._listeners = {};
+ this._useSynchronousListenerInvocation = args.useSynchronousListenerInvocation || false;
+ this._timeoutDelay = args.timeoutDelay || 0.1;
+
+ return this;
+}
+
+//=============================================================================
+
+Clipperz.NotificationCenter.prototype = MochiKit.Base.update(null, {
+
+ //-------------------------------------------------------------------------
+
+ 'toString': function() {
+ return "Clipperz.NotificationCenter";
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'useSynchronousListenerInvocation': function() {
+ return this._useSynchronousListenerInvocation;
+ },
+
+ 'setUseSynchronousListenerInvocation': function(aValue) {
+ this._useSynchronousListenerInvocation = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'timeoutDelay': function() {
+ return this._timeoutDelay;
+ },
+
+ 'setTimeoutDelay': function(aValue) {
+ this._timeoutDelay = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'listeners': function() {
+ return this._listeners;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'register': function(aSource, anEvent, aListener, aMethod) {
+ var eventListeners;
+ var listenerInfo;
+ var eventKey;
+
+ if (anEvent != null) {
+ eventKey = anEvent;
+ } else {
+ eventKey = '_notificationCenter_matchAnyEvent_key_';
+ }
+
+ eventListeners = this.listeners()[eventKey];
+
+ if (eventListeners == null) {
+ eventListeners = [];
+ this.listeners()[eventKey] = eventListeners;
+ }
+
+ listenerInfo = {};
+ if (aSource != null) {
+ listenerInfo['source'] = aSource;
+ } else {
+ listenerInfo['source'] = 'any';
+ }
+
+ listenerInfo['listener'] = aListener;
+ listenerInfo['method'] = aMethod;
+
+ eventListeners.push(listenerInfo);
+
+ return listenerInfo;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'removeListenerInfoFromListeners': function(aListener, someListeners) {
+ var listenerIndex;
+ var i,c;
+
+ if (someListeners != null) {
+ listenerIndex = -1;
+ c = someListeners.length;
+ for (i=0; i<c; i++) {
+ var listenerInfo;
+
+ listenerInfo = someListeners[i];
+ if (listenerInfo['listener'] === aListener) {
+ listenerIndex = i;
+ }
+ }
+
+ if (listenerIndex != -1) {
+ Clipperz.Base.removeObjectAtIndexFromArray(listenerIndex, someListeners);
+ }
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'unregister': function(aListener, anEvent) {
+ if (anEvent == null) {
+ var allListenerList;
+ var i, c;
+
+// allListenerList = Clipperz.Base.values(this.listeners());
+ allListenerList = MochiKit.Base.values(this.listeners());
+ c = allListenerList.length;
+ for (i=0; i<c; i++) {
+ this.removeListenerInfoFromListeners(aListener, allListenerList[i]);
+ }
+ } else {
+ this.removeListenerInfoFromListeners(aListener, this.listeners()[anEvent]);
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'asysnchronousListenerNotification': function(anEventInfo, aMethod, aListener) {
+ MochiKit.Async.callLater(this.timeoutDelay(), MochiKit.Base.partial(MochiKit.Base.methodcaller(aMethod, anEventInfo), aListener));
+// setTimeout(MochiKit.Base.partial(MochiKit.Base.methodcaller(aMethod, anEventInfo), aListener), this.timeoutDelay());
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'processListenerInfo': function(anEventInfo, aListenerInfo) {
+ var shouldInvokeListenerMethod;
+
+ if (aListenerInfo['source'] == 'any') {
+ shouldInvokeListenerMethod = true;
+ } else {
+ if (aListenerInfo['source'] === anEventInfo.source()) {
+ shouldInvokeListenerMethod = true;
+ } else {
+ shouldInvokeListenerMethod = false;
+ }
+ }
+
+ if (shouldInvokeListenerMethod) {
+ if (this.useSynchronousListenerInvocation() || anEventInfo.isSynchronous()) {
+//MochiKit.Logging.logDebug("syncrhronous listener invocation");
+ try {
+// MochiKit.Base.map(MochiKit.Base.methodcaller(aListenerInfo['method'], anEventInfo), [aListenerInfo['listener']]);
+//console.log("notification: ", aListenerInfo['listener'], aListenerInfo['method'], anEventInfo);
+ MochiKit.Base.method(aListenerInfo['listener'], aListenerInfo['method'], anEventInfo)();
+ } catch(exception) {
+ MochiKit.Logging.logError('NotificationCenter ERROR: unable to invoke method \'' + aListenerInfo['method'] + '\' on object ' + aListenerInfo['listener']);
+ }
+ } else {
+ var asyncMethod;
+
+//MochiKit.Logging.logDebug("asyncrhronous listener invocation");
+ asyncMethod = MochiKit.Base.bind(this.asysnchronousListenerNotification, this)
+ MochiKit.Base.map(MochiKit.Base.partial(asyncMethod, anEventInfo, aListenerInfo['method']), [aListenerInfo['listener']]);
+ }
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'notify': function(aSource, anEvent, someEventParameters, isSynchronous) {
+ var eventInfo;
+ var processInfoMethod;
+
+//MochiKit.Logging.logDebug(">>> NotificationCenter.notify");
+ eventInfo = new Clipperz.NotificationCenterEvent({source:aSource, event:anEvent, parameters:someEventParameters, isSynchronous:isSynchronous});
+//MochiKit.Logging.logDebug("--- NotificationCenter.notify - 1");
+ processInfoMethod = MochiKit.Base.bind(this.processListenerInfo, this);
+//MochiKit.Logging.logDebug("--- NotificationCenter.notify - 2");
+
+ MochiKit.Base.map(MochiKit.Base.partial(processInfoMethod, eventInfo), this.listeners()[anEvent] || []);
+//MochiKit.Logging.logDebug("--- NotificationCenter.notify - 3");
+ MochiKit.Base.map(MochiKit.Base.partial(processInfoMethod, eventInfo), this.listeners()['_notificationCenter_matchAnyEvent_key_'] || []);
+//MochiKit.Logging.logDebug("<<< NotificationCenter.notify");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'deferredNotification': function(aSource, anEvent, someEventParameters, aDeferredResult) {
+
+ this.notify(aSource, anEvent, someEventParameters, true);
+
+ return aDeferredResult;
+// return MochiKit.Async.wait(1, aDeferredResult);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'resetStatus': function() {
+ this._listeners = {};
+ },
+
+ //-------------------------------------------------------------------------
+ __syntaxFix__: "syntax fix"
+
+});
+
+//#############################################################################
+
+Clipperz.NotificationCenter.defaultNotificationCenter = new Clipperz.NotificationCenter();
+
+Clipperz.NotificationCenter.notify = MochiKit.Base.method(Clipperz.NotificationCenter.defaultNotificationCenter, 'notify');
+Clipperz.NotificationCenter.register = MochiKit.Base.method(Clipperz.NotificationCenter.defaultNotificationCenter, 'register');
+Clipperz.NotificationCenter.unregister = MochiKit.Base.method(Clipperz.NotificationCenter.defaultNotificationCenter, 'unregister');
+Clipperz.NotificationCenter.deferredNotification = MochiKit.Base.method(Clipperz.NotificationCenter.defaultNotificationCenter, 'deferredNotification');
+/*
+_clipperz_notificationCenter_defaultNotificationCenter = null;
+
+Clipperz.NotificationCenter.defaultNotificationCenter = function() {
+ if (_clipperz_notificationCenter_defaultNotificationCenter == null) {
+ _clipperz_notificationCenter_defaultNotificationCenter = new Clipperz.NotificationCenter();
+ }
+
+ return _clipperz_notificationCenter_defaultNotificationCenter;
+};
+*/