Skip to content

Instantly share code, notes, and snippets.

@c4pt0r
Created November 22, 2011 08:44
Show Gist options
  • Save c4pt0r/1385211 to your computer and use it in GitHub Desktop.
Save c4pt0r/1385211 to your computer and use it in GitHub Desktop.
firefox getword
/*
* @file getword.js
* @desc Get Word From Firefox 4+;
* @author Dongxu Huang <huangdx@rd.netease.com>
* @date 2011-5-13
*
*/
var eventRangeParent = null;
var eventTarget = null;
var eventRangeOffset = null;
var clientX = 0;
var clientY = 0;
var monX = 0;
var monY = 0;
var lastWord = null;
var currentDoc = null;
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
var gPos =0;
function getWord (parent, offset , target)
{
try{
if (parent.parentNode != target) {
return null;
}
}
catch (e) {
return null;
}
if (parent.nodeType != Node.TEXT_NODE) {
return null;
}
var container = parent.parentNode;
if (container) {
var foundNode = false;
for (var c = container.firstChild; c !== null; c = c.nextSibling) {
if (c == parent) {
foundNode = true;
break;
}
}
if (!foundNode) {
return null;
}
}
var range = parent.ownerDocument.createRange();
range.selectNode(parent);
var str = range.toString();
if (offset < 0 || offset >= str.length) {
return null;
}
var start = offset;
var end = offset + 1;
/*
var valid_chars = /\w/;
if (!valid_chars.test(str.substring(start, start + 1))) {
return null;
}
while (start > 0) {
if (valid_chars.test(str.substring(start - 1, start))) {
start--;
} else {
break;
}
}
while (end < str.length) {
if (valid_chars.test(str.substring(end, end + 1))) {
end++;
} else {
break;
}
}
*/
space_cnt = 0;
while (start > 0)
{
if (str.substring(start-1, start) == ' ')
space_cnt++;
if (space_cnt == 3)
break;
start--;
}
gPos = offset - start - 2 < 0?0:offset - start - 2;
while(str[++gPos] == ' ');
space_cnt = 0;
while (end < str.length) {
if (str.substring(end, end + 1) == ' ') {
space_cnt++;
}
if (space_cnt == 3)
break;
end++;
}
var text = str.substring(start, end);
return text.toLowerCase();
}
function on_mousemove(event)
{
var eventDoc = null;
var doc = event.target.ownerDocument;
if (String(doc).indexOf("[object HTMLDocument]") != -1)
{
eventDoc = doc;
}
if (eventDoc != null)
{
if (currentDoc != eventDoc)
{
currentDoc = eventDoc;
}
eventTarget = event.target;
if (eventTarget.tagName != "TEXTAREA" || eventTarget.tagName != "INPUT" || eventTarget.tagName != "SELECT")
{
eventRangeParent = event.rangeParent;
eventRangeOffset = event.rangeOffset;
clientX = event.clientX;
clientY = event.clientY;
}
}
};
function get_mouse_word() {
word = getWord(eventRangeParent, eventRangeOffset, eventTarget);
if (word != null)
{
return word;
}
return '';
}
var last_x = 0;
var last_y = 0;
var isCheck = false;
function mouse_move_mon()
{
if (isCheck == false && clientX == last_x && clientY == last_y)
{
isCheck = true
word = get_mouse_word();
if (word != '' )
{
consoleService.logStringMessage("getword!!!!" + word+ " " + isCheck);
SendToDict(word,gPos);
lastWord = word
}
}
else if (!(clientX == last_x && clientY == last_y)){
isCheck = false
}
last_x = clientX;
last_y = clientY;
window.setTimeout(mouse_move_mon, 250);
}
window.setTimeout(mouse_move_mon, 250);
function SendToDict(word, pos)
{
var t = new XMLHttpRequest;
t.open("GET", "http://localhost:50000/getword?word=" + word + "&offset=" + pos +"&", true);
t.send()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment