2023-02-21 21:27:34 +02:00
import DOMPurify from 'dompurify' ;
2021-05-07 02:13:20 +03:00
2020-09-11 02:04:17 +03:00
var Markdown = require ( 'markdown-it' ) ( {
html : true ,
linkify : true ,
2021-01-13 00:02:17 +02:00
typographer : true ,
breaks : true ,
2020-09-11 02:04:17 +03:00
} ) ;
2023-02-22 00:07:59 +02:00
//import markdownItMermaid from "@wekanteam/markdown-it-mermaid";
2021-03-04 16:30:06 +01:00
// Static URL Scheme Listing
var urlschemes = [
"aodroplink" ,
"thunderlink" ,
"cbthunderlink" ,
"onenote" ,
"file" ,
"abasurl" ,
"conisio" ,
"mailspring"
] ;
2021-10-26 01:50:28 +03:00
2021-05-07 02:13:20 +03:00
// Better would be a field in the admin backend to set this dynamically
2021-03-04 16:30:06 +01:00
// instead of putting all known or wanted url schemes here hard into code
// but i was not able to access those settings
// var urlschemes = currentSetting.automaticLinkedUrlSchemes.split('\n');
2021-10-26 01:50:28 +03:00
2021-03-04 16:30:06 +01:00
// put all url schemes into the linkify configuration to automatically make it clickable
for ( var i = 0 ; i < urlschemes . length ; i ++ ) {
Markdown . linkify . add ( urlschemes [ i ] + ":" , 'http:' ) ;
}
2020-09-11 02:04:17 +03:00
var emoji = require ( 'markdown-it-emoji' ) ;
Markdown . use ( emoji ) ;
2024-01-23 23:32:46 +02:00
2024-02-27 14:36:51 +02:00
var mathjax = require ( 'markdown-it-mathjax3' ) ;
Markdown . use ( mathjax ) ;
2022-09-22 21:24:07 +03:00
// Try to fix Mermaid Diagram error: Maximum call stack size exceeded.
// Added bigger text size for Diagram.
// https://github.com/wekan/wekan/issues/4251
// https://stackoverflow.com/questions/66825888/maximum-text-size-in-diagram-exceeded-mermaid-js
// https://github.com/mermaid-js/mermaid/blob/74b1219d62dd76d98d60abeeb36d4520f64faceb/src/defaultConfig.js#L39
// https://github.com/wekan/cli-table3
// https://www.npmjs.com/package/@wekanteam/markdown-it-mermaid
// https://github.com/wekan/markdown-it-mermaid
2023-02-22 00:07:59 +02:00
//Markdown.use(markdownItMermaid,{
// maxTextSize: 200000,
//});
2020-06-06 11:26:06 +02:00
if ( Package . ui ) {
2021-01-13 00:02:17 +02:00
const Template = Package . templating . Template ;
const UI = Package . ui . UI ;
const HTML = Package . htmljs . HTML ;
const Blaze = Package . blaze . Blaze ; // implied by `ui`
2020-06-06 11:26:06 +02:00
2021-01-13 00:02:17 +02:00
UI . registerHelper ( 'markdown' , new Template ( 'markdown' , function ( ) {
const self = this ;
let text = '' ;
if ( self . templateContentBlock ) {
text = Blaze . _toText ( self . templateContentBlock , HTML . TEXTMODE . STRING ) ;
}
2023-06-10 05:12:17 +03:00
if ( text . includes ( "[]" ) !== false ) {
// Prevent hiding info: https://wekan.github.io/hall-of-fame/invisiblebleed/
// If markdown link does not have description, do not render markdown, instead show all of markdown source code using preformatted text.
// Also show html comments.
return HTML . Raw ( '<pre style="background-color: red;" title="Warning! Hidden markdown link description!" aria-label="Warning! Hidden markdown link description!">' + DOMPurify . sanitize ( text . replace ( '<!--' , '<!--' ) . replace ( '-->' , '-->' ) ) + '</pre>' ) ;
2023-06-09 20:08:25 +03:00
} else {
2023-06-10 05:12:17 +03:00
// Prevent hiding info: https://wekan.github.io/hall-of-fame/invisiblebleed/
// If text does not have hidden markdown link, render all markdown.
// Also show html comments.
return HTML . Raw ( DOMPurify . sanitize ( Markdown . render ( text ) . replace ( '<!--' , '<font color="red" title="Warning! Hidden HTML comment!" aria-label="Warning! Hidden HTML comment!"><!--</font>' ) . replace ( '-->' , '<font color="red" title="Warning! Hidden HTML comment!" aria-label="Warning! Hidden HTML comment!">--></font>' ) , { ALLOW _UNKNOWN _PROTOCOLS : true } ) ) ;
2023-06-09 20:08:25 +03:00
}
2021-01-13 00:02:17 +02:00
} ) ) ;
2020-06-06 11:26:06 +02:00
}