Author: lgiessmann Date: Fri Jun 19 09:17:20 2009 New Revision: 52
Log: ajax-client: fixed a few bugs and prepared the client for the implementation of editing existing fragments
Modified: trunk/src/ajax/css/frame.css trunk/src/ajax/javascripts/constants.js trunk/src/ajax/javascripts/create.js trunk/src/ajax/javascripts/datamodel.js trunk/src/ajax/javascripts/edit.js trunk/src/ajax/javascripts/requests.js
Modified: trunk/src/ajax/css/frame.css ============================================================================== --- trunk/src/ajax/css/frame.css (original) +++ trunk/src/ajax/css/frame.css Fri Jun 19 09:17:20 2009 @@ -34,4 +34,9 @@ input[value="generate fragment"] { margin-top: 10px; margin-bottom: 10px; +} + +input[value="commit fragment"] { + margin-top: -20px; + float: right; } \ No newline at end of file
Modified: trunk/src/ajax/javascripts/constants.js ============================================================================== --- trunk/src/ajax/javascripts/constants.js (original) +++ trunk/src/ajax/javascripts/constants.js Fri Jun 19 09:17:20 2009 @@ -82,6 +82,7 @@ "__divTmIdFrame__" : "tmIdFrame", "__divLoad__" : "loadFrame", "__imgAjaxLoader__" : "ajaxLoader", + "__divEditFrame__" : "editFrame",
"page" : function(){ return this.__divPage__; }, "subPage" : function(){ return this.__divSubPage__; }, @@ -124,5 +125,6 @@ "commitButton" : function(){ return this.__inputCommitButton__; }, "tmIdFrame" : function(){ return this.__divTmIdFrame__; }, "load" : function(){ return this.__divLoad__; }, - "ajaxLoader" : function(){ return this.__imgAjaxLoader__; } + "ajaxLoader" : function(){ return this.__imgAjaxLoader__; }, + "editFrame" : function(){ return this.__divEditFrame__; } }; \ No newline at end of file
Modified: trunk/src/ajax/javascripts/create.js ============================================================================== --- trunk/src/ajax/javascripts/create.js (original) +++ trunk/src/ajax/javascripts/create.js Fri Jun 19 09:17:20 2009 @@ -10,6 +10,7 @@ //+-----------------------------------------------------------------------------
+// --- Creates the "create"-sub-page. function makeCreate(psi) { var content = new Element("div", {"class" : CLASSES.content()}); @@ -24,7 +25,7 @@ fragmentFrame.insert({"bottom" : liTopicSelect});
function innerMakeFragment(psis, constraints){ - makeFragment(liTopicSelect, psis, constraints); + makeFragment(liTopicSelect, psis, constraints, null); }
function onSuccessHandler(xhr){ @@ -45,7 +46,7 @@ } } //onSuccessHandler - getTypePsis(onSuccessHandler, null); + getPsis(onSuccessHandler, null, true); }catch(err){ alert("From makeCreate(): " + err); } @@ -53,22 +54,31 @@
// --- Creates the sub-elemts Topic, Associations and Topic Maps ID of a Fragment element. -function makeFragment(context, psis, constraints){ +function makeFragment(context, psis, constraints, contents){ clearFragment(); + + var topicContent = null; + var associationsContent = null; + var tmContent = null; + if(contents){ + topicContent = contents.topic; + associationsContent = contents.associations; + tmContent = contents.tmIds; + }
var instanceOfs = new Array(); for(var i = 0; psis && i !== psis.length; ++i){ instanceOfs.push(new Array(psis[i])); } - var topic = new TopicC(null, (constraints ? constraints.topicConstraints : null), instanceOfs); + var topic = new TopicC(topicContent, (constraints ? constraints.topicConstraints : null), instanceOfs); var liT = new Element("li", {"class" : CLASSES.topicFrame()}).update(topic.getFrame()); context.insert({"after" : liT});
var liA = null; var associations = null; - if(constraints && constraints.associationsConstraints && constraints.associationsConstraints.length !== 0){ + if((constraints && constraints.associationsConstraints && constraints.associationsConstraints.length !== 0) || associationsContent && associationsContent.length !== 0){ addTopicAsPlayer((constraints ? constraints.associationsConstraints : null), topic.getContent().instanceOfs); - associations = new AssociationContainerC(null, (constraints ? constraints.associationsConstraints : null)); + associations = new AssociationContainerC(associationsContent, (constraints ? constraints.associationsConstraints : null)); liA = new Element("li", {"class" : CLASSES.associationContainer()}).update(associations.getFrame()); liT.insert({"after" : liA}); } @@ -76,10 +86,10 @@ liA = liT; }
- var tmId = new TmIdC(null); + var tmId = new TmIdC(tmContent); var liTm = new Element("li", {"class" : CLASSES.tmIdFrame()}).update(tmId.getFrame()); liA.insert({"after" : liTm}); - var commitButton = new Element("input", {"type" : "button", "value" : "commit fragment", "style" : "float: right; margin-top: -10px;"}) + var commitButton = new Element("input", {"type" : "button", "value" : "commit fragment"}) commitButton.observe("click", function(event){ // --- validates the given data var ret = true;
Modified: trunk/src/ajax/javascripts/datamodel.js ============================================================================== --- trunk/src/ajax/javascripts/datamodel.js (original) +++ trunk/src/ajax/javascripts/datamodel.js Fri Jun 19 09:17:20 2009 @@ -242,6 +242,51 @@ }});
+// --- Representation of a +var EditC = Class.create(ContainerC, {"initialize" : function($super, contents, successFun){ + $super(); + this.__frame__.writeAttribute({"class" : CLASSES.editFrame()}); + this.__container__ = new Object(); + try{ + var row = new SelectrowC(contents, this.__container__, 1, 1); + this.__error__.insert({"before" : row.getFrame()}); + } + catch(err){ + throw "From EditC(): The following exception was thrown:\n" + err; + this.__container__ = null; + } + this.__commit__ = new Element("input", {"type" : "button", "value" : "generate fragment"}); + + function setHandler(myself){ + function onSuccessHandler(xhr){ + var json = null; + try{ + json = xhr.responseText.evalJSON(); + } + catch(err){ + alert("Got bad JSON data from " + xhr.request.url + "!\n\n" + err); + } + successFun(new Array(myself.getContent()), json); + } + + myself.__commit__.observe("click", function(event){ + myself.hideError(); + clearFragment(); + requestConstraints("[" + myself.toJSON() + "]", onSuccessHandler, null) + }); + } + setHandler(this); + + this.__error__.insert({"before" : this.__commit__}); + }, + "getContent" : function(){ + return this.__container__.__frames__[0].getContent(); + }, + "toJSON" : function(){ + return this.getContent().toJSON(); + }}); + + // --- Represents a container for all instanceOf-Psis of a fragment's topic var InstanceOfC = Class.create(ContainerC, {"initialize" : function($super, contents, successFun){ $super(); @@ -281,10 +326,7 @@ str += "<br/>"; } } - var items = $$("li." + CLASSES.topicFrame()); - for(var i = 0; i != items.length; ++i){ - items[i].remove(); - } + clearFragment(); myself.showError(str); } else { @@ -295,7 +337,7 @@ myself.__commit__.observe("click", function(event){ myself.hideError(); clearFragment(); - requestConstraints(myself.toJSON(true), onSuccessHandler, null); + requestConstraints(myself.toJSON(true), onSuccessHandler, null, true); }); } setHandler(this); @@ -479,11 +521,11 @@ // --- checks card-min and card-max for the current constraint if(cardMin > currentIdentifiers.length){ - errorStr += "card-min of the constraint regexp: "" + this.__constraints__[i].regexp + "" card-min: " + cardMin + " card-max: " + cardMax + " is not satisfied (" + cardMin + ")!<br/>"; + errorStr += "card-min of the constraint regexp: "" + this.__constraints__[i].regexp + "" card-min: " + cardMin + " card-max: " + cardMax + " is not satisfied (" + currentIdentifiers.length + ")!<br/>"; ret = false; } if(cardMax !== MMAX_INT && cardMax < currentIdentifiers.length){ - errorStr += "card-max of the constraint regexp: "" + this.__constraints__[i].regexp + "" card-min: " + cardMin + " card-max: " + cardMax + " is not satisfied (" + cardMax + ")!<br/>"; + errorStr += "card-max of the constraint regexp: "" + this.__constraints__[i].regexp + "" card-min: " + cardMin + " card-max: " + cardMax + " is not satisfied (" + currentIdentifiers.length + ")!<br/>"; ret = false; } } @@ -842,8 +884,15 @@ this.__dblClickHandler__ = dblClickHandler;
try{ + var itemIdentityContent = null; + var scopesContent = null; + if(contents){ + itemIdentityContent = contents.itemIdentities; + scopesContent = contents.scopes; + } + // --- control row + itemIdentity - makeControlRow(this, 4, contents ? contents.itemIdentities : null); + makeControlRow(this, 4, itemIdentityContent); checkRemoveAddButtons(owner, 1, -1); setRemoveAddHandler(this, owner, 1, -1, function(){ return new VariantC(null, owner, dblClickHandler, parent); @@ -1037,8 +1086,21 @@ this.__dblClickHandler__ = dblClickHandler;
try{ + var itemIdentityContent = null; + var typeContent = null; + var scopesContent = null; + var valueContent = ""; + var variantsContent = null; + if(contents){ + itemIdentityContent = contents.itemIdentities; + typeContent = contents.type; + scopesContent = contents.scopes; + valueContent = contents.value; + variantsContent = contents.variants; + } + // --- control row + ItemIdentity - makeControlRow(this, 5, contents ? contents.itemIdentities : null); + makeControlRow(this, 5, itemIdentityContent); checkRemoveAddButtons(owner, min, max); setRemoveAddHandler(this, owner, min, max, function(){ return new NameC(null, nametypescopes, simpleConstraint, owner, min, max, cssTitle, dblClickHandler); @@ -1049,7 +1111,7 @@ for(var i = 0; nametypescopes && i !== nametypescopes.length; ++i){ for(var j = 0; j != nametypescopes[i].nameType.length; ++j){ types.push(nametypescopes[i].nameType[j]); - if(contents && contents.type && contents.type[0] === nametypescopes[i].nameType[j]){ + if(typeContent && typeContent[0] === nametypescopes[i].nameType[j]){ var selected = nametypescopes[i].nameType[j]; types[types.length - 1] = types[0]; types[0] = selected; @@ -1061,7 +1123,7 @@ this.__table__.insert({"bottom" : tr}); // --- scopes - this.__scope__ = new ScopeContainerC(contents && contents.scopes ? scopes : null, nametypescopes && nametypescopes[0].scopeConstraints ? nametypescopes[0].scopeConstraints : null); + this.__scope__ = new ScopeContainerC(scopesContent, nametypescopes && nametypescopes[0].scopeConstraints ? nametypescopes[0].scopeConstraints : null); this.__table__.insert({"bottom" : newRow(CLASSES.scopeContainer(), "Scope", this.__scope__.getFrame())}); onTypeChangeScope(this, contents ? contents.scopes : null, nametypescopes, "name");
@@ -1071,11 +1133,11 @@ var _max = simpleConstraint.cardMax !== MAX_INT ? parseInt(simpleConstraint.cardMax) : MMAX_INT; var cssTitleV = "min: " + _min + " max: " + _max + " regular expression: " + (simpleConstraint ? simpleConstraint.regexp : ".*"); this.__cssTitle__ = cssTitle; - new TextrowC((contents ? contents.value : ""), (simpleConstraint ? simpleConstraint.regexp : ".*"), this.__value__, 1, 1, cssTitleV); + new TextrowC(valueContent, (simpleConstraint ? simpleConstraint.regexp : ".*"), this.__value__, 1, 1, cssTitleV); this.__table__.insert({"bottom" : newRow(CLASSES.valueFrame(), "Value", this.__value__.__frames__[0].getFrame())}); // --- variants - this.__variants__ = new VariantContainerC(contents? contents.variants : null, this); + this.__variants__ = new VariantContainerC(variantsContent, this); this.__table__.insert({"bottom" : newRow(CLASSES.variantContainer(), "Variants", this.__variants__.getFrame())}); // --- adds a second show handler, so the variants will be hidden, when the entire @@ -1348,8 +1410,17 @@ this.__dblClickHandler__ = dblClickHandler;
try{ + var itemIdentityContent = null; + var typeContent = null; + var scopesContent = null; + if(contents){ + itemIdentityContent = contents.itemIdentities; + typeContent = contents.type; + scopesContent = contents.scopes; + } + // --- control row + itemIdentity - makeControlRow(this, 5, contents ? contents.itemIdentities : null); + makeControlRow(this, 5, itemIdentityContent); checkRemoveAddButtons(owner, 1, max); setRemoveAddHandler(this, owner, 1, max, function(){ return new OccurrenceC(null, occurrenceTypes, constraint, uniqueConstraints, owner, min, max, cssTitle, dblClickHandler); @@ -1360,7 +1431,7 @@ for(var i = 0; occurrenceTypes && i !== occurrenceTypes.length; ++i){ for(var j = 0; j != occurrenceTypes[i].occurrenceType.length; ++j){ types.push(occurrenceTypes[i].occurrenceType[j]); - if(contents && contents.type && contents.type[0] === ooccurrenceTypes[i].occurrenceType[j]){ + if(typeContent && typeContent[0] === ooccurrenceTypes[i].occurrenceType[j]){ var selected = occurrenceTypes[i].occurrenceType[j]; types[types.length - 1] = types[0]; types[0] = selected; @@ -1372,7 +1443,7 @@ this.__table__.insert({"bottom" : tr});
// --- scopes - this.__scope__ = new ScopeContainerC(contents && contents.scopes ? contents.scopes : null, occurrenceTypes && occurrenceTypes[0].scopeConstraints ? occurrenceTypes[0].scopeConstraints : null); + this.__scope__ = new ScopeContainerC(scopesContent, occurrenceTypes && occurrenceTypes[0].scopeConstraints ? occurrenceTypes[0].scopeConstraints : null); this.__table__.insert({"bottom" : newRow(CLASSES.scopeContainer(), "Scope", this.__scope__.getFrame())}); onTypeChangeScope(this, contents && contents.scopes ? contents.scopes : null, occurrenceTypes, "occurrence");
@@ -1655,6 +1726,20 @@ this.__instanceOfs__ = (!instanceOfs || instanceOfs.length === 0 ? null : instanceOfs);
try{ + var topicidContent = null; + var itemIdentityContent = null; + var subjectLocatorContent = null; + var subjectIdentifierContent = null; + var namesContent = null; + var occurrencesContent = null; + if(content){ + topicidContent = content.id + itemIdentityContent = content.itemIdentities + subjectLocatorContent = content.subjectLocators; + subjectIdentifierContent = content.subjectIdentifiers; + namesContent = content.names; + occurrencesContent = content.occurrences; + } this.__frame__ .writeAttribute({"class" : CLASSES.topicFrame()}); this.__table__ = new Element("table", {"class" : CLASSES.topicFrame()}); this.__frame__.insert({"top" : this.__table__}); @@ -1670,35 +1755,31 @@ // --- topic id this.__topicid__ = new Object(); - new TextrowC((content ? content.topicid : null), ".*", this.__topicid__, 1, 1, null); + new TextrowC(topicidContent, ".*", this.__topicid__, 1, 1, null); this.__table__.insert({"bottom" : newRow(CLASSES.topicIdFrame(), "Topic ID", this.__topicid__.__frames__[0].getFrame())}); // --- itemIdentity - this.__itemIdentity__ = new ItemIdentityC(content ? content.itemIdentities : null, this); + this.__itemIdentity__ = new ItemIdentityC(itemIdentityContent, this); this.__table__.insert({"bottom" : newRow(CLASSES.itemIdentityFrame(), "ItemIdentity", this.__itemIdentity__.getFrame())});
// --- subjectLocator - var _contents = (content ? content.subjectLocators : null); var _constraints = (constraints ? constraints.subjectLocatorConstraints : null); - this.__subjectLocator__ = new IdentifierC(_contents, _constraints, CLASSES.subjectLocatorFrame()); + this.__subjectLocator__ = new IdentifierC(subjectLocatorContent, _constraints, CLASSES.subjectLocatorFrame()); this.__table__.insert({"bottom" : newRow(CLASSES.subjectLocatorFrame(), "SubjectLocator", this.__subjectLocator__.getFrame())});
// --- subjectIdentifier - _contents = (content ? content.subjectIdentifiers : null); _constraints = (constraints ? constraints.subjectIdentifierConstraints : null); - this.__subjectIdentifier__ = new IdentifierC(_contents, _constraints, CLASSES.subjectIdentifierFrame()); + this.__subjectIdentifier__ = new IdentifierC(subjectIdentifierContent, _constraints, CLASSES.subjectIdentifierFrame()); this.__table__.insert({"bottom" : newRow(CLASSES.subjectIdentifierFrame(), "SubjectIdentifier", this.__subjectIdentifier__.getFrame())});
// --- names - _contents = (content ? content.names : null); _constraints = (constraints ? constraints.topicNameConstraints : null); - this.__name__ = new NameContainerC(_contents, _constraints); + this.__name__ = new NameContainerC(namesContent, _constraints); this.__table__.insert({"bottom" : newRow(CLASSES.nameContainer(), "Names", this.__name__.getFrame())}); // --- occurrences - _contents = (content ? content.occurrences : null); _constraints = (constraints ? constraints.topicOccurrenceConstraints : null); - this.__occurrence__ = new OccurrenceContainerC(_contents, _constraints); + this.__occurrence__ = new OccurrenceContainerC(occurrencesContent, _constraints); this.__table__.insert({"bottom" : newRow(CLASSES.occurrenceContainer(), "Occurrences", this.__occurrence__.getFrame())}); }catch(err){ alert("From TopciC(): " + err); @@ -2689,8 +2770,20 @@ this.__dblClickHandler__ = dblClickHandlerF;
try{ + var itemIdentityContent = null; + var typeContent = null; + var scopesContent = null; + var rolesContent = null; + if(contents){ + itemIdentityContent = contents.itemIdentities; + typeContent = contents.type; + scopesContent = contents.scopes; + rolesContent = contents.roles; + } + + // --- control row + ItemIdentity - makeControlRow(this, 4, contents ? contents.itemIdentities : null); + makeControlRow(this, 4, itemIdentityContent); checkRemoveAddButtons(owner, 1, -1); setRemoveAddHandler(this, owner, 1, -1, function(){ return new AssociationC(null, constraints, owner); @@ -2701,7 +2794,7 @@ for(var i = 0; constraints && i !== constraints.length; ++i){ for(var j = 0; j != constraints[i].associationType.length; ++j){ types.push(constraints[i].associationType[j]); - if(contents && contents.type && contents.type[0] === constraints[i].associationType[j]){ + if(typeContent && typeContent[0] === constraints[i].associationType[j]){ var selected = constraints[i].associationType[j]; types[types.length - 1] = types[0]; types[0] = selected; @@ -2713,7 +2806,7 @@ this.__table__.insert({"bottom" : tr}); // --- scopes - this.__scope__ = new ScopeContainerC(this.__contents__ && this.__contents__.scopes ? this.__contents__.scopes : null, this.__constraints__ && this.__constraints__[0].scopeConstraints ? this.__constraints__[0].scopeConstraints : null); + this.__scope__ = new ScopeContainerC(scopesContent, this.__constraints__ && this.__constraints__[0].scopeConstraints ? this.__constraints__[0].scopeConstraints : null); this.__table__.insert({"bottom" : newRow(CLASSES.scopeContainer(), "Scope", this.__scope__.getFrame())});
// --- roles @@ -2724,7 +2817,7 @@ _otherRoleConstraints = this.__constraints__[0].otherRoleConstraints; }
- this.__roles__ = new RoleContainerC(this.__contents__ ? this.__contents__.roles : null, _roleConstraints, _playerConstraints, _otherRoleConstraints, this); + this.__roles__ = new RoleContainerC(rolesContent, _roleConstraints, _playerConstraints, _otherRoleConstraints, this); this.__table__.insert({"bottom" : newRow(CLASSES.roleContainer(), "Roles", this.__roles__.getFrame())}); // --- registers the onChangeHandler of the Type-selectrow
Modified: trunk/src/ajax/javascripts/edit.js ============================================================================== --- trunk/src/ajax/javascripts/edit.js (original) +++ trunk/src/ajax/javascripts/edit.js Fri Jun 19 09:17:20 2009 @@ -25,28 +25,37 @@
// --- creates the sub-elements topic, associations and topic map id function innerMakeFragment(psis, constraints){ - makeFragment(liTopicSelect, psis, constraints); + function rSuccessHandler(xhr){ + var json = null; + try{ + json = xhr.responseText.evalJSON(); + } + catch(innrErr){} + + makeFragment(liTopicSelect, psis, constraints, json); + } + requestFragment(psis && psis.length !== 0 ? psis[0] : null, rSuccessHandler, null) } function onSuccessHandler(xhr){ var json = null; try{ json = xhr.responseText.evalJSON(); - } - catch(innerErr){ - alert("Got bad JSON data from " + xhr.request.url + "\n\n" + innerErr); } - var instanceOf = null; + catch(err){ + alert("Got bad JSON data from " + xhr.request.url + "\n\n" + err); + } + var edit = null; + try{ - instanceOf = new InstanceOfC(json.flatten().sort(), innerMakeFragment); - liTopicSelect.insert({"bottom" : instanceOf.getFrame()}); + edit = new EditC(json.flatten().sort(), innerMakeFragment); + liTopicSelect.insert({"bottom" : edit.getFrame()}); } - catch(innerErr){ - alert("There occurred an error by creating an InstanceOfC frame, please reload this page!\n\n" + innerErr); + catch(err){ + alert("There occurred an error by creating an EditC frame, please reload this page!\n\n" + err); } - } //onSuccessHandler - - getTypePsis(onSuccessHandler, null); + } + getPsis(onSuccessHandler, null, false); } catch(err){ alert("From makeEdit(): " + err);
Modified: trunk/src/ajax/javascripts/requests.js ============================================================================== --- trunk/src/ajax/javascripts/requests.js (original) +++ trunk/src/ajax/javascripts/requests.js Fri Jun 19 09:17:20 2009 @@ -81,36 +81,43 @@ }
-// --- Gets all type psis from the server. -function getTypePsis(onSuccessHandler, onFailureHandler) +// --- Gets all psis from the server. If typePsis is set to true +// --- there will be requested only TopicType's psis. +function getPsis(onSuccessHandler, onFailureHandler, typePsis) { try{ var onFailure = onFailureHandler ? onFailureHandler : defaultFailureHandler; var timeFun = setAjaxTimeout(TIMEOUT, TYPE_PSIS_URL); onLoad("Requesting all type PSIs");
- new Ajax.Request(TYPE_PSIS_URL, { + var url = ALL_PSIS_URL; + if(typePsis === true) url = TYPE_PSIS_URL; + + new Ajax.Request(url, { "method" : "get", "requestHeaders" : INIT_DATE, "onSuccess" : createXHRHandler(onSuccessHandler, timeFun), "onFailure" : createXHRHandler(onFailure, timeFun)}); } catch(err){ - alert("Could not request all type PSIs, please try again!\n\n" + err); + alert("From getTypePsis(): could not request all type PSIs, please try again!\n\n" + err); } }
// --- Sends a post-request to the server with the passed psis as postBody. // --- Gets a constraint-object. -function requestConstraints(psis, onSuccessHandler, onFailureHandler) +function requestConstraints(psis, onSuccessHandler, onFailureHandler, typeConstraints) { try{ var onFailure = onFailureHandler ? onFailureHandler : defaultFailureHandler; var timeFun = setAjaxTimeout(TIMEOUT, TMCL_TYPE_URL); onLoad("Requesting all constraints for the psis:<br/>" + psis.gsub("\[", "").gsub("\]", ""));
- new Ajax.Request(TMCL_TYPE_URL, { + url = TMCL_INSTANCE_URL; + if(typeConstraints === true) url = TMCL_TYPE_URL; + + new Ajax.Request(url, { "method" : "post", "postBody" : psis, "onSuccess" : createXHRHandler(onSuccessHandler, timeFun), @@ -198,4 +205,29 @@ catch(err){ alert("From commitFragment(): " + err); } +} + + +// --- Requests a JSON-Fragment for the passed psi and calls the onSuccessHandler function +// --- after a succeeded request. +function requestFragment(psi, onSuccessHandler, onFailureHandler) +{ + if(!psi || !onSuccessHandler) throw "From requestFragment(): psi and onSuccessHandler must be set!"; + + try{ + var onFailure = onFailureHandler ? onFailureHandler : defaultFailureHandler; + var timeFun = setAjaxTimeout(TIMEOUT, COMMIT_URL); + onLoad("Requesting fragment for the topic " + psi); + + var url = GET_PREFIX + psi.gsub("#", "%23"); + + new Ajax.Request(url, { + "method" : "get", + "requestHeaders" : INIT_DATE, + "onSuccess" : createXHRHandler(onSuccessHandler, timeFun), + "onFailure" : createXHRHandler(onFailure, timeFun)}); + } + catch(err){ + alert("From requestFragment(): " + err); + } } \ No newline at end of file