From 26aa7088d832fde4e099a745820a9b3d80365d76 Mon Sep 17 00:00:00 2001 From: Hans van Dijk Date: Thu, 22 Aug 2013 16:59:00 +0200 Subject: [PATCH 1/4] [IMP] import of web_confirm_window_close.js 6.1 --- web_confirm_window_close/__init__.py | 0 web_confirm_window_close/__openerp__.py | 45 +++++++++++++++++++ .../static/src/js/web_confirm_window_close.js | 30 +++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 web_confirm_window_close/__init__.py create mode 100644 web_confirm_window_close/__openerp__.py create mode 100644 web_confirm_window_close/static/src/js/web_confirm_window_close.js diff --git a/web_confirm_window_close/__init__.py b/web_confirm_window_close/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/web_confirm_window_close/__openerp__.py b/web_confirm_window_close/__openerp__.py new file mode 100644 index 00000000..b7e1679a --- /dev/null +++ b/web_confirm_window_close/__openerp__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Check for unsaved data when closing browser window', + 'description': ''' +This addon will show a confirmation dialog when the user closes +a window with an OpenERP form containing unsaved data. + +This functionality is browser dependent. Opera ignores it at all, +while Firefox displays a generic confirmation message. + +This module is compatible with OpenERP 6.1. +''', + 'version': '6.1.1', + 'author': 'Therp BV', + 'category': 'Usability', + 'website': 'http://therp.nl', + 'email': 'info@therp.nl', + 'license': 'AGPL-3', + 'depends': [ + 'web', + ], + 'js': [ + 'static/src/js/web_confirm_window_close.js' + ], +} diff --git a/web_confirm_window_close/static/src/js/web_confirm_window_close.js b/web_confirm_window_close/static/src/js/web_confirm_window_close.js new file mode 100644 index 00000000..d07dc6a1 --- /dev/null +++ b/web_confirm_window_close/static/src/js/web_confirm_window_close.js @@ -0,0 +1,30 @@ +/* + + Copyright (C) 2013 Therp BV + License: GNU AFFERO GENERAL PUBLIC LICENSE + Version 3 or any later version + +*/ + +openerp.web_confirm_window_close = function(openerp) { + openerp.web.FormView.include({ + + warning_on_close: function() { + if (this.widget_parent && this.widget_parent.active_view == 'form' && this.$element.hasClass('oe_form_dirty')) { + // Firefox will show a generic confirmation dialog + // When any text is returned here. + return openerp.web._t('You have unsaved data in this window. Do you really want to leave?'); + } + }, + + start: function() { + res = this._super(); + if (!(this.embedded_view)) { + $(window).bind('beforeunload', _.bind( + this.warning_on_close, this)); + } + return res; + } + + }); +} From 2ea5f5dff40c9447ab78336fabf2454ef8b98e45 Mon Sep 17 00:00:00 2001 From: Hans van Dijk Date: Thu, 22 Aug 2013 17:01:57 +0200 Subject: [PATCH 2/4] [IMP] upgrade from 6.1 to 7.0 --- .../static/src/js/web_confirm_window_close.js | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/web_confirm_window_close/static/src/js/web_confirm_window_close.js b/web_confirm_window_close/static/src/js/web_confirm_window_close.js index d07dc6a1..753addba 100644 --- a/web_confirm_window_close/static/src/js/web_confirm_window_close.js +++ b/web_confirm_window_close/static/src/js/web_confirm_window_close.js @@ -7,20 +7,26 @@ */ openerp.web_confirm_window_close = function(openerp) { + //3 essential differences between 6.1 and 7.0 + // - widget_parent replaced by ViewManager + // - $element. replaced by $el + // - $(window).bind replaced by $(window).on openerp.web.FormView.include({ - warning_on_close: function() { - if (this.widget_parent && this.widget_parent.active_view == 'form' && this.$element.hasClass('oe_form_dirty')) { - // Firefox will show a generic confirmation dialog - // When any text is returned here. - return openerp.web._t('You have unsaved data in this window. Do you really want to leave?'); - } + if (this.ViewManager + && this.ViewManager.active_view == 'form' + && this.$el.hasClass('oe_form_dirty')) + // Firefox will show a generic confirmation dialog + // When any text is returned here. + return openerp.web._t( + "You have unsaved data in this window. " + + "Do you really want to leave?"); }, - + start: function() { res = this._super(); if (!(this.embedded_view)) { - $(window).bind('beforeunload', _.bind( + $(window).on("beforeunload", _.bind( this.warning_on_close, this)); } return res; From b3a3c731d95a1dd6217fe679f24593f2f303d07f Mon Sep 17 00:00:00 2001 From: Hans van Dijk Date: Thu, 22 Aug 2013 17:19:36 +0200 Subject: [PATCH 3/4] [IMP] manifest updated --- web_confirm_window_close/__openerp__.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/web_confirm_window_close/__openerp__.py b/web_confirm_window_close/__openerp__.py index b7e1679a..717a540b 100644 --- a/web_confirm_window_close/__openerp__.py +++ b/web_confirm_window_close/__openerp__.py @@ -28,13 +28,12 @@ a window with an OpenERP form containing unsaved data. This functionality is browser dependent. Opera ignores it at all, while Firefox displays a generic confirmation message. -This module is compatible with OpenERP 6.1. +This module is compatible with OpenERP 7.0. ''', - 'version': '6.1.1', + 'version': '7.0.1', 'author': 'Therp BV', 'category': 'Usability', - 'website': 'http://therp.nl', - 'email': 'info@therp.nl', + 'website': 'https://launchpad.net/web-addons', 'license': 'AGPL-3', 'depends': [ 'web', From 24450d14f602f806212c6ce3f625c097c3c1dcf6 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 30 Aug 2013 16:14:39 +0200 Subject: [PATCH 4/4] [RFR] Use event to query uncommitted changes --- .../static/src/js/web_confirm_window_close.js | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/web_confirm_window_close/static/src/js/web_confirm_window_close.js b/web_confirm_window_close/static/src/js/web_confirm_window_close.js index 753addba..a8ceb7bb 100644 --- a/web_confirm_window_close/static/src/js/web_confirm_window_close.js +++ b/web_confirm_window_close/static/src/js/web_confirm_window_close.js @@ -6,29 +6,35 @@ */ -openerp.web_confirm_window_close = function(openerp) { - //3 essential differences between 6.1 and 7.0 - // - widget_parent replaced by ViewManager - // - $element. replaced by $el - // - $(window).bind replaced by $(window).on - openerp.web.FormView.include({ +openerp.web_confirm_window_close = function(instance) { + + instance.web.FormView.include({ + init: function(parent, dataset, view_id, options) { + res = this._super(parent, dataset, view_id, options); + instance.web.bus.on('report_uncommitted_changes', this, function(e) { + if (this.$el.is('.oe_form_dirty')) { + e.preventDefault(); + } + }); + return res; + } + }), + + instance.web.WebClient.include({ warning_on_close: function() { - if (this.ViewManager - && this.ViewManager.active_view == 'form' - && this.$el.hasClass('oe_form_dirty')) - // Firefox will show a generic confirmation dialog - // When any text is returned here. - return openerp.web._t( - "You have unsaved data in this window. " + + var $e = $.Event('report_uncommitted_changes'); + instance.web.bus.trigger('report_uncommitted_changes', $e); + if ($e.isDefaultPrevented()) { + return instance.web._t( + "You have unsaved data in this window. " + "Do you really want to leave?"); + } }, - + start: function() { res = this._super(); - if (!(this.embedded_view)) { - $(window).on("beforeunload", _.bind( - this.warning_on_close, this)); - } + $(window).on("beforeunload", _.bind( + this.warning_on_close, this)); return res; }