.now { }\r
.description { }\r
.icon { }\r
+.overdue {}\r
</style>\r
\r
<script type="text/javascript" src="localizedTextStrings.js" charset="utf-8" />\r
tomorrowText: { Type: 'String', Default: getLocalizedText('settings.default.tomorrowText'), Value: getLocalizedText('settings.default.tomorrowText'),},\r
showNowAsText: { Type: 'Bool', Default: true, Value: true,},\r
nowText: { Type: 'String', Default: getLocalizedText('settings.default.nowText'), Value: getLocalizedText('settings.default.nowText'),},\r
+ markOverdueTodos: { Type: 'Bool', Default: true, Value: true,},\r
+ overdueText: {Type: 'String', Default: getLocalizedText('settings.default.overdueText'), Value: getLocalizedText('settings.default.overdueText'),},\r
dateSeparator: { Type: 'String', Default: getLocalizedText('settings.default.dateSeparator'), Value: getLocalizedText('settings.default.dateSeparator'),},\r
dateFormat: { Type: 'Enum', Default: 'auto', Value: 'auto', ValidValues: ['auto', 'DDMM', 'MMDD'],},\r
weekDayLength: { Type: 'Int', Default: 2, Value: 2,},\r
cssStyle_now: { Type: 'String', Default: 'color:#ff00ff', Value: 'color:#ff00ff',},\r
cssStyle_description: { Type: 'String', Default: '', Value: '',},\r
cssStyle_icon: { Type: 'String', Default: 'width:15px; height:15px', Value: 'width:15px; height:15px',},\r
+ cssStyle_overdue: { Type: 'String', Default: 'color:#ffff00', Value: 'color:#ffff00',},\r
}\r
\r
\r
// Nothing of interest from here on...\r
//-------------------------------------------------------\r
var panelNum = 0; // use 1 for second panel\r
-var version = "1.25";\r
+var version = "1.26";\r
var versionURL = "http://comingnext.sourceforge.net/version.xml";\r
var calendarService = null;\r
var cacheEntriesHtml = [];\r
document.getElementById("calendarList").innerHTML = 'Error: ' + message;\r
}\r
\r
-function isToday(date)\r
+function areDatesEqual(date1, date2)\r
{\r
- if (date.getDate() == now.getDate() && date.getMonth() == now.getMonth())\r
- return true;\r
- return false;\r
+ return (date1.getFullYear() == date2.getFullYear() && \r
+ date1.getMonth() == date2.getMonth() && \r
+ date1.getDate() == date2.getDate());\r
}\r
\r
function isTomorrow(date)\r
{\r
- if ((date.getDate() == now.getDate() + 1 && date.getMonth() == now.getMonth()) ||\r
- (date.getDate() == 0 && date.getMonth() == now.getMonth() + 1) ||\r
- (date.getDate() == 0 && date.getMonth() == now.getMonth() + 1 && date.getYear() == now.getYear() + 1))\r
- return true;\r
- return false;\r
+ // tommorow = now + 1 day\r
+ // ToDo: some days can be shorter as 24 hours(daylight saving change day)\r
+ return areDatesEqual(date, new Date (now.getTime() + 24*60*60*1000));\r
+}\r
+\r
+function isToday(date)\r
+{\r
+ return areDatesEqual(date, now);\r
}\r
\r
function collectLocales()\r
{\r
- var tmpyear = ((panelNum == 0) ? 2000 : 2001);\r
+ var tmpyear = 2000 + panelNum;\r
var month = 0;\r
\r
if (months_translated.length > 0)\r
var counter = 0;\r
var entryDate = '';\r
var dateArr = [];\r
- var entriesHtml = '<table>';\r
+ var fontsize = 'normal';\r
+ if (mode == 0) {\r
+ if (config['eventsPerWidget'].Value == 3) {\r
+ fontsize = '17pt';\r
+ changeCssClass('.icon', 'width:20px; height:20px');\r
+ }\r
+ else if (config['eventsPerWidget'].Value == 5) {\r
+ fontsize = '10pt';\r
+ changeCssClass('.icon', 'width:10px; height:10px');\r
+ }\r
+ else if (config['eventsPerWidget'].Value == 6) {\r
+ fontsize = '8pt';\r
+ changeCssClass('.icon', 'width:8px; height:8px');\r
+ }\r
+ }\r
+ else\r
+ changeCssClass('.icon', config['cssStyle_icon'].Value);\r
+ var entriesHtml = '<table style="font-size:' + fontsize + ';">';\r
var eventIds = [];\r
var max;\r
if (mode == 0)\r
- max = ((panelNum == 0) ? config['eventsPerWidget'].Value : 2 * config['eventsPerWidget'].Value);\r
+ max = (panelNum + 1) * config['eventsPerWidget'].Value;\r
else\r
max = 30; // we can display a lot more events in fullscreen mode\r
\r
}\r
\r
// skip events for the first panel in case this is the second one and we're not in fullscreen mode\r
- if (mode == 0 && panelNum == 1 && counter < config['eventsPerWidget'].Value + 1) {\r
+ if (mode == 0 && panelNum > 0 && counter < panelNum * config['eventsPerWidget'].Value + 1) {\r
console.info('skipping (already in first widget) ' + entry.id);\r
continue;\r
}\r
+ \r
+ // mark overdue todos\r
+ var overdue = false;\r
+ if (entry.Type == 'ToDo') {\r
+ var tmp1 = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0,0,0);\r
+ var tmp2 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0,0,0);\r
+ if (tmp1.getTime() < tmp2.getTime()) {\r
+ overdue = true;\r
+ }\r
+ }\r
\r
// generate html output\r
entriesHtml += '<tr><td><img class="icon" src="' + entry.Type + '.png" /></td>';\r
var weekDay = date.toLocaleDateString().substr(0,config['weekDayLength'].Value);\r
var time = formatTime(date);\r
var dateStr = formatDate(date, entryDate);\r
- if (entry.Type == 'ToDo' || entry.Type == 'Anniversary' || entry.Type == 'DayEvent' || entry.Type == 'Reminder') {\r
+ if (entry.Type == 'ToDo' && overdue && config['markOverdueTodos'].Value) {\r
+ dateStr = '<span class="overdue">' + config['overdueText'].Value + '</span>';\r
+ entriesHtml += '<td colspan="4" width="1px"><span class="date">' + dateStr + '</span> ';\r
+ } else if (entry.Type == 'ToDo' || entry.Type == 'Anniversary' || entry.Type == 'DayEvent' || entry.Type == 'Reminder') {\r
if ((isToday(date) || isTomorrow(date)) && config['showTodayAsText'].Value) // show weekday if the date string is not text. looks odd otherwise\r
entriesHtml += '<td colspan="4" width="1px"><span class="date">' + dateStr + '</span> ';\r
else\r
<p class="credits">Paul Moore (bug fixes, new features and code cleanup)</p>\r
<p class="credits">Manfred Hanselmann (DST support)</p>\r
<p class="credits">Christophe Milsent (translation support & french translation</p>\r
+ <p class="credits">Flavio Nathan (portuguese-brazilian translation</p>\r
<p>This software is open source and licensed under the GPLv3.</p>\r
<p>Visit sourceforge.net/projects/comingnext for free updates.</p>\r
<hr />\r