Skip to content

Commit d06f090

Browse files
committed
fix merge, fix bug
1 parent 17eb4a7 commit d06f090

File tree

4 files changed

+41
-22
lines changed

4 files changed

+41
-22
lines changed

templates/shared/combomarkdowneditor.tmpl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ Template Attributes:
99
<div {{if .ContainerId}}id="{{.ContainerId}}"{{end}} class="combo-markdown-editor {{.ContainerClasses}}" data-dropzone-parent-container="{{.DropzoneParentContainer}}">
1010
{{if .MarkdownPreviewUrl}}
1111
<div class="ui top tabular menu">
12-
<a class="active item" data-tab="markdown-writer">{{.locale.Tr "write"}}</a>
13-
<a class="item" data-tab="markdown-previewer" data-preview-url="{{.MarkdownPreviewUrl}}" data-preview-context="{{.MarkdownPreviewContext}}">{{.locale.Tr "preview"}}</a>
12+
<a class="active item" data-tab-for="markdown-writer">{{.locale.Tr "write"}}</a>
13+
<a class="item" data-tab-for="markdown-previewer" data-preview-url="{{.MarkdownPreviewUrl}}" data-preview-context="{{.MarkdownPreviewContext}}">{{.locale.Tr "preview"}}</a>
1414
</div>
1515
{{end}}
16-
<div class="ui tab active" data-tab="markdown-writer">
16+
<div class="ui tab active" data-tab-panel="markdown-writer">
1717
<markdown-toolbar class="gt-df">
1818
<div class="markdown-toolbar-group">
1919
<md-header class="markdown-toolbar-button">{{svg "octicon-heading"}}</md-header>
@@ -41,7 +41,7 @@ Template Attributes:
4141
</markdown-toolbar>
4242
<textarea class="markdown-text-editor js-quick-submit" name="{{.TextareaName}}" placeholder="{{.TextareaPlaceholder}}">{{.TextareaContent}}</textarea>
4343
</div>
44-
<div class="ui tab markup" data-tab="markdown-previewer">
44+
<div class="ui tab markup" data-tab-panel="markdown-previewer">
4545
{{.locale.Tr "loading"}}
4646
</div>
4747
</div>

web_src/js/features/comp/ComboMarkdownEditor.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {initEasyMDEImagePaste, initTextareaImagePaste} from './ImagePaste.js';
55
import $ from 'jquery';
66
import {initMarkupContent} from '../../markup/content.js';
77
import {handleGlobalEnterQuickSubmit} from './QuickSubmit.js';
8+
import {attachRefIssueContextPopup} from '../contextpopup.js';
89

910
let elementIdCounter = 0;
1011

@@ -61,31 +62,46 @@ class ComboMarkdownEditor {
6162
initTextareaImagePaste(this.textarea, this.dropzone);
6263
}
6364

64-
this.setupPreview();
65+
this.setupTab();
6566
this.prepareEasyMDEToolbarActions();
6667
}
6768

68-
setupPreview() {
69-
const $tabMenu = $(this.container).find('.tabular.menu');
69+
setupTab() {
70+
const $container = $(this.container);
71+
const $tabMenu = $container.find('.tabular.menu');
7072
const $tabs = $tabMenu.find('> .item');
71-
const $tabPreview = $tabs.filter(`.item[data-tab="markdown-previewer"]`);
73+
74+
// Fomantic Tab requires the "data-tab" to be globally unique.
75+
// So here it uses our defined "data-tab-for" and "data-tab-panel" to generate the "data-tab" attribute for Fomantic.
76+
const $tabEditor = $tabs.filter(`.item[data-tab-for="markdown-writer"]`);
77+
const $tabPreviewer = $tabs.filter(`.item[data-tab-for="markdown-previewer"]`);
78+
$tabEditor.attr('data-tab', `markdown-writer-${elementIdCounter}`);
79+
$tabPreviewer.attr('data-tab', `markdown-previewer-${elementIdCounter}`);
80+
const $panelEditor = $container.find('.ui.tab[data-tab-panel="markdown-writer"]');
81+
const $panelPreviewer = $container.find('.ui.tab[data-tab-panel="markdown-previewer"]');
82+
$panelEditor.attr('data-tab', `markdown-writer-${elementIdCounter}`);
83+
$panelPreviewer.attr('data-tab', `markdown-previewer-${elementIdCounter}`);
84+
elementIdCounter++;
85+
7286
$tabs.tab();
7387

74-
this.previewUrl = $tabPreview.attr('data-preview-url');
75-
this.previewContext = $tabPreview.attr('data-preview-context');
88+
this.previewUrl = $tabPreviewer.attr('data-preview-url');
89+
this.previewContext = $tabPreviewer.attr('data-preview-context');
7690
this.previewMode = this.options.previewMode ?? 'comment';
7791
this.previewWiki = this.options.previewWiki ?? false;
78-
$tabPreview.on('click', () => {
92+
$tabPreviewer.on('click', () => {
7993
$.post(this.previewUrl, {
8094
_csrf: window.config.csrfToken,
8195
mode: this.previewMode,
8296
context: this.previewContext,
8397
text: this.value(),
8498
wiki: this.previewWiki,
8599
}, (data) => {
86-
const previewPanel = this.container.querySelector(`.tab[data-tab="markdown-previewer"]`);
87-
previewPanel.innerHTML = data;
100+
$panelPreviewer.html(data);
88101
initMarkupContent();
102+
103+
const refIssues = $panelPreviewer.find('p .ref-issue');
104+
attachRefIssueContextPopup(refIssues);
89105
});
90106
});
91107
}

web_src/js/features/contextpopup.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,16 @@ export function initContextPopups() {
1010
}
1111

1212
export function attachRefIssueContextPopup(refIssues) {
13-
if (!refIssues.length) return;
14-
refIssues.each(function () {
15-
if ($(this).hasClass('ref-external-issue')) {
13+
for (const refIssue of refIssues) {
14+
if (refIssue.classList.contains('ref-external-issue')) {
1615
return;
1716
}
1817

19-
const {owner, repo, index} = parseIssueHref($(this).attr('href'));
18+
const {owner, repo, index} = parseIssueHref(refIssue.getAttribute('href'));
2019
if (!owner) return;
2120

2221
const el = document.createElement('div');
23-
this.parentNode.insertBefore(el, this.nextSibling);
22+
refIssue.parentNode.insertBefore(el, refIssue.nextSibling);
2423

2524
const view = createApp(ContextPopup);
2625

@@ -31,7 +30,7 @@ export function attachRefIssueContextPopup(refIssues) {
3130
el.textContent = 'ContextPopup failed to load';
3231
}
3332

34-
createTippy(this, {
33+
createTippy(refIssue, {
3534
content: el,
3635
placement: 'top-start',
3736
interactive: true,
@@ -40,5 +39,5 @@ export function attachRefIssueContextPopup(refIssues) {
4039
el.firstChild.dispatchEvent(new CustomEvent('ce-load-context-popup', {detail: {owner, repo, index}}));
4140
}
4241
});
43-
});
42+
}
4443
}

web_src/js/features/repo-legacy.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {initRepoSettingBranches} from './repo-settings.js';
2323
import {initRepoPullRequestMergeForm} from './repo-issue-pr-form.js';
2424
import {hideElem, showElem} from '../utils/dom.js';
2525
import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js';
26+
import {attachRefIssueContextPopup} from './contextpopup.js';
2627

2728
const {csrfToken} = window.config;
2829

@@ -400,12 +401,15 @@ async function onEditContent(event) {
400401
context: $editContentZone.data('context'),
401402
files: $attachments,
402403
}, (data) => {
403-
if (data.length === 0 || data.content.length === 0) {
404+
if (!data.content) {
404405
$renderContent.html($('#no-content').html());
405406
$rawContent.text('');
406407
} else {
407408
$renderContent.html(data.content);
408409
$rawContent.text(comboMarkdownEditor.value());
410+
411+
const refIssues = $renderContent.find('p .ref-issue');
412+
attachRefIssueContextPopup(refIssues);
409413
}
410414
const $content = $segment;
411415
if (!$content.find('.dropzone-attachments').length) {
@@ -432,7 +436,7 @@ async function onEditContent(event) {
432436
comboMarkdownEditor = await initComboMarkdownEditor($editContentZone.find('.combo-markdown-editor'));
433437

434438
const $dropzone = $editContentZone.find('.dropzone');
435-
const dz = setupDropzone($dropzone);
439+
const dz = await setupDropzone($dropzone);
436440
$editContentZone.find('.cancel.button').on('click', (e) => {
437441
e.preventDefault();
438442
cancelAndReset(dz);

0 commit comments

Comments
 (0)