var EXPORTED_SYMBOLS = ["extLoader"]; //Do not change this line
function setSelectionRange(document, textbox, start, end) {
//Get selection object
selection = textbox.editor.selectionController.getSelection(1);
var range = document.createRange();
//Find one node to get the parent from it
node = selection.focusNode;
if (node.localName == "div") //If node is already the parent ("div")
node = node.childNodes[0];
//Text are allocated in different text nodes, sweep over them to find approperiate node
//Start position
var count = 0;
var myNode;
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
myNode = node.parentNode.childNodes[i];
count += (('length' in myNode) ? myNode.length : 1); //Enter is a
element so no length is defined for it
if (count > start)
break;
}
range.setStart(myNode, start - (count - myNode.length));
//End position
for (var j = i; j < node.parentNode.childNodes.length && count < end; j++) {
myNode = node.parentNode.childNodes[j];
count += (('length' in myNode) ? myNode.length : 1);
if (count >= end)
break;
}
range.setEnd(myNode, end - (count - myNode.length));
selection.addRange(range)
//Make selection visible
textbox.editor.selectionController.setDisplaySelection(2); //Make selection visible
}
var extLoader = {
pointers: null,
info: {
GUID: "fb369e80-e93e-4895-b974-24c5b77f1b9d",
name: "Highlight search results",
version: "0.1",
developer: "InBasic",
description: "Highlight all search results with a single click",
qfnVersion: ["2.4C", "*"],
ffVersion: ["3.*", "*"]
},
css: " \
.highlight-button { \
list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjVJivzgAAACpUlEQVRIS52V32tSYRzGhaIa7SLqH+g+CNZVQdBVIRS7iNq66KKLqItY4GAbFGw6RSUdc0wkw4M0yB+4WSNQVjgzA81Za85fmVNwyioOSb8gYvX0vi8dOtNztmPCl/Mq7+Pn+32e95yjUin86PX6LlKnFG5v2xYZ291F6v/0BNxrMpngdrtB1rZOmyDg3qh+P15xPSDrzvQCPJvNgud5eDyejpoQ4HzBhM0vAWQeHFfehBjebDbRaDRQr9cxMzOjqAkx/Pf3h/jFG/HzgwNv7h/buYlWeKVSQT6fR6FQQC6Xg8vl2raJVvjmxjX8qPbh29pNfHprwtK9o/JNyMHT6TQikQirWCwGm80GqfMgB/+cVaMRP4nqs8tYe34b8YnD7fqd4HNzc4jH4/D7/TAYDG1/sBO88KgHlRejeO29gIh271a9xWLpNpvNoAeOZi7YLkzeCifNnhY7EDIf6V40HAA9cDRzwXZh8lY4afafnmS6i+M4dqtlMhnUajWWuVK4WP8u78Pmx1ss8za47yKbfAtcmMJut8fX19fhdDqRSCSwurrK8hYmDwQCzHYyuVoqe7E+u3QXX0tXWObC5Mv+fgEuqVdZrVa+Wq2iXC5jenoaCwsLCIfDLHMR/Kzcg6hVn3h6B+Un51jmIri0noiv0lNNrlhZWUGpVGJrr9erCD5pNUvqQ14tgV8SJpeGU0t1Oh07fMFgkFqMVCqFYrEI+gim3+ndITc5yVM9ob0uqw+NHaKZS+sp3Gg0YnZ2loF8Ph+GhoYwODi4Qao4MjLCkd/3bAePjndhMTgsqTcPn+cIXFavovBkMslqamoKGo1meWBg4ITSF050fB/ep26g9lKLx5NnMKrp60ivog6Qmv9rs4NcDyqF033UflLzpKjNDlId6f8AL8IBv9h/9d4AAAAASUVORK5CYII=); \
-moz-image-region: rect(0px, 32px, 16px, 16px); \
margin-left: 10px; \
} \
.highlight-button[disabled=true] { \
-moz-image-region: rect(0px, 16px, 16px, 0px); \
} \
",
xul: " \
\
\
\
",
initialize: function () { //Do not change this line
var document = this.pointers.document;
var searchBox = document.getElementById('editor-tabbox-toolbar-searchbox');
searchBox.addEventListener('keyup', function(){extLoader.status()}, false);
searchBox.addEventListener('command', function(){extLoader.status()}, false);
searchBox.addEventListener('focus', function(){extLoader.status()}, false);
searchBox.addEventListener('blur', function(){extLoader.status()}, false);
var backward = document.getElementById("editor-tabbox-toolbar-backward");
backward.addEventListener('click', function(){extLoader.status()}, false);
var forward = document.getElementById("editor-tabbox-toolbar-forward");
forward.addEventListener('click', function(){extLoader.status()}, false);
var tabs = document.getElementById("editor-tabbox-tabs");
tabs.addEventListener("select", function(){extLoader.status()}, false);
},
status: function () {
var document = this.pointers.document;
var result = document.getElementById('editor-tabbox-toolbar-searchcount').value;
var highlightButton = document.getElementById('highlight-button');
if (result == "0\/0") {
highlightButton.disabled = true;
return;
}
highlightButton.disabled = false;
},
search: function() {
var document = this.pointers.document;
var textbox = this.pointers.QFN.getEditor();
var searchfor = document.getElementById('editor-tabbox-toolbar-searchbox').value;
var matchedIndex = [];
start = 0;
do {
index = textbox.value.toLowerCase().indexOf(searchfor.toLowerCase(), start);
if (index == -1)
break;
matchedIndex.push(index);
start = index + 1;
} while(true)
for (var i = 0; i < matchedIndex.length; i++)
setSelectionRange(document, textbox, matchedIndex[i], matchedIndex[i]+searchfor.length);
}
}