nodebb-plugin-markdown 12.1.7 → 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jshintrc +85 -85
- package/README.md +9 -9
- package/index.js +11 -7
- package/package-lock.json +7333 -0
- package/package.json +1 -1
- package/plugin.json +2 -1
- package/public/js/admin.js +1 -26
- package/public/js/client.js +12 -330
- package/public/js/markdown.js +337 -0
- package/public/languages/de/markdown.json +11 -11
- package/public/languages/en-GB/markdown.json +11 -11
- package/public/languages/fa-IR/markdown.json +11 -11
- package/public/languages/fr/markdown.json +11 -11
- package/public/languages/he/markdown.json +12 -12
- package/public/languages/pl/markdown.json +11 -11
- package/public/languages/tr/markdown.json +11 -11
- package/public/languages/zh-CN/markdown.json +11 -11
- package/public/templates/admin/plugins/markdown.tpl +184 -180
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export function capturePaste(targetEl) {
|
|
4
|
+
targetEl.on('paste', function (e) {
|
|
5
|
+
var triggers = [/^>\s*/, /^\s*\*\s+/, /^\s*\d+\.\s+/, /^\s{4,}/];
|
|
6
|
+
var start = e.target.selectionStart;
|
|
7
|
+
var line = getLine(targetEl.val(), start);
|
|
8
|
+
|
|
9
|
+
var trigger = triggers.reduce(function (regexp, cur) {
|
|
10
|
+
if (regexp) {
|
|
11
|
+
return regexp;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return cur.test(line) ? cur : false;
|
|
15
|
+
}, false);
|
|
16
|
+
|
|
17
|
+
var prefix = line.match(trigger);
|
|
18
|
+
if (prefix) {
|
|
19
|
+
prefix = prefix.shift();
|
|
20
|
+
|
|
21
|
+
var payload = e.originalEvent.clipboardData.getData('text');
|
|
22
|
+
var fixed = payload.replace(/^/gm, prefix).slice(prefix.length);
|
|
23
|
+
|
|
24
|
+
setTimeout(function () {
|
|
25
|
+
var replacement = targetEl.val().slice(0, start) + fixed + targetEl.val().slice(start + payload.length);
|
|
26
|
+
targetEl.val(replacement);
|
|
27
|
+
}, 0);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
function getLine(text, selectionStart) {
|
|
32
|
+
// Break apart into lines, return the line the cursor is in
|
|
33
|
+
var lines = text.split('\n');
|
|
34
|
+
|
|
35
|
+
return lines.reduce(function (memo, cur) {
|
|
36
|
+
if (typeof memo !== 'number') {
|
|
37
|
+
return memo;
|
|
38
|
+
} if (selectionStart > (memo + cur.length)) {
|
|
39
|
+
return memo + cur.length + 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return cur;
|
|
43
|
+
}, 0);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export function prepareFormattingTools() {
|
|
48
|
+
require([
|
|
49
|
+
'composer/formatting',
|
|
50
|
+
'composer/controls',
|
|
51
|
+
'translator',
|
|
52
|
+
], function (formatting, controls, translator) {
|
|
53
|
+
if (formatting && controls) {
|
|
54
|
+
translator.getTranslations(window.config.userLang || window.config.defaultLang, 'markdown', function (strings) {
|
|
55
|
+
formatting.addButtonDispatch('bold', function (textarea, selectionStart, selectionEnd) {
|
|
56
|
+
if (selectionStart === selectionEnd) {
|
|
57
|
+
var block = controls.getBlockData(textarea, '**', selectionStart);
|
|
58
|
+
|
|
59
|
+
if (block.in && block.atEnd) {
|
|
60
|
+
// At end of bolded string, move cursor past delimiters
|
|
61
|
+
controls.updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 2);
|
|
62
|
+
} else {
|
|
63
|
+
controls.insertIntoTextarea(textarea, '**' + strings.bold + '**');
|
|
64
|
+
controls.updateTextareaSelection(
|
|
65
|
+
textarea, selectionStart + 2, selectionStart + strings.bold.length + 2
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
var wrapDelta = controls.wrapSelectionInTextareaWith(textarea, '**');
|
|
70
|
+
controls.updateTextareaSelection(
|
|
71
|
+
textarea, selectionStart + 2 + wrapDelta[0], selectionEnd + 2 - wrapDelta[1]
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
formatting.addButtonDispatch('italic', function (textarea, selectionStart, selectionEnd) {
|
|
77
|
+
if (selectionStart === selectionEnd) {
|
|
78
|
+
var block = controls.getBlockData(textarea, '*', selectionStart);
|
|
79
|
+
|
|
80
|
+
if (block.in && block.atEnd) {
|
|
81
|
+
// At end of italicised string, move cursor past delimiters
|
|
82
|
+
controls.updateTextareaSelection(textarea, selectionStart + 1, selectionStart + 1);
|
|
83
|
+
} else {
|
|
84
|
+
controls.insertIntoTextarea(textarea, '*' + strings.italic + '*');
|
|
85
|
+
controls.updateTextareaSelection(
|
|
86
|
+
textarea, selectionStart + 1, selectionStart + strings.italic.length + 1
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
var wrapDelta = controls.wrapSelectionInTextareaWith(textarea, '*');
|
|
91
|
+
controls.updateTextareaSelection(
|
|
92
|
+
textarea, selectionStart + 1 + wrapDelta[0], selectionEnd + 1 - wrapDelta[1]
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
formatting.addButtonDispatch('list', function (textarea, selectionStart, selectionEnd) {
|
|
98
|
+
if (selectionStart === selectionEnd) {
|
|
99
|
+
controls.insertIntoTextarea(textarea, '\n* ' + strings.list_item);
|
|
100
|
+
|
|
101
|
+
// Highlight "list item"
|
|
102
|
+
controls.updateTextareaSelection(
|
|
103
|
+
textarea, selectionStart + 3, selectionStart + strings.list_item.length + 3
|
|
104
|
+
);
|
|
105
|
+
} else {
|
|
106
|
+
const selectedText = $(textarea).val().substring(selectionStart, selectionEnd);
|
|
107
|
+
const newText = '* ' + selectedText.split('\n').join('\n* ');
|
|
108
|
+
controls.replaceSelectionInTextareaWith(textarea, newText);
|
|
109
|
+
controls.updateTextareaSelection(textarea, selectionStart, selectionEnd + (newText.length - selectedText.length));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
formatting.addButtonDispatch('strikethrough', function (textarea, selectionStart, selectionEnd) {
|
|
114
|
+
if (selectionStart === selectionEnd) {
|
|
115
|
+
var block = controls.getBlockData(textarea, '~~', selectionStart);
|
|
116
|
+
|
|
117
|
+
if (block.in && block.atEnd) {
|
|
118
|
+
// At end of bolded string, move cursor past delimiters
|
|
119
|
+
controls.updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 2);
|
|
120
|
+
} else {
|
|
121
|
+
controls.insertIntoTextarea(textarea, '~~' + strings.strikethrough_text + '~~');
|
|
122
|
+
controls.updateTextareaSelection(
|
|
123
|
+
textarea, selectionStart + 2, selectionEnd + strings.strikethrough_text.length + 2
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
var wrapDelta = controls.wrapSelectionInTextareaWith(textarea, '~~', '~~');
|
|
128
|
+
controls.updateTextareaSelection(
|
|
129
|
+
textarea, selectionStart + 2 + wrapDelta[0], selectionEnd + 2 - wrapDelta[1]
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
formatting.addButtonDispatch('code', function (textarea, selectionStart, selectionEnd) {
|
|
135
|
+
if (selectionStart === selectionEnd) {
|
|
136
|
+
controls.insertIntoTextarea(textarea, '```\n' + strings.code_text + '\n```');
|
|
137
|
+
controls.updateTextareaSelection(
|
|
138
|
+
textarea, selectionStart + 4, selectionEnd + strings.code_text.length + 4
|
|
139
|
+
);
|
|
140
|
+
} else {
|
|
141
|
+
var wrapDelta = controls.wrapSelectionInTextareaWith(textarea, '```\n', '\n```');
|
|
142
|
+
controls.updateTextareaSelection(
|
|
143
|
+
textarea, selectionStart + 4 + wrapDelta[0], selectionEnd + 4 - wrapDelta[1]
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
formatting.addButtonDispatch('link', function (textarea, selectionStart, selectionEnd) {
|
|
149
|
+
if (selectionStart === selectionEnd) {
|
|
150
|
+
controls.insertIntoTextarea(textarea, '[' + strings.link_text + '](' + strings.link_url + ')');
|
|
151
|
+
controls.updateTextareaSelection(
|
|
152
|
+
textarea,
|
|
153
|
+
selectionStart + strings.link_text.length + 3,
|
|
154
|
+
selectionEnd + strings.link_text.length + strings.link_url.length + 3
|
|
155
|
+
);
|
|
156
|
+
} else {
|
|
157
|
+
var wrapDelta = controls.wrapSelectionInTextareaWith(textarea, '[', '](' + strings.link_url + ')');
|
|
158
|
+
controls.updateTextareaSelection(
|
|
159
|
+
textarea, selectionEnd + 3 - wrapDelta[1], selectionEnd + strings.link_url.length + 3 - wrapDelta[1]
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
formatting.addButtonDispatch('picture-o', function (textarea, selectionStart, selectionEnd) {
|
|
165
|
+
if (selectionStart === selectionEnd) {
|
|
166
|
+
controls.insertIntoTextarea(textarea, '');
|
|
167
|
+
controls.updateTextareaSelection(
|
|
168
|
+
textarea,
|
|
169
|
+
selectionStart + strings.picture_text.length + 4,
|
|
170
|
+
selectionEnd + strings.picture_text.length + strings.picture_url.length + 4
|
|
171
|
+
);
|
|
172
|
+
} else {
|
|
173
|
+
var wrapDelta = controls.wrapSelectionInTextareaWith(textarea, '');
|
|
174
|
+
controls.updateTextareaSelection(
|
|
175
|
+
textarea, selectionEnd + 4 - wrapDelta[1], selectionEnd + strings.picture_url.length + 4 - wrapDelta[1]
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export function markExternalLinks() {
|
|
185
|
+
if (!config.markdown.externalMark) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const anchorEls = document.querySelectorAll('[component="post/content"] a');
|
|
190
|
+
anchorEls.forEach((anchorEl) => {
|
|
191
|
+
// Do nothing if the anchor contains only an image
|
|
192
|
+
if (anchorEl.childElementCount === 1 && anchorEl.querySelector('img') && !anchorEl.text) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Otherwise, mark external links with icon
|
|
197
|
+
const parsed = new URL(anchorEl.href, document.location.href);
|
|
198
|
+
if (parsed.host != document.location.host) {
|
|
199
|
+
const iconEl = document.createElement('i');
|
|
200
|
+
iconEl.classList.add('fa', 'fa-external-link', 'small');
|
|
201
|
+
anchorEl.append(' ', iconEl);
|
|
202
|
+
}
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export function enhanceCheckbox(ev, data) {
|
|
207
|
+
if (!data.posts && !data.post) {
|
|
208
|
+
return;
|
|
209
|
+
} if (data.hasOwnProperty('post')) {
|
|
210
|
+
data.posts = [data.post];
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
var disable;
|
|
214
|
+
var checkboxEls;
|
|
215
|
+
data.posts.forEach(function (post) {
|
|
216
|
+
disable = !post.display_edit_tools;
|
|
217
|
+
checkboxEls = $('.posts li[data-pid="' + post.pid + '"] .content div.plugin-markdown input[type="checkbox"]');
|
|
218
|
+
|
|
219
|
+
checkboxEls.on('click', function (e) {
|
|
220
|
+
if (disable) {
|
|
221
|
+
// Find the post's checkboxes in DOM and make them readonly
|
|
222
|
+
e.preventDefault();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Otherwise, edit the post to reflect state change
|
|
226
|
+
var _this = this;
|
|
227
|
+
var pid = $(this).parents('li[data-pid]').attr('data-pid');
|
|
228
|
+
var index = $(this).parents('.content').find('input[type="checkbox"]').toArray()
|
|
229
|
+
.reduce(function (memo, cur, index) {
|
|
230
|
+
if (cur === _this) {
|
|
231
|
+
memo = index;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return memo;
|
|
235
|
+
}, null);
|
|
236
|
+
|
|
237
|
+
socket.emit('plugins.markdown.checkbox.edit', {
|
|
238
|
+
pid: pid,
|
|
239
|
+
index: index,
|
|
240
|
+
state: $(_this).prop('checked'),
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
export function highlight(data) {
|
|
247
|
+
if (data instanceof jQuery.Event) {
|
|
248
|
+
processHighlight($(data.data.selector));
|
|
249
|
+
} else {
|
|
250
|
+
processHighlight(data);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
async function processHighlight(elements) {
|
|
255
|
+
if (parseInt(config.markdown.highlight, 10)) {
|
|
256
|
+
console.debug('[plugin/markdown] Initializing highlight.js');
|
|
257
|
+
let hljs;
|
|
258
|
+
let list;
|
|
259
|
+
let aliasMap = new Map();
|
|
260
|
+
switch(true) {
|
|
261
|
+
case config.markdown.hljsLanguages.includes('common'): {
|
|
262
|
+
({ default: hljs} = await import(`highlight.js/lib/common`));
|
|
263
|
+
list = 'common';
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
case config.markdown.hljsLanguages.includes('all'): {
|
|
268
|
+
({ default: hljs} = await import(`highlight.js`));
|
|
269
|
+
list = 'all';
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
default: {
|
|
274
|
+
({ default: hljs} = await import(`highlight.js/lib/core`));
|
|
275
|
+
list = 'core';
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
console.debug(`[plugins/markdown] Loaded ${list} hljs library`);
|
|
279
|
+
|
|
280
|
+
if (list !== 'all') {
|
|
281
|
+
await Promise.all(config.markdown.hljsLanguages.map(async (language) => {
|
|
282
|
+
if (['common', 'all'].includes(language)) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
console.debug(`[plugins/markdown] Loading ${language} support`);
|
|
287
|
+
const { default: lang } = await import('../../node_modules/highlight.js/lib/languages/' + language + '.js');
|
|
288
|
+
hljs.registerLanguage(language, lang);
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Build alias set
|
|
293
|
+
hljs.listLanguages().forEach((language) => {
|
|
294
|
+
const { aliases } = hljs.getLanguage(language);
|
|
295
|
+
if (aliases && Array.isArray(aliases)) {
|
|
296
|
+
aliases.forEach((alias) => {
|
|
297
|
+
aliasMap.set(alias, language);
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
aliasMap.set(language, language);
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
console.debug(`[plugins/markdown] Loading support for line numbers`);
|
|
305
|
+
window.hljs = hljs;
|
|
306
|
+
require('highlightjs-line-numbers.js');
|
|
307
|
+
|
|
308
|
+
elements.each(function (i, block) {
|
|
309
|
+
const parentNode = $(block.parentNode);
|
|
310
|
+
if (parentNode.hasClass('markdown-highlight')) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
parentNode.addClass('markdown-highlight');
|
|
314
|
+
|
|
315
|
+
// Default language if set in ACP
|
|
316
|
+
if (!Array.prototype.some.call(block.classList, (className) => className.startsWith('language-')) && config.markdown.defaultHighlightLanguage) {
|
|
317
|
+
block.classList.add(`language-${config.markdown.defaultHighlightLanguage}`);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
window.hljs.highlightElement(block);
|
|
321
|
+
|
|
322
|
+
// Check detected language against whitelist and add lines if enabled
|
|
323
|
+
const classIterator = block.classList.values();
|
|
324
|
+
for(className of classIterator) {
|
|
325
|
+
if (className.startsWith('language-')) {
|
|
326
|
+
const language = className.split('-')[1];
|
|
327
|
+
const list = config.markdown.highlightLinesLanguageList;
|
|
328
|
+
if (aliasMap.has(language) && list && list.includes(aliasMap.get(language))) {
|
|
329
|
+
$(block).attr('data-lines', 1);
|
|
330
|
+
window.hljs.lineNumbersBlock(block);
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "Fettschrift",
|
|
3
|
-
"italic": "Kursivschrift",
|
|
4
|
-
"list_item": "Listenpunkt",
|
|
5
|
-
"strikethrough_text": "Durchgestrichen",
|
|
6
|
-
"link_text": "Link Text",
|
|
7
|
-
"link_url": "Link Adresse",
|
|
8
|
-
"picture_text": "Bild Text",
|
|
9
|
-
"picture_url": "Bild Link",
|
|
10
|
-
"help_text": "Dieses Forum unterstützt Markdown. Für mehr Informationen, [hier klicken](http://commonmark.org/help/)"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "Fettschrift",
|
|
3
|
+
"italic": "Kursivschrift",
|
|
4
|
+
"list_item": "Listenpunkt",
|
|
5
|
+
"strikethrough_text": "Durchgestrichen",
|
|
6
|
+
"link_text": "Link Text",
|
|
7
|
+
"link_url": "Link Adresse",
|
|
8
|
+
"picture_text": "Bild Text",
|
|
9
|
+
"picture_url": "Bild Link",
|
|
10
|
+
"help_text": "Dieses Forum unterstützt Markdown. Für mehr Informationen, [hier klicken](http://commonmark.org/help/)"
|
|
11
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "bolded text",
|
|
3
|
-
"italic": "italicised text",
|
|
4
|
-
"list_item": "list item",
|
|
5
|
-
"strikethrough_text": "strikethrough text",
|
|
6
|
-
"code_text": "code_text",
|
|
7
|
-
"link_text": "link text",
|
|
8
|
-
"link_url": "link url",
|
|
9
|
-
"picture_text": "alt text",
|
|
10
|
-
"picture_url": "image url",
|
|
11
|
-
"help_text": "This forum is powered by Markdown. For full documentation, [click here](http://commonmark.org/help/)"
|
|
1
|
+
{
|
|
2
|
+
"bold": "bolded text",
|
|
3
|
+
"italic": "italicised text",
|
|
4
|
+
"list_item": "list item",
|
|
5
|
+
"strikethrough_text": "strikethrough text",
|
|
6
|
+
"code_text": "code_text",
|
|
7
|
+
"link_text": "link text",
|
|
8
|
+
"link_url": "link url",
|
|
9
|
+
"picture_text": "alt text",
|
|
10
|
+
"picture_url": "image url",
|
|
11
|
+
"help_text": "This forum is powered by Markdown. For full documentation, [click here](http://commonmark.org/help/)"
|
|
12
12
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "متن پررنگ",
|
|
3
|
-
"italic": "متن ایتالیک ( کج )",
|
|
4
|
-
"list_item": "لیست",
|
|
5
|
-
"strikethrough_text": "متن خط خورده",
|
|
6
|
-
"link_text": "متن لینک",
|
|
7
|
-
"link_url": "آدرس لینک",
|
|
8
|
-
"picture_text": "متن جایگزین",
|
|
9
|
-
"picture_url": "آدرس عکس",
|
|
10
|
-
"help_text": "این انجمن از زبان مارک دون استفاده می کند، برای اطلاعات بیشتر [اینجا](http://commonmark.org/help/) کلیک کنید!"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "متن پررنگ",
|
|
3
|
+
"italic": "متن ایتالیک ( کج )",
|
|
4
|
+
"list_item": "لیست",
|
|
5
|
+
"strikethrough_text": "متن خط خورده",
|
|
6
|
+
"link_text": "متن لینک",
|
|
7
|
+
"link_url": "آدرس لینک",
|
|
8
|
+
"picture_text": "متن جایگزین",
|
|
9
|
+
"picture_url": "آدرس عکس",
|
|
10
|
+
"help_text": "این انجمن از زبان مارک دون استفاده می کند، برای اطلاعات بیشتر [اینجا](http://commonmark.org/help/) کلیک کنید!"
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "texte en gras",
|
|
3
|
-
"italic": "texte en italique",
|
|
4
|
-
"list_item": "élément de liste",
|
|
5
|
-
"strikethrough_text": "strikethrough text",
|
|
6
|
-
"link_text": "texte du lien",
|
|
7
|
-
"link_url": "url du lien",
|
|
8
|
-
"picture_text": "text alternatif",
|
|
9
|
-
"picture_url": "url de l'image",
|
|
10
|
-
"help_text": "Ce forum utilise la syntaxe Markdown. Pour accéder à la documentation, suivre ce [lien](http://commonmark.org/help/)"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "texte en gras",
|
|
3
|
+
"italic": "texte en italique",
|
|
4
|
+
"list_item": "élément de liste",
|
|
5
|
+
"strikethrough_text": "strikethrough text",
|
|
6
|
+
"link_text": "texte du lien",
|
|
7
|
+
"link_url": "url du lien",
|
|
8
|
+
"picture_text": "text alternatif",
|
|
9
|
+
"picture_url": "url de l'image",
|
|
10
|
+
"help_text": "Ce forum utilise la syntaxe Markdown. Pour accéder à la documentation, suivre ce [lien](http://commonmark.org/help/)"
|
|
11
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "טקסט מודגש",
|
|
3
|
-
"italic": "טקסט נטוי",
|
|
4
|
-
"list_item": "פריט רשימה",
|
|
5
|
-
"strikethrough_text": "קו חוצה",
|
|
6
|
-
"code_text": "קוד",
|
|
7
|
-
"link_text": "טקסט קישור",
|
|
8
|
-
"link_url": "כתובת קישור",
|
|
9
|
-
"picture_text": "כיתוב בבעיות טעינה",
|
|
10
|
-
"picture_url": "כתובת תמונה",
|
|
11
|
-
"help_text": "הפורום עובד עם Markdown. להסבר מלא, [לחץ כאן](http://commonmark.org/help/)"
|
|
12
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "טקסט מודגש",
|
|
3
|
+
"italic": "טקסט נטוי",
|
|
4
|
+
"list_item": "פריט רשימה",
|
|
5
|
+
"strikethrough_text": "קו חוצה",
|
|
6
|
+
"code_text": "קוד",
|
|
7
|
+
"link_text": "טקסט קישור",
|
|
8
|
+
"link_url": "כתובת קישור",
|
|
9
|
+
"picture_text": "כיתוב בבעיות טעינה",
|
|
10
|
+
"picture_url": "כתובת תמונה",
|
|
11
|
+
"help_text": "הפורום עובד עם Markdown. להסבר מלא, [לחץ כאן](http://commonmark.org/help/)"
|
|
12
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "pogrubienie",
|
|
3
|
-
"italic": "pochylenie",
|
|
4
|
-
"list_item": "wypunktowanie",
|
|
5
|
-
"strikethrough_text": "przekreślenie",
|
|
6
|
-
"link_text": "tekst odnośnika",
|
|
7
|
-
"link_url": "url odnośnika",
|
|
8
|
-
"picture_text": "text alternatywny",
|
|
9
|
-
"picture_url": "url obrazu",
|
|
10
|
-
"help_text": "Forum działa dzięki Markdown. By uzyskać pełną dokumentację, [kliknij tutaj](http://commonmark.org/help/)"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "pogrubienie",
|
|
3
|
+
"italic": "pochylenie",
|
|
4
|
+
"list_item": "wypunktowanie",
|
|
5
|
+
"strikethrough_text": "przekreślenie",
|
|
6
|
+
"link_text": "tekst odnośnika",
|
|
7
|
+
"link_url": "url odnośnika",
|
|
8
|
+
"picture_text": "text alternatywny",
|
|
9
|
+
"picture_url": "url obrazu",
|
|
10
|
+
"help_text": "Forum działa dzięki Markdown. By uzyskać pełną dokumentację, [kliknij tutaj](http://commonmark.org/help/)"
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "kalın yazı",
|
|
3
|
-
"italic": "İtalik yazı",
|
|
4
|
-
"list_item": "liste madde",
|
|
5
|
-
"strikethrough_text": "Üstü çizili metin",
|
|
6
|
-
"link_text": "bağlantı metni",
|
|
7
|
-
"link_url": "link url",
|
|
8
|
-
"picture_text": "alt metni",
|
|
9
|
-
"picture_url": "görsel url",
|
|
10
|
-
"help_text": "This forum is powered by Markdown. For full documentation, [click here](http://commonmark.org/help/)"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "kalın yazı",
|
|
3
|
+
"italic": "İtalik yazı",
|
|
4
|
+
"list_item": "liste madde",
|
|
5
|
+
"strikethrough_text": "Üstü çizili metin",
|
|
6
|
+
"link_text": "bağlantı metni",
|
|
7
|
+
"link_url": "link url",
|
|
8
|
+
"picture_text": "alt metni",
|
|
9
|
+
"picture_url": "görsel url",
|
|
10
|
+
"help_text": "This forum is powered by Markdown. For full documentation, [click here](http://commonmark.org/help/)"
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"bold": "粗体字",
|
|
3
|
-
"italic": "斜体字",
|
|
4
|
-
"list_item": "列表",
|
|
5
|
-
"strikethrough_text": "删除线",
|
|
6
|
-
"link_text": "链接文本",
|
|
7
|
-
"link_url": "链接地址",
|
|
8
|
-
"picture_text": "替代文字",
|
|
9
|
-
"picture_url": "图片地址",
|
|
10
|
-
"help_text": "该论坛使用 Markdown 语法。[点此查看](http://commonmark.org/help/) 语法说明。"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"bold": "粗体字",
|
|
3
|
+
"italic": "斜体字",
|
|
4
|
+
"list_item": "列表",
|
|
5
|
+
"strikethrough_text": "删除线",
|
|
6
|
+
"link_text": "链接文本",
|
|
7
|
+
"link_url": "链接地址",
|
|
8
|
+
"picture_text": "替代文字",
|
|
9
|
+
"picture_url": "图片地址",
|
|
10
|
+
"help_text": "该论坛使用 Markdown 语法。[点此查看](http://commonmark.org/help/) 语法说明。"
|
|
11
|
+
}
|