diff --git a/insert-moc/info.json b/insert-moc/info.json
new file mode 100644
index 0000000..a651df5
--- /dev/null
+++ b/insert-moc/info.json
@@ -0,0 +1,10 @@
+{
+ "name": "Insert Table of Contents II (M.O.C. Map of Contents)",
+ "identifier": "insert-moc",
+ "script": "insert-moc.qml",
+ "authors": ["@netlimpopo"],
+ "platforms": ["linux", "macos", "windows"],
+ "version": "0.0.1",
+ "minAppVersion": "25.12.7",
+ "description": "This script generates a list of clickable links which map to every single .md note within the active note folder (= 'Map of contents (M.O.C.)'). It displays the links in a table format along with the relative filepaths of the files. Furthermore it sorts the links in alphabetical order. \n The difference to the 'Table of Contents' script lies in the fact, that the T.O.C script creates links to headings of the same document whereas this M.O.C. script creates references to every single notename in the active note folder.\n Usage \n.
- Select the highest folder hierachy (!).
- Create a new note with an arbitrary name in the highest note hierachy (note level).
- Click the M.O.C button in the script menu. Then the script will overwrite all of the current note content and will insert the linkslist.
\n\n Warning \n Note that all of the content of the selcted note will be replaced by the table of contents link list. Therefore it is essential to create a new note and exclusively use this note for the M.O.C list.\n automatic updates\n In case you rename a note, the markdown links in the M.O.C will be automatically updated too, as QOwnNotes watches all markdownlinks and checks links for necessary updates. \n However, if one creates a new note anywhere, the script must be excecuted again, as it will otherwise not watch for file additions nor will it add a new link to the list.\n Also if you want to move the M.O.C file to a different location, all the links will be updated accordingly thanks to the QOwnNotes logic. \n An M.O.C. can act as a navitational site (especially when all files are exported as static .html pages) and provide an overview of all available notes. The idea is strongly influenced by the Obsidian plugin 'Waypoint' see Waypoint Obsidian. "
+}
diff --git a/insert-moc/insert-moc.qml b/insert-moc/insert-moc.qml
new file mode 100644
index 0000000..04d3ad2
--- /dev/null
+++ b/insert-moc/insert-moc.qml
@@ -0,0 +1,56 @@
+import QtQml 2.2
+import QOwnNotesTypes 1.0
+
+Script {
+ function init() {
+ // Register custom action for MOC index generation
+ script.registerCustomAction("MOC", "Generate MOC", "MOC");
+ }
+
+ function customActionInvoked(action) {
+ if (action !== "indexpage") {
+ return;
+ }
+
+ var currentNote = script.currentNote;
+ var noteIds = script.fetchNoteIdsByNoteTextPart(""); // get all note IDs
+
+ // Build each link line and collect into array
+ var listedLinks = [];
+ for (var i = 0; i < noteIds.length; i++) {
+ var noteId = noteIds[i];
+ var noteObj = script.fetchNoteById(noteId);
+ var name = noteObj.name;
+ var fullPath = noteObj.fullNoteFilePath;
+ var parts = fullPath.split('.');
+ var ext = parts[parts.length - 1];
+ var relDir = noteObj.relativeNoteFileDirPath;
+
+ // Construct filePath and encoded path
+ var filePath = relDir && relDir.length > 0
+ ? relDir + "/" + name + "." + ext
+ : name + "." + ext;
+ var rawLink = (relDir && relDir.length > 0
+ ? relDir + "/" + name
+ : name);
+ var encoded = encodeURIComponent(rawLink)
+ .replace(/%2F/g, "/")
+ .replace(/%2E/g, ".") + "." + ext;
+
+ // Format line
+ var line = "|" + filePath + " | ---> [" + name + "." + ext + "](" + encoded + ")| ";
+ listedLinks.push(line);
+ }
+
+ // Sort lines alphabetically
+ listedLinks.sort();
+
+ // Assemble new note text
+ var noteTextstring = "# Map of Content \n\n|path |filelink | \n|---|---| \n" + listedLinks.join("\n") + "\n";
+
+ // Replace entire note content
+ script.noteTextEditSelectAll();
+ script.noteTextEditWrite(noteTextstring);
+ script.log("MOC index generated and sorted successfully.");
+ }
+}