浏览代码

Ask before quitting a page with unsaved changes

Kévin Dunglas 12 年之前
父节点
当前提交
b04f6642b9

+ 1 - 0
Resources/public/base.js

@@ -1,5 +1,6 @@
 jQuery(document).ready(function() {
     jQuery('html').removeClass('no-js');
+    jQuery('.sonata-ba-form form').confirmExit(window.TRANSLATIONS.CONFIRM_EXIT);
     Admin.add_pretty_errors(document);
     Admin.add_filters(document);
     Admin.set_object_field_value(document);

+ 38 - 0
Resources/public/jquery/jquery.confirmExit.js

@@ -0,0 +1,38 @@
+/*!
+* jQuery confirmExit plugin
+* https://github.com/dunglas/jquery.confirmExit
+*
+* Copyright 2012 Kévin Dunglas <dunglas@gmail.com>
+* Released under the MIT license
+* http://www.opensource.org/licenses/mit-license.php
+*/
+(function ($) {
+	$.fn.confirmExit = function(message) {
+		var confirmExit = false;
+
+		$('input, textarea, select', this).on('change keyup', function() {
+			// Do not set the event handler if not needed
+			if (!confirmExit) {
+				confirmExit = true;
+
+				window.onbeforeunload = function(event) {
+					var e = event || window.event;
+
+					// For old IE and Firefox
+					if (e) {
+						e.returnValue = message;
+					}
+
+					return message;
+				}
+			}
+		});
+
+		this.submit(function() {
+			window.onbeforeunload = null;
+			confirmExit = false;
+		});
+
+		return this;
+	}
+	})(jQuery);

+ 4 - 0
Resources/translations/SonataAdminBundle.en.xliff

@@ -346,6 +346,10 @@
               <source>list_select</source>
               <target>Select</target>
             </trans-unit>
+            <trans-unit id="confirm_exit">
+                <source>confirm_exit</source>
+                <target>You have unsaved changes.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>

+ 4 - 0
Resources/translations/SonataAdminBundle.fr.xliff

@@ -346,6 +346,10 @@
               <source>list_select</source>
               <target>Sélectionner</target>
             </trans-unit>
+            <trans-unit id="confirm_exit">
+                <source>confirm_exit</source>
+                <target>Vous avez effectué des modifications non sauvegardées.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>

+ 6 - 0
Resources/views/standard_layout.html.twig

@@ -37,6 +37,11 @@ file that was distributed with this source code.
         {% endblock %}
 
         {% block javascripts %}
+            <script type="text/javascript">
+                window.TRANSLATIONS = {
+                    CONFIRM_EXIT:  '{{ 'confirm_exit'|trans({}, 'SonataAdminBundle')|escape('js') }}'
+               };
+            </script>
             <script src="{{ asset('bundles/sonatajquery/jquery-1.8.3.js') }}" type="text/javascript"></script>
             <script src="{{ asset('bundles/sonatajquery/jquery-ui-1.8.23.js') }}" type="text/javascript"></script>
             <script src="{{ asset('bundles/sonatajquery/jquery-ui-i18n.js') }}" type="text/javascript"></script>
@@ -44,6 +49,7 @@ file that was distributed with this source code.
             <script src="{{ asset('bundles/sonataadmin/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
 
             <script src="{{ asset('bundles/sonataadmin/jquery/jquery.form.js') }}" type="text/javascript"></script>
+            <script src="{{ asset('bundles/sonataadmin/jquery/jquery.confirmExit.js') }}" type="text/javascript"></script>
             <script src="{{ asset('bundles/sonataadmin/base.js') }}" type="text/javascript"></script>
         {% endblock %}