Index: lams_tool_assessment/web/includes/javascript/assessmentoption.js
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/web/includes/javascript/assessmentoption.js,v
diff -u -r1.9 -r1.10
--- lams_tool_assessment/web/includes/javascript/assessmentoption.js 17 Jun 2011 20:08:09 -0000 1.9
+++ lams_tool_assessment/web/includes/javascript/assessmentoption.js 22 Dec 2011 22:12:45 -0000 1.10
@@ -6,7 +6,11 @@
// var removeOptionUrl = "";
// var addOptionUrl = "";
function addOption(){
- var oldCkeditorInstances = storeOldCkeditorInstances();
+ //store old InstanceIds before doing Ajax call. We need to keep record of old ones to prevent reinitializing new CKEditor two times.
+ var oldOptionIds = new Array();
+ for (var instanceId in CKEDITOR.instances){
+ oldOptionIds[instanceId] = instanceId;
+ }
var url= addOptionUrl;
var contentFolderID= $("#contentFolderID").val();
@@ -20,13 +24,11 @@
optionList: optionList
},
function(){
- reinitializeGeneralCKEditorInstances(oldCkeditorInstances);
+ reinitializeOptionEditors(oldOptionIds);
}
);
}
function removeOption(idx){
- var oldCkeditorInstances = storeOldCkeditorInstances();
-
var url= removeOptionUrl;
var contentFolderID= $("#contentFolderID").val();
prepareOptionEditorsForAjaxSubmit();
@@ -40,13 +42,11 @@
optionList: optionList
},
function(){
- reinitializeGeneralCKEditorInstances(oldCkeditorInstances);
+ reinitializeOptionEditors(null);
}
);
}
function upOption(idx){
- var oldCkeditorInstances = storeOldCkeditorInstances();
-
var url= upOptionUrl;
var contentFolderID= $("#contentFolderID").val();
prepareOptionEditorsForAjaxSubmit();
@@ -60,13 +60,11 @@
optionList: optionList
},
function(){
- reinitializeGeneralCKEditorInstances(oldCkeditorInstances);
+ reinitializeOptionEditors(null);
}
);
}
function downOption(idx){
- var oldCkeditorInstances = storeOldCkeditorInstances();
-
var url= downOptionUrl;
var contentFolderID= $("#contentFolderID").val();
prepareOptionEditorsForAjaxSubmit();
@@ -80,35 +78,31 @@
optionList: optionList
},
function(){
- reinitializeGeneralCKEditorInstances(oldCkeditorInstances);
+ reinitializeOptionEditors(null);
}
);
}
- //store references to general CKEditors before doing Ajax call
- function storeOldCkeditorInstances(oldCkeditorInstances){
- var oldCkeditorInstances = new Array();
- oldCkeditorInstances.question = CKEDITOR.instances["question"];
- oldCkeditorInstances.generalFeedback = CKEDITOR.instances["generalFeedback"];
- oldCkeditorInstances.feedbackOnCorrect = CKEDITOR.instances["feedbackOnCorrect"];
- oldCkeditorInstances.feedbackOnIncorrect = CKEDITOR.instances["feedbackOnIncorrect"];
- oldCkeditorInstances.feedbackOnCorrectOutsideForm = CKEDITOR.instances["feedbackOnCorrectOutsideForm"];
- oldCkeditorInstances.feedbackOnPartiallyCorrectOutsideForm = CKEDITOR.instances["feedbackOnPartiallyCorrectOutsideForm"];
- oldCkeditorInstances.feedbackOnIncorrectOutsideForm = CKEDITOR.instances["feedbackOnIncorrectOutsideForm"];
- return oldCkeditorInstances;
- }
-
- //reinitialize all general CKEditor after Ajax call has done
- function reinitializeGeneralCKEditorInstances(oldCkeditorInstances){
- for (var instanceId in oldCkeditorInstances){
- if (instanceId == null) continue;
- var instance = oldCkeditorInstances[instanceId];
- if (instance == null) continue;
- var initializeFunction = instance.initializeFunction;
- instance.destroy();
- instance = initializeFunction();
- instance.initializeFunction = initializeFunction;
+ //reinitialize all CKEditors responsible for options after Ajax call has done
+ function reinitializeOptionEditors(optionIds){
+ if (optionIds == null) {
+ optionIds = CKEDITOR.instances;
}
+
+ for (var instanceId in optionIds){
+ //skip general fckeditors
+ if (instanceId.match("^(optionString|optionQuestion|optionFeedback)")) {
+ if (instanceId == null) continue;
+ var instance = CKEDITOR.instances[instanceId];
+ if (instance == null) continue;
+ var initializeFunction = instance.initializeFunction;
+ CKEDITOR.remove(instance);
+ //don't initialize elements that were deleted
+ if ($("#" + instanceId).length == 0) continue;
+ instance = initializeFunction();
+ instance.initializeFunction = initializeFunction;
+ }
+ }
}
//in order to be able to use option's value, copy it from CKEditor to textarea