From 547fb32f9542d3fb9373b9ff12c13c492a5d1d5b Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 15:59:10 -0500
Subject: [PATCH 01/15] Add Page-Related Settings
---
src/settings/Settings.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts
index c01300c..b58c18a 100644
--- a/src/settings/Settings.ts
+++ b/src/settings/Settings.ts
@@ -2,6 +2,7 @@ export enum MetricCounter {
words,
characters,
sentences,
+ pages,
files,
}
@@ -38,6 +39,7 @@ export interface BetterWordCountSettings {
altBar: StatusBarItem[];
countComments: boolean;
collectStats: boolean;
+ pageWords: number;
}
export const DEFAULT_SETTINGS: BetterWordCountSettings = {
@@ -71,4 +73,5 @@ export const DEFAULT_SETTINGS: BetterWordCountSettings = {
],
countComments: false,
collectStats: false,
+ pageWords: 300,
};
From 88a3bd1a2ad8023f657bd75c23a1bd6435993ae3 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:03:24 -0500
Subject: [PATCH 02/15] Add Page Word Count Setting
---
src/settings/SettingsTab.ts | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts
index 0e55833..f8f92cd 100644
--- a/src/settings/SettingsTab.ts
+++ b/src/settings/SettingsTab.ts
@@ -37,6 +37,18 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab {
await this.plugin.saveSettings();
});
});
+ new Setting(containerEl)
+ .setName("Page Word Count")
+ .setDesc("Set how many words count as one \"page\"")
+ .addToggle((text: TextComponent) => {
+ text.inputEl.type = "number";
+ text.setPlaceholder("300");
+ text.setValue(this.plugin.settings.pageWords);
+ text.onChange(async (value) => {
+ this.plugin.settings.pageWords = value;
+ await this.plugin.saveSettings();
+ });
+ });
// Status Bar Settings
addStatusBarSettings(this.plugin, containerEl);
From 2cc592c13e812ab5e6ef83baa2221ad1c71d34ae Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:11:23 -0500
Subject: [PATCH 03/15] Add "Pages" as an Option
---
src/settings/StatusBarSettings.svelte | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/settings/StatusBarSettings.svelte b/src/settings/StatusBarSettings.svelte
index 9e2843a..6031454 100644
--- a/src/settings/StatusBarSettings.svelte
+++ b/src/settings/StatusBarSettings.svelte
@@ -18,6 +18,8 @@
return "Chars in Note"
case MetricCounter.sentences:
return "Sentences in Note"
+ case MetricCounter.pages:
+ return "Pages in Note"
case MetricCounter.files:
return "Total Notes"
}
@@ -29,6 +31,8 @@
return "Daily Chars"
case MetricCounter.sentences:
return "Daily Sentences"
+ case MetricCounter.pages:
+ return "Daily Pages"
case MetricCounter.files:
return "Total Notes"
}
@@ -40,6 +44,8 @@
return "Total Chars"
case MetricCounter.sentences:
return "Total Sentences"
+ case MetricCounter.pages:
+ return "Total Pages"
case MetricCounter.files:
return "Total Notes"
}
@@ -181,6 +187,7 @@
+
@@ -348,6 +355,7 @@
+
From 9885035ac8e73e10204a94527502e8b608f99831 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:12:36 -0500
Subject: [PATCH 04/15] Add Pages
---
src/stats/Stats.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/stats/Stats.ts b/src/stats/Stats.ts
index 5209bb3..38a69aa 100644
--- a/src/stats/Stats.ts
+++ b/src/stats/Stats.ts
@@ -9,10 +9,12 @@ export interface Day {
words: number;
characters: number;
sentences: number;
+ pages: number;
files: number;
totalWords: number;
totalCharacters: number;
totalSentences: number;
+ totalPages: number;
}
export type ModifiedFiles = Record;
@@ -21,6 +23,7 @@ export interface FileStat {
words: CountDiff;
characters: CountDiff;
sentences: CountDiff;
+ pages: CountDiff;
}
export interface CountDiff {
From 759b4d949c599b30878890ed80008c1f65d5a3a1 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:39:28 -0500
Subject: [PATCH 05/15] Add Page Calculations
---
src/stats/StatsManager.ts | 47 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)
diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts
index d96db15..0dd051c 100644
--- a/src/stats/StatsManager.ts
+++ b/src/stats/StatsManager.ts
@@ -5,19 +5,22 @@ import moment from "moment";
import {
getCharacterCount,
getSentenceCount,
+ getPageCount,
getWordCount,
} from "../utils/StatUtils";
export default class StatsManager {
private vault: Vault;
private workspace: Workspace;
+ private plugin: Plugin;
private vaultStats: VaultStatistics;
private today: string;
public debounceChange;
- constructor(vault: Vault, workspace: Workspace) {
+ constructor(vault: Vault, workspace: Workspace, plugin: Plugin) {
this.vault = vault;
this.workspace = workspace;
+ this.plugin = plugin;
this.debounceChange = debounce(
(text: string) => this.change(text),
50,
@@ -76,15 +79,18 @@ export default class StatsManager {
const totalWords = await this.calcTotalWords();
const totalCharacters = await this.calcTotalCharacters();
const totalSentences = await this.calcTotalSentences();
+ const totalPages = await this.calcTotalPages();
const newDay: Day = {
words: 0,
characters: 0,
sentences: 0,
+ pages: 0,
files: 0,
totalWords: totalWords,
totalCharacters: totalCharacters,
totalSentences: totalSentences,
+ totalPages: totalPages,
};
this.vaultStats.modifiedFiles = {};
@@ -97,6 +103,8 @@ export default class StatsManager {
const currentWords = getWordCount(text);
const currentCharacters = getCharacterCount(text);
const currentSentences = getSentenceCount(text);
+ const currentPages = getPageCount(text, this.plugin.settings.pageWords);
+
if (
this.vaultStats.history.hasOwnProperty(this.today) &&
this.today === moment().format("YYYY-MM-DD")
@@ -110,9 +118,12 @@ export default class StatsManager {
currentCharacters - modFiles[fileName].characters.current;
this.vaultStats.history[this.today].totalSentences +=
currentSentences - modFiles[fileName].sentences.current;
+ this.vaultStats.history[this.today].totalPages +=
+ currentSentences - modFiles[fileName].pages.current;
modFiles[fileName].words.current = currentWords;
modFiles[fileName].characters.current = currentCharacters;
modFiles[fileName].sentences.current = currentSentences;
+ modFiles[fileName].pages.current = currentPages;
} else {
modFiles[fileName] = {
words: {
@@ -127,6 +138,10 @@ export default class StatsManager {
initial: currentSentences,
current: currentSentences,
},
+ pages: {
+ initial: currentPages,
+ current: currentPages,
+ },
};
}
@@ -145,10 +160,16 @@ export default class StatsManager {
Math.max(0, counts.sentences.current - counts.sentences.initial)
)
.reduce((a, b) => a + b, 0);
+ const pages = Object.values(modFiles)
+ .map((counts) =>
+ Math.max(0, counts.pages.current - counts.pages.initial)
+ )
+ .reduce((a, b) => a + b, 0);
this.vaultStats.history[this.today].words = words;
this.vaultStats.history[this.today].characters = characters;
this.vaultStats.history[this.today].sentences = sentences;
+ this.vaultStats.history[this.today].pages = pages;
this.vaultStats.history[this.today].files = this.getTotalFiles();
await this.update();
@@ -167,6 +188,7 @@ export default class StatsManager {
todayHist.totalWords = await this.calcTotalWords();
todayHist.totalCharacters = await this.calcTotalCharacters();
todayHist.totalSentences = await this.calcTotalSentences();
+ todayHist.totalPages = await this.calcTotalPages();
this.update();
} else {
this.updateToday();
@@ -211,6 +233,20 @@ export default class StatsManager {
return sentence;
}
+
+ private async calcTotalPages(): Promise {
+ let pages = 0;
+
+ const files = this.vault.getFiles();
+ for (const i in files) {
+ const file = files[i];
+ if (file.extension === "md") {
+ pages += getPageCount(await this.vault.cachedRead(file), this.plugin.settings.pageWords);
+ }
+ }
+
+ return pages;
+ }
public getDailyWords(): number {
return this.vaultStats.history[this.today].words;
@@ -224,6 +260,10 @@ export default class StatsManager {
return this.vaultStats.history[this.today].sentences;
}
+ public getDailyPages(): number {
+ return this.vaultStats.history[this.today].pages;
+ }
+
public getTotalFiles(): number {
return this.vault.getMarkdownFiles().length;
}
@@ -242,4 +282,9 @@ export default class StatsManager {
if (!this.vaultStats) return await this.calcTotalSentences();
return this.vaultStats.history[this.today].totalSentences;
}
+
+ public async getTotalPages(): Promise {
+ if (!this.vaultStats) return await this.calcTotalPages();
+ return this.vaultStats.history[this.today].totalPages;
+ }
}
From de3172ee95cc4be67c358f31e338055469c3ad13 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:42:00 -0500
Subject: [PATCH 06/15] Add Page Display Options
---
src/status/StatusBar.ts | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/src/status/StatusBar.ts b/src/status/StatusBar.ts
index 7d40bfc..3f458d0 100644
--- a/src/status/StatusBar.ts
+++ b/src/status/StatusBar.ts
@@ -107,6 +107,26 @@ export default class StatusBar {
: 0));
break;
}
+ } else if (metric.counter === MetricCounter.pages) {
+ switch (metric.type) {
+ case MetricType.file:
+ display = display + getPageCount(text, this.plugin.settings.pageWords);
+ break;
+ case MetricType.daily:
+ display =
+ display +
+ (this.plugin.settings.collectStats
+ ? this.plugin.statsManager.getDailyPages()
+ : 0);
+ break;
+ case MetricType.total:
+ display =
+ display +
+ (await (this.plugin.settings.collectStats
+ ? this.plugin.statsManager.getTotalPages()
+ : 0));
+ break;
+ }
} else if (metric.counter === MetricCounter.files) {
switch (metric.type) {
case MetricType.file:
@@ -209,6 +229,26 @@ export default class StatusBar {
: 0));
break;
}
+ } else if (metric.counter === MetricCounter.pages) {
+ switch (metric.type) {
+ case MetricType.file:
+ display = display + 0;
+ break;
+ case MetricType.daily:
+ display =
+ display +
+ (this.plugin.settings.collectStats
+ ? this.plugin.statsManager.getDailyPages()
+ : 0);
+ break;
+ case MetricType.total:
+ display =
+ display +
+ (await (this.plugin.settings.collectStats
+ ? this.plugin.statsManager.getTotalPages()
+ : 0));
+ break;
+ }
} else if (metric.counter === MetricCounter.files) {
switch (metric.type) {
case MetricType.file:
From 5e970cad74d7d02da285414f4eda0fbd1e57f9d2 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:44:23 -0500
Subject: [PATCH 07/15] Add getPageCount
---
src/utils/StatUtils.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/utils/StatUtils.ts b/src/utils/StatUtils.ts
index eddaa6d..2d23966 100644
--- a/src/utils/StatUtils.ts
+++ b/src/utils/StatUtils.ts
@@ -37,6 +37,10 @@ export function getSentenceCount(text: string): number {
return sentences;
}
+export function getPageCount(text: string, pageWords: number): number {
+ return parseFloat((getWordCount(text) / pageWords).toFixed(1));
+}
+
export function getTotalFileCount(vault: Vault): number {
return vault.getMarkdownFiles().length;
}
From f43895645f6f9fabf33a3938e7035d2514dae00e Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 16:45:38 -0500
Subject: [PATCH 08/15] Update StatsManager Initialization
---
src/main.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main.ts b/src/main.ts
index 5cf97a8..cbc3293 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -33,7 +33,7 @@ export default class BetterWordCount extends Plugin {
// Handle Statistics
if (this.settings.collectStats) {
- this.statsManager = new StatsManager(this.app.vault, this.app.workspace);
+ this.statsManager = new StatsManager(this.app.vault, this.app.workspace, this);
}
// Handle Status Bar
From aabd175d5d8249a8c085c5227cbbf5f196cdac6f Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 17:18:06 -0500
Subject: [PATCH 09/15] Fix TS Build Mistakes
---
src/stats/StatsManager.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts
index 0dd051c..ce77a65 100644
--- a/src/stats/StatsManager.ts
+++ b/src/stats/StatsManager.ts
@@ -1,4 +1,4 @@
-import { debounce, Debouncer, TFile, Vault, Workspace } from "obsidian";
+import { debounce, Debouncer, TFile, Vault, Workspace, Plugin } from "obsidian";
import { STATS_FILE } from "../constants";
import type { Day, VaultStatistics } from "./Stats";
import moment from "moment";
From 2b847ddcc9641f7cfe54a78b549a5460cdf1781c Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 17:18:49 -0500
Subject: [PATCH 10/15] Fix TS Build Mistakes
---
src/status/StatusBar.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/status/StatusBar.ts b/src/status/StatusBar.ts
index 3f458d0..da952c6 100644
--- a/src/status/StatusBar.ts
+++ b/src/status/StatusBar.ts
@@ -4,6 +4,7 @@ import {
getWordCount,
getCharacterCount,
getSentenceCount,
+ getPageCount,
} from "src/utils/StatUtils";
import { debounce } from "obsidian";
From fbf79771883717e4b918bd75955ff43043e3dd75 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 17:31:07 -0500
Subject: [PATCH 11/15] Fix TS Build Mistakes
---
src/settings/SettingsTab.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts
index f8f92cd..aa49a3e 100644
--- a/src/settings/SettingsTab.ts
+++ b/src/settings/SettingsTab.ts
@@ -1,4 +1,4 @@
-import { App, PluginSettingTab, Setting, ToggleComponent } from "obsidian";
+import { App, PluginSettingTab, Setting, ToggleComponent, TextComponent } from "obsidian";
import type BetterWordCount from "src/main";
import { addStatusBarSettings } from "./StatusBarSettings";
@@ -40,11 +40,11 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab {
new Setting(containerEl)
.setName("Page Word Count")
.setDesc("Set how many words count as one \"page\"")
- .addToggle((text: TextComponent) => {
+ .addText((text: TextComponent) => {
text.inputEl.type = "number";
text.setPlaceholder("300");
text.setValue(this.plugin.settings.pageWords);
- text.onChange(async (value) => {
+ text.onChange(async (value: number) => {
this.plugin.settings.pageWords = value;
await this.plugin.saveSettings();
});
From ec21413d55bcde9cb330742a0b1e081c805def09 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 18:15:04 -0500
Subject: [PATCH 12/15] Fix TS Build Mistakes
---
src/stats/StatsManager.ts | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts
index ce77a65..00e687a 100644
--- a/src/stats/StatsManager.ts
+++ b/src/stats/StatsManager.ts
@@ -1,4 +1,5 @@
-import { debounce, Debouncer, TFile, Vault, Workspace, Plugin } from "obsidian";
+import { debounce, Debouncer, TFile, Vault, Workspace } from "obsidian";
+import type BetterWordCount from "../main";
import { STATS_FILE } from "../constants";
import type { Day, VaultStatistics } from "./Stats";
import moment from "moment";
@@ -12,12 +13,12 @@ import {
export default class StatsManager {
private vault: Vault;
private workspace: Workspace;
- private plugin: Plugin;
+ private plugin: BetterWordCount;
private vaultStats: VaultStatistics;
private today: string;
public debounceChange;
- constructor(vault: Vault, workspace: Workspace, plugin: Plugin) {
+ constructor(vault: Vault, workspace: Workspace, plugin: BetterWordCount) {
this.vault = vault;
this.workspace = workspace;
this.plugin = plugin;
From d865d61e2305400db41f6160ff5eb8992422e74c Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 18:16:09 -0500
Subject: [PATCH 13/15] Fix TS Build Mistakes
---
src/settings/SettingsTab.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts
index aa49a3e..591fae2 100644
--- a/src/settings/SettingsTab.ts
+++ b/src/settings/SettingsTab.ts
@@ -44,8 +44,8 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab {
text.inputEl.type = "number";
text.setPlaceholder("300");
text.setValue(this.plugin.settings.pageWords);
- text.onChange(async (value: number) => {
- this.plugin.settings.pageWords = value;
+ text.onChange(async (value: string) => {
+ this.plugin.settings.pageWords = parseInt(value);
await this.plugin.saveSettings();
});
});
From 86ca1199cce1f7dcc67028dae6999dd1950e4961 Mon Sep 17 00:00:00 2001
From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com>
Date: Wed, 8 Feb 2023 18:25:43 -0500
Subject: [PATCH 14/15] Fix TS Build Mistakes
---
src/settings/SettingsTab.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts
index 591fae2..a6aa43b 100644
--- a/src/settings/SettingsTab.ts
+++ b/src/settings/SettingsTab.ts
@@ -43,7 +43,7 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab {
.addText((text: TextComponent) => {
text.inputEl.type = "number";
text.setPlaceholder("300");
- text.setValue(this.plugin.settings.pageWords);
+ text.setValue(this.plugin.settings.pageWords.toString());
text.onChange(async (value: string) => {
this.plugin.settings.pageWords = parseInt(value);
await this.plugin.saveSettings();
From 0712d9f61a2008e548574e45b6dd2ee8765a8fcd Mon Sep 17 00:00:00 2001
From: Luke Leppan
Date: Thu, 30 Mar 2023 00:01:11 +0200
Subject: [PATCH 15/15] fix: calculating with currentSentences instead of page
---
src/stats/StatsManager.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts
index 00e687a..59fad1e 100644
--- a/src/stats/StatsManager.ts
+++ b/src/stats/StatsManager.ts
@@ -120,7 +120,7 @@ export default class StatsManager {
this.vaultStats.history[this.today].totalSentences +=
currentSentences - modFiles[fileName].sentences.current;
this.vaultStats.history[this.today].totalPages +=
- currentSentences - modFiles[fileName].pages.current;
+ currentPages - modFiles[fileName].pages.current;
modFiles[fileName].words.current = currentWords;
modFiles[fileName].characters.current = currentCharacters;
modFiles[fileName].sentences.current = currentSentences;