@@ -190,22 +190,13 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
190190 .status-message {
191191 padding: 12px 16px;
192192 border-radius: var(--border-radius-sm, 6px);
193- margin-bottom: 16px;
194- }
195- .status-success {
196- background: var(--color-background-success-subtle, #dafbe1);
197- color: var(--color-text-success, #1a7f37);
198- border: 1px solid var(--color-border-success, #aceebb);
193+ margin: 16px;
199194 }
200195 .status-error {
201196 background: var(--color-background-danger-subtle, #ffebe9);
202197 color: var(--color-text-danger, #cf222e);
203198 border: 1px solid var(--color-border-danger, #ffcecb);
204199 }
205- .status-success a {
206- color: var(--color-text-success, #1a7f37);
207- font-weight: 600;
208- }
209200 .hidden {
210201 display: none;
211202 }
@@ -236,17 +227,97 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
236227 border-radius: 3px;
237228 font-size: inherit;
238229 }
230+ /* Success view styles */
231+ .success-view {
232+ padding: 16px;
233+ }
234+ .success-header {
235+ display: flex;
236+ align-items: center;
237+ gap: 8px;
238+ margin-bottom: 16px;
239+ color: var(--color-text-success, #1a7f37);
240+ }
241+ .success-icon {
242+ width: 24px;
243+ height: 24px;
244+ border-radius: 50%;
245+ background: var(--color-background-success, #1f883d);
246+ color: #fff;
247+ display: flex;
248+ align-items: center;
249+ justify-content: center;
250+ font-size: 14px;
251+ }
252+ .success-title {
253+ font-weight: 600;
254+ font-size: var(--font-heading-xs-size, 16px);
255+ }
256+ .issue-card {
257+ border: 1px solid var(--color-border-primary, #d0d7de);
258+ border-radius: var(--border-radius-sm, 6px);
259+ background: var(--color-background-primary, #fff);
260+ overflow: hidden;
261+ }
262+ .issue-card-header {
263+ padding: 12px 16px;
264+ border-bottom: 1px solid var(--color-border-primary, #d0d7de);
265+ display: flex;
266+ align-items: flex-start;
267+ gap: 8px;
268+ }
269+ .issue-state-icon {
270+ color: var(--color-text-success, #1a7f37);
271+ margin-top: 2px;
272+ }
273+ .issue-title-link {
274+ font-weight: 600;
275+ color: var(--color-text-primary, #24292f);
276+ text-decoration: none;
277+ }
278+ .issue-title-link:hover {
279+ color: var(--color-text-info, #0969da);
280+ text-decoration: underline;
281+ }
282+ .issue-number {
283+ color: var(--color-text-secondary, #656d76);
284+ font-weight: 400;
285+ }
286+ .issue-card-body {
287+ padding: 12px 16px;
288+ color: var(--color-text-secondary, #656d76);
289+ font-size: var(--font-text-sm-size, 13px);
290+ }
291+ .issue-card-body p {
292+ margin: 0;
293+ white-space: pre-wrap;
294+ word-break: break-word;
295+ }
296+ .issue-card-footer {
297+ padding: 8px 16px;
298+ background: var(--color-background-tertiary, #f6f8fa);
299+ border-top: 1px solid var(--color-border-primary, #d0d7de);
300+ font-size: var(--font-text-sm-size, 12px);
301+ color: var(--color-text-secondary, #656d76);
302+ }
303+ .issue-card-footer a {
304+ color: var(--color-text-info, #0969da);
305+ text-decoration: none;
306+ }
307+ .issue-card-footer a:hover {
308+ text-decoration: underline;
309+ }
239310 </style>
240311</head>
241312<body>
242313 <div id="content">
243- <div class="issue-form">
314+ <!-- Form View -->
315+ <div id="form-view" class="issue-form">
244316 <div class="form-header">
245317 <span class="form-header-icon">●</span>
246318 <span>New Issue</span>
247319 </div>
248320 <div id="repo-info" class="repo-info hidden"></div>
249- <div id="status-container"></div>
250321 <div class="form-body" id="form-body">
251322 <div class="form-group">
252323 <label class="form-label" for="issue-title">Title</label>
@@ -255,7 +326,7 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
255326 <div class="form-group">
256327 <label class="form-label" for="issue-body">Description</label>
257328 <textarea id="issue-body" class="form-input form-textarea" placeholder="Describe the issue..."></textarea>
258- <p class="form-hint">Markdown is supported</p>
329+ <p class="form-hint">Markdown is not supported</p>
259330 </div>
260331 </div>
261332 <div class="form-actions" id="form-actions">
@@ -264,6 +335,31 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
264335 </button>
265336 </div>
266337 </div>
338+
339+ <!-- Success View (hidden by default) -->
340+ <div id="success-view" class="issue-form hidden">
341+ <div class="success-view">
342+ <div class="success-header">
343+ <span class="success-icon">✓</span>
344+ <span class="success-title">Issue created</span>
345+ </div>
346+ <div class="issue-card">
347+ <div class="issue-card-header">
348+ <span class="issue-state-icon">●</span>
349+ <div>
350+ <a id="success-issue-link" class="issue-title-link" href="#" target="_blank">
351+ <span id="success-issue-title"></span>
352+ <span id="success-issue-number" class="issue-number"></span>
353+ </a>
354+ </div>
355+ </div>
356+ <div id="success-issue-body" class="issue-card-body"></div>
357+ <div class="issue-card-footer">
358+ <a id="success-view-link" href="#" target="_blank">View on GitHub →</a>
359+ </div>
360+ </div>
361+ </div>
362+ </div>
267363 </div>
268364 <script>
269365 // ============================================================
@@ -386,7 +482,7 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
386482 }
387483
388484 setLoading(true);
389- clearStatus ();
485+ clearError ();
390486
391487 try {
392488 const result = await sendRequest('tools/call', {
@@ -409,12 +505,15 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
409505 if (textContent?.text) {
410506 try {
411507 const issueData = JSON.parse(textContent.text);
508+ // Store the title and body we submitted for the success view
509+ issueData._submittedTitle = title;
510+ issueData._submittedBody = body;
412511 showSuccess(issueData);
413512 } catch {
414- showSuccess({ url: textContent.text });
513+ showSuccess({ url: textContent.text, _submittedTitle: title, _submittedBody: body });
415514 }
416515 } else {
417- showSuccess({});
516+ showSuccess({ _submittedTitle: title, _submittedBody: body });
418517 }
419518 }
420519 } catch (error) {
@@ -434,30 +533,39 @@ const IssueWriteUIHTML = `<!DOCTYPE html>
434533 }
435534 }
436535
437- function clearStatus () {
438- document.getElementById('status -container').innerHTML = '';
536+ function clearError () {
537+ document.getElementById('error -container').innerHTML = '';
439538 }
440539
441540 function showSuccess(data) {
442- const container = document.getElementById('status-container');
443- let message = '✓ Issue created successfully!';
444- if (data.url || data.URL) {
445- const url = data.url || data.URL;
446- message += ' <a href="' + escapeHtml(url) + '" target="_blank">View Issue →</a>';
447- }
448- container.innerHTML = '<div class="status-message status-success">' + message + '</div>';
541+ // Hide the form view
542+ document.getElementById('form-view').classList.add('hidden');
449543
450- // Disable the form after successful creation
451- document.getElementById('issue-title').disabled = true;
452- document.getElementById('issue-body').disabled = true;
453- document.getElementById('submit-btn').disabled = true;
454- document.getElementById('submit-btn').innerHTML = 'Created ✓';
544+ // Populate and show the success view
545+ const successView = document.getElementById('success-view');
546+ const url = data.url || data.URL || data.html_url || '#';
547+ const title = data.title || data._submittedTitle || 'Issue';
548+ const body = data.body || data._submittedBody || '';
549+ const number = data.number ? '#' + data.number : '';
550+
551+ document.getElementById('success-issue-title').textContent = title;
552+ document.getElementById('success-issue-number').textContent = number ? ' ' + number : '';
553+ document.getElementById('success-issue-link').href = url;
554+ document.getElementById('success-view-link').href = url;
555+
556+ const bodyEl = document.getElementById('success-issue-body');
557+ if (body) {
558+ bodyEl.innerHTML = '<p>' + escapeHtml(body) + '</p>';
559+ } else {
560+ bodyEl.innerHTML = '<p><em>No description provided.</em></p>';
561+ }
455562
563+ successView.classList.remove('hidden');
456564 notifySize();
457565 }
458566
459567 function showError(message) {
460- const container = document.getElementById('status -container');
568+ const container = document.getElementById('error -container');
461569 container.innerHTML = '<div class="status-message status-error">' + escapeHtml(message) + '</div>';
462570 notifySize();
463571 }
0 commit comments