Mercurial Hosting > nabble
diff src/nabble/view/web/template/CalendarWidget.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/web/template/CalendarWidget.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,147 @@ + +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); + } + + } +} +