mirror of
https://github.com/wagesj45/butterflow-ui.git
synced 2024-12-22 17:12:42 -06:00
148 lines
5.2 KiB
JavaScript
148 lines
5.2 KiB
JavaScript
//===============================================================================================================
|
|
// System : Color Syntax Highlighter
|
|
// File : Highlight.js
|
|
// Author : Eric Woodruff (Eric@EWoodruff.us)
|
|
// Updated : 10/21/2012
|
|
// Note : Copyright 2006-2012, Eric Woodruff, All rights reserved
|
|
//
|
|
// This contains the script to expand and collapse the regions in the syntax highlighted code.
|
|
//
|
|
// This is a customized version for the Sandcastle Help File Builder. It overrides the CopyCode() function
|
|
// from the Hana, Prototype, and VS2005 presentation styles to remove the line numbering and collapsible
|
|
// region elements. The VS2010 style does not currently use the CopyCode() function in here as it has its own
|
|
// version for copying the code.
|
|
//===============================================================================================================
|
|
|
|
// Expand/collapse a region
|
|
function HighlightExpandCollapse(showId, hideId)
|
|
{
|
|
var showSpan = document.getElementById(showId), hideSpan = document.getElementById(hideId);
|
|
|
|
showSpan.style.display = "inline";
|
|
hideSpan.style.display = "none";
|
|
}
|
|
|
|
// Copy the code from a colorized code block to the clipboard.
|
|
function CopyCode(key)
|
|
{
|
|
var idx, line, block, htmlLines, lines, codeText, hasLineNos, hasRegions, clip, trans,
|
|
copyObject, clipID;
|
|
var reLineNo = /^\s*\d{1,4}/;
|
|
var reRegion = /^\s*\d{1,4}\+.*?\d{1,4}-/;
|
|
var reRegionText = /^\+.*?\-/;
|
|
|
|
// Find the table row element containing the code
|
|
var trElements = document.getElementsByTagName("tr");
|
|
|
|
for(idx = 0; idx < trElements.length; idx++)
|
|
if(key.parentNode.parentNode.parentNode == trElements[idx].parentNode)
|
|
{
|
|
block = trElements[idx].nextSibling;
|
|
break;
|
|
}
|
|
|
|
if(block.innerText != undefined)
|
|
codeText = block.innerText;
|
|
else
|
|
codeText = block.textContent;
|
|
|
|
hasLineNos = block.innerHTML.indexOf("highlight-lineno");
|
|
hasRegions = block.innerHTML.indexOf("highlight-collapsebox");
|
|
htmlLines = block.innerHTML.split("\n");
|
|
lines = codeText.split("\n");
|
|
|
|
// Remove the line numbering and collapsible regions if present
|
|
if(hasLineNos != -1 || hasRegions != -1)
|
|
{
|
|
codeText = "";
|
|
|
|
for(idx = 0; idx < lines.length; idx++)
|
|
{
|
|
line = lines[idx];
|
|
|
|
if(hasRegions && reRegion.test(line))
|
|
line = line.replace(reRegion, "");
|
|
else
|
|
{
|
|
line = line.replace(reLineNo, "");
|
|
|
|
// Lines in expanded blocks have an extra space
|
|
if(htmlLines[idx].indexOf("highlight-expanded") != -1 ||
|
|
htmlLines[idx].indexOf("highlight-endblock") != -1)
|
|
line = line.substr(1);
|
|
}
|
|
|
|
if(hasRegions && reRegionText.test(line))
|
|
line = line.replace(reRegionText, "");
|
|
|
|
codeText += line;
|
|
|
|
// Not all browsers keep the line feed when split
|
|
if(line[line.length - 1] != "\n")
|
|
codeText += "\n";
|
|
}
|
|
}
|
|
|
|
// IE or FireFox/Netscape?
|
|
if(window.clipboardData)
|
|
window.clipboardData.setData("Text", codeText);
|
|
else
|
|
if(window.netscape)
|
|
{
|
|
// Give 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
|
|
clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(
|
|
Components.interfaces.nsIClipboard);
|
|
|
|
// Creates an instance of nsITransferable
|
|
if(clip)
|
|
trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(
|
|
Components.interfaces.nsITransferable);
|
|
|
|
if(!trans)
|
|
{
|
|
alert("Copy to Clipboard is not supported by this browser");
|
|
return;
|
|
}
|
|
|
|
// Register the data flavor
|
|
trans.addDataFlavor("text/unicode");
|
|
|
|
// Create object to hold the data
|
|
copyObject = new Object();
|
|
|
|
// Creates an instance of nsISupportsString
|
|
copyObject = Components.classes["@mozilla.org/supports-string;1"].createInstance(
|
|
Components.interfaces.nsISupportsString);
|
|
|
|
// Assign the data to be copied
|
|
copyObject.data = codeText;
|
|
|
|
// Add data objects to transferable
|
|
trans.setTransferData("text/unicode", copyObject, codeText.length * 2);
|
|
|
|
clipID = Components.interfaces.nsIClipboard;
|
|
|
|
if(!clipID)
|
|
{
|
|
alert("Copy to Clipboard is not supported by this browser");
|
|
return;
|
|
}
|
|
|
|
// Transfer the data to the clipboard
|
|
clip.setData(trans, null, clipID.kGlobalClipboard);
|
|
}
|
|
else
|
|
alert("Copy to Clipboard is not supported by this browser");
|
|
}
|