Created
November 22, 2011 08:44
-
-
Save c4pt0r/1385211 to your computer and use it in GitHub Desktop.
firefox getword
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* @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