Author: lgiessmann Date: Thu Oct 14 12:07:24 2010 New Revision: 327
Log: adapted the "mark-as-deleted" functions of the UI to the latest update of the backend; fixed a bug in "json_tmcl_validation" when iterating marked-as-deleted assocations; fixed a bug in the UI that appeared after committing delete-messages to the backend --> ticket #74
Modified: trunk/src/ajax/javascripts/datamodel.js trunk/src/ajax/javascripts/requests.js trunk/src/json/json_tmcl_validation.lisp trunk/src/model/datamodel.lisp trunk/src/rest_interface/set-up-json-interface.lisp
Modified: trunk/src/ajax/javascripts/datamodel.js ============================================================================== --- trunk/src/ajax/javascripts/datamodel.js (original) +++ trunk/src/ajax/javascripts/datamodel.js Thu Oct 14 12:07:24 2010 @@ -4355,58 +4355,69 @@ if(type !== "Occurrence" && type !== "Name" && type !== "Variant" && type !== "Topic" && type !== "Association"){ throw "From makeRemoveObject(): type must be: "Occurrence" || "Name" " + - "|| "Variant" || "Topic" || "Association" but is " + type; + "|| "Topic" but is " + type; } if (!objectToDelete){ throw "From makeRemoveObject(): objectToDelete must be set"; }
- var parentTopic = "null"; - if(type === "Occurrence" || type === "Name"){ - var psiFrame = objectToDelete.getFrame().parentNode.parentNode.parentNode.parentNode.select("tr." + CLASSES.subjectIdentifierFrame())[0]; + // --- Returns a JSON-object that corresponds to a topicStub + function makeJsonTopicStub(topicFrame){ + var topPSIs = "null"; + var psiFrame = topicFrame.select("tr." + CLASSES.subjectIdentifierFrame())[0]; var psiFields = psiFrame.select("input"); - for(i = 0; psiFields && i !== psiFields.length; ++i){ + for(var i = 0; psiFields && i !== psiFields.length; ++i){ var psiValue = psiFields[i].value; if(psiValue.strip().length !== 0){ - parentTopic = psiValue.strip().toJSON(); + topPSIs = new Array(psiValue.strip()).toJSON(); break; } } - } - - var topics = "null"; - if (type === "Topic"){ - var psiFrame = objectToDelete.getFrame().select("tr." + CLASSES.subjectIdentifierFrame())[0]; - var psiFields = psiFrame.select("input"); - for(i = 0; psiFields && i !== psiFields.length; ++i){ - var psiValue = psiFields[i].value; - if(psiValue.strip().length !== 0){ - topics = new Array(psiValue.strip()).toJSON(); + var topIIs = "null"; + var iiFrame = topicFrame.select("tr." + CLASSES.itemIdentityFrame())[0]; + var iiFields = iiFrame.select("input"); + for(var i = 0; iiFields && i !== iiFields.length; ++i){ + var iiValue = iiFields[i].value; + if(iiValue.strip().length !== 0){ + topIIs = new Array(iiValue.strip()).toJSON(); break; } } + var topSLs = "null"; + var slFrame = topicFrame.select("tr." + CLASSES.subjectLocatorFrame())[0]; + var slFields = slFrame.select("input"); + for(var i = 0; slFields && i !== slFields.length; ++i){ + var slValue = slFields[i].value; + if(slValue.strip().length !== 0){ + topSLs = new Array(slValue.strip()).toJSON(); + break; + } + } + return "{"id":"null","itemIdentities":" + topIIs + + ","subjectLocators":" + topSLs + ","subjectIdentifiers":" + topPSIs + + ","instanceOfs":"null","names":"null","occurrences":"null"}"; }
- var deletedObjects = null; - if(type === "Topic"){ deletedObjects = topics; } - else { deletedObjects = "[" + objectToDelete.toJSON() + "]"; } + var delMessage = "null";
- var jsonData = "{"type":"" + type + ""," + - ""topics":" + topics + "," + - ""associations":" + "null" + "," + - ""parentTopic":" + parentTopic + "," + - ""parentName":" + "null" + "," + - ""names":" + (type === "Name" ? deletedObjects : "null") + "," + - ""variants":" + "null" + "," + - ""occurrences":" + (type === "Occurrence" ? deletedObjects : "null") + "," + - ""parentAssociation":" + "null" + "," + - ""roles":" + "null" + "}"; + switch(type){ + case "Topic": + delMessage = "{"type":"Topic","delete":" + makeJsonTopicStub(objectToDelete.getFrame()) + "}"; + break; + case "Name": + case "Occurrence": + delMessage = "{"type":"" + type + "","parent":" + + makeJsonTopicStub(objectToDelete.getFrame().parentNode.parentNode.parentNode.parentNode) + + ","delete":" + objectToDelete.toJSON() + "}"; + break; + }
- commitDeletedObject(jsonData, function(xhr){ + commitDeletedObject(delMessage, function(xhr){ alert("Objected deleted"); if(type === "Topic"){ $(CLASSES.subPage()).update(); - makeHome(); + setNaviClasses($(PAGES.home)); + makePage(PAGES.home, ""); } else if (type === "Occurrence" || type === "Name"){ if(objectToDelete.__owner__.__frames__.length > objectToDelete.__max__
Modified: trunk/src/ajax/javascripts/requests.js ============================================================================== --- trunk/src/ajax/javascripts/requests.js (original) +++ trunk/src/ajax/javascripts/requests.js Thu Oct 14 12:07:24 2010 @@ -219,7 +219,7 @@ }
-// --- Sends a POST-Message to the server. The sent message enables the server +// --- Sends a DELETE-Message to the server. The sent message enables the server // --- to find the spcified object and mark it as deleted function commitDeletedObject(json, onSuccessHandler, onFailureHandler) { @@ -227,9 +227,8 @@ try{ var onFailure = onFailureHandler ? onFailureHandler : defaultFailureHandler; var timeFun = setAjaxTimeout(TIMEOUT, COMMIT_URL); - new Ajax.Request(MARK_AS_DELETED_URL, { - "method" : "post", + "method" : "delete", "postBody" : json, "onSuccess" : createXHRHandler(onSuccessHandler, timeFun), "onFailure" : createXHRHandler(onFailure, timeFun)});
Modified: trunk/src/json/json_tmcl_validation.lisp ============================================================================== --- trunk/src/json/json_tmcl_validation.lisp (original) +++ trunk/src/json/json_tmcl_validation.lisp Thu Oct 14 12:07:24 2010 @@ -202,7 +202,8 @@ (type (get-item-by-psi *type-psi* :revision revision))) (let ((topic-types (loop for role in (player-in-roles topic-instance :revision revision) - when (eq instance (instance-of role :revision revision)) + when (and (eq instance (instance-of role :revision revision)) + (parent role :revision revision)) collect (loop for other-role in (roles (parent role :revision revision) :revision revision) when (and (not (eq role other-role)) @@ -228,7 +229,8 @@ (type (get-item-by-psi *type-psi* :revision revision))) (let ((topic-instances (loop for role in (player-in-roles topic-instance :revision revision) - when (eq type (instance-of role :revision revision)) + when (and (eql type (instance-of role :revision revision)) + (parent role :revision revision)) collect (loop for other-role in (roles (parent role :revision revision) :revision revision) when (and (not (eq role other-role)) @@ -254,7 +256,8 @@ (subtype (get-item-by-psi *subtype-psi* :revision revision))) (let ((supertypes (loop for role in (player-in-roles topic-instance :revision revision) - when (eq subtype (instance-of role :revision revision)) + when (and (eq subtype (instance-of role :revision revision)) + (parent role :revision revision)) append (loop for other-role in (roles (parent role :revision revision) :revision revision) when (and (not (eq role other-role)) @@ -281,7 +284,8 @@ (subtype (get-item-by-psi *subtype-psi* :revision revision))) (let ((subtypes (loop for role in (player-in-roles topic-instance :revision revision) - when (eq supertype (instance-of role :revision revision)) + when (and (eq supertype (instance-of role :revision revision)) + (parent role :revision revision)) append (loop for other-role in (roles (parent role :revision revision) :revision revision) when (and (not (eq role other-role)) @@ -318,7 +322,8 @@ :revision revision)) (current-valid-subtypes (append valid-subtypes (list topic-instance)))) (loop for role in (player-in-roles topic-instance :revision revision) - when (and (eq supertype (instance-of role :revision revision)) + when (and (parent role :revision revision) + (eq supertype (instance-of role :revision revision)) (eq supertype-subtype (instance-of (parent role :revision revision) :revision revision))) @@ -357,7 +362,8 @@ (loop for subtype-of-this in all-subtypes-of-this append (loop for role in (player-in-roles subtype-of-this :revision revision) - when (and (eq type (instance-of role :revision revision)) + when (and (parent role :revision revision) + (eq type (instance-of role :revision revision)) (eq type-instance (instance-of (parent role :revision revision) :revision revision)))
Modified: trunk/src/model/datamodel.lisp ============================================================================== --- trunk/src/model/datamodel.lisp (original) +++ trunk/src/model/datamodel.lisp Thu Oct 14 12:07:24 2010 @@ -2770,6 +2770,8 @@ (declare (ignorable source-locator)) (let ((owner (parent construct :revision 0))) (when owner + ;(private-delete-player construct (player construct :revision revision) + ;:revision revision) (private-delete-role owner construct :revision revision))))
Modified: trunk/src/rest_interface/set-up-json-interface.lisp ============================================================================== --- trunk/src/rest_interface/set-up-json-interface.lisp (original) +++ trunk/src/rest_interface/set-up-json-interface.lisp Thu Oct 14 12:07:24 2010 @@ -387,7 +387,8 @@ "Marks the corresponding elem as deleted." (declare (ignorable param)) ;param is currently not used (let ((http-method (hunchentoot:request-method*))) - (if (eq http-method :DELETE) + (if (or (eq http-method :DELETE) + (eq http-method :Post)) ;not nice - but the current ui-library can't send http-delete messages (let ((external-format (flexi-streams:make-external-format :UTF-8 :eol-style :LF))) (let ((json-data (hunchentoot:raw-post-data :external-format external-format :force-text t))) (handler-case