diff options
Diffstat (limited to 'program/js')
-rw-r--r-- | program/js/app.js | 106 | ||||
-rw-r--r-- | program/js/common.js | 115 |
2 files changed, 75 insertions, 146 deletions
diff --git a/program/js/app.js b/program/js/app.js index 101be65a3..d691c9228 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -44,7 +44,9 @@ function rcube_webmail() comm_path: './', blankpage: 'program/resources/blank.gif', recipients_separator: ',', - recipients_delimiter: ', ' + recipients_delimiter: ', ', + popup_width: 1150, + popup_width_small: 900 }; // create protected reference to myself @@ -596,15 +598,16 @@ function rcube_webmail() case 'extwin': if (this.env.action == 'compose') { - var form = this.gui_objects.messageform; + var form = this.gui_objects.messageform, + win = this.open_window(''); $("input[name='_action']", form).val('compose'); form.action = this.url('mail/compose', { _id: this.env.compose_id, _extwin: 1 }); - form.target = this.open_window('', 1100, 900); + form.target = win.name; form.submit(); } else { - this.open_window(this.env.permaurl, 900, 900); + this.open_window(this.env.permaurl, true); } break; @@ -857,11 +860,8 @@ function rcube_webmail() // open attachment in frame if it's of a supported mimetype if (command != 'download-attachment' && mimetype && this.env.mimetypes && $.inArray(mimetype, this.env.mimetypes) >= 0) { - var attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', this.html_identifier('rcubemailattachment'+this.env.uid+props)); - if (attachment_win) { - setTimeout(function(){ attachment_win.focus(); }, 10); + if (this.open_window(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', true, true)) break; - } } this.goto_url('get', qstring+'&_download=1', false); @@ -1045,7 +1045,7 @@ function rcube_webmail() case 'print': if (uid = this.get_single_uid()) { - ref.printwin = window.open(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : '')); + ref.printwin = this.open_window(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : ''), true, true); if (this.printwin) { setTimeout(function(){ ref.printwin.focus(); }, 20); if (this.env.action != 'show') @@ -1055,11 +1055,8 @@ function rcube_webmail() break; case 'viewsource': - if (uid = this.get_single_uid()) { - ref.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)); - if (this.sourcewin) - setTimeout(function(){ ref.sourcewin.focus(); }, 20); - } + if (uid = this.get_single_uid()) + this.open_window(this.env.comm_path+'&_action=viewsource&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true, true); break; case 'download': @@ -1629,19 +1626,28 @@ function rcube_webmail() return 0; }; - this.open_window = function(url, width, height) + // open popup window + this.open_window = function(url, small, toolbar) { - var dh = (window.outerHeight || 0) - (window.innerHeight || 0), - dw = (window.outerWidth || 0) - (window.innerWidth || 0), - sh = screen.availHeight || screen.height, - sw = screen.availWidth || screen.width, - w = Math.min(width, sw), - h = Math.min(height, sh), - l = Math.max(0, (sw - w) / 2 + (screen.left || 0)), - t = Math.max(0, (sh - h) / 2 + (screen.top || 0)), - wname = 'rcmextwin' + new Date().getTime(), - extwin = window.open(url + (url.match(/\?/) ? '&' : '?') + '_extwin=1', wname, - 'width='+(w-dw)+',height='+(h-dh)+',top='+t+',left='+l+',resizable=yes,toolbar=no,status=no,location=no'); + var wname = 'rcmextwin' + new Date().getTime(); + + url += (url.match(/\?/) ? '&' : '?') + '_extwin=1'; + + if (this.env.standard_windows) + extwin = window.open(url, wname); + else { + var win = this.is_framed() ? parent.window : window, + page = $(win), + page_width = page.width(), + page_height = bw.mz ? $('body', win).height() : page.height(), + w = Math.min(small ? this.env.popup_width_small : this.env.popup_width, page_width), + h = page_height, // always use same height + l = (win.screenLeft || win.screenX) + 20, + t = (win.screenTop || win.screenY) + 20, + extwin = window.open(url, wname, + 'width='+w+',height='+h+',top='+t+',left='+l+',resizable=yes,location=no,scrollbars=yes' + +(toolbar ? ',toolbar=yes,menubar=yes,status=yes' : ',toolbar=no,menubar=no,status=no')); + } // write loading... message to empty windows if (!url && extwin.document) { @@ -1651,7 +1657,7 @@ function rcube_webmail() // focus window, delayed to bring to front window.setTimeout(function() { extwin.focus(); }, 10); - return wname; + return extwin; }; @@ -1945,7 +1951,7 @@ function rcube_webmail() } else { if (!preview && this.env.message_extwin && !this.env.extwin) - this.open_window(this.env.comm_path+url, 1000, 1200); + this.open_window(this.env.comm_path+url, true); else this.location_href(this.env.comm_path+url, target, true); @@ -2971,11 +2977,12 @@ function rcube_webmail() // open new compose window if (this.env.compose_extwin && !this.env.extwin) { - this.open_window(url, 1150, 900); + this.open_window(url); } else { this.redirect(url); - window.resizeTo(Math.max(1150, $(window).width()), Math.max(900, $(window).height())); + if (this.env.extwin) + window.resizeTo(Math.max(this.env.popup_width, $(window).width()), $(window).height() + 24); } }; @@ -3348,12 +3355,45 @@ function rcube_webmail() if (!show_sig) show_sig = this.env.show_sig; - var cursor_pos, p = -1, + var i, rx, cursor_pos, p = -1, id = obj.options[obj.selectedIndex].value, input_message = $("[name='_message']"), message = input_message.val(), is_html = ($("input[name='_is_html']").val() == '1'), - sig = this.env.identity; + sig = this.env.identity, + delim = this.env.recipients_delimiter, + headers = ['replyto', 'bcc']; + + // update reply-to/bcc fields with addresses defined in identities + for (i in headers) { + var key = headers[i], + old_val = sig && this.env.identities[sig] ? this.env.identities[sig][key] : '', + new_val = id && this.env.identities[id] ? this.env.identities[id][key] : '', + input = $('[name="_'+key+'"]'), input_val = input.val(); + + // remove old address(es) + if (old_val && input_val) { + rx = new RegExp('\\s*' + RegExp.escape(old_val) + '\\s*'); + input_val = input_val.replace(rx, ''); + } + + // cleanup + rx = new RegExp(RegExp.escape(delim) + '\\s*' + RegExp(delim), 'g'); + input_val = input_val.replace(rx, delim) + rx = new RegExp('^\\s*' + RegExp.escape(delim) + '\\s*$'); + input_val = input_val.replace(rx, '') + + // add new address(es) + if (new_val) { + rx = new RegExp(RegExp.escape(delim) + '\\s*$'); + if (input_val && !rx.test(input_val)) + input_val += delim + ' '; + input_val += new_val + delim + ' '; + } + + if (old_val || new_val) + input.val(input_val).change(); + } // enable manual signature insert if (this.env.signatures && this.env.signatures[id]) { @@ -5765,7 +5805,7 @@ function rcube_webmail() for (c=0, len=repl.length; c < len; c++) { cell = document.createElement('td'); - cell.innerHTML = repl[c].html; + cell.innerHTML = repl[c].html || ''; if (repl[c].id) cell.id = repl[c].id; if (repl[c].className) cell.className = repl[c].className; tr.appendChild(cell); diff --git a/program/js/common.js b/program/js/common.js index 53dce8cc2..de07ec131 100644 --- a/program/js/common.js +++ b/program/js/common.js @@ -251,7 +251,7 @@ remove_listener: function(p) }, /** - * Prevent event propagation and bubbeling + * Prevent event propagation and bubbling */ cancel: function(evt) { @@ -371,117 +371,6 @@ triggerEvent: function(evt, e) }; // end rcube_event_engine.prototype - -/** - * Roundcube generic layer (floating box) class - * - * @constructor - */ -function rcube_layer(id, attributes) -{ - this.name = id; - - // create a new layer in the current document - this.create = function(arg) - { - var l = (arg.x) ? arg.x : 0, - t = (arg.y) ? arg.y : 0, - w = arg.width, - h = arg.height, - z = arg.zindex, - vis = arg.vis, - parent = arg.parent, - obj = document.createElement('DIV'); - - obj.id = this.name; - obj.style.position = 'absolute'; - obj.style.visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden'; - obj.style.left = l+'px'; - obj.style.top = t+'px'; - if (w) - obj.style.width = w.toString().match(/\%$/) ? w : w+'px'; - if (h) - obj.style.height = h.toString().match(/\%$/) ? h : h+'px'; - if (z) - obj.style.zIndex = z; - - if (parent) - parent.appendChild(obj); - else - document.body.appendChild(obj); - - this.elm = obj; - }; - - // create new layer - if (attributes != null) { - this.create(attributes); - this.name = this.elm.id; - } - else // just refer to the object - this.elm = document.getElementById(id); - - if (!this.elm) - return false; - - - // ********* layer object properties ********* - - this.css = this.elm.style; - this.event = this.elm; - this.width = this.elm.offsetWidth; - this.height = this.elm.offsetHeight; - this.x = parseInt(this.elm.offsetLeft); - this.y = parseInt(this.elm.offsetTop); - this.visible = (this.css.visibility=='visible' || this.css.visibility=='show' || this.css.visibility=='inherit') ? true : false; - - - // ********* layer object methods ********* - - // move the layer to a specific position - this.move = function(x, y) - { - this.x = x; - this.y = y; - this.css.left = Math.round(this.x)+'px'; - this.css.top = Math.round(this.y)+'px'; - }; - - // change the layers width and height - this.resize = function(w,h) - { - this.css.width = w+'px'; - this.css.height = h+'px'; - this.width = w; - this.height = h; - }; - - // show or hide the layer - this.show = function(a) - { - if(a == 1) { - this.css.visibility = 'visible'; - this.visible = true; - } - else if(a == 2) { - this.css.visibility = 'inherit'; - this.visible = true; - } - else { - this.css.visibility = 'hidden'; - this.visible = false; - } - }; - - // write new content into a Layer - this.write = function(cont) - { - this.elm.innerHTML = cont; - }; - -}; - - // check if input is a valid email address // By Cal Henderson <cal@iamcal.com> // http://code.iamcal.com/php/rfc822/ @@ -536,7 +425,7 @@ function rcube_clone_object(obj) for (var key in obj) { if (obj[key] && typeof obj[key] === 'object') - out[key] = clone_object(obj[key]); + out[key] = rcube_clone_object(obj[key]); else out[key] = obj[key]; } |