mirror of
https://github.com/Elvanos/fantasia-archive.git
synced 2024-06-29 03:20:54 +12:00
0.1.5 - further updates and tweaks, auto scrolling on document, added mascot, added instant edit mode for docs
This commit is contained in:
parent
a31a4e300d
commit
1c563a5511
16
src/App.vue
16
src/App.vue
|
@ -15,6 +15,7 @@ import { OptionsStateInteface } from "./store/module-options/state"
|
|||
import { colors } from "quasar"
|
||||
import { tipsTricks } from "src/scripts/utilities/tipsTricks"
|
||||
import { shell } from "electron"
|
||||
import { summonAllPlusheForms } from "src/scripts/utilities/plusheMascot"
|
||||
|
||||
@Component({
|
||||
components: {
|
||||
|
@ -94,12 +95,14 @@ export default class App extends BaseClass {
|
|||
}
|
||||
|
||||
const messageToShow = tipsTricks[Math.floor(Math.random() * tipsTricks.length)]
|
||||
|
||||
const plusheForm = summonAllPlusheForms[Math.floor(Math.random() * summonAllPlusheForms.length)]
|
||||
this.starupNotif = this.$q.notify({
|
||||
|
||||
timeout: 15000,
|
||||
icon: "mdi-help",
|
||||
type: "info",
|
||||
icon: (this.hidePlushes) ? "mdi-help" : undefined,
|
||||
color: "info",
|
||||
message: "Did you know?",
|
||||
avatar: (!this.hidePlushes) ? plusheForm : undefined,
|
||||
caption: messageToShow,
|
||||
actions: [{ icon: "mdi-close", color: "white" }]
|
||||
})
|
||||
|
@ -226,6 +229,8 @@ export default class App extends BaseClass {
|
|||
@Watch("SGET_options", { deep: true })
|
||||
onSettingsChange () {
|
||||
const options = this.SGET_options
|
||||
|
||||
this.hidePlushes = options.hidePlushes
|
||||
this.$q.dark.set(options.darkMode)
|
||||
if (options.darkMode) {
|
||||
colors.setBrand("dark", "#1b333e")
|
||||
|
@ -236,5 +241,10 @@ export default class App extends BaseClass {
|
|||
colors.setBrand("primary", "#e8bb50")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the mascot... nooo :(
|
||||
*/
|
||||
hidePlushes = false
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -252,6 +252,23 @@ export default class BaseClass extends Vue {
|
|||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a new route for an already existing object
|
||||
* @param existingObject An already existing object passed in
|
||||
*/
|
||||
openExistingDocumentRouteWithEdit (existingObject:I_OpenedDocument | I_FieldRelationship) {
|
||||
this.$router.push({
|
||||
path: existingObject.url,
|
||||
query: { editMode: "editMode" }
|
||||
}).catch((e: {name: string}) => {
|
||||
const errorName : string = e.name
|
||||
if (errorName === "NavigationDuplicated") {
|
||||
return
|
||||
}
|
||||
console.log(e)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a new route for an already existing object
|
||||
* @param existingObject An already existing object passed in
|
||||
|
|
BIN
src/assets/fantasiaPlushe/fantasia_didYouKnow.png
Normal file
BIN
src/assets/fantasiaPlushe/fantasia_didYouKnow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 MiB |
BIN
src/assets/fantasiaPlushe/fantasia_flop.png
Normal file
BIN
src/assets/fantasiaPlushe/fantasia_flop.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
BIN
src/assets/fantasiaPlushe/fantasia_hug.png
Normal file
BIN
src/assets/fantasiaPlushe/fantasia_hug.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
BIN
src/assets/fantasiaPlushe/fantasia_reading.png
Normal file
BIN
src/assets/fantasiaPlushe/fantasia_reading.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 MiB |
|
@ -110,7 +110,25 @@
|
|||
<div class="treeButtonGroup">
|
||||
<q-btn
|
||||
tabindex="-1"
|
||||
v-if="prop.node.children && prop.node.children.length > 0 && !prop.node.isRoot && !prop.node.isTag"
|
||||
v-if="((prop.node.children && prop.node.children.length > 0) || !hideTreeExtraIcons) && !prop.node.isRoot && !prop.node.isTag && !hideTreeIconView && !prop.node.specialLabel"
|
||||
round
|
||||
flat
|
||||
dense
|
||||
color="dark"
|
||||
class="z-1 q-ml-sm treeButton treeButton--edit"
|
||||
icon="mdi-book-open-page-variant-outline"
|
||||
size="10px"
|
||||
@click.stop.prevent="openExistingDocumentRoute(prop.node)"
|
||||
>
|
||||
<q-tooltip
|
||||
:delay="300"
|
||||
>
|
||||
Open {{ prop.node.label }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn
|
||||
tabindex="-1"
|
||||
v-if="!prop.node.isRoot && !prop.node.isTag && !hideTreeIconEdit && !prop.node.specialLabel"
|
||||
round
|
||||
flat
|
||||
dense
|
||||
|
@ -118,17 +136,17 @@
|
|||
class="z-1 q-ml-sm treeButton treeButton--edit"
|
||||
icon="mdi-pencil"
|
||||
size="10px"
|
||||
@click.stop.prevent="openExistingDocumentRoute(prop.node)"
|
||||
@click.stop.prevent="openExistingDocumentRouteWithEdit(prop.node)"
|
||||
>
|
||||
<q-tooltip
|
||||
:delay="300"
|
||||
>
|
||||
Open/Edit {{ prop.node.label }}
|
||||
Edit {{ prop.node.label }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn
|
||||
tabindex="-1"
|
||||
v-if="(!prop.node.specialLabel && !prop.node.isRoot) && !prop.node.isTag"
|
||||
v-if="!prop.node.specialLabel && !prop.node.isRoot && !prop.node.isTag && !hideTreeIconAddUnder"
|
||||
round
|
||||
flat
|
||||
dense
|
||||
|
@ -154,13 +172,13 @@
|
|||
|
||||
<template v-if="prop.node.isRoot || prop.node.children.length > 0">
|
||||
<q-item clickable v-close-popup @click="recursivelyExpandNodeDownwards(prop.node.key)">
|
||||
<q-item-section>Expand all</q-item-section>
|
||||
<q-item-section>Expand all under this node</q-item-section>
|
||||
<q-item-section avatar>
|
||||
<q-icon name="mdi-expand-all-outline" />
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item clickable v-close-popup @click="collapseAllNodesForce(prop.node)">
|
||||
<q-item-section>Collapse all</q-item-section>
|
||||
<q-item-section>Collapse all under this node</q-item-section>
|
||||
<q-item-section avatar>
|
||||
<q-icon name="mdi-collapse-all-outline" />
|
||||
</q-item-section>
|
||||
|
@ -200,6 +218,12 @@
|
|||
<q-separator />
|
||||
<q-item clickable v-close-popup @click="openExistingDocumentRoute(prop.node)">
|
||||
<q-item-section>Open document</q-item-section>
|
||||
<q-item-section avatar>
|
||||
<q-icon name="mdi-book-open-page-variant-outline" />
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item clickable v-close-popup @click="openExistingDocumentRouteWithEdit(prop.node)">
|
||||
<q-item-section>Edit document</q-item-section>
|
||||
<q-item-section avatar>
|
||||
<q-icon name="mdi-pencil" />
|
||||
</q-item-section>
|
||||
|
@ -333,6 +357,10 @@ export default class ObjectTree extends BaseClass {
|
|||
doubleDashDocCount = false
|
||||
hideDeadCrossThrough = false
|
||||
hideTreeOrderNumbers = false
|
||||
hideTreeExtraIcons = false
|
||||
hideTreeIconAddUnder = false
|
||||
hideTreeIconEdit = false
|
||||
hideTreeIconView = false
|
||||
|
||||
@Watch("SGET_options", { immediate: true, deep: true })
|
||||
onSettingsChange () {
|
||||
|
@ -351,7 +379,10 @@ export default class ObjectTree extends BaseClass {
|
|||
this.doubleDashDocCount = options.doubleDashDocCount
|
||||
this.hideDeadCrossThrough = options.hideDeadCrossThrough
|
||||
this.hideTreeOrderNumbers = options.hideTreeOrderNumbers
|
||||
|
||||
this.hideTreeExtraIcons = options.hideTreeExtraIcons
|
||||
this.hideTreeIconAddUnder = options.hideTreeIconAddUnder
|
||||
this.hideTreeIconEdit = options.hideTreeIconEdit
|
||||
this.hideTreeIconView = options.hideTreeIconView
|
||||
this.buildCurrentObjectTree().catch((e) => {
|
||||
console.log(e)
|
||||
})
|
||||
|
|
|
@ -21,7 +21,11 @@
|
|||
style="width: 100%;"
|
||||
|
||||
>
|
||||
<q-tab name="uiSettings" label="Visuals & Functionality" />
|
||||
<q-tab name="uiSettings" label="Visuals & Accessibility" />
|
||||
<q-tab name="docSettings" label="Document view/edit" />
|
||||
<q-tab name="popupSettings" label="Popup dialogs" />
|
||||
<q-tab name="treeSettings" label="Hierarchical tree" />
|
||||
|
||||
<q-separator dark />
|
||||
|
||||
<q-tab name="keybinds" label="Keybinds" />
|
||||
|
@ -52,7 +56,13 @@
|
|||
|
||||
<div class="col-12">
|
||||
<div class="text-h6">
|
||||
Program looks & Accessibility
|
||||
Visuals & Accessibility
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Visuals
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -71,6 +81,12 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Accessibility
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Accessibility - Text shadow
|
||||
|
@ -116,6 +132,12 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Application extras
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide Welcome screen social links
|
||||
|
@ -161,13 +183,48 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide Fantasia mascot
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Hides the amazingly adorable and awesome Fantasia, the tiny arcane dragon.
|
||||
<br>
|
||||
How could you! :(
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.hidePlushes"
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</q-scroll-area>
|
||||
</q-tab-panel>
|
||||
|
||||
<q-tab-panel name="docSettings" dark class="q-pt-sm">
|
||||
<q-scroll-area
|
||||
class="programSettingsScrollArea"
|
||||
visible
|
||||
dark
|
||||
:thumb-style="thumbStyle"
|
||||
>
|
||||
<div class="row justify-start">
|
||||
<div class="col-12">
|
||||
<div class="text-h6 q-mt-lg">
|
||||
Document view settings
|
||||
<div class="text-h6">
|
||||
Document view/edit
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-3 optionWrapper">
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Document control bar
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Disable document control bar
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
|
@ -184,7 +241,7 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-3 optionWrapper">
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Disable document guides
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
|
@ -199,7 +256,13 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-3 optionWrapper">
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Document body
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Disable document tooltips
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
|
@ -214,7 +277,7 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-3 optionWrapper">
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide empty fields
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
|
@ -231,9 +294,63 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Prevent auto-scrolling
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Determines if the documents will recall their scroll distances and auto-scroll on switching ot not.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.preventAutoScroll"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</q-scroll-area>
|
||||
|
||||
</q-tab-panel>
|
||||
|
||||
<q-tab-panel name="popupSettings" dark class="q-pt-sm">
|
||||
<q-scroll-area
|
||||
class="programSettingsScrollArea"
|
||||
visible
|
||||
dark
|
||||
:thumb-style="thumbStyle"
|
||||
>
|
||||
<div class="row justify-start">
|
||||
<div class="col-12">
|
||||
<div class="text-h6 q-mt-lg">
|
||||
Quick-search & Quick-add popups
|
||||
<div class="text-h6">
|
||||
Popup dialogs
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Universal dialog settings
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Close quick popups with same key
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
This allows for closing of the quick-search and quick-add popups with the same key combination that was used to open them to begin with.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.allowQuickPopupSameKeyClose"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Quick-Seach dialog
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -271,24 +388,78 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</q-scroll-area>
|
||||
</q-tab-panel>
|
||||
|
||||
<q-tab-panel name="treeSettings" dark class="q-pt-sm">
|
||||
<q-scroll-area
|
||||
class="programSettingsScrollArea"
|
||||
visible
|
||||
dark
|
||||
:thumb-style="thumbStyle"
|
||||
>
|
||||
<div class="row justify-start">
|
||||
<div class="col-12">
|
||||
<div class="text-h6">
|
||||
Hierarchical tree
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Tag settings
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Close quick popups with same key
|
||||
Hide tags in tree
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
This allows for closing of the quick-search and quick-add popups with the same key combination that was used to open them to begin with.
|
||||
Determines if the tags show in the hierarchical tree at all
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.allowQuickPopupSameKeyClose"
|
||||
<q-toggle
|
||||
v-model="options.noTags"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Top tags in tree
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Show tags at the top of the hierarchical tree
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.tagsAtTop"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Compact tags
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Determine if the tags should be shown as individual categories or they should show as one big category with each tag as a subcategory.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.compactTags"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-h6 q-mt-lg">
|
||||
Hierarchy tree
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Tree behavior
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -339,6 +510,12 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Information display settings
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide document count entirely
|
||||
|
@ -384,51 +561,6 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide tags in tree
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Determines if the tags show in the hierarchical tree at all
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.noTags"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Top tags in tree
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Show tags at the top of the hierarchical tree
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.tagsAtTop"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Compact tags
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
Determine if the tags should be shown as individual categories or they should show as one big category with each tag as a subcategory.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.compactTags"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide order numbers
|
||||
|
@ -444,8 +576,75 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="text-bold q-mt-xl">
|
||||
Icon settings
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide extra icons
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
This option hides icons that are normally shown for convinience, but don't actually add any functiuonality.
|
||||
<br>
|
||||
For example the "Open document" icon next to document with no children nodes that can just as well opened with a normal left click instead of clicking on the icon.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.hideTreeExtraIcons"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide "Add under" icon
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
This option hides the "Add a new document belonging under XY" icon.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.hideTreeIconAddUnder"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide "Edit" icon
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
This option hides the "Edit XY" icon.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.hideTreeIconEdit"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-4 optionWrapper">
|
||||
<div class="optionTitle">
|
||||
Hide "Open" icon
|
||||
<q-icon name="mdi-help-circle" size="16px" class="q-ml-md">
|
||||
<q-tooltip :delay="500">
|
||||
This option hides the "Open XY" icon.
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</div>
|
||||
|
||||
<q-toggle
|
||||
v-model="options.hideTreeIconView"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</q-scroll-area>
|
||||
</q-scroll-area>
|
||||
</q-tab-panel>
|
||||
|
||||
<q-tab-panel name="keybinds" dark>
|
||||
|
@ -683,9 +882,11 @@ export default class ProgramSettings extends DialogBase {
|
|||
options: OptionsStateInteface = {
|
||||
_id: "settings",
|
||||
darkMode: false,
|
||||
preventAutoScroll: false,
|
||||
textShadow: false,
|
||||
doubleDashDocCount: false,
|
||||
hideDeadCrossThrough: false,
|
||||
hidePlushes: false,
|
||||
tagsAtTop: false,
|
||||
noTags: false,
|
||||
compactTags: false,
|
||||
|
@ -706,6 +907,10 @@ export default class ProgramSettings extends DialogBase {
|
|||
hideTooltipsStart: false,
|
||||
hideTooltipsProject: false,
|
||||
hideTreeOrderNumbers: false,
|
||||
hideTreeExtraIcons: false,
|
||||
hideTreeIconAddUnder: false,
|
||||
hideTreeIconEdit: false,
|
||||
hideTreeIconView: false,
|
||||
userKeybindList: []
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ a {
|
|||
}
|
||||
|
||||
.q-notification.bg-info {
|
||||
max-width: 500px;
|
||||
max-width: 550px;
|
||||
border: 2px solid var(--q-color-dark);
|
||||
color: var(--q-color-dark);
|
||||
|
||||
|
@ -203,6 +203,21 @@ a {
|
|||
}
|
||||
}
|
||||
|
||||
.q-notification__avatar {
|
||||
height: 135px;
|
||||
width: 135px;
|
||||
margin-right: 30px;
|
||||
flex-shrink: 0;
|
||||
border-radius: 0;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
|
||||
img {
|
||||
width: auto !important;
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
|
||||
.isDeadIndicator {
|
||||
margin-right: 5px;
|
||||
font-weight: 600;
|
||||
|
|
|
@ -43,22 +43,34 @@
|
|||
- New action for **Hiearachical Tree**
|
||||
- Add new document type: `DOCUMENT TYPE`
|
||||
- Only available in the root-categories
|
||||
- Expand all
|
||||
- Collapse all
|
||||
- Expand all under this nodd
|
||||
- Collapse all under this node
|
||||
- Copy name
|
||||
- Copy text color
|
||||
- Copy background color
|
||||
- Open document
|
||||
- Edit document
|
||||
- Create new document with this document as parent
|
||||
- Copy this document
|
||||
- Delete document
|
||||
- Added a special description field for categories that become visible only when the document is switches to the category mode
|
||||
- Added Fantasia mascot in the app! ^_^
|
||||
- Different document tabs now keep scroll distance and resume wherever you left them at
|
||||
- Added support for default empty keybinds
|
||||
- Added a dedicated button that opens the connected documents straight from the little chips in relationship fields while in edit mode
|
||||
- Added support for background color for documents
|
||||
- Added support for "Minor document" mode switch for better organization and visual representation of documents
|
||||
- Added support for "Dead/Gone/Destroyed" mode switch for better organization and visual representation of documents
|
||||
- Added trivia concerning Fantasia mascot
|
||||
- Added support for direct opening of documents in edit mode from the hierarchy tree without needing to open the document in view mode first
|
||||
- Added option: Hide Fantasia mascot
|
||||
- Added option: Accessibility - Hide strike-through
|
||||
- Added option: Accessibility - Hide order numbers
|
||||
- Added option: Hide extra icons
|
||||
- Added option: Hide "Add under" icon
|
||||
- Added option: Hide "Edit" icon
|
||||
- Added option: Hide "Open" icon
|
||||
- Added option: Prevent auto-scrolling
|
||||
- Added functionality to copy existing documents along with all their contents
|
||||
- Added keybind: Close all tabs without changes except for this
|
||||
- Added keybind: Close all tabs without changes
|
||||
|
@ -71,6 +83,7 @@
|
|||
- Changed focusing of the hierarchy tree search input from CTRL + SHIFT + W to CTRL + SHIFT +T
|
||||
- Updated fullscreen editor looks to work more like a proper document editor
|
||||
- Unified icons for same actions across the app
|
||||
- Program settings have been separated into multiple tabs and sub-groups in order to be actually possible to navigate effectively
|
||||
- Reordered the basic document settings inside the app and separated them from the document content
|
||||
- Adjusted maximum width of switch fields to make them look like spaggeti
|
||||
- Updated the Advanced search guide with new additions and added one new Trivia popup text concerning it
|
||||
|
|
|
@ -13,6 +13,7 @@ export interface I_OpenedDocument{
|
|||
hasEdits: boolean
|
||||
isNew: boolean
|
||||
url: string
|
||||
scrollDistance?: number
|
||||
extraFields: I_ExtraDocumentFields[]
|
||||
}
|
||||
|
||||
|
|
|
@ -302,8 +302,14 @@ export default class PageDocumentDisplay extends BaseClass {
|
|||
this.disableDocumentControlBar = options.disableDocumentControlBar
|
||||
this.isDarkMode = options.darkMode
|
||||
this.hideEmptyFields = options.hideEmptyFields
|
||||
this.preventAutoScroll = options.preventAutoScroll
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the documents will recall their scroll distances and auto-scroll on switching ot not.
|
||||
*/
|
||||
preventAutoScroll = false
|
||||
|
||||
/**
|
||||
* Determines if the document control bar is show or hidden
|
||||
*/
|
||||
|
@ -357,12 +363,48 @@ export default class PageDocumentDisplay extends BaseClass {
|
|||
*/
|
||||
@Watch("$route", { immediate: true, deep: true })
|
||||
async onUrlChange () {
|
||||
window.removeEventListener("scroll", this.watchPageScroll)
|
||||
window.removeEventListener("scroll", this.watchPageScroll)
|
||||
window.removeEventListener("scroll", this.watchPageScroll)
|
||||
|
||||
await this.sleep(50)
|
||||
const doc = this.findRequestedOrActiveDocument() as I_OpenedDocument
|
||||
window.scrollTo({ top: 0, behavior: "auto" })
|
||||
|
||||
await this.reloadLocalContent().catch(e => console.log(e))
|
||||
|
||||
window.scrollTo({ top: 0, behavior: "auto" })
|
||||
const scrollTop = (doc.scrollDistance && !this.preventAutoScroll) ? doc.scrollDistance : 0
|
||||
|
||||
window.scrollTo({ top: scrollTop, behavior: "auto" })
|
||||
|
||||
window.removeEventListener("scroll", this.watchPageScroll)
|
||||
window.removeEventListener("scroll", this.watchPageScroll)
|
||||
window.removeEventListener("scroll", this.watchPageScroll)
|
||||
|
||||
window.addEventListener("scroll", this.watchPageScroll)
|
||||
}
|
||||
|
||||
decounceScrollTimer = false as any
|
||||
watchPageScroll () {
|
||||
if (this.preventAutoScroll) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this.decounceScrollTimer) {
|
||||
window.clearTimeout(this.decounceScrollTimer)
|
||||
}
|
||||
|
||||
this.decounceScrollTimer = window.setTimeout(() => {
|
||||
const currentScroll = window.scrollY
|
||||
|
||||
const dataCopy: I_OpenedDocument = extend(true, {}, this.findRequestedOrActiveDocument())
|
||||
|
||||
dataCopy.scrollDistance = currentScroll
|
||||
|
||||
// Attempts to add current document to list
|
||||
const dataPass = { doc: dataCopy, treeAction: false }
|
||||
this.SSET_updateOpenedDocument(dataPass)
|
||||
}, 200)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -431,6 +473,10 @@ export default class PageDocumentDisplay extends BaseClass {
|
|||
|
||||
this.currentData.extraFields = objectFields
|
||||
|
||||
if (this.$route.query?.editMode) {
|
||||
this.editMode = true
|
||||
}
|
||||
|
||||
const dataCopy: I_OpenedDocument = extend(true, {}, this.currentData)
|
||||
|
||||
// Attempts to add current document to list
|
||||
|
@ -732,7 +778,7 @@ export default class PageDocumentDisplay extends BaseClass {
|
|||
const isCategory = this.retrieveFieldValue(this.currentData, "categorySwitch")
|
||||
|
||||
const ignoredList = ["breakDocumentSettings", "name", "documentColor", "documentBackgroundColor", "parentDoc", "order", "categorySwitch", "minorSwitch", "deadSwitch", "tags"]
|
||||
return (!isCategory || ignoredList.includes(currentFieldID))
|
||||
return (((!isCategory && currentFieldID !== "categoryDescription") || ignoredList.includes(currentFieldID)) || (isCategory && currentFieldID === "categoryDescription"))
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -14,8 +14,17 @@
|
|||
<h2 class="mainProjectTitle"> {{projectName}}</h2>
|
||||
</div>
|
||||
<div class="hintWrapper" v-if="!hideTooltipsProject && allDocuments > 0">
|
||||
<div>
|
||||
<q-icon name="mdi-help" size="30px" class="q-mr-md" />
|
||||
|
||||
<div v-if="hidePlushes">
|
||||
<q-icon name="mdi-help" size="30px" class="q-mr-md" />
|
||||
</div>
|
||||
|
||||
<div class="mascotWrapper" v-if="!hidePlushes">
|
||||
<q-img
|
||||
:src="plusheForm"
|
||||
style="max-width: 135px; height: 100%;"
|
||||
contain
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-subtitle1 text-dark text-bold text-left">
|
||||
|
@ -117,6 +126,7 @@ import PouchDB from "pouchdb"
|
|||
import newDocumentDialog from "src/components/dialogs/NewDocument.vue"
|
||||
import { retrieveCurrentProjectName } from "src/scripts/projectManagement/projectManagent"
|
||||
import { tipsTricks } from "src/scripts/utilities/tipsTricks"
|
||||
import { summonAllPlusheForms } from "src/scripts/utilities/plusheMascot"
|
||||
|
||||
@Component({
|
||||
components: {
|
||||
|
@ -135,8 +145,14 @@ export default class ProjectScreen extends BaseClass {
|
|||
onSettingsChange () {
|
||||
const options = this.SGET_options
|
||||
this.hideTooltipsProject = options.hideTooltipsProject
|
||||
this.hidePlushes = options.hidePlushes
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the mascot... nooo :(
|
||||
*/
|
||||
hidePlushes = false
|
||||
|
||||
/**
|
||||
* Determines if the project screen help hint should show or not
|
||||
*/
|
||||
|
@ -155,6 +171,7 @@ export default class ProjectScreen extends BaseClass {
|
|||
Loading.hide()
|
||||
|
||||
this.tipTrickMessage = tipsTricks[Math.floor(Math.random() * tipsTricks.length)]
|
||||
this.plusheForm = summonAllPlusheForms[Math.floor(Math.random() * summonAllPlusheForms.length)]
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -167,6 +184,11 @@ export default class ProjectScreen extends BaseClass {
|
|||
*/
|
||||
tipTrickMessage = ""
|
||||
|
||||
/**
|
||||
* Current form the majestic Fantasia desided to take this fine day!
|
||||
*/
|
||||
plusheForm = ""
|
||||
|
||||
/****************************************************************/
|
||||
// GRAPH FUNCTIONALITY
|
||||
/****************************************************************/
|
||||
|
@ -369,6 +391,13 @@ export default class ProjectScreen extends BaseClass {
|
|||
|
||||
<style lang="scss">
|
||||
|
||||
.mascotWrapper {
|
||||
height: 135px;
|
||||
width: 135px;
|
||||
margin-right: 30px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.hintWrapper {
|
||||
max-width: 950px;
|
||||
display: flex;
|
||||
|
|
|
@ -120,13 +120,19 @@ export const chaptersBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
type: "break",
|
||||
sizing: 12
|
||||
},
|
||||
|
||||
{
|
||||
id: "content",
|
||||
name: "Chapter content",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const charactersBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const currenciesBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const eventsBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const itemsBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const languagesBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const locationsBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const loreNotesBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const magicBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const mythsBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const politicalGroupsBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const racesBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const religionsBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -120,6 +120,13 @@ export const techBlueprint: I_Blueprint = {
|
|||
`,
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "categoryDescription",
|
||||
name: "Category description",
|
||||
type: "wysiwyg",
|
||||
icon: "mdi-folder-edit-outline",
|
||||
sizing: 12
|
||||
},
|
||||
{
|
||||
id: "breakBasic",
|
||||
name: "Basic information",
|
||||
|
|
|
@ -96,6 +96,10 @@ export const saveDocument = async (document: I_OpenedDocument, allOpenedDocument
|
|||
documentCopy.hasEdits = false
|
||||
documentCopy.editMode = false
|
||||
|
||||
if (documentCopy.scrollDistance) {
|
||||
delete (documentCopy.scrollDistance)
|
||||
}
|
||||
|
||||
// Save the document
|
||||
try {
|
||||
await CurrentObjectDB.put(documentCopy)
|
||||
|
|
11
src/scripts/utilities/plusheMascot.ts
Normal file
11
src/scripts/utilities/plusheMascot.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import fantasia_didYouKnow from "src/assets/fantasiaPlushe/fantasia_didYouKnow.png"
|
||||
import fantasia_flop from "src/assets/fantasiaPlushe/fantasia_flop.png"
|
||||
import fantasia_hug from "src/assets/fantasiaPlushe/fantasia_hug.png"
|
||||
import fantasia_reading from "src/assets/fantasiaPlushe/fantasia_reading.png"
|
||||
|
||||
export const summonAllPlusheForms: string[] = [
|
||||
fantasia_didYouKnow,
|
||||
fantasia_flop,
|
||||
fantasia_hug,
|
||||
fantasia_reading
|
||||
]
|
|
@ -19,5 +19,6 @@ export const tipsTricks: string[] = [
|
|||
"Don't hesitate to add as many sub-categories as you want. You can always move stuff around later and reorganize your project structure.",
|
||||
"Tags are a very powerful feature that allow you to add semi-categories to the project tree and create additional search parameters to aid navigation.",
|
||||
"There is a roadmap of planned features on Patreon! If you are curious about what will eventually come, feel free to read it.",
|
||||
"DISCLAIMER: No magical creatures were harmed during the making of this software."
|
||||
"DISCLAIMER: No magical creatures were harmed during the making of this software.",
|
||||
"The adorable little arcane dragon you might have seen while using the app is called Fantasia and she is the official mascot of FA!"
|
||||
]
|
||||
|
|
|
@ -2,6 +2,7 @@ export interface OptionsStateInteface {
|
|||
_id: string,
|
||||
_rev?: string,
|
||||
darkMode: boolean
|
||||
preventAutoScroll: boolean
|
||||
textShadow: boolean
|
||||
hideDeadCrossThrough: boolean
|
||||
doubleDashDocCount: boolean
|
||||
|
@ -25,6 +26,11 @@ export interface OptionsStateInteface {
|
|||
hideTooltipsStart: boolean
|
||||
hideTooltipsProject: boolean
|
||||
hideTreeOrderNumbers: boolean
|
||||
hideTreeExtraIcons: boolean
|
||||
hideTreeIconAddUnder: boolean
|
||||
hideTreeIconEdit: boolean
|
||||
hideTreeIconView: boolean
|
||||
hidePlushes: boolean
|
||||
|
||||
userKeybindList: any[]
|
||||
treeWidth?: number
|
||||
|
@ -34,10 +40,12 @@ function state (): OptionsStateInteface {
|
|||
return {
|
||||
_id: "settings",
|
||||
darkMode: false,
|
||||
preventAutoScroll: false,
|
||||
textShadow: false,
|
||||
hideDeadCrossThrough: false,
|
||||
doubleDashDocCount: false,
|
||||
hideWelcomeScreenSocials: false,
|
||||
hidePlushes: false,
|
||||
noTags: false,
|
||||
tagsAtTop: false,
|
||||
compactTags: false,
|
||||
|
@ -57,6 +65,10 @@ function state (): OptionsStateInteface {
|
|||
hideTooltipsStart: false,
|
||||
hideTooltipsProject: false,
|
||||
hideTreeOrderNumbers: false,
|
||||
hideTreeExtraIcons: false,
|
||||
hideTreeIconAddUnder: false,
|
||||
hideTreeIconEdit: false,
|
||||
hideTreeIconView: false,
|
||||
treeWidth: 374,
|
||||
userKeybindList: []
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
- Switch field: Template (sigh... maybe???)
|
||||
|
||||
- Save scroll distance when switching tabs (consider some auto-scroll when opening edit mode)
|
||||
- Mass tag rename
|
||||
|
||||
- Add "Related notes"
|
||||
|
@ -17,6 +16,7 @@
|
|||
- Add intelligent responsive design to the left tree and document body (maybe button to pull the left bar in and out?)
|
||||
|
||||
- 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
|
||||
|
||||
### Project settings
|
||||
|
||||
|
|
Loading…
Reference in a new issue