Fix for MDL-7086.
Some versions of IE choke if the second argument of insertBefore() is null. The code in section_class.prototype.insert_resource() wrongly assumed that the value of targetel would be null if that parameter was not passed to the function. The value is actually 'undefined' in this case. The checks that relied on comparison with null were therefore failing in IE (but worked fine in other browsers anyway). Two problems - wrong assumption in code, and IE being stupid.
This commit is contained in:
+112
-97
@@ -80,7 +80,7 @@ section_class.prototype.init_section = function(id, group, config, isDraggable)
|
||||
section_class.prototype.init_buttons = function() {
|
||||
var commandContainer = this.getEl().childNodes[2];
|
||||
|
||||
//clear all but show only button
|
||||
//clear all but show only button
|
||||
var commandContainerCount = commandContainer.childNodes.length;
|
||||
for (var i=(commandContainerCount-1); i>0; i--) {
|
||||
commandContainer.removeChild(commandContainer.childNodes[i])
|
||||
@@ -131,7 +131,7 @@ section_class.prototype.process_section = function() {
|
||||
//find/edit resources
|
||||
|
||||
this.resources_ul = this.content_td.getElementsByTagName('ul')[0];
|
||||
if (this.resources_ul == null) {
|
||||
if (!this.resources_ul) {
|
||||
this.resources_ul = document.createElement('ul');
|
||||
this.resources_ul.className='section';
|
||||
this.content_td.insertBefore(this.resources_ul, this.content_td.childNodes[2]);
|
||||
@@ -170,8 +170,9 @@ section_class.prototype.onDragDrop = function(e, id) {
|
||||
// get the drag and drop object that was targeted
|
||||
var target = YAHOO.util.DDM.getDDById(id);
|
||||
|
||||
if (this.debug)YAHOO.log("Section dropped on id="+id+" (I am "+this.getEl().id+") x="+YAHOO.util.Dom.getXY(this.getDragEl()));
|
||||
|
||||
if (this.debug) {
|
||||
YAHOO.log("Section dropped on id="+id+" (I am "+this.getEl().id+") x="+YAHOO.util.Dom.getXY(this.getDragEl()));
|
||||
}
|
||||
this.move_to_section(target);
|
||||
|
||||
//add back to resources group
|
||||
@@ -191,43 +192,47 @@ section_class.prototype.move_to_section = function(target) {
|
||||
var found = null;
|
||||
|
||||
//determine if original is above or below target and adjust loop
|
||||
var oIndex=main.get_section_index(this);
|
||||
var tIndex=main.get_section_index(target);
|
||||
|
||||
if (this.debug)YAHOO.log("original is at: "+oIndex+" target is at:"+tIndex+" of "+(sectionCount-1));
|
||||
var oIndex = main.get_section_index(this);
|
||||
var tIndex = main.get_section_index(target);
|
||||
|
||||
if (this.debug) {
|
||||
YAHOO.log("original is at: "+oIndex+" target is at:"+tIndex+" of "+(sectionCount-1));
|
||||
}
|
||||
if (oIndex < tIndex) {
|
||||
var loopCondition = 'i<sectionCount';
|
||||
var loopStart = 1;
|
||||
var loopInc = 'i++';
|
||||
var loopmodifier = 'i-1';
|
||||
var loopmodifier = 'i - 1';
|
||||
} else {
|
||||
var loopCondition = 'i>0';
|
||||
var loopStart = sectionCount-1;
|
||||
var loopCondition = 'i > 0';
|
||||
var loopStart = sectionCount - 1;
|
||||
var loopInc = 'i--';
|
||||
var loopmodifier = 'i+1';
|
||||
var loopmodifier = 'i + 1';
|
||||
}
|
||||
|
||||
//move on backend
|
||||
main.connect('post','class=section&field=move',null,'id='+this.sectionId+'&value='+(target.sectionId-this.sectionId));
|
||||
main.connect('post','class=section&field=move',null,'id='+this.sectionId+'&value='
|
||||
+(target.sectionId-this.sectionId));
|
||||
|
||||
//move on front end
|
||||
for (var i=loopStart; eval(loopCondition); eval(loopInc)) {
|
||||
|
||||
if ((main.sections[i] == this)&& !found) {
|
||||
if ((main.sections[i] == this) && !found) {
|
||||
//enounter with original node
|
||||
if (this.debug)YAHOO.log("Found Original "+main.sections[i].getEl().id);
|
||||
if (this.debug) {
|
||||
YAHOO.log("Found Original "+main.sections[i].getEl().id);
|
||||
}
|
||||
if (main.sections[i] == this) {
|
||||
found = true;
|
||||
}
|
||||
|
||||
} else if (main.sections[i] == target) {
|
||||
//encounter with target node
|
||||
if (this.debug)YAHOO.log("Found target "+main.sections[i].getEl().id);
|
||||
if (this.debug) {
|
||||
YAHOO.log("Found target "+main.sections[i].getEl().id);
|
||||
}
|
||||
main.sections[i].swap_with_section(main.sections[eval(loopmodifier)]);
|
||||
found = false;
|
||||
break;
|
||||
|
||||
} else if (found) {
|
||||
//encounter with nodes inbetween
|
||||
main.sections[i].swap_with_section(main.sections[eval(loopmodifier)]);
|
||||
@@ -246,35 +251,36 @@ section_class.prototype.swap_with_section = function(sectionIn) {
|
||||
this.changeId(targetIndex);
|
||||
sectionIn.changeId(thisIndex);
|
||||
|
||||
if (this.debug)YAHOO.log("Swapping "+this.getEl().id+" with "+sectionIn.getEl().id);
|
||||
|
||||
if (this.debug) {
|
||||
YAHOO.log("Swapping "+this.getEl().id+" with "+sectionIn.getEl().id);
|
||||
}
|
||||
YAHOO.util.DDM.swapNode(this.getEl(), sectionIn.getEl());
|
||||
}
|
||||
|
||||
section_class.prototype.toggle_hide = function(e,target,superficial) {
|
||||
if (this.hidden) {
|
||||
YAHOO.util.Dom.removeClass(this.getEl(),'hidden');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/show.gif/i,'hide.gif');
|
||||
YAHOO.util.Dom.removeClass(this.getEl(), 'hidden');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/show.gif/i, 'hide.gif');
|
||||
this.hidden = false;
|
||||
|
||||
if (!superficial) {
|
||||
main.connect('post','class=section&field=visible',null,'value=1&id='+this.sectionId);
|
||||
for (var x=0;x<this.resources.length;x++) {
|
||||
this.resources[x].toggle_hide(null,null,true,this.resources[x].hiddenStored);
|
||||
main.connect('post', 'class=section&field=visible', null, 'value=1&id='+this.sectionId);
|
||||
for (var x=0; x<this.resources.length; x++) {
|
||||
this.resources[x].toggle_hide(null, null, true, this.resources[x].hiddenStored);
|
||||
this.resources[x].hiddenStored = null;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
YAHOO.util.Dom.addClass(this.getEl(),'hidden');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/hide.gif/i,'show.gif');
|
||||
YAHOO.util.Dom.addClass(this.getEl(), 'hidden');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/hide.gif/i, 'show.gif');
|
||||
this.hidden = true;
|
||||
|
||||
if (!superficial) {
|
||||
main.connect('post','class=section&field=visible',null,'value=0&id='+this.sectionId);
|
||||
for (var x=0;x<this.resources.length;x++) {
|
||||
main.connect('post', 'class=section&field=visible', null, 'value=0&id='+this.sectionId);
|
||||
for (var x=0; x<this.resources.length; x++) {
|
||||
this.resources[x].hiddenStored = this.resources[x].hidden;
|
||||
this.resources[x].toggle_hide(null,null,true,true);
|
||||
this.resources[x].toggle_hide(null, null, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -282,10 +288,10 @@ section_class.prototype.toggle_hide = function(e,target,superficial) {
|
||||
|
||||
section_class.prototype.toggle_highlight = function() {
|
||||
if (this.highlighted) {
|
||||
YAHOO.util.Dom.removeClass(this.getEl(),'current');
|
||||
YAHOO.util.Dom.removeClass(this.getEl(), 'current');
|
||||
this.highlighted = false;
|
||||
} else {
|
||||
YAHOO.util.Dom.addClass(this.getEl(),'current');
|
||||
YAHOO.util.Dom.addClass(this.getEl(), 'current');
|
||||
this.highlighted = true;
|
||||
}
|
||||
}
|
||||
@@ -297,7 +303,7 @@ section_class.prototype.mk_marker = function() {
|
||||
} else {//if currently the marker
|
||||
main.marker = null;
|
||||
|
||||
main.connect('post','class=course&field=marker',null,'value=0');
|
||||
main.connect('post', 'class=course&field=marker', null, 'value=0');
|
||||
this.toggle_highlight();
|
||||
}
|
||||
}
|
||||
@@ -314,12 +320,12 @@ section_class.prototype.changeId = function(newId) {
|
||||
}
|
||||
|
||||
section_class.prototype.get_resource_index = function(el) {
|
||||
for (var x=0;x<this.resources.length;x++) {
|
||||
if (this.resources[x]==el) {
|
||||
for (var x=0; x<this.resources.length; x++) {
|
||||
if (this.resources[x] == el) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
YAHOO.log("Could not find resource to remove "+el.getEl().id,"error");
|
||||
YAHOO.log("Could not find resource to remove "+el.getEl().id, "error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -327,19 +333,20 @@ section_class.prototype.remove_resource = function(el) {
|
||||
var resourceCount = this.resources.length;
|
||||
|
||||
if (resourceCount == 1) {
|
||||
if (this.resources[0] == el)
|
||||
this.resources = new Array();
|
||||
if (this.resources[0] == el) {
|
||||
this.resources = new Array();
|
||||
}
|
||||
} else {
|
||||
var found = false;
|
||||
for (var i=0;i<resourceCount;i++) {
|
||||
for (var i=0; i<resourceCount; i++) {
|
||||
if (found) {
|
||||
this.resources[i-1] = this.resources[i];
|
||||
if (i==resourceCount-1) {
|
||||
this.resources = this.resources.slice(0,-1);
|
||||
this.resources[i - 1] = this.resources[i];
|
||||
if (i == resourceCount - 1) {
|
||||
this.resources = this.resources.slice(0, -1);
|
||||
resourceCount--;
|
||||
}
|
||||
this.resources[i-1].update_index(i-1);
|
||||
} else if (this.resources[i]==el) {
|
||||
this.resources[i - 1].update_index(i - 1);
|
||||
} else if (this.resources[i] == el) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
@@ -347,15 +354,18 @@ section_class.prototype.remove_resource = function(el) {
|
||||
//remove "text" nodes to keep DOM clean
|
||||
var childIndex = null;
|
||||
var childrenCount = this.resources_ul.childNodes.length;
|
||||
for (var i=0;i<childrenCount;i++)
|
||||
if (this.resources_ul.childNodes[i] == el.getEl())
|
||||
for (var i=0; i<childrenCount; i++) {
|
||||
if (this.resources_ul.childNodes[i] == el.getEl()) {
|
||||
childIndex = i;
|
||||
if (childIndex > 0 && childIndex < this.resources_ul.childNodes.length)
|
||||
this.resources_ul.removeChild(this.resources_ul.childNodes[childIndex-1]);
|
||||
YAHOO.log("removing "+el.getEl().id);
|
||||
if (el.getEl().parentNode != null)
|
||||
el.getEl().parentNode.removeChild(el.getEl());
|
||||
|
||||
}
|
||||
}
|
||||
if (childIndex > 0 && childIndex < this.resources_ul.childNodes.length) {
|
||||
this.resources_ul.removeChild(this.resources_ul.childNodes[childIndex - 1]);
|
||||
}
|
||||
YAHOO.log("Removing "+el.getEl().id);
|
||||
if (el.getEl().parentNode != null) {
|
||||
el.getEl().parentNode.removeChild(el.getEl());
|
||||
}
|
||||
this.write_sequence_list();
|
||||
}
|
||||
|
||||
@@ -366,7 +376,7 @@ section_class.prototype.insert_resource = function(el, targetel) {
|
||||
|
||||
//update in backend
|
||||
targetId = '';
|
||||
if (targetel != null) {
|
||||
if (targetel) {
|
||||
targetId = targetel.id;
|
||||
}
|
||||
|
||||
@@ -377,23 +387,23 @@ section_class.prototype.insert_resource = function(el, targetel) {
|
||||
//if inserting into a hidden resource hide
|
||||
if (this.hidden) {
|
||||
el.hiddenStored = el.hidden;
|
||||
el.toggle_hide(null,null,true,true);
|
||||
el.toggle_hide(null, null, true, true);
|
||||
} else {
|
||||
if (el.hiddenStored != null) {
|
||||
el.toggle_hide(null,null,true,el.hiddenStored);
|
||||
el.toggle_hide(null, null, true, el.hiddenStored);
|
||||
el.hiddenStored = null;
|
||||
}
|
||||
}
|
||||
//update model
|
||||
if (targetel == null) {
|
||||
if (!targetel) {
|
||||
this.resources[this.resources.length] = el;
|
||||
} else {
|
||||
for (var i=0;i<resourcecount;i++) {
|
||||
for (var i=0; i<resourcecount; i++) {
|
||||
if (found) {
|
||||
tempStore = this.resources[i];
|
||||
this.resources[i] = nextStore;
|
||||
nextStore = tempStore;
|
||||
|
||||
|
||||
if (nextStore != null)
|
||||
nextStore.update_index(i+1);
|
||||
|
||||
@@ -403,18 +413,18 @@ section_class.prototype.insert_resource = function(el, targetel) {
|
||||
this.resources[i] = el;
|
||||
resourcecount++;
|
||||
|
||||
this.resources[i].update_index(i,this.ident);
|
||||
nextStore.update_index(i+1);
|
||||
this.resources[i].update_index(i, this.ident);
|
||||
nextStore.update_index(i + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
//update on frontend
|
||||
if (targetel != null) {
|
||||
this.resources_ul.insertBefore(el.getEl(),targetel.getEl());
|
||||
this.resources_ul.insertBefore(document.createTextNode(''),targetel.getEl());
|
||||
//update on frontend
|
||||
if (targetel) {
|
||||
this.resources_ul.insertBefore(el.getEl(), targetel.getEl());
|
||||
this.resources_ul.insertBefore(document.createTextNode(' '), targetel.getEl());
|
||||
} else {
|
||||
this.resources_ul.appendChild(el.getEl());
|
||||
this.resources_ul.appendChild(document.createTextNode(" "));
|
||||
this.resources_ul.appendChild(document.createTextNode(' '));
|
||||
}
|
||||
el.parentObj = this;
|
||||
}
|
||||
@@ -422,7 +432,7 @@ section_class.prototype.insert_resource = function(el, targetel) {
|
||||
section_class.prototype.write_sequence_list = function(toReturn) {
|
||||
var listOutput = '';
|
||||
|
||||
for (var i=0;i<this.resources.length;i++) {
|
||||
for (var i=0; i<this.resources.length; i++) {
|
||||
listOutput += this.resources[i].id;
|
||||
if (i != (this.resources.length-1)) {
|
||||
listOutput += ',';
|
||||
@@ -449,20 +459,20 @@ YAHOO.extend(resource_class, YAHOO.util.DDProxy);
|
||||
resource_class.prototype.debug = true;
|
||||
|
||||
|
||||
resource_class.prototype.init_resource = function(id,group,config,parentObj) {
|
||||
resource_class.prototype.init_resource = function(id, group, config, parentObj) {
|
||||
if (!id) {
|
||||
YAHOO.log("Init resource, NO ID FOUND!",'error');
|
||||
YAHOO.log("Init resource, NO ID FOUND!", 'error');
|
||||
return;
|
||||
}
|
||||
this.is = 'resource';
|
||||
this.init(id,group,config);
|
||||
this.init(id, group, config);
|
||||
this.createFrame();
|
||||
this.isTarget = true;
|
||||
|
||||
this.id = this.getEl().id.replace(/module-/i,'');
|
||||
this.id = this.getEl().id.replace(/module-/i, '');
|
||||
|
||||
this.hidden = false;
|
||||
if (YAHOO.util.Dom.hasClass(this.getEl().getElementsByTagName('a')[0],'dimmed')) {
|
||||
if (YAHOO.util.Dom.hasClass(this.getEl().getElementsByTagName('a')[0], 'dimmed')) {
|
||||
this.hidden = true;
|
||||
}
|
||||
this.hiddenStored = null;
|
||||
@@ -482,31 +492,34 @@ resource_class.prototype.init_resource = function(id,group,config,parentObj) {
|
||||
}
|
||||
|
||||
resource_class.prototype.init_buttons = function() {
|
||||
var commandContainer = YAHOO.util.Dom.getElementsByClassName('commands','span',this.getEl())[0];
|
||||
var commandContainer = YAHOO.util.Dom.getElementsByClassName('commands', 'span', this.getEl())[0];
|
||||
if ( commandContainer == null) {
|
||||
YAHOO.log('Cannot find command container for '+this.getEl().id,'error');
|
||||
YAHOO.log('Cannot find command container for '+this.getEl().id, 'error');
|
||||
return;
|
||||
}
|
||||
this.commandContainer = commandContainer;
|
||||
|
||||
//find edit button
|
||||
var updateButton = null;
|
||||
var buttons = commandContainer.getElementsByTagName('a');
|
||||
var buttons = commandContainer.getElementsByTagName('a');
|
||||
|
||||
for (var x=0;x<buttons.length;x++) {
|
||||
for (var x=0; x<buttons.length; x++) {
|
||||
if (buttons[x].title == main.portal.strings['update']) {
|
||||
updateButton = buttons[x];
|
||||
}
|
||||
}
|
||||
|
||||
if (updateButton == null)
|
||||
YAHOO.log('Cannot find updateButton for '+this.getEl().id,'error');
|
||||
YAHOO.log('Cannot find updateButton for '+this.getEl().id, 'error');
|
||||
|
||||
commandContainer.innerHTML = '';
|
||||
|
||||
//add move-handle
|
||||
var handleRef = main.mk_button('a','/pix/i/move_2d.gif',[['style','cursor:move']],[['height','11'],['width','11'],['hspace','2'],['border','0']]);
|
||||
YAHOO.util.Dom.generateId(handleRef,'sectionHandle');
|
||||
var handleRef = main.mk_button('a', '/pix/i/move_2d.gif',
|
||||
[['style', 'cursor:move']], [['height', '11'], ['width', '11'],
|
||||
['hspace', '2'], ['border', '0']]);
|
||||
|
||||
YAHOO.util.Dom.generateId(handleRef, 'sectionHandle');
|
||||
this.handle = handleRef;
|
||||
commandContainer.appendChild(handleRef);
|
||||
this.setHandleElId(this.handle.id);
|
||||
@@ -515,61 +528,63 @@ resource_class.prototype.init_buttons = function() {
|
||||
commandContainer.appendChild(updateButton);
|
||||
|
||||
//add rest
|
||||
var button = main.mk_button('a','/pix/t/delete.gif');
|
||||
YAHOO.util.Event.addListener(button,'click',this.delete_button,this,true);
|
||||
commandContainer.appendChild(button);
|
||||
var button = main.mk_button('a', '/pix/t/delete.gif');
|
||||
YAHOO.util.Event.addListener(button, 'click', this.delete_button, this, true);
|
||||
commandContainer.appendChild(button);
|
||||
|
||||
if (this.hidden) {
|
||||
var button = main.mk_button('a','/pix/t/show.gif');
|
||||
var button = main.mk_button('a', '/pix/t/show.gif');
|
||||
} else {
|
||||
var button = main.mk_button('a','/pix/t/hide.gif');
|
||||
var button = main.mk_button('a', '/pix/t/hide.gif');
|
||||
}
|
||||
YAHOO.util.Event.addListener(button,'click',this.toggle_hide,this,true);
|
||||
commandContainer.appendChild(button);
|
||||
YAHOO.util.Event.addListener(button, 'click', this.toggle_hide, this, true);
|
||||
commandContainer.appendChild(button);
|
||||
this.viewButton = button;
|
||||
}
|
||||
|
||||
resource_class.prototype.toggle_hide = function(target,e,superficial,force) {
|
||||
resource_class.prototype.toggle_hide = function(target, e, superficial, force) {
|
||||
if (force != null) {
|
||||
if (this.debug)YAHOO.log("Resource "+this.getEl().id+" forced to "+force);
|
||||
if (this.debug) {
|
||||
YAHOO.log("Resource "+this.getEl().id+" forced to "+force);
|
||||
}
|
||||
this.hidden = !force;
|
||||
}
|
||||
|
||||
if (this.hidden) {
|
||||
YAHOO.util.Dom.removeClass(this.linkContainer,'dimmed');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/show.gif/i,'hide.gif');
|
||||
YAHOO.util.Dom.removeClass(this.linkContainer, 'dimmed');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/show.gif/i, 'hide.gif');
|
||||
this.hidden = false;
|
||||
|
||||
if (!superficial) {
|
||||
main.connect('post','class=resource&field=visible',null,'value=1&id='+this.id);
|
||||
main.connect('post', 'class=resource&field=visible', null, 'value=1&id='+this.id);
|
||||
}
|
||||
} else {
|
||||
YAHOO.util.Dom.addClass(this.linkContainer,'dimmed');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/hide.gif/i,'show.gif');
|
||||
YAHOO.util.Dom.addClass(this.linkContainer, 'dimmed');
|
||||
this.viewButton.childNodes[0].src = this.viewButton.childNodes[0].src.replace(/hide.gif/i, 'show.gif');
|
||||
this.hidden = true;
|
||||
|
||||
if (!superficial) {
|
||||
main.connect('post','class=resource&field=visible',null,'value=0&id='+this.id);
|
||||
main.connect('post', 'class=resource&field=visible', null, 'value=0&id='+this.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource_class.prototype.delete_button = function() {
|
||||
if (this.debug) {
|
||||
YAHOO.log("Deleting "+this.getEl().id+"from parent "+this.parentObj.getEl().id);
|
||||
YAHOO.log("Deleting "+this.getEl().id+" from parent "+this.parentObj.getEl().id);
|
||||
}
|
||||
if (!confirm(main.getString('deletecheck',main.getString(this.is)+" "+this.id))) {
|
||||
if (!confirm(main.getString('deletecheck', main.getString(this.is)+" "+this.id))) {
|
||||
return false;
|
||||
}
|
||||
this.getEl().parentNode.removeChild(this.getEl());
|
||||
this.parentObj.remove_resource(this);
|
||||
|
||||
main.connect('delete','class=resource&id='+this.id);
|
||||
main.connect('delete', 'class=resource&id='+this.id);
|
||||
}
|
||||
|
||||
resource_class.prototype.update_index = function(index) {
|
||||
if (this.debug) {
|
||||
YAHOO.log("update Index for resource "+this.getEl().id+"to"+index);
|
||||
YAHOO.log("Updating Index for resource "+this.getEl().id+" to "+index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user