@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.
@@ -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: [{selector: 'h1', options: { uppercase: false }}, {selector: 'h2', options: { uppercase: false }}]
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.16",
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": "cb5d687e6d5fe075c7e01bf5cb06517eb211dc24"
42
+ "gitHead": "19cb85c2b77ec98d45754be024a1ad73d9249e00"
43
43
  }
@@ -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 id="my-title-oh-yes">my title oh yes</h1>'+"\n");
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 &#39;3 backticks or&#39; print &#39;indent 4 spaces&#39;</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 qUnsafeMarkdown = "{\"title\": \"# Title\", \"type\": \"bool\", \"category\": \"art\", \"lang\": \"en_US\", \"format\": \"text/markdown\"}";
263
- const q = rc_question.parseQuestionJSON(qUnsafeMarkdown, true);
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
  });