Author: reebalazs
Date: Tue Dec 25 12:58:20 2007
New Revision: 50073
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/ (props changed)
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
Log:
Create interface for binderiterations, fix up tests.
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
Tue Dec 25 12:58:20 2007
@@ -23,6 +23,12 @@
var _eventClassCounter = 0;
+// these together store the plugin resource information, about registered
events
+// there is two distinct registries, one for the actual events and one
+// for specifying the binding sequence
+var events = kukit.interfaces.get('events',
kukit.interfaces.PluginMethodDescriptor);
+var bindings = kukit.interfaces.get('bindings',
kukit.interfaces.PluginMethodDescriptor);
+
/*
*
* class _EventRegistry
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
Tue Dec 25 12:58:20 2007
@@ -218,9 +218,7 @@
this.register = function(config) {
if (this.config != null) {
-;;; kukit.E = 'Double registration by [' + providerName + '][';
-;;; kukit.E += providerVersion;
-;;; kukit.E += '] of method [' + this.methodName;
+;;; kukit.E = 'Double registration of method [' + this.methodName;
;;; kukit.E += '] in plugin interface [' + this.iface.name + ']';
throw new Error(kukit.E);
}
@@ -228,15 +226,60 @@
};
this.finalize = function(loader) {
- if (! this.config) {
- return;
- }
// Just return the registered value.
return this.config;
};
}; /* end PluginMethodDescriptor */
+/*
+ * BindIterationDescriptor
+ *
+ * We need this method descriptor because we need to
+ * register the binding of events. This is done by a binding
+ * class and a set of events that bind together on this
+ * class, and a binding iterator that defines how binding will
+ * be called.
+ *
+ * The event names arrive in a namespace format (dash-separated),
+ * formerly we only accepted to register an event set with events
+ * of the same namespace. This restriction is dropped now. Since it
+ * may make sense, it can be put back in form of asserts on the
+ * event names.
+ */
+this.BindIterationDescriptor = function(iface, methodName) {
+
+ this.iface = iface;
+ this.methodName = methodName;
+ this.config = null;
+
+ this.register = function(config) {
+ // This is called on any method descriptors.
+ // Register config to all event names individually.
+ // Take names from the config.
+ for (var i = 0; i < config.names.length; i++) {
+ name = config.names[i];
+ this.iface.getMethodDescriptor(name)._register(config);
+ }
+ };
+
+ this._register = function(config) {
+ if (this.config != null) {
+;;; kukit.E = 'Double registration of method [' + this.methodName;
+;;; kukit.E += '] in plugin interface [' + this.iface.name + ']';
+ throw new Error(kukit.E);
+ }
+ this.config = config;
+ };
+
+ this.finalize = function(loader) {
+ // Just return the registered value.
+ return this.config;
+ };
+
+}; /* end BindIterationDescriptor */
+
+
/*
* Instantiation
@@ -257,6 +300,9 @@
this.getPlugin = function(name) {
return _interfaces.get(name, this.PluginMethodDescriptor);
};
+this.getBindIteration = function(name) {
+ return _interfaces.get(name, this.BindIterationDescriptor);
+};
}(); /* END CLOSURE kukit.interfaces */
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
==============================================================================
---
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
(original)
+++
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
Tue Dec 25 12:58:20 2007
@@ -380,49 +380,49 @@
// We have a class, called C.
var C = function() {};
// Let's create a TestDummy interface.
- var iface = this.interfaces.get('dummyevent',
kukit.interfaces.PluginMethodDescriptor);
+ var events = this.interfaces.get('dummyevent',
kukit.interfaces.PluginMethodDescriptor);
+ var binditerations = this.interfaces.get('dummybinditerations',
kukit.interfaces.BindIterationDescriptor);
// somewhere else, core registers the methods:
- iface.getMethodDescriptor('click').register({
+ events.getMethodDescriptor('click').register({
namespace: null,
name: 'click',
- defaultMethod: null,
+ defaultMethodName: null,
parmtypes: [
['preventDefault', 'bool', true],
['allowBubbling', 'bool', false]]});
- iface.getMethodDescriptor('keydown').register({
+ events.getMethodDescriptor('keydown').register({
namespace: null,
name: 'keydown',
- defaultMethod: null,
+ defaultMethodName: null,
parmtypes: [
['preventDefault', 'bool', true],
['allowBubbling', 'bool', false]]});
- /*iface.getMethodDescriptor('click').registerBindIteration({
+ binditerations.getMethodDescriptor('').register({
namespace: null,
- names: ['click', 'timeout'],
+ names: ['click', 'keydown'],
iterName: 'Each',
binderClass: M,
bindMethodName: 'bind'});
//*/
//
// somewhere else, extras registers the methods:
- iface.getMethodDescriptor('timeout').register({
+ events.getMethodDescriptor('timeout').register({
name: 'timeout',
- defaultMethod: null,
+ defaultMethodName: null,
parmtypes: [
['millis', 'int'],
['renew', 'bool', false]]});
// It needs a bind iterator even though it is a single
// group.
- /*iface.getMethodDescriptor('timeout').registerBindIteration({
+ binditerations.getMethodDescriptor('').register({
namespace: null,
- names: ['click', 'timeout'],
+ names: ['timeout'],
iterName: 'Each',
bindMethodName: 'bind'});
- */
-
//
// Now finalize it.
- iface.finalize(C);
+ events.finalize(C);
+ binditerations.finalize(C);
// Create an instance...
var o = new C();
// We can call the methods on it,
@@ -457,6 +457,29 @@
Error);
};
+ this.testBindIterationNoDoubleReg = function() {
+ // No double registration for test plugins.
+ var C = function() {};
+ // Let's create a TestDummy interface.
+ var iface = this.interfaces.get('dummybinditeration',
kukit.interfaces.BindIterationDescriptor);
+ // somewhere else, core registers the methods:
+ iface.getMethodDescriptor('').register({
+ namespace: null,
+ names: ['click', 'timeout'],
+ iterName: 'Each',
+ binderClass: M,
+ bindMethodName: 'bind'});
+ // But another providing attempt is punished by an Error.
+ this.assertThrows(function() {
+ iface.getMethodDescriptor('').register({
+ namespace: null,
+ names: ['keyDown', 'timeout'],
+ iterName: 'Each',
+ bindMethodName: 'bind'});
+ },
+ Error);
+ };
+
}; /* end PluginInterfacesTestCase */
kukit.PluginInterfacesTestCase.prototype = new kukit.InterfacesTestCaseBase();
_______________________________________________
Kukit-checkins mailing list
[email protected]
http://codespeak.net/mailman/listinfo/kukit-checkins