Skip to content

Commit

Permalink
Merge branch 'eyal0-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
sha-265 committed Dec 6, 2022
2 parents 6383816 + d2afc82 commit d81b74f
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 32 deletions.
90 changes: 59 additions & 31 deletions HTT-contentscript.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,35 +101,35 @@
var tempDiv = document.createElement('div');
tempDiv.innerHTML = responseText.replace(/<script(.|\s)*?\/script>/gi, '').replace(/src="[^"]*"/gi, '');

var translations_e2h = tempDiv.getElementsByClassName('Translation_content_enTohe');
var translations_e2h = tempDiv.getElementsByClassName("Translation_content_enTohe");
var results = new Array();
var rtl = 0; //count how many of each type
for(var i = 0; i < translations_e2h.length; i++) {
if(translations_e2h[i].getElementsByClassName('Translation_spTop_enTohe').length > 0 &&
translations_e2h[i].getElementsByClassName('Translation_sp2Top_enTohe').length > 0 &&
translations_e2h[i].getElementsByClassName('normal_translation_div').length > 0) {
try {
var new_result = new Object;
new_result['word'] = translations_e2h[i].getElementsByClassName('Translation_spTop_enTohe')[0].innerText;
new_result['partOfSpeech'] = translations_e2h[i].getElementsByClassName('Translation_sp2Top_enTohe')[0].innerText;
new_result['definition'] = translations_e2h[i].getElementsByClassName('normal_translation_div')[0].innerText;
new_result['word'] = translations_e2h[i].getElementsByClassName("Translation_spTop_enTohe")[0].innerText.trim();
new_result['partOfSpeech'] = translations_e2h[i].getElementsByClassName("Translation_sp2Top_enTohe")[0].innerText.trim();
new_result['definition'] = translations_e2h[i].getElementsByClassName('normal_translation_div')[0].innerText.trim();
new_result['rtl'] = 0;
rtl--;
results.push(new_result);
} catch (e) {
console.error("HTT can't parse Hebrew to English: " + e);
}
}

var translations_h2e = tempDiv.getElementsByClassName('Translation_content_heToen');
var translations_h2e = tempDiv.getElementsByClassName("Translation_content_heToen");
for(var i = 0; i < translations_h2e.length; i++) {
if(translations_h2e[i].getElementsByClassName('Translation_spTop_heToen').length > 0 &&
translations_h2e[i].getElementsByClassName('Translation_sp2Top_heToen').length > 0 &&
translations_h2e[i].getElementsByClassName('normal_translation_div').length > 0) {
try {
var new_result = new Object;
new_result['word'] = translations_h2e[i].getElementsByClassName('Translation_spTop_heToen')[0].innerText;
new_result['partOfSpeech'] = translations_h2e[i].getElementsByClassName('Translation_sp2Top_heToen')[0].innerText;
new_result['definition'] = translations_h2e[i].getElementsByClassName('normal_translation_div')[0].innerText;
new_result['word'] = translations_h2e[i].getElementsByClassName("Translation_spTop_heToen")[0].innerText.trim();
new_result['partOfSpeech'] = translations_h2e[i].getElementsByClassName("Translation_sp2Top_heToen")[0].innerText.trim();
new_result['definition'] = translations_h2e[i].getElementsByClassName('normal_translation_div')[0].innerText.trim();
new_result['rtl'] = 1;
rtl++;
results.push(new_result);
} catch (e) {
console.error("HTT can't parse English to Hebrew: " + e);
}
}
tempDiv = null;
Expand Down Expand Up @@ -192,30 +192,58 @@
}
}

function getStringOffsetFromPointHelper(elem, x, y, range, start, end) {
if (start >= end) {
return null;
}
// At this point, start < end.
var mid = Math.round((start+end)/2);

range.setStart(elem, start);
range.setEnd(elem, mid);
var result0 = null;
if (range.getBoundingClientRect() &&
range.getBoundingClientRect().left <= x && range.getBoundingClientRect().right >= x &&
range.getBoundingClientRect().top <= y && range.getBoundingClientRect().bottom >= y) {
if (start + 1 == mid) {
// Found it.
return {'offset' : start, 'text_node' : elem};
} else {
// Need to recurse on this section.
result0 = getStringOffsetFromPointHelper(elem, x, y, range, start, mid);
}
}

range.setStart(elem, mid);
range.setEnd(elem, end);
var result1 = null;
if (range.getBoundingClientRect() &&
range.getBoundingClientRect().left <= x && range.getBoundingClientRect().right >= x &&
range.getBoundingClientRect().top <= y && range.getBoundingClientRect().bottom >= y) {
if (mid + 1 == end) {
// Found it.
return {'offset' : start, 'text_node' : elem};
} else {
// Need to recurse on this section.
result1 = getStringOffsetFromPointHelper(elem, x, y, range, mid, end);
}
}
return result0 || result1; // At most 1 should be valid.
}

function getStringOffsetFromPoint(elem, x, y) {
try {
if(elem.nodeType == elem.TEXT_NODE) {
var range = elem.ownerDocument.createRange();

range.selectNodeContents(elem);
var str = range.toString();
var currentPos = 0;
var endPos = range.endOffset;
//can't binary search because the rectangles are complicated, two-dimensional
while(currentPos < endPos) {
range.setStart(elem, currentPos);
range.setEnd(elem, currentPos+1);

var tmp = range.getBoundingClientRect();

if(range.getBoundingClientRect() &&
range.getBoundingClientRect().left <= x && range.getBoundingClientRect().right >= x &&
range.getBoundingClientRect().top <= y && range.getBoundingClientRect().bottom >= y) {
range.detach();
return({'string' : str, 'offset' : currentPos, 'text_node' : elem});
}
currentPos += 1;
}
// Binary search on both halves that report true.
var result = getStringOffsetFromPointHelper(elem, x, y, range, 0, range.endOffset);
range.detach();
return({'string' : str,
'offset' : result['offset'],
'text_node' : result['text_node']});
} else {
for(var i = 0; i < elem.childNodes.length; i++) {
var range = elem.childNodes[i].ownerDocument.createRange();
Expand Down
2 changes: 1 addition & 1 deletion manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Hebrew Tooltip Translation",
"version": "3.0.1",
"version": "3.0.2",
"manifest_version": 2,
"description": "Translate Hebrew to English and vice-versa via tooltip",
"permissions": ["https://www.morfix.co.il/*"],
Expand Down

0 comments on commit d81b74f

Please sign in to comment.