summaryrefslogtreecommitdiff
path: root/program/js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js')
-rw-r--r--program/js/app.js152
-rw-r--r--program/js/common.js7
-rw-r--r--program/js/googiespell.js4
-rw-r--r--program/js/list.js4
4 files changed, 96 insertions, 71 deletions
diff --git a/program/js/app.js b/program/js/app.js
index e8bb6c1a7..48de21764 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -976,7 +976,7 @@ function rcube_webmail()
// do reply-list, when list is detected and popup menu wasn't used
url._all = (!props && this.commands['reply-list'] ? 'list' : 'all');
else if (command == 'reply-list')
- url._all = list;
+ url._all = 'list';
this.goto_url('compose', url, true);
}
@@ -1447,29 +1447,21 @@ function rcube_webmail()
this.doc_mouse_up = function(e)
{
- var model, list, li, id;
+ var model, list, id;
// ignore event if jquery UI dialog is open
if ($(rcube_event.get_target(e)).closest('.ui-dialog, .ui-widget-overlay').length)
return;
- if (list = this.message_list) {
- if (!rcube_mouse_is_over(e, list.list.parentNode))
- list.blur();
- else
- list.focus();
+ if (list = this.message_list)
model = this.env.mailboxes;
- }
- else if (list = this.contact_list) {
- if (!rcube_mouse_is_over(e, list.list.parentNode))
- list.blur();
- else
- list.focus();
+ else if (list = this.contact_list)
model = this.env.contactfolders;
- }
- else if (this.ksearch_value) {
+ else if (this.ksearch_value)
this.ksearch_blur();
- }
+
+ if (list && !rcube_mouse_is_over(e, list.list.parentNode))
+ list.blur();
// handle mouse release when dragging
if (this.drag_active && model && this.env.last_folder_target) {
@@ -1546,14 +1538,17 @@ function rcube_webmail()
if (list.multi_selecting || !this.env.contentframe)
return;
- if (list.get_single_selection() && window.frames && window.frames[this.env.contentframe]) {
- if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)>=0) {
- if (this.preview_timer)
- clearTimeout(this.preview_timer);
- if (this.preview_read_timer)
- clearTimeout(this.preview_read_timer);
- this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, 200);
- }
+ if (list.get_single_selection())
+ return;
+
+ var win = this.get_frame_window(this.env.contentframe);
+
+ if (win && win.location.href.indexOf(this.env.blankpage)>=0) {
+ if (this.preview_timer)
+ clearTimeout(this.preview_timer);
+ if (this.preview_read_timer)
+ clearTimeout(this.preview_read_timer);
+ this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, 200);
}
};
@@ -1918,12 +1913,12 @@ function rcube_webmail()
if (!id)
return;
- var target = window,
+ var win, target = window,
action = preview ? 'preview': 'show',
url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox);
- if (preview && this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
- target = window.frames[this.env.contentframe];
+ if (preview && (win = this.get_frame_window(this.env.contentframe))) {
+ target = win;
url += '&_framed=1';
}
@@ -1960,20 +1955,37 @@ function rcube_webmail()
this.show_contentframe = function(show)
{
- var frm, win;
- if (this.env.contentframe && (frm = $('#'+this.env.contentframe)) && frm.length) {
- if (!show && (win = window.frames[this.env.contentframe])) {
+ var frame, win, name = this.env.contentframe;
+
+ if (name && (frame = this.get_frame_element(name))) {
+ if (!show && (win = this.get_frame_window(name))) {
if (win.location && win.location.href.indexOf(this.env.blankpage)<0)
win.location.href = this.env.blankpage;
}
else if (!bw.safari && !bw.konq)
- frm[show ? 'show' : 'hide']();
- }
+ $(frame)[show ? 'show' : 'hide']();
+ }
if (!show && this.busy)
this.set_busy(false, null, this.env.frame_lock);
};
+ this.get_frame_element = function(id)
+ {
+ var frame;
+
+ if (id && (frame = document.getElementById(id)))
+ return frame;
+ };
+
+ this.get_frame_window = function(id)
+ {
+ var frame = this.get_frame_element(id);
+
+ if (frame && frame.name && window.frames)
+ return window.frames[frame.name];
+ };
+
this.lock_frame = function()
{
if (!this.env.frame_lock)
@@ -2017,7 +2029,7 @@ function rcube_webmail()
// list messages of a specific mailbox
this.list_mailbox = function(mbox, page, sort, url)
{
- var target = window;
+ var win, target = window;
if (typeof url != 'object')
url = {};
@@ -2056,8 +2068,8 @@ function rcube_webmail()
return;
}
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
- target = window.frames[this.env.contentframe];
+ if (win = this.get_frame_window(this.env.contentframe)) {
+ target = win;
url._framed = 1;
}
@@ -2652,34 +2664,37 @@ function rcube_webmail()
// set a specific flag to one or more messages
this.mark_message = function(flag, uid)
{
- var a_uids = [], r_uids = [], len, n, id,
- selection = this.message_list ? this.message_list.get_selection() : [];
+ var a_uids = [], r_uids = [], len, n, id, selection,
+ list = this.message_list;
if (uid)
a_uids[0] = uid;
else if (this.env.uid)
a_uids[0] = this.env.uid;
- else if (this.message_list) {
+ else if (list) {
+ selection = list.get_selection();
for (n=0, len=selection.length; n<len; n++) {
a_uids.push(selection[n]);
}
}
- if (!this.message_list)
+ if (!list)
r_uids = a_uids;
- else
+ else {
+ list.focus();
for (n=0, len=a_uids.length; n<len; n++) {
id = a_uids[n];
- if ((flag=='read' && this.message_list.rows[id].unread)
- || (flag=='unread' && !this.message_list.rows[id].unread)
- || (flag=='delete' && !this.message_list.rows[id].deleted)
- || (flag=='undelete' && this.message_list.rows[id].deleted)
- || (flag=='flagged' && !this.message_list.rows[id].flagged)
- || (flag=='unflagged' && this.message_list.rows[id].flagged))
+ if ((flag=='read' && list.rows[id].unread)
+ || (flag=='unread' && !list.rows[id].unread)
+ || (flag=='delete' && !list.rows[id].deleted)
+ || (flag=='undelete' && list.rows[id].deleted)
+ || (flag=='flagged' && !list.rows[id].flagged)
+ || (flag=='unflagged' && list.rows[id].flagged))
{
r_uids.push(id);
}
}
+ }
// nothing to do
if (!r_uids.length && !this.select_all_mode)
@@ -4020,7 +4035,7 @@ function rcube_webmail()
this.list_contacts = function(src, group, page)
{
- var folder, url = {},
+ var win, folder, url = {},
target = window;
if (!src)
@@ -4052,8 +4067,8 @@ function rcube_webmail()
return;
}
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
- target = window.frames[this.env.contentframe];
+ if (win = this.get_frame_window(this.env.contentframe)) {
+ target = win;
url._framed = 1;
}
@@ -4109,11 +4124,11 @@ function rcube_webmail()
// load contact record
this.load_contact = function(cid, action, framed)
{
- var url = {}, target = window;
+ var win, url = {}, target = window;
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+ if (win = this.get_frame_window(this.env.contentframe)) {
url._framed = 1;
- target = window.frames[this.env.contentframe];
+ target = win;
this.show_contentframe(true);
// load dummy content
@@ -4731,11 +4746,11 @@ function rcube_webmail()
// load advanced search page
this.advanced_search = function()
{
- var url = {_form: 1, _action: 'search'}, target = window;
+ var win, url = {_form: 1, _action: 'search'}, target = window;
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+ if (win = this.get_frame_window(this.env.contentframe)) {
url._framed = 1;
- target = window.frames[this.env.contentframe];
+ target = win;
this.contact_list.clear_selection();
}
@@ -4857,13 +4872,13 @@ function rcube_webmail()
// preferences section select and load options frame
this.section_select = function(list)
{
- var id = list.get_single_selection(), target = window,
+ var win, id = list.get_single_selection(), target = window,
url = {_action: 'edit-prefs', _section: id};
if (id) {
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+ if (win = this.get_frame_window(this.env.contentframe)) {
url._framed = 1;
- target = window.frames[this.env.contentframe];
+ target = win;
}
this.location_href(url, target, true);
}
@@ -4886,13 +4901,12 @@ function rcube_webmail()
if (action == 'edit-identity' && (!id || id == this.env.iid))
return false;
- var target = window,
+ var win, target = window,
url = {_action: action, _iid: id};
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+ if (win = this.get_frame_window(this.env.contentframe)) {
url._framed = 1;
- target = window.frames[this.env.contentframe];
- document.getElementById(this.env.contentframe).style.visibility = 'inherit';
+ target = win;
}
if (action && (id || action == 'add-identity')) {
@@ -5268,14 +5282,14 @@ function rcube_webmail()
// when user select a folder in manager
this.show_folder = function(folder, path, force)
{
- var target = window,
+ var win, target = window,
url = '&_action=edit-folder&_mbox='+urlencode(folder);
if (path)
url += '&_path='+urlencode(path);
- if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
- target = window.frames[this.env.contentframe];
+ if (win = this.get_frame_window(this.env.contentframe)) {
+ target = win;
url += '&_framed=1';
}
@@ -6585,6 +6599,12 @@ function rcube_webmail()
return 0;
};
+ // Cookie setter
+ this.set_cookie = function(name, value, expires)
+ {
+ setCookie(name, value, expires, this.env.cookie_path, this.env.cookie_domain, this.env.cookie_secure);
+ }
+
} // end object rcube_webmail
@@ -6615,6 +6635,8 @@ rcube_webmail.long_subject_title_ie = function(elem, indent)
}
};
+rcube_webmail.prototype.get_cookie = getCookie;
+
// copy event engine prototype
rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener;
rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener;
diff --git a/program/js/common.js b/program/js/common.js
index fdef3453e..f9e945c05 100644
--- a/program/js/common.js
+++ b/program/js/common.js
@@ -494,12 +494,15 @@ function rcube_check_email(input, inline)
atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+',
quoted_pair = '\\x5c[\\x00-\\x7f]',
quoted_string = '\\x22('+qtext+'|'+quoted_pair+')*\\x22',
+ ipv4 = '\\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\\]',
+ ipv6 = '\\[IPv6:[0-9a-f:.]+\\]',
+ ip_addr = '(' + ipv4 + ')|(' + ipv6 + ')',
// Use simplified domain matching, because we need to allow Unicode characters here
// So, e-mail address should be validated also on server side after idn_to_ascii() use
//domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d',
//sub_domain = '('+atom+'|'+domain_literal+')',
// allow punycode/unicode top-level domain
- domain = '([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})',
+ domain = '(('+ip_addr+')|(([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})))',
// ICANN e-mail test (http://idn.icann.org/E-mail_test)
icann_domains = [
'\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631',
@@ -527,7 +530,6 @@ function rcube_check_email(input, inline)
return false;
};
-
// recursively copy an object
function rcube_clone_object(obj)
{
@@ -635,6 +637,7 @@ function getCookie(name)
return unescape(dc.substring(begin + prefix.length, end));
};
+// deprecated aliases, to be removed, use rcmail.set_cookie/rcmail.get_cookie
roundcube_browser.prototype.set_cookie = setCookie;
roundcube_browser.prototype.get_cookie = getCookie;
diff --git a/program/js/googiespell.js b/program/js/googiespell.js
index 9f1b41bb2..478858bac 100644
--- a/program/js/googiespell.js
+++ b/program/js/googiespell.js
@@ -25,7 +25,7 @@ var GOOGIE_CUR_LANG,
function GoogieSpell(img_dir, server_url, has_dict)
{
var ref = this,
- cookie_value = getCookie('language');
+ cookie_value = rcmail.get_cookie('language');
GOOGIE_CUR_LANG = cookie_value != null ? cookie_value : GOOGIE_DEFAULT_LANG;
@@ -150,7 +150,7 @@ this.setCurrentLanguage = function(lan_code)
//Set cookie
var now = new Date();
now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);
- setCookie('language', lan_code, now);
+ rcmail.set_cookie('language', lan_code, now);
};
this.setForceWidthHeight = function(width, height)
diff --git a/program/js/list.js b/program/js/list.js
index e84124b7c..1457382a4 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -231,8 +231,8 @@ focus: function(e)
}
}
- // Un-focus already focused elements
- $(document.activeElement).blur();
+ // Un-focus already focused elements (#1487123, #1487316, #1488600, #1488620)
+ $(':focus:not(body)').blur();
$('iframe').each(function() { this.blur(); });
if (e || (e = window.event))