From 3f8aa6f7e5ff44e124c61f933c44d54458b342ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ka=C5=BEim=C3=ADr?= Date: Tue, 24 Nov 2020 13:21:42 +0100 Subject: [PATCH 1/5] added option to prefill break time --- __tests__/__main__/time-math.js | 3 +- __tests__/__renderer__/user-preferences.js | 26 ++++++++---- css/styles.css | 2 +- js/classes/BaseCalendar.js | 43 +++++++++++++++++++ js/time-math.js | 2 +- js/user-preferences.js | 18 ++++++-- locales/ca-CA/translation.json | 3 ++ locales/de-DE/translation.json | 3 ++ locales/dev/translation.json | 3 ++ locales/en/translation.json | 3 ++ locales/es/translation.json | 3 ++ locales/fr-FR/translation.json | 3 ++ locales/hi/translation.json | 3 ++ locales/id/translation.json | 3 ++ locales/it/translation.json | 3 ++ locales/ko/translation.json | 3 ++ locales/mr/translation.json | 3 ++ locales/nl/translation.json | 3 ++ locales/pl/translation.json | 3 ++ locales/pt-BR/translation.json | 3 ++ locales/th-TH/translation.json | 3 ++ locales/zh-TW/translation.json | 3 ++ package-lock.json | 48 +++++++++++++++++----- src/preferences.html | 8 ++++ src/preferences.js | 2 +- 25 files changed, 176 insertions(+), 24 deletions(-) diff --git a/__tests__/__main__/time-math.js b/__tests__/__main__/time-math.js index 9072bba86..cd2968a80 100755 --- a/__tests__/__main__/time-math.js +++ b/__tests__/__main__/time-math.js @@ -162,8 +162,9 @@ describe('Time Math Functions', () => expect(validateTime('00:11')).toBeTruthy(); expect(validateTime('01:11')).toBeTruthy(); expect(validateTime('11:11')).toBeTruthy(); - expect(validateTime('24:00')).toBeTruthy(); + expect(validateTime('23:59')).toBeTruthy(); expect(validateTime('-04:00')).toBeTruthy(); + expect(validateTime('24:00')).not.toBeTruthy(); expect(validateTime('34:00')).not.toBeTruthy(); expect(validateTime('4:00')).not.toBeTruthy(); expect(validateTime('00:1')).not.toBeTruthy(); diff --git a/__tests__/__renderer__/user-preferences.js b/__tests__/__renderer__/user-preferences.js index ee822f495..bd506cba8 100755 --- a/__tests__/__renderer__/user-preferences.js +++ b/__tests__/__renderer__/user-preferences.js @@ -7,7 +7,7 @@ const { getUserPreferences, savePreferences, isNotBoolean, - isValidPreferenceTime, + isNotificationInterval, } = require('../../js/user-preferences'); const fs = require('fs'); @@ -23,19 +23,31 @@ describe('Should return false if the value is not boolean type', () => }); }); -describe('Should return true if the value is a valid time', () => +describe('Should return true if the value is a valid notification interval', () => { - test('Value as time format (hh:mm)', () => + test('Value as number (val >= 1 || val <= 30)', () => { - expect(isValidPreferenceTime('00:35')).toBe(true); + expect(isNotificationInterval(1)).toBe(true); + expect(isNotificationInterval(15)).toBe(true); + expect(isNotificationInterval(30)).toBe(true); + expect(isNotificationInterval(-5)).not.toBe(true); + expect(isNotificationInterval(0)).not.toBe(true); + expect(isNotificationInterval(31)).not.toBe(true); + expect(isNotificationInterval(60)).not.toBe(true); }); - test('Value as number type (val < 1 || val > 30)', () => + test('Value as string (val >= 1 || val <= 30)', () => { - expect(isValidPreferenceTime(60)).toBe(true); + expect(isNotificationInterval('1')).toBe(true); + expect(isNotificationInterval('30')).toBe(true); + expect(isNotificationInterval('-5')).not.toBe(true); + expect(isNotificationInterval('31')).not.toBe(true); + expect(isNotificationInterval('A')).not.toBe(true); + expect(isNotificationInterval('abc')).not.toBe(true); }); test('Value as boolean type', () => { - expect(isValidPreferenceTime(true)).toBe(false); + expect(isNotificationInterval(true)).not.toBe(true); + expect(isNotificationInterval(false)).not.toBe(true); }); }); diff --git a/css/styles.css b/css/styles.css index 611133cee..8c93e757e 100644 --- a/css/styles.css +++ b/css/styles.css @@ -659,7 +659,7 @@ input:disabled + .slider { left: 25px; } -#preferences-window #hours-per-day { +#preferences-window #hours-per-day, #break-time-interval { text-align: right; } diff --git a/js/classes/BaseCalendar.js b/js/classes/BaseCalendar.js index 7cfad1d41..3ea015115 100644 --- a/js/classes/BaseCalendar.js +++ b/js/classes/BaseCalendar.js @@ -274,6 +274,24 @@ class BaseCalendar return this._preferences['hide-non-working-days']; } + /** + * Returns if "enable prefill break time" was set in preferences + * @return {Boolean} + */ + _getEnablePrefillBreakTime() + { + return this._preferences['enable-prefill-break-time']; + } + + /** + * Returns "break time interval" set in preferences + * @return {string} + */ + _getBreakTimeInterval() + { + return this._preferences['break-time-interval']; + } + /** * Returns if "count today" was set in preferences. * @return {Boolean} @@ -388,6 +406,19 @@ class BaseCalendar this._togglePunchButton(enableButton); } + /** + * Calculates time for break end based on break interval + * @param {string} breakBegin + */ + _calculateBreakEnd(breakBegin) + { + let breakInterval = this._getBreakTimeInterval(); + let breakEnd = sumTime(breakBegin, breakInterval); + + breakEnd = validateTime(breakEnd) ? breakEnd : '23:59'; + return breakEnd; + } + /** * Adds the next missing entry on the actual day and updates calendar. */ @@ -410,14 +441,26 @@ class BaseCalendar const value = hourMinToHourFormatted(hour, min); const key = generateKey(year, month, day); const inputs = $('#' + key + ' input[type="time"]'); + let i = 0; for (const element of inputs) { if ($(element).val().length === 0) { $(element).val(value); + + // Prefill break time + if ( this._getEnablePrefillBreakTime() && + i !== inputs.length - 1 && + i % 2 === 1 + ) + { + const breakEnd = this._calculateBreakEnd(value); + $(inputs[i+1]).val(breakEnd); + } this._updateTimeDayCallback(key); break; } + i++; } } diff --git a/js/time-math.js b/js/time-math.js index 697b75c38..4066e5969 100644 --- a/js/time-math.js +++ b/js/time-math.js @@ -90,7 +90,7 @@ function sumTime(t1, t2) */ function validateTime(time) { - let re = new RegExp('[0-2][0-9]:[0-5][0-9]'); + let re = new RegExp('^-?(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$'); return re.test(time); } diff --git a/js/user-preferences.js b/js/user-preferences.js index d259d3acb..cc73a07ce 100644 --- a/js/user-preferences.js +++ b/js/user-preferences.js @@ -18,6 +18,8 @@ const defaultPreferences = { 'minimize-to-tray': true, 'hide-non-working-days': false, 'hours-per-day': '08:00', + 'enable-prefill-break-time': false, + 'break-time-interval': '00:30', 'notification': true, 'repetition': true, 'notifications-interval': '5', @@ -42,6 +44,7 @@ const booleanInputs = [ 'close-to-tray', 'minimize-to-tray', 'hide-non-working-days', + 'enable-prefill-break-time', 'notification', 'repetition', 'start-at-login', @@ -57,9 +60,13 @@ const booleanInputs = [ const timeInputs = [ 'notifications-interval', 'hours-per-day', + 'break-time-interval', ]; const isNotBoolean = (val) => typeof val !== 'boolean'; +const isNotificationInterval = (val) => !Number.isNaN(Number(val)) && isNotBoolean(val) && val >= 1 && val <= 30; + +//Don't use this. Use isNotificationInterval() and validateTime() const isValidPreferenceTime = (val) => validateTime(val) || Number.isNaN(Number(val)) || val < 1 || val > 30; /* @@ -151,10 +158,14 @@ function initPreferencesFileIfNotExistsOrInvalid() shouldSaveDerivedPrefs = true; } - if (timeInputs.includes(key) && isValidPreferenceTime(value)) + if (timeInputs.includes(key)) { - derivedPrefs[key] = defaultPreferences[key]; - shouldSaveDerivedPrefs = true; + // Set default preference value if notification or time interval is not valid + if ((key === 'notifications-interval' && !isNotificationInterval(value)) || !validateTime(value)) + { + derivedPrefs[key] = defaultPreferences[key]; + shouldSaveDerivedPrefs = true; + } } const inputEnum = { @@ -290,6 +301,7 @@ module.exports = { showDay, switchCalendarView, isNotBoolean, + isNotificationInterval, isValidPreferenceTime, notificationIsEnabled, repetitionIsEnabled diff --git a/locales/ca-CA/translation.json b/locales/ca-CA/translation.json index 3137b686e..db5423dba 100644 --- a/locales/ca-CA/translation.json +++ b/locales/ca-CA/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Ocultar els dies no laborables (Vista mensual)", "hours-per-day": "HH:mm", "hoursPerDay": "Hores per dia", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Llenguatge", "light": "Clar", "minimizeToTray": "El botó de minimitzar hauria de minimitzar a la safata", diff --git a/locales/de-DE/translation.json b/locales/de-DE/translation.json index 02fc9cf04..69ecc3f76 100644 --- a/locales/de-DE/translation.json +++ b/locales/de-DE/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Arbeitsfreie Tage ausblenden (Monatsansicht)", "hours-per-day": "HH:mm", "hoursPerDay": "Stunden pro Tag", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Sprache", "light": "Hell", "minimizeToTray": "Minimieren Button minimiert Fenster in den Tray", diff --git a/locales/dev/translation.json b/locales/dev/translation.json index 1401ea7fd..df55d6152 100644 --- a/locales/dev/translation.json +++ b/locales/dev/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Ocultar dias não úteis (Visão de mês)", "hours-per-day": "HH:mm", "hoursPerDay": "Horas por dia", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Idioma", "light": "Claro", "minimizeToTray": "Clicá no tracin isconde", diff --git a/locales/en/translation.json b/locales/en/translation.json index aa45136e1..42841647d 100644 --- a/locales/en/translation.json +++ b/locales/en/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Hide non-working days (Month View)", "hours-per-day": "HH:mm", "hoursPerDay": "Hours per day", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Language", "light": "Light", "minimizeToTray": "Minimize button should minimize to tray", diff --git a/locales/es/translation.json b/locales/es/translation.json index 5d9fe9822..3c79a6d7e 100644 --- a/locales/es/translation.json +++ b/locales/es/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Ocultar los días no laborables (Vista por mes)", "hours-per-day": "HH:mm", "hoursPerDay": "Horas por día", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Languaje", "light": "Claro", "minimizeToTray": "El botón de minimizar debería minimizar a la bandeja", diff --git a/locales/fr-FR/translation.json b/locales/fr-FR/translation.json index 550155e3e..67f545cba 100644 --- a/locales/fr-FR/translation.json +++ b/locales/fr-FR/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Masquer les jours non ouvrés (Vue Mois)", "hours-per-day": "HH:mm", "hoursPerDay": "Heures par jour", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Langue", "light": "Clair", "minimizeToTray": "Le bouton Réduire doit être réduit dans le bac", diff --git a/locales/hi/translation.json b/locales/hi/translation.json index 5d52bd074..581ae396a 100644 --- a/locales/hi/translation.json +++ b/locales/hi/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "गैर-कार्य दिवस (माह दृश्य) छुपाएं", "hours-per-day": "HH:mm", "hoursPerDay": "प्रति दिन घंटे", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "भाषा: हिन्दी", "light": "रोशनी", "minimizeToTray": "बटन को कम से कम ट्रे में रखना चाहिए", diff --git a/locales/id/translation.json b/locales/id/translation.json index 2fdf774b4..c7bb002b5 100644 --- a/locales/id/translation.json +++ b/locales/id/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Sembunyikan hari Bukan-kerja (Tampilan Bulan)", "hours-per-day": "HH:mm", "hoursPerDay": "Jam per-hari", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Bahasa", "light": "Terang", "minimizeToTray": "Tombol Minimalkan harus meminimalkan tray", diff --git a/locales/it/translation.json b/locales/it/translation.json index 5f499825c..070370572 100644 --- a/locales/it/translation.json +++ b/locales/it/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Nascondi giorni festivi (visuale Mese)", "hours-per-day": "HH:mm", "hoursPerDay": "Ore al giorno", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Linguaggio", "light": "Chiaro", "minimizeToTray": "Il pulsante di riduzione a icona deve ridurre a icona nella tray", diff --git a/locales/ko/translation.json b/locales/ko/translation.json index 895188eb1..8045b3cf4 100644 --- a/locales/ko/translation.json +++ b/locales/ko/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "휴일 숨기기 (월별 보기에 적용)", "hours-per-day": "HH:mm", "hoursPerDay": "하루 작업 목표 시간", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "언어", "light": "밝음", "minimizeToTray": "최소화 시 시스템 트레이로 이동", diff --git a/locales/mr/translation.json b/locales/mr/translation.json index 510ef337b..3c433babb 100644 --- a/locales/mr/translation.json +++ b/locales/mr/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "नॉन-कामकाजाचे दिवस लपवा (महिना दृश्य)", "hours-per-day": "HH:mm", "hoursPerDay": "दिवसाचे तास", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "भाषा", "light": "प्रकाश", "minimizeToTray": "ट्रेमध्ये मिनिमाइझ बटण कमीतकमी केले पाहिजे", diff --git a/locales/nl/translation.json b/locales/nl/translation.json index ac632ff73..0a1946788 100644 --- a/locales/nl/translation.json +++ b/locales/nl/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Niet-werkdagen verbergen (Maandoverzicht)", "hours-per-day": "HH:mm", "hoursPerDay": "Aantal uur per dag", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Taal", "light": "Licht", "minimizeToTray": "Minimaliseerknop moet minimaliseren", diff --git a/locales/pl/translation.json b/locales/pl/translation.json index c671c108f..35f817dc5 100644 --- a/locales/pl/translation.json +++ b/locales/pl/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Ukryj dni wolne (Widok Miesiąca)", "hours-per-day": "HH:mm", "hoursPerDay": "Ilość godzin pracy dzienie", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Język (Language)", "light": "Jasny", "minimizeToTray": "Prznieś do obszaru powiadomień przyciskiem minimalizacji", diff --git a/locales/pt-BR/translation.json b/locales/pt-BR/translation.json index 6c712f1d3..65bcadb65 100644 --- a/locales/pt-BR/translation.json +++ b/locales/pt-BR/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "Ocultar dias não úteis (Visão de mês)", "hours-per-day": "HH:mm", "hoursPerDay": "Horas por dia", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "Idioma", "light": "Claro", "minimizeToTray": "Botão de minimizar deve minimizar para o Tray", diff --git a/locales/th-TH/translation.json b/locales/th-TH/translation.json index 32533888b..bb72e817c 100644 --- a/locales/th-TH/translation.json +++ b/locales/th-TH/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "ซ่อนวันหยุด (มุมมองรายเดือน)", "hours-per-day": "ชช:นน", "hoursPerDay": "จำนวนชั่วโมงทำงานต่อวัน", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "ภาษา", "light": "สว่าง", "minimizeToTray": "ปุ่มย่อจะย่อไปยังถาด", diff --git a/locales/zh-TW/translation.json b/locales/zh-TW/translation.json index df1382d15..8c01dd750 100644 --- a/locales/zh-TW/translation.json +++ b/locales/zh-TW/translation.json @@ -140,6 +140,9 @@ "hideNonWorkingDay": "隱藏非工作日(月份視角)", "hours-per-day": "HH:mm", "hoursPerDay": "小時每日", + "enablePrefillBreakTime": "Enable prefilling of break time", + "breakTimeInterval": "Break time interval", + "break-time-interval": "HH:mm", "language": "語言", "light": "淺色", "minimizeToTray": "當按下最小化按鈕時將程式最小化到任務欄", diff --git a/package-lock.json b/package-lock.json index ca80df8ab..80bec76ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1908,7 +1908,11 @@ }, "dependencies": { "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true } } }, @@ -2913,7 +2917,11 @@ }, "dependencies": { "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true } } }, @@ -4880,7 +4888,7 @@ "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "^2.1.2", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -4917,7 +4925,11 @@ } }, "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true }, "is-number": { "version": "7.0.0", @@ -9989,7 +10001,11 @@ }, "dependencies": { "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true } } }, @@ -11198,7 +11214,11 @@ } }, "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true }, "graceful-fs": { "version": "4.2.4", @@ -11945,7 +11965,11 @@ }, "dependencies": { "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true } } }, @@ -14043,7 +14067,7 @@ "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "^2.1.2", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -14052,7 +14076,11 @@ }, "dependencies": { "fsevents": { - "version": "^2.1.2" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true } } }, @@ -19131,4 +19159,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/preferences.html b/src/preferences.html index 6d3a286a3..abc58a3ca 100644 --- a/src/preferences.html +++ b/src/preferences.html @@ -47,6 +47,14 @@

Hours per day

+
+

Enable prefilling of break time

+ +
+
+

Break time interval

+ +
diff --git a/src/preferences.js b/src/preferences.js index c7bd9234a..f32c3bbdb 100644 --- a/src/preferences.js +++ b/src/preferences.js @@ -119,7 +119,7 @@ function renderPreferencesWindow() changeValue(this.name, this.checked); }); - $('#hours-per-day').on('change', function() + $('#hours-per-day, #break-time-interval').on('change', function() { /* istanbul ignore else */ if (this.checkValidity() === true) From 258f48e447365c55ba3283b577ccc1890a2698f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ka=C5=BEim=C3=ADr?= Date: Wed, 25 Nov 2020 15:12:57 +0100 Subject: [PATCH 2/5] removed function isValidPreferenceTime --- js/classes/BaseCalendar.js | 2 ++ js/user-preferences.js | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/js/classes/BaseCalendar.js b/js/classes/BaseCalendar.js index 3ea015115..60e6b3a8a 100644 --- a/js/classes/BaseCalendar.js +++ b/js/classes/BaseCalendar.js @@ -50,6 +50,7 @@ class BaseCalendar /** * Returns a date object for which the all time balance will be calculated. * If current month, returns the actual day. If not, first day of following month. + * // deepcode ignore valid-jsdoc: * @return {Date} */ _getTargetDayForAllTimeBalance() @@ -409,6 +410,7 @@ class BaseCalendar /** * Calculates time for break end based on break interval * @param {string} breakBegin + * @return {string} */ _calculateBreakEnd(breakBegin) { diff --git a/js/user-preferences.js b/js/user-preferences.js index cc73a07ce..37d948d11 100644 --- a/js/user-preferences.js +++ b/js/user-preferences.js @@ -66,9 +66,6 @@ const timeInputs = [ const isNotBoolean = (val) => typeof val !== 'boolean'; const isNotificationInterval = (val) => !Number.isNaN(Number(val)) && isNotBoolean(val) && val >= 1 && val <= 30; -//Don't use this. Use isNotificationInterval() and validateTime() -const isValidPreferenceTime = (val) => validateTime(val) || Number.isNaN(Number(val)) || val < 1 || val > 30; - /* * Returns the preference file path, considering the userData path */ @@ -302,7 +299,6 @@ module.exports = { switchCalendarView, isNotBoolean, isNotificationInterval, - isValidPreferenceTime, notificationIsEnabled, repetitionIsEnabled }; From 93312e765ac6c2949020952a52526843b0d0f80f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ka=C5=BEim=C3=ADr?= Date: Fri, 27 Nov 2020 20:12:14 +0100 Subject: [PATCH 3/5] refactored break time prefill --- js/classes/BaseCalendar.js | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/js/classes/BaseCalendar.js b/js/classes/BaseCalendar.js index 60e6b3a8a..fea26342b 100644 --- a/js/classes/BaseCalendar.js +++ b/js/classes/BaseCalendar.js @@ -443,29 +443,42 @@ class BaseCalendar const value = hourMinToHourFormatted(hour, min); const key = generateKey(year, month, day); const inputs = $('#' + key + ' input[type="time"]'); - let i = 0; - for (const element of inputs) + + for (let i = 0; i < inputs.length; i++) { - if ($(element).val().length === 0) + if ($(inputs[i]).val().length === 0) { - $(element).val(value); + $(inputs[i]).val(value); - // Prefill break time - if ( this._getEnablePrefillBreakTime() && - i !== inputs.length - 1 && - i % 2 === 1 - ) + //Prefill break time + if (this._prefillEntryIndex(i, inputs)) { const breakEnd = this._calculateBreakEnd(value); - $(inputs[i+1]).val(breakEnd); + $(inputs[i + 1]).val(breakEnd); } this._updateTimeDayCallback(key); break; } - i++; } } + /** + * Returns true if next entry should be prefilled based on break interval + * @param {number} idx + * @param {array} inputs + * @return {Boolean} + */ + _prefillEntryIndex(idx, inputs) + { + if (this._getEnablePrefillBreakTime() && + idx !== inputs.length - 1 && + idx % 2 === 1) + { + return true; + } + return false; + } + /** * Based on the key of the input, updates the values for total in DB and display it on page. * @param {string} key From 2c41d2168304f791c73524d4e9dd5fe4b31721b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ka=C5=BEim=C3=ADr?= Date: Fri, 27 Nov 2020 20:19:01 +0100 Subject: [PATCH 4/5] removed break-time-interval from translations --- locales/ca-CA/translation.json | 1 - locales/de-DE/translation.json | 1 - locales/dev/translation.json | 1 - locales/en/translation.json | 1 - locales/es/translation.json | 1 - locales/fr-FR/translation.json | 1 - locales/hi/translation.json | 1 - locales/id/translation.json | 1 - locales/it/translation.json | 1 - locales/ko/translation.json | 1 - locales/mr/translation.json | 1 - locales/nl/translation.json | 1 - locales/pl/translation.json | 1 - locales/pt-BR/translation.json | 1 - locales/th-TH/translation.json | 1 - locales/zh-TW/translation.json | 1 - src/preferences.html | 2 +- 17 files changed, 1 insertion(+), 17 deletions(-) diff --git a/locales/ca-CA/translation.json b/locales/ca-CA/translation.json index db5423dba..0959a75ab 100644 --- a/locales/ca-CA/translation.json +++ b/locales/ca-CA/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Hores per dia", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Llenguatge", "light": "Clar", "minimizeToTray": "El botó de minimitzar hauria de minimitzar a la safata", diff --git a/locales/de-DE/translation.json b/locales/de-DE/translation.json index 69ecc3f76..beacff3a5 100644 --- a/locales/de-DE/translation.json +++ b/locales/de-DE/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Stunden pro Tag", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Sprache", "light": "Hell", "minimizeToTray": "Minimieren Button minimiert Fenster in den Tray", diff --git a/locales/dev/translation.json b/locales/dev/translation.json index df55d6152..b500283e3 100644 --- a/locales/dev/translation.json +++ b/locales/dev/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Horas por dia", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Idioma", "light": "Claro", "minimizeToTray": "Clicá no tracin isconde", diff --git a/locales/en/translation.json b/locales/en/translation.json index 42841647d..6f32f4fd3 100644 --- a/locales/en/translation.json +++ b/locales/en/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Hours per day", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Language", "light": "Light", "minimizeToTray": "Minimize button should minimize to tray", diff --git a/locales/es/translation.json b/locales/es/translation.json index 3c79a6d7e..3dc61f74d 100644 --- a/locales/es/translation.json +++ b/locales/es/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Horas por día", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Languaje", "light": "Claro", "minimizeToTray": "El botón de minimizar debería minimizar a la bandeja", diff --git a/locales/fr-FR/translation.json b/locales/fr-FR/translation.json index 67f545cba..296a763bd 100644 --- a/locales/fr-FR/translation.json +++ b/locales/fr-FR/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Heures par jour", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Langue", "light": "Clair", "minimizeToTray": "Le bouton Réduire doit être réduit dans le bac", diff --git a/locales/hi/translation.json b/locales/hi/translation.json index 581ae396a..dc9d009b1 100644 --- a/locales/hi/translation.json +++ b/locales/hi/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "प्रति दिन घंटे", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "भाषा: हिन्दी", "light": "रोशनी", "minimizeToTray": "बटन को कम से कम ट्रे में रखना चाहिए", diff --git a/locales/id/translation.json b/locales/id/translation.json index c7bb002b5..ccba21f8c 100644 --- a/locales/id/translation.json +++ b/locales/id/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Jam per-hari", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Bahasa", "light": "Terang", "minimizeToTray": "Tombol Minimalkan harus meminimalkan tray", diff --git a/locales/it/translation.json b/locales/it/translation.json index 070370572..ed23f952f 100644 --- a/locales/it/translation.json +++ b/locales/it/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Ore al giorno", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Linguaggio", "light": "Chiaro", "minimizeToTray": "Il pulsante di riduzione a icona deve ridurre a icona nella tray", diff --git a/locales/ko/translation.json b/locales/ko/translation.json index 8045b3cf4..706bcedbe 100644 --- a/locales/ko/translation.json +++ b/locales/ko/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "하루 작업 목표 시간", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "언어", "light": "밝음", "minimizeToTray": "최소화 시 시스템 트레이로 이동", diff --git a/locales/mr/translation.json b/locales/mr/translation.json index 3c433babb..2d038539c 100644 --- a/locales/mr/translation.json +++ b/locales/mr/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "दिवसाचे तास", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "भाषा", "light": "प्रकाश", "minimizeToTray": "ट्रेमध्ये मिनिमाइझ बटण कमीतकमी केले पाहिजे", diff --git a/locales/nl/translation.json b/locales/nl/translation.json index 0a1946788..dd47bf0f0 100644 --- a/locales/nl/translation.json +++ b/locales/nl/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Aantal uur per dag", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Taal", "light": "Licht", "minimizeToTray": "Minimaliseerknop moet minimaliseren", diff --git a/locales/pl/translation.json b/locales/pl/translation.json index 35f817dc5..080d3d298 100644 --- a/locales/pl/translation.json +++ b/locales/pl/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Ilość godzin pracy dzienie", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Język (Language)", "light": "Jasny", "minimizeToTray": "Prznieś do obszaru powiadomień przyciskiem minimalizacji", diff --git a/locales/pt-BR/translation.json b/locales/pt-BR/translation.json index 65bcadb65..4d0c8e393 100644 --- a/locales/pt-BR/translation.json +++ b/locales/pt-BR/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "Horas por dia", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "Idioma", "light": "Claro", "minimizeToTray": "Botão de minimizar deve minimizar para o Tray", diff --git a/locales/th-TH/translation.json b/locales/th-TH/translation.json index bb72e817c..deaece282 100644 --- a/locales/th-TH/translation.json +++ b/locales/th-TH/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "จำนวนชั่วโมงทำงานต่อวัน", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "ภาษา", "light": "สว่าง", "minimizeToTray": "ปุ่มย่อจะย่อไปยังถาด", diff --git a/locales/zh-TW/translation.json b/locales/zh-TW/translation.json index 8c01dd750..fb8f7870e 100644 --- a/locales/zh-TW/translation.json +++ b/locales/zh-TW/translation.json @@ -142,7 +142,6 @@ "hoursPerDay": "小時每日", "enablePrefillBreakTime": "Enable prefilling of break time", "breakTimeInterval": "Break time interval", - "break-time-interval": "HH:mm", "language": "語言", "light": "淺色", "minimizeToTray": "當按下最小化按鈕時將程式最小化到任務欄", diff --git a/src/preferences.html b/src/preferences.html index abc58a3ca..f1ec23f3b 100644 --- a/src/preferences.html +++ b/src/preferences.html @@ -53,7 +53,7 @@

Break time interval

- +
From 9b97a4a7b11208e651bc7f2b8d33ec24016e86c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ka=C5=BEim=C3=ADr?= Date: Fri, 27 Nov 2020 20:51:55 +0100 Subject: [PATCH 5/5] disable/enable break interval input field --- css/styles.css | 1 + src/preferences.html | 2 +- src/preferences.js | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index 8c93e757e..e8e9dcec0 100644 --- a/css/styles.css +++ b/css/styles.css @@ -535,6 +535,7 @@ input:checked + .slider::before { /* Notification settings */ #notifications-interval:disabled, +#break-time-interval:disabled, input:disabled + .slider { background-color: var(--disabled-input-bground); } diff --git a/src/preferences.html b/src/preferences.html index f1ec23f3b..fa1967731 100644 --- a/src/preferences.html +++ b/src/preferences.html @@ -49,7 +49,7 @@

Enable prefilling of break time

- +

Break time interval

diff --git a/src/preferences.js b/src/preferences.js index f32c3bbdb..0e7865495 100644 --- a/src/preferences.js +++ b/src/preferences.js @@ -171,6 +171,15 @@ function renderPreferencesWindow() } }); + const prefillBreak = $('#enable-prefill-break-time'); + const breakInterval = $('#break-time-interval'); + + breakInterval.prop('disabled', !prefillBreak.is(':checked')); + prefillBreak.on('change', function() + { + breakInterval.prop('disabled', !prefillBreak.is(':checked')); + }); + const notification = $('#notification'); const repetition = $('#repetition'); const notificationsInterval = $('#notifications-interval');