vault backup: 2023-04-03 22:35:25
This commit is contained in:
parent
7fb519047b
commit
c2e337ccf6
28 changed files with 38877 additions and 1017 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -9,4 +9,5 @@
|
|||
!.obsidian/themes/Encore/
|
||||
!.obsidian/plugins/homepage/
|
||||
!.obsidian/plugins/better-word-count/
|
||||
!.obsidian/plugins/obsidian-style-settings
|
||||
!.obsidian/plugins/obsidian-style-settings
|
||||
!.obsidian/plugins/longform
|
3
.obsidian/community-plugins.json
vendored
3
.obsidian/community-plugins.json
vendored
|
@ -15,5 +15,6 @@
|
|||
"consistent-attachments-and-links",
|
||||
"homepage",
|
||||
"better-word-count",
|
||||
"obsidian-style-settings"
|
||||
"obsidian-style-settings",
|
||||
"longform"
|
||||
]
|
600
.obsidian/plugins/better-word-count/main.js
vendored
600
.obsidian/plugins/better-word-count/main.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "better-word-count",
|
||||
"name": "Better Word Count",
|
||||
"version": "0.9.4",
|
||||
"version": "0.9.6",
|
||||
"description": "Counts the words of selected text in the editor.",
|
||||
"author": "Luke Leppan",
|
||||
"authorUrl": "https://lukeleppan.com",
|
||||
|
|
391
.obsidian/plugins/fantasy-calendar/data.json
vendored
391
.obsidian/plugins/fantasy-calendar/data.json
vendored
File diff suppressed because one or more lines are too long
46
.obsidian/plugins/fantasy-calendar/main.js
vendored
46
.obsidian/plugins/fantasy-calendar/main.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "fantasy-calendar",
|
||||
"name": "Fantasy Calendar",
|
||||
"version": "2.3.11",
|
||||
"version": "3.0.0",
|
||||
"minAppVersion": "0.12.10",
|
||||
"author": "Jeremy Valentine",
|
||||
"description": "Fantasy calendars in Obsidian!",
|
||||
|
|
File diff suppressed because one or more lines are too long
18
.obsidian/plugins/homepage/main.js
vendored
18
.obsidian/plugins/homepage/main.js
vendored
|
@ -1732,15 +1732,16 @@ var HomepageSettingTab = class extends import_obsidian2.PluginSettingTab {
|
|||
const homepageDesc = `The name of the ${workspacesMode ? "workspace" : "note or canvas"} to open.`;
|
||||
const homepage = workspacesMode ? "workspace" : "defaultNote";
|
||||
if (this.plugin.settings.useMoment && !workspacesMode) {
|
||||
let dateSetting = new import_obsidian2.Setting(this.containerEl).setName("Homepage format").setDesc("A valid Moment format specification determining the note or canvas to open.").addMomentFormat((text) => text.setDefaultFormat("YYYY-MM-DD").setValue(this.plugin.settings.momentFormat).onChange((value) => __async(this, null, function* () {
|
||||
const dateSetting = new import_obsidian2.Setting(this.containerEl).setName("Homepage format");
|
||||
dateSetting.descEl.innerHTML += `A valid Moment format specification determining the note or canvas to open.<br>
|
||||
Surround words in <code style="padding:0">[brackets]</code> to include them;
|
||||
see the <a href="https://momentjs.com/docs/#/displaying/format/" target="_blank" rel="noopener">
|
||||
reference</a> for syntax details.<br> Currently, your specification will produce: `;
|
||||
const sample = dateSetting.descEl.createEl("b", { attr: { class: "u-pop" } });
|
||||
dateSetting.addMomentFormat((text) => text.setDefaultFormat("YYYY-MM-DD").setValue(this.plugin.settings.momentFormat).onChange((value) => __async(this, null, function* () {
|
||||
this.plugin.settings.momentFormat = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})));
|
||||
dateSetting.descEl.createEl("br");
|
||||
dateSetting.descEl.createEl("a", {
|
||||
text: "Moment formatting info",
|
||||
attr: { href: "https://momentjs.com/docs/#/displaying/format/" }
|
||||
});
|
||||
})).setSampleEl(sample));
|
||||
} else {
|
||||
new import_obsidian2.Setting(this.containerEl).setName("Homepage").setDesc(homepageDesc).addText((text) => {
|
||||
new suggestor(this.app, text.inputEl);
|
||||
|
@ -1882,6 +1883,7 @@ var Homepage = class extends import_obsidian3.Plugin {
|
|||
return;
|
||||
const state = view.getState();
|
||||
const config = this.app.vault.config;
|
||||
console.log(state.mode, state.source);
|
||||
state.mode = config.defaultViewMode;
|
||||
state.source = !config.livePreview;
|
||||
yield view.leaf.setViewState({ type: "markdown", state });
|
||||
|
@ -2019,7 +2021,7 @@ var Homepage = class extends import_obsidian3.Plugin {
|
|||
return;
|
||||
}
|
||||
const state = view.getState();
|
||||
if (this.settings.revertView) {
|
||||
if (this.settings.revertView && this.loaded) {
|
||||
this.lastView = new WeakRef(view);
|
||||
}
|
||||
if (this.settings.autoScroll) {
|
||||
|
|
2
.obsidian/plugins/homepage/manifest.json
vendored
2
.obsidian/plugins/homepage/manifest.json
vendored
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "homepage",
|
||||
"name": "Homepage",
|
||||
"version": "2.8.1",
|
||||
"version": "2.8.2",
|
||||
"minAppVersion": "1.0",
|
||||
"description": "Open a specified note, canvas, or workspace on startup.",
|
||||
"author": "novov",
|
||||
|
|
63
.obsidian/plugins/longform/data.json
vendored
Normal file
63
.obsidian/plugins/longform/data.json
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"version": 3,
|
||||
"projects": {},
|
||||
"selectedDraftVaultPath": "Projets/Absolue Nécessitée/Index.md",
|
||||
"userScriptFolder": "Projets/Scripts",
|
||||
"sessionStorage": "plugin-folder",
|
||||
"sessions": [],
|
||||
"showWordCountInStatusBar": false,
|
||||
"startNewSessionEachDay": true,
|
||||
"sessionGoal": 500,
|
||||
"applyGoalTo": "project",
|
||||
"notifyOnGoal": true,
|
||||
"countDeletionsForGoal": false,
|
||||
"keepSessionCount": 30,
|
||||
"sessionFile": "longform-sessions.json",
|
||||
"numberScenes": true,
|
||||
"workflows": {
|
||||
"Default Workflow": {
|
||||
"name": "Default Workflow",
|
||||
"description": "A starter workflow. Feel free to edit, rename, or delete it and create your own.",
|
||||
"steps": [
|
||||
{
|
||||
"id": "strip-frontmatter",
|
||||
"optionValues": {}
|
||||
},
|
||||
{
|
||||
"id": "Projets/Scripts/replaceLinks.js",
|
||||
"optionValues": {
|
||||
"removeH1": true,
|
||||
"removeFrontmatter": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "remove-links",
|
||||
"optionValues": {
|
||||
"remove-wikilinks": false,
|
||||
"remove-external-links": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "prepend-title",
|
||||
"optionValues": {
|
||||
"format": "$3{#} $2 $1",
|
||||
"separator": "\n\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "concatenate-text",
|
||||
"optionValues": {
|
||||
"separator": "\\n\\n---\\n\\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "write-to-note",
|
||||
"optionValues": {
|
||||
"target": "$1-manuscript.md",
|
||||
"open-after": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
37341
.obsidian/plugins/longform/main.js
vendored
Normal file
37341
.obsidian/plugins/longform/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/longform/manifest.json
vendored
Normal file
11
.obsidian/plugins/longform/manifest.json
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"id": "longform",
|
||||
"name": "Longform",
|
||||
"version": "2.0.3",
|
||||
"minAppVersion": "1.0",
|
||||
"description": "Write novels, screenplays, and other long projects in Obsidian.",
|
||||
"author": "Kevin Barrett",
|
||||
"authorUrl": "https://kevinbarrett.org",
|
||||
"fundingUrl": "https://github.com/sponsors/kevboh",
|
||||
"isDesktopOnly": false
|
||||
}
|
1
.obsidian/plugins/longform/sessions.json
vendored
Normal file
1
.obsidian/plugins/longform/sessions.json
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
[{"start":"2023-04-03T20:19:46.909Z","total":0,"drafts":{"Projets/Absolue Nécessitée/Index.md":{"total":0,"scenes":{"Chapitre 1 - Montée en puissance":0,"Diner chez Althéa":0,"Assassinat raté":0}}}},{"start":"2023-04-03T20:18:34.855Z","total":0,"drafts":{"Projets/Absolue Nécessitée/Index.md":{"total":0,"scenes":{}}}}]
|
18
.obsidian/plugins/longform/styles.css
vendored
Normal file
18
.obsidian/plugins/longform/styles.css
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
:root {
|
||||
--longform-explorer-font-size: var(--font-ui-medium);
|
||||
}
|
||||
|
||||
.longform-settings-user-steps {
|
||||
padding-inline-start: 1em;
|
||||
margin-block-start: 0;
|
||||
margin-block-end: 0;
|
||||
}
|
||||
|
||||
.longform-settings-user-step-name {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.longform-settings-user-step-id {
|
||||
margin-left: var(--size-4-2);
|
||||
color: var(--text-muted);
|
||||
}
|
|
@ -389,6 +389,7 @@
|
|||
"projectSizeLimit": 1000,
|
||||
"frontmatter": {
|
||||
"quoteStrings": "PLAIN"
|
||||
}
|
||||
},
|
||||
"commands": []
|
||||
}
|
||||
}
|
1108
.obsidian/plugins/obsidian-projects/main.js
vendored
1108
.obsidian/plugins/obsidian-projects/main.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"id": "obsidian-projects",
|
||||
"name": "Projects",
|
||||
"version": "1.11.5",
|
||||
"version": "1.13.0",
|
||||
"minAppVersion": "1.0.0",
|
||||
"description": "Project management for Obsidian.",
|
||||
"description": "Plain text project planning.",
|
||||
"author": "Marcus Olsson",
|
||||
"authorUrl": "https://marcus.se.net",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/marcusolsson",
|
||||
|
|
2
.obsidian/vault-stats.json
vendored
2
.obsidian/vault-stats.json
vendored
|
@ -1 +1 @@
|
|||
{"history":{"2023-03-01":{"words":845,"characters":1255,"sentences":0,"files":123,"totalWords":29296,"totalCharacters":231518,"totalSentences":821},"2023-03-02":{"words":39,"characters":281,"sentences":0,"files":123,"totalWords":29296,"totalCharacters":231518,"totalSentences":821},"2023-03-03":{"words":644,"characters":3897,"sentences":23,"files":123,"totalWords":29940,"totalCharacters":233149,"totalSentences":844},"2023-03-05":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":29940,"totalCharacters":233149,"totalSentences":844},"2023-03-06":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":29940,"totalCharacters":233149,"totalSentences":844},"2023-03-07":{"words":16,"characters":103,"sentences":0,"files":123,"totalWords":29956,"totalCharacters":233253,"totalSentences":844},"2023-03-08":{"words":6,"characters":47,"sentences":1,"files":123,"totalWords":29964,"totalCharacters":233304,"totalSentences":845},"2023-03-10":{"words":15,"characters":102,"sentences":0,"files":124,"totalWords":30010,"totalCharacters":233650,"totalSentences":846},"2023-03-14":{"words":68,"characters":445,"sentences":4,"files":126,"totalWords":30274,"totalCharacters":235667,"totalSentences":857},"2023-03-15":{"words":585,"characters":3851,"sentences":9,"files":129,"totalWords":30998,"totalCharacters":240608,"totalSentences":868},"2023-03-16":{"words":128,"characters":820,"sentences":7,"files":131,"totalWords":31352,"totalCharacters":245878,"totalSentences":877},"2023-03-18":{"words":30,"characters":208,"sentences":0,"files":132,"totalWords":31501,"totalCharacters":247094,"totalSentences":878},"2023-03-19":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":0,"totalCharacters":0,"totalSentences":0},"2023-03-22":{"words":2568,"characters":16916,"sentences":53,"files":133,"totalWords":34073,"totalCharacters":266611,"totalSentences":932},"2023-03-24":{"words":7,"characters":50,"sentences":0,"files":133,"totalWords":34085,"totalCharacters":264035,"totalSentences":932},"2023-03-30":{"words":156,"characters":955,"sentences":9,"files":135,"totalWords":34782,"totalCharacters":265893,"totalSentences":965},"2023-03-31":{"words":129,"characters":798,"sentences":7,"files":135,"totalWords":34911,"totalCharacters":269322,"totalSentences":972},"2023-04-03":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":0,"totalCharacters":0,"totalSentences":0}},"modifiedFiles":{}}
|
||||
{"history":{"2023-03-01":{"words":845,"characters":1255,"sentences":0,"files":123,"totalWords":29296,"totalCharacters":231518,"totalSentences":821},"2023-03-02":{"words":39,"characters":281,"sentences":0,"files":123,"totalWords":29296,"totalCharacters":231518,"totalSentences":821},"2023-03-03":{"words":644,"characters":3897,"sentences":23,"files":123,"totalWords":29940,"totalCharacters":233149,"totalSentences":844},"2023-03-05":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":29940,"totalCharacters":233149,"totalSentences":844},"2023-03-06":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":29940,"totalCharacters":233149,"totalSentences":844},"2023-03-07":{"words":16,"characters":103,"sentences":0,"files":123,"totalWords":29956,"totalCharacters":233253,"totalSentences":844},"2023-03-08":{"words":6,"characters":47,"sentences":1,"files":123,"totalWords":29964,"totalCharacters":233304,"totalSentences":845},"2023-03-10":{"words":15,"characters":102,"sentences":0,"files":124,"totalWords":30010,"totalCharacters":233650,"totalSentences":846},"2023-03-14":{"words":68,"characters":445,"sentences":4,"files":126,"totalWords":30274,"totalCharacters":235667,"totalSentences":857},"2023-03-15":{"words":585,"characters":3851,"sentences":9,"files":129,"totalWords":30998,"totalCharacters":240608,"totalSentences":868},"2023-03-16":{"words":128,"characters":820,"sentences":7,"files":131,"totalWords":31352,"totalCharacters":245878,"totalSentences":877},"2023-03-18":{"words":30,"characters":208,"sentences":0,"files":132,"totalWords":31501,"totalCharacters":247094,"totalSentences":878},"2023-03-19":{"words":0,"characters":0,"sentences":0,"files":0,"totalWords":0,"totalCharacters":0,"totalSentences":0},"2023-03-22":{"words":2568,"characters":16916,"sentences":53,"files":133,"totalWords":34073,"totalCharacters":266611,"totalSentences":932},"2023-03-24":{"words":7,"characters":50,"sentences":0,"files":133,"totalWords":34085,"totalCharacters":264035,"totalSentences":932},"2023-03-30":{"words":156,"characters":955,"sentences":9,"files":135,"totalWords":34782,"totalCharacters":265893,"totalSentences":965},"2023-03-31":{"words":129,"characters":798,"sentences":7,"files":135,"totalWords":34911,"totalCharacters":269322,"totalSentences":972},"2023-04-03":{"words":2,"characters":11,"sentences":0,"files":141,"totalWords":35198,"totalCharacters":270614,"totalSentences":987,"totalFootnotes":3,"totalCitations":0,"totalPages":117.19999999999996,"footnotes":0,"citations":0,"pages":0}},"modifiedFiles":{"Aventures/Chapitre 1 - Révolution.md":{"words":{"initial":296,"current":295},"characters":{"initial":2374,"current":2369},"sentences":{"initial":8,"current":8},"footnotes":{"initial":0,"current":0},"citations":{"initial":0,"current":0},"pages":{"initial":1,"current":1}},"Projets/Absolue Nécessitée/Scenes/Diner chez Althéa.md":{"words":{"initial":0,"current":1},"characters":{"initial":1,"current":8},"sentences":{"initial":1,"current":1},"footnotes":{"initial":0,"current":0},"citations":{"initial":0,"current":0},"pages":{"initial":0,"current":0}},"Projets/Absolue Nécessitée/Scenes/Assassinat raté.md":{"words":{"initial":0,"current":1},"characters":{"initial":1,"current":5},"sentences":{"initial":1,"current":1},"footnotes":{"initial":0,"current":0},"citations":{"initial":0,"current":0},"pages":{"initial":0,"current":0}},"Scenes/Diner avec Althéa.md":{"words":{"initial":711,"current":642},"characters":{"initial":4765,"current":3875},"sentences":{"initial":25,"current":24},"footnotes":{"initial":0,"current":0},"citations":{"initial":0,"current":0},"pages":{"initial":2.4,"current":2.1}}}}
|
|
@ -1,7 +1,5 @@
|
|||
---
|
||||
banner: "https://2.bp.blogspot.com/-1vrilRVfQLA/VvpxzuDnE0I/AAAAAAAAavI/966Kg7f8v9Mfm29TrdZxdfb_mUiEJ7Kdg/s1600/rebellion_1300px_by-andy-walsh.jpg"
|
||||
---
|
||||
---
|
||||
alias: []
|
||||
tags:
|
||||
- ch1
|
||||
|
|
14
Projets/Absolue Nécessitée/Absolue Nécessitée-manuscript.md
Normal file
14
Projets/Absolue Nécessitée/Absolue Nécessitée-manuscript.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
# 1 Chapitre 1 - Montée en puissance
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 1.1 Diner chez Althéa
|
||||
|
||||
!Diner avec Althéa
|
||||
|
||||
---
|
||||
|
||||
## 1.2 Assassinat raté
|
||||
|
14
Projets/Absolue Nécessitée/Index.md
Normal file
14
Projets/Absolue Nécessitée/Index.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
longform:
|
||||
format: scenes
|
||||
title: Absolue Nécessitée
|
||||
workflow: Default Workflow
|
||||
sceneFolder: Scenes
|
||||
scenes:
|
||||
- Chapitre 1 - Montée en puissance
|
||||
- - Diner chez Althéa
|
||||
- Assassinat raté
|
||||
ignoredFiles:
|
||||
- manuscript
|
||||
- undefined
|
||||
---
|
0
Projets/Absolue Nécessitée/Scenes/Assassinat raté.md
Normal file
0
Projets/Absolue Nécessitée/Scenes/Assassinat raté.md
Normal file
1
Projets/Absolue Nécessitée/Scenes/Diner chez Althéa.md
Normal file
1
Projets/Absolue Nécessitée/Scenes/Diner chez Althéa.md
Normal file
|
@ -0,0 +1 @@
|
|||

|
147
Projets/Scripts/replaceLinks.js
Normal file
147
Projets/Scripts/replaceLinks.js
Normal file
|
@ -0,0 +1,147 @@
|
|||
module.exports = {
|
||||
// object that describes the step and its configuration
|
||||
description: {
|
||||
// the name of your step
|
||||
name: "Replace links",
|
||||
|
||||
// short description of what it does
|
||||
description: "Replaces wikilinks with the linked content",
|
||||
|
||||
// array. valid options are "Scene", "Manuscript", "Join". "Join" must be the only member if present.
|
||||
availableKinds: ["Scene"],
|
||||
|
||||
// array of step options, or an empty array if step has no options
|
||||
options: [
|
||||
// a boolean option follows as another example
|
||||
{
|
||||
id: "removeH1",
|
||||
name: "Remove h1 of linked content",
|
||||
description: "If checked, the h1 headers of the linked content will be removed.",
|
||||
type: "Boolean",
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
id: "removeFrontmatter",
|
||||
name: "Remove frontmatter of linked content",
|
||||
description: "If checked, the frontmatter of the linked content will be removed.",
|
||||
type: "Boolean",
|
||||
default: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
/**
|
||||
Function that is executed during compilation. It may be `async`.
|
||||
Errors encountered during execution should be thrown and will
|
||||
be handled by Longform.
|
||||
@param input If the step is of kind Scene or Join (see context),
|
||||
this will be *an array* containing elements of type:
|
||||
{
|
||||
path: string; // path to scene
|
||||
name: string; // file name of scene
|
||||
contents: string; // text contents of scene
|
||||
metadata: CachedMetadata; // Obsidian metadata of scene
|
||||
indentationLevel?: number; // The indent level (starting at zero) of the scene
|
||||
}
|
||||
where each element corresponds to a scene (and thus the step has access to all scenes at once in `input`).
|
||||
If the step is of kind Manuscript (see context), this will be of type:
|
||||
{
|
||||
// text contents of manuscript
|
||||
contents: string;
|
||||
}
|
||||
@param context The execution context of the step, including the step
|
||||
kind and option values:
|
||||
{
|
||||
kind: string; // "Scene" | "Join" | "Manuscript"
|
||||
optionValues: { [id: string]: unknown } // Map of option IDs to values
|
||||
projectPath: string; // path in vault to compiling project
|
||||
draft: Draft; // The Draft type describing your project
|
||||
app: App; // Obsidian app
|
||||
}
|
||||
@note For an example of using `context` to determine the shape of `input`, see
|
||||
https://github.com/kevboh/longform/blob/main/src/compile/steps/strip-frontmatter.ts
|
||||
@returns If of kind "Scene" or "Manuscript", the same shape as `input`
|
||||
with the appropriate changes made to `contents`. If of kind "Join",
|
||||
the same shape as a "Manuscript" step input.
|
||||
*/
|
||||
compile
|
||||
};
|
||||
|
||||
async function compile(input, context) {
|
||||
const files = await getAllFiles(context.app);
|
||||
console.info("All files: ", files);
|
||||
|
||||
return Promise.all(
|
||||
input.map(async scene => ({
|
||||
...scene,
|
||||
contents: await replaceLinksWithContent(scene.contents, scene.metadata, context, files, 0)
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
function getAllFiles(app) {
|
||||
return app.vault.getFiles();
|
||||
}
|
||||
|
||||
async function replaceLinksWithContent(content, metadata, context, files, deep) {
|
||||
if (deep > 1) {
|
||||
return content;
|
||||
}
|
||||
|
||||
console.info("Current file: ", metadata, "deep: ", deep);
|
||||
const allLinks = [...(metadata.links || []), ...(metadata.embeds || [])];
|
||||
|
||||
return allLinks.reduce(async (accProm, item) => {
|
||||
const acc = await accProm;
|
||||
const [linkedFile, linkedContent] = await getLinkedContent(item.link, context.app, files);
|
||||
if (!linkedContent) {
|
||||
return acc;
|
||||
}
|
||||
const linkedMetadata = getMetadata(linkedFile, context.app);
|
||||
|
||||
let contentArray = Array.from(linkedContent);
|
||||
contentArray = removeFrontmatter(contentArray, linkedMetadata.frontmatter, context.optionValues);
|
||||
contentArray = removeHeaders(contentArray, linkedMetadata.headings, context.optionValues)
|
||||
const cleanedContent = contentArray.filter(val => val !== null)
|
||||
.join("")
|
||||
.trim();
|
||||
|
||||
const processedLinkedContent = await replaceLinksWithContent(cleanedContent, linkedMetadata, context, files, deep + 1)
|
||||
return acc.replaceAll(item.original, processedLinkedContent)
|
||||
}, Promise.resolve(content));
|
||||
}
|
||||
|
||||
async function getLinkedContent(linkText, app, files) {
|
||||
const file = files.find(file => file.basename === linkText);
|
||||
return file
|
||||
? [file, await app.vault.read(file)]
|
||||
: [];
|
||||
}
|
||||
|
||||
function getMetadata(file, app) {
|
||||
return app.metadataCache.getFileCache(file)
|
||||
}
|
||||
|
||||
function removeHeaders(content, headers, optionValues) {
|
||||
if (optionValues.removeH1 && headers) {
|
||||
return headers
|
||||
.filter(header => header.level === 1)
|
||||
.reduce((acc, header) => {
|
||||
return removeFromTextArray(acc, header.position)
|
||||
}, content)
|
||||
} else {
|
||||
return content;
|
||||
}
|
||||
}
|
||||
|
||||
function removeFrontmatter(content, frontmatter, optionValues) {
|
||||
if (frontmatter && optionValues.removeFrontmatter) {
|
||||
return removeFromTextArray(content, frontmatter.position);
|
||||
} else {
|
||||
return content;
|
||||
}
|
||||
}
|
||||
|
||||
function removeFromTextArray(text, position) {
|
||||
return text.map((val, i) => i >= position.start.offset && i < position.end.offset ? null : val)
|
||||
}
|
|
@ -1,52 +1,52 @@
|
|||
{
|
||||
"nodes":[
|
||||
{"type":"group","id":"bac06a276a73330f","x":-2014,"y":-4506,"width":2050,"height":3101,"label":"Enquete"},
|
||||
{"type":"text","text":"#### [L'Arène](Locations/L'Arène.md)","id":"77d5dba97c4653f9","x":-1460,"y":-3593,"width":144,"height":54},
|
||||
{"type":"text","text":"[La Petite Sirène](Locations/La%20Petite%20Sirène.md)","id":"487245560d15e160","x":-1877,"y":-3802,"width":250,"height":60},
|
||||
{"type":"text","text":"Fleche empoisonnée","id":"125f5c73a54806d9","x":-3171,"y":-4537,"width":250,"height":60},
|
||||
{"type":"text","text":"#### [Venin de Ver Pourpre](Objets/Venin%20de%20Ver%20Pourpre.md)","id":"cb7686443486f000","x":-3171,"y":-4273,"width":250,"height":94},
|
||||
{"type":"text","text":"Etude du venin","id":"9f0116da3c0101c5","x":-3169,"y":-4379,"width":250,"height":60},
|
||||
{"type":"file","file":"Illustrations/Portraits/Erulissen.png","id":"b8c84d482914db2d","x":-3451,"y":-3887,"width":315,"height":400,"color":"2"},
|
||||
{"type":"text","text":"### [Aïpio](Factions/Aïpio.md)","id":"f689e7da734b41d9","x":-3419,"y":-4022,"width":250,"height":60},
|
||||
{"type":"text","text":"### [Le Cercle de sel](Factions/Le%20Cercle%20de%20sel.md)","id":"5e350a7c7d9c461d","x":-3059,"y":-4022,"width":250,"height":60},
|
||||
{"type":"text","text":"Dague empoisonnée","id":"084f3a2b66ca1b4b","x":-3561,"y":-4682,"width":250,"height":60},
|
||||
{"type":"text","text":"Combat dans l'arène","id":"0d6c8bc7f3c68952","x":-1513,"y":-3482,"width":250,"height":60,"color":"4"},
|
||||
{"type":"text","text":"Les conversations entre Lunarion et Lysandre","id":"621599fb2cd2b81c","x":-1522,"y":-2823,"width":250,"height":74},
|
||||
{"type":"text","text":"TODO: Information utile (récompense)","id":"383582c81605638c","x":-2173,"y":-4693,"width":199,"height":76},
|
||||
{"type":"text","text":"Boite d'Allumette de l'[Hydre Cristalline](Locations/Hydre%20Cristalline.md)","id":"1580c9a1abcdfede","x":-1746,"y":-4309,"width":250,"height":83},
|
||||
{"type":"file","file":"Illustrations/Portraits/Althéa.png","id":"9885ce124ab774ce","x":-1000,"y":-4961,"width":249,"height":400},
|
||||
{"type":"text","text":"##### Enquête sur Althéa\nDocuments révelant des incohérences sur son discours","id":"ecee4819946ec510","x":-869,"y":-2686,"width":250,"height":176,"color":"1"},
|
||||
{"type":"text","text":"Chateau de Lunarion","id":"fd26dba1e8860ecc","x":-1522,"y":-2628,"width":250,"height":60},
|
||||
{"type":"text","text":"##### Les lettres entre Lunarion et \"La Danseuse\"","id":"19ca4279126cddad","x":-1522,"y":-2510,"width":250,"height":116,"color":"1"},
|
||||
{"type":"text","text":"Lunarion s'enfuit avec la complicité des joueurs, en échange d'informations cachées sur Althéa","id":"168d50a00f8e671d","x":-1082,"y":-1778,"width":250,"height":165},
|
||||
{"type":"file","file":"Illustrations/Portraits/lunarion.jpg","id":"1b68c9c93d34e74c","x":-1243,"y":-2290,"width":206,"height":400},
|
||||
{"type":"text","text":"#### Althéa est élue au [Conseil de la ville](Factions/La%20Main.md)","id":"4feee060245e3a8d","x":-1274,"y":-1272,"width":237,"height":118},
|
||||
{"type":"text","text":"Elle envoie les joueurs en Cyrillane","id":"89d325540742cf98","x":-1283,"y":-1099,"width":250,"height":93},
|
||||
{"type":"text","text":"Quartier du Vieux Port","id":"74c6540e049f3610","x":-1460,"y":-4309,"width":250,"height":50},
|
||||
{"type":"text","text":"La Lettre de Mahira","id":"5069aabd4a13c1dc","x":-1125,"y":-4298,"width":250,"height":60},
|
||||
{"type":"text","text":"Assassinat raté","id":"a3904ad29417095a","x":-1746,"y":-4961,"width":250,"height":60,"color":"4"},
|
||||
{"type":"file","file":"Illustrations/Portraits/Derlynn Gravelgut.jpg","id":"2e6bcfd8b207dd70","x":-1729,"y":-4842,"width":216,"height":400},
|
||||
{"type":"text","text":"Les conversations entre Lunarion et Lysandre","id":"621599fb2cd2b81c","x":-1522,"y":-2823,"width":250,"height":74},
|
||||
{"type":"file","file":"Illustrations/Portraits/lunarion.jpg","id":"1b68c9c93d34e74c","x":-1243,"y":-2290,"width":206,"height":400},
|
||||
{"type":"file","file":"PNJ/Mahira.md","id":"94cda37acc139dab","x":-1548,"y":-3342,"width":321,"height":400},
|
||||
{"type":"text","text":"Lunarion est capturé et traduit en justice","id":"49c40b60ee3dc205","x":-1522,"y":-1778,"width":342,"height":83},
|
||||
{"type":"text","text":"Accroches","id":"3aedf2b288b99311","x":1158,"y":-627,"width":176,"height":60,"color":"4"},
|
||||
{"type":"text","text":"TODO: Information utile (récompense)","id":"383582c81605638c","x":-2173,"y":-4693,"width":199,"height":76},
|
||||
{"type":"text","text":"","id":"7f4eff1c273961be","x":938,"y":-237,"width":250,"height":60},
|
||||
{"type":"text","text":"### Les Prêtresses des Soeurs\nCertaines prêtresses des Soeurs préparent une expédition pour se rendre à [Kratéïra](Locations/Kratéïra.md)","id":"d4f6287077a14ec2","x":-417,"y":-480,"width":320,"height":243,"color":"4"},
|
||||
{"type":"text","text":"# Aider les réfugié\nLes joueurs doivent se rendre a Vivépine pour aider les réfugié et la communauté locale a calmer les troubles","id":"6bffee0c04d42118","x":173,"y":-310,"width":337,"height":310},
|
||||
{"type":"text","text":"#### Althéa devient Absolue\n","id":"80e21f0b4ae0985e","x":-866,"y":-1252,"width":250,"height":78},
|
||||
{"type":"text","text":"Elle proclame le fichage des mages et unifie la garde vigente.","id":"39b5e4b46b31622f","x":-866,"y":-1069,"width":250,"height":125},
|
||||
{"type":"text","text":"# Manoir d'Althéa","id":"9d7ed1c98dcd94a9","x":-1388,"y":-5303,"width":362,"height":70},
|
||||
{"type":"text","text":"Combat dans l'arène","id":"0d6c8bc7f3c68952","x":-1513,"y":-3482,"width":250,"height":60,"color":"4"},
|
||||
{"type":"text","text":"","id":"7f4eff1c273961be","x":938,"y":-237,"width":250,"height":60},
|
||||
{"type":"text","text":"##### Quelques rapports sur les lépreux de Sheena","id":"d9979ad4882a0edd","x":-869,"y":-2452,"width":250,"height":119,"color":"1"},
|
||||
{"type":"text","text":"Une place est vacante au conseil, Althéa la prend","id":"952d2e95eec491ec","x":-1080,"y":-1553,"width":250,"height":102},
|
||||
{"type":"text","text":"Contrat entre Lunarion et Derlynn ","id":"9106654884bc782d","x":-1961,"y":-3566,"width":276,"height":99},
|
||||
{"type":"file","file":"Illustrations/Portraits/Lysandre.png","id":"26583f64e922f598","x":-1922,"y":-2208,"width":300,"height":400},
|
||||
{"type":"text","text":"#### CLIMAX \nAffrontement entre les joueurs et Mille-Visages, dans une Cité envahie par les ravageurs.","id":"cd209aa92b601e18","x":52,"y":-1052,"width":298,"height":208},
|
||||
{"type":"text","text":"[Hydre Cristalline](Locations/Hydre%20Cristalline.md)","id":"20903fc794e64d28","x":-1871,"y":-4114,"width":250,"height":60},
|
||||
{"type":"text","text":"Gardes","id":"cce4fba89332d69c","x":-1877,"y":-3970,"width":250,"height":60},
|
||||
{"type":"text","text":"### Althéa\nAlthéa demande aux joueurs de jouer les ambassadeurs pour trouver une solution aux problèmes d'importation des grains, d'immigration et de commerce. \n\nElle ne fait pas appel a des ambassadeurs, car le but secret de la mission est surtout d'espionner ce qui se passe dans le pays, afin de savoir si la Cyrillanne prépare une guerre ou non.\n\n","id":"973e6ae9e09f0fe5","x":-417,"y":-207,"width":320,"height":466,"color":"4"},
|
||||
{"type":"text","text":"","id":"af2cbe8025d8714f","x":260,"y":-1898,"width":250,"height":60},
|
||||
{"type":"text","text":"#### Sauvetage de [Hrysanthéïs](PNJ/Hrysanthéïs.md)","id":"3822cb7518f31007","x":-333,"y":-1222,"width":369,"height":96},
|
||||
{"type":"text","text":"#### [L'Arène](Locations/L'Arène.md)","id":"77d5dba97c4653f9","x":-1460,"y":-3593,"width":144,"height":54},
|
||||
{"type":"text","text":"[La Petite Sirène](Locations/La%20Petite%20Sirène.md)","id":"487245560d15e160","x":-1877,"y":-3802,"width":250,"height":60},
|
||||
{"type":"text","text":"### [Le Cercle de sel](Factions/Le%20Cercle%20de%20sel.md)","id":"5e350a7c7d9c461d","x":-3059,"y":-4022,"width":250,"height":60},
|
||||
{"type":"text","text":"Contrat entre Lunarion et Derlynn ","id":"9106654884bc782d","x":-1961,"y":-3566,"width":276,"height":99},
|
||||
{"type":"text","text":"Gardes","id":"cce4fba89332d69c","x":-1877,"y":-3970,"width":250,"height":60},
|
||||
{"type":"text","text":"Quartier des épices","id":"2c552327b8764ac5","x":-635,"y":-3898,"width":250,"height":60},
|
||||
{"type":"file","file":"PNJ/Les Jumeaux.md","id":"944c34000ed08be6","x":-1139,"y":-4054,"width":279,"height":371},
|
||||
{"type":"text","text":"#### Althéa devient Absolue\n","id":"80e21f0b4ae0985e","x":-866,"y":-1252,"width":250,"height":78},
|
||||
{"type":"text","text":"Elle proclame le fichage des mages et unifie la garde vigente.","id":"39b5e4b46b31622f","x":-866,"y":-1069,"width":250,"height":125},
|
||||
{"type":"text","text":"Quartier du Vieux Port","id":"74c6540e049f3610","x":-1460,"y":-4309,"width":250,"height":50},
|
||||
{"type":"text","text":"Boite d'Allumette de l'[Hydre Cristalline](Locations/Hydre%20Cristalline.md)","id":"1580c9a1abcdfede","x":-1746,"y":-4309,"width":250,"height":83},
|
||||
{"type":"text","text":"# Manoir d'Althéa","id":"9d7ed1c98dcd94a9","x":-1388,"y":-5303,"width":362,"height":70},
|
||||
{"type":"file","file":"Illustrations/Portraits/Althéa.png","id":"9885ce124ab774ce","x":-1000,"y":-4961,"width":249,"height":400},
|
||||
{"type":"text","text":"La Lettre de Mahira","id":"5069aabd4a13c1dc","x":-1125,"y":-4298,"width":250,"height":60},
|
||||
{"type":"text","text":"Assassinat raté","id":"a3904ad29417095a","x":-1746,"y":-4961,"width":250,"height":60,"color":"4"},
|
||||
{"type":"file","file":"Illustrations/Portraits/Derlynn Gravelgut.jpg","id":"2e6bcfd8b207dd70","x":-1729,"y":-4842,"width":216,"height":400}
|
||||
{"type":"file","file":"PNJ/Les Jumeaux.md","id":"944c34000ed08be6","x":-1139,"y":-4054,"width":279,"height":371}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"a373fdb3488f5002","fromNode":"6bffee0c04d42118","fromSide":"right","toNode":"7f4eff1c273961be","toSide":"left","label":"Permet De"},
|
||||
|
|
|
@ -1,27 +1,13 @@
|
|||
---
|
||||
alias: []
|
||||
tags: []
|
||||
synopsis: "[[Althéa Temperenza|Althéa]] invite les joueurs a diner, et leur propose un travail bien payé."
|
||||
trigger: "Se rendre au [[Manoir d'Althéa]]"
|
||||
sceneType: "encounter"
|
||||
isActedUpon: "false"
|
||||
storyCircleStage: "Need"
|
||||
---
|
||||
```RpgManagerData
|
||||
data:
|
||||
synopsis: "[[Althéa Temperenza|Althéa]] invite les joueurs a diner, et leur propose un travail bien payé."
|
||||
complete: true
|
||||
sessionId: 0
|
||||
action:
|
||||
trigger: "Se rendre au [[Manoir d'Althéa]]"
|
||||
date:
|
||||
sceneType: "encounter"
|
||||
isActedUpon: false
|
||||
duration: 0
|
||||
durations: []
|
||||
storyCircleStage: "Need"
|
||||
```
|
||||
```RpgManager
|
||||
models:
|
||||
header: true
|
||||
```
|
||||
---
|
||||
### Scene Notes
|
||||
|
||||
Quand les PJ se rendent à l'invitation, lisez ou paraphez ceci :
|
||||
> *Vous toquez a la porte d'une superbe demeure à colombages, qui ne dénote avec les autres maisons du quartier que part une petite tour qui s'élance sur la façade nord.
|
||||
> Un melessë vous accueille, dans une tunique en cuir noire et brodée d'épi dorées, le visage fermé. Vous décelez aux oreilles une ascendance elfique, mais contrairement a la norme, celui ci arbore des traits déformé, cabossé, voir fondu par endroits. Avec ses gants blancs, il vous fait signe d'entrer et vous escorte jusqu'à un petit salon situé sur votre gauche.*
|
||||
|
@ -41,33 +27,3 @@ Il sera plus loquace et répondra volontiers aux questions des PJ pendant le rep
|
|||
|
||||
Althéa, après le repas, montrera aux PJ leurs chambres, puis répondra à leurs questions. Une fois la conversation terminée, elle ira dans ses quartiers, laissant les aventuriers entre les mains de [[../PNJ/Gustavio]].
|
||||
|
||||
---
|
||||
```RpgManager
|
||||
models:
|
||||
lists:
|
||||
subplots:
|
||||
relationship: "unidirectional"
|
||||
musics:
|
||||
relationship: "unidirectional"
|
||||
pcs:
|
||||
relationship: "unidirectional"
|
||||
npcs:
|
||||
relationship: "unidirectional"
|
||||
factions:
|
||||
relationship: "unidirectional"
|
||||
clues:
|
||||
relationship: "unidirectional"
|
||||
locations:
|
||||
relationship: "unidirectional"
|
||||
events:
|
||||
relationship: "unidirectional"
|
||||
```
|
||||
```RpgManagerID
|
||||
### DO NOT EDIT MANUALLY IF NOT INSTRUCTED TO DO SO ###
|
||||
type: 8
|
||||
campaignSettings: 0
|
||||
id: "3257923e-08dd-4a34-a5d5-9707014e858b"
|
||||
campaignId: "160d7ffd-1d69-4848-b5e5-443eb5992dea"
|
||||
parentId: "2d839255-b86f-493e-86cb-149dd5b2a537"
|
||||
positionInParent: 2
|
||||
```
|
||||
|
|
Loading…
Reference in a new issue