Commit c749e9be authored by ransome1's avatar ransome1
Browse files

Added support for strict recurrences

parent cd5ce69f
......@@ -59,10 +59,11 @@
]
},
"icon": "assets/icons/sleek.icns",
"category": "public.app-category.productivity"
"category": "public.app-category.productivity",
"artifactName": "${productName}-${version}-mac.${ext}"
},
"nsis": {
"artifactName": "${productName}-${version}-Setup.${ext}"
"artifactName": "${productName}-${version}-win-setup.${ext}"
},
"win": {
"target": [
......
......@@ -140,6 +140,10 @@ nav ul li.is-highlighted a {
#todoTableSearchContainer {
background-color: #212224;
}
#todoTableSearchContainer .icon.is-left i,
#todoTableSearchContainer .icon.is-right i {
color: #4a4a4a;
}
#todoTableSearchContainer #btnToggleViewContainer {
background: transparent !important;
}
......
{"version":3,"sourceRoot":"","sources":["../scss/dark.scss","../scss/variables.scss"],"names":[],"mappings":"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","file":"dark.css"}
\ No newline at end of file
{"version":3,"sourceRoot":"","sources":["../scss/dark.scss","../scss/variables.scss"],"names":[],"mappings":"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","file":"dark.css"}
\ No newline at end of file
......@@ -78,6 +78,9 @@ table.files tr td:first-child {
table.files tr td:last-child {
cursor: pointer;
}
table.files tr td:last-child i {
color: #3273dc;
}
body::-webkit-scrollbar {
display: none;
......@@ -379,7 +382,7 @@ nav ul:nth-child(2) {
filter: opacity(75%) grayscale(100%);
}
#drawerContainer .drawer .button.is-greyed-out {
cursor: default;
cursor: not-allowed;
}
#drawerContainer .drawer h4.is-4 {
font-size: 1.35em;
......@@ -437,15 +440,15 @@ nav ul:nth-child(2) {
position: sticky;
top: 0;
z-index: 45;
/*.icon.is-left svg,
.icon.is-right svg {
color: $dark-grey;
}*/
}
#todoTableSearchContainer .icon.is-left {
top: 0.65em;
left: 0.65em;
}
#todoTableSearchContainer .icon.is-left i,
#todoTableSearchContainer .icon.is-right i {
color: #ccc;
}
#todoTableSearchContainer.is-active {
display: block;
......@@ -521,7 +524,7 @@ nav ul:nth-child(2) {
background: none;
}
#todoTable .flex-table .flex-row span.tag {
margin: 0.25em 0.25em 0 0;
margin: 0 0.25em 0 0;
}
#todoTable .flex-table .flex-row span.tag.projects {
background: #f1d6f1;
......@@ -535,22 +538,17 @@ nav ul:nth-child(2) {
}
#todoTable .flex-table .flex-row.text {
width: auto;
flex: 1;
max-width: 88%;
flex: 1;
line-height: 1.7em;
cursor: pointer;
color: #4a4a4a;
/*svg {
color: inherit;
}*/
/*.categories {
margin-bottom: .5em;
}*/
}
#todoTable .flex-table .flex-row.text .button {
font-size: 1em;
font-size: 1.1em;
font-family: FreeSansBold;
height: auto;
padding: 0em 0.4em;
padding: 0 0.4em;
}
#todoTable .flex-table .flex-row.text .priority {
background: transparent;
......@@ -609,7 +607,7 @@ nav ul:nth-child(2) {
position: absolute;
top: -1.4em;
right: -1.5em;
z-index: 60;
z-index: 50;
display: none;
}
#todoTable .flex-table .flex-row.itemDueDate .tags .tag {
......@@ -1062,12 +1060,16 @@ nav ul:nth-child(2) {
.modal.content .modal-card-body table.settings tr td:last-child {
width: 25%;
}
.modal.content .modal-card-body table.shortcuts td .tag {
font-size: 1em !important;
.modal.content .modal-card-body table.shortcuts th:nth-child(2),
.modal.content .modal-card-body table.shortcuts th:nth-child(3) {
width: 13em;
}
.modal.content .modal-card-body table.shortcuts tr:last-child {
border: none;
}
.modal.content .modal-card-body table.shortcuts td .tag {
font-size: 1em !important;
}
.modal.content .modal-card-body.is-active {
display: block;
}
......@@ -1114,7 +1116,7 @@ nav ul:nth-child(2) {
position: fixed;
right: 2em;
bottom: 1em;
z-index: 40;
z-index: 55;
}
.messages i {
color: #3273dc;
......
This diff is collapsed.
......@@ -555,7 +555,7 @@
<td><span class="tag is-info is-large">B</span></td>
</tr>
<tr>
<td>Archive completed todos to done.txt file</td>
<td id="helpTabKeyboardTR17TD1"></td>
<td><span class="tag is-info is-large">A</span></td>
<td><span class="tag is-info is-large">A</span></td>
</tr>
......@@ -590,7 +590,7 @@
<td><span class="tag is-dark is-large">cmd</span> <i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">C</span></td>
</tr>
<tr>
<th colspan="3"><h5 class="title is-5" style="margin-top: .75em;">While adding/editing todos</h5></th>
<th colspan="3"><h5 class="title is-5" style="margin-top: .75em;" id="helpTabKeyboardSubtitle"></h5></th>
</tr>
<tr>
<td id="helpTabKeyboardTR7TD1"></td>
......@@ -598,24 +598,24 @@
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">A-Z</span></td>
</tr>
<tr>
<td>Increase/decrease priority</td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Up/Down</span></td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Up/Down</span></td>
<td id="helpTabKeyboardTR13TD1"></td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-up"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-down"></i></span></td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-up"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-down"></i></span></td>
</tr>
<tr>
<td>Clear priority</td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Right/Left</span></td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Right/Left</span></td>
<td id="helpTabKeyboardTR14TD1"></td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-left"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-right"></i></span></td>
<td><span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-left"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-right"></i></span></td>
</tr>
<tr>
<td>Increase/decrease due date</td>
<td><span class="tag is-dark is-large">Ctrl + Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Up/Down</span></td>
<td><span class="tag is-dark is-large">cmd + Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Up/Down</span></td>
<td id ="helpTabKeyboardTR15TD1"></td>
<td><span class="tag is-dark is-large">Ctrl</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-up"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-down"></i></span></td>
<td><span class="tag is-dark is-large">cmd</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-up"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-down"></i></span></td>
</tr>
<tr>
<td>Clear due date</td>
<td><span class="tag is-dark is-large">Ctrl + Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Right/Left</span></td>
<td><span class="tag is-dark is-large">cmd + Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large">Right/Left</span></td>
<td id ="helpTabKeyboardTR16TD1"></td>
<td><span class="tag is-dark is-large">Ctrl</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-left"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-right"></i></span></td>
<td><span class="tag is-dark is-large">cmd</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-dark is-large">Alt</span>&nbsp;<i class="fas fa-plus"></i>&nbsp;<span class="tag is-info is-large"><i class="fas fa-arrow-left"></i>&nbsp;/&nbsp;<i class="fas fa-arrow-right"></i></span></td>
</tr>
<tr>
<td id="helpTabKeyboardTR10TD1"></td>
......
......@@ -61,6 +61,20 @@ const settingsTabSettingsNotificationsBody = document.getElementById("settingsTa
const settingsTabSettingsTray = document.getElementById("settingsTabSettingsTray");
const settingsTabSettingsTrayBody = document.getElementById("settingsTabSettingsTrayBody");
const helpTabKeyboardSubtitle = document.getElementById("helpTabKeyboardSubtitle");
const helpTabKeyboardTR13TD1 = document.getElementById("helpTabKeyboardTR13TD1");
const helpTabKeyboardTR14TD1 = document.getElementById("helpTabKeyboardTR14TD1");
const helpTabKeyboardTR15TD1 = document.getElementById("helpTabKeyboardTR15TD1");
const helpTabKeyboardTR16TD1 = document.getElementById("helpTabKeyboardTR16TD1");
const helpTabKeyboardTR17TD1 = document.getElementById("helpTabKeyboardTR17TD1");
helpTabKeyboardSubtitle.innerHTML = translations.helpTabKeyboardSubtitle;
helpTabKeyboardTR13TD1.innerHTML = translations.helpTabKeyboardTR13TD1;
helpTabKeyboardTR14TD1.innerHTML = translations.helpTabKeyboardTR14TD1;
helpTabKeyboardTR15TD1.innerHTML = translations.helpTabKeyboardTR15TD1;
helpTabKeyboardTR16TD1.innerHTML = translations.helpTabKeyboardTR16TD1;
helpTabKeyboardTR17TD1.innerHTML = translations.helpTabKeyboardTR17TD1;
helpTab1Title.innerHTML = translations.shortcuts;
helpTab2Title.innerHTML = translations.priorities;
helpTab3Title.innerHTML = translations.helpTab3Title;
......
......@@ -149,14 +149,14 @@ function generateFilterData(autoCompleteCategory, autoCompleteValue, autoComplet
categories.forEach((category) => {
// array to collect all the available filters in the data
let filters = new Array();
let temp;
let filterArray;
// run the array and collect all possible filters, duplicates included
if(userData.showEmptyFilters) {
temp = items.objects;
filterArray = items.objects;
} else {
temp = items.filtered;
filterArray = items.filtered;
}
temp.forEach((item) => {
filterArray.forEach((item) => {
// check if the object has values in either the project or contexts field
if(item[category]) {
// push all filters found so far into an array
......@@ -239,6 +239,7 @@ function generateFilterData(autoCompleteCategory, autoCompleteValue, autoComplet
}, {});
// build the filter buttons
if(filters[0]!="" && filters.length>0) {
// add category length to total filter count
generateFilterButtons(category, autoCompleteValue, autoCompletePrefix, caretPosition).then(response => {
if(userData.hideFilterCategories.includes(category)) {
response.classList.add("is-greyed-out");
......
......@@ -6,16 +6,27 @@ import { convertDate, isFuture } from "./date.mjs";
function splitRecurrence(recurrence) {
let mul = 1;
let period = recurrence;
let plus = false;
if(recurrence !== undefined && recurrence.length > 1) {
mul = Number(recurrence.substr(0, recurrence.length - 1));
if (recurrence.substr(0,1) == "+") {
plus = true;
if (recurrence.length > 2)
mul = Number(recurrence.substr(1, recurrence.length - 2));
} else {
mul = Number(recurrence.substr(0, recurrence.length - 1));
}
if (mul == 0) {
mul = 1;
}
period = recurrence.substr(-1);
}
return {
mul: mul,
period: period,
plus: plus,
toString: function() {
return this.mul == 1 || this.period === undefined ?
this.period : this.mul + this.period;
this.period : (this.plus ? "+" : "") + this.mul + this.period;
}
};
}
......@@ -27,8 +38,8 @@ function generateRecurrence(todo) {
recurringTodo.completed = null;
// if the item to be duplicated has been completed before the due date, the recurring item needs to be set incomplete again
recurringTodo.date = new Date;
recurringTodo.due = getRecurrenceDate(recurringTodo.date, todo.rec);
recurringTodo.dueString = convertDate(getRecurrenceDate(recurringTodo.date, todo.rec));
recurringTodo.due = getRecurrenceDate(todo.due, todo.rec);
recurringTodo.dueString = convertDate(recurringTodo.due);
// get index of recurring todo
const index = items.objects.map(function(item) {return item.toString().replaceAll(String.fromCharCode(16)," "); }).indexOf(recurringTodo.toString().replaceAll(String.fromCharCode(16)," "));
// only add recurring todo if it is not already in the list
......@@ -47,6 +58,11 @@ function generateRecurrence(todo) {
}
function getRecurrenceDate(due, recurrence) {
let recSplit = splitRecurrence(recurrence);
if (!recSplit.plus) {
// no plus in recurrence expression, so do the default "non-strict" recurrence.
// (Otherwise we will use the previous due date, for strict recurrence.)
due = new Date(); // use today's date as base for recurrence
}
let days = 0;
let months = 0;
switch (recSplit.period) {
......
......@@ -4,7 +4,7 @@ function RecExtension() {
RecExtension.prototype = new TodoTxtExtension();
RecExtension.prototype.parsingFunction = function(line) {
var rec = null;
var recRegex = /rec:([hbdwmy]|[1-9][0-9]*[hbdwmy])/;
var recRegex = /rec:(\+?[0-9]*[hbdwmy])/;
var matchRec = recRegex.exec(line);
if ( matchRec !== null ) {
rec = matchRec[1];
......
......@@ -134,5 +134,11 @@
"reviewWindowsStore": "在Windows Store上给我们建议",
"shareTwitter": "通过Twitter分享sleek",
"shareFacebook": "通过Facebook分享sleek",
"shareLinkedin": "通过LinkedIn分享sleek"
"shareLinkedin": "通过LinkedIn分享sleek",
"helpTabKeyboardSubtitle": "When add/edit todo window is open",
"helpTabKeyboardTR13TD1": "Increase/decrease priority",
"helpTabKeyboardTR14TD1": "Remove priority",
"helpTabKeyboardTR15TD1": "Increase/decrease due date",
"helpTabKeyboardTR16TD1": "Remove due date",
"helpTabKeyboardTR17TD1": "Archive completed todo in done.txt"
}
......@@ -114,11 +114,11 @@
"settingsTabSettingsTray": "In die Tray-Leiste minimieren",
"settingsTabSettingsTrayBody": "In dieser Einstellung wird sleek in die Tray-Leiste minimiert und ist nicht mehr in der Task-Bar sichtbar. <strong>sleek wird sich selbst neustarten. Wenn das nicht passiert, starte das Programm bitte händisch neu.</strong>",
"archive": "Archivieren",
"shortcuts": "Shortcuts",
"function": "Function",
"priorities": "Priorities",
"helpTab3Title": "Contexts and projects",
"helpTab4Title": "Dates and recurrences",
"shortcuts": "Tastaturkürzel",
"function": "Funktion",
"priorities": "Prioritäten",
"helpTab3Title": "Kontexte und Projekte",
"helpTab4Title": "Daten und Wiederholungen",
"helpTabPrioritiesTitle": "Adding a priority",
"helpTabPrioritiesBody": "Important todos need to have an important spot on your list. Simply append a \"(A)\" at the beginning of the todo to achieve this. You're not bound to (A) as everything from A to Z is possible. But only A to C will have a colored bar next to the todo. All other priorities have a neutral grey colored bar attached. To assign a priority using a keyboard shortcut, press Ctrl + Shift + A to Z while the add/edit window is open",
"helpTabContextsProjectsTitle": "Adding contexts and projects",
......@@ -127,13 +127,20 @@
"helpTabDatesRecurrencesBody1": "sleek will add the start date automatically equal to the todos' creation date. If you want to change it, you need to look for the first date in your todo right after the priority tag. Todos with due dates will be bumped up your list. The closer the due date comes the higher it will be sorted. Is the due date set to today or to a date in the past, it will be marked red and will stay on top of your list. To add a due date append \"due:\" and add the due date formatted as <strong>YYYY-MM-DD (e.g. due:2021-03-07)</strong>. Alternatively use the date picker, it will do the formatting for you.",
"helpTabDatesRecurrencesTitle2": "Adding a recurrence",
"helpTabDatesRecurrencesBody2": "Once a due date has been set, you can define a recurrence. If for instance a todo is due today and you set up a weekly recurrence, sleek will duplicate the todo and adjust start and due date of the duplicated todo according to your recurrence setting. To set a recurrence use the recurrence picker or type <strong>rec:</strong> and add <strong>d</strong> (daily), <strong>w</strong> (weekly), <strong>m</strong> (monthly) or <strong>y</strong> (annually).",
"helpTabKeyboardTR7TD1": "Set priority",
"helpTabKeyboardTR7TD1": "Priorität hinzufügen",
"helpTabKeyboardTR8TD1": "Toggle filter drawer",
"helpTabKeyboardTR10TD1": "Submit todo",
"helpTabKeyboardTR10TD1": "Todo speichern",
"submitIssuesOnGithub": "Fehler auf Github melden",
"reviewSourceforge": "Bewertung auf SourceForge",
"reviewWindowsStore": "Bewertung im Windows Store",
"shareTwitter": "Auf Twitter teilen",
"shareFacebook": "Auf Facebook teilen",
"shareLinkedin": "Auf LinkedIn teilen"
"shareLinkedin": "Auf LinkedIn teilen",
"helpTabKeyboardSubtitle": "Wenn das Todo-Bearbeiten/-Hinzufügen-Fenster geöffnet ist",
"helpTabKeyboardTR13TD1": "Priorität erhöhen/verringern",
"helpTabKeyboardTR14TD1": "Priorität entfernen",
"helpTabKeyboardTR15TD1": "Fälligkeit erhöhen/verringern",
"helpTabKeyboardTR16TD1": "Fälligkeit entfernen",
"helpTabKeyboardTR17TD1": "Erledigte Todos in done.txt archivieren",
"helpTabKeyboardTR1TH1": "Funktion"
}
......@@ -7,8 +7,8 @@
"viewHeadlineFilterList": "Filter sidebar",
"viewHeadlineAppView": "App view",
"viewToggleZoom": "Zoom",
"viewToggleShowEmptyFilters": "Empty filters",
"toggleCompletedTodos": "Toggle completed todos",
"viewToggleShowEmptyFilters": "Empty filters",
"toggleCompletedTodos": "Show/hide completed todos",
"sortBy": "Sort by",
"completedTodos": "Completed todos",
"sortCompletedLast": "Completed todos at the end",
......@@ -134,5 +134,11 @@
"reviewWindowsStore": "Review sleek on Windows Store",
"shareTwitter": "Share sleek on Twitter",
"shareFacebook": "Share sleek on Facebook",
"shareLinkedin": "Share sleek on LinkedIn"
"shareLinkedin": "Share sleek on LinkedIn",
"helpTabKeyboardSubtitle": "When add/edit todo window is open",
"helpTabKeyboardTR13TD1": "Increase/decrease priority",
"helpTabKeyboardTR14TD1": "Remove priority",
"helpTabKeyboardTR15TD1": "Increase/decrease due date",
"helpTabKeyboardTR16TD1": "Remove due date",
"helpTabKeyboardTR17TD1": "Archive completed todo in done.txt"
}
......@@ -39,8 +39,8 @@
"overPast": "Atrasado",
"formErrorWritingFile": "<strong>Error:</strong> No se pueden guardar los cambios en el fichero. Comprueba si el fichero todo.txt existe y si tienes suficientes permisos para editarlo",
"formInfoNoInput": "Por favor, añada un todo en el campo de texto. Si no estás seguro de cómo hacerlo, echa un vistazo rápido a <a href=\"https://github.com/todotxt/todo.txt\" target=\"_blank\">todo.txt syntax</a>.",
"formInfoDuplicate": "This todo already exists and duplicates won't be written into your todo.txt file.",
"formInfoIncomplete": "Your input is incomplete, please add at least the todo text.",
"formInfoDuplicate": "Esta tarea ya existe y los duplicados no se escribirán en su archivo todo.txt.",
"formInfoIncomplete": "Su entrada está incompleta, agregue al menos el texto de la tarea.",
"formSelectDueDate": "Caducidad",
"cancel": "Eliminar",
"save": "guardar",
......@@ -90,48 +90,54 @@
"year_plural": "añares",
"yearly": "Anual",
"noRecurrence": "No repetición",
"errorEventLogging": "Error and event logging",
"messageLoggingBody": "You can support this project by enabling an anonymized error and event logging. It will log errors that occur and features you use. You can enable this feature in settings.",
"errorEventLogging": "Registro de errores y eventos",
"messageLoggingBody": "Puede apoyar este proyecto habilitando un registro anónimo de errores y eventos. Registrará los errores que se produzcan y las funciones que utilice. Puede habilitar esta función en la configuración.",
"messageShareTitle": "sleek te <i class=\"fas fa-heart\"></i>",
"messageShareBody": "Este proyecto agradece las críticas honestas sobre <i class=\"fas fa-star\"></i>&nbsp;<a href=\"https://sourceforge.net/projects/sleek/reviews\" target=\"_blank\">SourceForge</a>, informes de errores sobre <i class=\"fab fa-github\"></i>&nbsp;<a href=\"https://github.com/ransome1/sleek/issues\" target=\"_blank\">Github</a> y recomendaciones sobre",
"language": "Language",
"settingsTabSettingsLanguageBody": "sleek will automatically set the language according to your computers settings. If you prefer a different language, you can change it manually. <strong>sleek will restart itself. If this doesn't happen, please start the application again manually.</strong>",
"notifications": "Notifications",
"settingsTabSettingsNotificationsBody": "sleek can send you notifications for todos that are due today and tomorrow. The app needs to be running for this feature.",
"darkmode": "Dark mode",
"settingsTabSettingsDarkmodeBody": "If sleeks regular user interface is too bright for your general taste or for your current environment, the dark mode might be a helpful alternative.",
"settingsTabSettingsLoggingBody": "You can contribute to this project, by enabling anonymized error and event logging. More information can be found in sleeks' <a href=\"https://github.com/ransome1/sleek/blob/master/PRIVACY.md\" target=\"_blank\">privacy policy</a>.",
"settingsTabAboutContribute": "sleek is open source and you can contribute to make it better",
"settingsTabAboutCopyrightLicense": "Copyright and license",
"settingsTabAboutCopyrightLicenseBody": "Copyright (c) 2021 Robin Ahle. sleek is available under the <a href=\"https://opensource.org/licenses/MIT\" target=\"_blank\">MIT license</a>. See <a href=\"https://github.com/ransome1/sleek/blob/master/LICENSE\" target=\"_blank\">LICENSE</a> for the full license text.",
"settingsTabAboutPrivacy": "Privacy Policy",
"settingsTabAboutPrivacyBody": "I am not interested in who sleek's users are and will therefor not gather unnecessary data. However I would like to know how many users are actively using sleek and, in case a user explicitly agrees to it, how sleek is being used. The data is being anonymized, before it gets send to a privately hosted Matomo instance exclusively via a secure SSL-encrypted connection. See <a href=\"https://github.com/ransome1/sleek/blob/master/PRIVACY.md\" target=\"_blank\">Privacy Policy</a> for further information.",
"settingsTabAboutExternalLibraries": "Used software that I did not develop",
"settingsTabSettingsArchive": "Archive todos",
"settingsTabSettingsArchiveBody": "Completed todos will be removed from the current todo.txt file and inserted into a done.txt file. If this file doesn't already exist in the current directory, it will be created.",
"language": "Idioma",
"settingsTabSettingsLanguageBody": "sleek establecerá automáticamente el idioma de acuerdo con la configuración de su computadora. Si prefiere un idioma diferente, puede cambiarlo manualmente. <strong> elegante se reiniciará solo. Si esto no sucede, vuelva a iniciar la aplicación manualmente. </strong>",
"notifications": "Notificaciones",
"settingsTabSettingsNotificationsBody": "sleek puede enviarle notificaciones para todos los que vencen hoy y mañana. La aplicación debe estar ejecutándose para esta función.",
"darkmode": "Modo oscuro",
"settingsTabSettingsDarkmodeBody": "Si la interfaz de usuario regular sleek es demasiado brillante para su gusto general o para su entorno actual, el modo oscuro podría ser una alternativa útil.",
"settingsTabSettingsLoggingBody": "Puede contribuir a este proyecto habilitando el registro anónimo de errores y eventos. Puede encontrar más información en la elegante <a href=\"https://github.com/ransome1/sleek/blob/master/PRIVACY.md\" target=\"_blank\"> política de privacidad </a>.",
"settingsTabAboutContribute": "sleek es de código abierto y puedes contribuir a mejorarlo",
"settingsTabAboutCopyrightLicense": "Copyright y licencia",
"settingsTabAboutCopyrightLicenseBody": "Copyright (c) 2021 Robin Ahle. sleek está disponible bajo la <a href=\"https://opensource.org/licenses/MIT\" target=\"_blank\"> licencia MIT </a>. Consulte <a href=\"https://github.com/ransome1/sleek/blob/master/LICENSE\" target=\"_blank\"> LICENCIA </a> para obtener el texto completo de la licencia.",
"settingsTabAboutPrivacy": "Política de privacidad",
"settingsTabAboutPrivacyBody": "No estoy interesado en quiénes son los usuarios de Sleek y, por lo tanto, no recopilaré datos innecesarios. Sin embargo, me gustaría saber cuántos usuarios están usando de forma activa sleek y, en caso de que un usuario lo acepte explícitamente, qué tan sleek se está utilizando. Los datos se anonimizan, antes de que se envíen a una instancia de Matomo alojada de forma privada exclusivamente a través de una conexión segura cifrada con SSL. Consulte la <a href=\"https://github.com/ransome1/sleek/blob/master/PRIVACY.md\" target=\"_blank\"> Política de privacidad </a> para obtener más información.",
"settingsTabAboutExternalLibraries": "Usé software que no desarrollé",
"settingsTabSettingsArchive": "Archivar todos",
"settingsTabSettingsArchiveBody": "Los todos completados se eliminarán del archivo todo.txt actual y se insertarán en un archivo done.txt. Si este archivo aún no existe en el directorio actual, se crea.",
"settingsTabSettingsTray": "Minimizar a la barra de la bandeja",
"settingsTabSettingsTrayBody": "Con esta configuración, sleek se minimiza en la barra de la bandeja y ya no es visible en la barra de tareas. <strong>sleek se reiniciará solo. Si eso no sucede, reinicie el programa manualmente.</strong>",
"archive": "Archive",
"shortcuts": "Shortcuts",
"function": "Function",
"priorities": "Priorities",
"helpTab3Title": "Contexts and projects",
"helpTab4Title": "Dates and recurrences",
"archive": "Archivo",
"shortcuts": "Atajos de teclado",
"function": "Funcn",
"priorities": "Prioridades",
"helpTab3Title": "Contextos y proyectos",
"helpTab4Title": "Fechas y recurrencias",
"helpTabPrioritiesTitle": "Adding a priority",
"helpTabPrioritiesBody": "Important todos need to have an important spot on your list. Simply append a \"(A)\" at the beginning of the todo to achieve this. You're not bound to (A) as everything from A to Z is possible. But only A to C will have a colored bar next to the todo. All other priorities have a neutral grey colored bar attached. To assign a priority using a keyboard shortcut, press Ctrl + Shift + A to Z while the add/edit window is open",
"helpTabPrioritiesBody": "Important todos need to have an important spot on your list. Simply append a \"(A)\" at the beginning of the todo to achieve this. You're not bound to (A) as everything from A to Z is possible. But only A to C will have a colored bar next to the todo. All other priorities have a neutral grey colored bar attached. To assign a priority using a keyboard shortcut, press Alt + A to Z while the add/edit window is open",
"helpTabContextsProjectsTitle": "Adding contexts and projects",
"helpTabContextsProjectsBody": "If you work on projects that consists of several tasks, you can assign these tasks by appending \"+\" followed by the project name. Contexts define the situation in which this todo is relevant to you. According to David Allen's concept of <a href=\"https://en.wikipedia.org/wiki/Getting_Things_Done\" target=\"_blank\">Getting Things Done</a>, the \"context\" could be i.e. at home, at work, out shopping, by the phone, at your computer, with a particular person. To add a context just append a \"@\" plus the context name. For more information on todo.txt <a href=\"https://github.com/todotxt/todo.txt\" target=\"_blank\">click here</a>.<br><br>Neither projects nor context allow the use of spaces, so write them in one word. You can append as many projects and contexts as you wish.",
"helpTabDatesRecurrencesTitle1": "Adding dates",
"helpTabDatesRecurrencesBody1": "sleek will add the start date automatically equal to the todos' creation date. If you want to change it, you need to look for the first date in your todo right after the priority tag. Todos with due dates will be bumped up your list. The closer the due date comes the higher it will be sorted. Is the due date set to today or to a date in the past, it will be marked red and will stay on top of your list. To add a due date append \"due:\" and add the due date formatted as <strong>YYYY-MM-DD (e.g. due:2021-03-07)</strong>. Alternatively use the date picker, it will do the formatting for you.",
"helpTabDatesRecurrencesTitle2": "Adding a recurrence",
"helpTabDatesRecurrencesBody2": "Once a due date has been set, you can define a recurrence. If for instance a todo is due today and you set up a weekly recurrence, sleek will duplicate the todo and adjust start and due date of the duplicated todo according to your recurrence setting. To set a recurrence use the recurrence picker or type <strong>rec:</strong> and add <strong>d</strong> (daily), <strong>w</strong> (weekly), <strong>m</strong> (monthly) or <strong>y</strong> (annually).",
"helpTabKeyboardTR7TD1": "Set priority",
"helpTabKeyboardTR8TD1": "Toggle filter drawer",
"helpTabKeyboardTR10TD1": "Submit todo",
"submitIssuesOnGithub": "Submit issues on Github",
"reviewSourceforge": "Review sleek on SourceForge",
"reviewWindowsStore": "Review sleek on Windows Store",
"shareTwitter": "Share sleek on Twitter",
"shareFacebook": "Share sleek on Facebook",
"shareLinkedin": "Share sleek on LinkedIn"
"helpTabKeyboardTR7TD1": "Fijar prioridad",
"helpTabKeyboardTR8TD1": "Alternar barra lateral de filtro",
"helpTabKeyboardTR10TD1": "Enviar todo",
"submitIssuesOnGithub": "Enviar problemas en Github",
"reviewSourceforge": "Revisión sleek en SourceForge",
"reviewWindowsStore": "Revisión sleek en la Windows Store",
"shareTwitter": "Comparte sleek en Twitter",
"shareFacebook": "Comparte sleek en Facebook",
"shareLinkedin": "Comparte sleek en LinkedIn",
"helpTabKeyboardSubtitle": "Cuando la ventana de agregar / editar todo está abierta",
"helpTabKeyboardTR13TD1": "Aumentar/disminuir prioridad",
"helpTabKeyboardTR14TD1": "Quitar prioridad",
"helpTabKeyboardTR15TD1": "Aumentar/disminuir la fecha de vencimiento",
"helpTabKeyboardTR16TD1": "Eliminar fecha de vencimiento",
"helpTabKeyboardTR17TD1": "Archivar todo completado en done.txt"
}
......@@ -113,11 +113,11 @@
"settingsTabSettingsTray": "Réduire à la barre de plateau",
"settingsTabSettingsTrayBody": "Avec ce paramètre, sleek est réduite à la barre de plateau et n'est plus visible dans la barre des tâches. <strong>sleek redémarrera de lui-même. Si cela ne se produit pas, veuillez redémarrer le programme manuellement.</strong>",
"archive": "Archiver",
"shortcuts": "Shortcuts",
"function": "Function",
"priorities": "Priorities",
"helpTab3Title": "Contexts and projects",
"helpTab4Title": "Dates and recurrences",
"shortcuts": "Raccourcis clavier",
"function": "Une fonction",
"priorities": "Priorités",
"helpTab3Title": "Contextes et projets",
"helpTab4Title": "Dates et récurrences",
"helpTabPrioritiesTitle": "Adding a priority",
"helpTabPrioritiesBody": "Important todos need to have an important spot on your list. Simply append a \"(A)\" at the beginning of the todo to achieve this. You're not bound to (A) as everything from A to Z is possible. But only A to C will have a colored bar next to the todo. All other priorities have a neutral grey colored bar attached. To assign a priority using a keyboard shortcut, press Ctrl + Shift + A to Z while the add/edit window is open",
"helpTabContextsProjectsTitle": "Adding contexts and projects",
......@@ -126,13 +126,19 @@
"helpTabDatesRecurrencesBody1": "sleek will add the start date automatically equal to the todos' creation date. If you want to change it, you need to look for the first date in your todo right after the priority tag. Todos with due dates will be bumped up your list. The closer the due date comes the higher it will be sorted. Is the due date set to today or to a date in the past, it will be marked red and will stay on top of your list. To add a due date append \"due:\" and add the due date formatted as <strong>YYYY-MM-DD (e.g. due:2021-03-07)</strong>. Alternatively use the date picker, it will do the formatting for you.",
"helpTabDatesRecurrencesTitle2": "Adding a recurrence",
"helpTabDatesRecurrencesBody2": "Once a due date has been set, you can define a recurrence. If for instance a todo is due today and you set up a weekly recurrence, sleek will duplicate the todo and adjust start and due date of the duplicated todo according to your recurrence setting. To set a recurrence use the recurrence picker or type <strong>rec:</strong> and add <strong>d</strong> (daily), <strong>w</strong> (weekly), <strong>m</strong> (monthly) or <strong>y</strong> (annually).",
"helpTabKeyboardTR7TD1": "Set priority",
"helpTabKeyboardTR8TD1": "Toggle filter drawer",
"helpTabKeyboardTR10TD1": "Submit todo",
"submitIssuesOnGithub": "Submit issues on Github",
"reviewSourceforge": "Review sleek on SourceForge",
"reviewWindowsStore": "Review sleek on Windows Store",
"shareTwitter": "Share sleek on Twitter",
"shareFacebook": "Share sleek on Facebook",
"shareLinkedin": "Share sleek on LinkedIn"
"helpTabKeyboardTR7TD1": "Définir la priorité",
"helpTabKeyboardTR8TD1": "Afficher/masquer la barre latérale des filtres",
"helpTabKeyboardTR10TD1": "Enregistrer à faire",
"submitIssuesOnGithub": "Soumettre des problèmes sur Github",
"reviewSourceforge": "Revoir sleek sur SourceForge",
"reviewWindowsStore": "Revoir sleek sur le Windows Store",
"shareTwitter": "Partagez sleek sur Twitter",
"shareFacebook": "Partagez sleek sur Facebook",
"shareLinkedin": "Partagez sleek sur LinkedIn",
"helpTabKeyboardSubtitle": "Lorsque la fenêtre d'ajout/modification des tâches est ouverte",
"helpTabKeyboardTR13TD1": "Augmenter/diminuer la priorité",
"helpTabKeyboardTR14TD1": "Supprimer la priorité",
"helpTabKeyboardTR15TD1": "Augmentation/diminution de la date d'échéance",
"helpTabKeyboardTR16TD1": "Supprimer la date d'échéance",
"helpTabKeyboardTR17TD1": "Archive terminée todo dans done.txt"
}
......@@ -7,7 +7,7 @@
"viewHeadlineFilterList": "Barra laterale",
"viewHeadlineAppView": "Visualizzazione app",
"viewToggleZoom": "Zumata",
"viewToggleShowEmptyFilters": "Filtri vuoti",
"viewToggleShowEmptyFilters": "Filtri vuoti",
"sortBy": "Ordina per",
"completedTodos": "Todo completati",
"sortCompletedLast": "Tutto completato alla fine",
......@@ -103,7 +103,7 @@
"settingsTabAboutContribute": "sleek è open source e tu puoi contribuire a renderlo migliore",
"settingsTabAboutCopyrightLicense": "Copyright e licenze",
"settingsTabAboutCopyrightLicenseBody": "Copyright (c) 2021 Robin Ahle. sleek è rilasciato sotto <a href=\"https://opensource.org/licenses/MIT\" target=\"_blank\">MIT license</a>. Vedi <a href=\"https://github.com/ransome1/sleek/blob/master/LICENSE\" target=\"_blank\">LICENZA</a> per il testo completo della licenza.",
"settingsTabAboutPrivacy": "Privacy Policy",
"settingsTabAboutPrivacy": "Politica sulla riservatezza",
"settingsTabAboutPrivacyBody": "Non mi interessa chi sono gli utenti di sleek e pertanto non raccolgo nessun dato non necessario . Tuttavia mi piacerebbe sapere quanti utenti stanno attivamente usando sleek e, nel caso un utente dia esplicitamente il suo consenso, come sleek sta venendo usato. I dati verranno resi anonimi, prima che vengano inviati ad una server privato con una istanza di Matomo, esclusivamente tramite una connessione SSL sicura e privata. Vedi la <a href=\"https://github.com/ransome1/sleek/blob/master/PRIVACY.md\" target=\"_blank\">Privacy Policy</a> per maggiori informazioni.",
"settingsTabAboutExternalLibraries": "Sofwtare utilizzato che non ho sviluppato io",
"settingsTabSettingsArchive": "Archivia todo",
......@@ -132,5 +132,12 @@
"reviewWindowsStore": "Recensisci sleek su Windows Store",
"shareTwitter": "Condividi sleek su Twitter",
"shareFacebook": "Condividi sleek su Facebook",
"shareLinkedin": "Condividi sleek su LinkedIn"
"shareLinkedin": "Condividi sleek su LinkedIn",
"helpTabKeyboardSubtitle": "Quando la finestra Aggiungi/Modifica cose da fare è aperta",
"helpTabKeyboardTR13TD1": "Aumenta/diminuisci priorità",
"helpTabKeyboardTR14TD1": "Rimuovi priorità",
"helpTabKeyboardTR15TD1": "Aumenta/diminuisci la data di scadenza",
"helpTabKeyboardTR16TD1": "Rimuovi la data di scadenza",
"helpTabKeyboardTR17TD1": "Archivia le attività completate in done.txt",
"toggleCompletedTodos": "Mostra/Nascondi cose completate"
}
......@@ -222,7 +222,6 @@ const createWindow = async function() {
}
userData.set("theme", getTheme());
}
console.log(userData.data.dismissedNotifications);
if(typeof userData.data.width != "number") userData.set("width", 1100);
if(typeof userData.data.height != "number") userData.set("height", 700);
if(typeof userData.data.horizontal != "number") userData.set("horizontal", 160);
......