diff --git a/api/js/egw_action/EgwActionObjectInterface.ts b/api/js/egw_action/EgwActionObjectInterface.ts index db83621dcd..ef7433b40d 100644 --- a/api/js/egw_action/EgwActionObjectInterface.ts +++ b/api/js/egw_action/EgwActionObjectInterface.ts @@ -23,7 +23,7 @@ export interface EgwActionObjectInterface { //properties id?:string _state: number; - handlers : { [type : string]? : [{ type : string, listener : Function }] }; + handlers : { [type : string] : [{ type : string, listener : Function }] }; stateChangeCallback: Function; stateChangeContext: any; reconnectActionsCallback: Function; diff --git a/api/js/egw_action/EgwDragDropShoelaceTree.ts b/api/js/egw_action/EgwDragDropShoelaceTree.ts index 21e76e407b..027d2bdd19 100644 --- a/api/js/egw_action/EgwDragDropShoelaceTree.ts +++ b/api/js/egw_action/EgwDragDropShoelaceTree.ts @@ -55,13 +55,18 @@ export class EgwDragDropShoelaceTree extends egwActionObjectInterface{ n.classList.remove("draggedOver", "drop-hover"); }); target.target.classList.add("draggedOver", "drop-hover"); - this.timeouts[target.target.id] = setTimeout(() => + + // Open nodes with children after a wait + if(target.target.hasAttribute("lazy") || target.target.querySelector(target.target.nodeName)) { - if(target.target.classList.contains("draggedOver")) + this.timeouts[target.target.id] = setTimeout(() => { - (target.target).expanded = true - } - }, EXPAND_FOLDER_ON_DRAG_DROP_TIMEOUT) + if(target.target.classList.contains("draggedOver")) + { + (target.target).expanded = true + } + }, EXPAND_FOLDER_ON_DRAG_DROP_TIMEOUT) + } } else if(egw_event == EGW_AI_DRAG_OUT) { diff --git a/api/js/egw_action/EgwPopupActionImplementation.ts b/api/js/egw_action/EgwPopupActionImplementation.ts index 3f2fdecdab..09d5688e8d 100644 --- a/api/js/egw_action/EgwPopupActionImplementation.ts +++ b/api/js/egw_action/EgwPopupActionImplementation.ts @@ -526,7 +526,8 @@ export class EgwPopupActionImplementation implements EgwActionImplementation { const tree = {"root": []}; // Automatically add in Drag & Drop actions - if (this.auto_paste && !window.egwIsMobile()&& !this._context.event.type.match(/touch/)) { + if(this.auto_paste && !window.egwIsMobile() && !this._context.event?.type.match(/touch/)) + { this._addCopyPaste(_links, _selected); } diff --git a/api/js/egw_action/egw_action.ts b/api/js/egw_action/egw_action.ts index e5b51b318a..edbde085d7 100755 --- a/api/js/egw_action/egw_action.ts +++ b/api/js/egw_action/egw_action.ts @@ -388,21 +388,26 @@ export class egwDragAction extends EgwDragAction { }; })() -let _dragActionImpl = null; - export function getDragImplementation() { - if (!_dragActionImpl) { - _dragActionImpl = new EgwDragActionImplementation(); + if(typeof window["_egwActionImpls"] != "object") + { + window["_egwActionImpls"] = {}; + } + if(!window["_egwActionImpls"]._dragActionImpl) + { + window["_egwActionImpls"]._dragActionImpl = new EgwDragActionImplementation(); } - return _dragActionImpl; + return window["_egwActionImpls"]._dragActionImpl; } - -let _dropActionImpl = null; - export function getDropImplementation() { - if (!_dropActionImpl) { - _dropActionImpl = new egwDropActionImplementation(); + if(typeof window["_egwActionImpls"] != "object") + { + window["_egwActionImpls"] = {}; + } + if(!window["_egwActionImpls"]._dropActionImpl) + { + window["_egwActionImpls"]._dropActionImpl = new egwDropActionImplementation(); } - return _dropActionImpl; + return window["_egwActionImpls"]._dropActionImpl; } \ No newline at end of file diff --git a/api/js/egw_action/egw_keymanager.ts b/api/js/egw_action/egw_keymanager.ts index 3a3e4a0574..cb528d49c2 100755 --- a/api/js/egw_action/egw_keymanager.ts +++ b/api/js/egw_action/egw_keymanager.ts @@ -14,7 +14,6 @@ */ import {egw_getAppObjectManager, egw_globalObjectManager} from "./egw_action"; -import {_egw_active_menu} from "./egw_menu"; import { EGW_AO_EXEC_SELECTED, EGW_AO_FLAG_DEFAULT_FOCUS, @@ -137,9 +136,13 @@ ready(() => {//waits for DOM ready /** * Required to catch the context menu */ -jQuery(window).on("contextmenu",document, function(event) { +window.addEventListener("contextmenu", function(event) +{ // Check for actual key press - if (!(event.originalEvent.x == 1 && event.originalEvent.y == 1)) return true; + if(!(event.x == 1 && event.y == 1)) + { + return true; + } if (!event.ctrlKey && egw_keyHandler(EGW_KEY_MENU, event.shiftKey, event.ctrlKey || event.metaKey, event.altKey)) { // If the key handler successfully passed the key event to some @@ -148,7 +151,7 @@ jQuery(window).on("contextmenu",document, function(event) { return false; } return true; -}) +}); /** diff --git a/api/js/etemplate/Et2Email/Et2Email.ts b/api/js/etemplate/Et2Email/Et2Email.ts index 41226a1add..6bf618fafa 100644 --- a/api/js/etemplate/Et2Email/Et2Email.ts +++ b/api/js/etemplate/Et2Email/Et2Email.ts @@ -1261,11 +1261,12 @@ export class Et2Email extends Et2InputWidget(LitElement) implements SearchMixinI { const classes = option.class ? Object.fromEntries((option.class).split(" ").map(k => [k, true])) : {}; const value = (option.value).replaceAll(" ", "___"); + const isMobile = typeof egwIsMobile == "function" ? egwIsMobile() : false return html` + { + return this._processResultCount(results); + }); + } /** * Override parent to show email address in options * diff --git a/calendar/templates/default/app.css b/calendar/templates/default/app.css index 2da8a19917..27dad6cf82 100644 --- a/calendar/templates/default/app.css +++ b/calendar/templates/default/app.css @@ -1427,9 +1427,10 @@ Hide subsequent headers in week view with non-consolidated owners .calendar_freetime_header { font-size: 120%; font-weight: bold; } .calendar_freetime_timeframe { position: relative;} -img.calendar_print_button, img.calendar_print_appicon { +et2-image.calendar_print_button, et2-appicon.calendar_print_appicon, et2-appicon.calendar_print_appicon img { height: 24px; - width: 24px; + width: 26px; + font-size: 24px; } /*Sortable views*/ diff --git a/calendar/templates/pixelegg/app.css b/calendar/templates/pixelegg/app.css index a0e373c49d..23edbb73fa 100755 --- a/calendar/templates/pixelegg/app.css +++ b/calendar/templates/pixelegg/app.css @@ -1388,10 +1388,12 @@ Hide subsequent headers in week view with non-consolidated owners .calendar_freetime_timeframe { position: relative; } -img.calendar_print_button, -img.calendar_print_appicon { +et2-image.calendar_print_button, +et2-appicon.calendar_print_appicon, +et2-appicon.calendar_print_appicon img { height: 24px; - width: 24px; + width: 26px; + font-size: 24px; } /*Sortable views*/ .srotable_cal_wk_ph { diff --git a/mail/js/app.js b/mail/js/app.js index f28d285c01..fc54355c7d 100755 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -4548,7 +4548,7 @@ app.classes.mail = AppJS.extend( // Coming from tree acc_id = parseInt(_senders[0].id); } - this.egw.open_link('mail.mail_sieve.editVacation&acc_id=' + acc_id, '_blank', '700x660'); + this.egw.open_link('mail.mail_sieve.editVacation&acc_id=' + acc_id, '_blank', '700x800'); }, subscription_refresh: function(_data) diff --git a/pixelegg/css/fancy.css b/pixelegg/css/fancy.css index 4825d7c71a..18315e48b8 100644 --- a/pixelegg/css/fancy.css +++ b/pixelegg/css/fancy.css @@ -3214,6 +3214,7 @@ div#popupMainDiv { padding: 8px; background-color: #FFFFFF; background-repeat: repeat-x; + overflow: auto; } div#popupMainDiv > * { margin: 0px; diff --git a/pixelegg/css/fancy.less b/pixelegg/css/fancy.less index 8265058125..6ec28e8e43 100644 --- a/pixelegg/css/fancy.less +++ b/pixelegg/css/fancy.less @@ -198,7 +198,7 @@ div.flatpickr-calendar .shortcut-buttons-flatpickr-buttons button:last-child { } //end sidebox -//not et2-select should also have rounded corners +//normal select should also have rounded corners select{ border-radius: var(--sl-border-radius-medium); } diff --git a/pixelegg/css/mobile.css b/pixelegg/css/mobile.css index b4b51cdd6b..ca2e9d6bd2 100644 --- a/pixelegg/css/mobile.css +++ b/pixelegg/css/mobile.css @@ -3217,6 +3217,7 @@ div#popupMainDiv { padding: 8px; background-color: #FFFFFF; background-repeat: repeat-x; + overflow: auto; } div#popupMainDiv > * { margin: 0px; diff --git a/pixelegg/css/monochrome.css b/pixelegg/css/monochrome.css index b8fae63bdf..76bfe12bdb 100644 --- a/pixelegg/css/monochrome.css +++ b/pixelegg/css/monochrome.css @@ -3196,6 +3196,7 @@ div#popupMainDiv { padding: 8px; background-color: #FFFFFF; background-repeat: repeat-x; + overflow: auto; } div#popupMainDiv > * { margin: 0px; diff --git a/pixelegg/css/pixelegg.css b/pixelegg/css/pixelegg.css index 9c88190646..532f8b43b9 100644 --- a/pixelegg/css/pixelegg.css +++ b/pixelegg/css/pixelegg.css @@ -3207,6 +3207,7 @@ div#popupMainDiv { padding: 8px; background-color: #FFFFFF; background-repeat: repeat-x; + overflow: auto; } div#popupMainDiv > * { margin: 0px; @@ -4312,8 +4313,9 @@ body.scrollVertical { font-size: 120%; } #egw_fw_header #egw_fw_topmenu #egw_fw_topmenu_items #rc_status_select { - width: 70% !important; + width: auto; margin-left: 10px; + margin-right: 10px; } #egw_fw_header #egw_fw_topmenu #egw_fw_topmenu_items #rc_status_select sl-menu-item::part(checked-icon) { border-radius: 50%; diff --git a/pixelegg/less/layout_dialog.less b/pixelegg/less/layout_dialog.less index c726c48358..442f17d365 100755 --- a/pixelegg/less/layout_dialog.less +++ b/pixelegg/less/layout_dialog.less @@ -24,6 +24,7 @@ div#popupMainDiv { padding: 8px; background-color: @gray_0; background-repeat: repeat-x; + overflow: auto;//If popup is not big enough make sure we can still reach bottom buttons }