view 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 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);
		}

	}
}