[KSS-checkins] r44818 - kukit/kukit.js/branch/ree-binding-improvements/kukit
reebalazs at codespeak.net
reebalazs at codespeak.net
Sat Jul 7 03:23:36 CEST 2007
Author: reebalazs
Date: Sat Jul 7 03:23:34 2007
New Revision: 44818
Modified:
kukit/kukit.js/branch/ree-binding-improvements/kukit/kssparser.js
kukit/kukit.js/branch/ree-binding-improvements/kukit/resourcedata.js
Log:
Implement event binding based on the ids fetched dynamically from the dom
Modified: kukit/kukit.js/branch/ree-binding-improvements/kukit/kssparser.js
==============================================================================
--- kukit/kukit.js/branch/ree-binding-improvements/kukit/kssparser.js (original)
+++ kukit/kukit.js/branch/ree-binding-improvements/kukit/kssparser.js Sat Jul 7 03:23:34 2007
@@ -624,6 +624,8 @@
if (pseudotoken.value.arg.isMethod) {
// we have a param provider here. Just store.
ppid = pseudotoken.value.arg;
+ // Check its syntax too.
+ ppid.check(kukit.pprovidersGlobalRegistry);
} else {
// just an id. Express in txt.
id = pseudotoken.value.arg.txt;
Modified: kukit/kukit.js/branch/ree-binding-improvements/kukit/resourcedata.js
==============================================================================
--- kukit/kukit.js/branch/ree-binding-improvements/kukit/resourcedata.js (original)
+++ kukit/kukit.js/branch/ree-binding-improvements/kukit/resourcedata.js Sat Jul 7 03:23:34 2007
@@ -61,6 +61,9 @@
;;; if (css != 'document' && css != 'behaviour') {
;;; throw new kukit.err.rd.KssSelectorError('KssSpecialSelector "' + name + '" must have one of the allowed names');
;;; }
+ ;;; if (ppid) {
+ ;;; throw new kukit.err.rd.KssSelectorError('KssSpecialSelector "' + name + '" must not stand with an event id acquired by parameter provider (' + ppid.methodname + ')');
+ ;;; }
;;; }
this.css = css;
this.name = name;
@@ -87,6 +90,42 @@
}
};
+kukit.rd.KssSelector.prototype.getId = function(node) {
+ // Gives the id depending on a node.
+ if (this.id) {
+ // Statically set.
+ return this.id;
+ } else {
+ // Evaluate it.
+ var id = this.ppid.pprovider.eval(this.ppid.args, node, {});
+ // check that the id is not empty or null!
+ if (! id) {
+ ;;; var namestr;
+ ;;; if (this.namespace) {
+ ;;; namestr = this.namespace + '-' + this.name;
+ ;;; } else {
+ ;;; namestr = this.name;
+ ;;; }
+ ;;; kukit.E = 'Did not get a valid state id, when evaluated the pprovider "' + this.ppid.methodname + '"';
+ ;;; kukit.E += ' in kss selector "' + namestr + '" css="' + this.css + '"';
+ throw kukit.E;
+ }
+ return id;
+ }
+};
+
+kukit.rd.KssSelector.prototype.getMergeId = function(node) {
+ // Gives the merge id depending on a node.
+ if (this.mergeid) {
+ // Statically set.
+ return this.mergeid;
+ } else {
+ // Evaluate it.
+ var id = this.getId(node);
+ this.mergeid = kukit.rd.makeMergeId(id, this.namespace, this.name);
+ }
+};
+
/*
* Kss parameter values. There are two kinds: text and method.
*
@@ -214,9 +253,11 @@
}
};
-kukit.rd.EventRule.prototype.getBinderInfo = function() {
+kukit.rd.EventRule.prototype.getBinderInfo = function(node) {
+ // Figure out what will be the "state id" for the kss event rule.
+ var id = this.kss_selector.getId(node);
// Gets the event instance for the rule.
- return kukit.engine.binderInfoRegistry.getOrCreateBinderInfo(this.kss_selector.id, this.kss_selector.classname,
+ return kukit.engine.binderInfoRegistry.getOrCreateBinderInfo(id, this.kss_selector.classname,
this.kss_selector.namespace);
};
@@ -234,7 +275,7 @@
kukit.rd.EventRule.prototype.bind = function(node) {
// Creation of the binding oper
var oper = new kukit.op.Oper();
- var binderinfo = this.getBinderInfo();
+ var binderinfo = this.getBinderInfo(node);
oper.node = node;
oper.eventrule = this;
oper.binderinstance = binderinfo.binderinstance;
@@ -271,9 +312,6 @@
;;; if (this.kss_selector.id != other.kss_selector.id) {
;;; throw "Differing kss selector ids in event rule merge";
;;; }
- ;;; if (this.kss_selector.classname != other.kss_selector.classname) {
- ;;; throw "Differing kss selector classes in event rule merge";
- ;;; }
;;; }
;;; if (this.kss_selector.name != other.kss_selector.name) {
;;; throw "Differing kss selector names in event rule merge";
@@ -288,7 +326,7 @@
;;; kukit.logDebug('Merged rule ' + this.mergednr + ' mergeid ' + this.kss_selector.mergeid);
};
-kukit.rd.EventRule.prototype.mergeIntoDict = function(dict, key, eventrule) {
+kukit.rd.EventRule.prototype.mergeIntoDict = function(dict, key) {
// Merge into the given dictionary by given key.
// If possible, store the genuine rule first - if not,
// clone it and do a merge. Never destroy the genuine
@@ -296,7 +334,7 @@
var mergedrule = dict[key];
if (typeof(mergedrule) == 'undefined') {
// there was no rule
- dict[key] = eventrule;
+ dict[key] = this;
} else {
// we have to merge the rule
if (! mergedrule.isMerged()) {
@@ -304,7 +342,7 @@
mergedrule = mergedrule.cloneForMerge();
dict[key] = mergedrule;
}
- mergedrule.merge(eventrule);
+ mergedrule.merge(this);
}
};
@@ -601,7 +639,7 @@
this.nodes[nodehash] = nodeval;
}
// Merge into the dict
- eventrule.mergeIntoDict(nodeval.val, eventrule.kss_selector.mergeid, eventrule);
+ eventrule.mergeIntoDict(nodeval.val, eventrule.kss_selector.getMergeId(node));
};
kukit.rd.RuleTable.prototype.bindall = function(phase) {
@@ -669,7 +707,8 @@
;;; throw 'Unknown method rule category "' + category + '"';
;;; }
// Merge into the corresponding category
- eventrule.mergeIntoDict(dict, eventrule.kss_selector.mergeid, eventrule);
+ // mergeid must be set on kss selector already.
+ eventrule.mergeIntoDict(dict, eventrule.kss_selector.getMergeId());
};
kukit.rd.MethodTable.prototype.getMergedRule = function(category, name, binderinstance) {
More information about the Kukit-checkins
mailing list