0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-07 03:22:38 +00:00
This commit is contained in:
Trevor Buckner
2024-05-08 14:53:24 -04:00
parent d692e88b96
commit a6b2dab9cc
6 changed files with 2375 additions and 2375 deletions

View File

@@ -11,53 +11,53 @@ const emojis = {
const showAutocompleteEmoji = function(CodeMirror, editor) { const showAutocompleteEmoji = function(CodeMirror, editor) {
CodeMirror.commands.autocomplete = function(editor) { CodeMirror.commands.autocomplete = function(editor) {
editor.showHint({ editor.showHint({
completeSingle: false, completeSingle : false,
hint: function(editor) { hint : function(editor) {
const cursor = editor.getCursor(); const cursor = editor.getCursor();
const line = cursor.line; const line = cursor.line;
const lineContent = editor.getLine(line); const lineContent = editor.getLine(line);
const start = lineContent.lastIndexOf(':', cursor.ch - 1) + 1; const start = lineContent.lastIndexOf(':', cursor.ch - 1) + 1;
const end = cursor.ch; const end = cursor.ch;
const currentWord = lineContent.slice(start, end); const currentWord = lineContent.slice(start, end);
const list = Object.keys(emojis).filter(function(emoji) { const list = Object.keys(emojis).filter(function(emoji) {
return emoji.toLowerCase().indexOf(currentWord.toLowerCase()) >= 0; return emoji.toLowerCase().indexOf(currentWord.toLowerCase()) >= 0;
}).sort((a, b) => { }).sort((a, b)=>{
const lowerA = a.replace(/\d+/g, function(match) { // Temporarily convert any numbers in emoji string const lowerA = a.replace(/\d+/g, function(match) { // Temporarily convert any numbers in emoji string
return match.padStart(4, '0'); // to 4-digits, left-padded with 0's, to aid in return match.padStart(4, '0'); // to 4-digits, left-padded with 0's, to aid in
}).toLowerCase(); // sorting numbers, i.e., "d6, d10, d20", not "d10, d20, d6" }).toLowerCase(); // sorting numbers, i.e., "d6, d10, d20", not "d10, d20, d6"
const lowerB = b.replace(/\d+/g, function(match) { // Also make lowercase for case-insensitive alpha sorting const lowerB = b.replace(/\d+/g, function(match) { // Also make lowercase for case-insensitive alpha sorting
return match.padStart(4, '0'); return match.padStart(4, '0');
}).toLowerCase(); }).toLowerCase();
if (lowerA < lowerB) if(lowerA < lowerB)
return -1; return -1;
return 1; return 1;
}).map(function(emoji) { }).map(function(emoji) {
return { return {
text: emoji + ":", // Text to output to editor when option is selected text : `${emoji}:`, // Text to output to editor when option is selected
render: function(element, self, data) { // How to display the option in the dropdown render : function(element, self, data) { // How to display the option in the dropdown
const div = document.createElement('div'); const div = document.createElement('div');
div.innerHTML = `<i class="emojiPreview ${emojis[emoji]}"></i> ${emoji}`; div.innerHTML = `<i class="emojiPreview ${emojis[emoji]}"></i> ${emoji}`;
element.appendChild(div); element.appendChild(div);
} }
}; };
}); });
return { return {
list: list.length ? list : [], list : list.length ? list : [],
from: CodeMirror.Pos(line, start), from : CodeMirror.Pos(line, start),
to: CodeMirror.Pos(line, end) to : CodeMirror.Pos(line, end)
}; };
} }
}); });
}; };
editor.on('inputRead', function(instance, change) { editor.on('inputRead', function(instance, change) {
const cursor = editor.getCursor(); const cursor = editor.getCursor();
const line = editor.getLine(cursor.line); const line = editor.getLine(cursor.line);
// Get the text from the start of the line to the cursor // Get the text from the start of the line to the cursor
const textToCursor = line.slice(0, cursor.ch); const textToCursor = line.slice(0, cursor.ch);
@@ -66,17 +66,17 @@ const showAutocompleteEmoji = function(CodeMirror, editor) {
const curlyToCursor = textToCursor.slice(textToCursor.indexOf(`{`)); const curlyToCursor = textToCursor.slice(textToCursor.indexOf(`{`));
const curlySpanRegex = /{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1$/g; const curlySpanRegex = /{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1$/g;
if (curlySpanRegex.test(curlyToCursor)) if(curlySpanRegex.test(curlyToCursor))
return; return;
} }
// Check if the text ends with ':xyz' // Check if the text ends with ':xyz'
if (/:[^\s:]+$/.test(textToCursor)) { if(/:[^\s:]+$/.test(textToCursor)) {
CodeMirror.commands.autocomplete(editor); CodeMirror.commands.autocomplete(editor);
} }
}); });
} };
module.exports = { module.exports = {
showAutocompleteEmoji showAutocompleteEmoji
}; };

View File

@@ -180,7 +180,7 @@ const CodeEditor = createClass({
// return el; // return el;
// } // }
}); });
// Add custom behaviors (auto-close curlies and auto-complete emojis) // Add custom behaviors (auto-close curlies and auto-complete emojis)
closeTag.autoCloseCurlyBraces(CodeMirror, this.codeMirror); closeTag.autoCloseCurlyBraces(CodeMirror, this.codeMirror);
autoCompleteEmoji.showAutocompleteEmoji(CodeMirror, this.codeMirror); autoCompleteEmoji.showAutocompleteEmoji(CodeMirror, this.codeMirror);
@@ -442,7 +442,7 @@ const CodeEditor = createClass({
render : function(){ render : function(){
return <> return <>
<link href={`../homebrew/cm-themes/${this.props.editorTheme}.css`} type="text/css" rel='stylesheet' /> <link href={`../homebrew/cm-themes/${this.props.editorTheme}.css`} type='text/css' rel='stylesheet' />
<div className='codeEditor' ref='editor' style={this.props.style}/> <div className='codeEditor' ref='editor' style={this.props.style}/>
</>; </>;
} }

View File

@@ -4,7 +4,7 @@ const Marked = require('marked');
const MarkedExtendedTables = require('marked-extended-tables'); const MarkedExtendedTables = require('marked-extended-tables');
const { markedSmartypantsLite: MarkedSmartypantsLite } = require('marked-smartypants-lite'); const { markedSmartypantsLite: MarkedSmartypantsLite } = require('marked-smartypants-lite');
const { gfmHeadingId: MarkedGFMHeadingId } = require('marked-gfm-heading-id'); const { gfmHeadingId: MarkedGFMHeadingId } = require('marked-gfm-heading-id');
const { markedEmoji: MarkedEmojis} = require('marked-emoji'); const { markedEmoji: MarkedEmojis } = require('marked-emoji');
//Icon fonts included so they can appear in emoji autosuggest dropdown //Icon fonts included so they can appear in emoji autosuggest dropdown
const diceFont = require('../../themes/fonts/iconFonts/diceFont.js'); const diceFont = require('../../themes/fonts/iconFonts/diceFont.js');
@@ -147,7 +147,7 @@ const mustacheSpans = {
`${tags.classes ? ` class="${tags.classes}"` : ''}` + `${tags.classes ? ` class="${tags.classes}"` : ''}` +
`${tags.id ? ` id="${tags.id}"` : ''}` + `${tags.id ? ` id="${tags.id}"` : ''}` +
`${tags.styles ? ` style="${tags.styles}"` : ''}` + `${tags.styles ? ` style="${tags.styles}"` : ''}` +
`${tags.attributes ? ` ${Object.entries(tags.attributes).map(([key, value]) => `${key}="${value}"`).join(' ')}` : ''}` + `${tags.attributes ? ` ${Object.entries(tags.attributes).map(([key, value])=>`${key}="${value}"`).join(' ')}` : ''}` +
`>${this.parser.parseInline(token.tokens)}</span>`; // parseInline to turn child tokens into HTML `>${this.parser.parseInline(token.tokens)}</span>`; // parseInline to turn child tokens into HTML
} }
}; };
@@ -203,7 +203,7 @@ const mustacheDivs = {
`${tags.classes ? ` class="${tags.classes}"` : ''}` + `${tags.classes ? ` class="${tags.classes}"` : ''}` +
`${tags.id ? ` id="${tags.id}"` : ''}` + `${tags.id ? ` id="${tags.id}"` : ''}` +
`${tags.styles ? ` style="${tags.styles}"` : ''}` + `${tags.styles ? ` style="${tags.styles}"` : ''}` +
`${tags.attributes ? ` ${Object.entries(tags.attributes).map(([key, value]) => `${key}="${value}"`).join(' ')}` : ''}` + `${tags.attributes ? ` ${Object.entries(tags.attributes).map(([key, value])=>`${key}="${value}"`).join(' ')}` : ''}` +
`>${this.parser.parse(token.tokens)}</div>`; // parse to turn child tokens into HTML `>${this.parser.parse(token.tokens)}</div>`; // parse to turn child tokens into HTML
} }
}; };
@@ -251,7 +251,7 @@ const mustacheInjectInline = {
`${tags.classes ? ` class="${tags.classes}"` : ''}` + `${tags.classes ? ` class="${tags.classes}"` : ''}` +
`${tags.id ? ` id="${tags.id}"` : ''}` + `${tags.id ? ` id="${tags.id}"` : ''}` +
`${tags.styles ? ` style="${tags.styles}"` : ''}` + `${tags.styles ? ` style="${tags.styles}"` : ''}` +
`${!_.isEmpty(tags.attributes) ? ` ${Object.entries(tags.attributes).map(([key, value]) => `${key}="${value}"`).join(' ')}` : ''}` + `${!_.isEmpty(tags.attributes) ? ` ${Object.entries(tags.attributes).map(([key, value])=>`${key}="${value}"`).join(' ')}` : ''}` +
`${openingTag[2]}`; // parse to turn child tokens into HTML `${openingTag[2]}`; // parse to turn child tokens into HTML
} }
return text; return text;
@@ -300,7 +300,7 @@ const mustacheInjectBlock = {
`${tags.classes ? ` class="${tags.classes}"` : ''}` + `${tags.classes ? ` class="${tags.classes}"` : ''}` +
`${tags.id ? ` id="${tags.id}"` : ''}` + `${tags.id ? ` id="${tags.id}"` : ''}` +
`${tags.styles ? ` style="${tags.styles}"` : ''}` + `${tags.styles ? ` style="${tags.styles}"` : ''}` +
`${!_.isEmpty(tags.attributes) ? ` ${Object.entries(tags.attributes).map(([key, value]) => `${key}="${value}"`).join(' ')}` : ''}` + `${!_.isEmpty(tags.attributes) ? ` ${Object.entries(tags.attributes).map(([key, value])=>`${key}="${value}"`).join(' ')}` : ''}` +
`${openingTag[2]}`; // parse to turn child tokens into HTML `${openingTag[2]}`; // parse to turn child tokens into HTML
} }
return text; return text;
@@ -354,13 +354,13 @@ const definitionListsSingleLine = {
let endIndex = 0; let endIndex = 0;
const definitions = []; const definitions = [];
while (match = regex.exec(src)) { while (match = regex.exec(src)) {
let originalLine = match[0]; // This line and below to handle conflict with emojis const originalLine = match[0]; // This line and below to handle conflict with emojis
let firstLine = originalLine; // Remove in V4 when definitionListsInline updated to let firstLine = originalLine; // Remove in V4 when definitionListsInline updated to
this.lexer.inlineTokens(firstLine.trim()) // require spaces around `::` this.lexer.inlineTokens(firstLine.trim()) // require spaces around `::`
.filter(t => t.type == 'emoji') .filter((t)=>t.type == 'emoji')
.map(emoji => firstLine = firstLine.replace(emoji.raw, 'x'.repeat(emoji.raw.length))); .map((emoji)=>firstLine = firstLine.replace(emoji.raw, 'x'.repeat(emoji.raw.length)));
let newMatch = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym.exec(firstLine); const newMatch = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym.exec(firstLine);
if(newMatch) { if(newMatch) {
definitions.push({ definitions.push({
dt : this.lexer.inlineTokens(originalLine.slice(0, newMatch[1].length).trim()), dt : this.lexer.inlineTokens(originalLine.slice(0, newMatch[1].length).trim()),
@@ -685,12 +685,12 @@ function MarkedVariables() {
// 6) Import the .js file to shared/naturalcrit/codeEditor/autocompleteEmoji.js and add to `emojis` object // 6) Import the .js file to shared/naturalcrit/codeEditor/autocompleteEmoji.js and add to `emojis` object
// 7) Import the .js file here to markdown.js, and add to `emojis` object below // 7) Import the .js file here to markdown.js, and add to `emojis` object below
const MarkedEmojiOptions = { const MarkedEmojiOptions = {
emojis: { emojis : {
...diceFont, ...diceFont,
...elderberryInn, ...elderberryInn,
...fontAwesome ...fontAwesome
}, },
renderer: (token) => `<i class="${token.emoji}"></i>` renderer : (token)=>`<i class="${token.emoji}"></i>`
}; };
Marked.use(MarkedVariables()); Marked.use(MarkedVariables());
@@ -767,9 +767,9 @@ const processStyleTags = (string)=>{
const id = _.remove(tags, (tag)=>tag.startsWith('#')).map((tag)=>tag.slice(1))[0] || null; const id = _.remove(tags, (tag)=>tag.startsWith('#')).map((tag)=>tag.slice(1))[0] || null;
const classes = _.remove(tags, (tag)=>(!tag.includes(':')) && (!tag.includes('='))).join(' ') || null; const classes = _.remove(tags, (tag)=>(!tag.includes(':')) && (!tag.includes('='))).join(' ') || null;
const attributes = _.remove(tags, (tag)=>(tag.includes('='))).map((tag)=>tag.replace(/="?([^"]*)"?/g, '="$1"')) const attributes = _.remove(tags, (tag)=>(tag.includes('='))).map((tag)=>tag.replace(/="?([^"]*)"?/g, '="$1"'))
?.filter(attr => !attr.startsWith('class="') && !attr.startsWith('style="') && !attr.startsWith('id="')) ?.filter((attr)=>!attr.startsWith('class="') && !attr.startsWith('style="') && !attr.startsWith('id="'))
.reduce((obj, attr) => { .reduce((obj, attr)=>{
let [key, value] = attr.split("="); let [key, value] = attr.split('=');
value = value.replace(/"/g, ''); value = value.replace(/"/g, '');
obj[key] = value; obj[key] = value;
return obj; return obj;
@@ -784,14 +784,14 @@ const processStyleTags = (string)=>{
}; };
}; };
const extractHTMLStyleTags = (htmlString)=> { const extractHTMLStyleTags = (htmlString)=>{
const id = htmlString.match(/id="([^"]*)"/)?.[1] || null; const id = htmlString.match(/id="([^"]*)"/)?.[1] || null;
const classes = htmlString.match(/class="([^"]*)"/)?.[1] || null; const classes = htmlString.match(/class="([^"]*)"/)?.[1] || null;
const styles = htmlString.match(/style="([^"]*)"/)?.[1] || null; const styles = htmlString.match(/style="([^"]*)"/)?.[1] || null;
const attributes = htmlString.match(/[a-zA-Z]+="[^"]*"/g) const attributes = htmlString.match(/[a-zA-Z]+="[^"]*"/g)
?.filter(attr => !attr.startsWith('class="') && !attr.startsWith('style="') && !attr.startsWith('id="')) ?.filter((attr)=>!attr.startsWith('class="') && !attr.startsWith('style="') && !attr.startsWith('id="'))
.reduce((obj, attr) => { .reduce((obj, attr)=>{
let [key, value] = attr.split("="); let [key, value] = attr.split('=');
value = value.replace(/"/g, ''); value = value.replace(/"/g, '');
obj[key] = value; obj[key] = value;
return obj; return obj;

View File

@@ -1,96 +1,96 @@
const diceFont = { const diceFont = {
"df_f" : "df F", 'df_f' : 'df F',
"df_f_minus" : "df F-minus", 'df_f_minus' : 'df F-minus',
"df_f_plus" : "df F-plus", 'df_f_plus' : 'df F-plus',
"df_f_zero" : "df F-zero", 'df_f_zero' : 'df F-zero',
"df_d10" : "df d10", 'df_d10' : 'df d10',
"df_d10_1" : "df d10-1", 'df_d10_1' : 'df d10-1',
"df_d10_10" : "df d10-10", 'df_d10_10' : 'df d10-10',
"df_d10_2" : "df d10-2", 'df_d10_2' : 'df d10-2',
"df_d10_3" : "df d10-3", 'df_d10_3' : 'df d10-3',
"df_d10_4" : "df d10-4", 'df_d10_4' : 'df d10-4',
"df_d10_5" : "df d10-5", 'df_d10_5' : 'df d10-5',
"df_d10_6" : "df d10-6", 'df_d10_6' : 'df d10-6',
"df_d10_7" : "df d10-7", 'df_d10_7' : 'df d10-7',
"df_d10_8" : "df d10-8", 'df_d10_8' : 'df d10-8',
"df_d10_9" : "df d10-9", 'df_d10_9' : 'df d10-9',
"df_d12" : "df d12", 'df_d12' : 'df d12',
"df_d12_1" : "df d12-1", 'df_d12_1' : 'df d12-1',
"df_d12_10" : "df d12-10", 'df_d12_10' : 'df d12-10',
"df_d12_11" : "df d12-11", 'df_d12_11' : 'df d12-11',
"df_d12_12" : "df d12-12", 'df_d12_12' : 'df d12-12',
"df_d12_2" : "df d12-2", 'df_d12_2' : 'df d12-2',
"df_d12_3" : "df d12-3", 'df_d12_3' : 'df d12-3',
"df_d12_4" : "df d12-4", 'df_d12_4' : 'df d12-4',
"df_d12_5" : "df d12-5", 'df_d12_5' : 'df d12-5',
"df_d12_6" : "df d12-6", 'df_d12_6' : 'df d12-6',
"df_d12_7" : "df d12-7", 'df_d12_7' : 'df d12-7',
"df_d12_8" : "df d12-8", 'df_d12_8' : 'df d12-8',
"df_d12_9" : "df d12-9", 'df_d12_9' : 'df d12-9',
"df_d2" : "df d2", 'df_d2' : 'df d2',
"df_d2_1" : "df d2-1", 'df_d2_1' : 'df d2-1',
"df_d2_2" : "df d2-2", 'df_d2_2' : 'df d2-2',
"df_d20" : "df d20", 'df_d20' : 'df d20',
"df_d20_1" : "df d20-1", 'df_d20_1' : 'df d20-1',
"df_d20_10" : "df d20-10", 'df_d20_10' : 'df d20-10',
"df_d20_11" : "df d20-11", 'df_d20_11' : 'df d20-11',
"df_d20_12" : "df d20-12", 'df_d20_12' : 'df d20-12',
"df_d20_13" : "df d20-13", 'df_d20_13' : 'df d20-13',
"df_d20_14" : "df d20-14", 'df_d20_14' : 'df d20-14',
"df_d20_15" : "df d20-15", 'df_d20_15' : 'df d20-15',
"df_d20_16" : "df d20-16", 'df_d20_16' : 'df d20-16',
"df_d20_17" : "df d20-17", 'df_d20_17' : 'df d20-17',
"df_d20_18" : "df d20-18", 'df_d20_18' : 'df d20-18',
"df_d20_19" : "df d20-19", 'df_d20_19' : 'df d20-19',
"df_d20_2" : "df d20-2", 'df_d20_2' : 'df d20-2',
"df_d20_20" : "df d20-20", 'df_d20_20' : 'df d20-20',
"df_d20_3" : "df d20-3", 'df_d20_3' : 'df d20-3',
"df_d20_4" : "df d20-4", 'df_d20_4' : 'df d20-4',
"df_d20_5" : "df d20-5", 'df_d20_5' : 'df d20-5',
"df_d20_6" : "df d20-6", 'df_d20_6' : 'df d20-6',
"df_d20_7" : "df d20-7", 'df_d20_7' : 'df d20-7',
"df_d20_8" : "df d20-8", 'df_d20_8' : 'df d20-8',
"df_d20_9" : "df d20-9", 'df_d20_9' : 'df d20-9',
"df_d4" : "df d4", 'df_d4' : 'df d4',
"df_d4_1" : "df d4-1", 'df_d4_1' : 'df d4-1',
"df_d4_2" : "df d4-2", 'df_d4_2' : 'df d4-2',
"df_d4_3" : "df d4-3", 'df_d4_3' : 'df d4-3',
"df_d4_4" : "df d4-4", 'df_d4_4' : 'df d4-4',
"df_d6" : "df d6", 'df_d6' : 'df d6',
"df_d6_1" : "df d6-1", 'df_d6_1' : 'df d6-1',
"df_d6_2" : "df d6-2", 'df_d6_2' : 'df d6-2',
"df_d6_3" : "df d6-3", 'df_d6_3' : 'df d6-3',
"df_d6_4" : "df d6-4", 'df_d6_4' : 'df d6-4',
"df_d6_5" : "df d6-5", 'df_d6_5' : 'df d6-5',
"df_d6_6" : "df d6-6", 'df_d6_6' : 'df d6-6',
"df_d8" : "df d8", 'df_d8' : 'df d8',
"df_d8_1" : "df d8-1", 'df_d8_1' : 'df d8-1',
"df_d8_2" : "df d8-2", 'df_d8_2' : 'df d8-2',
"df_d8_3" : "df d8-3", 'df_d8_3' : 'df d8-3',
"df_d8_4" : "df d8-4", 'df_d8_4' : 'df d8-4',
"df_d8_5" : "df d8-5", 'df_d8_5' : 'df d8-5',
"df_d8_6" : "df d8-6", 'df_d8_6' : 'df d8-6',
"df_d8_7" : "df d8-7", 'df_d8_7' : 'df d8-7',
"df_d8_8" : "df d8-8", 'df_d8_8' : 'df d8-8',
"df_dot_d6" : "df dot-d6", 'df_dot_d6' : 'df dot-d6',
"df_dot_d6_1" : "df dot-d6-1", 'df_dot_d6_1' : 'df dot-d6-1',
"df_dot_d6_2" : "df dot-d6-2", 'df_dot_d6_2' : 'df dot-d6-2',
"df_dot_d6_3" : "df dot-d6-3", 'df_dot_d6_3' : 'df dot-d6-3',
"df_dot_d6_4" : "df dot-d6-4", 'df_dot_d6_4' : 'df dot-d6-4',
"df_dot_d6_5" : "df dot-d6-5", 'df_dot_d6_5' : 'df dot-d6-5',
"df_dot_d6_6" : "df dot-d6-6", 'df_dot_d6_6' : 'df dot-d6-6',
"df_small_dot_d6_1" : "df small-dot-d6-1", 'df_small_dot_d6_1' : 'df small-dot-d6-1',
"df_small_dot_d6_2" : "df small-dot-d6-2", 'df_small_dot_d6_2' : 'df small-dot-d6-2',
"df_small_dot_d6_3" : "df small-dot-d6-3", 'df_small_dot_d6_3' : 'df small-dot-d6-3',
"df_small_dot_d6_4" : "df small-dot-d6-4", 'df_small_dot_d6_4' : 'df small-dot-d6-4',
"df_small_dot_d6_5" : "df small-dot-d6-5", 'df_small_dot_d6_5' : 'df small-dot-d6-5',
"df_small_dot_d6_6" : "df small-dot-d6-6", 'df_small_dot_d6_6' : 'df small-dot-d6-6',
"df_solid_small_dot_d6_1" : "df solid-small-dot-d6-1", 'df_solid_small_dot_d6_1' : 'df solid-small-dot-d6-1',
"df_solid_small_dot_d6_2" : "df solid-small-dot-d6-2", 'df_solid_small_dot_d6_2' : 'df solid-small-dot-d6-2',
"df_solid_small_dot_d6_3" : "df solid-small-dot-d6-3", 'df_solid_small_dot_d6_3' : 'df solid-small-dot-d6-3',
"df_solid_small_dot_d6_4" : "df solid-small-dot-d6-4", 'df_solid_small_dot_d6_4' : 'df solid-small-dot-d6-4',
"df_solid_small_dot_d6_5" : "df solid-small-dot-d6-5", 'df_solid_small_dot_d6_5' : 'df solid-small-dot-d6-5',
"df_solid_small_dot_d6_6" : "df solid-small-dot-d6-6" 'df_solid_small_dot_d6_6' : 'df solid-small-dot-d6-6'
} };
module.exports = diceFont; module.exports = diceFont;

View File

@@ -1,208 +1,208 @@
const elderberryInn = { const elderberryInn = {
"ei_book" : "ei book", 'ei_book' : 'ei book',
"ei_screen" : "ei screen", 'ei_screen' : 'ei screen',
/* Spell levels */ /* Spell levels */
"ei_spell_0" : "ei spell-0", 'ei_spell_0' : 'ei spell-0',
"ei_spell_1" : "ei spell-1", 'ei_spell_1' : 'ei spell-1',
"ei_spell_2" : "ei spell-2", 'ei_spell_2' : 'ei spell-2',
"ei_spell_3" : "ei spell-3", 'ei_spell_3' : 'ei spell-3',
"ei_spell_4" : "ei spell-4", 'ei_spell_4' : 'ei spell-4',
"ei_spell_5" : "ei spell-5", 'ei_spell_5' : 'ei spell-5',
"ei_spell_6" : "ei spell-6", 'ei_spell_6' : 'ei spell-6',
"ei_spell_7" : "ei spell-7", 'ei_spell_7' : 'ei spell-7',
"ei_spell_8" : "ei spell-8", 'ei_spell_8' : 'ei spell-8',
"ei_spell_9" : "ei spell-9", 'ei_spell_9' : 'ei spell-9',
/* Damage types */ /* Damage types */
"ei_acid" : "ei acid", 'ei_acid' : 'ei acid',
"ei_bludgeoning" : "ei bludgeoning", 'ei_bludgeoning' : 'ei bludgeoning',
"ei_cold" : "ei cold", 'ei_cold' : 'ei cold',
"ei_fire" : "ei fire", 'ei_fire' : 'ei fire',
"ei_force" : "ei force", 'ei_force' : 'ei force',
"ei_lightning" : "ei lightning", 'ei_lightning' : 'ei lightning',
"ei_necrotic" : "ei necrotic", 'ei_necrotic' : 'ei necrotic',
"ei_piercing" : "ei piercing", 'ei_piercing' : 'ei piercing',
"ei_poison" : "ei poison", 'ei_poison' : 'ei poison',
"ei_psychic" : "ei psychic", 'ei_psychic' : 'ei psychic',
"ei_radiant" : "ei radiant", 'ei_radiant' : 'ei radiant',
"ei_slashing" : "ei slashing", 'ei_slashing' : 'ei slashing',
"ei_thunder" : "ei thunder", 'ei_thunder' : 'ei thunder',
/* DnD Donditions */ /* DnD Donditions */
"ei_blinded" : "ei blinded", 'ei_blinded' : 'ei blinded',
"ei_charmed" : "ei charmed", 'ei_charmed' : 'ei charmed',
"ei_deafened" : "ei deafened", 'ei_deafened' : 'ei deafened',
"ei_exhaust1" : "ei exhaust-1", 'ei_exhaust1' : 'ei exhaust-1',
"ei_blinded" : "ei blinded", 'ei_blinded' : 'ei blinded',
"ei_exhaust2" : "ei exhaust-2", 'ei_exhaust2' : 'ei exhaust-2',
"ei_exhaust3" : "ei exhaust-3", 'ei_exhaust3' : 'ei exhaust-3',
"ei_exhaust4" : "ei exhaust-4", 'ei_exhaust4' : 'ei exhaust-4',
"ei_exhaust5" : "ei exhaust-5", 'ei_exhaust5' : 'ei exhaust-5',
"ei_exhaust6" : "ei exhaust-6", 'ei_exhaust6' : 'ei exhaust-6',
"ei_frightened" : "ei frightened", 'ei_frightened' : 'ei frightened',
"ei_grappled" : "ei grappled", 'ei_grappled' : 'ei grappled',
"ei_incapacitated" : "ei incapacitated", 'ei_incapacitated' : 'ei incapacitated',
"ei_invisible" : "ei invisible", 'ei_invisible' : 'ei invisible',
"ei_paralyzed" : "ei paralyzed", 'ei_paralyzed' : 'ei paralyzed',
"ei_petrified" : "ei petrified", 'ei_petrified' : 'ei petrified',
"ei_poisoned" : "ei poisoned", 'ei_poisoned' : 'ei poisoned',
"ei_prone" : "ei prone", 'ei_prone' : 'ei prone',
"ei_restrained" : "ei restrained", 'ei_restrained' : 'ei restrained',
"ei_stunned" : "ei stunned", 'ei_stunned' : 'ei stunned',
"ei_unconscious" : "ei unconscious", 'ei_unconscious' : 'ei unconscious',
/* Character Classes and Features */ /* Character Classes and Features */
"ei_barbarian_rage" : "ei barbarian-rage", 'ei_barbarian_rage' : 'ei barbarian-rage',
"ei_barbarian_reckless_attack" : "ei barbarian-reckless-attack", 'ei_barbarian_reckless_attack' : 'ei barbarian-reckless-attack',
"ei_bardic_inspiration" : "ei bardic-inspiration", 'ei_bardic_inspiration' : 'ei bardic-inspiration',
"ei_cleric_channel_divinity" : "ei cleric-channel-divinity", 'ei_cleric_channel_divinity' : 'ei cleric-channel-divinity',
"ei_druid_wild_shape" : "ei druid-wild-shape", 'ei_druid_wild_shape' : 'ei druid-wild-shape',
"ei_fighter_action_surge" : "ei fighter-action-surge", 'ei_fighter_action_surge' : 'ei fighter-action-surge',
"ei_fighter_second_wind" : "ei fighter-second-wind", 'ei_fighter_second_wind' : 'ei fighter-second-wind',
"ei_monk_flurry_blows" : "ei monk-flurry-blows", 'ei_monk_flurry_blows' : 'ei monk-flurry-blows',
"ei_monk_patient_defense" : "ei monk-patient-defense", 'ei_monk_patient_defense' : 'ei monk-patient-defense',
"ei_monk_step_of_the_wind" : "ei monk-step-of-the-wind", 'ei_monk_step_of_the_wind' : 'ei monk-step-of-the-wind',
"ei_monk_step_of_the_wind2" : "ei monk-step-of-the-wind-2", 'ei_monk_step_of_the_wind2' : 'ei monk-step-of-the-wind-2',
"ei_monk_step_of_the_wind3" : "ei monk-step-of-the-wind-3", 'ei_monk_step_of_the_wind3' : 'ei monk-step-of-the-wind-3',
"ei_monk_stunning_strike" : "ei monk-stunning-strike", 'ei_monk_stunning_strike' : 'ei monk-stunning-strike',
"ei_monk_stunning_strike2" : "ei monk-stunning-strike-2", 'ei_monk_stunning_strike2' : 'ei monk-stunning-strike-2',
"ei_paladin_divine_smite" : "ei paladin-divine-smite", 'ei_paladin_divine_smite' : 'ei paladin-divine-smite',
"ei_paladin_lay_on_hands" : "ei paladin-lay-on-hands", 'ei_paladin_lay_on_hands' : 'ei paladin-lay-on-hands',
"ei_barbarian_abilities" : "ei barbarian-abilities", 'ei_barbarian_abilities' : 'ei barbarian-abilities',
"ei_barbarian" : "ei barbarian", 'ei_barbarian' : 'ei barbarian',
"ei_bard_abilities" : "ei bard-abilities", 'ei_bard_abilities' : 'ei bard-abilities',
"ei_bard" : "ei bard", 'ei_bard' : 'ei bard',
"ei_cleric_abilities" : "ei cleric-abilities", 'ei_cleric_abilities' : 'ei cleric-abilities',
"ei_cleric" : "ei cleric", 'ei_cleric' : 'ei cleric',
"ei_druid_abilities" : "ei druid-abilities", 'ei_druid_abilities' : 'ei druid-abilities',
"ei_druid" : "ei druid", 'ei_druid' : 'ei druid',
"ei_fighter_abilities" : "ei fighter-abilities", 'ei_fighter_abilities' : 'ei fighter-abilities',
"ei_fighter" : "ei fighter", 'ei_fighter' : 'ei fighter',
"ei_monk_abilities" : "ei monk-abilities", 'ei_monk_abilities' : 'ei monk-abilities',
"ei_monk" : "ei monk", 'ei_monk' : 'ei monk',
"ei_paladin_abilities" : "ei paladin-abilities", 'ei_paladin_abilities' : 'ei paladin-abilities',
"ei_paladin" : "ei paladin", 'ei_paladin' : 'ei paladin',
"ei_ranger_abilities" : "ei ranger-abilities", 'ei_ranger_abilities' : 'ei ranger-abilities',
"ei_ranger" : "ei ranger", 'ei_ranger' : 'ei ranger',
"ei_rogue_abilities" : "ei rogue-abilities", 'ei_rogue_abilities' : 'ei rogue-abilities',
"ei_rogue" : "ei rogue", 'ei_rogue' : 'ei rogue',
"ei_sorcerer_abilities" : "ei sorcerer-abilities", 'ei_sorcerer_abilities' : 'ei sorcerer-abilities',
"ei_sorcerer" : "ei sorcerer", 'ei_sorcerer' : 'ei sorcerer',
"ei_warlock_abilities" : "ei warlock-abilities", 'ei_warlock_abilities' : 'ei warlock-abilities',
"ei_warlock" : "ei warlock", 'ei_warlock' : 'ei warlock',
"ei_wizard_abilities" : "ei wizard-abilities", 'ei_wizard_abilities' : 'ei wizard-abilities',
"ei_wizard" : "ei wizard", 'ei_wizard' : 'ei wizard',
/* Types of actions */ /* Types of actions */
"ei_movement" : "ei movement", 'ei_movement' : 'ei movement',
"ei_action" : "ei action", 'ei_action' : 'ei action',
"ei_bonus_action" : "ei bonus-action", 'ei_bonus_action' : 'ei bonus-action',
"ei_reaction" : "ei reaction", 'ei_reaction' : 'ei reaction',
/* SRD Spells */ /* SRD Spells */
"ei_acid_arrow" : "ei acid-arrow", 'ei_acid_arrow' : 'ei acid-arrow',
"ei_action1" : "ei action-1", 'ei_action1' : 'ei action-1',
"ei_alter_self" : "ei alter-self", 'ei_alter_self' : 'ei alter-self',
"ei_alter_self2" : "ei alter-self-2", 'ei_alter_self2' : 'ei alter-self-2',
"ei_animal_friendship" : "ei animal-friendship", 'ei_animal_friendship' : 'ei animal-friendship',
"ei_animate_dead" : "ei animate-dead", 'ei_animate_dead' : 'ei animate-dead',
"ei_animate_objects" : "ei animate-objects", 'ei_animate_objects' : 'ei animate-objects',
"ei_animate_objects2" : "ei animate-objects-2", 'ei_animate_objects2' : 'ei animate-objects-2',
"ei_bane" : "ei bane", 'ei_bane' : 'ei bane',
"ei_bless" : "ei bless", 'ei_bless' : 'ei bless',
"ei_blur" : "ei blur", 'ei_blur' : 'ei blur',
"ei_bonus" : "ei bonus", 'ei_bonus' : 'ei bonus',
"ei_branding_smite" : "ei branding-smite", 'ei_branding_smite' : 'ei branding-smite',
"ei_burning_hands" : "ei burning-hands", 'ei_burning_hands' : 'ei burning-hands',
"ei_charm_person" : "ei charm-person", 'ei_charm_person' : 'ei charm-person',
"ei_chill_touch" : "ei chill-touch", 'ei_chill_touch' : 'ei chill-touch',
"ei_cloudkill" : "ei cloudkill", 'ei_cloudkill' : 'ei cloudkill',
"ei_comprehend_languages" : "ei comprehend-languages", 'ei_comprehend_languages' : 'ei comprehend-languages',
"ei_cone_of_cold" : "ei cone-of-cold", 'ei_cone_of_cold' : 'ei cone-of-cold',
"ei_conjure_elemental" : "ei conjure-elemental", 'ei_conjure_elemental' : 'ei conjure-elemental',
"ei_conjure_minor_elemental" : "ei conjure-minor-elemental", 'ei_conjure_minor_elemental' : 'ei conjure-minor-elemental',
"ei_control_water" : "ei control-water", 'ei_control_water' : 'ei control-water',
"ei_counterspell" : "ei counterspell", 'ei_counterspell' : 'ei counterspell',
"ei_cure_wounds" : "ei cure-wounds", 'ei_cure_wounds' : 'ei cure-wounds',
"ei_dancing_lights" : "ei dancing-lights", 'ei_dancing_lights' : 'ei dancing-lights',
"ei_darkness" : "ei darkness", 'ei_darkness' : 'ei darkness',
"ei_detect_magic" : "ei detect-magic", 'ei_detect_magic' : 'ei detect-magic',
"ei_disguise_self" : "ei disguise-self", 'ei_disguise_self' : 'ei disguise-self',
"ei_disintegrate" : "ei disintegrate", 'ei_disintegrate' : 'ei disintegrate',
"ei_dispel_evil_and_good" : "ei dispel-evil-and-good", 'ei_dispel_evil_and_good' : 'ei dispel-evil-and-good',
"ei_dispel_magic" : "ei dispel-magic", 'ei_dispel_magic' : 'ei dispel-magic',
"ei_dominate_monster" : "ei dominate-monster", 'ei_dominate_monster' : 'ei dominate-monster',
"ei_dominate_person" : "ei dominate-person", 'ei_dominate_person' : 'ei dominate-person',
"ei_eldritch_blast" : "ei eldritch-blast", 'ei_eldritch_blast' : 'ei eldritch-blast',
"ei_enlarge_reduce" : "ei enlarge-reduce", 'ei_enlarge_reduce' : 'ei enlarge-reduce',
"ei_entangle" : "ei entangle", 'ei_entangle' : 'ei entangle',
"ei_faerie_fire" : "ei faerie-fire", 'ei_faerie_fire' : 'ei faerie-fire',
"ei_faerie_fire2" : "ei faerie-fire2", 'ei_faerie_fire2' : 'ei faerie-fire2',
"ei_feather_fall" : "ei feather-fall", 'ei_feather_fall' : 'ei feather-fall',
"ei_find_familiar" : "ei find-familiar", 'ei_find_familiar' : 'ei find-familiar',
"ei_finger_of_death" : "ei finger-of-death", 'ei_finger_of_death' : 'ei finger-of-death',
"ei_fireball" : "ei fireball", 'ei_fireball' : 'ei fireball',
"ei_floating_disk" : "ei floating-disk", 'ei_floating_disk' : 'ei floating-disk',
"ei_fly" : "ei fly", 'ei_fly' : 'ei fly',
"ei_fog_cloud" : "ei fog-cloud", 'ei_fog_cloud' : 'ei fog-cloud',
"ei_gaseous_form" : "ei gaseous-form", 'ei_gaseous_form' : 'ei gaseous-form',
"ei_gaseous_form2" : "ei gaseous-form2", 'ei_gaseous_form2' : 'ei gaseous-form2',
"ei_gentle_repose" : "ei gentle-repose", 'ei_gentle_repose' : 'ei gentle-repose',
"ei_gentle_repose2" : "ei gentle-repose2", 'ei_gentle_repose2' : 'ei gentle-repose2',
"ei_globe_of_invulnerability" : "ei globe-of-invulnerability", 'ei_globe_of_invulnerability' : 'ei globe-of-invulnerability',
"ei_guiding_bolt" : "ei guiding-bolt", 'ei_guiding_bolt' : 'ei guiding-bolt',
"ei_healing_word" : "ei healing-word", 'ei_healing_word' : 'ei healing-word',
"ei_heat_metal" : "ei heat-metal", 'ei_heat_metal' : 'ei heat-metal',
"ei_hellish_rebuke" : "ei hellish-rebuke", 'ei_hellish_rebuke' : 'ei hellish-rebuke',
"ei_heroes_feast" : "ei heroes-feast", 'ei_heroes_feast' : 'ei heroes-feast',
"ei_heroism" : "ei heroism", 'ei_heroism' : 'ei heroism',
"ei_hideous_laughter" : "ei hideous-laughter", 'ei_hideous_laughter' : 'ei hideous-laughter',
"ei_identify" : "ei identify", 'ei_identify' : 'ei identify',
"ei_illusory_script" : "ei illusory-script", 'ei_illusory_script' : 'ei illusory-script',
"ei_inflict_wounds" : "ei inflict-wounds", 'ei_inflict_wounds' : 'ei inflict-wounds',
"ei_light" : "ei light", 'ei_light' : 'ei light',
"ei_longstrider" : "ei longstrider", 'ei_longstrider' : 'ei longstrider',
"ei_mage_armor" : "ei mage-armor", 'ei_mage_armor' : 'ei mage-armor',
"ei_mage_hand" : "ei mage-hand", 'ei_mage_hand' : 'ei mage-hand',
"ei_magic_missile" : "ei magic-missile", 'ei_magic_missile' : 'ei magic-missile',
"ei_mass_cure_wounds" : "ei mass-cure-wounds", 'ei_mass_cure_wounds' : 'ei mass-cure-wounds',
"ei_mass_healing_word" : "ei mass-healing-word", 'ei_mass_healing_word' : 'ei mass-healing-word',
"ei_mending" : "ei _mending", 'ei_mending' : 'ei _mending',
"ei_message" : "ei message", 'ei_message' : 'ei message',
"ei_minor_illusion" : "ei _minor-illusion", 'ei_minor_illusion' : 'ei _minor-illusion',
"ei_movement1" : "ei movement1", 'ei_movement1' : 'ei movement1',
"ei_polymorph" : "ei polymorph", 'ei_polymorph' : 'ei polymorph',
"ei_power_word_kill" : "ei power-word-kill", 'ei_power_word_kill' : 'ei power-word-kill',
"ei_power_word_stun" : "ei power-word-stun", 'ei_power_word_stun' : 'ei power-word-stun',
"ei_prayer_of_healing" : "ei prayer-of-healing", 'ei_prayer_of_healing' : 'ei prayer-of-healing',
"ei_prestidigitation" : "ei prestidigitation", 'ei_prestidigitation' : 'ei prestidigitation',
"ei_protection_from_evil_and_good" : "ei protection-from-evil-and-good", 'ei_protection_from_evil_and_good' : 'ei protection-from-evil-and-good',
"ei_raise_dead" : "ei raise-dead", 'ei_raise_dead' : 'ei raise-dead',
"ei_raise_dead2" : "ei raise-dead2", 'ei_raise_dead2' : 'ei raise-dead2',
"ei_reaction1" : "ei reaction1", 'ei_reaction1' : 'ei reaction1',
"ei_resurrection" : "ei resurrection", 'ei_resurrection' : 'ei resurrection',
"ei_resurrection2" : "ei resurrection2", 'ei_resurrection2' : 'ei resurrection2',
"ei_revivify" : "ei revivify", 'ei_revivify' : 'ei revivify',
"ei_revivify2" : "ei revivify2", 'ei_revivify2' : 'ei revivify2',
"ei_sacred_flame" : "ei sacred-flame", 'ei_sacred_flame' : 'ei sacred-flame',
"ei_sanctuary" : "ei sanctuary", 'ei_sanctuary' : 'ei sanctuary',
"ei_scorching_ray" : "ei scorching-ray", 'ei_scorching_ray' : 'ei scorching-ray',
"ei_sending" : "ei sending", 'ei_sending' : 'ei sending',
"ei_shatter" : "ei shatter", 'ei_shatter' : 'ei shatter',
"ei_shield" : "ei shield", 'ei_shield' : 'ei shield',
"ei_silent_image" : "ei silent-image", 'ei_silent_image' : 'ei silent-image',
"ei_sleep" : "ei sleep", 'ei_sleep' : 'ei sleep',
"ei_speak_with_animals" : "ei speak-with-animals", 'ei_speak_with_animals' : 'ei speak-with-animals',
"ei_telekinesis" : "ei telekinesis", 'ei_telekinesis' : 'ei telekinesis',
"ei_true_strike" : "ei true-strike", 'ei_true_strike' : 'ei true-strike',
"ei_vicious_mockery" : "ei vicious-mockery", 'ei_vicious_mockery' : 'ei vicious-mockery',
"ei_wall_of_fire" : "ei wall-of-fire", 'ei_wall_of_fire' : 'ei wall-of-fire',
"ei_wall_of_force" : "ei wall-of-force", 'ei_wall_of_force' : 'ei wall-of-force',
"ei_wall_of_ice" : "ei wall-of-ice", 'ei_wall_of_ice' : 'ei wall-of-ice',
"ei_wall_of_stone" : "ei wall-of-stone", 'ei_wall_of_stone' : 'ei wall-of-stone',
"ei_wall_of_thorns" : "ei wall-of-thorns", 'ei_wall_of_thorns' : 'ei wall-of-thorns',
"ei_wish" : "ei wish" 'ei_wish' : 'ei wish'
} };
module.exports = elderberryInn; module.exports = elderberryInn;

File diff suppressed because it is too large Load Diff