From 2f321c66005b16cccbc5a7e28648cba6cedc66a3 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 30 May 2013 08:54:31 -0400
Subject: [PATCH] Open attachments, print and source in popups for consistency - always use open_window() instead of window.open(), so plugins/skins can override popup behaviour

---
 program/js/app.js |   26 +++++++++++---------------
 1 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 36b2f0d..7c4fbc1 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -598,11 +598,12 @@
 
       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('');
+          form.target = win.name;
           form.submit();
         }
         else {
@@ -859,11 +860,8 @@
 
         // 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);
@@ -1047,7 +1045,7 @@
 
       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')
@@ -1057,11 +1055,8 @@
         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':
@@ -1632,7 +1627,7 @@
   };
 
   // open popup window
-  this.open_window = function(url, small)
+  this.open_window = function(url, small, toolbar)
   {
     var win = this.is_framed() ? parent.window : window,
       page = $(win),
@@ -1644,7 +1639,8 @@
       t = (win.screenTop || win.screenY) + 20,
       wname = 'rcmextwin' + new Date().getTime(),
       extwin = window.open(url + (url.match(/\?/) ? '&' : '?') + '_extwin=1', wname,
-        'width='+w+',height='+h+',top='+t+',left='+l+',resizable=yes,toolbar=no,status=no,location=no');
+        '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) {
@@ -1654,7 +1650,7 @@
     // focus window, delayed to bring to front
     window.setTimeout(function() { extwin.focus(); }, 10);
 
-    return wname;
+    return extwin;
   };
 
 

--
Gitblit v1.9.1