@reality.eth/reality-eth-lib 3.1.16 → 3.2.1
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/formatters/question.js +6 -1
- package/package.json +2 -2
- package/test/formatters.js +51 -3
package/formatters/question.js
CHANGED
|
@@ -8,6 +8,7 @@ const QUESTION_MAX_OUTCOMES = 128;
|
|
|
8
8
|
const marked = require('marked');
|
|
9
9
|
const DOMPurify = require('isomorphic-dompurify');
|
|
10
10
|
const { convert} = require('html-to-text');
|
|
11
|
+
marked.setOptions({headerIds: false});
|
|
11
12
|
|
|
12
13
|
exports.delimiter = function() {
|
|
13
14
|
return '\u241f'; // Thought about '\u0000' but it seems to break something;
|
|
@@ -231,7 +232,11 @@ exports.parseQuestionJSON = function(data, errors_to_title) {
|
|
|
231
232
|
} else {
|
|
232
233
|
question_json['title_html'] = marked.parse(safeMarkdown).replace(/<img.*src=\"(.*?)\".*alt=\"(.*?)\".*\/?>/, '<a href="$1">$2</a>');
|
|
233
234
|
question_json['title_text'] = convert(question_json['title_html'], {
|
|
234
|
-
selectors: [
|
|
235
|
+
selectors: [
|
|
236
|
+
{selector: 'h1', options: { uppercase: false }},
|
|
237
|
+
{selector: 'h2', options: { uppercase: false }},
|
|
238
|
+
{selector: 'hr', format: 'skip'}
|
|
239
|
+
]
|
|
235
240
|
});
|
|
236
241
|
}
|
|
237
242
|
} catch(e){
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reality.eth/reality-eth-lib",
|
|
3
|
-
"version": "3.1
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Tools for handling questions in the reality.eth fact verification platform",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "env TZ='Asia/Kabul' mocha ./test"
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"url": "https://github.com/RealityETH/monorepo/issues"
|
|
40
40
|
},
|
|
41
41
|
"homepage": "https://reality.eth.link",
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "19cb85c2b77ec98d45754be024a1ad73d9249e00"
|
|
43
43
|
}
|
package/test/formatters.js
CHANGED
|
@@ -248,7 +248,55 @@ describe('Markdown questions', function() {
|
|
|
248
248
|
expect(q.format).to.equal('text/markdown');
|
|
249
249
|
expect(q.title_text).to.equal('my title oh yes');
|
|
250
250
|
expect(q.title).to.equal('# my title oh yes');
|
|
251
|
-
expect(q.title_html).to.equal('<h1
|
|
251
|
+
expect(q.title_html).to.equal('<h1>my title oh yes</h1>'+"\n");
|
|
252
|
+
});
|
|
253
|
+
it('Set title_text appropriatly for italic and bold headings', function() {
|
|
254
|
+
const qMarkdown = "{\"title\": \"# _Italic Heading 1_\\n## __Bold Heading 2__\", \"type\": \"bool\", \"category\": \"art\", \"lang\": \"en_US\", \"format\": \"text/markdown\"}";
|
|
255
|
+
const q = rc_question.parseQuestionJSON(qMarkdown, true);
|
|
256
|
+
expect(q.errors).to.equal(undefined);
|
|
257
|
+
expect(q.format).to.equal('text/markdown');
|
|
258
|
+
expect(q.title_text).to.equal('Italic Heading 1\n\n\nBold Heading 2');
|
|
259
|
+
expect(q.title).to.equal('# _Italic Heading 1_\n## __Bold Heading 2__');
|
|
260
|
+
expect(q.title_html).to.equal(`<h1><em>Italic Heading 1</em></h1>\n<h2><strong>Bold Heading 2</strong></h2>`+"\n");
|
|
261
|
+
});
|
|
262
|
+
it('Set title_text appropriatly for italic and bold quotes', function() {
|
|
263
|
+
const qMarkdown = "{\"title\": \">_Italic_ __Bold__\", \"type\": \"bool\", \"category\": \"art\", \"lang\": \"en_US\", \"format\": \"text/markdown\"}";
|
|
264
|
+
const q = rc_question.parseQuestionJSON(qMarkdown, true);
|
|
265
|
+
expect(q.errors).to.equal(undefined);
|
|
266
|
+
expect(q.format).to.equal('text/markdown');
|
|
267
|
+
expect(q.title_text).to.equal('> Italic Bold');
|
|
268
|
+
expect(q.title).to.equal('>_Italic_ __Bold__');
|
|
269
|
+
expect(q.title_html).to.equal('<blockquote>\n<p><em>Italic</em> <strong>Bold</strong></p>\n</blockquote>'+"\n");
|
|
270
|
+
});
|
|
271
|
+
it('Set title_text appropriatly for lists', function() {
|
|
272
|
+
const qMarkdown = "{\"title\": \"* __Item One__\\n* __Item Two__\\n* __Item Three__\\n1. Item One\\n2. Item Two\\n3. Item Three\", \"type\": \"bool\", \"category\": \"art\", \"lang\": \"en_US\", \"format\": \"text/markdown\"}";
|
|
273
|
+
const q = rc_question.parseQuestionJSON(qMarkdown, true);
|
|
274
|
+
expect(q.errors).to.equal(undefined);
|
|
275
|
+
expect(q.format).to.equal('text/markdown');
|
|
276
|
+
expect(q.title_text).to.equal(' * Item One\n * Item Two\n * Item Three\n\n 1. Item One\n 2. Item Two\n 3. Item Three');
|
|
277
|
+
expect(q.title).to.equal('* __Item One__\n* __Item Two__\n* __Item Three__\n1. Item One\n2. Item Two\n3. Item Three');
|
|
278
|
+
expect(q.title_html).to.equal(
|
|
279
|
+
`<ul>
|
|
280
|
+
<li><strong>Item One</strong></li>
|
|
281
|
+
<li><strong>Item Two</strong></li>
|
|
282
|
+
<li><strong>Item Three</strong></li>
|
|
283
|
+
</ul>
|
|
284
|
+
<ol>
|
|
285
|
+
<li>Item One</li>
|
|
286
|
+
<li>Item Two</li>
|
|
287
|
+
<li>Item Three</li>
|
|
288
|
+
</ol>` + "\n");
|
|
289
|
+
});
|
|
290
|
+
it('Set title_text appropriatly for code blocks', function() {
|
|
291
|
+
const qMarkdown = "{\"title\": \"`Inline code` with backticks\\n\\n```# code block\\nprint '3 backticks or'\\nprint 'indent 4 spaces'```\", \"type\": \"bool\", \"category\": \"art\", \"lang\": \"en_US\", \"format\": \"text/markdown\"}";
|
|
292
|
+
const q = rc_question.parseQuestionJSON(qMarkdown, true);
|
|
293
|
+
expect(q.errors).to.equal(undefined);
|
|
294
|
+
expect(q.format).to.equal('text/markdown');
|
|
295
|
+
expect(q.title_text).to.equal(`Inline code with backticks\n\n# code block print '3 backticks or' print 'indent 4 spaces'`);
|
|
296
|
+
expect(q.title).to.equal("`Inline code` with backticks\n\n```# code block\nprint '3 backticks or'\nprint 'indent 4 spaces'```");
|
|
297
|
+
expect(q.title_html).to.equal(
|
|
298
|
+
`<p><code>Inline code</code> with backticks</p>
|
|
299
|
+
<p><code># code block print '3 backticks or' print 'indent 4 spaces'</code></p>`+ "\n");
|
|
252
300
|
});
|
|
253
301
|
});
|
|
254
302
|
|
|
@@ -259,8 +307,8 @@ describe('Unsafe markdown questions', function() {
|
|
|
259
307
|
expect(q.errors.unsafe_markdown).to.equal(true);
|
|
260
308
|
});
|
|
261
309
|
it('Sets no error if a question includes valid markdown without html', function() {
|
|
262
|
-
const
|
|
263
|
-
const q = rc_question.parseQuestionJSON(
|
|
310
|
+
const qSafeMarkdown = "{\"title\": \"# Title\", \"type\": \"bool\", \"category\": \"art\", \"lang\": \"en_US\", \"format\": \"text/markdown\"}";
|
|
311
|
+
const q = rc_question.parseQuestionJSON(qSafeMarkdown, true);
|
|
264
312
|
expect(q.errors).to.equal(undefined);
|
|
265
313
|
expect(q.format).to.equal('text/markdown');
|
|
266
314
|
});
|