Performance tweaking in calendar_macro: use java.text.DateFormatSymbols to print weekday labels instead of calendar object

This commit is contained in:
Hannes Wallnöfer 2002-10-20 17:26:49 +00:00
parent 3c588cba11
commit 8ea6508ea3

View file

@ -383,7 +383,21 @@ function calendar_macro(param) {
var dayParam = new Object(); var dayParam = new Object();
var weekParam = new Object(); var weekParam = new Object();
// create new calendar-object and set day to first day of month // create new calendar-object and set day to first day of month
var cal = new java.util.GregorianCalendar(this.getTimeZone(), this.getLocale()); var locale = this.getLocale();
var cal = java.util.Calendar.getInstance(this.getTimeZone(), locale);
var symbols = new java.text.DateFormatSymbols(locale);
// render header-row of calendar
var firstDayOfWeek = cal.getFirstDayOfWeek();
var week = "";
var weekdays = symbols.getShortWeekdays();
for (var i=0;i<7;i++) {
dayParam.day = weekdays[(i+firstDayOfWeek-1)%7+1];
week += this.renderSkinAsString("calendardayheader", dayParam);
}
weekParam.week = week;
calParam.calendar = this.renderSkinAsString("calendarweek",weekParam);
cal.set(java.util.Calendar.DATE,1); cal.set(java.util.Calendar.DATE,1);
// check whether there's a day or a story in path // check whether there's a day or a story in path
// if so, use it to determine the month to render // if so, use it to determine the month to render
@ -400,32 +414,20 @@ function calendar_macro(param) {
// we want to render // we want to render
// nr. of empty days in rendered calendar before the first day of month appears // nr. of empty days in rendered calendar before the first day of month appears
var pre = (7-cal.getFirstDayOfWeek()+cal.get(java.util.Calendar.DAY_OF_WEEK)) % 7; var pre = (7-firstDayOfWeek+cal.get(java.util.Calendar.DAY_OF_WEEK)) % 7;
var days = cal.getActualMaximum(java.util.Calendar.DATE); var days = cal.getActualMaximum(java.util.Calendar.DATE);
var weeks = Math.ceil((pre + days) / 7); var weeks = Math.ceil((pre + days) / 7);
var daycnt = 1; var daycnt = 1;
calParam.month = formatTimestamp(cal.getTime(),"MMMM"); var time = cal.getTime();
calParam.month = formatTimestamp(time,"MMMM");
calParam.year = cal.getTime().format("yyyy"); calParam.year = formatTimestamp(time,"yyyy");
// render header-row of calendar
weekParam.week = "";
var calHead = cal.clone();
var firstDayOfWeek = cal.getFirstDayOfWeek();
for (var i=0;i<7;i++) {
calHead.set(java.util.Calendar.DAY_OF_WEEK, firstDayOfWeek + i);
dayParam.day = formatTimestamp(calHead.getTime(),"EE");
weekParam.week += this.renderSkinAsString("calendardayheader",dayParam);
}
calParam.calendar += this.renderSkinAsString("calendarweek",weekParam);
// pre-render the year and month so we only have to append the days as we loop // pre-render the year and month so we only have to append the days as we loop
var currMonth = formatTimestamp(cal.getTime(), "yyyyMM"); var currMonth = formatTimestamp(time, "yyyyMM");
// simply loop through days
var currDay = 1;
// remember the index of the first and last days within this month. // remember the index of the first and last days within this month.
// this is needed to optimize previous and next month links. // this is needed to optimize previous and next month links.
var lastDayIndex = this.size(); var lastDayIndex = 9999999;
var firstDayIndex = -1; var firstDayIndex = -1;
for (var i=0;i<weeks;i++) { for (var i=0;i<weeks;i++) {
@ -435,8 +437,8 @@ function calendar_macro(param) {
if ((i == 0 && j < pre) || daycnt > days) if ((i == 0 && j < pre) || daycnt > days)
dayParam.day = "&nbsp;"; dayParam.day = "&nbsp;";
else { else {
var currGroupname = currMonth+currDay.format("00"); var currGroupname = currMonth+daycnt.format("00");
var linkText = currDay < 10 ? "&nbsp;"+currDay+"&nbsp;" : currDay; var linkText = daycnt < 10 ? "&nbsp;"+daycnt+"&nbsp;" : daycnt;
var currGroup = this.get(currGroupname); var currGroup = this.get(currGroupname);
if (currGroup) { if (currGroup) {
var idx = this.contains(currGroup); var idx = this.contains(currGroup);
@ -444,7 +446,7 @@ function calendar_macro(param) {
if (idx > firstDayIndex) if (idx > firstDayIndex)
firstDayIndex = idx; firstDayIndex = idx;
if (idx < lastDayIndex) if (idx < lastDayIndex)
lastDayIndex = idx; lastDayIndex = idx;
} }
dayParam.day = "<a href=\"" + currGroup.href() + "\">" + linkText + "</a>"; dayParam.day = "<a href=\"" + currGroup.href() + "\">" + linkText + "</a>";
} else { } else {
@ -452,7 +454,6 @@ function calendar_macro(param) {
} }
if (currGroupname == today) if (currGroupname == today)
dayParam.useskin = "calendarselday"; dayParam.useskin = "calendarselday";
currDay++;
daycnt++; daycnt++;
} }
weekParam.week += this.renderSkinAsString(dayParam.useskin, dayParam); weekParam.week += this.renderSkinAsString(dayParam.useskin, dayParam);
@ -461,7 +462,7 @@ function calendar_macro(param) {
} }
// set day to last day of month and try to render next month // set day to last day of month and try to render next month
// check what the last day of the month is // check what the last day of the month is
cal.set(java.util.Calendar.DATE, cal.getActualMaximum(java.util.Calendar.DATE)); // cal.set(java.util.Calendar.DATE, cal.getActualMaximum(java.util.Calendar.DATE));
calParam.back = this.renderLinkToPrevMonth(firstDayIndex,currMonth+"01"); calParam.back = this.renderLinkToPrevMonth(firstDayIndex,currMonth+"01");
calParam.forward = this.renderLinkToNextMonth(lastDayIndex,currMonth+"31"); calParam.forward = this.renderLinkToNextMonth(lastDayIndex,currMonth+"31");
this.renderSkin("calendar",calParam); this.renderSkin("calendar",calParam);
@ -591,7 +592,10 @@ function listReferrers_macro() {
// we're doing this with direct db access here // we're doing this with direct db access here
// (there's no need to do it with prototypes): // (there's no need to do it with prototypes):
var d = new Date(new Date() - 1000 * 60 * 60 * 24); // 24 hours ago var d = new Date(new Date() - 1000 * 60 * 60 * 24); // 24 hours ago
var query = "select ACCESSLOG_REFERRER, count(*) as \"COUNT\" from AV_ACCESSLOG where ACCESSLOG_F_SITE = " + this._id + " and ACCESSLOG_DATE > '" + d.format("yyyy-MM-dd HH:mm:ss") + "' group by ACCESSLOG_REFERRER order by \"COUNT\" desc, ACCESSLOG_REFERRER asc;"; var query = "select ACCESSLOG_REFERRER, count(*) as \"COUNT\" from AV_ACCESSLOG "+
"where ACCESSLOG_F_SITE = " + this._id + " and ACCESSLOG_DATE > '" +
d.format("yyyy-MM-dd HH:mm:ss") + "' group by ACCESSLOG_REFERRER "+
"order by \"COUNT\" desc, ACCESSLOG_REFERRER asc;";
var rows = c.executeRetrieval(query); var rows = c.executeRetrieval(query);
var dbError = c.getLastError(); var dbError = c.getLastError();
if (dbError) if (dbError)
@ -668,4 +672,4 @@ function topiclist_macro(param) {
*/ */
function imagelist_macro(param) { function imagelist_macro(param) {
this.images.imagelist_macro(param); this.images.imagelist_macro(param);
} }