plugins/legacy_browser/js/iehacks.js | ●●●●● patch | view | raw | blame | history | |
plugins/legacy_browser/legacy_browser.php | ●●●●● patch | view | raw | blame | history | |
program/js/app.js | ●●●●● patch | view | raw | blame | history |
plugins/legacy_browser/js/iehacks.js
@@ -1,7 +1,8 @@ // 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) @@ -18,3 +19,80 @@ $('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)}; }; plugins/legacy_browser/legacy_browser.php
@@ -25,10 +25,17 @@ // replace jQuery 2.x with 1.x $ts1 = filemtime($this->home . '/js/jquery.min.js'); $ts2 = filemtime($this->home . '/js/iehacks.js'); // put iehacks.js after app.js $args['content'] = preg_replace( '|(<script src="program/js/app(\.min)?\.js\?s=[0-9]+" type="text/javascript"></script>)|', '\\1<script src="plugins/legacy_browser/js/iehacks.js?s=' . $ts2 . '" type="text/javascript"></script>', $args['content'], 1, $count); $args['content'] = preg_replace( '|<script src="program/js/jquery\.min\.js\?s=[0-9]+" type="text/javascript"></script>|', '<script src="plugins/legacy_browser/js/jquery.min.js?s=' . $ts1 . '" type="text/javascript"></script>'."\n" .'<script src="plugins/legacy_browser/js/iehacks.js?s=' . $ts2 . '" type="text/javascript"></script>', '<script src="plugins/legacy_browser/js/jquery.min.js?s=' . $ts1 . '" type="text/javascript"></script>' . ($count ? '' : "\n".'<script src="plugins/legacy_browser/js/iehacks.js?s=' . $ts2 . '" type="text/javascript"></script>'), $args['content'], 1); return $args; program/js/app.js
@@ -7611,7 +7611,7 @@ { var msg = this.env.messages ? this.env.messages[uid] : {}; return msg.mbox || this.env.mailbox; } }; // gets cursor position this.get_caret_pos = function(obj) @@ -7619,89 +7619,31 @@ if (obj.selectionEnd !== undefined) return obj.selectionEnd; 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 this.set_caret_pos = function(obj, pos) { if (obj.setSelectionRange) obj.setSelectionRange(pos, pos); else if (obj.createTextRange) { var range = obj.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); try { if (obj.setSelectionRange) obj.setSelectionRange(pos, pos); } catch(e) {}; // catch Firefox exception if obj is hidden }; // get selected text from an input field // http://stackoverflow.com/questions/7186586/how-to-get-the-selected-text-in-textarea-using-jquery-in-internet-explorer-7 this.get_input_selection = function(obj) { var start = 0, end = 0, normalizedValue, range, textInputRange, len, endRange; var start = 0, end = 0, normalizedValue = ''; if (typeof obj.selectionStart == "number" && typeof obj.selectionEnd == "number") { normalizedValue = obj.value; start = obj.selectionStart; end = obj.selectionEnd; } else { 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) }; return {start: start, end: end, text: normalizedValue.substr(start, end-start)}; }; // disable/enable all fields of a form @@ -7723,9 +7665,7 @@ // remember which elem was disabled before lock if (lock && elm.disabled) this.disabled_form_elements.push(elm); // check this.disabled_form_elements before inArray() as a workaround for FF5 bug // http://bugs.jquery.com/ticket/9873 else if (lock || (this.disabled_form_elements && $.inArray(elm, this.disabled_form_elements)<0)) else if (lock || $.inArray(elm, this.disabled_form_elements) < 0) elm.disabled = lock; } };