// Want to use or contribute to this? https://github.com/Glitchii/embedbuilder
// If you found an issue, please report it, make a P.R, or use the discussion page. Thanks
var colNum = 1, num = 0;
window.onload = () => {
document.querySelectorAll('img.clickable')
.forEach(e => e.addEventListener('click', el => window.open(el.target.src)));
let textarea = document.querySelector('textarea');
window.editor = CodeMirror(elt => textarea.parentNode.replaceChild(elt, textarea), {
value: textarea.value,
theme: 'material-darker',
scrollbarStyle: "overlay",
mode: "application/json",
// lineNumbers: true,
foldGutter: true,
gutters: ["CodeMirror-foldgutter", "CodeMirror-lint-markers"],
matchBrackets: true,
lint: true
});
editor.focus();
let notif = document.querySelector('.notification'),
url = (url) => /^(https?:)?\/\//g.exec(url) ? url : '//' + url,
makeShort = (txt, length, mediaWidth) => {
if (mediaWidth && window.matchMedia(`(max-width:${mediaWidth}px)`).matches)
return txt.length > (length - 3) ? txt.substring(0, length - 3) + '...' : txt;
return txt;
}, error = (msg, html) => {
if (html) notif.innerHTML = msg;
else notif.innerText = msg;
notif.style.display = 'block';
// err && console.log(err);
}, markup = (txt, isEmbed) => {
txt = txt
// Custom Emojis
.replace(//g, '') // .replace(//g, '
') // This will keep logging failed GET request errors in console
// MD
.replace(/~~(.+?)~~/g, '
$1')
.replace(/\`(?!\`)([^\`]+?)\`(?!\`)/g, '$1
')
.replace(/\`\`(?!\`)([^\`]+?)\`\`(?!\`)/g, '$1
')
.replace(/\*\*\*(.+?)\*\*\*/g, '$1')
.replace(/\*\*(.+?)\*\*/g, '$1')
.replace(/__(.+?)__/g, '$1')
.replace(/\*(.+?)\*/g, '$1')
.replace(/_(.+?)_/g, '$1')
// Block
.replace(/\n/g, '
')
.replace(/\`\`\`(\w{1,15})
((\n|.)+?)\`\`\`/g, isEmbed ? '
' : '$2
')
.replace(/\`\`\`(\w{1,15})$2
((\n|.)+?)\`\`\`/g, isEmbed ? '
' : '$2
')
.replace(/\`\`\`($2
)?((\n|.)+?)\`\`\`/g, isEmbed ? '
' : '$2
')
if (isEmbed) txt = txt
.replace(/\[(.+)\]\((.+)\)/g, `$1`);
return txt;
},
content = document.querySelector('.messageContent'),
embed = document.querySelector('.embedGrid'),
msgEmbed = document.querySelector('.msgEmbed'),
embedTitle = document.querySelector('.embedTitle'),
embedDescription = document.querySelector('.embedDescription'),
embedAuthor = document.querySelector('.embedAuthor'),
embedFooter = document.querySelector('.embedFooter'),
embedImage = document.querySelector('.embedImage'),
embedThumbnail = document.querySelector('.embedThumbnail'),
fields = embed.querySelector('.embedFields'),
tstamp = stringISO => {
let date = stringISO ? new Date(stringISO) : new Date(),
dateArray = date.toLocaleString('en-US', { hour: 'numeric', hour12: true, minute: 'numeric' }),
today = new Date(),
yesterday = new Date(new Date().setDate(today.getDate() - 1));
return today.toDateString() === date.toDateString() ? `Today at ${dateArray}` :
yesterday.toDateString() === date.toDateString() ? `Yesterday at ${dateArray}` :
`${String(date.getMonth() + 1).padStart(2, '0')}/${String(date.getDate()).padStart(2, '0')}/${date.getFullYear()}`;
}, display = (el, data, displayType) => {
if (data) el.innerHTML = data;
el.style.display = displayType || "unset";
}, hide = el => el.style.removeProperty('display'),
toObj = jsonString => JSON.parse(jsonString.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (x, y) => y ? "" : x)),
update = data => {
try {
content.innerHTML = data.content ? markup(data.content) : '';
if (data.embed) {
let e = data.embed;
if (e.title) display(embedTitle, markup(`${e.url ? '' + e.title + '' : e.title}`));
else hide(embedTitle);
if (e.description) display(embedDescription, markup(e.description, true));
else hide(embedDescription);
if (e.color) embed.closest('.embed').style.borderColor = (typeof e.color === 'number' ? '#' + e.color.toString(16) : e.color);
else embed.closest('.embed').style.removeProperty('border-color');
if (e.author && e.author.name) display(embedAuthor, `
${e.author.icon_url ? '$2
' : ''}
${e.author.url ? '' + e.author.name + '' : ' '}`, 'flex');
else hide(embedAuthor);
if (e.thumbnail && e.thumbnail.url) embedThumbnail.src = e.thumbnail.url, embedThumbnail.style.display = 'block';
else hide(embedThumbnail);
if (e.image && e.image.url) embedImage.src = e.image.url, embedImage.style.display = 'block';
else hide(embedImage);
if (e.footer && e.footer.text) display(embedFooter, `
${e.footer.icon_url ? '
' : ''} `, 'flex');
else if (e.timestamp) display(embedFooter, ` `, 'flex');
else hide(embedFooter);
if (e.fields) {
fields.innerHTML = '';
e.fields.forEach(f => {
if (!f.inline) {
let el = fields.insertBefore(document.createElement('div'), null);
el.outerHTML = `