%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/resources/src/mediawiki.special.preferences.ooui/ |
Current File : /www/varak.net/wiki.varak.net/resources/src/mediawiki.special.preferences.ooui/confirmClose.js |
/*! * JavaScript for Special:Preferences: Enable save button and prevent the window being accidentally * closed when any form field is changed. */ ( function () { $( function () { var allowCloseWindow, saveButton, restoreButton; // Check if all of the form values are unchanged. // (This function could be changed to infuse and check OOUI widgets, but that would only make it // slower and more complicated. It works fine to treat them as HTML elements.) function isPrefsChanged() { var inputs = $( '#mw-prefs-form :input[name]' ), input, $input, inputType, index, optIndex, opt; for ( index = 0; index < inputs.length; index++ ) { input = inputs[ index ]; $input = $( input ); // Different types of inputs have different methods for accessing defaults if ( $input.is( 'select' ) ) { // <select> has the property defaultSelected for each option for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) { opt = input.options[ optIndex ]; if ( opt.selected !== opt.defaultSelected ) { return true; } } } else if ( $input.is( 'input' ) || $input.is( 'textarea' ) ) { // <input> has defaultValue or defaultChecked inputType = input.type; if ( inputType === 'radio' || inputType === 'checkbox' ) { if ( input.checked !== input.defaultChecked ) { return true; } } else if ( input.value !== input.defaultValue ) { return true; } } } return false; } saveButton = OO.ui.infuse( $( '#prefcontrol' ) ); restoreButton = OO.ui.infuse( $( '#mw-prefs-restoreprefs' ) ); // Disable the button to save preferences unless preferences have changed // Check if preferences have been changed before JS has finished loading saveButton.setDisabled( !isPrefsChanged() ); // Attach capturing event handlers to the document, to catch events inside OOUI dropdowns: // * Use capture because OO.ui.SelectWidget also does, and it stops event propagation, // so the event is not fired on descendant elements // * Attach to the document because the dropdowns are in the .oo-ui-defaultOverlay element // (and it doesn't exist yet at this point, so we can't attach them to it) [ 'change', 'keyup', 'mouseup' ].forEach( function ( eventType ) { document.addEventListener( eventType, function () { // Make sure SelectWidget's event handlers run first setTimeout( function () { saveButton.setDisabled( !isPrefsChanged() ); } ); }, true ); } ); // Set up a message to notify users if they try to leave the page without // saving. allowCloseWindow = mw.confirmCloseWindow( { test: isPrefsChanged, message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ), namespace: 'prefswarning' } ); $( '#mw-prefs-form' ).on( 'submit', allowCloseWindow.release ); restoreButton.on( 'click', function () { allowCloseWindow.release(); // The default behavior of events in OOUI is always prevented. Follow the link manually. // Note that middle-click etc. still works, as it doesn't emit a OOUI 'click' event. location.href = restoreButton.getHref(); } ); } ); }() );