Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15aaaa5c14 | ||
|
|
290bee83b4 | ||
|
|
fcd2461205 | ||
|
|
52198d0249 | ||
|
|
ba7ccfdfa0 | ||
|
|
92d3b086fa | ||
|
|
e180595dcd | ||
|
|
ed708bdde0 | ||
|
|
d7852d640f | ||
|
|
a2fdee88b6 | ||
|
|
af070b1578 | ||
|
|
83a8eeef0f | ||
|
|
34f8e7402b | ||
|
|
1b7e2cd850 | ||
|
|
16b16ce6c6 | ||
|
|
da8b91594e | ||
|
|
fc26f5a73e | ||
|
|
d2cc2833a9 |
@@ -7,6 +7,7 @@ Schemas.Character = new SimpleSchema({
|
|||||||
alignment: {type: String, defaultValue: "", trim: false, optional: true},
|
alignment: {type: String, defaultValue: "", trim: false, optional: true},
|
||||||
gender: {type: String, defaultValue: "", trim: false, optional: true},
|
gender: {type: String, defaultValue: "", trim: false, optional: true},
|
||||||
race: {type: String, defaultValue: "", trim: false, optional: true},
|
race: {type: String, defaultValue: "", trim: false, optional: true},
|
||||||
|
picture: {type: String, defaultValue: "", trim: true, optional: true},
|
||||||
description: {type: String, defaultValue: "", trim: false, optional: true},
|
description: {type: String, defaultValue: "", trim: false, optional: true},
|
||||||
personality: {type: String, defaultValue: "", trim: false, optional: true},
|
personality: {type: String, defaultValue: "", trim: false, optional: true},
|
||||||
ideals: {type: String, defaultValue: "", trim: false, optional: true},
|
ideals: {type: String, defaultValue: "", trim: false, optional: true},
|
||||||
@@ -345,8 +346,8 @@ Characters.calculate = {
|
|||||||
var value;
|
var value;
|
||||||
var add = 0;
|
var add = 0;
|
||||||
var mul = 1;
|
var mul = 1;
|
||||||
var min = Math.NEGATIVE_INFINITY;
|
var min = Number.NEGATIVE_INFINITY;
|
||||||
var max = Math.POSITIVE_INFINITY;
|
var max = Number.POSITIVE_INFINITY;
|
||||||
|
|
||||||
Effects.find({
|
Effects.find({
|
||||||
charId: charId,
|
charId: charId,
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ Spells.attachSchema(Schemas.Spell);
|
|||||||
|
|
||||||
Spells.attachBehaviour("softRemovable");
|
Spells.attachBehaviour("softRemovable");
|
||||||
makeChild(Spells); //children of spell lists
|
makeChild(Spells); //children of spell lists
|
||||||
|
makeParent(Spells, ["name", "enabled"]); //parents of attacks
|
||||||
|
|
||||||
Spells.allow(CHARACTER_SUBSCHEMA_ALLOW);
|
Spells.allow(CHARACTER_SUBSCHEMA_ALLOW);
|
||||||
Spells.deny(CHARACTER_SUBSCHEMA_DENY);
|
Spells.deny(CHARACTER_SUBSCHEMA_DENY);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Schemas.TemporaryHitPoints = new SimpleSchema({
|
|||||||
name: {type: String, optional: true},
|
name: {type: String, optional: true},
|
||||||
maximum: {type: Number, defaultValue: 0},
|
maximum: {type: Number, defaultValue: 0},
|
||||||
used: {type: Number, defaultValue: 0},
|
used: {type: Number, defaultValue: 0},
|
||||||
deleteOnZero:{type: Boolean, defaultValue: true},
|
deleteOnZero:{type: Boolean, defaultValue: false},
|
||||||
dateAdded: {
|
dateAdded: {
|
||||||
type: Date,
|
type: Date,
|
||||||
autoValue: function() {
|
autoValue: function() {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Router.map(function() {
|
|||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
characters: function(){
|
characters: function(){
|
||||||
return Characters.find({}, {fields: {_id: 1}});
|
return Characters.find({}, {fields: {_id: 1}, sort: {name: 1}});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onAfterAction: function() {
|
onAfterAction: function() {
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
Template.registerHelper("canEditCharacter", function(charId) {
|
Template.registerHelper("canEditCharacter", function(charId) {
|
||||||
|
return canEditCharacter(charId);
|
||||||
|
});
|
||||||
|
|
||||||
|
canEditCharacter = function(charId) {
|
||||||
var char = Characters.findOne(charId)
|
var char = Characters.findOne(charId)
|
||||||
var userId = Meteor.userId();
|
var userId = Meteor.userId();
|
||||||
return char.owner === userId ||
|
return char.owner === userId ||
|
||||||
_.contains(char.writers, userId);
|
_.contains(char.writers, userId);
|
||||||
});
|
};
|
||||||
|
|||||||
@@ -3,26 +3,26 @@
|
|||||||
<div layout vertical flex>
|
<div layout vertical flex>
|
||||||
<div layout horizontal>
|
<div layout horizontal>
|
||||||
<!--attackBonus-->
|
<!--attackBonus-->
|
||||||
<paper-input id="attackBonusInput"
|
<paper-input class="attackBonusInput"
|
||||||
label="Attack Bonus"
|
label="Attack Bonus"
|
||||||
floatinglabel
|
floatinglabel
|
||||||
value={{attackBonus}}
|
value={{attackBonus}}
|
||||||
flex></paper-input>
|
flex></paper-input>
|
||||||
<!--details-->
|
<!--details-->
|
||||||
<paper-input id="detailInput"
|
<paper-input class="detailInput"
|
||||||
label="Details"
|
label="Details"
|
||||||
floatinglabel
|
floatinglabel
|
||||||
value={{details}}></paper-input>
|
value={{details}}></paper-input>
|
||||||
</div>
|
</div>
|
||||||
<div layout horizontal>
|
<div layout horizontal>
|
||||||
<!--damageBonus-->
|
<!--damageBonus-->
|
||||||
<paper-input id="damageInput"
|
<paper-input class="damageInput"
|
||||||
label="Damage"
|
label="Damage"
|
||||||
floatinglabel
|
floatinglabel
|
||||||
value={{damage}}
|
value={{damage}}
|
||||||
flex></paper-input>
|
flex></paper-input>
|
||||||
<!--DamageType-->
|
<!--DamageType-->
|
||||||
<paper-dropdown-menu id="damageTypeDropdown" label="Damage Type">
|
<paper-dropdown-menu class="damageTypeDropdown" label="Damage Type">
|
||||||
<paper-dropdown layered class="dropdown">
|
<paper-dropdown layered class="dropdown">
|
||||||
<core-menu class="menu" selected={{damageType}}>
|
<core-menu class="menu" selected={{damageType}}>
|
||||||
{{#each damageTypes}}
|
{{#each damageTypes}}
|
||||||
@@ -34,6 +34,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--Delete Button-->
|
<!--Delete Button-->
|
||||||
<paper-icon-button id="deleteAttack" role="button" tabindex="0" icon="delete" aria-label="Delete"></paper-icon-button>
|
<paper-icon-button class="deleteAttack" role="button" tabindex="0" icon="delete" aria-label="Delete"></paper-icon-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -15,23 +15,23 @@ var damageTypes = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
Template.attackEdit.events({
|
Template.attackEdit.events({
|
||||||
"tap #deleteAttack": function(event, instance) {
|
"tap .deleteAttack": function(event, instance) {
|
||||||
Attacks.softRemoveNode(this._id);
|
Attacks.softRemoveNode(this._id);
|
||||||
GlobalUI.deletedToast(this._id, "Attacks", "Attack");
|
GlobalUI.deletedToast(this._id, "Attacks", "Attack");
|
||||||
},
|
},
|
||||||
"change #attackBonusInput": function(event) {
|
"change .attackBonusInput": function(event) {
|
||||||
var value = event.currentTarget.value;
|
var value = event.currentTarget.value;
|
||||||
Attacks.update(this._id, {$set: {attackBonus: value}});
|
Attacks.update(this._id, {$set: {attackBonus: value}});
|
||||||
},
|
},
|
||||||
"change #damageInput": function(event) {
|
"change .damageInput": function(event) {
|
||||||
var value = event.currentTarget.value;
|
var value = event.currentTarget.value;
|
||||||
Attacks.update(this._id, {$set: {damage: value}});
|
Attacks.update(this._id, {$set: {damage: value}});
|
||||||
},
|
},
|
||||||
"change #detailInput": function(event) {
|
"change .detailInput": function(event) {
|
||||||
var value = event.currentTarget.value;
|
var value = event.currentTarget.value;
|
||||||
Attacks.update(this._id, {$set: {details: value}});
|
Attacks.update(this._id, {$set: {details: value}});
|
||||||
},
|
},
|
||||||
"core-select #damageTypeDropdown": function(event) {
|
"core-select .damageTypeDropdown": function(event) {
|
||||||
var detail = event.originalEvent.detail;
|
var detail = event.originalEvent.detail;
|
||||||
if (!detail.isSelected) return;
|
if (!detail.isSelected) return;
|
||||||
var value = detail.item.getAttribute("name");
|
var value = detail.item.getAttribute("name");
|
||||||
|
|||||||
@@ -95,14 +95,15 @@
|
|||||||
<core-tooltip label="Feature enabled"
|
<core-tooltip label="Feature enabled"
|
||||||
position="left">
|
position="left">
|
||||||
<paper-checkbox class="enabledCheckbox"
|
<paper-checkbox class="enabledCheckbox"
|
||||||
checked={{enabled}}>
|
checked={{enabled}}
|
||||||
|
disabled={{#unless canEditCharacter charId}}true{{/unless}}>
|
||||||
</paper-checkbox>
|
</paper-checkbox>
|
||||||
</core-tooltip>
|
</core-tooltip>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
{{#if description}}
|
{{#if description}}
|
||||||
<div flex class="bottom text"
|
<div flex class="bottom text"
|
||||||
>{{evaluateString charId description}}</div>
|
>{{evaluateString charId shortDescription}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if hasUses}}
|
{{#if hasUses}}
|
||||||
<div layout horizontal center end-justified>
|
<div layout horizontal center end-justified>
|
||||||
|
|||||||
@@ -3,14 +3,19 @@ Template.features.helpers({
|
|||||||
var features = Features.find({charId: this._id}, {sort: {color: 1, name: 1}});
|
var features = Features.find({charId: this._id}, {sort: {color: 1, name: 1}});
|
||||||
return features;
|
return features;
|
||||||
},
|
},
|
||||||
|
shortDescription: function() {
|
||||||
|
if (_.isString(this.description)){
|
||||||
|
return this.description.split(/[\n\r]{3,}/)[0];
|
||||||
|
}
|
||||||
|
},
|
||||||
hasUses: function(){
|
hasUses: function(){
|
||||||
return this.usesValue() > 0;
|
return this.usesValue() > 0;
|
||||||
},
|
},
|
||||||
noUsesLeft: function(){
|
noUsesLeft: function(){
|
||||||
return this.usesLeft() <= 0;
|
return this.usesLeft() <= 0 || !canEditCharacter(this.charId);
|
||||||
},
|
},
|
||||||
usesFull: function(){
|
usesFull: function(){
|
||||||
return this.usesLeft() >= this.usesValue();
|
return this.usesLeft() >= this.usesValue() || !canEditCharacter(this.charId);
|
||||||
},
|
},
|
||||||
colorClass: function(){
|
colorClass: function(){
|
||||||
return getColorClass(this.color);
|
return getColorClass(this.color);
|
||||||
@@ -99,15 +104,16 @@ Template.resource.helpers({
|
|||||||
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
||||||
var base = Characters.calculate.attributeBase(this.char._id, this.name);
|
var base = Characters.calculate.attributeBase(this.char._id, this.name);
|
||||||
var baseBigger = value < base;
|
var baseBigger = value < base;
|
||||||
return !baseBigger;
|
return !baseBigger || !canEditCharacter(this.char._id);
|
||||||
},
|
},
|
||||||
cantDecrement: function(){
|
cantDecrement: function(){
|
||||||
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
||||||
var valuePositive = value > 0;
|
var valuePositive = value > 0;
|
||||||
return !valuePositive;
|
return !valuePositive || !canEditCharacter(this.char._id);
|
||||||
},
|
},
|
||||||
getColor: function(){
|
getColor: function(){
|
||||||
if (this.char.attributeValue(this.name) > 0){
|
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
||||||
|
if (value > 0){
|
||||||
return this.color;
|
return this.color;
|
||||||
} else {
|
} else {
|
||||||
return "grey";
|
return "grey";
|
||||||
|
|||||||
@@ -35,8 +35,7 @@
|
|||||||
<div class="item-slot">
|
<div class="item-slot">
|
||||||
<div class="item buff"
|
<div class="item buff"
|
||||||
hero-id="main" {{detailHero}}
|
hero-id="main" {{detailHero}}
|
||||||
layout horizontal center
|
layout horizontal center>
|
||||||
draggable="true">
|
|
||||||
<div flex>
|
<div flex>
|
||||||
<core-icon icon="work"
|
<core-icon icon="work"
|
||||||
style="margin-right: 16px">
|
style="margin-right: 16px">
|
||||||
@@ -114,6 +113,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<core-tooltip label="Container carried" position="left">
|
<core-tooltip label="Container carried" position="left">
|
||||||
<paper-checkbox class="carriedCheckbox"
|
<paper-checkbox class="carriedCheckbox"
|
||||||
|
disabled={{#unless canEditCharacter charId}}true{{/unless}}
|
||||||
checked={{isCarried}}>
|
checked={{isCarried}}>
|
||||||
</paper-checkbox>
|
</paper-checkbox>
|
||||||
</core-tooltip>
|
</core-tooltip>
|
||||||
@@ -152,11 +152,11 @@
|
|||||||
<div class="item {{hidden}} inventoryItem"
|
<div class="item {{hidden}} inventoryItem"
|
||||||
hero-id="main" {{detailHero}}
|
hero-id="main" {{detailHero}}
|
||||||
layout horizontal center
|
layout horizontal center
|
||||||
draggable="true">
|
draggable={{canEditCharacter charId}}>
|
||||||
<div flex class="itemName">
|
<div flex class="itemName">
|
||||||
{{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}}
|
{{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}}
|
||||||
</div>
|
</div>
|
||||||
{{#if settings.showIncrement}}
|
{{#if settings.showIncrement}}{{#if canEditCharacter charId}}
|
||||||
<div class="incrementButtons">
|
<div class="incrementButtons">
|
||||||
<paper-icon-button class="addItemQuantity"
|
<paper-icon-button class="addItemQuantity"
|
||||||
icon="add"
|
icon="add"
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
icon="remove"
|
icon="remove"
|
||||||
style="margin-right: -8px"></paper-icon-button>
|
style="margin-right: -8px"></paper-icon-button>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ Template.inventory.helpers({
|
|||||||
).forEach(function(item){
|
).forEach(function(item){
|
||||||
worth += item.totalValue();
|
worth += item.totalValue();
|
||||||
});
|
});
|
||||||
|
Containers.find(
|
||||||
|
{charId: this._id},
|
||||||
|
{fields: {value : 1}}
|
||||||
|
).forEach(function(container) {
|
||||||
|
if (container.value) worth += container.value;
|
||||||
|
});
|
||||||
return worth;
|
return worth;
|
||||||
},
|
},
|
||||||
weightCarried: function(){
|
weightCarried: function(){
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
layout horizontal center>
|
layout horizontal center>
|
||||||
<div flex>Experience</div>
|
<div flex>Experience</div>
|
||||||
<div >{{characterCalculate "experience" _id}} XP</div>
|
<div >{{characterCalculate "experience" _id}} XP</div>
|
||||||
<paper-icon-button class="black54" id="addXP" icon="add"></paper-icon-button>
|
<paper-icon-button class="black54" id="addXP" icon="add"
|
||||||
|
disabled={{#unless canEditCharacter _id}}true{{/unless}}></paper-icon-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom list">
|
<div class="bottom list">
|
||||||
{{#each experiences}}
|
{{#each experiences}}
|
||||||
@@ -55,7 +56,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<paper-icon-button class="black54"
|
<paper-icon-button class="black54"
|
||||||
id="addClassButton"
|
id="addClassButton"
|
||||||
icon="add">
|
icon="add"
|
||||||
|
disabled={{#unless canEditCharacter _id}}true{{/unless}}>
|
||||||
</paper-icon-button>
|
</paper-icon-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom list">
|
<div class="bottom list">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template name="backgroundDialog">
|
<template name="backgroundDialog">
|
||||||
{{#baseDialog title=title class=colorClass hideColor="true" hideDelete="true" startEditing=startEditing}}
|
{{#baseDialog title=title class=colorClass hideColor="true" hideDelete="true"}}
|
||||||
<div class="pre-wrap">{{evaluateString charId value}}</div>
|
<div class="pre-wrap">{{evaluateString charId value}}</div>
|
||||||
{{> proficiencyViewList charId=charId parentId=charId parentGroup="background"}}
|
{{> proficiencyViewList charId=charId parentId=charId parentGroup="background"}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|||||||
@@ -1,18 +1,36 @@
|
|||||||
<template name="personaDetailsDialog">
|
<template name="personaDetailsDialog">
|
||||||
{{#baseDialog title=name class="deep-purple white-text" hideColor="true" hideDelete="true" startEditing=startEditing}}
|
{{#baseDialog title=name class="deep-purple white-text" hideColor="true" hideDelete="true" startEditing=startEditing}}
|
||||||
{{alignment}} {{gender}} {{race}}
|
{{#with char}}
|
||||||
|
<div>{{alignment}} {{gender}} {{race}}</div>
|
||||||
|
<core-image style="width: 350px; height: 350px; margin-top: 8px;"
|
||||||
|
sizing="cover"
|
||||||
|
hero-id="image" hero
|
||||||
|
src={{picture}}></core-image>
|
||||||
|
{{/with}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{> personaDetailsEdit}}
|
{{#with char}}
|
||||||
|
{{> personaDetailsEdit}}
|
||||||
|
{{/with}}
|
||||||
{{/baseDialog}}
|
{{/baseDialog}}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template name="personaDetailsEdit">
|
<template name="personaDetailsEdit">
|
||||||
<!--Name-->
|
<div layout horizontal center-justified>
|
||||||
<paper-input id="nameInput" label="Name" floatinglabel value={{name}}></paper-input><br>
|
<div flex style="max-width: 350px;" layout vertical>
|
||||||
<!--Alignment-->
|
<!--Name-->
|
||||||
<paper-input id="alignmentInput" label="Alignment" floatinglabel value={{alignment}}></paper-input><br>
|
<paper-input id="nameInput" label="Name" floatinglabel value={{name}}></paper-input>
|
||||||
<!--Gender-->
|
<!--Alignment-->
|
||||||
<paper-input id="genderInput" label="Gender" floatinglabel value={{gender}}></paper-input><br>
|
<paper-input id="alignmentInput" label="Alignment" floatinglabel value={{alignment}}></paper-input>
|
||||||
<!--Race-->
|
<!--Gender-->
|
||||||
<paper-input id="raceInput" label="Race" floatinglabel value={{race}}></paper-input><br>
|
<paper-input id="genderInput" label="Gender" floatinglabel value={{gender}}></paper-input>
|
||||||
|
<!--Race-->
|
||||||
|
<paper-input id="raceInput" label="Race" floatinglabel value={{race}}></paper-input>
|
||||||
|
<!--Picture-->
|
||||||
|
<paper-input id="pictureInput" label="Picture URL" floatinglabel value={{picture}}></paper-input>
|
||||||
|
<core-image style="height:350px; width: 100%; margin-top: 8px;"
|
||||||
|
sizing="cover"
|
||||||
|
hero-id="image" hero
|
||||||
|
src={{picture}}></core-image>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -2,21 +2,34 @@ Template.personaDetailsEdit.onRendered(function(){
|
|||||||
updatePolymerInputs(this);
|
updatePolymerInputs(this);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Template.personaDetailsDialog.helpers({
|
||||||
|
char: function() {
|
||||||
|
return Characters.findOne(
|
||||||
|
this._id,
|
||||||
|
{fields: {name: 1, alignment: 1, gender: 1, race: 1, picture: 1}}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Template.personaDetailsEdit.events({
|
Template.personaDetailsEdit.events({
|
||||||
"change #nameInput": function(event){
|
"change #nameInput": function(event){
|
||||||
var input = event.currentTarget.value;
|
var input = event.currentTarget.value;
|
||||||
Characters.update(this.charId, {$set: {name: input}});
|
Characters.update(this._id, {$set: {name: input}});
|
||||||
},
|
},
|
||||||
"change #alignmentInput": function(event){
|
"change #alignmentInput": function(event){
|
||||||
var input = event.currentTarget.value;
|
var input = event.currentTarget.value;
|
||||||
Characters.update(this.charId, {$set: {alignment: input}});
|
Characters.update(this._id, {$set: {alignment: input}});
|
||||||
},
|
},
|
||||||
"change #genderInput": function(event){
|
"change #genderInput": function(event){
|
||||||
var input = event.currentTarget.value;
|
var input = event.currentTarget.value;
|
||||||
Characters.update(this.charId, {$set: {gender: input}});
|
Characters.update(this._id, {$set: {gender: input}});
|
||||||
},
|
},
|
||||||
"change #raceInput": function(event){
|
"change #raceInput": function(event){
|
||||||
var input = event.currentTarget.value;
|
var input = event.currentTarget.value;
|
||||||
Characters.update(this.charId, {$set: {race: input}});
|
Characters.update(this._id, {$set: {race: input}});
|
||||||
|
},
|
||||||
|
"change #pictureInput": function(event){
|
||||||
|
var input = event.currentTarget.value;
|
||||||
|
Characters.update(this._id, {$set: {picture: input}});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,35 @@
|
|||||||
<div id="persona" class="scroll-y" fit>
|
<div id="persona" class="scroll-y" fit>
|
||||||
<div class="column-container">
|
<div class="column-container">
|
||||||
{{#with characterDetails}}
|
{{#with characterDetails}}
|
||||||
{{#containerCardHelper this}}{{alignment}} {{gender}} {{race}}{{/containerCardHelper}}
|
<paper-shadow class="card"
|
||||||
|
hero-id="main" {{detailHero "details" _id}}>
|
||||||
|
{{#unless picture}}
|
||||||
|
<div class="top subhead characterField {{colorClass}}"
|
||||||
|
hero-id="toolbar" {{detailHero "details" _id}}>
|
||||||
|
<div class="subhead" flex
|
||||||
|
hero-id="title" {{detailHero "details" _id}}>
|
||||||
|
{{name}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<core-image class="characterField clickable"
|
||||||
|
style="height:350px; width: 100%;
|
||||||
|
background-color: #e8e8e8;"
|
||||||
|
sizing="cover"
|
||||||
|
hero-id="image" {{detailHero "details" _id}}
|
||||||
|
src={{picture}}></core-image>
|
||||||
|
{{/unless}}
|
||||||
|
<div class="bottom">
|
||||||
|
{{#if picture}}
|
||||||
|
<div class="title" hero-id="title" {{detailHero "details" _id}}>
|
||||||
|
{{name}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
<div class="subhead">
|
||||||
|
{{alignment}} {{gender}} {{race}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</paper-shadow>
|
||||||
{{/with}}
|
{{/with}}
|
||||||
{{> containerCard characterField "description" "Description"}}
|
{{> containerCard characterField "description" "Description"}}
|
||||||
{{> containerCard characterField "personality" "Personality Traits"}}
|
{{> containerCard characterField "personality" "Personality Traits"}}
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ Template.persona.helpers({
|
|||||||
characterDetails: function(){
|
characterDetails: function(){
|
||||||
var char = Characters.findOne(
|
var char = Characters.findOne(
|
||||||
this._id,
|
this._id,
|
||||||
{fields: {name: 1, gender: 1, alignment: 1, race:1}}
|
{fields: {name: 1, gender: 1, alignment: 1, race:1, picture: 1}}
|
||||||
);
|
);
|
||||||
char.field = "details";
|
char.field = "details";
|
||||||
char.title = char.name;
|
char.title = char.name;
|
||||||
char.color = "d";
|
char.color = "d";
|
||||||
char.topClass = "characterField";
|
char.startEditing = true;
|
||||||
return char;
|
return char;
|
||||||
},
|
},
|
||||||
characterField: function(field, title){
|
characterField: function(field, title){
|
||||||
@@ -40,7 +40,7 @@ Template.persona.helpers({
|
|||||||
|
|
||||||
Template.persona.events({
|
Template.persona.events({
|
||||||
"tap .characterField": function(event){
|
"tap .characterField": function(event){
|
||||||
if (this.field === "details"){
|
if (this.field == "details"){
|
||||||
this.charId = Template.parentData()._id;
|
this.charId = Template.parentData()._id;
|
||||||
GlobalUI.setDetail({
|
GlobalUI.setDetail({
|
||||||
template: "personaDetailsDialog",
|
template: "personaDetailsDialog",
|
||||||
@@ -58,6 +58,7 @@ Template.persona.events({
|
|||||||
field: this.field,
|
field: this.field,
|
||||||
title: this.title,
|
title: this.title,
|
||||||
color: this.color,
|
color: this.color,
|
||||||
|
startEditing: true,
|
||||||
},
|
},
|
||||||
heroId: this._id + this.field,
|
heroId: this._id + this.field,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -72,6 +72,7 @@
|
|||||||
<core-tooltip label="Change prepared spells"
|
<core-tooltip label="Change prepared spells"
|
||||||
position="left">
|
position="left">
|
||||||
<paper-icon-button class="prepSpells"
|
<paper-icon-button class="prepSpells"
|
||||||
|
disabled={{#unless canEditCharacter charId}}true{{/unless}}
|
||||||
icon="book">
|
icon="book">
|
||||||
</paper-icon-button>
|
</paper-icon-button>
|
||||||
</core-tooltip>
|
</core-tooltip>
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ Template.spells.helpers({
|
|||||||
for (i = 0; i < currentSlots; i++){
|
for (i = 0; i < currentSlots; i++){
|
||||||
bubbles.push({
|
bubbles.push({
|
||||||
icon: "radio-button-on",
|
icon: "radio-button-on",
|
||||||
disabled: i !== currentSlots - 1, //last full slot not disabled
|
disabled: i !== currentSlots - 1 || !canEditCharacter(char._id), //last full slot not disabled
|
||||||
attribute: "level" + this.level + "SpellSlots",
|
attribute: "level" + this.level + "SpellSlots",
|
||||||
charId: char._id,
|
charId: char._id,
|
||||||
});
|
});
|
||||||
@@ -120,7 +120,7 @@ Template.spells.helpers({
|
|||||||
for (i = 0; i < slotsUsed; i++){
|
for (i = 0; i < slotsUsed; i++){
|
||||||
bubbles.push({
|
bubbles.push({
|
||||||
icon: "radio-button-off",
|
icon: "radio-button-off",
|
||||||
disabled: i !== 0, //first empty slot not disabled
|
disabled: i !== 0 || !canEditCharacter(char._id), //first empty slot not disabled
|
||||||
attribute: "level" + this.level + "SpellSlots",
|
attribute: "level" + this.level + "SpellSlots",
|
||||||
charId: char._id,
|
charId: char._id,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,7 +6,11 @@
|
|||||||
hero-id="toolbar" {{detailHero "hitPoints" _id}}
|
hero-id="toolbar" {{detailHero "hitPoints" _id}}
|
||||||
layout vertical center center-justified>
|
layout vertical center center-justified>
|
||||||
<div class="hitPointTitle clickable">Hit Points</div>
|
<div class="hitPointTitle clickable">Hit Points</div>
|
||||||
<paper-icon-button class="white54" id="addTempHP" icon="add"></paper-icon-button>
|
<paper-icon-button class="white54"
|
||||||
|
id="addTempHP"
|
||||||
|
icon="add"
|
||||||
|
disabled={{#unless canEditCharacter _id}}true{{/unless}}>
|
||||||
|
</paper-icon-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="right" flex layout vertical center-justified style="min-width: 180px;">
|
<div class="right" flex layout vertical center-justified style="min-width: 180px;">
|
||||||
<div layout horizontal>
|
<div layout horizontal>
|
||||||
@@ -14,6 +18,7 @@
|
|||||||
value={{characterCalculate "attributeValue" _id "hitPoints"}}
|
value={{characterCalculate "attributeValue" _id "hitPoints"}}
|
||||||
max={{characterCalculate "attributeBase" _id "hitPoints"}}
|
max={{characterCalculate "attributeBase" _id "hitPoints"}}
|
||||||
editable pin
|
editable pin
|
||||||
|
disabled={{#unless canEditCharacter _id}}true{{/unless}}
|
||||||
role="slider">
|
role="slider">
|
||||||
</paper-diff-slider>
|
</paper-diff-slider>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
{{characterCalculate "attributeValue" ../_id name}}
|
{{characterCalculate "attributeValue" ../_id name}}
|
||||||
</div>
|
</div>
|
||||||
<div class="title white-text">
|
<div class="title white-text">
|
||||||
d{{diceNum}} {{characterCalculate "abilityMod" ../_id "constitution"}}
|
d{{diceNum}} {{conMod}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,11 +2,16 @@ Template.hitDice.helpers({
|
|||||||
cantIncrement: function(){
|
cantIncrement: function(){
|
||||||
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
||||||
var base = Characters.calculate.attributeBase(this.char._id, this.name);
|
var base = Characters.calculate.attributeBase(this.char._id, this.name);
|
||||||
return value >= base;
|
return value >= base || !canEditCharacter(this.char._id);
|
||||||
},
|
},
|
||||||
cantDecrement: function(){
|
cantDecrement: function(){
|
||||||
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
var value = Characters.calculate.attributeValue(this.char._id, this.name);
|
||||||
return value <= 0;
|
return value <= 0 || !canEditCharacter(this.char._id);
|
||||||
|
},
|
||||||
|
conMod: function(){
|
||||||
|
return signedString(
|
||||||
|
Characters.calculate.abilityMod(this.char._id, "constitution")
|
||||||
|
);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,10 @@ Template.characterSideList.helpers({
|
|||||||
{owner: userId},
|
{owner: userId},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{fields: {name: 1}}
|
{
|
||||||
|
fields: {name: 1},
|
||||||
|
sort: {name: 1},
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,20 +9,11 @@ Template.baseDialog.onRendered(function(){
|
|||||||
|
|
||||||
Template.baseDialog.helpers({
|
Template.baseDialog.helpers({
|
||||||
editing: function(){
|
editing: function(){
|
||||||
return Template.instance().editing.get();
|
return Template.instance().editing.get() && canEditCharacter(Template.parentData().charId);
|
||||||
},
|
},
|
||||||
showEdit: function() {
|
showEdit: function() {
|
||||||
if (this.hideEdit) return false;
|
if (this.hideEdit) return false;
|
||||||
var charId = Template.parentData().charId;
|
return canEditCharacter(Template.parentData().charId);
|
||||||
var userId = Meteor.userId();
|
|
||||||
if (!userId) return false;
|
|
||||||
if (charId){
|
|
||||||
var char = Characters.findOne(charId);
|
|
||||||
if (char)
|
|
||||||
return char.owner === userId ||
|
|
||||||
_.contains(char.writers, userId);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -208,3 +208,23 @@ ChangeLogs.insert({
|
|||||||
"Made dependency loops return NaN immediately, rather than looping indefinitely until a page refresh. Adding an effect that adds \"strength\" to Strength, won't cause Strength to constantly increase or freeze the browser, Strength just becomes NaN",
|
"Made dependency loops return NaN immediately, rather than looping indefinitely until a page refresh. Adding an effect that adds \"strength\" to Strength, won't cause Strength to constantly increase or freeze the browser, Strength just becomes NaN",
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ChangeLogs.insert({
|
||||||
|
version: "0.6.4",
|
||||||
|
changes: [
|
||||||
|
"Hit dice now has a \"+\" between the dice and the constitution modifier",
|
||||||
|
"Items with multiple attacks should have the damage type editable on all attacks now",
|
||||||
|
"Spell attacks should now correctly inherit changes to their spell's name",
|
||||||
|
"Character lists should now be ordered alphabetically",
|
||||||
|
"Skills should have correct min and max effects applied again",
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
ChangeLogs.insert({
|
||||||
|
version: "0.6.5",
|
||||||
|
changes: [
|
||||||
|
"Net worth now takes container values into account",
|
||||||
|
"Added support for character pictures",
|
||||||
|
"Disabled edit buttons for reada-only viewers",
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user