Author: jmorliaguet
Date: Sat Mar 4 18:21:04 2006
New Revision: 2523
Modified:
cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js
Log:
- some fixes to avoid rendering the same panel several times
Modified: cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js (original)
+++ cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js Sat Mar 4
18:21:04 2006
@@ -89,6 +89,20 @@
context.parentNode.replaceChild(div, context);
},
+ /* Comparison */
+
+ compare: function(a, b) {
+ if (a == undefined && b == undefined) {
+ return true;
+ }
+ if (typeof a == 'object' && typeof b == 'object') {
+ if (a.hash != undefined && b.hash != undefined) {
+ return a.hash() == b.hash();
+ }
+ }
+ return (a == b);
+ },
+
/* Action handlers */
addActions: function(handlers) {
Object.extend(this._handlers, handlers);
@@ -99,7 +113,12 @@
if (!(eventid in this._subscribers)) {
this._subscribers[eventid] = [];
}
- this._subscribers[eventid].push(event);
+ if (this._subscribers[eventid].findAll(function(e) {
+ return (CPSSkins.compare(event.subscriber, e.subscriber) &&
+ CPSSkins.compare(event.publisher, e.publisher))
+ }).length == 0) {
+ this._subscribers[eventid].push(event);
+ }
},
unsubscribe: function(eventid, event) {
@@ -107,8 +126,8 @@
if (!(eventid in subscribers)) { return; }
subscribers[eventid] = subscribers[eventid].reject(function(e) {
if (event == undefined) return true;
- return (event.subscriber == e.subscriber &&
- event.publisher == e.publisher)
+ return (CPSSkins.compare(event.subscriber, e.subscriber) &&
+ CPSSkins.compare(event.publisher, e.publisher))
});
if (subscribers[eventid].length == 0) {delete subscribers[eventid]}
},
@@ -117,9 +136,13 @@
var subscribers = this._subscribers;
var publisher = event.publisher;
(subscribers[eventid] || []).findAll(function(e) {
- // FIXME: this is broken, comparisons in javascript only check object
- // identify;
- return (e.publisher == publisher || e.publisher == null)
+ if (e.publisher == null) {
+ return true;
+ }
+ if (CPSSkins.compare(e.publisher, publisher)) {
+ return true;
+ }
+ return false;
}).each(function(e) {
var handler = CPSSkins.getEventHandler(eventid, e.subscriber);
if (handler) {
@@ -374,6 +397,10 @@
this.views = new CPSSkins.Set();
},
+ hash: function() {
+ return this.def.id;
+ },
+
setup: function() {
/* to override */
},
@@ -970,6 +997,10 @@
this.storage = this._setStorageAdapter();
},
+ hash: function() {
+ return this.def.id;
+ },
+
// low-level I/O
readData: function() {
return this._data || this.def.data;
@@ -1003,8 +1034,7 @@
var model = this;
// observers subscribes to events on the model
CPSSkins.registerEventHandler('changed', view, function(event) {
- var data = event.publisher.readData();
- event.subscriber.display(data);
+ event.subscriber.refresh();
});
CPSSkins.subscribe('changed', {'subscriber': view, 'publisher': model});
},
@@ -1324,6 +1354,10 @@
this.setup();
},
+ hash: function() {
+ return this.def.id;
+ },
+
/* Public API */
inspect: function() {
return "[CPSSkins " + this.def.widget + "]";
@@ -1378,7 +1412,7 @@
},
show: function() {
- if (this.visible) return;
+ if (this._visible) { return }
CPSSkins.notify("gained focus", {'publisher': this,
'context': this.selected});
@@ -1394,11 +1428,11 @@
} else {
Element.show(this.widget);
}
- this.visible = true;
+ this._visible = true;
},
hide: function() {
- if (!this.visible) {
+ if (!this._visible) {
return;
}
@@ -1408,7 +1442,7 @@
Element.hide(this.widget);
}
- this.visible = false;
+ this._visible = false;
CPSSkins.notify("lost focus", {'publisher': this});
// tear down the view;
@@ -1524,16 +1558,15 @@
CPSSkins.Panel = Class.create();
CPSSkins.Panel.prototype = Object.extend(new CPSSkins.View(), {
- setup: function() {
- this.visible = false;
- },
-
inspect: function() {
return '[CPSSkins Panel]';
},
render: function(data) {
var url = data.url;
+ if (!url) {
+ return;
+ }
var script = data.script;
if (script) {
this.script_id = this.def.model;
@@ -1563,9 +1596,6 @@
}
},
- prepare: function() {
- },
-
teardown: function() {
if (this.css_id) {
CPSSkins.Canvas.removeStyleSheet(this.css_id);
--
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins