mediawiki.special.preferences.js: Simplify modulo
[lhc/web/wiklou.git] / resources / src / mediawiki.special / mediawiki.special.preferences.js
index 043d769..6ea7501 100644 (file)
@@ -5,7 +5,7 @@ jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
                $tzSelect, $tzTextbox, $localtimeHolder, servertime,
-               $checkBoxes, savedWindowOnBeforeUnload;
+               $checkBoxes, allowCloseWindowFn;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
@@ -41,7 +41,7 @@ jQuery( function ( $ ) {
                        } else {
                                $( this ).css( 'height', 'auto' );
                        }
-       } ).insertBefore( $preftoc );
+               } ).insertBefore( $preftoc );
 
        /**
         * It uses document.getElementById for security reasons (HTML injections in $()).
@@ -223,12 +223,8 @@ jQuery( function ( $ ) {
                localTime = servertime + minuteDiff;
 
                // Bring time within the [0,1440) range.
-               while ( localTime < 0 ) {
-                       localTime += 1440;
-               }
-               while ( localTime >= 1440 ) {
-                       localTime -= 1440;
-               }
+               localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
+
                $localtimeHolder.text( mediaWiki.language.convertNumber( minutesToHours( localTime ) ) );
        }
 
@@ -267,39 +263,14 @@ jQuery( function ( $ ) {
        // Set up a message to notify users if they try to leave the page without
        // saving.
        $( '#mw-prefs-form' ).data( 'origdata', $( '#mw-prefs-form' ).serialize() );
-       $( window )
-               .on( 'beforeunload.prefswarning', function () {
-                       var retval;
-
-                       // Check if anything changed
-                       if ( $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' ) ) {
-                               // Return our message
-                               retval = mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) );
-                       }
+       allowCloseWindowFn = mediaWiki.confirmCloseWindow( {
+               test: function () {
+                       return $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' );
+               },
 
-                       // Unset the onbeforeunload handler so we don't break page caching in Firefox
-                       savedWindowOnBeforeUnload = window.onbeforeunload;
-                       window.onbeforeunload = null;
-                       if ( retval !== undefined ) {
-                               // ...but if the user chooses not to leave the page, we need to rebind it
-                               setTimeout( function () {
-                                       window.onbeforeunload = savedWindowOnBeforeUnload;
-                               }, 1 );
-                               return retval;
-                       }
-               } )
-               .on( 'pageshow.prefswarning', function () {
-                       // Re-add onbeforeunload handler
-                       if ( !window.onbeforeunload ) {
-                               window.onbeforeunload = savedWindowOnBeforeUnload;
-                       }
-               } );
-       $( '#mw-prefs-form' ).submit( function () {
-               // Unbind our beforeunload handler
-               $( window ).off( '.prefswarning' );
-       } );
-       $( '#mw-prefs-restoreprefs' ).click( function () {
-               // Unbind our beforeunload handler
-               $( window ).off( '.prefswarning' );
+               message: mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) ),
+               namespace: 'prefswarning'
        } );
+       $( '#mw-prefs-form' ).submit( allowCloseWindowFn );
+       $( '#mw-prefs-restoreprefs' ).click( allowCloseWindowFn );
 } );