Mercurial Hosting > nabble
view src/nabble/view/web/template/CalendarWidget.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.view.web.template; import nabble.naml.compiler.IPrintWriter; import nabble.naml.compiler.Interpreter; import nabble.naml.compiler.CommandSpec; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import nabble.naml.compiler.PrintWriter; import java.util.Calendar; import java.util.GregorianCalendar; final class CalendarWidget { public static final CommandSpec _calendar = new CommandSpec.Builder() .parameters("date_time","months","week_days","min_year") .build() ; public static void _calendar(IPrintWriter out,Interpreter interp) { String dateTime = interp.getArgString("date_time"); String months = interp.getArgString("months"); String weekDays = interp.getArgString("week_days"); String minYear = interp.getArgString("min_year"); Calendar cal = Calendar.getInstance(); cal.setLenient(false); cal.setTimeInMillis(Long.valueOf(dateTime)); printCalendar(cal, Integer.valueOf(minYear), months, weekDays, out.getPrintWriter()); } private static void printCalendar(Calendar cal, int minYear, String months, String weekDays, PrintWriter out) { int day = cal.get(Calendar.DAY_OF_MONTH); String[] monthsArray = months.split("\\|"); int month = cal.get(Calendar.MONTH); int year = cal.get(Calendar.YEAR); int currentYear = Calendar.getInstance().get(Calendar.YEAR); out.print( "\n<script type=\"text/javascript\">\n function NabbleCalendar(d,m,y) {\n this.day = d;\n this.month = m;\n this.year = y;\n };\n NabbleCalendar.prototype.setDay = function(d) {\n this.day = parseInt(d);\n };\n NabbleCalendar.prototype.getDay = function() {\n return this.day;\n };\n NabbleCalendar.prototype.getMonth = function() {\n return this.month;\n };\n NabbleCalendar.prototype.getYear = function() {\n return this.year;\n };\n NabbleCalendar.prototype.updateCalendar = function() {\n var $m = $('#month');\n var $y = $('#year');\n this.month = parseInt($m.val());\n this.year = parseInt($y.val());\n $m.attr('disabled','y');\n $y.attr('disabled','y');\n $.get('/template/CalendarWidget$Update.jtp?day='+this.day+'&month='+this.month+'&year='+this.year+'&weekdays=" ); out.print( (weekDays) ); out.print( "', function(data) {\n $('#calendar-wrapper').html(data);\n $m.removeAttr('disabled');\n $y.removeAttr('disabled');\n Nabble.addEventHandlers();\n });\n };\n var nabbleCalendar = new NabbleCalendar(" ); out.print( (day) ); out.print( ", " ); out.print( (month) ); out.print( ", " ); out.print( (year) ); out.print( ");\n Nabble.addEventHandlers = function() {\n $('#calendar-wrapper td.day').css('cursor','pointer').click(function(){\n $('#day'+nabbleCalendar.day).removeClass('current');\n var day = $(this).html();\n nabbleCalendar.setDay(day);\n $(this).addClass('current');\n });\n };\n $(document).ready(function() {\n Nabble.addEventHandlers();\n });\n</script>\n<select id=\"month\" onchange=\"nabbleCalendar.updateCalendar()\">\n " ); for (int m = 0;m < 12; m++) { out.print( "\n <option value=\"" ); out.print( (m) ); out.print( "\" " ); out.print( (month == m? "selected" : "") ); out.print( ">" ); out.print( (monthsArray[m]) ); out.print( "</option>\n " ); } out.print( "\n</select>\n<select id=\"year\" onchange=\"nabbleCalendar.updateCalendar()\">\n " ); for (int y = minYear;y <= currentYear; y++) { out.print( "\n <option value=\"" ); out.print( (y) ); out.print( "\" " ); out.print( (year == y? "selected" : "") ); out.print( ">" ); out.print( (y) ); out.print( "</option>\n " ); } out.print( "\n</select>\n<div id=\"calendar-wrapper\">\n " ); printCalendarTable(cal, weekDays, out); out.print( "\n</div>\n" ); } private static void printCalendarTable(Calendar cal, String weekDays, PrintWriter out) { String[] weekDaysArray = weekDays.split("\\|"); int day = cal.get(Calendar.DAY_OF_MONTH); int nDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); cal.set(Calendar.DAY_OF_MONTH, 1); int firstDay = cal.get(Calendar.DAY_OF_WEEK); int i; out.print( "\n<table class=\"calendar\">\n <tr>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[0]) ); out.print( "</td>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[1]) ); out.print( "</td>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[2]) ); out.print( "</td>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[3]) ); out.print( "</td>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[4]) ); out.print( "</td>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[5]) ); out.print( "</td>\n <td class=\"week-header\">" ); out.print( (weekDaysArray[6]) ); out.print( "</td>\n </tr>\n <tr>\n " ); for (i = 1; i < firstDay; i++) { out.print( "\n <td class=\"empty\"></td>\n " ); } out.print( "\n " ); int d = 1; out.print( "\n " ); for (i = firstDay; i <= 7; i++) printDay(d++, day, out); out.print( "\n </tr>\n " ); while (d <= nDays) { out.print( "\n " ); int nextStop = d + 7; out.print( "\n <tr>\n " ); while (d < nextStop && d <= nDays) printDay(d++, day, out); out.print( "\n </tr>\n " ); } out.print( "\n</table>\n" ); } private static void printDay(int day, int currentDay, PrintWriter out) { out.print( "<td id=\"day" ); out.print( (day) ); out.print( "\" class=\"day" ); out.print( (day == currentDay?" current":"") ); out.print( "\">" ); out.print( (day) ); out.print( "</td>" ); } public static class Update extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = new PrintWriter(response.getWriter()); String weekDays = request.getParameter("weekdays"); String day = request.getParameter("day"); String month = request.getParameter("month"); String year = request.getParameter("year"); Calendar cal = new GregorianCalendar(Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day)); printCalendarTable(cal, weekDays, out); } } }