X-Git-Url: https://code.delx.au/comingnext/blobdiff_plain/425ada1748988af6de379edb00cca52c2a4eadf2..49b3192bd87d80c776f06b92123c70be34bc2fac:/comingNext/index.html diff --git a/comingNext/index.html b/comingNext/index.html index 14da1c3..eaecb85 100644 --- a/comingNext/index.html +++ b/comingNext/index.html @@ -83,7 +83,7 @@ var config = { // Nothing of interest from here on... //------------------------------------------------------- var panelNum = 0; // use 1 for second panel -var version = "1.33"; +var version = "1.37"; var versionURL = "http://comingnext.sourceforge.net/version.xml"; var calendarService = null; var cacheEntriesHtml = []; @@ -106,6 +106,8 @@ var reloadInterval = 6 * 60 * 60 * 1000; // = 6 hours; time interval for reloadi var errorOccured = false; var entryLists = null; // stores all fetched calendar entries until data is refreshed var statupSuccessful = false; // indicates if everything started up wihtout errors. If we detect an error after that, it might just be a temporary problem e.g. by a backup process. +var use12hoursTimeFormat = false; // defines how time should be formated: 19:00 or 07:00 pm +var timeFormatSeparator = ":"; // format time 19:00 or 19.00 depending on system setting // vars for daylight saving time var summertime = false; // true, if current date is in summer, false if in winter @@ -345,6 +347,7 @@ function collectLocales() var curWeekday = ""; while (weekdaylist && (entry = weekdaylist.getNext()) != undefined) { + detectTimeFormat(entry.StartTime + ''); curWeekday = (entry.StartTime + '').split(',')[0]; log(entry.StartTime + ' -> ' + curWeekday + ' ' + counter2); ids[counter + counter2] = entry.id; @@ -372,6 +375,19 @@ function collectLocales() } } +function stringEndsWith(str, suffix) +{ + return str.indexOf(suffix, str.length - suffix.length) !== -1; +} + +// detects the system's current time format by parsing a native calendar timestamp (this is the only reliable formating across all devices and firmwares) +function detectTimeFormat(localeTimeString) +{ + localeTimeString = localeTimeString.toLowerCase(); + use12hoursTimeFormat = stringEndsWith(localeTimeString, "am") || stringEndsWith(localeTimeString, "pm"); + timeFormatSeparator = localeTimeString.indexOf(":") != -1 ? ":" : "."; +} + function requestNotification() { var criteria = new Object(); @@ -516,7 +532,7 @@ function parseDate(dateString) function getWeekdayLocalized(date) { var localizedString = date.toLocaleDateString(); - if (localizedString.match(/\d\d\/\d\d\/\d\d/)) { + if (localizedString.indexOf(",") == -1) { return weekdays_translated[date.getDay()]; } else return localizedString.split(',')[0]; @@ -588,12 +604,35 @@ function formatDate(date, format) function formatTime(date) { // date is a Date() object - date.setSeconds(0); // we don't care about seconds - var time = date.toLocaleTimeString().replace(/[\.:]00/, ''); // remove seconds from string - if (time.replace(/\./, ':').split(':')[0].length < 2) - time = '0' + time; + var hour = date.getHours(); + var minute = date.getMinutes(); + + // don't use Date().toLocaleTimeString() as it is utterly broken on newer firmwares + if (use12hoursTimeFormat) { + var ap = "AM"; + if (hour > 11) + ap = "PM"; + if (hour > 12) + hour = hour - 12; + if (hour == 0) + hour = 12; + if (hour < 10) + hour = "0" + hour; + if (minute < 10) + minute = "0" + minute; + time = hour + timeFormatSeparator + minute + " " + ap; + } + else { + if (hour < 10) + hour = "0" + hour; + if (minute < 10) + minute = "0" + minute; + time = hour + timeFormatSeparator + minute; + } + if (config['showNowAsText'].Value && date.getTime() == now.getTime()) time = '' + config['nowText'].Value + ''; + log("formatTime(): " + time + ", use12hoursTimeFormat=" + use12hoursTimeFormat + ", timeFormatSeparator=" + timeFormatSeparator + ", date.toLocateTimeString(): " + date.toLocaleTimeString()); return time; } @@ -611,7 +650,7 @@ function updateData() // This usually happens when a backup is being made. // Retry the next time updateData() is called by // resetting errorOccured - log('updateData(): listCalendars() failed, trying again laster...'); + log('updateData(): listCalendars() failed, trying again later...'); cacheEntriesHtml = ''; // make sure we replace the currently shown error message on the next update errorOccured = false; return; @@ -695,23 +734,26 @@ function updateData() var entryDate = ''; var dateArr = []; var fontsize = 'normal'; + var lineheight = 'normal'; if (mode == 0) { + fontsize = parseInt(72 / config['eventsPerWidget'].Value) + 'px'; + lineheight = parseInt(82 / config['eventsPerWidget'].Value) + 'px'; + if (config['eventsPerWidget'].Value == 3) { - fontsize = '17pt'; changeCssClass('.icon', 'width:20px; height:20px'); } else if (config['eventsPerWidget'].Value == 5) { - fontsize = '10pt'; changeCssClass('.icon', 'width:10px; height:10px'); } else if (config['eventsPerWidget'].Value == 6) { - fontsize = '8pt'; changeCssClass('.icon', 'width:8px; height:8px'); } } else changeCssClass('.icon', config['cssStyle_icon'].Value); - var entriesHtml = ''; + var entriesHtml = '
'; + if (mode == 0) + entriesHtml = '
' + entriesHtml; // this is needed to center the actual content vertically var eventIds = []; var max; if (mode == 0) @@ -782,6 +824,14 @@ function updateData() log('date: ' + date); var endDate = ((entryEndTime == null) ? null : parseDate(entryEndTime)); log('endDate: ' + endDate); + + // check if Meeting is actually a DayEvent. Bug introduced by "Anna" updates to various Symbian^3 devices. + // Note that this workaround is not 100% save! It might missinterpret some meetings as dayevents of starting and ending on 00:00 + if (entry.Type == 'Meeting' && date.getHours() == 0 && date.getMinutes() == 0 && + endDate != null && endDate.getHours() == 0 && endDate.getMinutes() == 0) { + log('fixing event type: changed from "Meeting" to "DayEvent".'); + entry.Type = 'DayEvent'; + } // check if meeting event has already passed if (entry.Type == 'Meeting') { @@ -885,10 +935,13 @@ function updateData() } } entriesHtml += '
'; + if (mode == 0) + entriesHtml = entriesHtml + ''; if (config['showNothingText'].Value && entriesHtml == '
') { var text = config['nothingText'].Value.replace(/%d/, config['monthRange'].Value); entriesHtml = '
' + text + '
'; } + log("output: " + entriesHtml); if (cacheEntriesHtml != entriesHtml) { if (mode == 0) document.getElementById('calendarList').innerHTML = entriesHtml; @@ -1247,7 +1300,7 @@ function loadSettings() log('Warning: unknown or invalid setting: ' + stringlist[i]); continue; } - log('stringlist: ' + key + '=\'' + value + '\''); + log('stringlist[' + i + ']: ' + key + '=\'' + value + '\''); if (config[key].Type == 'Int') { config[key].Value = Number(value); if (isNaN(config[key].Value)) @@ -1679,15 +1732,15 @@ function log(message)