| | |
| | | |
| | | // Make getElementById() case-sensitive on IE7 |
| | | document._getElementById = document.getElementById; |
| | | document.getElementById = function(id) { |
| | | document.getElementById = function(id) |
| | | { |
| | | var i = 0, obj = document._getElementById(id); |
| | | |
| | | if (obj && obj.id != id) |
| | |
| | | $('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)}; |
| | | }; |