2018-06-15 11:03:24 -04:00
|
|
|
import {
|
|
|
|
cook as cookIt,
|
|
|
|
setup as setupIt
|
|
|
|
} from "pretty-text/engines/discourse-markdown-it";
|
2016-06-14 14:31:51 -04:00
|
|
|
|
2017-07-14 08:27:28 -04:00
|
|
|
export function registerOption() {
|
|
|
|
// TODO next major version deprecate this
|
|
|
|
// if (window.console) {
|
|
|
|
// window.console.log("registerOption is deprecated");
|
|
|
|
// }
|
2016-06-14 14:31:51 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
export function buildOptions(state) {
|
2016-07-07 03:52:56 -04:00
|
|
|
const {
|
|
|
|
siteSettings,
|
|
|
|
getURL,
|
|
|
|
lookupAvatar,
|
2017-11-03 09:51:40 -04:00
|
|
|
lookupPrimaryUserGroup,
|
2016-07-07 03:52:56 -04:00
|
|
|
getTopicInfo,
|
|
|
|
topicId,
|
|
|
|
categoryHashtagLookup,
|
|
|
|
userId,
|
|
|
|
getCurrentUser,
|
2017-06-08 18:02:30 -04:00
|
|
|
currentUser,
|
2017-06-28 13:47:22 -04:00
|
|
|
lookupAvatarByPostNumber,
|
2017-11-03 09:51:40 -04:00
|
|
|
lookupPrimaryUserGroupByPostNumber,
|
2017-11-20 16:28:03 -05:00
|
|
|
formatUsername,
|
2017-07-19 15:08:54 -04:00
|
|
|
emojiUnicodeReplacer,
|
2017-08-22 11:46:15 -04:00
|
|
|
lookupImageUrls,
|
2017-07-21 13:20:45 -04:00
|
|
|
previewing,
|
2017-06-28 16:56:44 -04:00
|
|
|
linkify,
|
2018-11-25 20:21:38 -05:00
|
|
|
censoredWords
|
2016-07-07 03:52:56 -04:00
|
|
|
} = state;
|
2016-06-14 14:31:51 -04:00
|
|
|
|
2017-07-14 08:27:28 -04:00
|
|
|
let features = {
|
2018-06-15 11:03:24 -04:00
|
|
|
"bold-italics": true,
|
|
|
|
"auto-link": true,
|
|
|
|
mentions: true,
|
|
|
|
bbcode: true,
|
|
|
|
quote: true,
|
|
|
|
html: true,
|
|
|
|
"category-hashtag": true,
|
|
|
|
onebox: true,
|
|
|
|
linkify: linkify !== false,
|
|
|
|
newline: !siteSettings.traditional_markdown_linebreaks
|
2016-06-14 14:31:51 -04:00
|
|
|
};
|
|
|
|
|
2017-07-14 08:27:28 -04:00
|
|
|
if (state.features) {
|
|
|
|
features = _.merge(features, state.features);
|
|
|
|
}
|
|
|
|
|
2016-06-14 14:31:51 -04:00
|
|
|
const options = {
|
|
|
|
sanitize: true,
|
|
|
|
getURL,
|
|
|
|
features,
|
|
|
|
lookupAvatar,
|
2017-11-03 09:51:40 -04:00
|
|
|
lookupPrimaryUserGroup,
|
2016-06-14 14:31:51 -04:00
|
|
|
getTopicInfo,
|
|
|
|
topicId,
|
|
|
|
categoryHashtagLookup,
|
2016-07-07 03:52:56 -04:00
|
|
|
userId,
|
|
|
|
getCurrentUser,
|
|
|
|
currentUser,
|
2017-06-08 18:02:30 -04:00
|
|
|
lookupAvatarByPostNumber,
|
2017-11-03 09:51:40 -04:00
|
|
|
lookupPrimaryUserGroupByPostNumber,
|
2017-11-20 16:28:03 -05:00
|
|
|
formatUsername,
|
2017-06-28 13:47:22 -04:00
|
|
|
emojiUnicodeReplacer,
|
2017-08-22 11:46:15 -04:00
|
|
|
lookupImageUrls,
|
2017-06-28 16:56:44 -04:00
|
|
|
censoredWords,
|
2018-06-15 11:03:24 -04:00
|
|
|
allowedHrefSchemes: siteSettings.allowed_href_schemes
|
|
|
|
? siteSettings.allowed_href_schemes.split("|")
|
|
|
|
: null,
|
|
|
|
allowedIframes: siteSettings.allowed_iframes
|
|
|
|
? siteSettings.allowed_iframes.split("|")
|
|
|
|
: [],
|
2017-07-19 15:08:54 -04:00
|
|
|
markdownIt: true,
|
2018-06-15 11:03:24 -04:00
|
|
|
injectLineNumbersToPreview:
|
|
|
|
siteSettings.enable_advanced_editor_preview_sync,
|
2018-11-25 20:21:38 -05:00
|
|
|
previewing
|
2016-06-14 14:31:51 -04:00
|
|
|
};
|
|
|
|
|
2017-07-14 08:27:28 -04:00
|
|
|
// note, this will mutate options due to the way the API is designed
|
|
|
|
// may need a refactor
|
|
|
|
setupIt(options, siteSettings, state);
|
2016-06-14 14:31:51 -04:00
|
|
|
|
|
|
|
return options;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default class {
|
|
|
|
constructor(opts) {
|
2017-07-14 08:27:28 -04:00
|
|
|
if (!opts) {
|
2018-06-15 11:03:24 -04:00
|
|
|
opts = buildOptions({ siteSettings: {} });
|
2017-07-14 08:27:28 -04:00
|
|
|
}
|
|
|
|
this.opts = opts;
|
|
|
|
}
|
|
|
|
|
|
|
|
disableSanitizer() {
|
|
|
|
this.opts.sanitizer = this.opts.discourse.sanitizer = ident => ident;
|
2016-06-14 14:31:51 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
cook(raw) {
|
2018-06-15 11:03:24 -04:00
|
|
|
if (!raw || raw.length === 0) {
|
|
|
|
return "";
|
|
|
|
}
|
2016-06-14 14:31:51 -04:00
|
|
|
|
2017-06-08 18:02:30 -04:00
|
|
|
let result;
|
2017-07-14 08:27:28 -04:00
|
|
|
result = cookIt(raw, this.opts);
|
2016-06-14 14:31:51 -04:00
|
|
|
return result ? result : "";
|
|
|
|
}
|
|
|
|
|
|
|
|
sanitize(html) {
|
2017-07-14 08:27:28 -04:00
|
|
|
return this.opts.sanitizer(html).trim();
|
2016-06-14 14:31:51 -04:00
|
|
|
}
|
2018-06-15 11:03:24 -04:00
|
|
|
}
|