如果你想扩展 SyntaxHighlighter,你可以在 GitHub 上 fork 并修改它。
如果您没有免费的 GitHub 帐户,请注册一个免费的 GitHub 帐户,然后访问 project page,然后单击 Fork 按钮。
您也可以只下载 .ZIP 并修改源代码。你要的文件在src/core.js
附加dblclick的代码在core.js中
if (params.quickCode)
dom.attachEvent(dom.findElement(element, '.code'), 'dblclick', dom.quickCodeHandler);
在这个项目的 fork 中,只需添加以下内容:
dom.attachEvent(dom.findElement(element, '.code'), 'keydown',
function(e)
{
if(e.ctrlKey && e.keyCode == 65) {
console.log("Ctrl+A event captured");
e.preventDefault();
dom.quickCodeHandler();
return false;
}
});
作为参考,完成这项工作的代码在dom.js
/**
* Quick code mouse double click handler.
*/
function quickCodeHandler(e)
{
var target = e.target,
highlighterDiv = findParentElement(target, '.syntaxhighlighter'),
container = findParentElement(target, '.container'),
textarea = document.createElement('textarea'),
highlighter
;
if (!container || !highlighterDiv || findElement(container, 'textarea'))
return;
//highlighter = highlighters.get(highlighterDiv.id);
// add source class name
addClass(highlighterDiv, 'source');
// Have to go over each line and grab it's text, can't just do it on the
// container because Firefox loses all \n where as Webkit doesn't.
var lines = container.childNodes,
code = []
;
for (var i = 0, l = lines.length; i < l; i++)
code.push(lines[i].innerText || lines[i].textContent);
// using \r instead of \r or \r\n makes this work equally well on IE, FF and Webkit
code = code.join('\r');
// For Webkit browsers, replace nbsp with a breaking space
code = code.replace(/\u00a0/g, " ");
// inject <textarea/> tag
textarea.appendChild(document.createTextNode(code));
container.appendChild(textarea);
// preselect all text
textarea.focus();
textarea.select();
// set up handler for lost focus
attachEvent(textarea, 'blur', function(e)
{
textarea.parentNode.removeChild(textarea);
removeClass(highlighterDiv, 'source');
});
};