diff --git a/mail/inc/class.mail_ui.inc.php b/mail/inc/class.mail_ui.inc.php index 4d03714539..db11b4467a 100644 --- a/mail/inc/class.mail_ui.inc.php +++ b/mail/inc/class.mail_ui.inc.php @@ -169,7 +169,7 @@ class mail_ui { $response = egw_json_response::get(); $windowName = "editMailAccount".self::$icServerID; - $response->call("egw.open_link", egw::link('/index.php', $linkData), $windowName, "600x480"); + $response->call("egw.open_link", egw::link('/index.php', $linkData), $windowName, "600x480",null,true); egw_framework::message($message, 'error'); if ($_GET['menuaction'] == 'mail.mail_ui.index') { diff --git a/phpgwapi/js/jsapi/egw_open.js b/phpgwapi/js/jsapi/egw_open.js index 337ef13d95..004adb0f31 100644 --- a/phpgwapi/js/jsapi/egw_open.js +++ b/phpgwapi/js/jsapi/egw_open.js @@ -238,8 +238,10 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) { * @param string _target optional target / window name * @param string _popup widthxheight, if a popup should be used * @param string _target_app app-name for opener + * @param boolean _check_popup_blocker TRUE check if browser pop-up blocker is on/off, FALSE no check + * - This option only makes sense to be enabled when the open_link requested without user interaction */ - open_link: function(_link, _target, _popup, _target_app) + open_link: function(_link, _target, _popup, _target_app, _check_popup_blocker) { // Log for debugging purposes - don't use navigation here to avoid // flooding log with details already captured by egw.open() @@ -247,7 +249,11 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) { "egw.open_link(_link=%s, _target=%s, _popup=%s, _target_app=%s)", _link,_target,_popup,_target_app ); - + //Check browser pop-up blocker + if (_check_popup_blocker) + { + if (this._check_popupBlocker(_link, _target, _popup, _target_app)) return; + } var url = _link; if (url.indexOf('javascript:') == 0) { @@ -312,6 +318,37 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) { { _wnd.location.href = _url; } + }, + + /** + * Check if browser pop-up blocker is on/off + * + * @param string _link menuaction, EGroupware relative url or a full url (incl. "mailto:" or "javascript:") + * @param string _target optional target / window name + * @param string _popup widthxheight, if a popup should be used + * @param string _target_app app-name for opener + * + * @return boolean returns false if pop-up blocker is off + * - returns true if pop-up blocker is on, + * - and re-call the open_link with provided parameters, after user interaction. + */ + _check_popupBlocker: function(_link, _target, _popup, _target_app) + { + var popup = window.open("","",'top='+(screen.height/2)+',left='+(screen.width/2)+',width=1,height=1,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,dependent=yes'); + + if (!popup||popup == 'undefined'||popup == null) + { + et2_dialog.show_dialog(function(){ + window.egw.open_link(_link, _target, _popup, _target_app); + },egw.lang("The browser popup blocker is on. Please click on OK button to see the pop-up.\n\nIf you would like to not see this message for the next time, allow your browser pop-up blocker to open popups from %1",window.location.hostname) , + "Popup Blocker Warning",{},et2_dialog.BUTTONS_OK,et2_dialog.WARNING_MESSAGE); + return true; + } + else + { + popup.close(); + return false; + } } }; }); diff --git a/phpgwapi/js/webrtc/et2_widget_iframe.js b/phpgwapi/js/webrtc/et2_widget_iframe.js new file mode 100644 index 0000000000..c477b8ef1f --- /dev/null +++ b/phpgwapi/js/webrtc/et2_widget_iframe.js @@ -0,0 +1,146 @@ +/** + * EGroupware eTemplate2 - JS widget class for an iframe + * + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @package etemplate + * @subpackage api + * @link http://www.egroupware.org + * @author Nathan Gray + * @copyright Nathan Gray 2013 + * @version $Id$ + */ + +"use strict"; + +/*egw:uses + et2_core_valueWidget; +*/ + +/** + * @augments et2_valueWidget + */ +var et2_iframe = et2_valueWidget.extend( +{ + attributes: { + 'label': { + 'default': "", + description: "The label is displayed by default in front (for radiobuttons behind) each widget (if not empty). If you want to specify a different position, use a '%s' in the label, which gets replaced by the widget itself. Eg. '%s Name' to have the label Name behind a checkbox. The label can contain variables, as descript for name. If the label starts with a '@' it is replaced by the value of the content-array at this index (with the '@'-removed and after expanding the variables).", + ignore: false, + name: "Label", + translate: true, + type: "string", + }, + "needed": { + "ignore": true + }, + "seamless": { + name: "Seamless", + 'default': true, + description: "Specifies that the iframe should be rendered in a manner that makes it appear to be part of the containing document", + translate: false, + type: "boolean" + }, + "name": { + name: "Name", + "default": "", + description: "Specifies name of frame, to be used as target for links", + type: "string" + } + }, + + /** + * Constructor + * + * @memberOf et2_iframe + */ + init: function() { + this._super.apply(this, arguments); + + // Allow no child widgets + this.supportedWidgetClasses = []; + + this.htmlNode = $j(document.createElement("iframe")); + if(this.options.label) + { + this.htmlNode.append(''+this.options.label+''); + } + this.setDOMNode(this.htmlNode[0]); + }, + + /** + * Set name of iframe (to be used as target for links) + * + * @param _name + */ + set_name: function(_name) { + this.htmlNode.attr('name', this.htmlNode.name = _name); + }, + + /** + * Make it look like part of the containing document + * + * @param _seamless boolean + */ + set_seamless: function(_seamless) { + this.options.seamless = _seamless; + this.htmlNode.attr("seamless", _seamless); + }, + + set_value: function(_value) { + if(typeof _value == "undefined") _value = ""; + + if(_value.trim().indexOf("http") == 0 || _value.indexOf('about:') == 0 || _value[0] == '/') + { + // Value is a URL + this.set_src(_value); + } + else + { + // Value is content + this.set_srcdoc(_value); + } + }, + + /** + * Set the URL for the iframe + * + * Sets the src attribute to the given value + * + * @param _value String URL + */ + set_src: function(_value) { + if(_value.trim() != "") + { + if(_value.trim() == 'about:blank') + { + this.htmlNode.attr("src", _value); + } + else + { + // Load the new page, but display a loader + var loader = $j('
'); + this.htmlNode + .before(loader); + window.setTimeout(jQuery.proxy(function() { + this.htmlNode.attr("src", _value) + .one('load',function() { + loader.remove(); + }); + },this),0); + + } + } + }, + + /** + * Sets the content of the iframe + * + * Sets the srcdoc attribute to the given value + * + * @param _value String Content of a document + */ + set_srcdoc: function(_value) { + this.htmlNode.attr("srcdoc", _value); + } +}); +et2_register_widget(et2_iframe, ["iframe"]); diff --git a/phpgwapi/lang/egw_de.lang b/phpgwapi/lang/egw_de.lang index 16392f5a6e..385a3127cb 100644 --- a/phpgwapi/lang/egw_de.lang +++ b/phpgwapi/lang/egw_de.lang @@ -790,6 +790,7 @@ text color: common de Textfarbe: thailand common de THAILAND the api is current common de Die API ist aktuell the api requires an upgrade common de Die API benötigt eine Aktualisierung +the browser popup blocker is on. please click on ok button to see the pop-up.\n\nif you would like to not see this message for the next time, allow your browser pop-up blocker to open popups from %1 common de Ihr Browser hat das Öffnen eines Popup-Dialogs blockiert. Bitte klicken Sie OK, um das Popup angezeigt zu bekommen.\n\nWenn Sie die Meldung nicht nochmals erhalten wollen, erlauben Sie bitte in den Einstellungen vom Browser für %1 das Öffnen von Popups. the following applications require upgrades common de Die folgenden Anwendungen benötigen eine Aktualisierung the mail server returned common de Der E-Mail-Server liefert zurück there already is a system-user with this name. user's should not have the same name as a systemuser common de Es gibt schon einen System Benutzer mit dem selben Namen. Die Benutzer sollten nicht die gleichen Namen haben, wie die Systembenutzer.