| registerEventHandler(window, 'load', getInstanceDelegate(this, "LoadPage")); |
| registerEventHandler(window, 'unload', getInstanceDelegate(this, "Window_Unload")); |
| registerEventHandler(window, 'beforeprint', getInstanceDelegate(this, "set_to_print")); |
| registerEventHandler(window, 'afterprint', getInstanceDelegate(this, "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; |
| case "fsharp": |
| for (m=0; m<spanEles.length; m++) |
| { |
| if (spanEles[m].getAttribute("codeLanguage") == "FSharp" && 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; |
| var mainSection; |
| |
| 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 |
| mainSection = document.getElementById("mainSection"); |
| if (!mainSection) |
| mainSection = document.getElementById("mainSectionMHS"); |
| |
| var screen = new SplitScreen('header', mainSection.id); |
| |
| // 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(); |
| |
| // removes blank target from in the self links for Microsoft Help System |
| RemoveTargetBlank(); |
| |
| // set gardien image to the bottom of header or Microsoft Help System |
| SetBackground('headerBottom'); |
| |
| // 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(); |
| } |
| |
| // removes blank target from in the self links for Microsoft Help System |
| function RemoveTargetBlank() { |
| var elems = document.getElementsByTagName("a"); |
| for (var i = 0; i < elems.length; i++) { |
| if (elems[i].getAttribute("target") == "_blank" && |
| elems[i].getAttribute("href", 2).indexOf("#", 0) == 0) |
| elems[i].removeAttribute("target"); |
| } |
| } |
| |
| 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.id) |
| { |
| 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', 'header'); |
| 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', 'header'); |
| dropdowns.push(memberOptionsDropdown); |
| |
| // update the label of the dropdown menu |
| SetDropdownMenuLabel(memberOptionsMenu, memberOptionsDropdown); |
| |
| // show/hide memberlist rows based on the current docSettings |
| memberlistHandler(); |
| } |
| } |
| |
| // sets the background to an element for Microsoft Help 3 system |
| function SetBackground(id) { |
| var elem = document.getElementById(id); |
| if (elem) { |
| var img = document.getElementById(id + "Image"); |
| if (img) { |
| elem.setAttribute("background", img.getAttribute("src")); |
| } |
| } |
| } |
| |
| function SetupMemberFrameworksFilter() |
| { |
| if (document.getElementById('memberFrameworksMenu') != null) |
| { |
| memberFrameworksMenu = new CheckboxMenu("memberFrameworksMenu", docSettings, persistKeys, globals); |
| memberFrameworksDropdown = new Dropdown('memberFrameworksDropdown', 'memberFrameworksMenu', 'header'); |
| 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"; |
| } |