From 4ff5f0f94b8e212bff01835f8283e2f434376e6a Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:53:47 +0300 Subject: [PATCH 01/21] Enable toggle in and out of calendars #1371 --- www/calendar/app-calendar.less | 12 +++++++ www/calendar/inner.js | 57 +++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/www/calendar/app-calendar.less b/www/calendar/app-calendar.less index bdf59fb6d..742076764 100644 --- a/www/calendar/app-calendar.less +++ b/www/calendar/app-calendar.less @@ -585,6 +585,18 @@ margin-top: 30px; } } + @media screen and (max-width: @browser_media-medium-screen) { + .cp-calendar-entries { + display: none; + } + + .cp-calendar-entries.visible { + display: block; + } + } + .cp-calendar-entries { + margin-bottom: 10px; + } .cp-calendar-entry { display: flex; align-items: center; diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 9cac57978..1770ce294 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -818,7 +818,17 @@ define([ }); } if (APP.$calendars) { APP.$calendars.append(calendar); } - return calendar; + return $calendar; // return jQuery element + }; + + var appendCalendarEntries = function (teamId, filter) { + var calendars = filter(teamId); + var $entriesContainer = $('
'); + calendars.forEach(function (id) { + var calendarEntry = makeCalendarEntry(id, teamId); + $entriesContainer.append(calendarEntry); + }); + return $entriesContainer; }; var makeLeftside = function (calendar, $container) { // Show calendars @@ -847,10 +857,10 @@ define([ }; var tempCalendars = filter(0); if (tempCalendars.length && tempCalendars[0] === APP.currentCalendar) { - APP.$calendars.append(h('div.cp-calendar-team', [ + var $tempCalendarTeam = $(h('div.cp-calendar-team', [ h('span', Messages.calendar_tempCalendar) - ])); - makeCalendarEntry(tempCalendars[0], 0); + ])).appendTo(APP.$calendars); + var $tempCalendarEntries = appendCalendarEntries(0, filter).appendTo(APP.$calendars); var importTemp = h('button', [ h('i.fa.fa-calendar-plus-o'), h('span', Messages.calendar_import_temp), @@ -868,7 +878,13 @@ define([ }); }); if (APP.loggedIn) { - APP.$calendars.append(h('div.cp-calendar-entry.cp-ghost', importTemp)); + $tempCalendarEntries.append(h('div.cp-calendar-entry.cp-ghost', importTemp)); + } + //on small screens toggle in and out + if (window.innerWidth <= 600) { + $tempCalendarTeam.click(function () { + $tempCalendarEntries.toggleClass('visible'); + }); } return; } @@ -878,16 +894,18 @@ define([ var avatar = h('span.cp-avatar'); var uid = user.uid; var name = user.name || Messages.anonymous; - common.displayAvatar($(avatar), user.avatar, name, function(){}, uid); - APP.$calendars.append(h('div.cp-calendar-team', [ + common.displayAvatar($(avatar), user.avatar, name, function () { }, uid); + var $myCalendarTeam = $(h('div.cp-calendar-team', [ avatar, - h('span.cp-name', {title: name}, name) - ])); + h('span.cp-name', { title: name }, name) + ])).appendTo(APP.$calendars); + var $myCalendarEntries = appendCalendarEntries(1, filter).appendTo(APP.$calendars); + if (window.innerWidth <= 600) { + $myCalendarTeam.click(function () { + $myCalendarEntries.toggleClass('visible'); + }); + } } - myCalendars.forEach(function (id) { - makeCalendarEntry(id, 1); - }); - // Add new button var $newContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); var newButton = h('button', [ @@ -905,13 +923,16 @@ define([ var team = privateData.teams[teamId]; var avatar = h('span.cp-avatar'); common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); - APP.$calendars.append(h('div.cp-calendar-team', [ + var $teamCalendarTeam = $(h('div.cp-calendar-team', [ avatar, h('span.cp-name', {title: team.name}, team.name) - ])); - calendars.forEach(function (id) { - makeCalendarEntry(id, teamId); - }); + ])).appendTo(APP.$calendars); + var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); + if (window.innerWidth <= 600) { + $teamCalendarTeam.click(function () { + $teamCalendarEntries.toggleClass('visible'); + }); + } }); }); onCalendarsUpdate.fire(); From 0911413604d56f7d9c4a819580bc5055a6e83695 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Fri, 9 Aug 2024 17:37:33 +0300 Subject: [PATCH 02/21] Add toggle visibility button for calendars on small screens #1371 --- www/calendar/inner.js | 81 +++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 1770ce294..a998d979e 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -880,12 +880,6 @@ define([ if (APP.loggedIn) { $tempCalendarEntries.append(h('div.cp-calendar-entry.cp-ghost', importTemp)); } - //on small screens toggle in and out - if (window.innerWidth <= 600) { - $tempCalendarTeam.click(function () { - $tempCalendarEntries.toggleClass('visible'); - }); - } return; } var myCalendars = filter(1); @@ -895,19 +889,60 @@ define([ var uid = user.uid; var name = user.name || Messages.anonymous; common.displayAvatar($(avatar), user.avatar, name, function () { }, uid); - var $myCalendarTeam = $(h('div.cp-calendar-team', [ + APP.$calendars.append(h('div.cp-calendar-team', [ avatar, - h('span.cp-name', { title: name }, name) - ])).appendTo(APP.$calendars); - var $myCalendarEntries = appendCalendarEntries(1, filter).appendTo(APP.$calendars); + h('span.cp-name', {title: name}, name) + ])); if (window.innerWidth <= 600) { - $myCalendarTeam.click(function () { + var $showCalendarsContainer = $('').appendTo($calendars); + var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ + h('i.fa.fa-eye'), + h('span', 'Show calendars'), + h('span') + ]); + var $myCalendarEntries = appendCalendarEntries(1, filter).appendTo(APP.$calendars); + $(showCalendarsBtn).click(function (e) { + e.preventDefault(); $myCalendarEntries.toggleClass('visible'); + }).appendTo($showCalendarsContainer); + } else { + myCalendars.forEach(function (id) { + makeCalendarEntry(id, 1); }); } } + Object.keys(privateData.teams).sort().forEach(function (teamId) { + var calendars = filter(teamId); + if (!calendars.length) { return; } + var team = privateData.teams[teamId]; + var avatar = h('span.cp-avatar'); + common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); + APP.$calendars.append(h('div.cp-calendar-team', [ + avatar, + h('span.cp-name', {title: team.name}, team.name) + ])); + if (window.innerWidth <= 600) { + // Add show calendars button for each team + var $showCalendarsContainer = $('').appendTo($calendars); + var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ + h('i.fa.fa-eye'), + h('span', 'Show calendars'), + h('span') + ]); + var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); + $(showCalendarsBtn).click(function (e) { + e.preventDefault(); + $teamCalendarEntries.toggleClass('visible'); + }).appendTo($showCalendarsContainer); + } else { + calendars.forEach(function (id) { + makeCalendarEntry(id, 1); + }); + } + + }); // Add new button - var $newContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); + var $newContainer = $('').appendTo($calendars); var newButton = h('button', [ h('i.fa.fa-calendar-plus-o'), h('span', Messages.calendar_new), @@ -916,27 +951,9 @@ define([ $(newButton).click(function () { editCalendar(); }).appendTo($newContainer); - - Object.keys(privateData.teams).sort().forEach(function (teamId) { - var calendars = filter(teamId); - if (!calendars.length) { return; } - var team = privateData.teams[teamId]; - var avatar = h('span.cp-avatar'); - common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); - var $teamCalendarTeam = $(h('div.cp-calendar-team', [ - avatar, - h('span.cp-name', {title: team.name}, team.name) - ])).appendTo(APP.$calendars); - var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); - if (window.innerWidth <= 600) { - $teamCalendarTeam.click(function () { - $teamCalendarEntries.toggleClass('visible'); - }); - } - }); }); - onCalendarsUpdate.fire(); + onCalendarsUpdate.fire(); }; var _updateRecurring = function () { @@ -1296,7 +1313,6 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v store.put('calendarView', mode, function () {}); }); APP.toolbar.$bottomR.append($block); - // New event button var newEventBtn = h('button.cp-calendar-newevent', [ h('i.fa.fa-plus'), @@ -1306,7 +1322,6 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v e.preventDefault(); cal.openCreationPopup({isAllDay:false}); }).appendTo(APP.toolbar.$bottomL); - // Change page var goLeft = h('button.fa.fa-chevron-left',{'aria-label': Messages.goLeft}); var goRight = h('button.fa.fa-chevron-right', {'aria-label': Messages.goRight}); From 479ff02b5905291c516b0d65281bffceb54400ff Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Fri, 9 Aug 2024 17:41:00 +0300 Subject: [PATCH 03/21] Add translation key #1371 --- customize.dist/messages.js | 2 +- www/calendar/inner.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/customize.dist/messages.js b/customize.dist/messages.js index a5784b495..eaffcadaf 100755 --- a/customize.dist/messages.js +++ b/customize.dist/messages.js @@ -135,7 +135,7 @@ define(req, function(AppConfig, Default, Language) { return text; } }; - + Messages.calendar_show = 'Show calendars'; // XXX return Messages; }); diff --git a/www/calendar/inner.js b/www/calendar/inner.js index a998d979e..fad45cbc4 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -897,7 +897,7 @@ define([ var $showCalendarsContainer = $('').appendTo($calendars); var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ h('i.fa.fa-eye'), - h('span', 'Show calendars'), + h('span', Messages.calendar_show), h('span') ]); var $myCalendarEntries = appendCalendarEntries(1, filter).appendTo(APP.$calendars); @@ -926,7 +926,7 @@ define([ var $showCalendarsContainer = $('').appendTo($calendars); var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ h('i.fa.fa-eye'), - h('span', 'Show calendars'), + h('span', Messages.calendar_show), h('span') ]); var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); From 82846f185136341cb8f33c86149b57e3c3ccdad3 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:12:13 +0300 Subject: [PATCH 04/21] Change button to 'Hide calendars' when list is shown #1371 --- customize.dist/messages.js | 1 + www/calendar/inner.js | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/customize.dist/messages.js b/customize.dist/messages.js index eaffcadaf..bb2073466 100755 --- a/customize.dist/messages.js +++ b/customize.dist/messages.js @@ -136,6 +136,7 @@ define(req, function(AppConfig, Default, Language) { } }; Messages.calendar_show = 'Show calendars'; // XXX + Messages.calendar_hide = 'Hide calendars'; // XXX return Messages; }); diff --git a/www/calendar/inner.js b/www/calendar/inner.js index fad45cbc4..73c8c6ee0 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -897,13 +897,18 @@ define([ var $showCalendarsContainer = $('').appendTo($calendars); var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ h('i.fa.fa-eye'), - h('span', Messages.calendar_show), + h('span', Messages.calendar_show), // Initial text: "Show Calendars" h('span') ]); var $myCalendarEntries = appendCalendarEntries(1, filter).appendTo(APP.$calendars); $(showCalendarsBtn).click(function (e) { e.preventDefault(); - $myCalendarEntries.toggleClass('visible'); + $myCalendarEntries.toggle(); + if ($myCalendarEntries.is(':visible')) { + $(this).find('span').first().text(Messages.calendar_hide); + } else { + $(this).find('span').first().text(Messages.calendar_show); + } }).appendTo($showCalendarsContainer); } else { myCalendars.forEach(function (id) { @@ -932,7 +937,12 @@ define([ var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); $(showCalendarsBtn).click(function (e) { e.preventDefault(); - $teamCalendarEntries.toggleClass('visible'); + $teamCalendarEntries.toggle(); + if ($teamCalendarEntries.is(':visible')) { + $(this).find('span').first().text(Messages.calendar_hide); + } else { + $(this).find('span').first().text(Messages.calendar_show); + } }).appendTo($showCalendarsContainer); } else { calendars.forEach(function (id) { From 751d37a097b53a015df5ac3063504a8969d78d0c Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:02:36 +0300 Subject: [PATCH 05/21] Make button appear/disappear automatically when resizing #1371 --- www/calendar/inner.js | 105 +++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 53 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 73c8c6ee0..80ce6895e 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -834,15 +834,17 @@ define([ // Show calendars var calendars = h('div.cp-calendar-list'); var $calendars = APP.$calendars = $(calendars).appendTo($container); - onCalendarsUpdate.reg(function () { + var isMobileView = window.innerWidth <= 600; + + function updateCalendarsView() { $calendars.empty(); var privateData = metadataMgr.getPrivateData(); var filter = function (teamId) { var LOOKUP = {}; return Object.keys(APP.calendars || {}).filter(function (id) { var cal = APP.calendars[id] || {}; - var teams = (cal.teams || []).map(function (tId) { return Number(tId); }); - return teams.indexOf(typeof(teamId) !== "undefined" ? Number(teamId) : 1) !== -1; + var teams = (cal.teams || []).map(function (tId) { return Number(tId); }); + return teams.indexOf(typeof (teamId) !== "undefined" ? Number(teamId) : 1) !== -1; }).map(function (k) { // nearly constant-time pre-sort var cal = APP.calendars[k] || {}; @@ -855,6 +857,7 @@ define([ return t1 > t2 ? 1 : (t1 === t2 ? 0 : -1); }); }; + var tempCalendars = filter(0); if (tempCalendars.length && tempCalendars[0] === APP.currentCalendar) { var $tempCalendarTeam = $(h('div.cp-calendar-team', [ @@ -882,6 +885,7 @@ define([ } return; } + var myCalendars = filter(1); if (myCalendars.length) { var user = metadataMgr.getUserData(); @@ -891,32 +895,29 @@ define([ common.displayAvatar($(avatar), user.avatar, name, function () { }, uid); APP.$calendars.append(h('div.cp-calendar-team', [ avatar, - h('span.cp-name', {title: name}, name) + h('span.cp-name', { title: name }, name) ])); - if (window.innerWidth <= 600) { - var $showCalendarsContainer = $('').appendTo($calendars); - var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ - h('i.fa.fa-eye'), - h('span', Messages.calendar_show), // Initial text: "Show Calendars" - h('span') - ]); - var $myCalendarEntries = appendCalendarEntries(1, filter).appendTo(APP.$calendars); - $(showCalendarsBtn).click(function (e) { - e.preventDefault(); - $myCalendarEntries.toggle(); - if ($myCalendarEntries.is(':visible')) { - $(this).find('span').first().text(Messages.calendar_hide); - } else { - $(this).find('span').first().text(Messages.calendar_show); - } - }).appendTo($showCalendarsContainer); + if (isMobileView) { + createShowCalendarsButton(1, filter, $calendars); } else { myCalendars.forEach(function (id) { makeCalendarEntry(id, 1); }); } } - Object.keys(privateData.teams).sort().forEach(function (teamId) { + + // Add new button + var $newContainer = $('').appendTo($calendars); + var newButton = h('button', [ + h('i.fa.fa-calendar-plus-o'), + h('span', Messages.calendar_new), + h('span') + ]); + $(newButton).click(function () { + editCalendar(); + }).appendTo($newContainer); + + Object.keys(privateData.teams).sort().forEach(function (teamId) { var calendars = filter(teamId); if (!calendars.length) { return; } var team = privateData.teams[teamId]; @@ -924,48 +925,46 @@ define([ common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); APP.$calendars.append(h('div.cp-calendar-team', [ avatar, - h('span.cp-name', {title: team.name}, team.name) + h('span.cp-name', { title: team.name }, team.name) ])); - if (window.innerWidth <= 600) { - // Add show calendars button for each team - var $showCalendarsContainer = $('').appendTo($calendars); - var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ - h('i.fa.fa-eye'), - h('span', Messages.calendar_show), - h('span') - ]); - var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); - $(showCalendarsBtn).click(function (e) { - e.preventDefault(); - $teamCalendarEntries.toggle(); - if ($teamCalendarEntries.is(':visible')) { - $(this).find('span').first().text(Messages.calendar_hide); - } else { - $(this).find('span').first().text(Messages.calendar_show); - } - }).appendTo($showCalendarsContainer); + if (isMobileView) { + createShowCalendarsButton(teamId, filter, $calendars); } else { calendars.forEach(function (id) { makeCalendarEntry(id, 1); }); } - }); - // Add new button - var $newContainer = $('').appendTo($calendars); - var newButton = h('button', [ - h('i.fa.fa-calendar-plus-o'), - h('span', Messages.calendar_new), + } + function createShowCalendarsButton(teamId, filter, $parentContainer) { + var $showCalendarsContainer = $('').appendTo($parentContainer); + var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ + h('i.fa.fa-eye'), + h('span', Messages.calendar_show), h('span') ]); - $(newButton).click(function () { - editCalendar(); - }).appendTo($newContainer); - }); - + var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); + $(showCalendarsBtn).click(function (e) { + e.preventDefault(); + $teamCalendarEntries.toggle(); + if ($teamCalendarEntries.is(':visible')) { + $(this).find('span').first().text(Messages.calendar_hide); + } else { + $(this).find('span').first().text(Messages.calendar_show); + } + }).appendTo($showCalendarsContainer); + } + function onResize() { + var newIsMobileView = window.innerWidth <= 600; + if (newIsMobileView !== isMobileView) { + isMobileView = newIsMobileView; + updateCalendarsView(); + } + } + $(window).resize(onResize); + onCalendarsUpdate.reg(updateCalendarsView); onCalendarsUpdate.fire(); }; - var _updateRecurring = function () { var cal = APP.calendar; if (!cal) { return; } From 71ba789f77d5b149ceafb47546f86b034ed73fe5 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:24:09 +0300 Subject: [PATCH 06/21] Handle saving calendat list state #1371 --- www/calendar/inner.js | 47 +++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 80ce6895e..2b0674559 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -836,6 +836,10 @@ define([ var $calendars = APP.$calendars = $(calendars).appendTo($container); var isMobileView = window.innerWidth <= 600; + var state = { + teamVisibility: {} + }; + function updateCalendarsView() { $calendars.empty(); var privateData = metadataMgr.getPrivateData(); @@ -885,7 +889,6 @@ define([ } return; } - var myCalendars = filter(1); if (myCalendars.length) { var user = metadataMgr.getUserData(); @@ -905,19 +908,17 @@ define([ }); } } - - // Add new button - var $newContainer = $('').appendTo($calendars); - var newButton = h('button', [ - h('i.fa.fa-calendar-plus-o'), - h('span', Messages.calendar_new), - h('span') - ]); - $(newButton).click(function () { - editCalendar(); - }).appendTo($newContainer); - - Object.keys(privateData.teams).sort().forEach(function (teamId) { + // Add new button + var $newContainer = $('').appendTo($calendars); + var newButton = h('button', [ + h('i.fa.fa-calendar-plus-o'), + h('span', Messages.calendar_new), + h('span') + ]); + $(newButton).click(function () { + editCalendar(); + }).appendTo($newContainer); + Object.keys(privateData.teams).sort().forEach(function (teamId) { var calendars = filter(teamId); if (!calendars.length) { return; } var team = privateData.teams[teamId]; @@ -944,27 +945,39 @@ define([ h('span') ]); var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); + if (state.teamVisibility[teamId]) { + $teamCalendarEntries.show(); + $(showCalendarsBtn).find('span').first().text(Messages.calendar_hide); + } else { + $teamCalendarEntries.hide(); + } + $(showCalendarsBtn).click(function (e) { e.preventDefault(); $teamCalendarEntries.toggle(); if ($teamCalendarEntries.is(':visible')) { $(this).find('span').first().text(Messages.calendar_hide); + state.teamVisibility[teamId] = true; // Save visibility state } else { $(this).find('span').first().text(Messages.calendar_show); + state.teamVisibility[teamId] = false; // Save visibility state } }).appendTo($showCalendarsContainer); } - function onResize() { + + $(window).resize(function () { var newIsMobileView = window.innerWidth <= 600; if (newIsMobileView !== isMobileView) { isMobileView = newIsMobileView; updateCalendarsView(); } - } - $(window).resize(onResize); + }); + onCalendarsUpdate.reg(updateCalendarsView); + onCalendarsUpdate.fire(); }; + var _updateRecurring = function () { var cal = APP.calendar; if (!cal) { return; } From 8de2bdbda5dd2b9cb374f839c6bfee37acee2789 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Sun, 22 Sep 2024 13:59:21 +0200 Subject: [PATCH 07/21] Save commit --- www/calendar/inner.js | 143 +++++++++++++----------------------------- 1 file changed, 45 insertions(+), 98 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index b0c0f5296..8064807c7 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -821,148 +821,95 @@ define([ return $calendar; // return jQuery element }; - var appendCalendarEntries = function (teamId, filter) { - var calendars = filter(teamId); - var $entriesContainer = $(''); - calendars.forEach(function (id) { - var calendarEntry = makeCalendarEntry(id, teamId); - $entriesContainer.append(calendarEntry); - }); - return $entriesContainer; - }; var makeLeftside = function (calendar, $container) { // Show calendars var calendars = h('div.cp-calendar-list'); var $calendars = APP.$calendars = $(calendars).appendTo($container); var isMobileView = window.innerWidth <= 600; - var state = { - teamVisibility: {} - }; - function updateCalendarsView() { $calendars.empty(); var privateData = metadataMgr.getPrivateData(); - var filter = function (teamId) { + var filter = (teamId) => { var LOOKUP = {}; - return Object.keys(APP.calendars || {}).filter(function (id) { + return Object.keys(APP.calendars || {}).filter((id) => { var cal = APP.calendars[id] || {}; - var teams = (cal.teams || []).map(function (tId) { return Number(tId); }); + var teams = (cal.teams || []).map((tId) => Number(tId)); return teams.indexOf(typeof (teamId) !== "undefined" ? Number(teamId) : 1) !== -1; - }).map(function (k) { - // nearly constant-time pre-sort + }).map((k) => { var cal = APP.calendars[k] || {}; var title = Util.find(cal, ['content', 'metadata', 'title']) || ''; LOOKUP[k] = title; return k; - }).sort(function (a, b) { + }).sort((a, b) => { var t1 = LOOKUP[a]; var t2 = LOOKUP[b]; return t1 > t2 ? 1 : (t1 === t2 ? 0 : -1); }); }; - var tempCalendars = filter(0); - if (tempCalendars.length && tempCalendars[0] === APP.currentCalendar) { - var $tempCalendarTeam = $(h('div.cp-calendar-team', [ - h('span', Messages.calendar_tempCalendar) - ])).appendTo(APP.$calendars); - var $tempCalendarEntries = appendCalendarEntries(0, filter).appendTo(APP.$calendars); - var importTemp = h('button', [ - h('i.fa.fa-calendar-plus-o'), - h('span', Messages.calendar_import_temp), - h('span') - ]); - $(importTemp).click(function () { - importCalendar({ - id: tempCalendars[0], - teamId: 0 - }, function (err) { - if (err) { - console.error(err); - return void UI.warn(Messages.error); - } - }); - }); - if (APP.loggedIn) { - $tempCalendarEntries.append(h('div.cp-calendar-entry.cp-ghost', importTemp)); - } - return; - } var myCalendars = filter(1); + var totalCalendars = myCalendars.length + Object.keys(privateData.teams).reduce((sum, teamId) => { + return sum + filter(teamId).length; + }, 0); + var $contentContainer = h('div.cp-calendar-content').appendTo($calendars); if (myCalendars.length) { var user = metadataMgr.getUserData(); var avatar = h('span.cp-avatar'); var uid = user.uid; var name = user.name || Messages.anonymous; - common.displayAvatar($(avatar), user.avatar, name, function () { }, uid); - APP.$calendars.append(h('div.cp-calendar-team', [ + common.displayAvatar($(avatar), user.avatar, name, () => {}, uid); + $contentContainer.append(h('div.cp-calendar-team', [ avatar, h('span.cp-name', { title: name }, name) ])); - if (isMobileView) { - createShowCalendarsButton(1, filter, $calendars); - } else { - myCalendars.forEach(function (id) { - makeCalendarEntry(id, 1); - }); - } + myCalendars.forEach((id) => { + var calendarEntry = makeCalendarEntry(id, 1); + $contentContainer.append(calendarEntry); + }); } - // Add new button - var $newContainer = $('').appendTo($calendars); + + // Add the new calendar button + var $newContainer = h('div.cp-calendar-entry.cp-ghost').appendTo($contentContainer); var newButton = h('button', [ h('i.fa.fa-calendar-plus-o'), - h('span', Messages.calendar_new), - h('span') + h('span', Messages.calendar_new) ]); - $(newButton).click(function () { + $(newButton).click(() => { editCalendar(); }).appendTo($newContainer); - Object.keys(privateData.teams).sort().forEach(function (teamId) { + + Object.keys(privateData.teams).sort().forEach((teamId) => { var calendars = filter(teamId); - if (!calendars.length) { return; } + if (!calendars.length) return; var team = privateData.teams[teamId]; var avatar = h('span.cp-avatar'); common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); - APP.$calendars.append(h('div.cp-calendar-team', [ + var $teamContainer = h('div.cp-calendar-team', [ avatar, - h('span.cp-name', { title: team.name }, team.name) - ])); - if (isMobileView) { - createShowCalendarsButton(teamId, filter, $calendars); - } else { - calendars.forEach(function (id) { - makeCalendarEntry(id, 1); - }); - } + h('span.cp-name', { title: team.name }, team.name), + h('span') + ]); + $contentContainer.append($teamContainer); + calendars.forEach((id) => { + var calendarEntry = makeCalendarEntry(id, teamId); + $contentContainer.append(calendarEntry); + }); }); - } - function createShowCalendarsButton(teamId, filter, $parentContainer) { - var $showCalendarsContainer = $('').appendTo($parentContainer); - var showCalendarsBtn = h('button.cp-calendar-showcalendars', [ - h('i.fa.fa-eye'), - h('span', Messages.calendar_show), - h('span') - ]); - var $teamCalendarEntries = appendCalendarEntries(teamId, filter).appendTo(APP.$calendars); - if (state.teamVisibility[teamId]) { - $teamCalendarEntries.show(); - $(showCalendarsBtn).find('span').first().text(Messages.calendar_hide); - } else { - $teamCalendarEntries.hide(); + if (totalCalendars > 2 && isMobileView) { + $contentContainer.hide(); + var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); + var showCalendarsBtn = h('button', [ + h('i.fa.fa-eye'), + h('span', Messages.calendar_show) + ]); + var visible = false; // Initially hidden + $(showCalendarsBtn).click(() => { + visible = !visible; + $contentContainer.toggle(visible); // Toggle visibility of entire content (personal and team calendars) + $(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show); + }).appendTo($showContainer); } - - $(showCalendarsBtn).click(function (e) { - e.preventDefault(); - $teamCalendarEntries.toggle(); - if ($teamCalendarEntries.is(':visible')) { - $(this).find('span').first().text(Messages.calendar_hide); - state.teamVisibility[teamId] = true; // Save visibility state - } else { - $(this).find('span').first().text(Messages.calendar_show); - state.teamVisibility[teamId] = false; // Save visibility state - } - }).appendTo($showCalendarsContainer); } $(window).resize(function () { From 4869fafc78ad96df086bc03b3c2802c467f80824 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:13:14 +0200 Subject: [PATCH 08/21] Toggle calendar visibility on small screens --- www/calendar/app-calendar.less | 1 + www/calendar/inner.js | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/www/calendar/app-calendar.less b/www/calendar/app-calendar.less index f2994eade..bcb240dcc 100644 --- a/www/calendar/app-calendar.less +++ b/www/calendar/app-calendar.less @@ -640,6 +640,7 @@ } &.cp-ghost { padding: 0; + margin-top: 0.5rem; button { .tools_unselectable(); cursor: pointer; diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 8064807c7..9341f6908 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -852,7 +852,7 @@ define([ var totalCalendars = myCalendars.length + Object.keys(privateData.teams).reduce((sum, teamId) => { return sum + filter(teamId).length; }, 0); - var $contentContainer = h('div.cp-calendar-content').appendTo($calendars); + var $contentContainer = $(h('div.cp-calendar-content')).appendTo($calendars); if (myCalendars.length) { var user = metadataMgr.getUserData(); var avatar = h('span.cp-avatar'); @@ -870,10 +870,11 @@ define([ } // Add the new calendar button - var $newContainer = h('div.cp-calendar-entry.cp-ghost').appendTo($contentContainer); + var $newContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($contentContainer); var newButton = h('button', [ h('i.fa.fa-calendar-plus-o'), - h('span', Messages.calendar_new) + h('span', Messages.calendar_new), + h('span') ]); $(newButton).click(() => { editCalendar(); @@ -901,7 +902,8 @@ define([ var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); var showCalendarsBtn = h('button', [ h('i.fa.fa-eye'), - h('span', Messages.calendar_show) + h('span.cp-calendar-title', Messages.calendar_show), + h('span') ]); var visible = false; // Initially hidden $(showCalendarsBtn).click(() => { From 89c26231c20f315fd7c10e5c762888a1e6d08db8 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:41:10 +0300 Subject: [PATCH 09/21] Save visibility state #1371 --- www/calendar/inner.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 9341f6908..f61c345c4 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -826,8 +826,9 @@ define([ var calendars = h('div.cp-calendar-list'); var $calendars = APP.$calendars = $(calendars).appendTo($container); var isMobileView = window.innerWidth <= 600; + var visible = false; // Initialize global 'visible' state for calendars - function updateCalendarsView() { + onCalendarsUpdate.reg(function () { $calendars.empty(); var privateData = metadataMgr.getPrivateData(); var filter = (teamId) => { @@ -868,7 +869,6 @@ define([ $contentContainer.append(calendarEntry); }); } - // Add the new calendar button var $newContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($contentContainer); var newButton = h('button', [ @@ -877,6 +877,7 @@ define([ h('span') ]); $(newButton).click(() => { + visible = $contentContainer.is(':visible'); editCalendar(); }).appendTo($newContainer); @@ -897,6 +898,7 @@ define([ $contentContainer.append(calendarEntry); }); }); + if (totalCalendars > 2 && isMobileView) { $contentContainer.hide(); var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); @@ -905,25 +907,23 @@ define([ h('span.cp-calendar-title', Messages.calendar_show), h('span') ]); - var visible = false; // Initially hidden + $(showCalendarsBtn).click(() => { visible = !visible; - $contentContainer.toggle(visible); // Toggle visibility of entire content (personal and team calendars) + $contentContainer.toggle(visible); $(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show); }).appendTo($showContainer); } - } + $contentContainer.toggle(visible); - $(window).resize(function () { - var newIsMobileView = window.innerWidth <= 600; - if (newIsMobileView !== isMobileView) { - isMobileView = newIsMobileView; - updateCalendarsView(); - } + $(window).resize(function () { + var newIsMobileView = window.innerWidth <= 600; + if (newIsMobileView !== isMobileView) { + isMobileView = newIsMobileView; + onCalendarsUpdate.fire(); + } + }); }); - - onCalendarsUpdate.reg(updateCalendarsView); - onCalendarsUpdate.fire(); }; From 11fd6990a43fc4cca0dda8fd965216274c1126c3 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:45:46 +0300 Subject: [PATCH 10/21] Handle visibility toggling between resizing events --- www/calendar/inner.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index f61c345c4..67e4a87e1 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -826,11 +826,12 @@ define([ var calendars = h('div.cp-calendar-list'); var $calendars = APP.$calendars = $(calendars).appendTo($container); var isMobileView = window.innerWidth <= 600; - var visible = false; // Initialize global 'visible' state for calendars + var visible = !isMobileView; // Initialize 'visible' state: true for large screens, false for mobile onCalendarsUpdate.reg(function () { $calendars.empty(); var privateData = metadataMgr.getPrivateData(); + var filter = (teamId) => { var LOOKUP = {}; return Object.keys(APP.calendars || {}).filter((id) => { @@ -853,7 +854,9 @@ define([ var totalCalendars = myCalendars.length + Object.keys(privateData.teams).reduce((sum, teamId) => { return sum + filter(teamId).length; }, 0); + var $contentContainer = $(h('div.cp-calendar-content')).appendTo($calendars); + if (myCalendars.length) { var user = metadataMgr.getUserData(); var avatar = h('span.cp-avatar'); @@ -877,7 +880,6 @@ define([ h('span') ]); $(newButton).click(() => { - visible = $contentContainer.is(':visible'); editCalendar(); }).appendTo($newContainer); @@ -898,9 +900,7 @@ define([ $contentContainer.append(calendarEntry); }); }); - if (totalCalendars > 2 && isMobileView) { - $contentContainer.hide(); var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); var showCalendarsBtn = h('button', [ h('i.fa.fa-eye'), @@ -914,19 +914,26 @@ define([ $(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show); }).appendTo($showContainer); } - $contentContainer.toggle(visible); + $contentContainer.toggle(visible); $(window).resize(function () { var newIsMobileView = window.innerWidth <= 600; + if (!newIsMobileView) { + visible = true; + $contentContainer.show(); + } if (newIsMobileView !== isMobileView) { isMobileView = newIsMobileView; + if (isMobileView) { + visible = false; + $contentContainer.hide(); + } onCalendarsUpdate.fire(); } }); }); onCalendarsUpdate.fire(); }; - var _updateRecurring = function () { var cal = APP.calendar; if (!cal) { return; } From 9a648b01f3360aebc59f127e38e96791a90049bd Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:04:25 +0300 Subject: [PATCH 11/21] Make 2 or less calendars visible on small screens --- www/calendar/inner.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 67e4a87e1..f291e9a0b 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -900,7 +900,8 @@ define([ $contentContainer.append(calendarEntry); }); }); - if (totalCalendars > 2 && isMobileView) { + if(isMobileView) { + if (totalCalendars > 2) { var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); var showCalendarsBtn = h('button', [ h('i.fa.fa-eye'), @@ -914,6 +915,8 @@ define([ $(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show); }).appendTo($showContainer); } + else {visible = true;} + } $contentContainer.toggle(visible); $(window).resize(function () { From dd30a9edf93f376494ee251d4ce0430258f8421e Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:07:29 +0300 Subject: [PATCH 12/21] Display correct name of show/hide calendars --- www/calendar/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index f291e9a0b..187d51c6a 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -905,7 +905,7 @@ define([ var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); var showCalendarsBtn = h('button', [ h('i.fa.fa-eye'), - h('span.cp-calendar-title', Messages.calendar_show), + h('span.cp-calendar-title', visible ? Messages.calendar_hide : Messages.calendar_show), h('span') ]); From 6e3a756d511d3091f1d2756d533b9cfedc3b3c7f Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Tue, 22 Oct 2024 09:51:59 +0300 Subject: [PATCH 13/21] Implement UI review fixes --- www/calendar/app-calendar.less | 2 +- www/calendar/inner.js | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/www/calendar/app-calendar.less b/www/calendar/app-calendar.less index bcb240dcc..65424d200 100644 --- a/www/calendar/app-calendar.less +++ b/www/calendar/app-calendar.less @@ -640,7 +640,7 @@ } &.cp-ghost { padding: 0; - margin-top: 0.5rem; + margin-top: 1rem; button { .tools_unselectable(); cursor: pointer; diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 187d51c6a..40ffc1e47 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -775,7 +775,7 @@ define([ var data = APP.calendars[id]; var edit; if (data.loading) { - edit = h('i.fa.fa-spinner.fa-spin'); + edit = h('i.fa.fa-spinner.fa-spin', {'aria-hidden': 'true'}); } else { edit = makeEditDropdown(id, teamId); } @@ -796,8 +796,8 @@ define([ h('i.cp-calendar-inactive.fa.fa-calendar-o') ]), h('span.cp-calendar-title', md.title), - data.restricted ? h('i.fa.fa-ban', {title: Messages.fm_restricted}) : - (isReadOnly(id, teamId) ? h('i.fa.fa-eye', {title: Messages.readonly}) : undefined), + data.restricted ? h('i.fa.fa-ban', {title: Messages.fm_restricted}, {'aria-hidden': 'true'}) : + (isReadOnly(id, teamId) ? h('i.fa.fa-eye', {title: Messages.readonly}) : undefined, {'aria-hidden': 'true'}), edit ]); var $calendar = $(calendar).click(function () { @@ -875,7 +875,7 @@ define([ // Add the new calendar button var $newContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($contentContainer); var newButton = h('button', [ - h('i.fa.fa-calendar-plus-o'), + h('i.fa.fa-calendar-plus-o', {'aria-hidden': 'true'}), h('span', Messages.calendar_new), h('span') ]); @@ -903,15 +903,20 @@ define([ if(isMobileView) { if (totalCalendars > 2) { var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); + var iconClass = visible ? 'fa-eye-slash' : 'fa-eye'; + var buttonText = visible ? Messages.calendar_hide : Messages.calendar_show; var showCalendarsBtn = h('button', [ - h('i.fa.fa-eye'), - h('span.cp-calendar-title', visible ? Messages.calendar_hide : Messages.calendar_show), + h('i.fa.' + iconClass, {'aria-hidden': 'true'}), + h('span.cp-calendar-title', buttonText), h('span') ]); $(showCalendarsBtn).click(() => { visible = !visible; $contentContainer.toggle(visible); + iconClass = visible ? 'fa-eye-slash' : 'fa-eye'; + buttonText = visible ? Messages.calendar_hide : Messages.calendar_show; + $(showCalendarsBtn).find('i').attr('class', 'fa ' + iconClass); $(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show); }).appendTo($showContainer); } @@ -1296,7 +1301,7 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v APP.toolbar.$bottomR.append($block); // New event button var newEventBtn = h('button.cp-calendar-newevent', [ - h('i.fa.fa-plus'), + h('i.fa.fa-plus', {'aria-hidden': 'true'}), h('span', Messages.calendar_newEvent) ]); $(newEventBtn).click(function (e) { @@ -2169,7 +2174,7 @@ APP.recurrenceRule = { // Customize creation/update popup var onCalendarPopup = function (el) { var $el = $(el); - $el.find('.tui-full-calendar-confirm').addClass('btn btn-primary').prepend(h('i.fa.fa-floppy-o')); + $el.find('.tui-full-calendar-confirm').addClass('btn btn-primary').prepend(h('i.fa.fa-floppy-o', {'aria-hidden': 'true'})); $el.find('input').attr('autocomplete', 'off'); $el.find('.tui-full-calendar-dropdown-button').addClass('btn btn-secondary'); $el.find('.tui-full-calendar-popup-close').addClass('btn btn-cancel fa fa-times cp-calendar-close').empty(); @@ -2251,7 +2256,7 @@ APP.recurrenceRule = { $el.find('.tui-full-calendar-content').removeClass('tui-full-calendar-content'); var delButton = h('button.btn.btn-danger', [ - h('i.fa.fa-trash'), + h('i.fa.fa-trash', {'aria-hidden': 'true'}), h('span', Messages.kanban_delete) ]); var $del = $el.find('.tui-full-calendar-popup-delete').hide(); @@ -2284,7 +2289,7 @@ APP.recurrenceRule = { // This is a recurring event, add button to stop recurrence now var $b = $(h('button.btn.btn-default', [ - h('i.fa.fa-times'), + h('i.fa.fa-times', {'aria-hidden': 'true'}), h('span', Messages.calendar_rec_stop) ])).insertBefore($section); UI.confirmButton($b[0], { classes: 'btn-default' }, function () { From 2c1554cf49ad788cca778bb89ff2f5b19449316a Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Sun, 1 Dec 2024 15:46:26 +0200 Subject: [PATCH 14/21] Fix accessibility focus issue --- www/calendar/inner.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 40ffc1e47..4daf2f30f 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -796,8 +796,8 @@ define([ h('i.cp-calendar-inactive.fa.fa-calendar-o') ]), h('span.cp-calendar-title', md.title), - data.restricted ? h('i.fa.fa-ban', {title: Messages.fm_restricted}, {'aria-hidden': 'true'}) : - (isReadOnly(id, teamId) ? h('i.fa.fa-eye', {title: Messages.readonly}) : undefined, {'aria-hidden': 'true'}), + data.restricted ? h('i.fa.fa-ban', {title: Messages.fm_restricted, 'aria-hidden': 'true'}) : + (isReadOnly(id, teamId) ? h('i.fa.fa-eye', {title: Messages.readonly, 'aria-hidden': 'true'}) : undefined), edit ]); var $calendar = $(calendar).click(function () { @@ -906,7 +906,7 @@ define([ var iconClass = visible ? 'fa-eye-slash' : 'fa-eye'; var buttonText = visible ? Messages.calendar_hide : Messages.calendar_show; var showCalendarsBtn = h('button', [ - h('i.fa.' + iconClass, {'aria-hidden': 'true'}), + h('i.fa.' + iconClass, {'aria-hidden': "true"}), h('span.cp-calendar-title', buttonText), h('span') ]); @@ -916,7 +916,7 @@ define([ $contentContainer.toggle(visible); iconClass = visible ? 'fa-eye-slash' : 'fa-eye'; buttonText = visible ? Messages.calendar_hide : Messages.calendar_show; - $(showCalendarsBtn).find('i').attr('class', 'fa ' + iconClass); + $(showCalendarsBtn).find('i').attr('class', 'fa ' + iconClass).attr('aria-hidden', "true"); $(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show); }).appendTo($showContainer); } From 5ee473ee3aeab62618dfd19e056a63ff2d7f4b8c Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:08:48 +0200 Subject: [PATCH 15/21] Delete unnecessary refactoring --- www/calendar/inner.js | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 4daf2f30f..21d662656 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -818,7 +818,7 @@ define([ }); } if (APP.$calendars) { APP.$calendars.append(calendar); } - return $calendar; // return jQuery element + return calendar; // return jQuery element }; var makeLeftside = function (calendar, $container) { @@ -834,16 +834,17 @@ define([ var filter = (teamId) => { var LOOKUP = {}; - return Object.keys(APP.calendars || {}).filter((id) => { + return Object.keys(APP.calendars || {}).filter(function(id) { var cal = APP.calendars[id] || {}; - var teams = (cal.teams || []).map((tId) => Number(tId)); - return teams.indexOf(typeof (teamId) !== "undefined" ? Number(teamId) : 1) !== -1; - }).map((k) => { + var teams = (cal.teams || []).map(function (tId) { return Number(tId); }); + return teams.indexOf(typeof(teamId) !== "undefined" ? Number(teamId) : 1) !== -1; + }).map(function (k) { + // nearly constant-time pre-sort var cal = APP.calendars[k] || {}; var title = Util.find(cal, ['content', 'metadata', 'title']) || ''; LOOKUP[k] = title; return k; - }).sort((a, b) => { + }).sort(function(a, b) { var t1 = LOOKUP[a]; var t2 = LOOKUP[b]; return t1 > t2 ? 1 : (t1 === t2 ? 0 : -1); @@ -862,10 +863,10 @@ define([ var avatar = h('span.cp-avatar'); var uid = user.uid; var name = user.name || Messages.anonymous; - common.displayAvatar($(avatar), user.avatar, name, () => {}, uid); + common.displayAvatar($(avatar), user.avatar, name, function(){}, uid); $contentContainer.append(h('div.cp-calendar-team', [ avatar, - h('span.cp-name', { title: name }, name) + h('span.cp-name', {title: name}, name) ])); myCalendars.forEach((id) => { var calendarEntry = makeCalendarEntry(id, 1); @@ -891,7 +892,7 @@ define([ common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); var $teamContainer = h('div.cp-calendar-team', [ avatar, - h('span.cp-name', { title: team.name }, team.name), + h('span.cp-name', {title: team.name}, team.name), h('span') ]); $contentContainer.append($teamContainer); @@ -901,15 +902,15 @@ define([ }); }); if(isMobileView) { - if (totalCalendars > 2) { - var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); - var iconClass = visible ? 'fa-eye-slash' : 'fa-eye'; - var buttonText = visible ? Messages.calendar_hide : Messages.calendar_show; - var showCalendarsBtn = h('button', [ - h('i.fa.' + iconClass, {'aria-hidden': "true"}), - h('span.cp-calendar-title', buttonText), - h('span') - ]); + if (totalCalendars > 2) { + var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars); + var iconClass = visible ? 'fa-eye-slash' : 'fa-eye'; + var buttonText = visible ? Messages.calendar_hide : Messages.calendar_show; + var showCalendarsBtn = h('button', [ + h('i.fa.' + iconClass, {'aria-hidden': "true"}), + h('span.cp-calendar-title', buttonText), + h('span') + ]); $(showCalendarsBtn).click(() => { visible = !visible; From 80c97b09e591ec341a46aa34ff24fa99acd1b4f6 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:14:21 +0200 Subject: [PATCH 16/21] Add the temp calendars logic --- www/calendar/inner.js | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 21d662656..c2928d8a4 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -818,7 +818,7 @@ define([ }); } if (APP.$calendars) { APP.$calendars.append(calendar); } - return calendar; // return jQuery element + return calendar; }; var makeLeftside = function (calendar, $container) { @@ -832,9 +832,9 @@ define([ $calendars.empty(); var privateData = metadataMgr.getPrivateData(); - var filter = (teamId) => { + var filter = function (teamId) { var LOOKUP = {}; - return Object.keys(APP.calendars || {}).filter(function(id) { + return Object.keys(APP.calendars || {}).filter(function (id) { var cal = APP.calendars[id] || {}; var teams = (cal.teams || []).map(function (tId) { return Number(tId); }); return teams.indexOf(typeof(teamId) !== "undefined" ? Number(teamId) : 1) !== -1; @@ -844,12 +844,39 @@ define([ var title = Util.find(cal, ['content', 'metadata', 'title']) || ''; LOOKUP[k] = title; return k; - }).sort(function(a, b) { + }).sort(function (a, b) { var t1 = LOOKUP[a]; var t2 = LOOKUP[b]; return t1 > t2 ? 1 : (t1 === t2 ? 0 : -1); }); }; + var tempCalendars = filter(0); + if (tempCalendars.length && tempCalendars[0] === APP.currentCalendar) { + APP.$calendars.append(h('div.cp-calendar-team', [ + h('span', Messages.calendar_tempCalendar) + ])); + makeCalendarEntry(tempCalendars[0], 0); + var importTemp = h('button', [ + h('i.fa.fa-calendar-plus-o'), + h('span', Messages.calendar_import_temp), + h('span') + ]); + $(importTemp).click(function () { + importCalendar({ + id: tempCalendars[0], + teamId: 0 + }, function (err) { + if (err) { + console.error(err); + return void UI.warn(Messages.error); + } + }); + }); + if (APP.loggedIn) { + APP.$calendars.append(h('div.cp-calendar-entry.cp-ghost', importTemp)); + } + return; + } var myCalendars = filter(1); var totalCalendars = myCalendars.length + Object.keys(privateData.teams).reduce((sum, teamId) => { From 994bd61c9380d9ce8784500cbe7c17e083729747 Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Thu, 5 Dec 2024 18:03:16 +0200 Subject: [PATCH 17/21] Remove some more refactoring --- www/calendar/inner.js | 1 - 1 file changed, 1 deletion(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index c2928d8a4..40381dc87 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -831,7 +831,6 @@ define([ onCalendarsUpdate.reg(function () { $calendars.empty(); var privateData = metadataMgr.getPrivateData(); - var filter = function (teamId) { var LOOKUP = {}; return Object.keys(APP.calendars || {}).filter(function (id) { From ddf4e56304b967825c490622fb0b0ece142f71ec Mon Sep 17 00:00:00 2001 From: DianaXWiki <139217939+DianaXWiki@users.noreply.github.com> Date: Thu, 5 Dec 2024 18:06:03 +0200 Subject: [PATCH 18/21] Add function explicitly --- www/calendar/inner.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/www/calendar/inner.js b/www/calendar/inner.js index 40381dc87..d02383370 100644 --- a/www/calendar/inner.js +++ b/www/calendar/inner.js @@ -906,13 +906,13 @@ define([ h('span', Messages.calendar_new), h('span') ]); - $(newButton).click(() => { + $(newButton).click(function () { editCalendar(); }).appendTo($newContainer); - Object.keys(privateData.teams).sort().forEach((teamId) => { + Object.keys(privateData.teams).sort().forEach(function (teamId) { var calendars = filter(teamId); - if (!calendars.length) return; + if (!calendars.length) { return; } var team = privateData.teams[teamId]; var avatar = h('span.cp-avatar'); common.displayAvatar($(avatar), team.avatar, team.displayName || team.name); From 495435ec07d91f20fc3d8c46dd7673d9a6b5d258 Mon Sep 17 00:00:00 2001 From: yflory