summaryrefslogtreecommitdiffstats
path: root/tools/Sandcastle/Presentation/vs2005/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'tools/Sandcastle/Presentation/vs2005/Scripts')
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js157
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/CommonUtilities.js336
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/Dropdown.js89
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/EventUtilities.js23
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/SplitScreen.js29
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/script_feedBack.js116
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/script_manifold.js1150
7 files changed, 1900 insertions, 0 deletions
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js b/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js
new file mode 100644
index 0000000..de8348f
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js
@@ -0,0 +1,157 @@
+
+function CheckboxMenu(id, data, persistkeys, globals)
+{
+ this.id = id;
+ this.menuCheckboxIds = new Array();
+ this.data = data;
+ this.count = 0;
+
+ var element = document.getElementById(id);
+ var checkboxNodes = element.getElementsByTagName("input");
+
+ for(var checkboxCount=0; checkboxCount < checkboxNodes.length; checkboxCount++)
+ {
+ var checkboxId = checkboxNodes[checkboxCount].getAttribute('id');
+ var checkboxData = checkboxNodes[checkboxCount].getAttribute('data');
+ var dataSplits = checkboxData.split(',');
+ var defaultValue = checkboxNodes[checkboxCount].getAttribute('value');
+ if (checkboxData != null && checkboxData.indexOf("persist") != -1)
+ persistkeys.push(checkboxId);
+
+ this.menuCheckboxIds[dataSplits[0]] = checkboxId;
+
+ // try to get the value for this checkbox id from globals
+ var persistedValue = (globals == null) ? null : globals.VariableExists(checkboxId) ? globals.VariableValue(checkboxId) : null;
+ var currentValue = (persistedValue != null) ? persistedValue : (defaultValue == null) ? "on" : defaultValue;
+
+ // set the checkbox's check state
+ this.SetCheckState(checkboxId, currentValue);
+
+ this.count++;
+ }
+}
+
+CheckboxMenu.prototype.SetCheckState=function(id, value)
+{
+ var checkbox = document.getElementById(id);
+ if(checkbox != null)
+ {
+ checkbox.checked = (value == "on") ? true : false;
+ }
+
+ // set the value for the checkbox id in the data array
+ this.data[id] = value;
+}
+
+CheckboxMenu.prototype.GetCheckState=function(id)
+{
+ var checkbox = document.getElementById(id);
+ if(checkbox != null)
+ return checkbox.checked;
+ return false;
+}
+
+CheckboxMenu.prototype.ToggleCheckState=function(id)
+{
+ // at least one checkbox must always be checked
+ var checkedCount = this.GetCheckedCount();
+
+ if(this.data[id] == "on" && checkedCount > 1)
+ this.SetCheckState(id, "off");
+ else
+ this.SetCheckState(id, "on");
+}
+
+// returns the checkbox id associated with a key
+CheckboxMenu.prototype.GetCheckboxId=function(key)
+{
+ return this.menuCheckboxIds[key];
+}
+
+// returns the array of checkbox ids
+CheckboxMenu.prototype.GetCheckboxIds=function()
+{
+ return this.menuCheckboxIds;
+}
+
+// returns the @data attribute of the checkbox element
+CheckboxMenu.prototype.GetCheckboxData=function(checkboxId)
+{
+ var checkbox = document.getElementById(checkboxId);
+ if (checkbox == null) return "";
+ return checkbox.getAttribute('data');
+}
+
+CheckboxMenu.prototype.GetDropdownLabelId=function()
+{
+ var checkboxCount = this.count;
+ var checkedCount = this.GetCheckedCount();
+ var idPrefix = this.id;
+
+ // if all boxes checked, use showall label
+ if (checkedCount == checkboxCount)
+ return idPrefix.concat("AllLabel");
+
+ // if only one is checked, use label appropriate for that one checkbox
+ if (checkedCount == 1)
+ {
+ for(var key in this.menuCheckboxIds)
+ {
+ if (this.data[this.menuCheckboxIds[key]] == "on")
+ {
+ return idPrefix.concat(key,'Label');
+ }
+ }
+ }
+
+ // if multiple or zero checked, use multiple label
+ return idPrefix.concat("MultipleLabel");
+}
+
+CheckboxMenu.prototype.GetCheckedCount=function()
+{
+ var count = 0;
+ for(var key in this.menuCheckboxIds)
+ {
+ if (this.data[this.menuCheckboxIds[key]] == "on")
+ count++;
+ }
+ return (count);
+}
+
+// returns an array containing the ids of the checkboxes that are checked
+CheckboxMenu.prototype.GetCheckedIds=function()
+{
+ var idArray = new Array();
+ for(var key in this.menuCheckboxIds)
+ {
+ if (this.data[this.menuCheckboxIds[key]] == "on")
+ idArray.push(this.menuCheckboxIds[key]);
+ }
+ return idArray;
+}
+
+CheckboxMenu.prototype.GetGroupCheckedCount=function(checkboxGroup)
+{
+ var count = 0;
+ for(var i = 0; i < checkboxGroup.length; i++)
+ {
+ if (this.data[checkboxGroup[i]] == "on")
+ count++;
+ }
+ return (count);
+}
+
+CheckboxMenu.prototype.ToggleGroupCheckState=function(id, checkboxGroup)
+{
+ // at least one checkbox must always be checked
+ var checkedCount = this.GetGroupCheckedCount(checkboxGroup);
+
+ // if the group has multiple checkboxes, one must always be checked; so toggle to "off" only if more than one currently checked
+ // if the group has only one checkbox, it's okay to toggle it on/off
+ if(this.data[id] == "on" && (checkedCount > 1 || checkboxGroup.length == 1))
+ this.SetCheckState(id, "off");
+ else
+ this.SetCheckState(id, "on");
+}
+
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/CommonUtilities.js b/tools/Sandcastle/Presentation/vs2005/Scripts/CommonUtilities.js
new file mode 100644
index 0000000..fa3a3d9
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/CommonUtilities.js
@@ -0,0 +1,336 @@
+//function codeBlockHandler(id, data, value)
+function codeBlockHandler()
+{
+ // handle groups of snippets to make sure at least one from the group is always shown
+ HandleSnippetGroups();
+
+ // handle any remaining snippets that aren't in groups
+ var spanElements = document.getElementsByTagName("span");
+ for(var i = 0; i < spanElements.length; ++i)
+ {
+ var devlang = spanElements[i].getAttribute("codeLanguage");
+ if (devlang == null) continue;
+
+ if (HasSnippetGroupAncestor(spanElements[i])) continue;
+
+ var checkboxId = GetDevlangCheckboxId(devlang);
+ if (checkboxId != null && checkboxId != "")
+ {
+ if (docSettings[checkboxId] == "on")
+ spanElements[i].style.display = "";
+ else
+ spanElements[i].style.display = "none";
+ }
+ }
+}
+
+function HasSnippetGroupAncestor(object)
+{
+ var parent = object.parentElement;
+ if (parent == null) return false;
+
+ var className = parent.className;
+ if (className != null && className == "snippetgroup")
+ return true
+
+ return HasSnippetGroupAncestor(parent);
+}
+
+function HandleSnippetGroups()
+{
+ var divs = document.getElementsByTagName("DIV");
+ var divclass;
+ for (var i = 0; i < divs.length; i++)
+ {
+ divclass = divs[i].className;
+ if (divclass == null || divclass != "snippetgroup") continue;
+
+ // if all snippets in this group would be hidden by filtering display them all anyhow
+ var unfilteredCount = GetUnfilteredSnippetCount(divs[i]);
+
+ var spanElements = divs[i].getElementsByTagName("span");
+ for(var j = 0; j < spanElements.length; ++j)
+ {
+ var devlang = spanElements[j].getAttribute("codeLanguage");
+ if (devlang == null) continue;
+
+ var checkboxId = GetDevlangCheckboxId(devlang);
+
+ // for filtered devlangs, determine whether they should be shown/hidden
+ if (checkboxId != null && checkboxId != "")
+ {
+ if (unfilteredCount == 0 || docSettings[checkboxId] == "on")
+ spanElements[j].style.display = "";
+ else
+ spanElements[j].style.display = "none";
+ }
+ }
+ }
+}
+
+function GetUnfilteredSnippetCount(group)
+{
+ var count = 0;
+ var spanElements = group.getElementsByTagName("span");
+ for(var i = 0; i < spanElements.length; ++i)
+ {
+ var devlang = spanElements[i].getAttribute("codeLanguage");
+ var checkboxId = GetDevlangCheckboxId(devlang);
+ if (checkboxId != null && checkboxId != "")
+ {
+ if (docSettings[checkboxId] == "on")
+ count++;
+ }
+ }
+ return count;
+}
+
+function GetDevlangCheckboxId(devlang)
+{
+ switch (devlang)
+ {
+ case "VisualBasic":
+ case "VisualBasicDeclaration":
+ case "VisualBasicUsage":
+ return devlangsMenu.GetCheckboxId("VisualBasic");
+ case "CSharp":
+ return devlangsMenu.GetCheckboxId("CSharp");
+ case "ManagedCPlusPlus":
+ return devlangsMenu.GetCheckboxId("ManagedCPlusPlus");
+ case "JScript":
+ return devlangsMenu.GetCheckboxId("JScript");
+ case "JSharp":
+ return devlangsMenu.GetCheckboxId("JSharp");
+ case "JavaScript":
+ return devlangsMenu.GetCheckboxId("JavaScript");
+ default:
+ return "";
+ }
+}
+
+// update stylesheet display settings for spans to show according to user's devlang preference
+function styleSheetHandler(oneDevlang)
+{
+ var devlang = (oneDevlang != "") ? oneDevlang : GetDevlangPreference();
+
+ var sd = getStyleDictionary();
+
+ if (devlang == 'cs') {
+ sd['span.cs'].display = 'inline';
+ sd['span.vb'].display = 'none';
+ sd['span.cpp'].display = 'none';
+ sd['span.nu'].display = 'none';
+ } else if (devlang == 'vb') {
+ sd['span.cs'].display = 'none';
+ sd['span.vb'].display = 'inline';
+ sd['span.cpp'].display = 'none';
+ sd['span.nu'].display = 'none';
+ } else if (devlang == 'cpp') {
+ sd['span.cs'].display = 'none';
+ sd['span.vb'].display = 'none';
+ sd['span.cpp'].display = 'inline';
+ sd['span.nu'].display = 'none';
+ } else if (devlang == 'nu') {
+ sd['span.cs'].display = 'none';
+ sd['span.vb'].display = 'none';
+ sd['span.cpp'].display = 'none';
+ sd['span.nu'].display = 'inline';
+ }
+}
+
+function getStyleDictionary() {
+ var styleDictionary = new Array();
+
+ // iterate through stylesheets
+ var sheets = document.styleSheets;
+
+ for(var i=0; i<sheets.length;i++) {
+ var sheet = sheets[i];
+
+ // Ignore sheets at ms-help Urls
+ if (sheet.href.substr(0,8) == 'ms-help:') continue;
+
+ // get sheet rules
+ var rules = sheet.cssRules;
+
+ if (rules == null) rules = sheet.rules;
+
+ // iterate through rules
+ for(j=0; j<rules.length; j++) {
+ var rule = rules[j];
+
+ // Ignore ones that aren't defined
+ if(rule.selectorText == null)
+ continue;
+
+ // add rule to dictionary
+ styleDictionary[rule.selectorText.toLowerCase()] = rule.style;
+ }
+ }
+
+ return(styleDictionary);
+}
+
+function GetDevlangPreference()
+{
+ var devlangCheckboxIds = devlangsMenu.GetCheckboxIds();
+ var checkedCount = 0;
+ var devlang;
+ for (var key in devlangCheckboxIds)
+ {
+ if (docSettings[devlangCheckboxIds[key]] == "on")
+ {
+ checkedCount++;
+ checkboxData = devlangsMenu.GetCheckboxData(devlangCheckboxIds[key]);
+ var dataSplits = checkboxData.split(',');
+ if (dataSplits.length > 1)
+ devlang = dataSplits[1];
+ }
+ }
+ return (checkedCount == 1 ? devlang : "nu");
+}
+
+
+
+function memberlistHandler()
+{
+ // get all the <tr> nodes in the document
+ var allRows = document.getElementsByTagName("tr");
+ var i;
+
+ for(i = 0; i < allRows.length; ++i)
+ {
+ var memberdata = allRows[i].getAttribute("data");
+ if (memberdata != null)
+ {
+ if ((ShowBasedOnInheritance(memberdata) == false) ||
+ (ShowBasedOnVisibility(memberdata) == false) ||
+ (ShowBasedOnFramework(memberdata) == false) )
+ allRows[i].style.display = "none";
+ else
+ allRows[i].style.display = "";
+ }
+ }
+
+ ShowHideFrameworkImages();
+ ShowHideFrameworkSpans();
+}
+
+function ShowHideFrameworkImages()
+{
+ // show/hide img nodes for filtered framework icons
+ // get all the <img> nodes in the document
+ var allImgs = document.getElementsByTagName("img");
+
+ for(var i = 0; i < allImgs.length; i++)
+ {
+ var imgdata = allImgs[i].getAttribute("data");
+ if (imgdata != null)
+ {
+ var checkboxId = imgdata + "Checkbox";
+ if (docSettings[checkboxId] != "on")
+ {
+ allImgs[i].style.display = "none";
+ }
+ else
+ allImgs[i].style.display = "";
+ }
+ }
+}
+
+function ShowHideFrameworkSpans()
+{
+ // show/hide img nodes for filtered framework icons
+ // get all the <img> nodes in the document
+ var allImgs = document.getElementsByTagName("span");
+
+ for(var i = 0; i < allImgs.length; i++)
+ {
+ var imgdata = allImgs[i].getAttribute("data");
+ if (imgdata != null)
+ {
+ var checkboxId = imgdata + "Checkbox";
+ if (docSettings[checkboxId] != "on")
+ {
+ allImgs[i].style.display = "none";
+ }
+ else
+ allImgs[i].style.display = "";
+ }
+ }
+}
+
+function ShowBasedOnVisibility(memberdata)
+{
+ var isPublic = (memberdata.indexOf("public") != -1);
+ var isProtected = (memberdata.indexOf("protected") != -1);
+ var isPrivate = (memberdata.indexOf("private") != -1);
+ var isExplicitII = (memberdata.indexOf("explicit") != -1);
+
+ // if the public checkbox doesn't exist, default to showPublic == true
+ var publicCheck = docSettings["PublicCheckbox"];
+ var showPublic = (publicCheck == null) ? true : (publicCheck == "on");
+
+ // if the protected checkbox doesn't exist, default to showProtected == true
+ var protectedCheck = docSettings["ProtectedCheckbox"];
+ var showProtected = (protectedCheck == null) ? true : (protectedCheck == "on");
+
+ if ( (showProtected && isProtected) || (showPublic && isPublic) || isExplicitII || isPrivate)
+ return true;
+
+ return false;
+}
+
+function ShowBasedOnInheritance(memberdata)
+{
+ var isInherited = (memberdata.indexOf("inherited") != -1);
+ var isDeclared = (memberdata.indexOf("declared") != -1);
+
+ // if the inherited checkbox doesn't exist, default to showInherited == true
+ var inheritedCheck = docSettings["InheritedCheckbox"];
+ var showInherited = (inheritedCheck == null) ? true : (inheritedCheck == "on");
+
+ // if the declared checkbox doesn't exist, default to showDeclared == true
+ var declaredCheck = docSettings["DeclaredCheckbox"];
+ var showDeclared = (declaredCheck == null) ? true : (declaredCheck == "on");
+
+ if ( (showInherited && isInherited) || (showDeclared && isDeclared) )
+ return true;
+
+ return false;
+}
+
+function ShowBasedOnFramework(memberdata)
+{
+ var isNetfw = (memberdata.indexOf("notNetfw") == -1);
+ var isNetcfw = (memberdata.indexOf("netcfw") != -1);
+ var isXnafw = (memberdata.indexOf("xnafw") != -1);
+
+ var netfwCheck = docSettings["netfwCheckbox"];
+ var netcfwCheck = docSettings["netcfwCheckbox"];
+ var xnafwCheck = docSettings["xnafwCheckbox"];
+
+ // if all the checkboxes are null, it means we have no framework filter; so return true to show member by default
+ if (netfwCheck == null && netcfwCheck == null && xnafwCheck == null)
+ return true;
+
+ var showNetfw = (netfwCheck == "on");
+ var showNetcfw = (netcfwCheck == "on");
+ var showXnafw = (xnafwCheck == "on");
+
+ if ( (isNetfw && showNetfw) || (isNetcfw && showNetcfw) || (isXnafw && showXnafw) )
+ return true;
+
+ return false;
+}
+
+
+function SetDropdownMenuLabel(menu, dropdown)
+{
+ var dropdownLabelId = menu.GetDropdownLabelId();
+ dropdown.SetActivatorLabel(dropdownLabelId);
+ for (var i = 0; i < dropdowns.length; i++)
+ {
+ dropdowns[i].reposition();
+ }
+}
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/Dropdown.js b/tools/Sandcastle/Presentation/vs2005/Scripts/Dropdown.js
new file mode 100644
index 0000000..aa3d6f4
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/Dropdown.js
@@ -0,0 +1,89 @@
+
+// Dropdown menu control
+
+function Dropdown(activatorId, dropdownId) {
+
+ // store activator and dropdown elements
+ this.activator = document.getElementById(activatorId);
+ this.dropdown = document.getElementById(dropdownId);
+ this.activatorImage = document.getElementById(activatorId + "Image");
+
+ // wire up show/hide events
+ registerEventHandler(this.activator,'mouseover', getInstanceDelegate(this, "show"));
+ registerEventHandler(this.activator,'mouseout', getInstanceDelegate(this, "requestHide"));
+ registerEventHandler(this.dropdown,'mouseover', getInstanceDelegate(this, "show"));
+ registerEventHandler(this.dropdown,'mouseout', getInstanceDelegate(this, "requestHide"));
+
+ // fix visibility and position
+ this.dropdown.style.visibility = 'hidden';
+ this.dropdown.style.position = 'absolute';
+ this.reposition(null);
+
+ // wire up repositioning event
+ registerEventHandler(window, 'resize', getInstanceDelegate(this, "reposition"));
+
+
+}
+
+Dropdown.prototype.show = function(e) {
+ clearTimeout(this.timer);
+ this.dropdown.style.visibility = 'visible';
+ if (this.activatorImage != null)
+ this.activatorImage.src = dropDownHoverImage.src;
+ if (this.activator != null)
+ this.activator.className = "filterOnHover";
+}
+
+Dropdown.prototype.hide = function(e) {
+ this.dropdown.style.visibility = 'hidden';
+ if (this.activatorImage != null)
+ this.activatorImage.src = dropDownImage.src;
+ if (this.activator != null)
+ this.activator.className = "filter";
+}
+
+Dropdown.prototype.requestHide = function(e) {
+ this.timer = setTimeout( getInstanceDelegate(this, "hide"), 250);
+}
+
+Dropdown.prototype.reposition = function(e) {
+
+ // get position of activator
+ var offsetLeft = 0;
+ var offsetTop = 0;
+ var offsetElement = this.activator;
+
+ while (offsetElement) {
+ offsetLeft += offsetElement.offsetLeft;
+ offsetTop += offsetElement.offsetTop;
+ offsetElement = offsetElement.offsetParent;
+ }
+
+ // set position of dropdown relative to it
+ this.dropdown.style.left = offsetLeft;
+ this.dropdown.style.top = offsetTop + this.activator.offsetHeight;
+}
+
+Dropdown.prototype.SetActivatorLabel = function(labelId)
+{
+ // get the children of the activator node, which includes the label nodes
+ var labelNodes = this.activator.childNodes;
+
+
+ for(var labelCount=0; labelCount < labelNodes.length; labelCount++)
+ {
+ if(labelNodes[labelCount].tagName == 'LABEL')
+ {
+ var labelNodeId = labelNodes[labelCount].getAttribute('id');
+ if (labelNodeId == labelId)
+ {
+ labelNodes[labelCount].style.display = "inline";
+ }
+ else
+ {
+ labelNodes[labelCount].style.display = "none";
+ }
+ }
+ }
+}
+ \ No newline at end of file
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/EventUtilities.js b/tools/Sandcastle/Presentation/vs2005/Scripts/EventUtilities.js
new file mode 100644
index 0000000..f3536f5
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/EventUtilities.js
@@ -0,0 +1,23 @@
+
+ // attach a handler to a particular event on an element
+ // in a browser-independent way
+ function registerEventHandler (element, event, handler) {
+ if (element.attachEvent) {
+ // MS registration model
+ element.attachEvent('on' + event, handler);
+ } else if (element.addEventListener) {
+ // NN (W4C) regisration model
+ element.addEventListener(event, handler, false);
+ } else {
+ // old regisration model as fall-back
+ element[event] = handler;
+ }
+ }
+
+ // get a delegate that refers to an instance method
+ function getInstanceDelegate (obj, methodName) {
+ return( function(e) {
+ e = e || window.event;
+ return obj[methodName](e);
+ } );
+ }
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/SplitScreen.js b/tools/Sandcastle/Presentation/vs2005/Scripts/SplitScreen.js
new file mode 100644
index 0000000..1240154
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/SplitScreen.js
@@ -0,0 +1,29 @@
+
+ function SplitScreen (nonScrollingRegionId, scrollingRegionId) {
+
+ // store references to the two regions
+ this.nonScrollingRegion = document.getElementById(nonScrollingRegionId);
+ this.scrollingRegion = document.getElementById(scrollingRegionId);
+
+ // set the scrolling settings
+ document.body.style.margin = "0px";
+ document.body.style.overflow = "hidden";
+ this.scrollingRegion.style.overflow = "auto";
+
+ // fix the size of the scrolling region
+ this.resize(null);
+
+ // add an event handler to resize the scrolling region when the window is resized
+ registerEventHandler(window, 'resize', getInstanceDelegate(this, "resize"));
+
+ }
+
+ SplitScreen.prototype.resize = function(e) {
+ var height = document.body.clientHeight - this.nonScrollingRegion.offsetHeight;
+ if (height > 0) {
+ this.scrollingRegion.style.height = height;
+ } else {
+ this.scrollingRegion.style.height = 0;
+ }
+ this.scrollingRegion.style.width = document.body.clientWidth;
+ }
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/script_feedBack.js b/tools/Sandcastle/Presentation/vs2005/Scripts/script_feedBack.js
new file mode 100644
index 0000000..6f4b750
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/script_feedBack.js
@@ -0,0 +1,116 @@
+//Default FeedBack Values
+var ratings = 3;
+var title = document.title;
+var URL = location.href.replace(location.hash,"");
+var version = 2007;
+
+/*************************************************************************
+ * Methods ********************************************************
+ *************************************************************************/
+
+function DeliveryType()
+{
+ if (URL.indexOf("ms-help://")!=-1) {return("h");}
+ else if (URL.indexOf(".chm::/")!=-1) {return("c");}
+ else if (URL.indexOf("http://")!=-1) {return("w");}
+ else if (URL.indexOf("file:")!=-1) {return("f");}
+ else return("0");
+}
+
+function DeliverableValue(deliverable)
+{
+ if (URL.indexOf("ms-help://")!=-1)
+ {
+ delvalue = location.href.slice(0,location.href.lastIndexOf("/html/"));
+ delvalue = delvalue.slice(delvalue.lastIndexOf("/")+1);
+ return delvalue;
+ }
+ else return(deliverable);
+}
+
+function URLValue()
+{
+ if (URL.indexOf(".chm::")!=-1)
+ {
+ a = URL;
+ while (a.indexOf("\\") < a.indexOf(".chm::") || a.indexOf("//") > a.indexOf(".chm::"))
+ {
+ if (a.indexOf("\\")==-1)
+ {
+ break;
+ }
+ a = a.substring(a.indexOf("\\")+1,a.length);
+ }
+ return("ms-its:"+a)
+ }
+ else if (URL.indexOf("file:///")!=-1)
+ {
+ a = URL;
+
+ b = a.substring(a.lastIndexOf("html")+5,a.length);
+ return("file:///"+b);
+ }
+ else return(URL);
+}
+
+function GetLanguage()
+{
+ var langauge;
+ if(navigator.userAgent.indexOf("Firefox")!=-1)
+ {
+ var index = navigator.userAgent.indexOf('(');
+ var string = navigator.userAgent.substring(navigator.userAgent.indexOf('('), navigator.userAgent.length);
+ var splitString = string.split(';');
+ language = splitString[3].substring(1, splitString[3].length);
+ }
+ else language = navigator.systemLanguage;
+ return(language);
+}
+
+
+//---Gets topic rating.---
+function GetRating()
+{
+
+ sRating = "0";
+ for(var x = 0;x < 5;x++)
+ {
+ if(document.formRating) {
+ if(document.formRating.fbRating[x].checked) {sRating = x + 1;}}
+ else return sRating;
+ }
+ return sRating;
+}
+
+function SubmitFeedback(alias, product, deliverable, productVersion, documentationVersion, defaultBody)
+{
+ var subject = title
+ + " ("
+ + "/1:"
+ + product
+ + "/2:"
+ + productVersion
+ + "/3:"
+ + documentationVersion
+ + "/4:"
+ + DeliverableValue(deliverable)
+ + "/5:"
+ + URLValue()
+ + "/6:"
+ + GetRating()
+ + "/7:"
+ + DeliveryType()
+ + "/8:"
+ + GetLanguage()
+ + "/9:"
+ + version
+ + ")";
+
+ location.href = "mailto:" + alias + "?subject=" + subject
+ + "&body=" + defaultBody;
+}
+
+function AltFeedback(src, title) {
+ src.title=title;
+ return;
+ }
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/script_manifold.js b/tools/Sandcastle/Presentation/vs2005/Scripts/script_manifold.js
new file mode 100644
index 0000000..91aa6df
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/script_manifold.js
@@ -0,0 +1,1150 @@
+window.onload=LoadPage;
+window.onunload=Window_Unload;
+//window.onresize=ResizeWindow;
+window.onbeforeprint = set_to_print;
+window.onafterprint = reset_form;
+
+var scrollPos = 0;
+
+var inheritedMembers;
+var protectedMembers;
+var netcfMembersOnly;
+var netXnaMembersOnly;
+
+// Initialize array of section states
+
+var sectionStates = new Array();
+var sectionStatesInitialized = false;
+
+//Hide sample source in select element
+function HideSelect()
+{
+ var selectTags = document.getElementsByTagName("SELECT");
+ var spanEles = document.getElementsByTagName("span");
+ var i = 10;
+ var m;
+
+ if (selectTags.length != null || selectTags.length >0)
+ {
+ for (n=0; n<selectTags.length; n++)
+ {
+ var lan = selectTags(n).getAttribute("id").substr("10");
+ //hide the first select that is on
+ switch (lan.toLowerCase())
+ {
+ case "visualbasic":
+ //alert(lan);
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "VisualBasic" && spanEles[m].style.display != "none" && n <i)
+ i = n;
+ }
+ break;
+ case "visualbasicdeclaration":
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "VisualBasicDeclaration" && spanEles[m].style.display != "none" && n < i)
+ i = n;
+ }
+ break;
+ case "visualbasicusage":
+ //alert(lan);
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "VisualBasicUsage" && spanEles[m].style.display != "none" && n <i)
+ i = n;
+ }
+ break;
+ case "csharp":
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "CSharp" && spanEles[m].style.display != "none" && n < i)
+ i = n;
+ }
+ break;
+ case "managedcplusplus":
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "ManagedCPlusPlus" && spanEles[m].style.display != "none" && n < i)
+ i = n;
+ }
+ break;
+ case "jsharp":
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "JSharp" && spanEles[m].style.display != "none" && n < i)
+ i = n;
+ }
+ break;
+ case "jscript":
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "JScript" && spanEles[m].style.display != "none" && n < i)
+ i = n;
+ }
+ break;
+ case "xaml":
+ //alert(lan);
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "XAML" && spanEles[m].style.display != "none" && n <i)
+ i = n;
+ }
+ break;
+ case "javascript":
+ //alert(lan);
+ for (m=0; m<spanEles.length; m++)
+ {
+ if (spanEles[m].getAttribute("codeLanguage") == "JavaScript" && spanEles[m].style.display != "none" && n <i)
+ i = n;
+ }
+ break;
+ }
+ }
+ if (i != 10)
+ selectTags(i).style.visibility = "hidden";
+ }
+ else{ alert("Not found!");}
+}
+
+function UnHideSelect()
+{
+ var selectTags = document.getElementsByTagName("SELECT");
+ var n;
+
+ //un-hide all the select sections
+ if (selectTags.length != null || selectTags.length >0)
+ {
+ for (n=0; n<selectTags.length; n++)
+ selectTags(n).style.visibility = "visible";
+ }
+}
+
+function InitSectionStates()
+{
+ sectionStatesInitialized = true;
+ if (globals == null) globals = GetGlobals();
+ // SectionStates has the format:
+ //
+ // firstSectionId:state;secondSectionId:state;thirdSectionId:state; ... ;lastSectionId:state
+ //
+ // where state is either "e" (expanded) or "c" (collapsed)
+
+ // get the SectionStates from the previous topics
+ var states = Load("SectionStates");
+
+ var start = 0;
+ var end;
+ var section;
+ var state;
+ var allCollapsed = false;
+ // copy the previous section states to the sectionStates array for the current page
+ if (states != null && states != "")
+ {
+ allCollapsed = true;
+ while (start < states.length)
+ {
+ end = states.indexOf(":", start);
+
+ section = states.substring(start, end);
+
+ start = end + 1;
+ end = states.indexOf(";", start);
+ if (end == -1) end = states.length;
+ state = states.substring(start, end);
+ sectionStates[section] = state;
+ allCollapsed = allCollapsed && (state == "c");
+ start = end + 1;
+ }
+ }
+
+ // now set the state for any section ids in the current document that weren't in previous
+ var imgElements = document.getElementsByName("toggleSwitch");
+ var i;
+ for (i = 0; i < imgElements.length; ++i)
+ sectionStates[imgElements[i].id] = GetInitialSectionState(imgElements[i].id, allCollapsed);
+}
+
+function GetInitialSectionState(itemId, allCollapsed)
+{
+ // if the global state is "allCollapsed", set all section states to collapsed
+ if (allCollapsed) return "c";
+
+ // generic <section> node ids begin with "sectionToggle", so the same id can refer to different sections in different topics
+ // we don't want to persist their state; set it to expanded
+ if (itemId.indexOf("sectionToggle", 0) == 0) return "e";
+
+ // the default state for new section ids is expanded
+ if (sectionStates[itemId] == null) return "e";
+
+ // otherwise, persist the passed in state
+ return sectionStates[itemId];
+}
+
+var noReentry = false;
+
+function OnLoadImage(eventObj)
+{
+ if (noReentry) return;
+
+ if (!sectionStatesInitialized)
+ InitSectionStates();
+
+ var elem;
+ if(document.all) elem = eventObj.srcElement;
+ else elem = eventObj.target;
+
+ if ((sectionStates[elem.id] == "e"))
+ ExpandSection(elem);
+ else
+ CollapseSection(elem);
+}
+
+/*
+**********
+********** Begin
+**********
+*/
+
+var docSettings;
+
+function LoadPage()
+{
+ // If not initialized, grab the DTE.Globals object
+ if (globals == null)
+ globals = GetGlobals();
+
+ // docSettings has settings for the current document,
+ // which include persistent and non-persistent keys for checkbox filters and expand/collapse section states
+ // persistKeys is an array of the checkbox ids to persist
+ if (docSettings == null)
+ {
+ docSettings = new Array();
+ persistKeys = new Array();
+ }
+
+ if (!sectionStatesInitialized)
+ InitSectionStates();
+
+ var imgElements = document.getElementsByName("toggleSwitch");
+
+ for (i = 0; i < imgElements.length; i++)
+ {
+ if ((sectionStates[imgElements[i].id] == "e"))
+ ExpandSection(imgElements[i]);
+ else
+ CollapseSection(imgElements[i]);
+ }
+
+ SetCollapseAll();
+
+ // split screen
+ var screen = new SplitScreen('header', 'mainSection');
+
+ // init devlang filter checkboxes
+ SetupDevlangsFilter();
+
+ // init memberlist filter checkboxes for protected, inherited, etc
+ SetupMemberOptionsFilter();
+
+ // init memberlist platforms filter checkboxes, e.g. .Net Framework, CompactFramework, XNA, Silverlight, etc.
+ SetupMemberFrameworksFilter();
+
+ var mainSection = document.getElementById("mainSection");
+
+ // vs70.js did this to allow up/down arrow scrolling, I think
+ try { mainSection.setActive(); } catch(e) { }
+
+ //set the scroll position
+ try{mainSection.scrollTop = scrollPos;}
+ catch(e){}
+}
+
+function Window_Unload()
+{
+ // for each key in persistArray, write the key/value pair to globals
+ for (var i = 0; i < persistKeys.length; i++)
+ Save(persistKeys[i],docSettings[persistKeys[i]]);
+
+ // save the expand/collapse section states
+ SaveSections();
+}
+
+function set_to_print()
+{
+ //breaks out of divs to print
+ var i;
+
+ if (window.text)document.all.text.style.height = "auto";
+
+ for (i=0; i < document.all.length; i++)
+ {
+ if (document.all[i].tagName == "body")
+ {
+ document.all[i].scroll = "yes";
+ }
+ if (document.all[i].id == "header")
+ {
+ document.all[i].style.margin = "0px 0px 0px 0px";
+ document.all[i].style.width = "100%";
+ }
+ if (document.all[i].id == "mainSection")
+ {
+ document.all[i].style.overflow = "visible";
+ document.all[i].style.top = "5px";
+ document.all[i].style.width = "100%";
+ document.all[i].style.padding = "0px 10px 0px 30px";
+ }
+ }
+}
+
+function reset_form()
+{
+ //returns to the div nonscrolling region after print
+ document.location.reload();
+}
+
+/*
+**********
+********** End
+**********
+*/
+
+
+/*
+**********
+********** Begin Language Filtering
+**********
+*/
+
+var devlangsMenu;
+var devlangsDropdown;
+var memberOptionsMenu;
+var memberOptionsDropdown;
+var memberFrameworksMenu;
+var memberFrameworksDropdown;
+var dropdowns = new Array();
+
+// initialize the devlang filter dropdown menu
+function SetupDevlangsFilter()
+{
+ var divNode = document.getElementById('devlangsMenu');
+ if (divNode == null)
+ return;
+
+ var checkboxNodes = divNode.getElementsByTagName("input");
+
+ if (checkboxNodes.length == 1)
+ {
+ // only one checkbox, so we don't need a menu
+ // get the devlang and use it to display the correct devlang spans
+ // a one-checkbox setting like this is NOT persisted, nor is it set from the persisted globals
+ var checkboxData = checkboxNodes[0].getAttribute('data');
+ var dataSplits = checkboxData.split(',');
+ var devlang = "";
+ if (dataSplits.length > 1)
+ devlang = dataSplits[1];
+ styleSheetHandler(devlang);
+ }
+ else
+ {
+ // setup the dropdown menu
+ devlangsMenu = new CheckboxMenu("devlangsMenu", docSettings, persistKeys, globals);
+ devlangsDropdown = new Dropdown('devlangsDropdown', 'devlangsMenu');
+ dropdowns.push(devlangsDropdown);
+
+ // update the label of the dropdown menu
+ SetDropdownMenuLabel(devlangsMenu, devlangsDropdown);
+
+ // toggle the document's display docSettings
+ codeBlockHandler();
+ styleSheetHandler("");
+ }
+}
+
+
+// called onclick in a devlang filter checkbox
+// tasks to perform at this event are:
+// toggle the check state of the checkbox that was clicked
+// update the user's devlang preference, based on devlang checkbox states
+// update stylesheet based on user's devlang preference
+// show/hide snippets/syntax based on user's devlang preference
+//
+function SetLanguage(checkbox)
+{
+ // toggle the check state of the checkbox that was clicked
+ devlangsMenu.ToggleCheckState(checkbox.id);
+
+ // update the label of the dropdown menu
+ SetDropdownMenuLabel(devlangsMenu, devlangsDropdown);
+
+ // update the display of the document's items that are dependent on the devlang setting
+ codeBlockHandler();
+ styleSheetHandler("");
+
+}
+/*
+**********
+********** End Language Filtering
+**********
+*/
+
+
+/*
+**********
+********** Begin Members Options Filtering
+**********
+*/
+
+// initialize the memberlist dropdown menu for protected, inherited, etc
+function SetupMemberOptionsFilter()
+{
+ if (document.getElementById('memberOptionsMenu') != null) {
+ memberOptionsMenu = new CheckboxMenu("memberOptionsMenu", docSettings, persistKeys, globals);
+ memberOptionsDropdown = new Dropdown('memberOptionsDropdown', 'memberOptionsMenu');
+ dropdowns.push(memberOptionsDropdown);
+
+ // update the label of the dropdown menu
+ SetDropdownMenuLabel(memberOptionsMenu, memberOptionsDropdown);
+
+ // show/hide memberlist rows based on the current docSettings
+ memberlistHandler();
+ }
+}
+
+function SetupMemberFrameworksFilter()
+{
+ if (document.getElementById('memberFrameworksMenu') != null)
+ {
+ memberFrameworksMenu = new CheckboxMenu("memberFrameworksMenu", docSettings, persistKeys, globals);
+ memberFrameworksDropdown = new Dropdown('memberFrameworksDropdown', 'memberFrameworksMenu');
+ dropdowns.push(memberFrameworksDropdown);
+
+ // update the label of the dropdown menu
+ SetDropdownMenuLabel(memberFrameworksMenu, memberFrameworksDropdown);
+
+ // show/hide memberlist rows based on the current docSettings
+ memberlistHandler();
+ }
+}
+
+function SetMemberOptions(checkbox, groupName)
+{
+ var checkboxGroup = new Array();
+ if (groupName == "vis")
+ {
+ if (document.getElementById('PublicCheckbox') != null)
+ checkboxGroup.push('PublicCheckbox');
+ if (document.getElementById('ProtectedCheckbox') != null)
+ checkboxGroup.push('ProtectedCheckbox');
+ }
+ else if (groupName == "decl")
+ {
+ if (document.getElementById('DeclaredCheckbox') != null)
+ checkboxGroup.push('DeclaredCheckbox');
+ if (document.getElementById('InheritedCheckbox') != null)
+ checkboxGroup.push('InheritedCheckbox');
+ }
+
+ // toggle the check state of the checkbox that was clicked
+ memberOptionsMenu.ToggleGroupCheckState(checkbox.id, checkboxGroup);
+
+ // update the label of the dropdown menu
+ SetDropdownMenuLabel(memberOptionsMenu, memberOptionsDropdown);
+
+ // update the display of the document's items that are dependent on the member options settings
+ memberlistHandler();
+}
+
+function SetMemberFrameworks(checkbox)
+{
+ // toggle the check state of the checkbox that was clicked
+ memberFrameworksMenu.ToggleCheckState(checkbox.id);
+
+ // update the label of the dropdown menu
+ SetDropdownMenuLabel(memberFrameworksMenu, memberFrameworksDropdown);
+
+ // update the display of the document's items that are dependent on the member platforms settings
+ memberlistHandler();
+}
+
+function DisplayFilteredMembers()
+{
+ var iAllMembers = document.getElementsByTagName("tr");
+ var i;
+
+ for(i = 0; i < iAllMembers.length; ++i)
+ {
+ if (((iAllMembers[i].notSupportedOnXna == "true") && (netXnaMembersOnly == "on")) ||
+ ((iAllMembers[i].getAttribute("name") == "inheritedMember") && (inheritedMembers == "off")) ||
+ ((iAllMembers[i].getAttribute("notSupportedOn") == "netcf") && (netcfMembersOnly == "on")))
+ iAllMembers[i].style.display = "none";
+ else
+ iAllMembers[i].style.display = "";
+ }
+
+ // protected members are in separate collapseable sections in vs2005, so expand or collapse the sections
+ ExpandCollapseProtectedMemberSections();
+}
+
+function ExpandCollapseProtectedMemberSections()
+{
+ var imgElements = document.getElementsByName("toggleSwitch");
+ var i;
+ // Family
+ for(i = 0; i < imgElements.length; ++i)
+ {
+ if(imgElements[i].id.indexOf("protected", 0) == 0)
+ {
+ if ((sectionStates[imgElements[i].id] == "e" && protectedMembers == "off") ||
+ (sectionStates[imgElements[i].id] == "c" && protectedMembers == "on"))
+ {
+ ExpandCollapse(imgElements[i]);
+ }
+ }
+ }
+}
+
+/*
+**********
+********** End Members Options Filtering
+**********
+*/
+
+
+/*
+**********
+********** Begin Expand/Collapse
+**********
+*/
+
+// expand or collapse a section
+function ExpandCollapse(imageItem)
+{
+ if (sectionStates[imageItem.id] == "e")
+ CollapseSection(imageItem);
+ else
+ ExpandSection(imageItem);
+
+ SetCollapseAll();
+}
+
+// expand or collapse all sections
+function ExpandCollapseAll(imageItem)
+{
+ var collapseAllImage = document.getElementById("collapseAllImage");
+ var expandAllImage = document.getElementById("expandAllImage");
+ if (imageItem == null || collapseAllImage == null || expandAllImage == null) return;
+ noReentry = true; // Prevent entry to OnLoadImage
+
+ var imgElements = document.getElementsByName("toggleSwitch");
+ var i;
+ var collapseAll = (imageItem.src == collapseAllImage.src);
+ if (collapseAll)
+ {
+ imageItem.src = expandAllImage.src;
+ imageItem.alt = expandAllImage.alt;
+
+ for (i = 0; i < imgElements.length; ++i)
+ {
+ CollapseSection(imgElements[i]);
+ }
+ }
+ else
+ {
+ imageItem.src = collapseAllImage.src;
+ imageItem.alt = collapseAllImage.alt;
+
+ for (i = 0; i < imgElements.length; ++i)
+ {
+ ExpandSection(imgElements[i]);
+ }
+ }
+ SetAllSectionStates(collapseAll);
+ SetToggleAllLabel(collapseAll);
+
+ noReentry = false;
+}
+
+function ExpandCollapse_CheckKey(imageItem, eventObj)
+{
+ if(eventObj.keyCode == 13)
+ ExpandCollapse(imageItem);
+}
+
+function ExpandCollapseAll_CheckKey(imageItem, eventObj)
+{
+ if(eventObj.keyCode == 13)
+ ExpandCollapseAll(imageItem);
+}
+
+function SetAllSectionStates(collapsed)
+{
+ for (var sectionId in sectionStates)
+ sectionStates[sectionId] = (collapsed) ? "c" : "e";
+}
+
+function ExpandSection(imageItem)
+{
+ noReentry = true; // Prevent re-entry to OnLoadImage
+ try
+ {
+ var collapseImage = document.getElementById("collapseImage");
+ imageItem.src = collapseImage.src;
+ imageItem.alt = collapseImage.alt;
+
+ imageItem.parentNode.parentNode.nextSibling.style.display = "";
+ sectionStates[imageItem.id] = "e";
+ }
+ catch (e)
+ {
+ }
+ noReentry = false;
+}
+
+function CollapseSection(imageItem)
+{
+ noReentry = true; // Prevent re-entry to OnLoadImage
+ var expandImage = document.getElementById("expandImage");
+ imageItem.src = expandImage.src;
+ imageItem.alt = expandImage.alt;
+ imageItem.parentNode.parentNode.nextSibling.style.display = "none";
+ sectionStates[imageItem.id] = "c";
+ noReentry = false;
+}
+
+function AllCollapsed()
+{
+ var imgElements = document.getElementsByName("toggleSwitch");
+ var allCollapsed = true;
+ var i;
+
+ for (i = 0; i < imgElements.length; i++) allCollapsed = allCollapsed && (sectionStates[imgElements[i].id] == "c");
+
+ return allCollapsed;
+}
+
+function SetCollapseAll()
+{
+ var imageElement = document.getElementById("toggleAllImage");
+ if (imageElement == null) return;
+
+ var allCollapsed = AllCollapsed();
+ if (allCollapsed)
+ {
+ var expandAllImage = document.getElementById("expandAllImage");
+ if (expandAllImage == null) return;
+ imageElement.src = expandAllImage.src;
+ imageElement.alt = expandAllImage.alt;
+ }
+ else
+ {
+ var collapseAllImage = document.getElementById("collapseAllImage");
+ if (collapseAllImage == null) return;
+ imageElement.src = collapseAllImage.src;
+ imageElement.alt = collapseAllImage.alt;
+ }
+
+ SetToggleAllLabel(allCollapsed);
+}
+
+function SetToggleAllLabel(allCollapsed)
+{
+ var collapseLabelElement = document.getElementById("collapseAllLabel");
+ var expandLabelElement = document.getElementById("expandAllLabel");
+
+ if (collapseLabelElement == null || expandLabelElement == null) return;
+
+ if (allCollapsed)
+ {
+ collapseLabelElement.style.display = "none";
+ expandLabelElement.style.display = "inline";
+ }
+ else
+ {
+ collapseLabelElement.style.display = "inline";
+ expandLabelElement.style.display = "none";
+ }
+}
+
+function SaveSections()
+{
+ try
+ {
+ var states = "";
+
+ for (var sectionId in sectionStates) states += sectionId + ":" + sectionStates[sectionId] + ";";
+
+ Save("SectionStates", states.substring(0, states.length - 1));
+ }
+ catch (e)
+ {
+ }
+
+}
+
+function OpenSection(imageItem)
+{
+ if (sectionStates[imageItem.id] == "c") ExpandCollapse(imageItem);
+}
+
+/*
+**********
+********** End Expand/Collapse
+**********
+*/
+
+
+
+/*
+**********
+********** Begin Copy Code
+**********
+*/
+
+function CopyCode(key)
+{
+ var trElements = document.getElementsByTagName("tr");
+ var i;
+ for(i = 0; i < trElements.length; ++i)
+ {
+ if(key.parentNode.parentNode.parentNode == trElements[i].parentNode)
+ {
+ if (window.clipboardData)
+ {
+ // the IE-manner
+ window.clipboardData.setData("Text", trElements[i].innerText);
+ }
+ else if (window.netscape)
+ {
+ // Gives unrestricted access to browser APIs using XPConnect
+ try
+ {
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+ }
+ catch(e)
+ {
+ alert("Universal Connect was refused, cannot copy to " +
+ "clipboard. Go to about:config and set " +
+ "signed.applets.codebase_principal_support to true to " +
+ "enable clipboard support.");
+ return;
+ }
+
+ // Creates an instance of nsIClipboard
+ var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
+ if (!clip) return;
+
+ // Creates an instance of nsITransferable
+ var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
+ if (!trans) return;
+
+ // register the data flavor
+ trans.addDataFlavor('text/unicode');
+
+ // Create object to hold the data
+ var str = new Object();
+
+ // Creates an instance of nsISupportsString
+ var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
+
+ //Assigns the data to be copied
+ var copytext = trElements[i].textContent;
+ str.data = copytext;
+
+ // Add data objects to transferable
+ trans.setTransferData("text/unicode",str,copytext.length*2);
+ var clipid = Components.interfaces.nsIClipboard;
+ if (!clip) return false;
+
+ // Transfer the data to clipboard
+ clip.setData(trans,null,clipid.kGlobalClipboard);
+ }
+ }
+ }
+}
+
+function ChangeCopyCodeIcon(key)
+{
+ var i;
+ var imageElements = document.getElementsByName("ccImage")
+ for(i=0; i<imageElements.length; ++i)
+ {
+ if(imageElements[i].parentNode == key)
+ {
+ if(imageElements[i].src == copyImage.src)
+ {
+ imageElements[i].src = copyHoverImage.src;
+ imageElements[i].alt = copyHoverImage.alt;
+ key.className = 'copyCodeOnHover';
+ }
+ else
+ {
+ imageElements[i].src = copyImage.src;
+ imageElements[i].alt = copyImage.alt;
+ key.className = 'copyCode';
+ }
+ }
+ }
+}
+
+function CopyCode_CheckKey(key, eventObj)
+{
+ if(eventObj.keyCode == 13)
+ CopyCode(key);
+}
+
+/*
+**********
+********** End Copy Code
+**********
+*/
+
+
+/*
+**********
+********** Begin Maintain Scroll Position
+**********
+*/
+
+function loadAll(){
+ try
+ {
+ scrollPos = allHistory.getAttribute("Scroll");
+ }
+ catch(e){}
+}
+
+function saveAll(){
+ try
+ {
+ allHistory.setAttribute("Scroll", mainSection.scrollTop);
+ }
+ catch(e){}
+}
+
+/*
+**********
+********** End Maintain Scroll Position
+**********
+*/
+
+
+/*
+**********
+********** Begin Send Mail
+**********
+*/
+
+function formatMailToLink(anchor)
+{
+ var release = "Release: " + anchor.doc_Release;
+ var topicId = "Topic ID: " + anchor.doc_TopicID;
+ var topicTitle = "Topic Title: " + anchor.doc_TopicTitle;
+ var url = "URL: " + document.URL;
+ var browser = "Browser: " + window.navigator.userAgent;
+
+ var crlf = "%0d%0a";
+ var body = release + crlf + topicId + crlf + topicTitle + crlf + url + crlf + browser + crlf + crlf + "Comments:" + crlf + crlf;
+
+ anchor.href = anchor.href + "&body=" + body;
+}
+
+/*
+**********
+********** End Send Mail
+**********
+*/
+
+
+/*
+**********
+********** Begin Persistence
+**********
+*/
+
+var globals;
+
+// get global vars from persistent store
+function GetGlobals()
+{
+ var tmp;
+
+ // Try to get VS implementation
+ try { tmp = window.external.Globals; }
+ catch (e) { tmp = null; }
+
+ // Try to get DExplore implementation
+ try { if (tmp == null) tmp = window.external.GetObject("DTE", "").Globals; }
+ catch (e) { tmp = null; }
+
+ return tmp;
+}
+
+function Load(key)
+{
+ try
+ {
+ return globals.VariableExists(key) ? globals.VariableValue(key) : null;
+ }
+ catch (e)
+ {
+ return null;
+ }
+}
+
+function Save(key, value)
+{
+ try
+ {
+ globals.VariableValue(key) = value;
+ globals.VariablePersists(key) = true;
+ }
+ catch (e)
+ {
+ }
+}
+
+/*
+**********
+********** End Persistence
+**********
+*/
+
+/* This is the part for Glossary popups */
+// The method is called when the user positions the mouse cursor over a glossary term in a document.
+// Current implementation assumes the existence of an associative array (g_glossary).
+// The keys of the array correspond to the argument passed to this function.
+
+var bGlossary=true;
+var oDialog;
+var oTimeout="";
+var oTimein="";
+var iTimein=.5;
+var iTimeout=30;
+var oLastNode;
+var oNode;
+var bInit=false;
+var aTerms=new Array();
+
+// Called from mouseover and when the contextmenu behavior fires oncontextopen.
+function clearDef(eventObj){
+ if(eventObj){
+ var elem;
+ if(document.all) elem = eventObj.toElement;
+ else elem = eventObj.relatedTarget;
+ if(elem!=null || elem!="undefined"){
+ if(typeof(oTimein)=="number"){
+ window.clearTimeout(oTimein);
+ }
+ if(oDialog.dlg_status==true){
+ hideDef();
+ }
+ }
+ }
+}
+function hideDef(eventObj){
+ window.clearTimeout(oTimeout);
+ oTimeout="";
+ oDialog.style.display="none";
+ oDialog.dlg_status=false;
+}
+function showDef(oSource){
+ if(bInit==false){
+ glossaryInit();
+ bInit=true;
+ }
+ if(bGlossary==true){
+ if(typeof(arguments[0])=="object"){
+ oNode=oSource;
+ }
+ else{
+ if(document.all) oNode = eventObj.srcElement;
+ else oNode = eventObj.target;
+ }
+ var bStatus=oDialog.dlg_status; // BUGBUG: oDialog is null.
+ if((oLastNode!=oNode)||(bStatus==false)){
+ if((typeof(oTimein)=="number")&& eventObj){
+
+ var elem;
+ if(document.all) elem = eventObj.fromElement;
+ else elem = eventObj.relatedTarget;
+
+ if( elem != null || elem != "undefined")
+ window.clearTimeout(oTimein);
+ }
+ oTimein=window.setTimeout("openDialog(oNode)",iTimein*1000);
+ }
+ }
+}
+
+
+
+function glossaryInit(){
+ oDialog=fnCreateDialog(150,50);
+}
+
+function navigateTerm(eventObj){
+ var oNode;
+ if(document.all) oNode = eventObj.srcElement;
+ else oNode = eventObj.target;
+
+ var iTermID=oNode.termID;
+ if(oNode!=aTerms[iTermID]){
+ var iAbsTop=getAbsoluteTop(aTerms[iTermID]);
+ if(iAbsTop<document.body.scrollTop){
+ window.scrollTo(document.body.scrollLeft,getAbsoluteTop(aTerms[iTermID]));
+ }
+ openDialog(aTerms[iTermID]);
+ }
+}
+function disableGlossary(eventObj){
+ if(bGlossary==true){
+ if(document.all) eventObj.srcElement.innerText="Enable Automatic Glossary";
+ else eventObj.target.innerText="Enable Automatic Glossary";
+ bGlossary=false;
+ hideDef();
+ }
+ else{
+ if(document.all) eventObj.srcElement.innerText="Disable Automatic Glossary";
+ else eventObj.target.innerText="Disable Automatic Glossary";
+ bGlossary=true;
+ }
+}
+function openGlossary(){
+
+}
+function fnSetMenus(eventObj){
+ var oNode;
+ if(document.all) oNode = eventObj.srcElement;
+ else oNode = eventObj.target;
+
+ var oMenu=oNode.createMenu("SPAN","G_RID");
+ var oSubItem1=oNode.createMenuItem("Glossary",fnStub,oMenu,true);
+ document.body.createMenuItem("Open External Glossary",openGlossary,oSubItem1.subMenu);
+ document.body.createMenuItem("Disable Automatic Glossary",disableGlossary,oSubItem1.subMenu);
+ for(var i=0;i<aTerms.length;i++){
+ var oItem=document.body.createMenuItem(aTerms[i].innerText,navigateTerm,oMenu);
+ oItem.termID=i;
+ }
+}
+// This is a bogus stub. It should be sniffed out rather than added in.
+function fnStub(){
+
+}
+function fnAttachMenus(aTips){
+ // This walk is only necessary for the context menu.
+ var aTips=document.getElementsByTagName("SPAN");
+ for(var i=0;i<aTips.length;i++){
+ var oNode=aTips[i];
+ if(oNode.getAttribute("G_RID")){
+ var sTerm=oNode.getAttribute("G_RID");
+ if(typeof(g_glossary[sTerm])=="string"){
+ // Removed client-side scripting to add events. This entire process should be singled out for IE 5 and later .. and, its only for the context menu.
+ aTerms[aTerms.length]=oNode;
+ }
+ }
+ }
+ if(oBD.majorVer>=5){
+ document.body.addBehavior(gsContextMenuPath);
+ document.body.onbehaviorready="fnSetMenus()";
+ document.body.oncontextopen="clearDef()";
+ }
+
+}
+// Called by showDef. The showDef function sniffs for initialization.
+function openDialog(oNode,x,y){
+ var bStatus=oDialog.dlg_status; // BUGBUG: This code assumes that oDialog has been initialized
+ if(bStatus==false){
+ oDialog.dlg_status=true;
+ oDialog.style.display="block";
+ }
+ else{
+ if(typeof(oTimeout)=="number"){
+ window.clearTimeout(oTimeout);
+ }
+ }
+
+ var sTerm=oNode.getAttribute("G_RID");
+ var oDef=oNode.children(0);
+ var sDef=oDef.text;
+ sDef=sDef.substr(4,sDef.length-7); //Strips the html comment markers from the definition.
+ oDialog.innerHTML=sDef
+
+
+ //oDialog.innerHTML=g_glossary[sTerm];
+
+ var iScrollLeft=document.body.scrollLeft;
+ var iScrollTop=document.body.scrollTop;
+ var iOffsetLeft=getAbsoluteLeft(oNode)// - iScrollLeft;
+ var iOffsetWidth=oNode.offsetWidth;
+ var oParent=oNode.parentNode;
+ var iOffsetParentLeft=getAbsoluteLeft(oParent);
+ var iOffsetTop=getAbsoluteTop(oNode); //- iScrollTop;
+ var iOffsetDialogWidth=oDialog.offsetWidth;
+
+
+ if((iOffsetLeft + iOffsetWidth) > (iOffsetParentLeft + oParent.offsetWidth)){
+ iOffsetLeft=iOffsetParentLeft;
+ if(iOffsetLeft - iOffsetDialogWidth>0){
+ iOffsetTop+=oNode.offsetHeight;
+ }
+ }
+ var iLeft=0;
+ var iTop=0;
+ if((iOffsetLeft + iOffsetWidth - iScrollLeft + iOffsetDialogWidth) < document.body.offsetWidth ){
+ iLeft=iOffsetLeft + iOffsetWidth;
+ }
+ else{
+ if(iOffsetLeft - iOffsetDialogWidth>0){
+ iLeft=iOffsetLeft - iOffsetDialogWidth;
+ }
+ else{
+ iLeft=iOffsetParentLeft;
+ }
+ }
+ if(iOffsetTop - iScrollTop<oDialog.offsetHeight){
+ iTop=iOffsetTop + oNode.offsetHeight;
+ }
+ else{
+ iTop=iOffsetTop - oDialog.offsetHeight;
+ }
+ oDialog.style.top=iTop;
+ oDialog.style.left=iLeft;
+ oTimeout=window.setTimeout("hideDef()",iTimeout*1000);
+}
+function getAbsoluteTop(oNode){
+ var oCurrentNode=oNode;
+ var iTop=0;
+ while(oCurrentNode.tagName!="BODY"){
+ iTop+=oCurrentNode.offsetTop;
+ oCurrentNode=oCurrentNode.offsetParent;
+ }
+ return iTop;
+}
+function getAbsoluteLeft(oNode){
+ var oCurrentNode=oNode;
+ var iLeft=0;
+ while(oCurrentNode.tagName!="BODY"){
+ iLeft+=oCurrentNode.offsetLeft;
+ oCurrentNode=oCurrentNode.offsetParent;
+ }
+ return iLeft;
+}
+function fnCreateDialog(iWidth,iHeight){
+ document.body.insertAdjacentHTML("BeforeEnd","<DIV></DIV>");
+ oNewDialog=document.body.children(document.body.children.length-1);
+ oNewDialog.className="clsTooltip";
+ oNewDialog.style.width=iWidth;
+ oNewDialog.dlg_status=false;
+ return oNewDialog;
+}
+
+function sendfeedback(subject, id,alias){
+ var rExp = /\"/gi;
+ var url = location.href;
+ // Need to replace the double quotes with single quotes for the mailto to work.
+ var rExpSingleQuotes = /\'\'"/gi;
+ var title = document.getElementsByTagName("TITLE")[0].innerText.replace(rExp, "''");
+ location.href = "mailto:" + alias + "?subject=" + subject + title + "&body=Topic%20ID:%20" + id + "%0d%0aURL:%20" + url + "%0d%0a%0d%0aComments:%20";
+}