@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
53 lines • 4.88 kB
JavaScript
import * as LinkifyItNs from 'linkify-it';
const LinkifyIt = LinkifyItNs;
const whitelistedURLPatterns = [
/^https?:\/\//im,
/^ftps?:\/\//im,
/^\//im,
/^mailto:/im,
/^skype:/im,
/^callto:/im,
/^facetime:/im,
/^git:/im,
/^irc6?:/im,
/^news:/im,
/^nntp:/im,
/^feed:/im,
/^cvs:/im,
/^svn:/im,
/^mvn:/im,
/^ssh:/im,
/^scp:\/\//im,
/^sftp:\/\//im,
/^itms:/im,
/^notes:/im,
/^hipchat:\/\//im,
/^sourcetree:/im,
/^urn:/im,
/^tel:/im,
/^xmpp:/im,
/^telnet:/im,
/^vnc:/im,
/^rdp:/im,
/^whatsapp:/im,
/^slack:/im,
/^sips?:/im,
/^magnet:/im,
];
export const isSafeUrl = (url) => {
return whitelistedURLPatterns.some(p => p.test(url.trim()) === true);
};
const linkify = LinkifyIt();
linkify.add('sourcetree:', 'http:');
export function getLinkMatch(str) {
const match = str && linkify.match(str);
return match && match[0];
}
/**
* Adds protocol to url if needed.
*/
export function normalizeUrl(url) {
const match = getLinkMatch(url);
return (match && match.url) || url;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay11dGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B6b2RpYWMtdWkvZWRpdG9yLyIsInNvdXJjZXMiOlsicGx1Z2lucy9saW5rL21hcmstdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFdBQVcsTUFBTSxZQUFZLENBQUM7QUFFMUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFBO0FBRTdCLE1BQU0sc0JBQXNCLEdBQUc7SUFDM0IsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixPQUFPO0lBQ1AsWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osY0FBYztJQUNkLFNBQVM7SUFDVCxXQUFXO0lBQ1gsVUFBVTtJQUNWLFVBQVU7SUFDVixVQUFVO0lBQ1YsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULGFBQWE7SUFDYixjQUFjO0lBQ2QsVUFBVTtJQUNWLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFlBQVk7SUFDWixTQUFTO0lBQ1QsU0FBUztJQUNULGNBQWM7SUFDZCxXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7Q0FDZixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUU7SUFDOUMsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQVlGLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO0FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXBDLE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUNwQyxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIExpbmtpZnlJdE5zIGZyb20gJ2xpbmtpZnktaXQnO1xyXG5cclxuY29uc3QgTGlua2lmeUl0ID0gTGlua2lmeUl0TnNcclxuXHJcbmNvbnN0IHdoaXRlbGlzdGVkVVJMUGF0dGVybnMgPSBbXHJcbiAgICAvXmh0dHBzPzpcXC9cXC8vaW0sXHJcbiAgICAvXmZ0cHM/OlxcL1xcLy9pbSxcclxuICAgIC9eXFwvL2ltLFxyXG4gICAgL15tYWlsdG86L2ltLFxyXG4gICAgL15za3lwZTovaW0sXHJcbiAgICAvXmNhbGx0bzovaW0sXHJcbiAgICAvXmZhY2V0aW1lOi9pbSxcclxuICAgIC9eZ2l0Oi9pbSxcclxuICAgIC9eaXJjNj86L2ltLFxyXG4gICAgL15uZXdzOi9pbSxcclxuICAgIC9ebm50cDovaW0sXHJcbiAgICAvXmZlZWQ6L2ltLFxyXG4gICAgL15jdnM6L2ltLFxyXG4gICAgL15zdm46L2ltLFxyXG4gICAgL15tdm46L2ltLFxyXG4gICAgL15zc2g6L2ltLFxyXG4gICAgL15zY3A6XFwvXFwvL2ltLFxyXG4gICAgL15zZnRwOlxcL1xcLy9pbSxcclxuICAgIC9eaXRtczovaW0sXHJcbiAgICAvXm5vdGVzOi9pbSxcclxuICAgIC9eaGlwY2hhdDpcXC9cXC8vaW0sXHJcbiAgICAvXnNvdXJjZXRyZWU6L2ltLFxyXG4gICAgL151cm46L2ltLFxyXG4gICAgL150ZWw6L2ltLFxyXG4gICAgL154bXBwOi9pbSxcclxuICAgIC9edGVsbmV0Oi9pbSxcclxuICAgIC9edm5jOi9pbSxcclxuICAgIC9ecmRwOi9pbSxcclxuICAgIC9ed2hhdHNhcHA6L2ltLFxyXG4gICAgL15zbGFjazovaW0sXHJcbiAgICAvXnNpcHM/Oi9pbSxcclxuICAgIC9ebWFnbmV0Oi9pbSxcclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1NhZmVVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiB3aGl0ZWxpc3RlZFVSTFBhdHRlcm5zLnNvbWUocCA9PiBwLnRlc3QodXJsLnRyaW0oKSkgPT09IHRydWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNYXRjaCB7XHJcbiAgICBzY2hlbWE6IGFueTtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICBsYXN0SW5kZXg6IG51bWJlcjtcclxuICAgIHJhdzogc3RyaW5nO1xyXG4gICAgdGV4dDogc3RyaW5nO1xyXG4gICAgdXJsOiBzdHJpbmc7XHJcbiAgICBsZW5ndGg/OiBudW1iZXI7XHJcbn1cclxuXHJcbmNvbnN0IGxpbmtpZnkgPSBMaW5raWZ5SXQoKTtcclxubGlua2lmeS5hZGQoJ3NvdXJjZXRyZWU6JywgJ2h0dHA6Jyk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua01hdGNoKHN0cjogc3RyaW5nKTogJycgfCBNYXRjaCB8IG51bGwge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBzdHIgJiYgbGlua2lmeS5tYXRjaChzdHIpO1xyXG4gICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzBdO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyBwcm90b2NvbCB0byB1cmwgaWYgbmVlZGVkLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVVybCh1cmw6IHN0cmluZykge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBnZXRMaW5rTWF0Y2godXJsKTtcclxuICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gudXJsKSB8fCB1cmw7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXX0=