@@ -51,14 +51,16 @@ let debounceInputAbortController = null;
51
51
* @property {string } htmlPreambleForProcessing
52
52
* @property {string } formattedHtmlapiResponse
53
53
* @property {HtmlApiResponse } htmlapiResponse
54
- * @property {string } playgroundLink
54
+ * @property {URL } playgroundLink
55
55
* @property {string } html
56
56
* @property {string } htmlForProcessing
57
57
* @property {boolean } showClosers
58
58
* @property {boolean } showInvisible
59
59
* @property {boolean } showVirtual
60
60
* @property {boolean } quirksMode
61
61
* @property {boolean } fullParser
62
+ * @property {number } previewPrNumber
63
+ * @property {boolean } checkingForPRPlaygroundLink
62
64
*
63
65
* @property {'breadcrumbs'|'insertionMode' } hoverInfo
64
66
* @property {boolean } hoverBreadcrumbs
@@ -84,6 +86,10 @@ let debounceInputAbortController = null;
84
86
* @property {()=>void } handleShowVirtualClick
85
87
* @property {()=>Promise<void> } handleQuirksModeClick
86
88
* @property {()=>Promise<void> } handleFullParserClick
89
+ *
90
+ * @property {()=>void } handleCopyClick
91
+ * @property {()=>void } handleCopyPrInput
92
+ * @property {()=>void } handleCopyPrClick
87
93
*/
88
94
89
95
/** @type {typeof I.store<Store> } */
@@ -143,7 +149,7 @@ const store = createStore(NS, {
143
149
'https://playground.wordpress.net/?plugin=html-api-debugger&php-extension-bundle=light' ,
144
150
) ;
145
151
u . searchParams . set ( 'url' , `${ base } ?${ searchParams . toString ( ) } ` ) ;
146
- return u . href ;
152
+ return u ;
147
153
} ,
148
154
149
155
get htmlPreambleForProcessing ( ) {
@@ -275,7 +281,17 @@ const store = createStore(NS, {
275
281
} ,
276
282
277
283
handleCopyClick : function * ( ) {
278
- yield navigator . clipboard . writeText ( store . state . playgroundLink ) ;
284
+ const url = new URL ( store . state . playgroundLink ) ;
285
+
286
+ // @ts -expect-error This better exist.
287
+ const wpVersion = document . getElementById ( 'htmlapi-wp-version' ) . value ;
288
+ url . searchParams . set ( 'wp' , wpVersion ) ;
289
+
290
+ try {
291
+ yield navigator . clipboard . writeText ( url . href ) ;
292
+ } catch {
293
+ alert ( 'Copy failed, make sure the browser window is focused.' ) ;
294
+ }
279
295
} ,
280
296
281
297
/** @param {Event } e */
@@ -428,6 +444,71 @@ const store = createStore(NS, {
428
444
) ;
429
445
}
430
446
} ,
447
+
448
+ /** @param {InputEvent } e */
449
+ handleCopyPrInput ( e ) {
450
+ const val = /** @type {HTMLInputElement } */ ( e . target ) . valueAsNumber ;
451
+ if ( Number . isFinite ( val ) && val > 0 ) {
452
+ store . state . previewPrNumber = val ;
453
+ return ;
454
+ }
455
+ store . state . previewPrNumber = val ;
456
+ } ,
457
+
458
+ handleCopyPrClick : function * ( ) {
459
+ const prNumber = store . state . previewPrNumber ;
460
+ const playgroundLink = new URL ( store . state . playgroundLink ) ;
461
+ if ( ! prNumber ) {
462
+ alert ( 'Please enter a PR number.' ) ;
463
+ return ;
464
+ }
465
+ const url = new URL (
466
+ 'https://playground.wordpress.net/plugin-proxy.php?org=WordPress&repo=wordpress-develop&workflow=Test%20Build%20Processes' ,
467
+ ) ;
468
+ url . searchParams . set ( 'artifact' , `wordpress-build-${ prNumber } ` ) ;
469
+ url . searchParams . set ( 'pr' , prNumber . toString ( 10 ) ) ;
470
+
471
+ try {
472
+ playgroundLink . searchParams . set ( 'wp' , url . href ) ;
473
+ yield navigator . clipboard . writeText ( playgroundLink . href ) ;
474
+ } catch {
475
+ alert ( 'Copy failed, make sure the browser window is focused.' ) ;
476
+ }
477
+ } ,
478
+
479
+ handleCheckPrClick : function * ( ) {
480
+ if ( store . state . checkingForPRPlaygroundLink ) {
481
+ return ;
482
+ }
483
+
484
+ const prNumber = store . state . previewPrNumber ;
485
+ if ( ! prNumber ) {
486
+ alert ( 'Please enter a PR number.' ) ;
487
+ return ;
488
+ }
489
+
490
+ try {
491
+ store . state . checkingForPRPlaygroundLink = true ;
492
+
493
+ const url = new URL (
494
+ 'https://playground.wordpress.net/plugin-proxy.php?org=WordPress&repo=wordpress-develop&workflow=Test%20Build%20Processes' ,
495
+ ) ;
496
+ url . searchParams . set ( 'artifact' , `wordpress-build-${ prNumber } ` ) ;
497
+ url . searchParams . set ( 'pr' , prNumber . toString ( 10 ) ) ;
498
+ url . searchParams . set ( 'verify_only' , 'true' ) ;
499
+ /** @type {Response } */
500
+ const response = yield fetch ( url . href , {
501
+ method : 'GET' ,
502
+ } ) ;
503
+ if ( ! response . ok ) {
504
+ alert ( 'The PR number is not valid or has not been built yet.' ) ;
505
+ return ;
506
+ }
507
+ alert ( 'The PR number looks good!' ) ;
508
+ } finally {
509
+ store . state . checkingForPRPlaygroundLink = false ;
510
+ }
511
+ } ,
431
512
} ) ;
432
513
433
514
/** @param {keyof State } stateKey */
0 commit comments