From b2034fdfec040a67988e543a911208ef2491ce7a Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Sun, 22 Feb 2015 12:58:46 +0100 Subject: New RoundCube Plugins Git folder --- legacy_browser/js/iehacks.js | 108 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 legacy_browser/js/iehacks.js (limited to 'legacy_browser/js/iehacks.js') diff --git a/legacy_browser/js/iehacks.js b/legacy_browser/js/iehacks.js new file mode 100644 index 0000000..105b7da --- /dev/null +++ b/legacy_browser/js/iehacks.js @@ -0,0 +1,108 @@ + +// Make getElementById() case-sensitive on IE7 +document._getElementById = document.getElementById; +document.getElementById = function(id) +{ + var i = 0, obj = document._getElementById(id); + + if (obj && obj.id != id) + while ((obj = document.all[i]) && obj.id != id) + i++; + + return obj; +} + +// fix missing :last-child selectors +$(document).ready(function() { + if (rcmail && rcmail.env.skin != 'classic') + $('ul.treelist ul').each(function(i, ul) { + $('li:last-child', ul).css('border-bottom', 0); + }); +}); + +// gets cursor position (IE<9) +rcube_webmail.prototype.get_caret_pos = function(obj) +{ + if (document.selection && document.selection.createRange) { + var range = document.selection.createRange(); + if (range.parentElement() != obj) + return 0; + + var gm = range.duplicate(); + if (obj.tagName == 'TEXTAREA') + gm.moveToElementText(obj); + else + gm.expand('textedit'); + + gm.setEndPoint('EndToStart', range); + var p = gm.text.length; + + return p <= obj.value.length ? p : -1; + } + + return obj.value.length; +}; + +// moves cursor to specified position (IE<9) +rcube_webmail.prototype.set_caret_pos = function(obj, pos) +{ + if (obj.createTextRange) { + var range = obj.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + range.select(); + } +}; + +// get selected text from an input field (IE<9) +// http://stackoverflow.com/questions/7186586/how-to-get-the-selected-text-in-textarea-using-jquery-in-internet-explorer-7 +rcube_webmail.prototype.get_input_selection = function(obj) +{ + var start = 0, end = 0, len, + normalizedValue, textInputRange, endRange, + range = document.selection.createRange(); + + if (range && range.parentElement() == obj) { + len = obj.value.length; + normalizedValue = obj.value; //.replace(/\r\n/g, "\n"); + + // create a working TextRange that lives only in the input + textInputRange = obj.createTextRange(); + textInputRange.moveToBookmark(range.getBookmark()); + + // Check if the start and end of the selection are at the very end + // of the input, since moveStart/moveEnd doesn't return what we want + // in those cases + endRange = obj.createTextRange(); + endRange.collapse(false); + + if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { + start = end = len; + } + else { + start = -textInputRange.moveStart("character", -len); + start += normalizedValue.slice(0, start).split("\n").length - 1; + + if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { + end = len; + } + else { + end = -textInputRange.moveEnd("character", -len); + end += normalizedValue.slice(0, end).split("\n").length - 1; + } + } + } + + return {start: start, end: end, text: normalizedValue.substr(start, end-start)}; +}; + +// For IE<9 we have to do it this way +// otherwise the form will be posted to a new window +rcube_webmail.prototype.async_upload_form_frame = function(name) +{ + document.body.insertAdjacentHTML('BeforeEnd', ''); + + return $('iframe[name="' + name + '"]'); +}; -- cgit v1.2.3