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