diff --git a/etemplate/js/etemplate2.js b/etemplate/js/etemplate2.js index 27cc1b4ca8..b97d53ab37 100644 --- a/etemplate/js/etemplate2.js +++ b/etemplate/js/etemplate2.js @@ -729,13 +729,13 @@ etemplate2.prototype.getValues = function(_root) * If there's a message provided, we try to find where it goes and set it directly. Then * we look for a nextmatch widget, and tell it to refresh its data based on that ID. * + * @see egw_message.refresh() + * * @param {string} msg message to try to display. eg: "Entry added" (not used anymore, handeled by egw_refresh and egw_message) * @param {string} app app-name * @param {(string|null)} id application specific entry ID to try to refresh * @param {(string|null)} type type of change. One of 'update','edit', 'delete', 'add' or null - * - * @see jsapi.egw_refresh() - * @see egw_fw.egw_refresh() + * @return {boolean} true if nextmatch found and refreshed, false if not */ etemplate2.prototype.refresh = function(msg, app, id, type) { @@ -752,6 +752,28 @@ etemplate2.prototype.refresh = function(msg, app, id, type) return refresh_done; }; +/** + * "Intelligently" refresh a given app + * + * @see egw_message.refresh() + * + * @param {string} _msg message to try to display. eg: "Entry added" (not used anymore, handeled by egw_refresh and egw_message) + * @param {string} _app app-name + * @param {(string|null)} _id application specific entry ID to try to refresh + * @param {(string|null)} _type type of change. One of 'update','edit', 'delete', 'add' or null + * @return {boolean} true if nextmatch found and refreshed, false if not + */ +etemplate2.app_refresh = function(_msg, _app, _id, _type) +{ + var refresh_done = false; + var et2 = etemplate2.getByApplication(_app); + for(var i = 0; i < et2.length; i++) + { + refresh_done = et2[i].refresh(_msg,_app,_id,_type) || refresh_done; + } + return refresh_done; +}; + // Some static things to make getting into widget context a little easier // /** diff --git a/phpgwapi/js/jsapi/egw_message.js b/phpgwapi/js/jsapi/egw_message.js index 16803314e8..bfa1e68e71 100644 --- a/phpgwapi/js/jsapi/egw_message.js +++ b/phpgwapi/js/jsapi/egw_message.js @@ -203,10 +203,10 @@ egw.extend('message', egw.MODULE_WND_LOCAL, function(_app, _wnd) } if (no_regular_refresh) return; - // if we have a framework, let it deal with refresh - if (win.framework && win.framework.refresh) + // if we have a framework template, let it deal with refresh, unless it returns a DOMwindow for us to refresh + if (win.framework && win.framework.refresh && + !(win = win.framework.refresh(_msg, _app, _id, _type, _targetapp, _replace, _with, _msg_type))) { - win.framework.refresh(_msg, _app, _id, _type, _targetapp, _replace, _with, _msg_type); return; } @@ -219,28 +219,20 @@ egw.extend('message', egw.MODULE_WND_LOCAL, function(_app, _wnd) } // etemplate2 specific to avoid reloading whole page - if(typeof etemplate2 != "undefined" && etemplate2.getByApplication) + if(typeof etemplate2 != "undefined" && etemplate2.app_refresh) { - var refresh_done = false; - var et2 = etemplate2.getByApplication(_app); - for(var i = 0; i < et2.length; i++) - { - refresh_done = et2[i].refresh(_msg,_app,_id,_type); - } + var refresh_done = etemplate2.app_refresh(_msg, _app, _id, _type); // Refresh target or current app too - if ((_targetapp || egw_appName) != _app) + if ((_targetapp || this.app_name()) != _app) { - var et2t = etemplate2.getByApplication(_targetapp || egw_appName); - for(var i = 0; i < et2t.length; i++) - { - refresh_done = et2t[i].refresh(_msg,_app,_id,_type); - } + refresh_done = etemplate2.app_refresh(_msg, _targetapp || this.app_name()) || refresh_done; } //In case that we have etemplate2 ready but it's empty and refresh is not done - if (et2.length >= 1 && refresh_done) return; + if (refresh_done) return; } + // fallback refresh by reloading window var href = win.location.href; if (typeof _replace != 'undefined')