mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-13 00:03:15 +00:00
Homebrew first pass is done
This commit is contained in:
89
client/naturalCrit/homebrew/editor/editor.jsx
Normal file
89
client/naturalCrit/homebrew/editor/editor.jsx
Normal file
@@ -0,0 +1,89 @@
|
||||
var React = require('react');
|
||||
var _ = require('lodash');
|
||||
var cx = require('classnames');
|
||||
|
||||
var Snippets = require('./snippets.js');
|
||||
|
||||
|
||||
var Icons = [
|
||||
{
|
||||
icon : 'fa-book',
|
||||
snippet : Snippets.intro,
|
||||
tooltip : 'Intro'
|
||||
},
|
||||
{
|
||||
icon : 'fa-magic',
|
||||
snippet : Snippets.spell,
|
||||
tooltip : 'Spell'
|
||||
},
|
||||
{
|
||||
icon : 'fa-bookmark',
|
||||
snippet : Snippets.classFeatures,
|
||||
tooltip : 'Class Intro'
|
||||
},
|
||||
{
|
||||
icon : 'fa-trophy',
|
||||
snippet : Snippets.destroyUndead,
|
||||
tooltip : 'Class Feature'
|
||||
},
|
||||
{
|
||||
icon : 'fa-sticky-note',
|
||||
snippet : Snippets.note,
|
||||
tooltip : 'Note'
|
||||
},
|
||||
{
|
||||
icon : 'fa-bug',
|
||||
snippet : Snippets.statBlock,
|
||||
tooltip : 'Monster Stat Block'
|
||||
},
|
||||
|
||||
]
|
||||
|
||||
var Editor = React.createClass({
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
text : "",
|
||||
onChange : function(){}
|
||||
};
|
||||
},
|
||||
|
||||
handleTextChange : function(e){
|
||||
this.props.onChange(e.target.value);
|
||||
},
|
||||
|
||||
iconClick : function(snippet){
|
||||
var curPos = this.refs.textarea.selectionStart;
|
||||
this.props.onChange(this.props.text.slice(0, curPos) +
|
||||
snippet +
|
||||
this.props.text.slice(curPos + 1));
|
||||
},
|
||||
|
||||
renderTemplateIcons : function(){
|
||||
return _.map(Icons, (t) => {
|
||||
return <div className='icon' key={t.icon}
|
||||
onClick={this.iconClick.bind(this, t.snippet)}
|
||||
data-tooltip={t.tooltip}>
|
||||
<i className={'fa ' + t.icon} />
|
||||
</div>;
|
||||
})
|
||||
},
|
||||
|
||||
render : function(){
|
||||
var self = this;
|
||||
return(
|
||||
<div className='editor'>
|
||||
<div className='textIcons'>
|
||||
{this.renderTemplateIcons()}
|
||||
|
||||
</div>
|
||||
<textarea
|
||||
ref='textarea'
|
||||
value={this.props.text}
|
||||
onChange={this.handleTextChange} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Editor;
|
||||
|
||||
29
client/naturalCrit/homebrew/editor/editor.less
Normal file
29
client/naturalCrit/homebrew/editor/editor.less
Normal file
@@ -0,0 +1,29 @@
|
||||
.editor{
|
||||
position : fixed;
|
||||
height : 100%;
|
||||
.textIcons{
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
.icon{
|
||||
cursor: pointer;
|
||||
width : 30px;
|
||||
height : 30px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
font-size: 1.5em;
|
||||
|
||||
&:nth-child(1){ background-color: @blue; }
|
||||
&:nth-child(2){ background-color: @orange; }
|
||||
&:nth-child(3){ background-color: @red; }
|
||||
&:nth-child(4){ background-color: @yellow; }
|
||||
&:nth-child(5){ background-color: @purple; }
|
||||
&:nth-child(6){ background-color: @green; }
|
||||
}
|
||||
}
|
||||
textarea{
|
||||
display: inline-block;
|
||||
height : 100%;
|
||||
overflow-y: scroll;
|
||||
width : 300px;
|
||||
}
|
||||
}
|
||||
91
client/naturalCrit/homebrew/editor/snippets.js
Normal file
91
client/naturalCrit/homebrew/editor/snippets.js
Normal file
@@ -0,0 +1,91 @@
|
||||
module.exports = {
|
||||
|
||||
intro : [
|
||||
'# Welcome to HomeBrew',
|
||||
'This tool you to effortless make and edit in real time D&D style ideas',
|
||||
'\nIt uses **markdown-syntax** anda well-designed style sheet to create stuff.',
|
||||
'As you edit text on the left it will live update on the right.',
|
||||
"Any changes you make will auto-saved to your browser as well.",
|
||||
"",
|
||||
"There's a few premade templates for common things in the PHB.",
|
||||
"Just hit the icons to inject the template wherever your cursor was in the text box. \n***Have fun.***"
|
||||
|
||||
].join('\n'),
|
||||
|
||||
|
||||
classFeatures : [
|
||||
"## Class Features",
|
||||
"As a paladin, you gain the following class features.",
|
||||
"",
|
||||
"#### Hit Points",
|
||||
"**Hit Dice:** 1d10 per paladin level <br>",
|
||||
"**Hit Points at 1st Level:** 10 + your Constitution modifier <br>",
|
||||
"**Hit Points at Higher Levels:** 1d10 (or 6) + your Constituion modifier per paladin level after 1st",
|
||||
"",
|
||||
"#### Proficiencies",
|
||||
"**Armor:** All armor, Shields <br>",
|
||||
"**Weapons:** Simple Weapons, martial weapons <br>",
|
||||
"**Tools:** None <br><br>",
|
||||
"**Saving Throws:** Wisdom, Charisma <br>",
|
||||
"**Skills:** Choose two from Athletics, Insight, Intimidation, Medicine, Persuasion, and Religion",
|
||||
"",
|
||||
"#### Equipment",
|
||||
"You start with the following equipment, in addition to the equipment granted by your background:",
|
||||
"",
|
||||
"- *(a)* a martial weapon and a shield or *(b)* two martial weapons",
|
||||
"- *(a)* five javelins or *(b)* any simple melee weapon",
|
||||
"- Chain mail and a holy symbol",
|
||||
].join('\n'),
|
||||
|
||||
spell : [
|
||||
"#### Continual Flame",
|
||||
"*2nd-level evocation* <br>",
|
||||
"**Casting Time:** 1 action <br>",
|
||||
"**Range:** Touch <br>",
|
||||
"**Components:** V, S, M (ruby dust worth 50gp, which the spell consumes) <br>",
|
||||
"**Duration:** Until dispelled <br><br>",
|
||||
"A flame, equivalent in brightness to a torch, springs from from an object that you touch. ",
|
||||
"The effect look like a regular flame, but it creates no heat and doesn't use oxygen. ",
|
||||
"A *continual flame* can be covered or hidden but not smothered or quenched."
|
||||
].join('\n'),
|
||||
|
||||
destroyUndead : [
|
||||
"### Destroy Undead",
|
||||
"Starting at 5th level, when an undead fails its saving throw against your Turn Undead feature,",
|
||||
"the creature is instantly destroyed if its challange rating is at or below a certain threshold,",
|
||||
"as shown in the Destroy Undead table.",
|
||||
"",
|
||||
"##### Destroy Undead",
|
||||
"| Cleric Level | Destroys Undead of CR... |",
|
||||
"|:----:|:-------------|",
|
||||
"| 5th | 1/2 or lower |",
|
||||
"| 8th | 1 or lower |",
|
||||
"| 11th | 2 or lower |",
|
||||
"| 14th | 3 or lower |",
|
||||
"| 17th | 4 or lower |\n\n",
|
||||
].join('\n'),
|
||||
|
||||
note : [
|
||||
"> ##### Variant: Playing on a Grid",
|
||||
"> If you play out a combat using a square grid and miniatures or other tokens, follow these rules",
|
||||
">",
|
||||
"> ***Squares.*** Each square on the grid represents 5 feet.",
|
||||
">",
|
||||
"> ***Speed.*** Rather than moving foot by foot, move square by square on the grid. This means you use your speed in 5-foot segments.",
|
||||
].join('\n'),
|
||||
|
||||
statBlock :[
|
||||
"## Warhorse",
|
||||
"*Large beast, unaligned*",
|
||||
"",
|
||||
"---",
|
||||
"|STR|DEX|CON|INT|WIS|CHA|",
|
||||
"|:---:|:---:|:---:|:---:|:---:|:---:|:---:|",
|
||||
"|18 (+4)|18 (+4)|18 (+4)|18 (+4)|18 (+4)|18 (+4)|",
|
||||
"---",
|
||||
"***Trampling Charge*** Does a thing yo",
|
||||
|
||||
].join('\n')
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user