This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/lib/text.js.es6
Jarek Radosz fe588cc7f8
DEV: Fix function prototype deprecations (#8681)
* DEV: Fix the function prototype observers deprecation

DEPRECATION: Function prototype extensions have been deprecated, please migrate from function(){}.observes('foo') to observer('foo', function() {}). [deprecation id: function-prototype-extensions.observes] See https://deprecations.emberjs.com/v3.x/#toc_function-prototype-extensions-observes for more details.

* DEV: Fix the function prototype event listeners deprecation

DEPRECATION: Function prototype extensions have been deprecated, please migrate from function(){}.on('foo') to on('foo', function() {}). [deprecation id: function-prototype-extensions.on] See https://deprecations.emberjs.com/v3.x/#toc_function-prototype-extensions-on for more details.

* DEV: Simplify `default as` imports

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2020-01-16 18:56:53 +01:00

91 lines
2.4 KiB
JavaScript

import PrettyText, { buildOptions } from "pretty-text/pretty-text";
import { performEmojiUnescape, buildEmojiUrl } from "pretty-text/emoji";
import WhiteLister from "pretty-text/white-lister";
import { sanitize as textSanitize } from "pretty-text/sanitizer";
import loadScript from "discourse/lib/load-script";
import { formatUsername } from "discourse/lib/utilities";
import { Promise } from "rsvp";
function getOpts(opts) {
const siteSettings = Discourse.__container__.lookup("site-settings:main"),
site = Discourse.__container__.lookup("site:main");
opts = _.merge(
{
getURL: Discourse.getURLWithCDN,
currentUser: Discourse.__container__.lookup("current-user:main"),
censoredRegexp: site.censored_regexp,
siteSettings,
formatUsername
},
opts
);
return buildOptions(opts);
}
// Use this to easily create a pretty text instance with proper options
export function cook(text, options) {
return new Handlebars.SafeString(createPrettyText(options).cook(text));
}
// everything should eventually move to async API and this should be renamed
// cook
export function cookAsync(text, options) {
return loadMarkdownIt().then(() => cook(text, options));
}
export function sanitize(text, options) {
return textSanitize(text, new WhiteLister(options));
}
export function sanitizeAsync(text, options) {
return new loadMarkdownIt().then(() => {
return createPrettyText(options).sanitize(text);
});
}
function loadMarkdownIt() {
if (Discourse.MarkdownItURL) {
return loadScript(Discourse.MarkdownItURL).catch(e => {
// eslint-disable-next-line no-console
console.error(e);
});
} else {
return Promise.resolve();
}
}
function createPrettyText(options) {
return new PrettyText(getOpts(options));
}
function emojiOptions() {
if (!Discourse.SiteSettings.enable_emoji) {
return;
}
return {
getURL: Discourse.getURLWithCDN,
emojiSet: Discourse.SiteSettings.emoji_set,
enableEmojiShortcuts: Discourse.SiteSettings.enable_emoji_shortcuts,
inlineEmoji: Discourse.SiteSettings.enable_inline_emoji_translation
};
}
export function emojiUnescape(string, options) {
const opts = emojiOptions();
if (opts) {
return performEmojiUnescape(string, Object.assign(opts, options || {}));
} else {
return string;
}
}
export function emojiUrlFor(code) {
const opts = emojiOptions();
if (opts) {
return buildEmojiUrl(code, opts);
}
}