From 883a9175e11719ae51c7149c5c58cf187cb2911c Mon Sep 17 00:00:00 2001 From: Elvanos Date: Thu, 6 May 2021 23:35:08 +0200 Subject: [PATCH] 0.1.7 - Added reveresed lists and stats --- src/components/fields/Field_List.vue | 322 ++++++++++++-- .../fields/Field_MultiRelationship.vue | 1 + .../fields/Field_SingleRelationship.vue | 1 + src/css/app.scss | 1 + src/interfaces/I_Blueprint.ts | 6 +- .../databaseManager/blueprints/characters.ts | 420 ++++++++++++++++++ suggestionList.md | 26 +- 7 files changed, 730 insertions(+), 47 deletions(-) diff --git a/src/components/fields/Field_List.vue b/src/components/fields/Field_List.vue index 9a37191..9c46064 100644 --- a/src/components/fields/Field_List.vue +++ b/src/components/fields/Field_List.vue @@ -39,7 +39,10 @@ v-for="(singleInput,index) in localInput" :key="index" > -
+
+ - - - -
- -
+ + + + +
+ > + + Remove + +
+
@@ -135,7 +300,7 @@ color="primary" :outline="isDarkMode" label="Add new" - @click="addNewInput" /> + @click="addNewInput()" />
@@ -200,13 +365,34 @@ export default class Field_List extends FieldBase { get hasExtraInput () { // @ts-ignore this.localExtraInput = this.inputDataBluePrint?.predefinedListExtras?.extraSelectValueList + this.filteredLocalExtraInput = extend(true, [], this.localExtraInput) + return this.inputDataBluePrint?.predefinedListExtras?.extraSelectValueList } + /** + * Determine if the input is reversed + */ + get isReversed () { + // @ts-ignore + return (this.inputDataBluePrint?.predefinedListExtras?.reverse) + } + /** * List of extra input values */ - localExtraInput:string[] = [] + localExtraInput:string[] | { + title: string, + values: string[] + } [] = [] + + /** + * List of extra input values - filtered + */ + filteredLocalExtraInput:string[] | { + title: string, + values: string[] + } [] = [] /** * Label for the extra input @@ -216,6 +402,59 @@ export default class Field_List extends FieldBase { return (this.inputDataBluePrint?.predefinedListExtras?.affix) || "" } + filterFn (val:string, update: (e: () => void) => void) { + if (val === "") { + update(() => { + this.filteredLocalExtraInput = this.localExtraInput + }) + return + } + + update(() => { + const needle = val.toLowerCase() + + const returnList: string[] | { + title: string, + values: string[] + } [] = [] + + const localListCopy: [] = extend(true, [], this.localExtraInput) + + localListCopy.forEach((value:string | { + title: string, + values: string[] + }) => { + // For strings + if (typeof value === "string" && value.toLowerCase().includes(needle)) { + // @ts-ignore + returnList.push(value) + } + + // For lists + if (typeof value !== "string") { + // If title matches + if (value.title.toLowerCase().includes(needle)) { + // @ts-ignore + returnList.push(value) + } + // Try matching child values + else { + const localFilteredSubvalues = value.values.filter(subValue => { + return subValue.toLowerCase().includes(needle) + }) + if (localFilteredSubvalues.length > 0) { + value.values = localFilteredSubvalues + // @ts-ignore + returnList.push(value) + } + } + } + }) + + this.filteredLocalExtraInput = returnList + }) + } + /** * Remove an existing row from the input list */ @@ -227,13 +466,15 @@ export default class Field_List extends FieldBase { /** * Adds new row to the input list */ - async addNewInput () { + async addNewInput (affixValue = "") { this.localInput.push({ value: "", - affix: "" + affix: affixValue }) - const targetRefStringNamer = `.listField_input${this.localInput.length - 1}_${this.inputDataBluePrint.id}` + const targetRefStringNamer = (!this.isReversed) + ? `.listField_input${this.localInput.length - 1}_${this.inputDataBluePrint.id}` + : `.listField_prefix${this.localInput.length - 1}_${this.inputDataBluePrint.id}` await this.$nextTick() @@ -288,6 +529,23 @@ export default class Field_List extends FieldBase { return returnValue } + + async assignOptionGroupValues (categoryTitle: string, callerIndex: number) { + const targetCategory:{ + title: string, + values: string[] + } = this.localExtraInput + // @ts-ignore + .find((e: {title: string}) => e.title === categoryTitle) + + for (const value of targetCategory.values) { + await this.addNewInput(value) + } + + if (this.localInput[callerIndex].value === "" && this.localInput[callerIndex].affix === "") { + this.removeFromList(callerIndex) + } + } } @@ -310,4 +568,8 @@ export default class Field_List extends FieldBase { } } +.list_specialItem { + display: flex; + align-items: center; +} diff --git a/src/components/fields/Field_MultiRelationship.vue b/src/components/fields/Field_MultiRelationship.vue index 7ab0f32..3862ca9 100644 --- a/src/components/fields/Field_MultiRelationship.vue +++ b/src/components/fields/Field_MultiRelationship.vue @@ -418,6 +418,7 @@ label="Note" v-model="singleNote.value" dense + autogrow @keydown="processInput()" :outlined="!isDarkMode" :filled="isDarkMode" diff --git a/src/components/fields/Field_SingleRelationship.vue b/src/components/fields/Field_SingleRelationship.vue index 878ff03..999a2da 100644 --- a/src/components/fields/Field_SingleRelationship.vue +++ b/src/components/fields/Field_SingleRelationship.vue @@ -369,6 +369,7 @@ label="Note" v-model="inputNote.value" dense + autogrow @keydown="processInput" :outlined="!isDarkMode" :filled="isDarkMode" diff --git a/src/css/app.scss b/src/css/app.scss index 636f2b8..9c5000b 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -435,6 +435,7 @@ body .q-tooltip { color: $dark; font-size: 13px; font-weight: 600; + z-index: 999999999 !important; } .q-markdown { diff --git a/src/interfaces/I_Blueprint.ts b/src/interfaces/I_Blueprint.ts index 8ee05c9..9ad3274 100644 --- a/src/interfaces/I_Blueprint.ts +++ b/src/interfaces/I_Blueprint.ts @@ -23,8 +23,12 @@ export interface I_ExtraFields { "tags" predefinedListExtras?: { + reverse?: boolean affix?: string - extraSelectValueList?: string[] + extraSelectValueList?: (string | { + title: string, + values: string[] + }) [] } predefinedSelectValues?: string[] relationshipSettings?: { diff --git a/src/scripts/databaseManager/blueprints/characters.ts b/src/scripts/databaseManager/blueprints/characters.ts index 45ba5fb..676afc2 100644 --- a/src/scripts/databaseManager/blueprints/characters.ts +++ b/src/scripts/databaseManager/blueprints/characters.ts @@ -194,6 +194,425 @@ export const charactersBlueprint: I_Blueprint = { icon: "mdi-weight", sizing: 3 }, + { + id: "statsList", + name: "Stats/Attributes", + type: "list", + icon: "mdi-sword-cross", + sizing: 12, + predefinedListExtras: { + reverse: true, + affix: "Stat/Attribute", + extraSelectValueList: [ + { + title: "Dungeons & Dragons (5th edition)", + values: [ + "Strength", + "Dexterity", + "Constitution", + "Intelligence", + "Wisdom", + "Charisma" + ] + }, + { + title: "Dungeons & Dragons - Expanded (5th edition)", + values: [ + "Hit points", + "Maximum hit points", + "Temporary points", + "Armor class", + "Innitiative", + "Piety", + "Renown", + "Proficiency bonus" + ] + }, + { + title: "Dungeons & Dragons - Travel speeds (5th edition)", + values: [ + "Movement speed", + "Fly speed", + "Swim speed", + "Climb speed" + ] + }, + { + title: "Dungeons & Dragons - Saving throws (5th edition)", + values: [ + "Strength (saving)", + "Dexterity (saving)", + "Constitution (saving)", + "Intelligence (saving)", + "Wisdom (saving)", + "Charisma (saving)" + ] + }, + { + title: "Mass Effect (D20, 5e)", + values: [ + "Strenght", + "Dexterity", + "Constitution", + "Intelligence ", + "Wisdom", + "Charisma", + "Defense (total)", + "Defense (size) ", + "Defense (cover) ", + "Shield/Shields ", + "Plating", + "Reduction ", + "Size", + "Age ", + "Level/Class Level ", + "Paragon ", + "Renegade ", + "Power", + "Biotics", + "Biotic Points ", + "Tech Points ", + "Attack (bab/base Attack) ", + "Rank ", + "Ranks ", + "Modifier", + "Mod ", + "Ability Modifier", + "Misc Modifier ", + "Bonus ", + "Total Bonus", + "Attack", + "Attack Bonus ", + "Action ", + "Range", + "Ammunition", + "Damage ", + "Critical ", + "Recoil", + "Armor ", + "Armor Special Qualities ", + "Head ", + "Shoulders", + "Arms", + "Chest ", + "Legs ", + "Others ", + "Cost", + "Thermal Clips ", + "Heat", + "Medi-Gel", + "Grenades", + "Repair Kits", + "Dc", + "Maintenance ", + "Cooldown", + "Activation", + "Load/Carry Capaccity (light) ", + "Load/Carry Capaccity (medium) ", + "Load/Carry Capaccity (heavy) ", + "Amount ", + "Credits" + ] + }, + { + title: "Vampire: Masquerade (5th edition, World of Darkness)", + values: [ + "Strength", + "Dexterity", + "Stamina", + "Charisma", + "Manipulation", + "Composure", + "Intelligence", + "Wits", + "Resolve", + "Health", + "Willpower", + "Humanity" + ] + }, + { + title: "Paranoia (Red Clearance)", + values: [ + "Violence", + "Brains", + "Chutzpah", + "Mechanics", + "Athletics", + "Guns", + "Melee", + "Throw", + "Science", + "Psychology", + "Bureaucracy", + "Alpha Complex", + "Bluff", + "Charm", + "Intimdate", + "Stealth", + "Operate", + "Engineer", + "Program", + "Demolitions" + ] + }, + { + title: "Shadowrun (6th edition)", + values: [ + "Body", + "Agility", + "Reaction", + "Willpower", + "Intuition", + "Edge", + "Essence", + "Magic/Resonance", + "Initiative (matrix)", + "Initiative (astral)", + "Composure", + "Judge", + "Intentions", + "Memory", + "Lift/Carry", + "Movement", + "Dam", + "Damage", + "Acc", + "Accuracy", + "Ap", + "Action", + "Points", + "Rc", + "Ammo", + "Rating", + "Rtg", + "Nuyen", + "Funds", + "Currency" + ] + }, + { + title: "Fading Suns", + values: [ + "Body", + "Strength", + "Dexterity", + "Endurance", + "Mind", + "Wits", + "Perception", + "Tech", + "Spirit", + "Vitality", + "Wyrd", + "Charm", + "Dodge", + "Fight", + "Impress", + "Melee", + "Observe", + "Shoot", + "Sneak", + "Vigor" + ] + }, + { + title: "Cyberpunk (RED)", + values: [ + "Intelligence", + "Willpower", + "Cool", + "Empathy", + "Technique", + "Reflexes", + "Luck", + "Body", + "Dexterity", + "Movement" + ] + }, + { + title: "Mutant: Year Zero", + values: [ + "Strength", + "Agility", + "Wits", + "Empathy", + "Damage", + "Fatigue", + "Confusion", + "Doubt" + ] + }, + { + title: "GURPS (3rd & 4th edition)", + values: [ + "Strength", + "Agility", + "Wits", + "Empathy", + "Damage", + "Fatigue", + "Confusion", + "Doubt" + ] + }, + { + title: "7th Sea (2nd edition)", + values: [ + "Brawn", + "Finesse", + "Resolve", + "Wits", + "Panache" + ] + }, + { + title: "7th Sea - Villain (2nd edition)", + values: [ + "Strength", + "Influence" + ] + }, + { + title: "Apocalypse World (2nd edition, Powered by the Apocalypse)", + values: [ + "Cool", + "Hard", + "Hot", + "Sharp", + "Weird", + "HX" + ] + }, + { + title: "Dresden Files RPG", + values: [ + "Alertness", + "Athletics", + "Burglary", + "Contacts", + "Conviction", + "Craftsmanship", + "Deceit", + "Discipline", + "Driving", + "Empathy", + "Endurance", + "Fists", + "Guns", + "Intimidation", + "Investigation", + "Lore", + "Might", + "Performance", + "Presence", + "Rapport", + "Resources", + "Scholarship", + "Stealth", + "Survival", + "Weapons" + ] + }, + { + title: "Traveller (2nd edition)", + values: [ + "Strength", + "Dexterity", + "Endurace", + "Intelligence", + "Education", + "Social", + "Standing" + ] + }, + { + title: "Cypher System", + values: [ + "Intellect", + "Might", + "Speed" + ] + }, + { + title: "Blades in the Dark", + values: [ + "Attune", + "Command", + "Consort", + "Finesse", + "Hunt", + "Prowl", + "Skirmish", + "Study", + "Survey", + "Sway", + "Tinker", + "Wreck", + "Insight", + "Prowess", + "Tesolve" + ] + }, + "Absorption", + "Alertness", + "Attack", + "Avoidance", + "Awareness", + "Block", + "Brawn", + "Cautiousness", + "Chance", + "Damage", + "Defense", + "Deftness", + "Dodge", + "Ego", + "Endurance", + "Energy", + "Evasion", + "Fate", + "Fatigue", + "Finesse", + "Fortitude", + "Honor", + "Hit Points (HP)", + "Immunity", + "Level", + "Magic", + "Mana", + "Mana Points (MP)", + "Might", + "Mind", + "Morale", + "Parry", + "Personality", + "Precision", + "Presence", + "Psyche", + "Quickness", + "Rank", + "Rate", + "Recovery", + "Reduction", + "Reflexes", + "Resistence", + "Sanity", + "Sense", + "Soul", + "Speed", + "Spellpower", + "Spirit", + "Stamina", + "Swiftness", + "Tier", + "Vitality", + "Willpower", + "Wits" + ] + } + }, { id: "strength", name: "Strength", @@ -538,6 +957,7 @@ export const charactersBlueprint: I_Blueprint = { "Erratic", "Escapist", "Esthetic", + "Evil", "Excitable", "Exciting", "Expedient", diff --git a/suggestionList.md b/suggestionList.md index 02d950b..526ad9f 100644 --- a/suggestionList.md +++ b/suggestionList.md @@ -1,5 +1,9 @@ ## THE GM BATCH +- Add more stat systems +- Add stats to items (and anywhere else they might be needed) +- Add automatic-stats fixer to the repair tool from older versions + - Add hover/on-demand document preview to relationships - Export for MD/PDF/ODT/DOCX @@ -8,18 +12,13 @@ ## THE GM BATCH END -- Add reverse list field option (dropdown first, value in bracket) -- Rework stats (via reverse list) -- Add option for project graph to filter out categories or show them separately - Add HTML webcolor cheatsheet in floating window (look for JSON of them somewhere?) - Word count for editor fields - Try to get field titles to show in full-screen edit of text editor fields - List of last saved documents on project overview -- Consider adding some kind of "Follower name" to different group types -- Consider reworking the save document mechanic (save doesnt close, open/exit edit mode instead) - Add color support (text and background) to view and edit mode of document display -- Add a toggle option for it (default off) + - Add a toggle option for it (default off) - Mass tag rename/deletion (done via document saving!) - Context menu for tags @@ -27,22 +26,17 @@ - Add new document type under tag - Delete tag (unsets for all docs) - Rename tag (resaves all docs with new tag) - -- Add "Predecessors", "Successors", "Date of start", "Date of end" and "How long it lasted" fields to locations and all other groups - -- Add advanced search capabilities to the hierarchical tree - - "Save all" keybind and "Save all and exit" option on the exiting -- Add "Open all search matches" button in the Quick-search that opens a new page with a list of items -- Allow showing of document types under tags +- Consider adding color support for text shadow of individual documents - Add description tabs +- Add option for project graph to filter out categories or show them separately + +- Add "Predecessors", "Successors", "Date of start", "Date of end" and "How long it lasted" fields to locations and all other groups - Add category for materials/resources OR adapt Items category - Add category for diseases/curses/etc - Add category for classes/jobs -- Add support for individual document order hiding inside the hierarchical tree for each document -- Consider adding color support for text shadow of individual documents -- Consider adding coloring to icons of documents separately +- Add advanced search capabilities to the hierarchical tree ### Project settings