initial commit

This commit is contained in:
Marty 2018-11-21 16:07:57 +00:00
parent 48d53070e0
commit ff81291884
1 changed files with 183 additions and 0 deletions

183
zettel.qml Normal file
View File

@ -0,0 +1,183 @@
import QtQml 2.0
import QOwnNotesTypes 1.0
import com.qownnotes.noteapi 1.0
QtObject {
function init() {
script.registerCustomAction("zettelCreate", "Create Zettelkasten Zettel", "Zettel", "address-book-new");
script.registerCustomAction("manualLink", "Insert Zettelkasten Link", "InsertLink", "insert-link");
script.registerCustomAction("jumpToId", "Follow Zettelkasten Link", "Link", "go-next");
}
function customActionInvoked(identifier) {
switch(identifier) {
case "zettelCreate":
onZettelCreateClicked();
break;
case "jumpToId":
onJumpToZettelClicked();
break;
case "manualLink":
onInsertLinkClicked();
break;
}
}
// ----------------------------
// ----- BUTTON FUNCTIONS -----
// ----------------------------
function onZettelCreateClicked() {
let uid = exactDate();
let selected = script.noteTextEditSelectedText();
// Link the from the old Zettel to the new one if anything was selected
if(selected !== "") {
script.log("selected: " + selected);
createLinkInPlace(uid, selected);
}
// Create a Zettel
createZettel(uid, selected);
}
function onInsertLinkClicked() {
let selected = script.noteTextEditSelectedText();
let clipboard = script.clipboard();
let uid = null
if (verifyZettelId(clipboard)) {
uid = verifyZettelId(clipboard);
} else {
let otherNote = zettelSelectorDialog(true);
uid = extractZettelIdFromString(otherNote.noteText);
}
if (uid == null) {
return;
}
createLinkInPlace(uid, selected)
}
function onJumpToZettelClicked() {
let selected = verifyZettelId(script.noteTextEditSelectedText());
if(selected == false) {
script.setCurrentNote(zettelSelectorDialog(true));
} else {
script.setCurrentNote(getNoteByZettelId(selected));
}
}
// ----------------------------
// --- Autocomplete Linking ---
// ----------------------------
function autocompletionHook() {
let uid = verifyZettelId(script.noteTextEditCurrentWord(false));
if(uid == false) {
return [];
}
let zettel = getNoteByZettelId(uid);
script.log("Autocomplete detected, Switch to §§" + uid + " - " + zettel.name)
script.setCurrentNote(zettel);
return [];
}
// ----------------------------
// ---- Internal Functions ----
// ----------------------------
function zettelSelectorDialog(editableTextBox, zettelArray) {
if (zettelArray == null) {
zettelArray = [];
script.fetchNoteIdsByNoteTextPart("§§").forEach(function (noteId){
let note = script.fetchNoteById(noteId);
zettelArray.push(note.name + " --id:"+note.id);
});
}
let selected = script.inputDialogGetItem("Zettel", "Select a Zettel", zettelArray, 0, editableTextBox);
return script.fetchNoteById(selected.substring(selected.search(/--id:/)+5));
}
function extractZettelIdFromString(text) {
let markerpos = text.search(/§§\d{14}\s/) + 2;
if (markerpos == -1) {
script.log("No Zettel ID Found in text");
return;
}
return text.substring(markerpos, markerpos+14);
}
function verifyZettelId(id) {
if (id.match(/^§§\d{14}$/) != null) {
return id.substring(2);
} else if (id.match(/^\d{14}$/) != null) {
return id;
} else {
return false;
}
}
function getNoteByZettelId(uid) {
let noteId = script.fetchNoteIdsByNoteTextPart("§§" + uid);
if (noteId.length == 0) {
script.log("No note found for Zettel ID: §§" + uid);
return;
}
return script.fetchNoteById(noteId[0]);
}
function createLinkInPlace(uid, selected) {
script.noteTextEditWrite("["+selected+"](zettel://"+uid+")");
}
function createZettel(uid, headline) {
// Create Headline - empty if nothing selected
if (headline == "") {
headline = "Zettel"
}
let text = headline.toString() + "\n";
// Create Headline Separator
text += "===============\n";
// Create uid tag
text += "§§" + uid.toString() + "\n\n";
// Create content unit (i.e. space)
text += "\n\n\n\n\n";
// Create Related unit - FIXME add option to automatically link back to the card this was created from
text += "## Related\n\n\n\n";
// Create Source unit
text += "## Reference\n\n";
script.createNote(text);
return script.currentNote();
}
function exactDate() {
let date = new Date();
return (""
+ date.getUTCFullYear().toString()
+ padToLen2((date.getUTCMonth()+1).toString())
+ padToLen2( date.getUTCDate().toString())
+ padToLen2( date.getUTCHours().toString())
+ padToLen2( date.getUTCMinutes().toString())
+ padToLen2( date.getUTCSeconds().toString())
);
}
function padToLen2(text) {
return ("00" + text).slice(-2)
}
}