Description of changes to the Javascript library calendarX.X.js for display of multiple Google calendars with search by text/date and Word Export. (c) 2019, Pfarre Sandleiten, version 6.1 ----------------------------------------------------------------------------------------------- Version Date Description of changes ----------------------------------------------------------------------------------------------- 1.0 26.01.2014 - Initial version - Calendar-, text- and date selection fields outside the calendar iframe. - Search requests to Google are sent via Javascript. 1.1 30.01.2014 - Larger calendar selection fields for mobile devices with touch-displays. - Datepicker controls added for date selection fields. 1.2 26.02.2015 - Compact list format added to improve presentation of searchresults on smaller mobile screens. - Preview format added to display events of coming 1-4 weeks. 1.3 26.03.2015 - Miscellaneous error corrections and improvements. 2.0 18.04.2015 - Calendar requests to Google are now sent via PHP to allow read/write to calendar contents before display on client. - A color-character code added to Calendar mode "Agenda" to better identify to which calendar an event belongs. - Calendar startdate and mode preserved when calendar selection is changed. - Calendar selections preserved when changing between calendar and search. - Printer and Google calendar icons are now shown in the calendar. 2.1 26.05.2015 - Holiday names shown for dates which are defined in the holidays calendar or in the Pfarrübergreifend calendar with description "**Feiertag". - Info message improved for no results found or no calendars selected. 2.2 20.06.2015 - Added parameter "hl=de" to force Google API to return calendar feed in German language as well as European dates and times instead. Logic for date/time conversion was removed/changed accordingly. 2.3 29.06.2015 - In the preview "pfarrübergreifende" events are highlighted with the corresponding color and explained with a footnote at the bottom. 29.09.2015 - Selecting or deseleting Pfarren in the Week mode did not work because a wrong date pattern was used in function convertStartdateToYYYYMMDD. 3.0 22.10.2015 - The XML feed was replaced by the use of the calendar API v3 because the XML feed format was discontinued by Google. Search functions were adapted accordingly to handle the events in json format returned by the API request. No functional changes. 3.1 19.11.2015 - Error correction: Preserving startdate and mode in the calendar (as introduced with version 2.0) did not work when calendar page and PHP are in different domains. - Error correction: For multi days events Google API sends wrong end date, e.g. for a 2-days event 1.-2.Jan it reports a 3-days event 1.-3.Jan. - Added logic to dynamically find the "home" calendars which are initially selected and should stay selected when the "All" selection is deactivated. 03.01.2016 - Added logic to the search function for highlighting the entered search words found in the text of the search results. Highlight is defined with a user customizable CSS class, default is yellow background. 3.2 01.02.2016 - Error correction: If search button was triggered more than once in quick succession events were duplicated in the search results. Now a search is only performed once with the same search parameters and selections. 17.02.20016 - Remove test for Google API error with multi-days events and always reset end date by one day. Google replied that this is on purpose and no error. 11.03.2016 - Display busy cursor while search requests are executed. 14.03.2016 - For the calendar preview use a timer to check that the holidays array is filled by the asynchroneous callback function before loading the events. 17.03.2016 - Error correction: Multi-days event was shown intermixed with single day events. Logic changed accordingly to show multi-days events always separately from single days. 4.0 22.04.2016 - New functionality added for "single event listing", i.e. a short listing of dates for a particular single event such as "Abendgebet" or "Bibelrunde". Supports only one such listing per page. 25.04.2016 - Improve display of single event listing to allow additional info after date/time: (a) trailing star in search term to add info after search term, e.g. if search term is "Abendgebet*" and title is "Abendgebet (Taize)" it will show "Di 22.Sep 2015, 18:45 - 19:45, Taize", (b) leading star will add whole title, e.g. if search term is *PGR Klausur" and title is "PGR Klausur (Schönstatt) " it will show "Fr 2.Okt 2015 - Sa 3.Okt 2015, PGR Klausur (Schönstatt)". 4.1 29.08.2016 - On mobile phones always show calendar in mode "agenda" for better readability. 4.2 01.11.2016 - In the searchresults add a link on event level for "Copy to my calendar". - Enable Export to Word, only supported on desktop PCs. The main purpose is to avoid retyping events for miscellaneous publications. The calendar search is reused to generate an event list that can be exported to Word using an open source jQuery module. - Add an expiration date of +1 year for cookies. 14.11.2016 - Add Word Export options for font-family, font-size and for time range. 17.11.2016 - Attach current selection parameters as query paremeters when calling the Word Export page. 28.11.2016 - Change "pikaday" (for datepicker) from jQuery version to pure javascript which allows dynamic control of min and max dates to be selected so that from-date cannot go beyond to-date and vice versa. 4.3 18.12.2016 - Add new function for Word Export to prepare "Paragraph" layouts in HTML which converts all events in the searchresults table to

paragraphs with Word compatible tab stops. 01.01.2017 - Add new option line spacing for Word Export. 5.0 25.02.2017 - Redesign the Word Export page to allow users defining their own layout by arranging fields into 1-5 columns and saving layouts. 03.03.2017 - Allow text search in OR relationship separated by comma (e.g. erstkommunion, EK) and support search for phrases in quotation marks (e.g. "EK Feier"). 30.03.2017 - Correct Google datesearch error to not include multi-day events of one day outside the selected to-date, e.g. if selection of March 1-31 is passed to Google it would also return a multi-day event of April 1-2. 5.1 10.06.2017 - Modify logic to save layout options in text files on the server providing a separate folder per calendar owner. Saving and changing layouts is only allowed in the folder of the currently open web site, i.e. maintainenace of Sandleiten layouts is only possible from the Sandleiten calendar page and Schmelz layouts only from the Schmelz page. 09.08.2017 - Remove logic from initWordExport to assign styles to parent

s. Instead styles are already included in HTML in special wrapper
s. 10.08.2017 - Add button on the Word Export page for rename of layouts. 13.08.2017 - Combine buttons for Save, Save as, Rename and Remove into one button which opens a dropdown box with these 4 buttons arranged vertically. 16.08.2017 - Add the initial load of the Word Export page to the PHP to make the integration of Word Export easier on other websites. 13.09.2017 - Also load Html of the calendar page via PHP. 27.09.2017 - Also load Html for preview and for single-event-listing via PHP. 5.2 20.10.2017 - Combine calendar and Word Export on one page to avoid complete reloading of pages when changing between calendar and Word Export function. 5.3 25.11.2017 - Add dialog window for initial layout selection when user first clicks on the Word Export tab. And logic removed to save the last used layout in a cookie. 04.12.2017 - Add an animated waiting info to be shown for longer lasting search. 5.4 15.01.2018 - Use Google batch requests instead of requests per calendar to optimize waiting time of asynchroneous requests. - Remove the animated waiting info for longer lasting search and show only busy cursor while waiting for response from asynchroneous batch request. - Change back to requests per calendar instead of using batch requests. The sending of requests to/from Google server does not waste time and using single requests per calendar provides better feedback to user, i.e. user can see how events are being added to the searchresults. 5.5 15.04.2018 - Include calendar selections in the tab containers so that calendar selections can be kept individually per tab. 5.6 18.05.2018 - Take options for color, calendar-format, home calendars and script-URL from the HTML page. The script-URL defines where script and stylesheet are located. - Several optimizations in code. - Error correction: Change of tabs did not work when there are 2 or more tabsbars on a page. 6.0 14.06.2018 - Use window.postmessage for cross-domain communication between Google calendar iframe and the main page. - Use jQuery more extensively to get rid of basic functions like hasClass, trim, hideElement, etc. - Check for mobile device using 2 equivalent methods, i.e. either tag has class "mobile" or using "mobile-detect-min.js". 30.10.2018 - Replace inline-styles in the Word Export searchresults table by classes with corresponding styles in an external css stylesheet. 15.11.2018 - Add pageformat option for Word Export, i.e. A3, A4 and A5 with portrait or landscape. 17.12.2018 - Add columnspacing option for Word Export, i.e. padding left/right in table columns. 15.01.2019 - Add a page count to the "Events found" message so that user knows how many pages the exported Word document will have. 6.1 31.01.2019 - In Word Export preview display the expected number of pages and show horizontal separator lines for page breaks. 10.04.2019 - Define all language constants externally in the html snippets and extract from there at initial load. This will enable easier language translation. 11.05.2019 - Optimize loading of calendar to the HTML page using eventlistener instead of window.onload. 13.05.2019 - Filter special Jewish and protestant holidays ("JOM Kippur" and "Reformationstag"). ------------------------------------------------------------------------------------------------ --> still to do ------------------------------------------------------------------------------------------------ ?.? ??.??.???? - In the searchresults add a link on event level for "Copy to private calendar".