[isidorus-cvs] r42 - trunk/src/ajax/javascripts
Lukas Giessmann
lgiessmann at common-lisp.net
Tue Jun 16 10:04:55 UTC 2009
Author: lgiessmann
Date: Tue Jun 16 06:04:53 2009
New Revision: 42
Log:
ajax-client: by commiting a fragment, there will be requested all needed topicStubs for a valid fragment by the ajax as a "background process", so the user does not need to care about the referenced topicStubs
Modified:
trunk/src/ajax/javascripts/constants.js
trunk/src/ajax/javascripts/create.js
trunk/src/ajax/javascripts/datamodel.js
trunk/src/ajax/javascripts/requests.js
Modified: trunk/src/ajax/javascripts/constants.js
==============================================================================
--- trunk/src/ajax/javascripts/constants.js (original)
+++ trunk/src/ajax/javascripts/constants.js Tue Jun 16 06:04:53 2009
@@ -31,6 +31,7 @@
var ANY_URI = "http://www.w3.org/2001/XMLSchema#anyURI";
var STRING = "http://www.w3.org/2001/XMLSchema#string";
var CURRENT_TOPIC = "**current-topic**";
+var CURRENT_TOPIC_ESCAPED = "\\*\\*current-topic\\*\\*";
// --- Contains most css classes used in this project
// --- There should be called only the function to be sure to don't override
Modified: trunk/src/ajax/javascripts/create.js
==============================================================================
--- trunk/src/ajax/javascripts/create.js (original)
+++ trunk/src/ajax/javascripts/create.js Tue Jun 16 06:04:53 2009
@@ -56,7 +56,31 @@
var commitButton = new Element("input", {"type" : "button", "value" : "commit fragment", "style" : "float: right; margin-top: -10px;"})
commitButton.observe("click", function(event){
- alert("commit fragment");
+ try{
+ var tPsis = topic.getContent().subjectIdentifiers;
+ var referencedTopics = topic.getReferencedTopics().concat(associations.getReferencedTopics()).without(CURRENT_TOPIC).uniq();
+
+ function onSuccessHandler(topicStubs){
+ var str = "null";
+ if(topicStubs && topicStubs.length !== 0){
+ str = "[";
+ for(var i = 0; i !== topicStubs.length; ++i){
+ str += topicStubs[i];
+ if(i !== topicStubs.length - 1) str += ",";
+ }
+ str += "]";
+ }
+ var json = "{\"topic\":" + topic.toJSON() + ",\"topicStubs\":" + str + ",\"associations\":" + associations.toJSON().gsub(CURRENT_TOPIC_ESCAPED, tPsis) + ",\"tmIds\":" + "[\"myTM\"]}";
+ alert(json);
+ }
+
+ function onErrorHandler(){
+ // --- currently there is not neede a special handling for errors
+ // --- occurred during this operation
+ }
+
+ getTopicStubs(referencedTopics, onSuccessHandler, onErrorHandler);
+ }catch(err){ alert("test: " + err); }
});
var liCB = new Element("li", {"class" : CLASSES.commitButton()});
liCB.update(commitButton);
Modified: trunk/src/ajax/javascripts/datamodel.js
==============================================================================
--- trunk/src/ajax/javascripts/datamodel.js (original)
+++ trunk/src/ajax/javascripts/datamodel.js Tue Jun 16 06:04:53 2009
@@ -1018,7 +1018,9 @@
},
"getContent" : function(){
if(this.isUsed() === false) return null;
+ var type = this.__type__.__frames__[0].getContent();
return {"itemIdentities" : this.__itemIdentity__.getContent(true, true),
+ "type" : type ? new Array(type) : null,
"scopes" : this.__scope__.getContent(),
"value" : this.__value__.__frames__[0].getContent(),
"variants" : this.__variants__.getContent()};
@@ -1470,6 +1472,42 @@
},
"hasPsi" : function(){
return this.__subjectIdentifier__.getContent(true, true).length !== 0;
+ },
+ "getReferencedTopics" : function(){
+ var referencedTopics = new Array();
+ var names = this.getContent().names;
+ if(names){
+ for(var i = 0; i !== names.length; ++i){
+ // TODO: variant (-scope topicStubs)
+ var type = names[i].type;
+ if(type){
+ if(referencedTopics.indexOf(type[0]) === -1) referencedTopics.push(type[0]);
+ }
+ var scopes = names[i].scopes;
+ if(scopes){
+ for(var j = 0; j !== scopes.length; ++j){
+ if(referencedTopics.indexOf(scopes[j]) === -1) referencedTopics.push(scopes[j]);
+ }
+ }
+ }
+ }
+
+ var occurrences = this.getContent().occurrences;
+ if(occurrences){
+ for(var i = 0; i !== occurrences.length; ++i){
+ var type = occurrences[i].type;
+ if(type){
+ if(referencedTopics.indexOf(type[0]) === -1) referencedTopics.push(type[0]);
+ }
+ var scopes = occurrences[i].scopes;
+ if(scopes){
+ for(var j = 0; j !== scopes.length; ++j){
+ if(referencedTopics.indexOf(scopes[j]) === -1) referencedTopics.push(scopes[j]);
+ }
+ }
+ }
+ }
+ return referencedTopics;
}});
@@ -2302,8 +2340,9 @@
},
"getContent" : function(){
if(!this.isUsed()) return null;
+ var type = this.__type__.__frames__[0].getContent();
return {"itemIdentities" : this.__itemIdentity__.getContent(true, true),
- "type" : new Array(this.__type__.__frames__[0].getContent()),
+ "type" : type ? new Array(type) : null,
"scopes" : this.__scope__.getContent(),
"roles" : this.__roles__.getContent()};
},
@@ -2412,6 +2451,32 @@
else rows[i].show();
}
this.__minimized__ = !this.__minimized__;
+ },
+ "getReferencedTopics" : function(){
+ var referencedTopics = new Array();
+ var associations = this.getContent();
+ if(associations){
+ for(var i = 0; i !== associations.length; ++i){
+ var assType = associations[i].type;
+ if(referencedTopics.indexOf(assType[0]) === -1) referencedTopics.push(assType[0]);
+ var scopes = associations[i].scopes;
+ if(scopes){
+ for(var j = 0; j !== scopes.length; ++j){
+ if(referencedTopics.indexOf(scopes[j]) === -1) referencedTopics.push(scopes[j]);
+ }
+ }
+ var roles = associations[i].roles;
+ if(roles){
+ for(var j = 0; j !== roles.length; ++j){
+ var roleType = roles[j].type;
+ if(roleType && referencedTopics.indexOf(roleType[0]) === -1) referencedTopics.push(roleType[0]);
+ var player = roles[j].topicRef;
+ if(player && referencedTopics.indexOf(player[0]) === -1) referencedTopics.push(player[0]);
+ }
+ }
+ }
+ }
+ return referencedTopics;
}});
Modified: trunk/src/ajax/javascripts/requests.js
==============================================================================
--- trunk/src/ajax/javascripts/requests.js (original)
+++ trunk/src/ajax/javascripts/requests.js Tue Jun 16 06:04:53 2009
@@ -52,4 +52,57 @@
catch(err){
alert("Could not request contraints, please try again!\n\n" + err);
}
+}
+
+
+// --- gets all topicStubs information for the passed psis and
+// --- executes the onSuccessHandler or the on FailureHandler
+// --- if all stubs are requested or one request fails.
+function getTopicStubs(psis, onSuccessHandler, onFailureHandler)
+{
+ if(!onSuccessHandler || !onFailureHandler) throw "From getTopicStubs(): onsuccessHandler and onFailureHandler must be set!";
+ try{
+ var topicStubs = new Array();
+
+ if(psis){
+ for(var i = 0; i !== psis.length; ++i){
+ var url = GET_STUB_PREFIX + psis[i].gsub("#", "%23");
+ new Ajax.Request(url, {
+ "method" : "get",
+ "requestHeaders" : ["If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT"],
+ "onSuccess" : function(xhr){
+ if(xhr.responseText.length === 0 || xhr.responseText.isJSON() === false) errorHandler("Got bad JSON-Data for \"" + psis[i] + "\"!");
+ else topicStubs.push(xhr.responseText);
+ },
+ "onFailure" : function(xhr){
+ alert("From getTopicStubs(): Could not equest topicStub information for \"" + xhr.request.url + "\"!!!");
+ onFailureHandler();
+ }});
+ }
+ }
+
+ // --- Checks the requested value. If there are all values requested, there will be called the
+ // --- onSuccessHandler - otherwise (after the maximum time out or an faild request) there will
+ // --- be called the onErrorHandler.
+ var maxTimeout = psis.length * TIMEOUT;
+ var neededTime = 0;
+ function checkRequests(){
+ var delta = 100;
+ neededTime += delta;
+ if(delta > maxTimeout){
+ alert("From getTopicStubs(): Please check your network-connection - the request timed out!!!");
+ onFailureHandler();
+ return;
+ }
+
+ if(topicStubs.length === psis.length) onSuccessHandler(topicStubs);
+ else setTimeout(checkRequests, delta);
+ }
+
+ checkRequests();
+
+ }
+ catch(err){
+ alert("From getTopicStubs(): Could not request topicStubs information for: " + psis + "\n\n" + err);
+ }
}
\ No newline at end of file
More information about the Isidorus-cvs
mailing list