mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-03 01:52:42 +00:00
Merge branch 'divRendering' into v2.1
This commit is contained in:
@@ -1,97 +1,115 @@
|
|||||||
var React = require('react');
|
var React = require('react');
|
||||||
var _ = require('lodash');
|
var _ = require('lodash');
|
||||||
var cx = require('classnames');
|
var cx = require('classnames');
|
||||||
|
|
||||||
var Markdown = require('marked');
|
var Markdown = require('marked');
|
||||||
|
var renderer = new Markdown.Renderer();
|
||||||
var PAGE_HEIGHT = 1056 + 30;
|
|
||||||
|
//Processes the markdown within an HTML block if it's just a class-wrapper
|
||||||
var BrewRenderer = React.createClass({
|
renderer.html = function (html) {
|
||||||
getDefaultProps: function() {
|
if(_.startsWith(html, '<div class=') && _.endsWith(_.trim(html), '</div>')){
|
||||||
return {
|
var openTag = html.substring(0, html.indexOf('>')+1);
|
||||||
text : ''
|
html = html.substring(html.indexOf('>')+1);
|
||||||
};
|
html = html.substring(0, html.lastIndexOf('</div>'));
|
||||||
},
|
|
||||||
getInitialState: function() {
|
console.log(html);
|
||||||
return {
|
|
||||||
viewablePageNumber: 0,
|
console.log(Markdown(html));
|
||||||
height : 0,
|
|
||||||
isMounted : false
|
return `${openTag} ${Markdown(html)} </div>`;
|
||||||
};
|
}
|
||||||
},
|
return html;
|
||||||
totalPages : 0,
|
}
|
||||||
height : 0,
|
|
||||||
|
|
||||||
componentDidMount: function() {
|
var PAGE_HEIGHT = 1056 + 30;
|
||||||
this.setState({
|
|
||||||
height : this.refs.main.parentNode.clientHeight,
|
var BrewRenderer = React.createClass({
|
||||||
isMounted : true
|
getDefaultProps: function() {
|
||||||
});
|
return {
|
||||||
},
|
text : ''
|
||||||
handleScroll : function(e){
|
};
|
||||||
this.setState({
|
},
|
||||||
viewablePageNumber : Math.floor(e.target.scrollTop / PAGE_HEIGHT)
|
getInitialState: function() {
|
||||||
});
|
return {
|
||||||
},
|
viewablePageNumber: 0,
|
||||||
//Implement later
|
height : 0,
|
||||||
scrollToPage : function(pageNumber){
|
isMounted : false
|
||||||
},
|
};
|
||||||
|
},
|
||||||
shouldRender : function(pageText, index){
|
totalPages : 0,
|
||||||
if(!this.state.isMounted) return false;
|
height : 0,
|
||||||
|
|
||||||
var viewIndex = this.state.viewablePageNumber;
|
componentDidMount: function() {
|
||||||
if(index == viewIndex - 1) return true;
|
this.setState({
|
||||||
if(index == viewIndex) return true;
|
height : this.refs.main.parentNode.clientHeight,
|
||||||
if(index == viewIndex + 1) return true;
|
isMounted : true
|
||||||
|
});
|
||||||
//Check for style tages
|
},
|
||||||
if(pageText.indexOf('<style>') !== -1) return true;
|
handleScroll : function(e){
|
||||||
|
this.setState({
|
||||||
return false;
|
viewablePageNumber : Math.floor(e.target.scrollTop / PAGE_HEIGHT)
|
||||||
},
|
});
|
||||||
|
},
|
||||||
renderPageInfo : function(){
|
//Implement later
|
||||||
return <div className='pageInfo'>
|
scrollToPage : function(pageNumber){
|
||||||
{this.state.viewablePageNumber + 1} / {this.totalPages}
|
},
|
||||||
</div>
|
|
||||||
},
|
shouldRender : function(pageText, index){
|
||||||
|
if(!this.state.isMounted) return false;
|
||||||
renderDummyPage : function(key){
|
|
||||||
return <div className='phb' key={key}>
|
var viewIndex = this.state.viewablePageNumber;
|
||||||
<i className='fa fa-spinner fa-spin' />
|
if(index == viewIndex - 1) return true;
|
||||||
</div>
|
if(index == viewIndex) return true;
|
||||||
},
|
if(index == viewIndex + 1) return true;
|
||||||
|
|
||||||
renderPage : function(pageText, index){
|
//Check for style tages
|
||||||
return <div className='phb' dangerouslySetInnerHTML={{__html:Markdown(pageText)}} key={index} />
|
if(pageText.indexOf('<style>') !== -1) return true;
|
||||||
},
|
|
||||||
|
return false;
|
||||||
renderPages : function(){
|
},
|
||||||
var pages = this.props.text.split('\\page');
|
|
||||||
this.totalPages = pages.length;
|
renderPageInfo : function(){
|
||||||
|
return <div className='pageInfo'>
|
||||||
return _.map(pages, (page, index)=>{
|
{this.state.viewablePageNumber + 1} / {this.totalPages}
|
||||||
if(this.shouldRender(page, index)){
|
</div>
|
||||||
return this.renderPage(page, index);
|
},
|
||||||
}else{
|
|
||||||
return this.renderDummyPage(index);
|
renderDummyPage : function(key){
|
||||||
}
|
return <div className='phb' key={key}>
|
||||||
});
|
<i className='fa fa-spinner fa-spin' />
|
||||||
},
|
</div>
|
||||||
|
},
|
||||||
render : function(){
|
|
||||||
return <div className='brewRenderer'
|
renderPage : function(pageText, index){
|
||||||
onScroll={this.handleScroll}
|
return <div className='phb' dangerouslySetInnerHTML={{__html:Markdown(pageText, {renderer : renderer})}} key={index} />
|
||||||
ref='main'
|
},
|
||||||
style={{height : this.state.height}}>
|
|
||||||
|
renderPages : function(){
|
||||||
<div className='pages'>
|
var pages = this.props.text.split('\\page');
|
||||||
{this.renderPages()}
|
this.totalPages = pages.length;
|
||||||
</div>
|
|
||||||
{this.renderPageInfo()}
|
return _.map(pages, (page, index)=>{
|
||||||
</div>
|
if(this.shouldRender(page, index)){
|
||||||
}
|
return this.renderPage(page, index);
|
||||||
});
|
}else{
|
||||||
|
return this.renderDummyPage(index);
|
||||||
module.exports = BrewRenderer;
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
render : function(){
|
||||||
|
return <div className='brewRenderer'
|
||||||
|
onScroll={this.handleScroll}
|
||||||
|
ref='main'
|
||||||
|
style={{height : this.state.height}}>
|
||||||
|
|
||||||
|
<div className='pages'>
|
||||||
|
{this.renderPages()}
|
||||||
|
</div>
|
||||||
|
{this.renderPageInfo()}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = BrewRenderer;
|
||||||
|
|||||||
91
client/homebrew/editor/snippets/magic.gen.js
Normal file
91
client/homebrew/editor/snippets/magic.gen.js
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
|
var spellNames = [
|
||||||
|
"Astral Rite of Acne",
|
||||||
|
"Create Acne",
|
||||||
|
"Cursed Ramen Erruption",
|
||||||
|
"Dark Chant of the Dentists",
|
||||||
|
"Erruption of Immaturity",
|
||||||
|
"Flaming Disc of Inconvenience",
|
||||||
|
"Heal Bad Hygene",
|
||||||
|
"Heavenly Transfiguration of the Cream Devil",
|
||||||
|
"Hellish Cage of Mucus",
|
||||||
|
"Irritate Peanut Butter Fairy",
|
||||||
|
"Luminous Erruption of Tea",
|
||||||
|
"Mystic Spell of the Poser",
|
||||||
|
"Sorcerous Enchantment of the Chimneysweep",
|
||||||
|
"Steak Sauce Ray",
|
||||||
|
"Talk to Groupie",
|
||||||
|
"Astonishing Chant of Chocolate",
|
||||||
|
"Astounding Pasta Puddle",
|
||||||
|
"Ball of Annoyance",
|
||||||
|
"Cage of Yarn",
|
||||||
|
"Control Noodles Elemental",
|
||||||
|
"Create Nervousness",
|
||||||
|
"Cure Baldness",
|
||||||
|
"Cursed Ritual of Bad Hair",
|
||||||
|
"Dispell Piles in Dentist",
|
||||||
|
"Eliminate Florists",
|
||||||
|
"Illusionary Transfiguration of the Babysitter",
|
||||||
|
"Necromantic Armor of Salad Dressing",
|
||||||
|
"Occult Transfiguration of Foot Fetish",
|
||||||
|
"Protection from Mucus Giant",
|
||||||
|
"Tinsel Blast",
|
||||||
|
"Alchemical Evocation of the Goths",
|
||||||
|
"Call Fangirl",
|
||||||
|
"Divine Spell of Crossdressing",
|
||||||
|
"Dominate Ramen Giant",
|
||||||
|
"Eliminate Vindictiveness in Gym Teacher",
|
||||||
|
"Extra-Planar Spell of Irritation",
|
||||||
|
"Induce Whining in Babysitter",
|
||||||
|
"Invoke Complaining",
|
||||||
|
"Magical Enchantment of Arrogance",
|
||||||
|
"Occult Globe of Salad Dressing",
|
||||||
|
"Overwhelming Enchantment of the Chocolate Fairy",
|
||||||
|
"Sorcerous Dandruff Globe",
|
||||||
|
"Spiritual Invocation of the Costumers",
|
||||||
|
"Ultimate Rite of the Confetti Angel",
|
||||||
|
"Ultimate Ritual of Mouthwash",
|
||||||
|
];
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
spellList : function(){
|
||||||
|
var levels = ['Cantrips (0 Level)', '2nd Level', '3rd Level', '4th Level', '5th Level', '6th Level', '7th Level', '8th Level', '9th Level'];
|
||||||
|
|
||||||
|
var content = _.map(levels, (level)=>{
|
||||||
|
var spells = _.map(_.sampleSize(spellNames, _.random(5, 15)), (spell)=>{
|
||||||
|
return `- ${spell}`;
|
||||||
|
}).join('\n');
|
||||||
|
return `##### ${level} \n${spells} \n`;
|
||||||
|
}).join('\n');
|
||||||
|
|
||||||
|
return `<div class='spellList'>\n${content}\n</div>`;
|
||||||
|
},
|
||||||
|
|
||||||
|
spell : function(){
|
||||||
|
var level = ["1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th"];
|
||||||
|
var spellSchools = ["abjuration", "conjuration", "divination", "enchantment", "evocation", "illusion", "necromancy", "transmutation"];
|
||||||
|
|
||||||
|
|
||||||
|
var components = _.sampleSize(["V", "S", "M"], _.random(1,3)).join(', ');
|
||||||
|
if(components.indexOf("M") !== -1){
|
||||||
|
components += " (" + _.sampleSize(['a small doll', 'a crushed button worth at least 1cp', 'discarded gum wrapper'], _.random(1,3)).join(', ') + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
"#### " + _.sample(spellNames),
|
||||||
|
"*" + _.sample(level) + "-level " + _.sample(spellSchools) + "*",
|
||||||
|
"___",
|
||||||
|
"- **Casting Time:** 1 action",
|
||||||
|
"- **Range:** " + _.sample(["Self", "Touch", "30 feet", "60 feet"]),
|
||||||
|
"- **Components:** " + components,
|
||||||
|
"- **Duration:** " + _.sample(["Until dispelled", "1 round", "Instantaneous", "Concentration, up to 10 minutes", "1 hour"]),
|
||||||
|
"",
|
||||||
|
"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.",
|
||||||
|
"\n\n\n"
|
||||||
|
].join('\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,175 +1,178 @@
|
|||||||
var SpellGen = require('./spell.gen.js');
|
var MagicGen = require('./magic.gen.js');
|
||||||
var ClassTableGen = require('./classtable.gen.js');
|
var ClassTableGen = require('./classtable.gen.js');
|
||||||
var MonsterBlockGen = require('./monsterblock.gen.js');
|
var MonsterBlockGen = require('./monsterblock.gen.js');
|
||||||
var ClassFeatureGen = require('./classfeature.gen.js');
|
var ClassFeatureGen = require('./classfeature.gen.js');
|
||||||
var FullClassGen = require('./fullclass.gen.js');
|
var FullClassGen = require('./fullclass.gen.js');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = [
|
module.exports = [
|
||||||
|
|
||||||
{
|
{
|
||||||
groupName : 'Editor',
|
groupName : 'Editor',
|
||||||
icon : 'fa-pencil',
|
icon : 'fa-pencil',
|
||||||
snippets : [
|
snippets : [
|
||||||
{
|
{
|
||||||
name : "Column Break",
|
name : "Column Break",
|
||||||
icon : 'fa-columns',
|
icon : 'fa-columns',
|
||||||
gen : "```\n```\n\n"
|
gen : "```\n```\n\n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : "New Page",
|
name : "New Page",
|
||||||
icon : 'fa-file-text',
|
icon : 'fa-file-text',
|
||||||
gen : "\\page\n\n"
|
gen : "\\page\n\n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : "Vertical Spacing",
|
name : "Vertical Spacing",
|
||||||
icon : 'fa-arrows-v',
|
icon : 'fa-arrows-v',
|
||||||
gen : "<div style='margin-top:140px'></div>\n\n"
|
gen : "<div style='margin-top:140px'></div>\n\n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : "Image",
|
name : "Image",
|
||||||
icon : 'fa-image',
|
icon : 'fa-image',
|
||||||
gen : [
|
gen : [
|
||||||
"<img ",
|
"<img ",
|
||||||
" src='https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg' ",
|
" src='https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg' ",
|
||||||
" style='width:325px' />",
|
" style='width:325px' />",
|
||||||
"Credit: Kyounghwan Kim"
|
"Credit: Kyounghwan Kim"
|
||||||
].join('\n')
|
].join('\n')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : "Background Image",
|
name : "Background Image",
|
||||||
icon : 'fa-tree',
|
icon : 'fa-tree',
|
||||||
gen : [
|
gen : [
|
||||||
"<img ",
|
"<img ",
|
||||||
" src='http://i.imgur.com/hMna6G0.png' ",
|
" src='http://i.imgur.com/hMna6G0.png' ",
|
||||||
" style='position:absolute; top:50px; right:30px; width:280px' />"
|
" style='position:absolute; top:50px; right:30px; width:280px' />"
|
||||||
].join('\n')
|
].join('\n')
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name : "Page Number",
|
name : "Page Number",
|
||||||
icon : 'fa-bookmark',
|
icon : 'fa-bookmark',
|
||||||
gen : "<div class='pageNumber'>1</div>\n<div class='footnote'>PART 1 | FANCINESS</div>\n\n"
|
gen : "<div class='pageNumber'>1</div>\n<div class='footnote'>PART 1 | FANCINESS</div>\n\n"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/************************* PHB ********************/
|
/************************* PHB ********************/
|
||||||
|
|
||||||
{
|
{
|
||||||
groupName : 'PHB',
|
groupName : 'PHB',
|
||||||
icon : 'fa-book',
|
icon : 'fa-book',
|
||||||
snippets : [
|
snippets : [
|
||||||
{
|
{
|
||||||
name : 'Spell',
|
name : 'Spell',
|
||||||
icon : 'fa-magic',
|
icon : 'fa-magic',
|
||||||
gen : SpellGen,
|
gen : MagicGen.spell,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : 'Class Feature',
|
name : 'Spell List',
|
||||||
icon : 'fa-trophy',
|
icon : 'fa-list',
|
||||||
gen : ClassFeatureGen,
|
gen : MagicGen.spellList,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : 'Note',
|
name : 'Class Feature',
|
||||||
icon : 'fa-sticky-note',
|
icon : 'fa-trophy',
|
||||||
gen : function(){
|
gen : ClassFeatureGen,
|
||||||
return [
|
},
|
||||||
"> ##### Time to Drop Knowledge",
|
{
|
||||||
"> Use notes to point out some interesting information. ",
|
name : 'Note',
|
||||||
"> ",
|
icon : 'fa-sticky-note',
|
||||||
"> **Tables and lists** both work within a note."
|
gen : function(){
|
||||||
].join('\n');
|
return [
|
||||||
},
|
"> ##### Time to Drop Knowledge",
|
||||||
},
|
"> Use notes to point out some interesting information. ",
|
||||||
{
|
"> ",
|
||||||
name : 'Monster Stat Block',
|
"> **Tables and lists** both work within a note."
|
||||||
icon : 'fa-bug',
|
].join('\n');
|
||||||
gen : MonsterBlockGen.half,
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : 'Wide Monster Stat Block',
|
name : 'Monster Stat Block',
|
||||||
icon : 'fa-paw',
|
icon : 'fa-bug',
|
||||||
gen : MonsterBlockGen.full,
|
gen : MonsterBlockGen.half,
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
},
|
name : 'Wide Monster Stat Block',
|
||||||
|
icon : 'fa-paw',
|
||||||
|
gen : MonsterBlockGen.full,
|
||||||
|
}
|
||||||
/********************* TABLES *********************/
|
]
|
||||||
|
},
|
||||||
{
|
|
||||||
groupName : 'Tables',
|
|
||||||
icon : 'fa-table',
|
|
||||||
snippets : [
|
/********************* TABLES *********************/
|
||||||
{
|
|
||||||
name : "Class Table",
|
{
|
||||||
icon : 'fa-table',
|
groupName : 'Tables',
|
||||||
gen : ClassTableGen.full,
|
icon : 'fa-table',
|
||||||
},
|
snippets : [
|
||||||
{
|
{
|
||||||
name : "Half Class Table",
|
name : "Class Table",
|
||||||
icon : 'fa-list-alt',
|
icon : 'fa-table',
|
||||||
gen : ClassTableGen.half,
|
gen : ClassTableGen.full,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name : 'Table',
|
name : "Half Class Table",
|
||||||
icon : 'fa-th-list',
|
icon : 'fa-list-alt',
|
||||||
gen : function(){
|
gen : ClassTableGen.half,
|
||||||
return [
|
},
|
||||||
"##### Cookie Tastiness",
|
{
|
||||||
"| Tastiness | Cookie Type |",
|
name : 'Table',
|
||||||
"|:----:|:-------------|",
|
icon : 'fa-th-list',
|
||||||
"| -5 | Raisin |",
|
gen : function(){
|
||||||
"| 8th | Chocolate Chip |",
|
return [
|
||||||
"| 11th | 2 or lower |",
|
"##### Cookie Tastiness",
|
||||||
"| 14th | 3 or lower |",
|
"| Tastiness | Cookie Type |",
|
||||||
"| 17th | 4 or lower |\n\n",
|
"|:----:|:-------------|",
|
||||||
].join('\n');
|
"| -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 : [
|
/**************** PRINT *************/
|
||||||
{
|
|
||||||
name : "A4 PageSize",
|
{
|
||||||
icon : 'fa-file-o',
|
groupName : 'Print',
|
||||||
gen : ['<style>',
|
icon : 'fa-print',
|
||||||
' .phb{',
|
snippets : [
|
||||||
' width : 210mm;',
|
{
|
||||||
' height : 296.8mm;',
|
name : "A4 PageSize",
|
||||||
' }',
|
icon : 'fa-file-o',
|
||||||
'</style>'
|
gen : ['<style>',
|
||||||
].join('\n')
|
' .phb{',
|
||||||
},
|
' width : 210mm;',
|
||||||
{
|
' height : 296.8mm;',
|
||||||
name : "Ink Friendly",
|
' }',
|
||||||
icon : 'fa-tint',
|
'</style>'
|
||||||
gen : ['<style>',
|
].join('\n')
|
||||||
' .phb{ background : white;}',
|
},
|
||||||
' .phb img{ display : none;}',
|
{
|
||||||
' .phb hr+blockquote{background : white;}',
|
name : "Ink Friendly",
|
||||||
'</style>',
|
icon : 'fa-tint',
|
||||||
''
|
gen : ['<style>',
|
||||||
].join('\n')
|
' .phb{ background : white;}',
|
||||||
},
|
' .phb img{ display : none;}',
|
||||||
]
|
' .phb hr+blockquote{background : white;}',
|
||||||
},
|
'</style>',
|
||||||
|
''
|
||||||
]
|
].join('\n')
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
|
|||||||
@@ -64,17 +64,17 @@
|
|||||||
}
|
}
|
||||||
ul{
|
ul{
|
||||||
margin-bottom : 0.8em;
|
margin-bottom : 0.8em;
|
||||||
|
padding-left : 1.4em;
|
||||||
line-height : 1.3em;
|
line-height : 1.3em;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
list-style-type : disc;
|
list-style-type : disc;
|
||||||
padding-left: 1.4em;
|
|
||||||
}
|
}
|
||||||
ol{
|
ol{
|
||||||
margin-bottom : 0.8em;
|
margin-bottom : 0.8em;
|
||||||
|
padding-left : 1.4em;
|
||||||
line-height : 1.3em;
|
line-height : 1.3em;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
list-style-type : decimal;
|
list-style-type : decimal;
|
||||||
padding-left: 1.4em;
|
|
||||||
}
|
}
|
||||||
img{
|
img{
|
||||||
z-index : -1;
|
z-index : -1;
|
||||||
@@ -169,15 +169,15 @@
|
|||||||
// *****************************/
|
// *****************************/
|
||||||
blockquote{
|
blockquote{
|
||||||
.useSansSerif();
|
.useSansSerif();
|
||||||
box-sizing : border-box;
|
box-sizing : border-box;
|
||||||
margin-bottom : 1em;
|
margin-bottom : 1em;
|
||||||
padding : 5px 10px;
|
padding : 5px 10px;
|
||||||
background-color : @noteGreen;
|
background-color : @noteGreen;
|
||||||
border-style: solid;
|
border-style : solid;
|
||||||
border-width: 11px;
|
border-width : 11px;
|
||||||
border-image: @noteBorderImage 11;
|
border-image : @noteBorderImage 11;
|
||||||
border-image-outset: 9px 0px;
|
border-image-outset : 9px 0px;
|
||||||
box-shadow : 1px 4px 14px #888;
|
box-shadow : 1px 4px 14px #888;
|
||||||
p, ul{
|
p, ul{
|
||||||
font-size : 0.352cm;
|
font-size : 0.352cm;
|
||||||
line-height : 1.1em;
|
line-height : 1.1em;
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
}
|
}
|
||||||
//If a note starts a column, give it space at the top to render border
|
//If a note starts a column, give it space at the top to render border
|
||||||
pre+blockquote{
|
pre+blockquote{
|
||||||
margin-top: 11px;
|
margin-top : 11px;
|
||||||
}
|
}
|
||||||
//*****************************
|
//*****************************
|
||||||
// * MONSTER STAT BLOCK
|
// * MONSTER STAT BLOCK
|
||||||
@@ -222,8 +222,8 @@
|
|||||||
margin : 0;
|
margin : 0;
|
||||||
column-span : 1;
|
column-span : 1;
|
||||||
background-color : transparent;
|
background-color : transparent;
|
||||||
|
border-style : none;
|
||||||
border-image : none;
|
border-image : none;
|
||||||
border-style : none;
|
|
||||||
-webkit-column-span : 1;
|
-webkit-column-span : 1;
|
||||||
tbody{
|
tbody{
|
||||||
tr:nth-child(odd), tr:nth-child(even){
|
tr:nth-child(odd), tr:nth-child(even){
|
||||||
@@ -339,7 +339,7 @@
|
|||||||
-moz-column-span : all;
|
-moz-column-span : all;
|
||||||
}
|
}
|
||||||
//Column Break
|
//Column Break
|
||||||
pre{
|
pre, code{
|
||||||
visibility : hidden;
|
visibility : hidden;
|
||||||
-webkit-column-break-after : always;
|
-webkit-column-break-after : always;
|
||||||
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
|
// * PRINT
|
||||||
// *****************************/
|
// *****************************/
|
||||||
.phb.print{
|
.phb.print{
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
32
shared/codemirror/addon/dialog/dialog.css
vendored
32
shared/codemirror/addon/dialog/dialog.css
vendored
@@ -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%;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user