diff --git a/rpg-docs/client/views/user/profile/usernameDialog.js b/rpg-docs/client/views/user/profile/userNameDialog/usernameDialog.js
similarity index 100%
rename from rpg-docs/client/views/user/profile/usernameDialog.js
rename to rpg-docs/client/views/user/profile/userNameDialog/usernameDialog.js
diff --git a/rpg-docs/config.vulcanize b/rpg-docs/config.vulcanize
index 0e27de89..fbdd8a9c 100644
--- a/rpg-docs/config.vulcanize
+++ b/rpg-docs/config.vulcanize
@@ -49,6 +49,7 @@
"/custom_components/dicecloud-wrapper/dicecloud-wrapper.html",
"/custom_components/paper-checkbox/paper-checkbox.html",
"/custom_components/paper-diff-slider/paper-diff-slider.html",
+ "/custom_components/paper-stepper/paper-stepper.html",
"/custom_components/app-theme.html"
]
}
diff --git a/rpg-docs/lib/constants/abilities.js b/rpg-docs/lib/constants/abilities.js
index 646d318a..085a0f13 100644
--- a/rpg-docs/lib/constants/abilities.js
+++ b/rpg-docs/lib/constants/abilities.js
@@ -6,3 +6,14 @@ abilities = [
"wisdom",
"charisma",
];
+
+ABILITIES = abilities;
+
+ABILITY_MODS = [
+ "strengthMod",
+ "dexterityMod",
+ "constitutionMod",
+ "intelligenceMod",
+ "wisdomMod",
+ "charismaMod",
+];
diff --git a/rpg-docs/lib/constants/attributes.js b/rpg-docs/lib/constants/attributes.js
new file mode 100644
index 00000000..115e7f7d
--- /dev/null
+++ b/rpg-docs/lib/constants/attributes.js
@@ -0,0 +1,34 @@
+ATTRIBUTES = [
+ "strength",
+ "dexterity",
+ "constitution",
+ "intelligence",
+ "wisdom",
+ "charisma",
+ "hitPoints",
+ "tempHP",
+ "experience",
+ "proficiencyBonus",
+ "speed",
+ "armor",
+ "carryMultiplier",
+ "level1SpellSlots",
+ "level2SpellSlots",
+ "level3SpellSlots",
+ "level4SpellSlots",
+ "level5SpellSlots",
+ "level6SpellSlots",
+ "level7SpellSlots",
+ "level8SpellSlots",
+ "level9SpellSlots",
+ "ki",
+ "sorceryPoints",
+ "rages",
+ "superiorityDice",
+ "expertiseDice",
+ "rageDamage",
+ "d6HitDice",
+ "d8HitDice",
+ "d10HitDice",
+ "d12HitDice",
+];
diff --git a/rpg-docs/lib/constants/skills.js b/rpg-docs/lib/constants/skills.js
index d11b1af0..0a47069c 100644
--- a/rpg-docs/lib/constants/skills.js
+++ b/rpg-docs/lib/constants/skills.js
@@ -19,3 +19,32 @@ SKILLS = [
"survival",
"initiative",
];
+
+ALL_SKILLS = [
+ "strengthSave",
+ "dexteritySave",
+ "constitutionSave",
+ "intelligenceSave",
+ "wisdomSave",
+ "charismaSave",
+ "acrobatics",
+ "animalHandling",
+ "arcana",
+ "athletics",
+ "deception",
+ "history",
+ "insight",
+ "intimidation",
+ "investigation",
+ "medicine",
+ "nature",
+ "perception",
+ "performance",
+ "persuasion",
+ "religion",
+ "sleightOfHand",
+ "stealth",
+ "survival",
+ "initiative",
+ "dexterityArmor",
+];
diff --git a/rpg-docs/lib/constants/subsManager.js b/rpg-docs/lib/constants/subsManager.js
index 6e5de50d..c8593307 100644
--- a/rpg-docs/lib/constants/subsManager.js
+++ b/rpg-docs/lib/constants/subsManager.js
@@ -1 +1,6 @@
-subsManager = new SubsManager();
+subsManager = new SubsManager({
+ // maximum number of cache subscriptions
+ cacheLimit: 5,
+ // any subscription will be expire after 1 minute, if it's not subscribed again
+ expireIn: 1,
+});
diff --git a/rpg-docs/lib/constants/useraccountsConfig.js b/rpg-docs/lib/constants/useraccountsConfig.js
index 297ede35..6d4879bc 100644
--- a/rpg-docs/lib/constants/useraccountsConfig.js
+++ b/rpg-docs/lib/constants/useraccountsConfig.js
@@ -2,7 +2,7 @@ AccountsTemplates.configure({
//behaviour
confirmPassword: true,
enablePasswordChange: true,
- enforceEmailVerification: true,
+ enforceEmailVerification: false,
overrideLoginErrors: false,
sendVerificationEmail: true,
lowercaseUsername: true,
@@ -21,35 +21,35 @@ AccountsTemplates.configure({
AccountsTemplates.configureRoute("changePwd", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("enrollAccount", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("forgotPwd", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("resetPwd", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("signIn", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("signUp", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("verifyEmail", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
AccountsTemplates.configureRoute("resendVerificationEmail", {
template: "titledAtForm",
- layoutTemplate: 'layout',
+ layoutTemplate: "layout",
});
if (Meteor.isServer){
diff --git a/rpg-docs/lib/functions/characterExport.js b/rpg-docs/lib/functions/characterExport.js
new file mode 100644
index 00000000..fe56c6ae
--- /dev/null
+++ b/rpg-docs/lib/functions/characterExport.js
@@ -0,0 +1,258 @@
+characterExport = function(charId){
+ var {
+ character, classes, effects, proficiencies,
+ } = getCharacterForComputation(charId);
+ var char = character;
+ computedCharacter = computeCharacter({
+ character, classes, effects, proficiencies,
+ });
+ if (!char) {
+ return {
+ error: charId + " character not found"
+ };
+ }
+ if (char.settings.viewPermission !== "public" && Meteor.isServer){
+ return {
+ error: charId + " character is not viewable to anyone with link"
+ };
+ }
+ var baseValue = function(attributeName){
+ var attribute = computedCharacter[attributeName];
+ return attribute && attribute.value;
+ };
+ var attributeValue = function(attributeName){
+ var base = baseValue(attributeName);
+ var adjustment = char[attributeName] && char[attributeName].adjustment;
+ return base + adjustment;
+ };
+ var abilityMod = function(attributeName){
+ return signedString(getMod(attributeValue(attributeName)));
+ };
+ var skillMod = function(skillName){
+ return signedString(baseValue(skillName));
+ };
+ var proficiency = function(skillName){
+ var skill = computedCharacter[skillName];
+ return skill && skill.proficiency;
+ };
+ var passiveSkill = function(skillName){
+ var attribute = computedCharacter[skillName];
+ if (!attribute) return;
+ return 10 + baseValue(skillName) + attribute.passiveAdd;
+ };
+ var experience = function(){
+ var xp = 0;
+ Experiences.find(
+ {charId: charId},
+ {fields: {value: 1}}
+ ).forEach(function(e){
+ xp += e.value;
+ });
+ return xp;
+ };
+ var getClasses = function(){
+ return _.map(classes, c => `${c.name} ${c.level}`).join(", ");
+ };
+ var getHitDiceString = function(){
+ var d6 = baseValue("d6HitDice");
+ var d8 = baseValue("d8HitDice");
+ var d10 = baseValue("d10HitDice");
+ var d12 = baseValue("d12HitDice");
+ var con = abilityMod("constitution");
+ var string = "" +
+ (d6 ? `${d6}d6 + ` : "") +
+ (d8 ? `${d8}d8 + ` : "") +
+ (d10 ? `${d10}d10 + ` : "") +
+ (d12 ? `${d12}d12 + ` : "") +
+ con;
+ return string;
+ }
+ var getSkills = function(charId){
+ var allSkills = [
+ {name: "acrobatics", attribute: "dexterity"},
+ {name: "animalHandling", attribute: "wisdom"},
+ {name: "arcana", attribute: "intelligence"},
+ {name: "athletics", attribute: "strength"},
+ {name: "deception", attribute: "charisma"},
+ {name: "history", attribute: "intelligence"},
+ {name: "insight", attribute: "wisdom"},
+ {name: "intimidation", attribute: "charisma"},
+ {name: "investigation", attribute: "intelligence"},
+ {name: "medicine", attribute: "wisdom"},
+ {name: "nature", attribute: "intelligence"},
+ {name: "perception", attribute: "wisdom"},
+ {name: "performance", attribute: "charisma"},
+ {name: "persuasion", attribute: "charisma"},
+ {name: "religion", attribute: "intelligence"},
+ {name: "sleightOfHand", attribute: "dexterity"},
+ {name: "stealth", attribute: "dexterity"},
+ {name: "survival", attribute: "wisdom"},
+ ];
+ var skills = {};
+ _.each(allSkills, skill => {
+ var value = skillMod(skill.name);
+ var prof = proficiency(skill.name);
+ var name = skill.name.charAt(0).toUpperCase() + skill.name.slice(1);
+ skills[name] = value;
+ skills[name + "Proficiency"] = prof;
+ });
+ return skills;
+ };
+ var character = {
+ "Id": char._id,
+ "Name": char.name,
+ "Source": "DiceCloud",
+ "Alignment": char.alignment || "",
+ "Gender": char.gender || "",
+ "Race": char.race || "",
+ "Level": _.reduce(classes, (memo, cls) => memo + cls.level, 0),
+ "Experience": experience(),
+ "Class": getClasses(charId),
+ "HPBase": baseValue("hitPoints"),
+ "HPValue": attributeValue("hitPoints"),
+ "HitDice": getHitDiceString(charId) || "",
+ "AC": attributeValue("armor"),
+ "Initiative": skillMod("initiative"),
+ "Speed": attributeValue("speed"),
+ "ProficiencyBonus": attributeValue("proficiencyBonus"),
+ "passivePerception": passiveSkill("perception"),
+
+ "Languages": getLanguages(charId),
+ "Description": char.description || "",
+ "Backstory": char.backstory || "",
+ "Personality": char.personality || "" ,
+ "Bonds": char.bonds || "",
+ "Ideals": char.ideals || "",
+ "Flaws": char.flaws || "",
+ "PictureURL": char.picture || "",
+
+ "Strength": attributeValue("strength"),
+ "Dexterity": attributeValue("dexterity"),
+ "Constitution": attributeValue("constitution"),
+ "intelligence": attributeValue("intelligence"),
+ "Wisdom": attributeValue("wisdom"),
+ "Charisma": attributeValue("charisma"),
+
+ "StrengthMod": abilityMod("strength"),
+ "DexterityMod": abilityMod("dexterity"),
+ "ConstitutionMod": abilityMod("constitution"),
+ "intelligenceMod": abilityMod("intelligence"),
+ "WisdomMod": abilityMod("wisdom"),
+ "CharismaMod": abilityMod("charisma"),
+
+ //"DamageVulnerabilities": damageMods.vulnerabilities,
+ //"DamageResistances": damageMods.resistances,
+ //"DamageImmunities": damageMods.immunities,
+
+ "StrengthSave": skillMod("strengthSave"),
+ "StrengthSaveProficiency": proficiency("strengthSave"),
+ "DexteritySave": skillMod("dexteritySave"),
+ "DexteritySaveProficiency": proficiency("dexteritySave"),
+ "ConstitutionSave": skillMod("constitutionSave"),
+ "ConstitutionSaveProficiency": proficiency("constitutionSave"),
+ "intelligenceSave": skillMod("intelligenceSave"),
+ "intelligenceSaveProficiency": proficiency("intelligenceSave"),
+ "WisdomSave": skillMod("wisdomSave"),
+ "WisdomSaveProficiency": proficiency("wisdomSave"),
+ "CharismaSave": skillMod("charismaSave"),
+ "CharismaSaveProficiency": proficiency("charismaSave"),
+
+ "Level1SpellSlots": attributeValue("level1SpellSlots"),
+ "Level2SpellSlots": attributeValue("level2SpellSlots"),
+ "Level3SpellSlots": attributeValue("level3SpellSlots"),
+ "Level4SpellSlots": attributeValue("level4SpellSlots"),
+ "Level5SpellSlots": attributeValue("level5SpellSlots"),
+ "Level6SpellSlots": attributeValue("level6SpellSlots"),
+ "Level7SpellSlots": attributeValue("level7SpellSlots"),
+ "Level8SpellSlots": attributeValue("level8SpellSlots"),
+ "Level9SpellSlots": attributeValue("level9SpellSlots"),
+ "Ki": attributeValue("ki"),
+ "Rages": attributeValue("rages"),
+ "RageDamage": attributeValue("rageDamage"),
+ "SorceryPoints": attributeValue("sorceryPoints"),
+
+ "DeathSavePasses": char.deathSave.pass,
+ "DeathSaveFails": char.deathSave.fail,
+ "DeathSaveStable": char.deathSave.stable,
+ };
+ _.extend(character, getSkills(charId));
+ _.extend(character, getAttacks(charId));
+ return character;
+}
+
+var getArmorString = function(charId){
+ var bases = Effects.find({
+ charId: charId,
+ stat: "armor",
+ operation: "base",
+ enabled: true,
+ }).map(e => ({
+ ame: e.name,
+ value: evaluateEffect(charId, e),
+ }));
+ var base = bases.length && _.max(bases, b => b.value).name || "";
+ var effects = Effects.find({
+ charId: charId,
+ stat: "armor",
+ operation: {$ne: "base"},
+ enabled: true,
+ }).map(e => e.name);
+ var strings = base ? [base] : [];
+ strings = strings.concat(effects);
+ return strings.join(", ");
+}
+/*
+var getDamageMods = function(charId){
+ // jscs:disable maximumLineLength
+ var multipliers = [
+ {name: "Acid", value: Characters.calculate.attributeValue(charId, "acidMultiplier")},
+ {name: "Bludgeoning", value: Characters.calculate.attributeValue(charId, "bludgeoningMultiplier")},
+ {name: "Cold", value: Characters.calculate.attributeValue(charId, "coldMultiplier")},
+ {name: "Fire", value: Characters.calculate.attributeValue(charId, "fireMultiplier")},
+ {name: "Force", value: Characters.calculate.attributeValue(charId, "forceMultiplier")},
+ {name: "Lightning", value: Characters.calculate.attributeValue(charId, "lightningMultiplier")},
+ {name: "Necrotic", value: Characters.calculate.attributeValue(charId, "necroticMultiplier")},
+ {name: "Piercing", value: Characters.calculate.attributeValue(charId, "piercingMultiplier")},
+ {name: "Poison", value: Characters.calculate.attributeValue(charId, "poisonMultiplier")},
+ {name: "Psychic", value: Characters.calculate.attributeValue(charId, "psychicMultiplier")},
+ {name: "Radiant", value: Characters.calculate.attributeValue(charId, "radiantMultiplier")},
+ {name: "Slashing", value: Characters.calculate.attributeValue(charId, "slashingMultiplier")},
+ {name: "Thunder", value: Characters.calculate.attributeValue(charId, "thunderMultiplier")},
+ ];
+ // jscs:enable maximumLineLength
+ multipliers = _.groupBy(multipliers, "value");
+ var names = o => o.name;
+ return {
+ "immunities": _.map(multipliers["0"], names).join(", "),
+ "resistances": _.map(multipliers["0.5"], names).join(", "),
+ "vulnerabilities": _.map(multipliers["2"], names).join(", "),
+ };
+}
+*/
+
+var getLanguages = function(charId){
+ return Proficiencies.find({
+ charId,
+ enabled: true,
+ type: "language",
+ }).map(l => l.name).join(", ");
+};
+
+var getAttacks = function(charId){
+ var attacks = {};
+ var i = 1;
+ Attacks.find(
+ {charId, enabled: true},
+ {sort: {color: 1, name: 1}}
+ ).forEach(a => {
+ attacks[`Attack${i++}`] = a.name +
+ ` +${evaluate(charId, a.attackBonus)} to hit, ` +
+ `${evaluateString(charId, a.damage)} ${a.damageType} damage, ` +
+ `${a.details}`;
+ });
+ return attacks;
+};
+
+var signedString = function(number) {
+ return number >= 0 ? "+" + number : "" + number;
+};
diff --git a/rpg-docs/lib/functions/computeCharacter.js b/rpg-docs/lib/functions/computeCharacter.js
new file mode 100644
index 00000000..535ed9cd
--- /dev/null
+++ b/rpg-docs/lib/functions/computeCharacter.js
@@ -0,0 +1,224 @@
+getCharacterForComputation = function(charId){
+ const character = Characters.findOne(charId);
+ const classes = Classes.find({charId}).fetch();
+ const effects = Effects.find({charId, enabled: true}).fetch();
+ const proficiencies = Proficiencies.find({
+ charId,
+ enabled: true,
+ type: {$in: ["skill", "save"]},
+ }).fetch();
+ return {character, classes, effects, proficiencies};
+}
+
+computeCharacter = function({character, classes, effects, proficiencies}){
+ var charId = character._id;
+ let computedClasses = computeCharacterClasses(charId, classes);
+ let changed = false;
+ computedCharacter = {};
+ let i;
+ for (i = 0; i < 15; i++){
+ [computedCharacter, changed] = compute({
+ classes: computedClasses,
+ oldChar: computedCharacter,
+ charId,
+ character,
+ effects,
+ proficiencies,
+ });
+ if (!changed) break;
+ }
+ return computedCharacter;
+};
+
+var ensureCharacterExists = (character) => {
+ if (!character) {
+ throw new Meteor.Error("Character doesn't exist",
+ "You can't recompute a character that doesn't exist");
+ }
+};
+
+var ensureWritePermissions = (character, userId) => {
+ if (
+ userId &&
+ userId !== character.owner &&
+ !_.contains(character.writers, userId)
+ ){
+ throw new Meteor.Error("Character write denied",
+ "You don't have permission to recompute this character");
+ }
+};
+
+var computeCharacterClasses = function(charId, classes){
+ let computedClasses = {};
+ _.each(classes, (cls) => {
+ if (computedClasses[cls.name]){
+ computedClasses[cls.name].level += cls.level;
+ } else {
+ computedClasses[cls.name] = cls;
+ }
+ });
+ return computedClasses;
+}
+
+var compute = function({
+ charId, oldChar, character, classes, effects, proficiencies,
+}){
+ let newChar = {};
+ _.each(effects, (effect, index) => {
+ if (!effect.stat || effect.operation === "conditional") return;
+ if (!newChar[effect.stat]) newChar[effect.stat] = defaultStat();
+ let value = effect.calculation ?
+ computeEffect(effect.calculation, oldChar, classes) :
+ effect.value || 0;
+ let stat = newChar[effect.stat];
+ if (!_.isNumber(value)) return;
+ switch (effect.operation) {
+ case "base":
+ if (value > stat.base) stat.base = value;
+ break;
+ case "proficiency":
+ if (value > stat.proficiency) stat.proficiency = value;
+ break;
+ case "add":
+ stat.add += value;
+ break;
+ case "mul":
+ stat.mul *= value;
+ break;
+ case "min":
+ if (value > stat.min) stat.min = value;
+ break;
+ case "max":
+ if (value < stat.max) stat.max = value;
+ break;
+ case "advantage":
+ stat.advantage++;
+ break;
+ case "disadvantage":
+ stat.disadvantage++;
+ break;
+ case "passiveAdd":
+ stat.passiveAdd += value;
+ break;
+ case "fail":
+ stat.fail = true;
+ break;
+ }
+ });
+ _.each(proficiencies, proficiency => {
+ if (!proficiency.name) return;
+ if (!newChar[proficiency.name]) newChar[proficiency.name] = defaultStat();
+ let stat = newChar[proficiency.name];
+ let value = proficiency.value;
+ if (value > stat.proficiency) stat.proficiency = value;
+ });
+ let changed = false;
+ _.each(ATTRIBUTES, function(statName) {
+ if (!newChar[statName]) newChar[statName] = defaultStat();
+ let stat = newChar[statName];
+ stat.value = (stat.base + stat.add) * stat.mul;
+ if (stat.value < stat.min) stat.value = stat.min;
+ if (stat.value > stat.max) stat.value = stat.max;
+ if (!_.isEqual(stat.value, oldChar[statName] && oldChar[statName].value)){
+ changed = true;
+ }
+ });
+ _.each(ALL_SKILLS, function(statName) {
+ if (!newChar[statName]) newChar[statName] = defaultStat();
+ let stat = newChar[statName];
+ stat.value = characterAbilityMod(
+ oldChar, character[statName] && character[statName].ability
+ );
+ stat.value += stat.base + stat.add;
+ stat.value += stat.proficiency *
+ characterFieldValue(oldChar, "proficiencyBonus");
+ stat.value *= stat.mul;
+ if (stat.value < stat.min) stat.value = stat.min;
+ if (stat.value > stat.max) stat.value = stat.max;
+ if (!_.isEqual(stat.value, oldChar[statName] && oldChar[statName].value)){
+ changed = true;
+ }
+ });
+ return [newChar, changed];
+};
+
+var defaultStat = function(){
+ return {
+ base: 0,
+ proficiency: 0,
+ add: 0,
+ mul: 1,
+ min: Number.NEGATIVE_INFINITY,
+ max: Number.POSITIVE_INFINITY,
+ advantage: 0,
+ disadvantage: 0,
+ passiveAdd: 0,
+ fail: false,
+ }
+}
+
+var computeEffect = function(string, character, classes){
+ if (!string) return string;
+ string = string.replace(/\b[a-z][\w]+/gi, function(sub){
+ //fields
+ if (character[sub]){
+ return characterFieldValue(character, sub);
+ }
+ //ability modifiers
+ if (_.contains(ABILITY_MODS, sub)){
+ var slice = sub.slice(0, -3);
+ return getMod(
+ character[slice] ? characterFieldValue(character, slice) : 0
+ );
+ }
+ //class levels
+ if (/\w+levels?\b/gi.test(sub)){
+ //strip out "level"
+ var className = sub.replace(/levels?\b/gi, "");
+ return characterClassLevel(classes, className)
+ }
+ //character level
+ if (sub.toUpperCase() === "LEVEL"){
+ return characterTotalLevel(classes);
+ }
+ // exclude math functions
+ if (math[sub]){
+ return sub;
+ }
+ return 0;
+ });
+ try {
+ var result = math.eval(string);
+ return result;
+ } catch (e){
+ return string;
+ }
+};
+
+var characterFieldValue = function(character, field){
+ if (_.isNumber(character[field] && character[field].value)){
+ return character[field].value;
+ } else {
+ return field;
+ }
+};
+
+var characterClassLevel = function(classes, className){
+ if (_.isNumber(classes[className] && classes[className].level)){
+ return classes[className].level;
+ } else {
+ return className;
+ }
+};
+
+var characterTotalLevel = function(classes){
+ return _.reduce(classes, (memo, cls) => memo + cls.level, 0);
+};
+
+var characterAbilityMod = function(character, abilityName){
+ if (_.isNumber(character[abilityName] && character[abilityName].value)){
+ return getMod(character[abilityName].value);
+ } else {
+ return 0;
+ }
+};
diff --git a/rpg-docs/lib/functions/parenting.js b/rpg-docs/lib/functions/parenting.js
index 88da47a1..eb3e01f2 100644
--- a/rpg-docs/lib/functions/parenting.js
+++ b/rpg-docs/lib/functions/parenting.js
@@ -1,7 +1,7 @@
var childSchema = new SimpleSchema({
parent: {type: Object},
"parent.collection": {type: String},
- "parent.id": {type: String, regEx: SimpleSchema.RegEx.Id},
+ "parent.id": {type: String, regEx: SimpleSchema.RegEx.Id, index: 1},
"parent.group": {type: String, optional: true},
"removedWith": {
optional: true,
diff --git a/rpg-docs/lib/functions/vMixExport.js b/rpg-docs/lib/functions/vMixExport.js
new file mode 100644
index 00000000..b2a95fd2
--- /dev/null
+++ b/rpg-docs/lib/functions/vMixExport.js
@@ -0,0 +1,9 @@
+vMixCharacter = function(charId){
+ return JSON.stringify([characterExport(charId)], null, 2);
+};
+
+vMixParty = function(partyId){
+ var party = Parties.findOne(partyId);
+ var chars = _.map(party.characters, charId => characterExport(charId));
+ return JSON.stringify(chars, null, 2);
+};
diff --git a/rpg-docs/package-lock.json b/rpg-docs/package-lock.json
new file mode 100644
index 00000000..2952092c
--- /dev/null
+++ b/rpg-docs/package-lock.json
@@ -0,0 +1,845 @@
+{
+ "name": "rpg-docs",
+ "version": "0.10.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@polymer/polymer": {
+ "version": "https://registry.npmjs.org/@polymer/polymer/-/polymer-1.2.5-npm-test.2.tgz",
+ "integrity": "sha1-eTD1ZjwvaGkVRR0hHmY6qZl9czY=",
+ "requires": {
+ "webcomponents.js": "https://registry.npmjs.org/webcomponents.js/-/webcomponents.js-0.7.24.tgz"
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "ajv": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.4.0.tgz",
+ "integrity": "sha1-MtHPCNvIDEMvQm8S4QslEfa0ZHQ=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
+ },
+ "babel-runtime": {
+ "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz",
+ "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "bcrypt": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-1.0.3.tgz",
+ "integrity": "sha512-pRyDdo73C8Nim3jwFJ7DWe3TZCgwDfWZ6nHS5LSdU77kWbj1frruvdndP02AOavtD4y8v6Fp2dolbHgp4SDrfg==",
+ "requires": {
+ "nan": "2.6.2",
+ "node-pre-gyp": "0.6.36"
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ },
+ "bower": {
+ "version": "https://registry.npmjs.org/bower/-/bower-1.8.0.tgz",
+ "integrity": "sha1-Vdvr7wrZFVOC2enT5JfBNyNFtEo="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cryptiles": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
+ "requires": {
+ "boom": "5.2.0"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
+ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ }
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
+ "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "requires": {
+ "ajv": "5.4.0",
+ "har-schema": "2.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+ "hawk": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
+ "requires": {
+ "boom": "4.3.1",
+ "cryptiles": "3.1.2",
+ "hoek": "4.2.0",
+ "sntp": "2.1.0"
+ }
+ },
+ "hoek": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
+ "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4="
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "nan": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
+ "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U="
+ },
+ "node-pre-gyp": {
+ "version": "0.6.36",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz",
+ "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=",
+ "requires": {
+ "mkdirp": "0.5.1",
+ "nopt": "4.0.1",
+ "npmlog": "4.1.2",
+ "rc": "1.2.2",
+ "request": "2.83.0",
+ "rimraf": "2.6.2",
+ "semver": "5.4.1",
+ "tar": "2.2.1",
+ "tar-pack": "3.4.1"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "requires": {
+ "abbrev": "1.1.1",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ },
+ "rc": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz",
+ "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=",
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ },
+ "request": {
+ "version": "2.83.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
+ "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.1",
+ "har-validator": "5.0.3",
+ "hawk": "6.0.2",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.1",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.1.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "sntp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
+ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz",
+ "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==",
+ "requires": {
+ "debug": "2.6.9",
+ "fstream": "1.0.11",
+ "fstream-ignore": "1.0.5",
+ "once": "1.4.0",
+ "readable-stream": "2.3.3",
+ "rimraf": "2.6.2",
+ "tar": "2.2.1",
+ "uid-number": "0.0.6"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ }
+ },
+ "webcomponents.js": {
+ "version": "https://registry.npmjs.org/webcomponents.js/-/webcomponents.js-0.7.24.tgz",
+ "integrity": "sha1-IRb7+hRo7EFqe+/aozPh0Rj2nAQ="
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ }
+ }
+}
diff --git a/rpg-docs/package.json b/rpg-docs/package.json
index 6ba0ccca..095987f2 100644
--- a/rpg-docs/package.json
+++ b/rpg-docs/package.json
@@ -13,7 +13,8 @@
"dependencies": {
"@polymer/polymer": "^1.2.5-npm-test.2",
"babel-runtime": "^6.23.0",
- "bcrypt": "^1.0.2",
- "bower": "^1.7.9"
+ "bcrypt": "^1.0.3",
+ "bower": "^1.7.9",
+ "core-js": "^2.5.1"
}
}
diff --git a/rpg-docs/public/custom_components/paper-stepper/animations/fade-in-slide-from-left-animation.html b/rpg-docs/public/custom_components/paper-stepper/animations/fade-in-slide-from-left-animation.html
new file mode 100644
index 00000000..860a4381
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/animations/fade-in-slide-from-left-animation.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/animations/fade-in-slide-from-right-animation.html b/rpg-docs/public/custom_components/paper-stepper/animations/fade-in-slide-from-right-animation.html
new file mode 100644
index 00000000..03998381
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/animations/fade-in-slide-from-right-animation.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/animations/fade-out-slide-left-animation.html b/rpg-docs/public/custom_components/paper-stepper/animations/fade-out-slide-left-animation.html
new file mode 100644
index 00000000..48f48ea5
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/animations/fade-out-slide-left-animation.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/animations/fade-out-slide-right-animation.html b/rpg-docs/public/custom_components/paper-stepper/animations/fade-out-slide-right-animation.html
new file mode 100644
index 00000000..90ffd990
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/animations/fade-out-slide-right-animation.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/bower.json b/rpg-docs/public/custom_components/paper-stepper/bower.json
new file mode 100644
index 00000000..1b410d4e
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/bower.json
@@ -0,0 +1,48 @@
+{
+ "name": "paper-stepper",
+ "version": "2.0-beta.5",
+ "authors": [
+ "Zecat
"
+ ],
+ "description": "Material paper-stepper element.",
+ "keywords": [
+ "web-component",
+ "polymer",
+ "seed"
+ ],
+ "main": "paper-stepper.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/zecat/paper-stepper/",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.2.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.11",
+ "iron-icons": "PolymerElements/iron-icons#^1.1.3",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.4",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.5",
+ "iron-selector": "PolymerElements/iron-selector#^1.3.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.8",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.3.1",
+ "neon-animation": "PolymerElements/neon-animation#^1.1.1",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.5",
+ "iron-collapse": "PolymerElements/iron-collapse#^1.2.0"
+ },
+ "devDependencies": {
+ "paper-input": "PolymerElements/paper-input#^1.1.10",
+ "paper-material": "PolymerElements/paper-material#^1.0.6",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "web-component-tester": "*",
+ "iron-form": "PolymerElements/iron-form#^1.0.16",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.2",
+ "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.2.0",
+ "app-layout": "PolymerElements/app-layout#^0.10.2",
+ "paper-menu": "PolymerElements/paper-menu#^1.2.2",
+ "iron-scroll-spy": "Zecat/iron-scroll-spy#^2.1.0",
+ "paper-item": "PolymerElements/paper-item#^1.2.1",
+ "paper-toast": "PolymerElements/paper-toast#^1.3.0",
+ "paper-checkbox": "PolymerElements/paper-checkbox#^1.4.0"
+ }
+}
diff --git a/rpg-docs/public/custom_components/paper-stepper/hero.svg b/rpg-docs/public/custom_components/paper-stepper/hero.svg
new file mode 100644
index 00000000..3e1081d1
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/hero.svg
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/paper-step.html b/rpg-docs/public/custom_components/paper-stepper/paper-step.html
new file mode 100644
index 00000000..fba7e5e7
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/paper-step.html
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/paper-stepper.html b/rpg-docs/public/custom_components/paper-stepper/paper-stepper.html
new file mode 100644
index 00000000..c00c4fd7
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/paper-stepper.html
@@ -0,0 +1,735 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/step-horizontal-label.html b/rpg-docs/public/custom_components/paper-stepper/step-horizontal-label.html
new file mode 100644
index 00000000..04907f41
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/step-horizontal-label.html
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [[label]]
+
+ [[stepperData.optionalText]]
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/step-label-behavior.html b/rpg-docs/public/custom_components/paper-stepper/step-label-behavior.html
new file mode 100644
index 00000000..ed995ee7
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/step-label-behavior.html
@@ -0,0 +1,58 @@
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/step-label-shared-styles.html b/rpg-docs/public/custom_components/paper-stepper/step-label-shared-styles.html
new file mode 100644
index 00000000..4a1e1d60
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/step-label-shared-styles.html
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rpg-docs/public/custom_components/paper-stepper/step-vertical.html b/rpg-docs/public/custom_components/paper-stepper/step-vertical.html
new file mode 100644
index 00000000..9eb8530b
--- /dev/null
+++ b/rpg-docs/public/custom_components/paper-stepper/step-vertical.html
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [[label]]
+
+ [[stepperData.optionalText]]
+
+
+
+
+
+
+
+
+
+
diff --git a/rpg-docs/server/publications/characterList.js b/rpg-docs/server/publications/characterList.js
index a33dd71d..cfabd4c4 100644
--- a/rpg-docs/server/publications/characterList.js
+++ b/rpg-docs/server/publications/characterList.js
@@ -25,3 +25,10 @@ Meteor.publish("characterList", function(){
Parties.find({owner: userId}),
];
});
+
+DDPRateLimiter.addRule({
+ name: "characterList",
+ type: "subscription",
+ userId(){ return true; },
+ connectionId(){ return true; },
+}, 8, 5000);
diff --git a/rpg-docs/server/publications/singleCharacter.js b/rpg-docs/server/publications/singleCharacter.js
index 771375b6..32e6f6a6 100644
--- a/rpg-docs/server/publications/singleCharacter.js
+++ b/rpg-docs/server/publications/singleCharacter.js
@@ -35,9 +35,16 @@ Meteor.publish("singleCharacter", function(characterId){
}
});
+DDPRateLimiter.addRule({
+ name: "singleCharacter",
+ type: "subscription",
+ userId(){ return true; },
+ connectionId(){ return true; },
+}, 8, 5000);
+
Meteor.publish("singleCharacterName", function(characterId){
userId = this.userId;
- var char = Characters.findOne({
+ return Characters.find({
_id: characterId,
$or: [
{readers: userId},
@@ -45,8 +52,7 @@ Meteor.publish("singleCharacterName", function(characterId){
{owner: userId},
{"settings.viewPermission": "public"},
],
+ }, {
+ fields:{"name": 1}
});
- if (char) {
- return Characters.find(characterId, {fields:{"name": 1}});
- }
-});
\ No newline at end of file
+});
diff --git a/rpg-docs/server/publications/user.js b/rpg-docs/server/publications/user.js
index 373fd5f9..ceb648ff 100644
--- a/rpg-docs/server/publications/user.js
+++ b/rpg-docs/server/publications/user.js
@@ -1,3 +1,8 @@
Meteor.publish("user", function(){
- return Meteor.users.find(this.userId, {fields: {roles: 1}});
+ return Meteor.users.find(this.userId, {fields: {
+ roles: 1,
+ username: 1,
+ profile: 1,
+ apiKey: 1,
+ }});
});