Skip to content

Commit 8de9d1d

Browse files
committed
data-loss64623-stash
1 parent fed6b2c commit 8de9d1d

10 files changed

Lines changed: 193 additions & 50 deletions

File tree

.idea/codeStyles/Project.xml

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/codeStyles/codeStyleConfig.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/jsLinters/jshint.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/laravel-idea.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/php.xml

Lines changed: 62 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/prettier.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/js/_enqueues/admin/options.js

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,53 @@
1-
/**
2-
* @output wp-admin/js/options.js
3-
*/
4-
5-
/**
6-
* Detects unsaved changes on settings forms and warns users before navigating away.
7-
*
8-
* @since 7.0.0
9-
*/
10-
( function( $ ) {
1+
( function ( $ ) {
112
var $form,
123
originalFormContent,
134
isSubmitting = false,
5+
hasListener = false,
146
__ = wp.i18n.__;
157

16-
$( function() {
17-
// Target all settings forms on options pages.
8+
function beforeUnloadHandler() {
9+
if ( isSubmitting || ! $form || ! $form.length ) {
10+
return;
11+
}
12+
13+
if ( originalFormContent !== $form.serialize() ) {
14+
return __(
15+
'The changes you made will be lost if you navigate away from this page.'
16+
);
17+
}
18+
}
19+
20+
function addBeforeUnloadListener() {
21+
if ( ! hasListener ) {
22+
$( window ).on( 'beforeunload.options', beforeUnloadHandler );
23+
hasListener = true;
24+
}
25+
}
26+
27+
function removeBeforeUnloadListener() {
28+
if ( hasListener ) {
29+
$( window ).off( 'beforeunload.options' );
30+
hasListener = false;
31+
}
32+
}
33+
34+
$( function () {
1835
$form = $( 'form[action="options.php"]' );
1936

20-
// Exit if no form is found.
2137
if ( ! $form.length ) {
2238
return;
2339
}
2440

25-
// Store the original form state.
2641
originalFormContent = $form.serialize();
2742

28-
// Track form submission to avoid false warnings.
29-
$form.on( 'submit', function() {
30-
isSubmitting = true;
43+
// Add listener only when form is modified
44+
$form.on( 'change input', function () {
45+
addBeforeUnloadListener();
3146
} );
32-
} );
33-
34-
/**
35-
* Warn the user if they have unsaved changes.
36-
*
37-
* The browser will show a native confirmation dialog when the user
38-
* attempts to leave the page with unsaved changes.
39-
*/
40-
$( window ).on( 'beforeunload', function() {
41-
// Skip warning if form is being submitted or content hasn't changed.
42-
if ( isSubmitting || ! $form || ! $form.length ) {
43-
return;
44-
}
4547

46-
if ( originalFormContent !== $form.serialize() ) {
47-
return __( 'The changes you made will be lost if you navigate away from this page.' );
48-
}
48+
$form.on( 'submit', function () {
49+
isSubmitting = true;
50+
removeBeforeUnloadListener();
51+
} );
4952
} );
50-
51-
}( jQuery ) );
53+
} )( jQuery );

tests/qunit/fixtures/wp-api-generated.js

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11128,18 +11128,6 @@ mockedApiResponse.Schema = {
1112811128
"closed"
1112911129
],
1113011130
"required": false
11131-
},
11132-
"site_logo": {
11133-
"title": "Logo",
11134-
"description": "Site logo.",
11135-
"type": "integer",
11136-
"required": false
11137-
},
11138-
"site_icon": {
11139-
"title": "Icon",
11140-
"description": "Site icon.",
11141-
"type": "integer",
11142-
"required": false
1114311131
}
1114411132
}
1114511133
}
@@ -14467,7 +14455,5 @@ mockedApiResponse.settings = {
1446714455
"page_on_front": 0,
1446814456
"page_for_posts": 0,
1446914457
"default_ping_status": "open",
14470-
"default_comment_status": "open",
14471-
"site_logo": null,
14472-
"site_icon": 0
14458+
"default_comment_status": "open"
1447314459
};

0 commit comments

Comments
 (0)