@@ -229,15 +229,15 @@ const populatePackageNames = (changelog) => {
229229 otherPackages . sort ( ) ;
230230
231231 // Build the sorted list - only add separator if special packages exist
232- const sortedPackages = [ ] ;
232+ let sortedPackages ;
233233 if ( existingSpecialPackages . length > 0 ) {
234234 sortedPackages = [ 'separator' , ...existingSpecialPackages , 'separator' , ...otherPackages ] ;
235235 } else {
236236 // No special packages exist, just show others
237237 sortedPackages = otherPackages ;
238238 }
239239
240- const optionsHtml = '<option value="">Select a package</option>' ;
240+ let optionsHtml = '<option value="">Select a package</option>' ;
241241
242242 sortedPackages . forEach ( ( packageName ) => {
243243 if ( packageName === 'separator' ) {
@@ -787,15 +787,6 @@ const compareAndRenderPackageVersions = (packageName, versionASpecific, versionB
787787 comparisonResults . innerHTML += html ;
788788 comparisonResults . classList . remove ( 'hide' ) ;
789789
790- // Update URL for sharing
791- updateEnhancedComparisonURL (
792- versionASelect . value ,
793- versionBSelect . value ,
794- packageName ,
795- comparisonData . versionA ,
796- comparisonData . versionB
797- ) ;
798-
799790 // Show copy link button and helper
800791 if ( copyComparisonLinkBtn ) copyComparisonLinkBtn . classList . remove ( 'hide' ) ;
801792 if ( comparisonHelper ) comparisonHelper . classList . remove ( 'hide' ) ;
@@ -1285,6 +1276,7 @@ const handleComparisonSubmit = async (event) => {
12851276 commits . length
12861277 ) ;
12871278
1279+ // Push to history only on user-initiated comparisons — not on page load or popstate.
12881280 updateEnhancedComparisonURL ( stableA , stableB , selectedPackage , finalVersionA , finalVersionB ) ;
12891281 } catch ( error ) {
12901282 showComparisonError ( error ) ;
@@ -1396,6 +1388,16 @@ const initializeComparisonMode = async () => {
13961388 // Setup all event listeners
13971389 setupComparisonEventListeners ( ) ;
13981390
1391+ // Handle Back/Forward for version comparison
1392+ window . addEventListener ( 'popstate' , async ( ) => {
1393+ const enhancedParams = await handleEnhancedComparisonURL ( ) ;
1394+ if ( enhancedParams . shouldCompare ) {
1395+ await loadEnhancedComparisonFromURL ( enhancedParams ) ;
1396+ } else {
1397+ clearComparisonForm ( ) ;
1398+ }
1399+ } ) ;
1400+
13991401 // Check for URL parameters on page load
14001402 const enhancedParams = await handleEnhancedComparisonURL ( ) ;
14011403 if ( enhancedParams . shouldCompare ) {
@@ -1414,6 +1416,44 @@ const initializeApplication = async () => {
14141416
14151417 // Step 2: Then initialize comparison mode (which checks URL params)
14161418 await initializeComparisonMode ( ) ;
1419+
1420+ // Step 3: Handle Back/Forward for single-version search.
1421+ // searchForm submit calls pushState but had no popstate listener,
1422+ // so the URL changed while the form and results stayed frozen.
1423+ window . addEventListener ( 'popstate' , async ( ) => {
1424+ const urlParams = new URLSearchParams ( window . location . search ) ;
1425+
1426+ // Comparison URLs are handled by the listener in initializeComparisonMode.
1427+ if ( urlParams . has ( 'compareStableA' ) ) return ;
1428+
1429+ const hasSingleSearchParams =
1430+ urlParams . has ( 'stable_version' ) ||
1431+ urlParams . has ( 'package' ) ||
1432+ urlParams . has ( 'version' ) ||
1433+ urlParams . has ( 'commitMessage' ) ||
1434+ urlParams . has ( 'commitHash' ) ;
1435+
1436+ if ( hasSingleSearchParams ) {
1437+ // Restore the previous search — re-populate form and re-run.
1438+ await populateFormFieldsFromURL ( ) ;
1439+ } else {
1440+ // URL is empty — clear form fields and hide results.
1441+ versionSelectDropdown . value = '' ;
1442+ packageNameInputDropdown . value = '' ;
1443+ versionInput . value = '' ;
1444+ commitMessageInput . value = '' ;
1445+ commitHashInput . value = '' ;
1446+ searchResults . innerHTML = '' ;
1447+ searchResults . classList . add ( 'hide' ) ;
1448+ updateFormState ( {
1449+ stable_version : '' ,
1450+ package : '' ,
1451+ version : '' ,
1452+ commitMessage : '' ,
1453+ commitHash : '' ,
1454+ } ) ;
1455+ }
1456+ } ) ;
14171457} ;
14181458
14191459// Wait for DOM to be ready, then initialize
0 commit comments