MOve more IE<9 code to legacy_browser

pull/179/head
Aleksander Machniak 10 years ago
parent 3dfb94fe45
commit 378efddbbe

@ -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 @@ $(document).ready(function() {
$('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)};
};

@ -25,10 +25,17 @@ class legacy_browser extends rcube_plugin
// 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;

@ -7611,7 +7611,7 @@ function rcube_webmail()
{
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 @@ function rcube_webmail()
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 @@ function rcube_webmail()
// 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;
}
};

Loading…
Cancel
Save