@@ -95,7 +95,13 @@ if (cancelButton) {
9595 if ( isBuilding === "true" ) {
9696 setTimeout ( updateCancelButton , 5000 ) ;
9797 } else {
98- cancelButton . style . display = "none" ;
98+ // Hide the entire split-button when build finishes
99+ const splitButton = cancelButton . closest ( ".jenkins-split-button" ) ;
100+ if ( splitButton ) {
101+ splitButton . style . display = "none" ;
102+ } else {
103+ cancelButton . style . display = "none" ;
104+ }
99105 }
100106 }
101107 return null ;
@@ -106,3 +112,119 @@ if (cancelButton) {
106112 }
107113 setTimeout ( updateCancelButton , 5000 ) ;
108114}
115+
116+ // Use event delegation for pause/resume dropdown items
117+ document . addEventListener ( "click" , function ( event ) {
118+ const target = event . target . closest ( "#pgv-pause, #pgv-resume" ) ;
119+ if ( ! target ) return ;
120+
121+ event . preventDefault ( ) ;
122+
123+ const proxyName = target . dataset . proxyName ;
124+ if ( ! proxyName ) return ;
125+
126+ const actionProxy = window [ proxyName ] ;
127+ if ( ! actionProxy ) {
128+ console . error ( "Failed to execute action: proxy not found" ) ;
129+ return ;
130+ }
131+
132+ if ( target . id === "pgv-pause" ) {
133+ if ( typeof actionProxy . doPause !== "function" ) {
134+ console . error ( "Failed to pause: method not found" ) ;
135+ return ;
136+ }
137+
138+ actionProxy . doPause ( function ( response ) {
139+ const result = response . responseJSON ;
140+ if ( result . status === "ok" ) {
141+ notificationBar . show ( target . dataset . successMessage ) ;
142+ // Hide pause, show resume
143+ const pauseItem = document . getElementById ( "pgv-pause" ) ;
144+ const resumeItem = document . getElementById ( "pgv-resume" ) ;
145+ if ( pauseItem ) pauseItem . style . display = "none" ;
146+ if ( resumeItem ) resumeItem . style . display = "" ;
147+ } else {
148+ notificationBar . show ( result . message , notificationBar . WARNING ) ;
149+ }
150+ } ) ;
151+ } else if ( target . id === "pgv-resume" ) {
152+ if ( typeof actionProxy . doResume !== "function" ) {
153+ console . error ( "Failed to resume: method not found" ) ;
154+ return ;
155+ }
156+
157+ actionProxy . doResume ( function ( response ) {
158+ const result = response . responseJSON ;
159+ if ( result . status === "ok" ) {
160+ notificationBar . show ( target . dataset . successMessage ) ;
161+ // Hide resume, show pause
162+ const pauseItem = document . getElementById ( "pgv-pause" ) ;
163+ const resumeItem = document . getElementById ( "pgv-resume" ) ;
164+ if ( resumeItem ) resumeItem . style . display = "none" ;
165+ if ( pauseItem ) pauseItem . style . display = "" ;
166+ } else {
167+ notificationBar . show ( result . message , notificationBar . WARNING ) ;
168+ }
169+ } ) ;
170+ }
171+ } ) ;
172+
173+ function updatePauseElements ( ) {
174+ const pausedBanner = document . getElementById ( "pgv-paused-banner" ) ;
175+ const pauseMenuItem = document . getElementById ( "pgv-pause" ) ;
176+ const resumeMenuItem = document . getElementById ( "pgv-resume" ) ;
177+
178+ fetch ( "pauseState" )
179+ . then ( ( rsp ) => {
180+ if ( ! rsp . ok ) {
181+ throw new Error (
182+ `Failed to fetch pause state: ${ rsp . status } - ${ rsp . statusText } ` ,
183+ ) ;
184+ }
185+ return rsp . json ( ) ;
186+ } )
187+ . then ( ( result ) => {
188+ if ( result . status === "ok" ) {
189+ const isPaused = result . data . paused ;
190+ const isBuilding = result . data . building ;
191+
192+ if ( isBuilding ) {
193+ if ( isPaused ) {
194+ pausedBanner . style . display = "" ;
195+ if ( pauseMenuItem ) {
196+ pauseMenuItem . style . display = "none" ;
197+ }
198+ if ( resumeMenuItem ) {
199+ resumeMenuItem . style . display = "" ;
200+ }
201+ } else {
202+ pausedBanner . style . display = "none" ;
203+ if ( pauseMenuItem ) {
204+ pauseMenuItem . style . display = "" ;
205+ }
206+ if ( resumeMenuItem ) {
207+ resumeMenuItem . style . display = "none" ;
208+ }
209+ }
210+
211+ let updateInterval = 5000 ;
212+ // update more frequently when the pause/resume menu items are visible
213+ if ( pauseMenuItem || resumeMenuItem ) {
214+ updateInterval = 1000 ;
215+ }
216+ setTimeout ( updatePauseElements ( ) , updateInterval ) ;
217+ } else {
218+ pausedBanner . style . display = "none" ;
219+ pauseMenuItem . style . display = "none" ;
220+ resumeMenuItem . style . display = "none" ;
221+ }
222+ }
223+ return null ;
224+ } )
225+ . catch ( ( error ) => {
226+ console . error ( "Error fetching pause state:" , error ) ;
227+ } ) ;
228+ }
229+
230+ updatePauseElements ( ) ;
0 commit comments