blob: 4b690e15eb2c321d0f8ade61cf49d4483cbfab9e [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
// Chris Alderton, IBM Software Services Australia, March 2008
//------------------------------------------------------------------------------
// define the class here so we don't need to load the detail implementations
ContentPageSubSection = function() {
this.parent = contentPage;
// by default, we reuse the images from section
this.expandImage = this.parent.section.expandImage;
this.collapseImage = this.parent.section.collapseImage;
this.expandAllImage = this.parent.section.expandAllImage;
this.collapseAllImage = this.parent.section.collapseAllImage;
this.indentImage = this.parent.section.shimImage; // added by Chris Alderton
// and use the default test, override this as needed
this.expandAllText = contentPage.res.expandAllSubSectionsText;
this.collapseAllText = contentPage.res.collapseAllSubSectionsText;
// ensures that steps are expanded on display
this.collapseStepsByDefault = true;
this.firstStepSection = null;
this.stepCollapseDivs = null;
this.stepCollapseLinks = null;
};
// Creates the collapsible step section links.
ContentPageSubSection.prototype.createStepLinks = function(tagName, classSelector) {
if (document.getElementsByTagName) {
var elements = document.getElementsByTagName(tagName);
if (elements.length == 0) return;
var stepElements = new Array(elements.length);
var existStepContents = new Array(elements.length); // added by Chris Alderton
var totalLinks = 0;
var k, l, m;
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (element.className == classSelector) {
k=totalLinks; // added by Chris Alderton
stepElements[totalLinks++] = element;
}
// looking for empty steps
if(element.className == "stepContent") {
var exist = false;
var nextIndex;
do {
l = element.innerHTML.toUpperCase().indexOf("<TD>")+4;
m = element.innerHTML.toUpperCase().indexOf("</TD>");
if (element.innerHTML.substr(l,m-l)!=''?true:false)
{
exist = true;
break;
}
nextIndex = element.innerHTML.toUpperCase().indexOf("<TD>",l);
}while (nextIndex>-1);
existStepContents[k] = exist;
}
}
if (totalLinks == 0) return;
stepElements.length = totalLinks;
this.stepCollapseDivs = new Array(totalLinks);
this.stepCollapseLinks = new Array(totalLinks);
this.firstStepSection = stepElements[0];
for (var i = 0; i < stepElements.length; i++) {
var element = stepElements[i];
var siblingContainer;
if (document.createElement && (siblingContainer = document.createElement('div')) && siblingContainer.style) {
var nextSibling = element.nextSibling;
element.parentNode.insertBefore(siblingContainer, nextSibling);
var nextElement = stepElements[i + 1];
while (nextSibling != nextElement && nextSibling != null) {
var toMove = nextSibling;
nextSibling = nextSibling.nextSibling;
siblingContainer.appendChild(toMove);
}
if (this.collapseStepsByDefault) {
siblingContainer.style.display = 'none';
}
this.stepCollapseDivs[i] = siblingContainer;
// extra parameter added - existStepContents[i]
this.createCollapsibleStepSection(element, siblingContainer, i, existStepContents[i]);
}
else {
return;
}
}
this.createExpandCollapseAllStepsLinks(stepElements[0]);
}
};
// Creates a collapsible step section.
// extra parameter added - content
ContentPageSubSection.prototype.createCollapsibleStepSection = function(element, siblingContainer, index, existContent) {
if (document.createElement) {
var span = document.createElement('span');
if(existContent) {
var link = document.createElement('a');
link.collapseDiv = siblingContainer;
link.href = '';
var image = document.createElement('img');
if (this.collapseStepsByDefault) {
image.src = this.expandImage;
image.alt = contentPage.res.expandText;
image.title = contentPage.res.expandText;
}
else {
image.src = this.collapseImage;
image.alt = contentPage.res.collapseText;
image.title = contentPage.res.collapseText;
}
image.width = '17';
image.height = '15';
image.border = '0';
image.align = 'absmiddle';
link.appendChild(image);
var self = this;
link.onclick = /*this.expandCollapseStepSection;*/function(evt) {
if (this.collapseDiv.style.display == '') {
this.parentNode.parentNode.nextSibling.style.display = 'none';
this.firstChild.src = self.expandImage;
this.firstChild.alt = contentPage.res.expandText;
this.firstChild.title = contentPage.res.expandText;
}
else {
this.parentNode.parentNode.nextSibling.style.display = '';
this.firstChild.src = self.collapseImage;
this.firstChild.alt = contentPage.res.collapseText;
this.firstChild.title = contentPage.res.collapseText;
}
if (evt && evt.preventDefault) {
evt.preventDefault();
}
return false;
};
}
else {// removes expand/collapse button where step has not content
var link = document.createElement('a');
var image = document.createElement('img');
image.src = this.indentImage;
image.alt = '';
image.title = '';
image.width = '17';
image.height = '15';
image.border = '0';
image.align = 'absmiddle';
link.appendChild(image);
}
this.stepCollapseLinks[index] = link;
span.appendChild(link);
element.insertBefore(span, element.firstChild);
element.appendChild(document.createTextNode(String.fromCharCode(160)));
element.appendChild(document.createTextNode(String.fromCharCode(160)));
}
};
// Creates the Expand All and Collapse All Steps links.
ContentPageSubSection.prototype.createExpandCollapseAllStepsLinks = function(firstElement) {
var div;
var self = this;
if (document.createElement && (div = document.createElement('div'))) {
div.className = 'expandCollapseLink';
div.align = 'right';
var image = document.createElement('img');
image.src = this.expandAllImage;
image.alt = this.expandAllText
image.title = this.expandAllText
image.width = '16';
image.height = '16';
image.border = '0';
image.align = 'absmiddle';
var link = document.createElement('a');
link.className = 'expandCollapseLink';
link.href = '';
link.appendChild(image);
link.onclick = /*this.expandAllSteps;*/function(evt) {
for (var i = 0; i < self.stepCollapseDivs.length; i++) {
self.stepCollapseDivs[i].style.display = '';
//stops collapse button being added where step has no content expandAll button is clicked
if (self.stepCollapseLinks[i].firstChild.title != '') {
self.stepCollapseLinks[i].firstChild.src = self.collapseImage;
}
}
if (evt && evt.preventDefault) {
evt.preventDefault();
}
return false;
};
var span = document.createElement('span');
span.className = 'expandCollapseText';
span.appendChild(document.createTextNode(this.expandAllText));
link.appendChild(span);
div.appendChild(link);
div.appendChild(document.createTextNode(String.fromCharCode(160)));
image = document.createElement('img');
image.src = this.collapseAllImage;
image.alt = this.collapseAllText
image.title = this.collapseAllText
image.width = '16';
image.height = '16';
image.border = '0';
image.align = 'absmiddle';
link = document.createElement('a');
link.className = 'expandCollapseLink';
link.href = '';
link.appendChild(image);
link.onclick = /*this.collapseAllSteps;*/function(evt) {
for (var i = 0; i < self.stepCollapseDivs.length; i++) {
self.stepCollapseDivs[i].style.display = 'none';
//stops expand button being added where step has no content when collapseAll button is clicked
if (self.stepCollapseLinks[i].firstChild.title != '') {
self.stepCollapseLinks[i].firstChild.src = self.expandImage;
}
}
if (evt && evt.preventDefault) {
evt.preventDefault();
}
return false;
};
span = document.createElement('span');
span.className = 'expandCollapseText';
span.appendChild(document.createTextNode(this.collapseAllText));
link.appendChild(span);
div.appendChild(link);
if (this.firstStepSection) {
this.firstStepSection.parentNode.insertBefore(div, this.firstStepSection);
}
}
};