Add files via upload

initial release
pre-0.4.4
Felix 2019-12-29 17:54:57 +01:00 committed by GitHub
parent c65ad01ae4
commit 3bd9d6b3f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1997 additions and 0 deletions

View File

@ -0,0 +1,200 @@
/* core foundry changes
#compendium.flexcolumn.active {
display: flex;
flex-direction: column;
}
#compendium.flexcolumn > .directory-list {
width: 100%;
height: auto;
flex-basis: 0;
flex-grow: 1;
}
#compendium.flexcolumn > .directory-footer {
height: auto;
}
#compendium.flexcolumn > .directory-footer > * {
margin-top: 5px;
}
*/
#compendium .directory-footer .compendium-browser-btn {
margin-top: 5px;
}
#compendium .directory-footer {
display: block;
}
/* spellbrowser */
/* resizing */
.compendium-browser {
max-width: 1100px;
max-height: 90vh;
}
.compendium-browser .tabs {
max-height: 2em;
border-bottom: solid #782e22;
}
.compendium-browser .tabContainer {
height: calc(100% - 2em);
}
.compendium-browser .tabContainer .tab {
width: 100%;
height: 100%;
overflow: scroll;
}
.compendium-browser .control-area {
position: sticky;
display: block;
min-width: 250px;
width: 300px;
height: 100%;
padding-right: 5px;
overflow: scroll;
}
.compendium-browser .control-area .filtercontainer {
border: 1px solid #bbb;
border-radius: 5px;
margin-top: 5px;
padding: 2px;
}
.compendium-browser .control-area .filtercontainer h3 {
margin: 0;
cursor: pointer;
}
.compendium-browser .control-area .filtercontainer dl,
.compendium-browser .control-area .filtercontainer div {
margin: 5px 0;
}
.compendium-browser .control-area .filtercontainer dt {
display: inline-block;
width: 40%;
padding-left: 5px;
}
.compendium-browser .control-area .filtercontainer dd {
display: inline-block;
width: 58%;
margin-left: 0;
}
.compendium-browser .control-area .filtercontainer dd select {
width: 100%;
}
.compendium-browser .control-area .filtercontainer .multiselect {
border: 1px solid #bbb;
border-radius: 3px;
}
.compendium-browser .control-area .filtercontainer .multiselect label {
padding: 5px;
}
.compendium-browser .control-area .filtercontainer .small-input {
width: 144px;
height: 27px;
background: rgba(255, 255, 255, 0.8);
border: 1px solid #444;
border-radius: 3px;
padding: 0 3px;
text-overflow: ellipsis;
}
.compendium-browser .control-area .filtercontainer .small-select {
width: 40px;
}
.compendium-browser .browser .window-content {
overflow-y: hidden!important;
}
.compendium-browser .browser ul {
float: right;
display: block;
min-width: 335px;
width: 785px;
margin: 0;
height: 100%;
overflow: auto;
padding-left: 5px;
}
.compendium-browser .browser ul .filter-tags {
display: none;
}
.compendium-browser .browser .spacer {
display: inline-block;
min-width: 5px;
}
.compendium-browser .browser .spacer-large {
display: inline-block;
min-width: 15px;
}
.compendium-browser .spell-browser .spell {
cursor: default;
vertical-align: middle;
line-height: 32px;
margin: 2px 0;
}
.compendium-browser .spell-browser .spell .spell-image {
max-width: 32px;
height: 32px;
}
.compendium-browser .spell-browser .spell .spell-name {
height: 32px;
padding-left: 5px;
}
.compendium-browser .spell-browser .spell .spell-level {
text-align: center;
font-weight: 900;
max-width: 18px;
height: 32px;
}
.compendium-browser .spell-browser .spell .spell-tags {
text-align: right;
margin-right: 3px;
font-weight: 900;
max-width: 100px;
height: 32px;
}
.compendium-browser .npc-browser .npc {
cursor: default;
vertical-align: middle;
line-height: 64px;
margin: 4px 0;
}
.compendium-browser .npc-browser .npc .npc-image {
max-width: 64px;
height: 64px;
}
.compendium-browser .npc-browser .npc .npc-image img {
width: 64px;
height: 64px;
border: none;
}
.compendium-browser .npc-browser .npc .npc-line {
line-height: 25px;
padding: 9px 0 5px 5px;
}
.compendium-browser .npc-browser .npc .npc-name {
font-weight: bold;
font-size: 16px;
}
.compendium-browser .npc-browser .npc .cr {
display: inline-block;
width: 55px;
}
.compendium-browser .npc-browser .npc .size {
display: inline-block;
width: 75px;
}
.compendium-browser .npc-browser .npc .type {
display: inline-block;
}
.compendium-browser .settings .settings-group {
border: 1px solid #bbb;
border-radius: 5px;
margin-top: 5px;
padding: 2px;
}
.compendium-browser .settings .settings-group h3 {
margin: 0;
cursor: pointer;
}
.compendium-browser .settings .settings-group label {
display: block;
}
.compendium-browser .settings .settings-group h4 {
display: inline-block;
vertical-align: middle;
height: 100%;
}

1278
compendium-browser.js 100644

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,236 @@
/* core foundry changes
#compendium.flexcolumn.active {
display: flex;
flex-direction: column;
}
#compendium.flexcolumn > .directory-list {
width: 100%;
height: auto;
flex-basis: 0;
flex-grow: 1;
}
#compendium.flexcolumn > .directory-footer {
height: auto;
}
#compendium.flexcolumn > .directory-footer > * {
margin-top: 5px;
}
*/
#compendium .directory-footer .compendium-browser-btn {
margin-top:5px;
}
#compendium .directory-footer {
display:block;
}
/* spellbrowser */
/* resizing */
.compendium-browser {
max-width:1100px;
max-height:90vh;
.tabs {
max-height:2em;
border-bottom: solid #782e22;
a {
}
}
.tabContainer {
height:calc(100% - 2em);
.tab {
width: 100%;
height: 100%;
overflow:scroll;
}
}
.control-area {
position:sticky;
display: block;
min-width: 250px;
width: 300px;
height:100%;
padding-right:5px;
overflow:scroll;
.filtercontainer {
border: 1px solid #bbb;
border-radius: 5px;
margin-top: 5px;
padding:2px;
h3 {
margin:0;
cursor:pointer;
}
dl, div {
margin: 5px 0;
}
dt {
display:inline-block;
width:40%;
padding-left:5px;
}
dd {
display:inline-block;
width:58%;
margin-left:0;
select {
width:100%;
}
}
.multiselect {
border: 1px solid #bbb;
border-radius: 3px;
label {
padding:5px;
}
}
.small-input {
width: 144px;
height: 27px;
background: rgba(255, 255, 255, 0.8);
border: 1px solid #444;
border-radius: 3px;
padding: 0 3px;
text-overflow: ellipsis;
}
.small-select {
width: 40px;
}
}
}
.browser {
.window-content {
overflow-y: hidden!important;
}
ul {
float:right;
display: block;
min-width: 335px;
width: 785px;
margin:0;
height: 100%;
overflow:auto;
padding-left: 5px;
.filter-tags {
display:none;
}
}
.spacer {
display:inline-block;
min-width:5px;
}
.spacer-large {
display:inline-block;
min-width:15px;
}
}
.spell-browser {
.spell {
cursor:default;
vertical-align: middle;
line-height:32px;
margin:2px 0;
.spell-image {
max-width:32px;
height:32px;
}
.spell-name {
height:32px;
padding-left:5px;
}
.spell-level {
text-align:center;
font-weight:900;
max-width:18px;
height:32px;
}
.spell-tags {
text-align:right;
margin-right:3px;
font-weight:900;
max-width:100px;
height:32px;
}
}
}
.npc-browser {
.npc {
cursor:default;
vertical-align: middle;
line-height:64px;
margin:4px 0;
.npc-image {
max-width: 64px;
height: 64px;
}
.npc-image img {
width: 64px;
height: 64px;
border: none;
}
.npc-line {
line-height: 25px;
padding: 9px 0 5px 5px;
}
.npc-name {
font-weight:bold;
font-size:16px;
}
.cr {
display: inline-block;
width: 55px;
}
.size {
display: inline-block;
width: 75px;
}
.type {
display: inline-block;
}
}
}
.settings {
.settings-group {
border: 1px solid #bbb;
border-radius: 5px;
margin-top: 5px;
padding:2px;
h3 {
margin:0;
cursor:pointer;
}
label {
display:block;
}
input {
}
h4 {
display:inline-block;
vertical-align: middle;
height:100%;
}
}
}
}

55
lang/en.json 100644
View File

@ -0,0 +1,55 @@
{
"CMPBrowser.sortBy":"Sort by",
"CMPBrowser.cr":"Challenge Rating",
"CMPBrowser.generalSettings":"General Settings",
"CMPBrowser.allowSpellAcc":"Allow Players Access to the spell browser",
"CMPBrowser.allowNpcAcc":"Allow Players Access to the npc browser",
"CMPBrowser.compSettings":"Spell Compendium Settings",
"CMPBrowser.load":"Load",
"CMPBrowser.lvl":"Level",
"CMPBrowser.ritual":"Ritual",
"CMPBrowser.concentration":"Concentration",
"CMPBrowser.verbal":"Verbal",
"CMPBrowser.somatic":"Somatic",
"CMPBrowser.material":"Material",
"CMPBrowser.cantip":"Cantip",
"CMPBrowser.school":"School",
"CMPBrowser.castingTime":"Casting Time",
"CMPBrowser.bonusAction":"Bonus Action",
"CMPBrowser.reaction":"Reaction",
"CMPBrowser.spellType":"Spell Type",
"CMPBrowser.damageType":"Damage Type",
"CMPBrowser.class":"Class",
"CMPBrowser.bard":"Bard",
"CMPBrowser.cleric":"Cleric",
"CMPBrowser.druid":"Druid",
"CMPBrowser.paladin":"Paladin",
"CMPBrowser.ranger":"Ranger",
"CMPBrowser.sorcerer":"Sorcerer",
"CMPBrowser.warlock":"Warlock",
"CMPBrowser.wizard":"Wizard",
"CMPBrowser.general":"General",
"CMPBrowser.components":"Components",
"CMPBrowser.hasSpells":"Has Spells",
"CMPBrowser.hasLegAct":"Has Legendary Actions",
"CMPBrowser.hasLegRes":"Has Legendary Resistance",
"CMPBrowser.creatureType":"Creature Type",
"CMPBrowser.aberration": "Aberration",
"CMPBrowser.beast": "Beast",
"CMPBrowser.celestial": "Celestial",
"CMPBrowser.construct": "construct",
"CMPBrowser.dragon": "Dragon",
"CMPBrowser.elemental": "Elemental",
"CMPBrowser.fey": "Fey",
"CMPBrowser.fiend": "Fiend",
"CMPBrowser.giant": "Giant",
"CMPBrowser.humanoid": "Humanoid",
"CMPBrowser.monstrosity": "Monstrosity",
"CMPBrowser.ooze": "Ooze",
"CMPBrowser.plant": "Plant",
"CMPBrowser.undead": "Undead",
"CMPBrowser.abilities": "Abilities",
"CMPBrowser.dmgInteraction": "Damage Interaction",
"CMPBrowser.dmgDealt": "Damage Dealt",
"CMPBrowser.cmpBrowser": "Compendium Browser"
}

22
module.json 100644
View File

@ -0,0 +1,22 @@
{
"name": "compendium-browser",
"title": "Compendium Browser",
"description": "A module to easily browse and filter spells as well as npcs loaded from compendie.",
"version": "0.1",
"author": "Felix#6196",
"systems": ["dnd5e"],
"scripts": ["./compendium-browser.js"],
"styles": ["./compendium-browser.css"],
"packs": [],
"minimumCoreVersion": "0.4.3",
"languages": [
{
"lang": "en",
"name": "English",
"path": "lang/en.json"
}
],
"url": "https://github.com/syl3r86/compendium-browser",
"manifest": "https://raw.githubusercontent.com/syl3r86/compendium-browser/master/module.json",
"download": "https://github.com/syl3r86/compendium-browser/archive/master.zip"
}

BIN
preview.jpg 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

View File

@ -0,0 +1,78 @@
{{#each filters.registeredFilterCategorys as |cat key|}}
<div class="filtercontainer" id="{{key}}">
<h3>{{cat.label}}</h3>
<div class="filters">
{{#each cat.filters as |filter key|}}
<div class="filter" data-path="{{filter.path}}" data-type="{{filter.type}}" data-valIsArray="{{filter.valIsArray}}">
{{#if filter.istext}}
<dt>{{filter.label}}</dt>
<dd>
{{#if filter.possibleValues}}
<select class="null">
<option value="" selected>-</option>
{{#each filter.possibleValues as |label val|}}
<option value="{{val}}">{{label}}</option>
{{/each}}
</select>
{{else}}
<input type="text">
{{/if}}
</dd>
{{/if}}
{{#if filter.isbool}}
<dl>
<dt>{{filter.label}}</dt>
<dd>
<select class="null">
<option value="null" selected>-</option>
<option value="true">Yes</option>
<option value="false">No</option>
</select>
</dd>
</dl>
{{/if}}
{{#if filter.isselect}}
<dl>
<dt>{{filter.label}}</dt>
<dd>
<select class="null">
<option value="null" selected>-</option>
{{#each filter.possibleValues as |label val|}}
<option value="{{val}}">{{label}}</option>
{{/each}}
</select>
</dd>
</dl>
{{/if}}
{{#if filter.ismultiSelect}}
<div class="multiselect">
<label>{{filter.label}}</label>
<dl>
{{#each filter.possibleValues as |label val|}}
<dt><label>{{label}}</label></dt>
<dd><input type="checkbox" data-value="{{val}}"></dd>
{{/each}}
</dl>
</div>
{{/if}}
{{#if filter.isnumberCompare}}
<div class="numberCompare">
<dt>{{filter.label}}</dt>
<dd>
<select class="small-select">
<option value="null" selected>-</option>
<option value="=">=</option>
<option value="<">&lt;</option>
<option value=">">&gt;</option>
</select>
<input class="small-input" type="number">
</dd>
</div>
{{/if}}
</div>
{{/each}}
</div>
</div>
{{/each}}

View File

@ -0,0 +1,42 @@
<div class="npc-browser browser tab flexrow" data-tab="npc" data-group="toplvl">
<div class="control-area">
<div class="filtercontainer" id="tagfilter">
<div class="filter" data-type="text" data-path="name">
<input class="" name="textFilter" type="text" value="" data-dtype="String" placeholder="{{localize "Name"}}"/>
</div>
<dl id="sorter">
<dt>{{localize "CMPBrowser.sortBy"}}:</dt>
<dd><select name="sortorder">
<option value="name" selected>{{localize "Name"}}</option>
<option value="cr">{{localize "CMPBrowser.cr"}}</option>
<option value="size">{{localize "DND5E.Size"}}</option>
</select></dd>
</dl>
</div>
{{> "modules/compendium-browser/template/filter-container.html" filters=npcFilters}}
</div>
<ul>
{{#each npcs as |npc id|}}
<li class="npc flexrow draggable" data-entry-compendium="{{npc.compendium}}" data-entry-id="{{npc._id}}">
<div class="npc-image">
<img class="" src="{{npc.img}}" title="{{npc.name}}" width="32" height="32" />
</div>
<div class="npc-line">
<div class="npc-name">
<span class="item-edit"><a>{{npc.name}}</a></span>
</div>
<div class="npc-tags">
<span class="cr-display" title="Challange Rating">CR {{npc.displayCR}}</span>
<span class="size-display">{{npc.displaySize}}</span>
<span class="type">{{npc.data.details.type.value}}</span>
</div>
<div class="filter-tags">
<input type="hidden" name="order.cr" value="{{npc.data.details.cr}}">
<input type="hidden" name="order.size" value="{{npc.filterSize}}">
</div>
</div>
</li>
{{/each}}
</ul>
</div>

View File

@ -0,0 +1,32 @@
<div class="settings tab" data-tab="setting" data-group="toplvl">
<div class="settings-group">
<h3>{{localize "CMPBrowser.generalSettings"}}</h3>
<label>
<input data-setting="allow-spell-browser" type="checkbox" {{#if settings.allowSpellBrowser}}checked{{/if}}>
<h4>{{localize "CMPBrowser.generalSettings"}}</h4>
</label>
<label>
<input data-setting="allow-npc-browser" type="checkbox" {{#if settings.allowNpcBrowser}}checked{{/if}}>
<h4>{{localize "CMPBrowser.generalSettings"}}</h4>
</label>
</div>
<div class="settings-group">
<h3>{{localize "CMPBrowser.compSettings"}}</h3>
{{#each settings.loadedSpellCompendium as |spellComp key|}}
<label>
<input data-setting="spell-compendium-setting" data-key="{{key}}" data-type="spell" type="checkbox"{{#if spellComp.load}}checked{{/if}}>
<h4>{{localize "CMPBrowser.load"}} {{spellComp.name}}</h4>
</label>
{{/each}}
</div>
<div class="settings-group">
<h3>Npc Compendium Settings</h3>
{{#each settings.loadedNpcCompendium as |npcComp key|}}
<label>
<input data-setting="npc-compendium-setting" data-key="{{key}}" data-type="npc" type="checkbox"{{#if npcComp.load}}checked{{/if}}>
<h4>{{localize "CMPBrowser.load"}} {{npcComp.name}}</h4>
</label>
{{/each}}
</div>
</div>

View File

@ -0,0 +1,43 @@
<div class="spell-browser browser tab flexrow" data-tab="spell" data-group="toplvl">
<div class="control-area">
<div class="filtercontainer" id="tagfilter">
<div class="filter" data-type="text" data-path="name">
<input class="" name="textFilter" type="text" value="" data-dtype="String" placeholder="Search Text"/>
</div>
<dl id="sorter">
<dt>{{localize "CMPBrowser.sortBy"}}:</dt>
<dd><select class="null" name="sortorder">
<option value="true" selected>{{localize "Name"}}</option>
<option value="false">{{localize "CMPBrowser.lvl"}}</option>
</select></dd>
</dl>
</div>
{{> "modules/compendium-browser/template/filter-container.html" filters=spellFilters}}
</div>
<ul>
{{#each spells as |spell id|}}
<li class="spell flexrow draggable" data-entry-compendium="{{spell.compendium}}" data-entry-id="{{spell._id}}">
<div class="spell-image">
<img class="" src="{{spell.img}}" title="{{spell.name}}" width="32" height="32"/>
</div>
<div class="spell-name">
<span class="item-edit" ><a>{{spell.name}}</a></span>
</div>
<div class="spell-tags">
<span title="Spell level">{{#if spell.data.level}}{{spell.data.level}}{{else}}C{{/if}}</span>
<div class="spacer-large"></div>
<span {{#unless spell.data.components.ritual}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.ritual"}}"{{else}} title="{{localize "CMPBrowser.ritual"}}"{{/unless}}>R</span>
<span {{#unless spell.data.components.concentration}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.concentration"}}"{{else}} title="{{localize "CMPBrowser.concentration"}}"{{/unless}}>C</span>
<div class="spacer"></div>
<span {{#unless spell.data.components.vocal}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.verbal"}}"{{else}} title="{{localize "CMPBrowser.verbal"}}"{{/unless}}>V</span>
<span {{#unless spell.data.components.somatic}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.somatic"}}"{{else}} title="{{localize "CMPBrowser.somatic"}}"{{/unless}}>S</span>
<span {{#unless spell.data.components.material}}style="color:#bbb;" title="no{{localize "No"}} {{localize "CMPBrowser.material"}}"{{else}} title="{{localize "CMPBrowser.material"}}"{{/unless}}>M</span>
</div>
<div class="filter-tags">
<input type="hidden" name="level" value="{{spell.data.level}}">
</div>
</li>
{{/each}}
</ul>
</div>

View File

@ -0,0 +1,11 @@
<div class="tabs" data-group="toplvl">
{{#if showSpellBrowser}}<a class="item" data-tab="spell">Spell Browser</a>{{/if}}
{{#if showNpcBrowser}}<a class="item" data-tab="npc">NPC Browser</a>{{/if}}
{{#if isGM}}<a class="item" data-tab="setting">Settings</a>{{/if}}
</div>
<div class="tabContainer">
{{#if showSpellBrowser}}{{> "modules/compendium-browser/template/spell-browser.html"}}{{/if}}
{{#if showNpcBrowser}} {{> "modules/compendium-browser/template/npc-browser.html"}}{{/if}}
{{#if isGM}} {{> "modules/compendium-browser/template/settings.html"}}{{/if}}
</div>