diff --git a/src/App.vue b/src/App.vue index 3c80735..9e9963b 100644 --- a/src/App.vue +++ b/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 } diff --git a/src/BaseClass.ts b/src/BaseClass.ts index 6033663..d8f31df 100644 --- a/src/BaseClass.ts +++ b/src/BaseClass.ts @@ -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 diff --git a/src/assets/fantasiaPlushe/fantasia_didYouKnow.png b/src/assets/fantasiaPlushe/fantasia_didYouKnow.png new file mode 100644 index 0000000..091c685 Binary files /dev/null and b/src/assets/fantasiaPlushe/fantasia_didYouKnow.png differ diff --git a/src/assets/fantasiaPlushe/fantasia_flop.png b/src/assets/fantasiaPlushe/fantasia_flop.png new file mode 100644 index 0000000..19e4e44 Binary files /dev/null and b/src/assets/fantasiaPlushe/fantasia_flop.png differ diff --git a/src/assets/fantasiaPlushe/fantasia_hug.png b/src/assets/fantasiaPlushe/fantasia_hug.png new file mode 100644 index 0000000..a2cdb53 Binary files /dev/null and b/src/assets/fantasiaPlushe/fantasia_hug.png differ diff --git a/src/assets/fantasiaPlushe/fantasia_reading.png b/src/assets/fantasiaPlushe/fantasia_reading.png new file mode 100644 index 0000000..1978529 Binary files /dev/null and b/src/assets/fantasiaPlushe/fantasia_reading.png differ diff --git a/src/components/ObjectTree.vue b/src/components/ObjectTree.vue index b412ced..248132b 100644 --- a/src/components/ObjectTree.vue +++ b/src/components/ObjectTree.vue @@ -110,7 +110,25 @@
+ + Open {{ prop.node.label }} + + + - Open/Edit {{ prop.node.label }} + Edit {{ prop.node.label }} - Expand all + Expand all under this node - Collapse all + Collapse all under this node @@ -200,6 +218,12 @@ Open document + + + + + + Edit document @@ -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) }) diff --git a/src/components/dialogs/ProgramSettings.vue b/src/components/dialogs/ProgramSettings.vue index 75ab470..f91d565 100644 --- a/src/components/dialogs/ProgramSettings.vue +++ b/src/components/dialogs/ProgramSettings.vue @@ -21,7 +21,11 @@ style="width: 100%;" > - + + + + + @@ -52,7 +56,13 @@
- Program looks & Accessibility + Visuals & Accessibility +
+
+ +
+
+ Visuals
@@ -71,6 +81,12 @@ />
+
+
+ Accessibility +
+
+
Accessibility - Text shadow @@ -116,6 +132,12 @@ />
+
+
+ Application extras +
+
+
Hide Welcome screen social links @@ -161,13 +183,48 @@ />
+
+
+ Hide Fantasia mascot + + + Hides the amazingly adorable and awesome Fantasia, the tiny arcane dragon. +
+ How could you! :( +
+
+
+ + +
+ +
+ + + + + +
-
- Document view settings +
+ Document view/edit
-
+
+
+ Document control bar +
+
+ +
Disable document control bar @@ -184,7 +241,7 @@ />
-
+
Disable document guides @@ -199,7 +256,13 @@ />
-
+
+
+ Document body +
+
+ +
Disable document tooltips @@ -214,7 +277,7 @@ />
-
+
Hide empty fields @@ -231,9 +294,63 @@ />
+
+
+ Prevent auto-scrolling + + + Determines if the documents will recall their scroll distances and auto-scroll on switching ot not. + + +
+ + +
+
+ + + + + + +
-
- Quick-search & Quick-add popups +
+ Popup dialogs +
+
+ +
+
+ Universal dialog settings +
+
+ +
+
+ Close quick popups with same key + + + 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. + + +
+ + +
+ +
+
+ Quick-Seach dialog
@@ -271,24 +388,78 @@ />
+
+
+
+ + + +
+
+
+ Hierarchical tree +
+
+ +
+
+ Tag settings +
+
+
- Close quick popups with same key + Hide tags in tree - 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
- +
+ +
+
+ Top tags in tree + + + Show tags at the top of the hierarchical tree + + +
+ + +
+ +
+
+ Compact tags + + + Determine if the tags should be shown as individual categories or they should show as one big category with each tag as a subcategory. + + +
+ +
-
-
- Hierarchy tree +
+
+ Tree behavior
@@ -339,6 +510,12 @@ />
+
+
+ Information display settings +
+
+
Hide document count entirely @@ -384,51 +561,6 @@ />
-
-
- Hide tags in tree - - - Determines if the tags show in the hierarchical tree at all - - -
- - -
- -
-
- Top tags in tree - - - Show tags at the top of the hierarchical tree - - -
- - -
- -
-
- Compact tags - - - Determine if the tags should be shown as individual categories or they should show as one big category with each tag as a subcategory. - - -
- - -
-
Hide order numbers @@ -444,8 +576,75 @@ />
+
+
+ Icon settings +
+
+ +
+
+ Hide extra icons + + + This option hides icons that are normally shown for convinience, but don't actually add any functiuonality. +
+ 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. +
+
+
+ + +
+ +
+
+ Hide "Add under" icon + + + This option hides the "Add a new document belonging under XY" icon. + + +
+ + +
+ +
+
+ Hide "Edit" icon + + + This option hides the "Edit XY" icon. + + +
+ + +
+ +
+
+ Hide "Open" icon + + + This option hides the "Open XY" icon. + + +
+ + +
- + @@ -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: [] } diff --git a/src/css/app.scss b/src/css/app.scss index 62b1f9b..7b8402e 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -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; diff --git a/src/documents/changeLog.md b/src/documents/changeLog.md index e078499..b0fc792 100644 --- a/src/documents/changeLog.md +++ b/src/documents/changeLog.md @@ -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 diff --git a/src/interfaces/I_OpenedDocument.ts b/src/interfaces/I_OpenedDocument.ts index b3033bb..fdbe55d 100644 --- a/src/interfaces/I_OpenedDocument.ts +++ b/src/interfaces/I_OpenedDocument.ts @@ -13,6 +13,7 @@ export interface I_OpenedDocument{ hasEdits: boolean isNew: boolean url: string + scrollDistance?: number extraFields: I_ExtraDocumentFields[] } diff --git a/src/pages/DocumentDisplay.vue b/src/pages/DocumentDisplay.vue index b137b7c..40c6ebc 100644 --- a/src/pages/DocumentDisplay.vue +++ b/src/pages/DocumentDisplay.vue @@ -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")) } /** diff --git a/src/pages/ProjectScreen.vue b/src/pages/ProjectScreen.vue index ee74296..bdabaf1 100644 --- a/src/pages/ProjectScreen.vue +++ b/src/pages/ProjectScreen.vue @@ -14,8 +14,17 @@

{{projectName}}

-
- + +
+ +
+ +
+
@@ -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 {