From cd7324983b15c0236fec79dd221ce2ed837a4b92 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Tue, 15 Sep 2015 16:32:56 +0000 Subject: [PATCH 001/130] Mailvelope backup/restore integration WIP: - Implements Mailvelope installation dialog --- .../templates/default/pgp_installation.xet | 29 ++++++++++++-- phpgwapi/js/jsapi/app_base.js | 39 ++++++++++++------- 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/etemplate/templates/default/pgp_installation.xet b/etemplate/templates/default/pgp_installation.xet index a7cc93e177..9ba6574b03 100644 --- a/etemplate/templates/default/pgp_installation.xet +++ b/etemplate/templates/default/pgp_installation.xet @@ -2,9 +2,30 @@ diff --git a/phpgwapi/js/jsapi/app_base.js b/phpgwapi/js/jsapi/app_base.js index 220ed68ea7..72ce142ee3 100644 --- a/phpgwapi/js/jsapi/app_base.js +++ b/phpgwapi/js/jsapi/app_base.js @@ -1237,7 +1237,7 @@ var AppJS = Class.extend( } }, title: egw.lang('Backup/Restore'), - buttons:[{"button_id": 'close',"text": 'Close', id: 'dialog[close]', image: 'check', "default":true}], + buttons:[{"button_id": 'close',"text": 'Close', id: 'dialog[close]', image: 'cancelled', "default":true}], value: { content: { menu:_content @@ -1271,9 +1271,17 @@ var AppJS = Class.extend( this.mailvelopeInstallationOffer(); } }, - + + /** + * Create a dialog and offers installation option for installing mailvelope plugin + * plus it offers a video tutorials to get the user morte familiar with mailvelope + */ mailvelopeInstallationOffer: function () { + var buttons = [ + {"text": 'Install', id: 'install', image: 'check', "default":true}, + {"text": 'Close', id:'close', image: 'cancelled'} + ]; var dialog = function(_content, _callback) { return et2_createWidget("dialog", { @@ -1284,7 +1292,7 @@ var AppJS = Class.extend( } }, title: egw.lang('PGP Encryption Installation'), - buttons: et2_dialog.BUTTONS_YES_NO, + buttons: buttons, dialog_type: 'info', value: { content: _content @@ -1296,20 +1304,23 @@ var AppJS = Class.extend( }); }; - var content = [{}]; + var content = [ + // Header row should be empty item 0 + {}, + {domain:this.egw.lang('Add your domain as "%1" in options to list of email providers and enable API.', + '*.'+this._mailvelopeDomain()), video:"test", control:"true"} + ]; + dialog(content, function(_button){ - if (_button == et2_dialog.YES_BUTTON) + if (_button == 'install') { - if (typeof chrome != 'undefined' && typeof chrome.webstore != 'undefined') + if (typeof chrome != 'undefined') { - chrome.webstore.install("https://chrome.google.com/webstore/detail/mailvelope/kajibbejlbohfaggdiogboambcijhkke", - function(){ - et2_dialog.alert(lang('Mailvelope addon installation succeded. Now you may configure the options.')); - return; - }, - function(){ - et2_dialog.alert(lang('Mailvelope addon installation faild! Please try agian.')); - }); + // ATM we are not able to trigger mailvelope installation directly + // since the installation should be triggered from the extension + // owner validate website (mailvelope.com), therefore, we just redirect + // user to chrome webstore to install mailvelope from there. + window.open('https://chrome.google.com/webstore/detail/mailvelope/kajibbejlbohfaggdiogboambcijhkke'); } else if (typeof InstallTrigger != 'undefined' && InstallTrigger.enabled()) { From 4479cf64c58a7988943f66d498bff38da9820c16 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Tue, 15 Sep 2015 16:42:52 +0000 Subject: [PATCH 002/130] Mailvelope backup/restore integration WIP: - Add mailvelope installation dialog for mail and infolog --- mail/js/app.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mail/js/app.js b/mail/js/app.js index 3684a89b43..3e13480721 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -4680,9 +4680,7 @@ app.classes.mail = AppJS.extend( { if (typeof mailvelope == 'undefined') { - this.egw.message(this.egw.lang('You need to install Mailvelope plugin available for Chrome and Firefox from %1.','mailvelope.com')+"\n"+ - this.egw.lang('Add your domain as "%1" in options to list of email providers and enable API.', - '*.'+this._mailvelopeDomain()), 'info'); + this.mailvelopeInstallationOffer(); // switch encrypt button off again this.et2.getWidgetById('composeToolbar')._actionManager.getActionById('pgp').set_checked(false); jQuery('button#composeToolbar-pgp').toggleClass('toolbar_toggled'); From 91750f46c936c3ca00d91e331e661b722791c72a Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Tue, 15 Sep 2015 23:59:31 +0000 Subject: [PATCH 003/130] Access dialog - If current app has no special support, show general dialog instead of message - Sort apps in add dialog - Filter app list (filter2) to all apps for run rights, or only supporting apps otherwise --- admin/inc/class.admin_acl.inc.php | 35 ++++++++++++++++++++++++---- admin/js/app.js | 10 ++++++-- phpgwapi/js/jsapi/egw_preferences.js | 4 ++-- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/admin/inc/class.admin_acl.inc.php b/admin/inc/class.admin_acl.inc.php index 5eb27d0253..f59745f52e 100644 --- a/admin/inc/class.admin_acl.inc.php +++ b/admin/inc/class.admin_acl.inc.php @@ -248,6 +248,34 @@ class admin_acl } //error_log(__METHOD__."(".array2string($query).") returning ".$total); + // Get supporting or all apps for filter2 depending on filter + if($query['filter'] == 'run') + { + $rows['sel_options']['filter2'] = array( + '' => lang('All applications'), + )+etemplate_widget_menupopup::app_options('enabled'); + } + else + { + $rows['sel_options']['filter2'] = array( + array('value' => '', 'label' => lang('All applications')) + ); + $apps = $GLOBALS['egw']->hooks->process(array( + 'location' => 'acl_rights', + 'owner' => $query['account_id'], + ), array(), true); + foreach($apps as $appname => $rights) + { + $rows['sel_options']['filter2'][] = array( + 'value' => $appname, + 'label' => lang($appname) + ); + } + usort($rows['sel_options']['filter2'], function($a,$b) { + return strcasecmp($a['label'], $b['label']); + }); + } + return $total; } @@ -388,12 +416,9 @@ class admin_acl 'other' => lang('Access to %1 data by others', $user), 'own' => lang('%1 access to other data', $user), 'run' => lang('%1 run rights for applications', $user), - ), - 'filter2' => array( - '' => lang('All applications'), - )+etemplate_widget_menupopup::app_options('enabled'), + ) ); - + $tpl->exec('admin.admin_acl.index', $content, $sel_options); } diff --git a/admin/js/app.js b/admin/js/app.js index 5709a92f4e..6f3ebab143 100644 --- a/admin/js/app.js +++ b/admin/js/app.js @@ -447,11 +447,17 @@ app.classes.admin = AppJS.extend( else { // Restrict application selectbox to only apps that support ACL - sel_options.acl_appname = {}; + sel_options.acl_appname = []; for(var app in acl_rights) { - sel_options.acl_appname[app] = this.egw.lang(app); + sel_options.acl_appname.push({value: app, label: this.egw.lang(app)}); } + // Sort list + sel_options.acl_appname.sort(function(a,b) { + if(a.label > b.label) return 1; + if(a.label < b.label) return -1; + return 0; + }); } } diff --git a/phpgwapi/js/jsapi/egw_preferences.js b/phpgwapi/js/jsapi/egw_preferences.js index f3d16e1251..36c2332c3b 100644 --- a/phpgwapi/js/jsapi/egw_preferences.js +++ b/phpgwapi/js/jsapi/egw_preferences.js @@ -116,7 +116,7 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function() { var current_app = this.app_name(); var query = {current_app: current_app}; // give warning, if app does not support given type, but all apps link to common prefs, if they dont support prefs themselfs - if ($j.isArray(apps) && $j.inArray(current_app, apps) == -1 && name != 'prefs' || + if ($j.isArray(apps) && $j.inArray(current_app, apps) == -1 && (name != 'prefs' && name != 'acl') || !$j.isArray(apps) && (typeof apps[current_app] == 'undefined' || !apps[current_app])) { egw_message(egw.lang('Not supported by current application!'), 'warning'); @@ -134,7 +134,7 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function() { case 'acl': query.menuaction='preferences.preferences_acl.index'; - query.acl_app=current_app; + if ($j.inArray(current_app, apps) != -1) query.acl_app=current_app; egw.open_link(egw.link(url, query), '_blank', '900x450'); break; From e276fa10a2939adc6cc683a722e8f121bb1f7d78 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 16 Sep 2015 11:36:51 +0000 Subject: [PATCH 004/130] * Calendar/Filemanager: display warning when clicking on an iCal file with more then 1 event, only first one is displayed --- calendar/inc/class.calendar_uiforms.inc.php | 12 +++++++++--- calendar/lang/egw_de.lang | 1 + calendar/lang/egw_en.lang | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index ab86994030..5de19f9b73 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -1216,8 +1216,9 @@ class calendar_uiforms extends calendar_ui * edit_single int timestamp of single event edited, unset/null otherwise * @param string $msg ='' msg to display * @param mixed $link_to_id ='' from or for the link-widget + * @param string $msg_type =null default automatic detect, if it contains "error" */ - function edit($event=null,$preserv=null,$msg='',$link_to_id='') + function edit($event=null,$preserv=null,$msg='',$link_to_id='',$msg_type=null) { $sel_options = array( 'recur_type' => &$this->bo->recur_types, @@ -1272,7 +1273,7 @@ class calendar_uiforms extends calendar_ui if (!empty($_GET['ical'])) { $ical = new calendar_ical(); - if (!($events = $ical->icaltoegw($_GET['ical'], '', 'utf-8')) || count($events) != 1) + if (!($events = $ical->icaltoegw($_GET['ical'], '', 'utf-8'))) { error_log(__METHOD__."('$_GET[ical]') error parsing iCal!"); $msg = lang('Error: importing the iCal'); @@ -1280,6 +1281,11 @@ class calendar_uiforms extends calendar_ui } else { + if (count($events) > 1) + { + $msg = lang('%1 events in iCal file, only first one imported and displayed!', count($events)); + $msg_type = 'notice'; // no not hide automatic + } // as icaltoegw returns timestamps in server-time, we have to convert them here to user-time $this->bo->db2data($events, 'ts'); @@ -1429,9 +1435,9 @@ class calendar_uiforms extends calendar_ui 'edit_single' => $preserv['edit_single'], // need to be in content too, as it is used in the template 'tabs' => $preserv['tabs'], 'view' => $view, - 'msg' => $msg, 'query_delete_exceptions' => (int)($event['recur_type'] && $event['recur_exception']), )); + egw_framework::message($msg, $msg_type); $content['duration'] = $content['end'] - $content['start']; if (isset($this->durations[$content['duration']])) $content['end'] = ''; diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang index 84b65569c5..272c77e7e2 100644 --- a/calendar/lang/egw_de.lang +++ b/calendar/lang/egw_de.lang @@ -2,6 +2,7 @@ %1 days calendar de %1 Tage %1 event(s) %2 calendar de %1 Termin(e) %2 %1 event(s) %2, %3 failed because of insufficent rights !!! calendar de %1 Termin(e) %2, %3 wegen fehlender Rechte !!! +%1 events in ical file, only first one imported and displayed! calendar de %1 Termine in der iCal Datei, nur der erste wurde importiert und angezeigt! %1 hours calendar de %1 Stunden %1 minutes calendar de %1 Minuten %1 participants removed because of missing invite grants calendar de %1 Teilnehmer entfernt wegen fehlender Einladungsrechte diff --git a/calendar/lang/egw_en.lang b/calendar/lang/egw_en.lang index edc76a71b0..538584a8a2 100644 --- a/calendar/lang/egw_en.lang +++ b/calendar/lang/egw_en.lang @@ -2,6 +2,7 @@ %1 days calendar en %1 days %1 event(s) %2 calendar en %1 event(s) %2 %1 event(s) %2, %3 failed because of insufficent rights !!! calendar en %1 event(s) %2, %3 failed because of insufficient rights! +%1 events in ical file, only first one imported and displayed! calendar en %1 events in iCal file, only first one imported and displayed! %1 hours calendar en %1 hours %1 minutes calendar en %1 minutes %1 participants removed because of missing invite grants calendar en %1 participants removed because of missing invite grants. From 383052c51690fe7b3060a19b68e9dd1599051ebb Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Wed, 16 Sep 2015 13:32:15 +0000 Subject: [PATCH 005/130] Fix broken sidebox app header refresh caused by commit 53643 --- phpgwapi/js/framework/fw_base.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpgwapi/js/framework/fw_base.js b/phpgwapi/js/framework/fw_base.js index bb43ea4363..b45691bd26 100644 --- a/phpgwapi/js/framework/fw_base.js +++ b/phpgwapi/js/framework/fw_base.js @@ -176,7 +176,7 @@ var fw_base = Class.extend({ !(this.applications[_app.appName].app_refresh) && _app.browser.iframe == null && _url == _app.browser.currentLocation // links with load may needs to be reloaded e.g. admin applications global cats - && (!_app.browser.currentLocation.match(/&load=[^&]+/g) && _app == 'admin')) + && !(_app.browser.currentLocation.match(/&load=[^&]+/g) && _app == 'admin')) { // Just do an egw_refresh to avoid a full reload egw_refresh('',_app.appName); From 36f5364a85f6447a3e8550c7d3d9a9ce613f8e04 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Wed, 16 Sep 2015 13:40:00 +0000 Subject: [PATCH 006/130] WIP toggle sidebar menu: - Implement reload icon in a better position --- pixelegg/css/mobile.css | 35 ++++-------------------- pixelegg/css/pixelegg.css | 35 ++++-------------------- pixelegg/less/layout_raster_sidebar.less | 35 +++++++++--------------- 3 files changed, 23 insertions(+), 82 deletions(-) diff --git a/pixelegg/css/mobile.css b/pixelegg/css/mobile.css index 9c3b0d480c..de44759f33 100644 --- a/pixelegg/css/mobile.css +++ b/pixelegg/css/mobile.css @@ -4738,33 +4738,6 @@ td.message span.message { font-size: 1.4em; color: #000000; padding-top: .8em; - background-image: url(../images/reload.png); - background-repeat: no-repeat; - background-size: 16px; - background-position-x: 74%; - background-position-y: 60%; - background-position: 74%; -} -#egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active h1:active { - background-image: url(../images/ajax-loader.gif) !important; -} -#egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:hover { - -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6); - -moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6); - box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6); - -webkit-border-top-right-radius: 5px; - -webkit-border-bottom-right-radius: 0px; - -webkit-border-bottom-left-radius: 0px; - -webkit-border-top-left-radius: 27px; - -moz-border-radius-topright: 5px; - -moz-border-radius-bottomright: 0px; - -moz-border-radius-bottomleft: 0px; - -moz-border-radius-topleft: 27px; - border-top-right-radius: 5px; - border-bottom-right-radius: 0px; - border-bottom-left-radius: 0px; - border-top-left-radius: 27px; - /*.background-clip(padding-box);*/ } #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:active { -webkit-box-shadow: inset 1px 2px 1px rgba(0, 0, 0, 0.5); @@ -4784,6 +4757,9 @@ td.message span.message { border-top-left-radius: 27px; /*.background-clip(padding-box);*/ } +#egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:hover img { + content: url(../images/reload.png); +} #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:focus { background-image: url("../images/ajax-loader.gif"); background-repeat: no-repeat; @@ -4803,8 +4779,7 @@ td.message span.message { height: 16px; } #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active .egw_fw_ui_ajaxloader { - margin-top: -15%; - margin-right: 25%; + margin-top: -26px; } #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_content { display: block; @@ -4997,7 +4972,7 @@ td.message span.message { margin-top: 0; margin-bottom: -30px; float: right; - margin-right: 5px; + margin-right: -15px; } #egw_fw_sidebar #egw_fw_toggler span { background-color: transparent; diff --git a/pixelegg/css/pixelegg.css b/pixelegg/css/pixelegg.css index 38af34f725..ed3c6b4b4f 100644 --- a/pixelegg/css/pixelegg.css +++ b/pixelegg/css/pixelegg.css @@ -4727,33 +4727,6 @@ td.message span.message { font-size: 1.4em; color: #000000; padding-top: .8em; - background-image: url(../images/reload.png); - background-repeat: no-repeat; - background-size: 16px; - background-position-x: 74%; - background-position-y: 60%; - background-position: 74%; -} -#egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active h1:active { - background-image: url(../images/ajax-loader.gif) !important; -} -#egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:hover { - -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6); - -moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6); - box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.6); - -webkit-border-top-right-radius: 5px; - -webkit-border-bottom-right-radius: 0px; - -webkit-border-bottom-left-radius: 0px; - -webkit-border-top-left-radius: 27px; - -moz-border-radius-topright: 5px; - -moz-border-radius-bottomright: 0px; - -moz-border-radius-bottomleft: 0px; - -moz-border-radius-topleft: 27px; - border-top-right-radius: 5px; - border-bottom-right-radius: 0px; - border-bottom-left-radius: 0px; - border-top-left-radius: 27px; - /*.background-clip(padding-box);*/ } #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:active { -webkit-box-shadow: inset 1px 2px 1px rgba(0, 0, 0, 0.5); @@ -4773,6 +4746,9 @@ td.message span.message { border-top-left-radius: 27px; /*.background-clip(padding-box);*/ } +#egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:hover img { + content: url(../images/reload.png); +} #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active:focus { background-image: url("../images/ajax-loader.gif"); background-repeat: no-repeat; @@ -4792,8 +4768,7 @@ td.message span.message { height: 16px; } #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_header_active .egw_fw_ui_ajaxloader { - margin-top: -15%; - margin-right: 25%; + margin-top: -26px; } #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_scrollarea_outerdiv .egw_fw_ui_sidemenu_entry_content { display: block; @@ -4986,7 +4961,7 @@ td.message span.message { margin-top: 0; margin-bottom: -30px; float: right; - margin-right: 5px; + margin-right: -15px; } #egw_fw_sidebar #egw_fw_toggler span { background-color: transparent; diff --git a/pixelegg/less/layout_raster_sidebar.less b/pixelegg/less/layout_raster_sidebar.less index 7b4d3d230e..739c2c4e33 100644 --- a/pixelegg/less/layout_raster_sidebar.less +++ b/pixelegg/less/layout_raster_sidebar.less @@ -54,11 +54,11 @@ // DRAG AND DROP div.ui-sortable { - div { - padding: 3px 0 1px 3px; - cursor: pointer; - } - } + div { + padding: 3px 0 1px 3px; + cursor: pointer; + } + } //#################################################### @@ -120,23 +120,14 @@ img {padding-left: 9px; padding-top: 6px; height: 18px;} - h1 { - text-transform: uppercase; - font-size: 1.4em; - .color_100_gray; - padding-top: .8em; - background-image: url(../images/reload.png); - background-repeat: no-repeat; - background-size: 16px; - background-position-x: 74%; - background-position-y: 60%; - background-position: 74%; - &:active {background-image: url(../images/ajax-loader.gif) !important;} - } + h1 {text-transform: uppercase;font-size: 1.4em;.color_100_gray;padding-top: .8em;} - &:hover {.box_shadow_standard_light_hover; .border_radius ( 5px, 0px, 0px, 27px );} &:active {.box_shadow_standard_light_active; .border_radius ( 5px, 0px, 0px, 27px );} - + &:hover { + img { + content: url(../images/reload.png); + } + } &:focus { background-image: url("../images/ajax-loader.gif"); background-repeat: no-repeat; @@ -153,7 +144,7 @@ .dimension_width_height_s; } - .egw_fw_ui_ajaxloader {margin-top: -15%;margin-right: 25%;} + .egw_fw_ui_ajaxloader {margin-top: -26px;} } @@ -349,7 +340,7 @@ margin-top: 0; margin-bottom: -30px; float: right; - margin-right:5px; + margin-right:-15px; span { background-color: transparent; From d3cd05165d9eb4725ec373c5caa90b1134b9bb0b Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Wed, 16 Sep 2015 14:07:56 +0000 Subject: [PATCH 007/130] Fix mail TO field is not getting focused, and initial resize does not work --- mail/js/app.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mail/js/app.js b/mail/js/app.js index 3e13480721..9efa711821 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -245,15 +245,16 @@ app.classes.mail = AppJS.extend( }); /*Trigger compose_resizeHandler after the CKEditor is fully loaded*/ jQuery('#mail-compose').on ('load',function() { - window.setTimeout(function(){that.compose_resizeHandler();}, 300); + window.setTimeout(function(){ + that.compose_fieldExpander(); + }, 300); }); + //Resize compose after window resize to not getting scrollbar jQuery(window).on ('resize',function() { that.compose_resizeHandler(); }); - this.compose_fieldExpander(); - //Call drag_n_drop initialization for emails on compose this.init_dndCompose(); From 5de5c828134ee9cb1d26ffc1738a46cfaf2c0098 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Wed, 16 Sep 2015 15:01:52 +0000 Subject: [PATCH 008/130] Mailvelope backup/restore integration WIP: - Add some translation --- etemplate/templates/default/pgp_installation.xet | 2 +- phpgwapi/lang/egw_de.lang | 3 +++ phpgwapi/lang/egw_en.lang | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/etemplate/templates/default/pgp_installation.xet b/etemplate/templates/default/pgp_installation.xet index 9ba6574b03..ce748669ed 100644 --- a/etemplate/templates/default/pgp_installation.xet +++ b/etemplate/templates/default/pgp_installation.xet @@ -14,7 +14,7 @@ - +