diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index 096a4f87e..fff2ccbf4 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -1,97 +1,115 @@
-var React = require('react');
-var _ = require('lodash');
-var cx = require('classnames');
-
-var Markdown = require('marked');
-
-var PAGE_HEIGHT = 1056 + 30;
-
-var BrewRenderer = React.createClass({
- getDefaultProps: function() {
- return {
- text : ''
- };
- },
- getInitialState: function() {
- return {
- viewablePageNumber: 0,
- height : 0,
- isMounted : false
- };
- },
- totalPages : 0,
- height : 0,
-
- componentDidMount: function() {
- this.setState({
- height : this.refs.main.parentNode.clientHeight,
- isMounted : true
- });
- },
- handleScroll : function(e){
- this.setState({
- viewablePageNumber : Math.floor(e.target.scrollTop / PAGE_HEIGHT)
- });
- },
- //Implement later
- scrollToPage : function(pageNumber){
- },
-
- shouldRender : function(pageText, index){
- if(!this.state.isMounted) return false;
-
- var viewIndex = this.state.viewablePageNumber;
- if(index == viewIndex - 1) return true;
- if(index == viewIndex) return true;
- if(index == viewIndex + 1) return true;
-
- //Check for style tages
- if(pageText.indexOf(''
- ].join('\n')
- },
- {
- name : "Ink Friendly",
- icon : 'fa-tint',
- gen : ['',
- ''
- ].join('\n')
- },
- ]
- },
-
-]
-
-
+var MagicGen = require('./magic.gen.js');
+var ClassTableGen = require('./classtable.gen.js');
+var MonsterBlockGen = require('./monsterblock.gen.js');
+var ClassFeatureGen = require('./classfeature.gen.js');
+var FullClassGen = require('./fullclass.gen.js');
+
+
+
+module.exports = [
+
+ {
+ groupName : 'Editor',
+ icon : 'fa-pencil',
+ snippets : [
+ {
+ name : "Column Break",
+ icon : 'fa-columns',
+ gen : "```\n```\n\n"
+ },
+ {
+ name : "New Page",
+ icon : 'fa-file-text',
+ gen : "\\page\n\n"
+ },
+ {
+ name : "Vertical Spacing",
+ icon : 'fa-arrows-v',
+ gen : "
\n\n"
+ },
+ {
+ name : "Image",
+ icon : 'fa-image',
+ gen : [
+ "
",
+ "Credit: Kyounghwan Kim"
+ ].join('\n')
+ },
+ {
+ name : "Background Image",
+ icon : 'fa-tree',
+ gen : [
+ "
"
+ ].join('\n')
+ },
+
+ {
+ name : "Page Number",
+ icon : 'fa-bookmark',
+ gen : "1
\n\n\n"
+ },
+
+
+ ]
+ },
+
+
+ /************************* PHB ********************/
+
+ {
+ groupName : 'PHB',
+ icon : 'fa-book',
+ snippets : [
+ {
+ name : 'Spell',
+ icon : 'fa-magic',
+ gen : MagicGen.spell,
+ },
+ {
+ name : 'Spell List',
+ icon : 'fa-list',
+ gen : MagicGen.spellList,
+ },
+ {
+ name : 'Class Feature',
+ icon : 'fa-trophy',
+ gen : ClassFeatureGen,
+ },
+ {
+ name : 'Note',
+ icon : 'fa-sticky-note',
+ gen : function(){
+ return [
+ "> ##### Time to Drop Knowledge",
+ "> Use notes to point out some interesting information. ",
+ "> ",
+ "> **Tables and lists** both work within a note."
+ ].join('\n');
+ },
+ },
+ {
+ name : 'Monster Stat Block',
+ icon : 'fa-bug',
+ gen : MonsterBlockGen.half,
+ },
+ {
+ name : 'Wide Monster Stat Block',
+ icon : 'fa-paw',
+ gen : MonsterBlockGen.full,
+ }
+ ]
+ },
+
+
+
+ /********************* TABLES *********************/
+
+ {
+ groupName : 'Tables',
+ icon : 'fa-table',
+ snippets : [
+ {
+ name : "Class Table",
+ icon : 'fa-table',
+ gen : ClassTableGen.full,
+ },
+ {
+ name : "Half Class Table",
+ icon : 'fa-list-alt',
+ gen : ClassTableGen.half,
+ },
+ {
+ name : 'Table',
+ icon : 'fa-th-list',
+ gen : function(){
+ return [
+ "##### Cookie Tastiness",
+ "| Tastiness | Cookie Type |",
+ "|:----:|:-------------|",
+ "| -5 | Raisin |",
+ "| 8th | Chocolate Chip |",
+ "| 11th | 2 or lower |",
+ "| 14th | 3 or lower |",
+ "| 17th | 4 or lower |\n\n",
+ ].join('\n');
+ },
+ }
+ ]
+ },
+
+
+
+
+ /**************** PRINT *************/
+
+ {
+ groupName : 'Print',
+ icon : 'fa-print',
+ snippets : [
+ {
+ name : "A4 PageSize",
+ icon : 'fa-file-o',
+ gen : [''
+ ].join('\n')
+ },
+ {
+ name : "Ink Friendly",
+ icon : 'fa-tint',
+ gen : ['',
+ ''
+ ].join('\n')
+ },
+ ]
+ },
+
+]
diff --git a/client/homebrew/phbStyle/phb.style.less b/client/homebrew/phbStyle/phb.style.less
index de8291fd4..7c4f4f763 100644
--- a/client/homebrew/phbStyle/phb.style.less
+++ b/client/homebrew/phbStyle/phb.style.less
@@ -64,17 +64,17 @@
}
ul{
margin-bottom : 0.8em;
+ padding-left : 1.4em;
line-height : 1.3em;
list-style-position : outside;
list-style-type : disc;
- padding-left: 1.4em;
}
ol{
margin-bottom : 0.8em;
+ padding-left : 1.4em;
line-height : 1.3em;
list-style-position : outside;
list-style-type : decimal;
- padding-left: 1.4em;
}
img{
z-index : -1;
@@ -169,15 +169,15 @@
// *****************************/
blockquote{
.useSansSerif();
- box-sizing : border-box;
- margin-bottom : 1em;
- padding : 5px 10px;
- background-color : @noteGreen;
- border-style: solid;
- border-width: 11px;
- border-image: @noteBorderImage 11;
- border-image-outset: 9px 0px;
- box-shadow : 1px 4px 14px #888;
+ box-sizing : border-box;
+ margin-bottom : 1em;
+ padding : 5px 10px;
+ background-color : @noteGreen;
+ border-style : solid;
+ border-width : 11px;
+ border-image : @noteBorderImage 11;
+ border-image-outset : 9px 0px;
+ box-shadow : 1px 4px 14px #888;
p, ul{
font-size : 0.352cm;
line-height : 1.1em;
@@ -185,7 +185,7 @@
}
//If a note starts a column, give it space at the top to render border
pre+blockquote{
- margin-top: 11px;
+ margin-top : 11px;
}
//*****************************
// * MONSTER STAT BLOCK
@@ -222,8 +222,8 @@
margin : 0;
column-span : 1;
background-color : transparent;
+ border-style : none;
border-image : none;
- border-style : none;
-webkit-column-span : 1;
tbody{
tr:nth-child(odd), tr:nth-child(even){
@@ -339,7 +339,7 @@
-moz-column-span : all;
}
//Column Break
- pre{
+ pre, code{
visibility : hidden;
-webkit-column-break-after : always;
break-after : always;
@@ -367,6 +367,31 @@
}
}
//*****************************
+// * SPELL LIST
+// *****************************/
+.phb .spellList{
+ .useSansSerif();
+ column-count : 4;
+ column-span : all;
+ -webkit-column-span : all;
+ -moz-column-span : all;
+ ul+h5{
+ margin-top : 15px;
+ }
+ p, ul{
+ font-size : 0.352cm;
+ line-height : 1.3em;
+ }
+ ul{
+ margin-bottom : 0.5em;
+ padding-left : 1em;
+ text-indent : -1em;
+ list-style-type : none;
+ -webkit-column-break-inside : auto;
+ column-break-inside : auto;
+ }
+}
+//*****************************
// * PRINT
// *****************************/
.phb.print{
diff --git a/shared/codemirror/addon/comment/continuecomment.js b/shared/codemirror/addon/comment/continuecomment.js
deleted file mode 100644
index 837b18bce..000000000
--- a/shared/codemirror/addon/comment/continuecomment.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// CodeMirror, copyright (c) by Marijn Haverbeke and others
-// Distributed under an MIT license: http://codemirror.net/LICENSE
-
-(function(mod) {
- if (typeof exports == "object" && typeof module == "object") // CommonJS
- mod(require("../../lib/codemirror"));
- else if (typeof define == "function" && define.amd) // AMD
- define(["../../lib/codemirror"], mod);
- else // Plain browser env
- mod(CodeMirror);
-})(function(CodeMirror) {
- var modes = ["clike", "css", "javascript"];
-
- for (var i = 0; i < modes.length; ++i)
- CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "});
-
- function continueComment(cm) {
- if (cm.getOption("disableInput")) return CodeMirror.Pass;
- var ranges = cm.listSelections(), mode, inserts = [];
- for (var i = 0; i < ranges.length; i++) {
- var pos = ranges[i].head, token = cm.getTokenAt(pos);
- if (token.type != "comment") return CodeMirror.Pass;
- var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode;
- if (!mode) mode = modeHere;
- else if (mode != modeHere) return CodeMirror.Pass;
-
- var insert = null;
- if (mode.blockCommentStart && mode.blockCommentContinue) {
- var end = token.string.indexOf(mode.blockCommentEnd);
- var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found;
- if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) {
- // Comment ended, don't continue it
- } else if (token.string.indexOf(mode.blockCommentStart) == 0) {
- insert = full.slice(0, token.start);
- if (!/^\s*$/.test(insert)) {
- insert = "";
- for (var j = 0; j < token.start; ++j) insert += " ";
- }
- } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 &&
- found + mode.blockCommentContinue.length > token.start &&
- /^\s*$/.test(full.slice(0, found))) {
- insert = full.slice(0, found);
- }
- if (insert != null) insert += mode.blockCommentContinue;
- }
- if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) {
- var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment);
- if (found > -1) {
- insert = line.slice(0, found);
- if (/\S/.test(insert)) insert = null;
- else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0];
- }
- }
- if (insert == null) return CodeMirror.Pass;
- inserts[i] = "\n" + insert;
- }
-
- cm.operation(function() {
- for (var i = ranges.length - 1; i >= 0; i--)
- cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert");
- });
- }
-
- function continueLineCommentEnabled(cm) {
- var opt = cm.getOption("continueComments");
- if (opt && typeof opt == "object")
- return opt.continueLineComment !== false;
- return true;
- }
-
- CodeMirror.defineOption("continueComments", null, function(cm, val, prev) {
- if (prev && prev != CodeMirror.Init)
- cm.removeKeyMap("continueComment");
- if (val) {
- var key = "Enter";
- if (typeof val == "string")
- key = val;
- else if (typeof val == "object" && val.key)
- key = val.key;
- var map = {name: "continueComment"};
- map[key] = continueComment;
- cm.addKeyMap(map);
- }
- });
-});
diff --git a/shared/codemirror/addon/dialog/dialog.css b/shared/codemirror/addon/dialog/dialog.css
deleted file mode 100644
index 8f713c077..000000000
--- a/shared/codemirror/addon/dialog/dialog.css
+++ /dev/null
@@ -1,32 +0,0 @@
-.CodeMirror-dialog {
- position: absolute;
- left: 0; right: 0;
- background: inherit;
- z-index: 15;
- padding: .1em .8em;
- overflow: hidden;
- color: inherit;
-}
-
-.CodeMirror-dialog-top {
- border-bottom: 1px solid #eee;
- top: 0;
-}
-
-.CodeMirror-dialog-bottom {
- border-top: 1px solid #eee;
- bottom: 0;
-}
-
-.CodeMirror-dialog input {
- border: none;
- outline: none;
- background: transparent;
- width: 20em;
- color: inherit;
- font-family: monospace;
-}
-
-.CodeMirror-dialog button {
- font-size: 70%;
-}