mirror of
https://github.com/marty-oehme/scripts.git
synced 2024-12-22 16:08:09 +00:00
95 lines
3.4 KiB
QML
95 lines
3.4 KiB
QML
import QtQml 2.0
|
|
import QOwnNotesTypes 1.0
|
|
|
|
/**
|
|
* This script handles tagging in a note for tags in the note text like:
|
|
* @tag1 @tag2 @tag3
|
|
* @tag_one would tag the note with "tag one" tag.
|
|
*/
|
|
Script {
|
|
property string tagMarker
|
|
|
|
property variant settingsVariables: [
|
|
{
|
|
"identifier": "tagMarker",
|
|
"name": "Tag word marker",
|
|
"description": "A word that starts with this characters is recognized as tag",
|
|
"type": "string",
|
|
"default": "@",
|
|
}
|
|
]
|
|
|
|
/**
|
|
* Handles note tagging for a note
|
|
*
|
|
* This function is called when tags are added to, removed from or renamed in
|
|
* a note or the tags of a note should be listed
|
|
*
|
|
* @param note
|
|
* @param action can be "add", "remove", "rename" or "list"
|
|
* @param tagName tag name to be added, removed or renamed
|
|
* @param newTagName tag name to be renamed to if action = "rename"
|
|
* @return string or string-list (if action = "list")
|
|
*/
|
|
function noteTaggingHook(note, action, tagName, newTagName) {
|
|
var noteText = note.noteText;
|
|
var tagRegExp = RegExp("\\B%1(?=($|\\s|\\b))".arg(escapeRegExp(tagMarker + tagName).replace(/ /g, "_")));
|
|
|
|
switch (action) {
|
|
// adds the tag "tagName" to the note
|
|
// the new note text has to be returned so that the note can be updated
|
|
// returning an empty string indicates that nothing has to be changed
|
|
case "add":
|
|
// check if tag already exists
|
|
if (noteText.search(tagRegExp) > 0) {
|
|
return "";
|
|
}
|
|
|
|
// add the tag at the end of the note
|
|
noteText += "\n" + tagMarker + tagName.replace(/ /g, "_");
|
|
return noteText;
|
|
break;
|
|
|
|
// removes the tag "tagName" from the note
|
|
// the new note text has to be returned so that the note can be updated
|
|
// returning an empty string indicates that nothing has to be changed
|
|
case "remove":
|
|
noteText = noteText.replace(tagRegExp, "");
|
|
return noteText;
|
|
break;
|
|
|
|
// renames the tag "tagName" in the note to "newTagName"
|
|
// the new note text has to be returned so that the note can be updated
|
|
// returning an empty string indicates that nothing has to be changed
|
|
case "rename":
|
|
noteText = noteText.replace(tagRegExp, tagMarker + newTagName.replace(/ /g, "_"));
|
|
return noteText;
|
|
break;
|
|
|
|
// returns a list of all tag names of the note
|
|
case "list":
|
|
var re = new RegExp("\\B%1([^\\s,;]+)".arg(escapeRegExp(tagMarker)), "gi"),
|
|
result, tagNameList = [];
|
|
|
|
while ((result = re.exec(noteText)) !== null) {
|
|
var tagName = result[1].replace(/_/g, " ");
|
|
|
|
// add the tag if it wasn't in the list
|
|
if (tagNameList.indexOf(tagName) == -1) {
|
|
tagNameList.push(tagName);
|
|
}
|
|
}
|
|
return tagNameList;
|
|
break;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
/**
|
|
* Escapes a string for regular expressions
|
|
*/
|
|
function escapeRegExp(str) {
|
|
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
|
|
}
|
|
}
|