view src/nabble/view/web/template/CalendarWidget.jtp @ 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);
		%>
		<script type="text/javascript">
			function NabbleCalendar(d,m,y) {
				this.day = d;
				this.month = m;
				this.year = y;
			};
			NabbleCalendar.prototype.setDay = function(d) {
				this.day = parseInt(d);
			};
			NabbleCalendar.prototype.getDay = function() {
				return this.day;
			};
			NabbleCalendar.prototype.getMonth = function() {
				return this.month;
			};
			NabbleCalendar.prototype.getYear = function() {
				return this.year;
			};
			NabbleCalendar.prototype.updateCalendar = function() {
				var $m = $('#month');
				var $y = $('#year');
				this.month = parseInt($m.val());
				this.year = parseInt($y.val());
				$m.attr('disabled','y');
				$y.attr('disabled','y');
				$.get('/template/CalendarWidget$Update.jtp?day='+this.day+'&month='+this.month+'&year='+this.year+'&weekdays=<%=weekDays%>', function(data) {
					$('#calendar-wrapper').html(data);
					$m.removeAttr('disabled');
					$y.removeAttr('disabled');
					Nabble.addEventHandlers();
				});
			};
			var nabbleCalendar = new NabbleCalendar(<%=day%>, <%=month%>, <%=year%>);
			Nabble.addEventHandlers = function() {
				$('#calendar-wrapper td.day').css('cursor','pointer').click(function(){
					$('#day'+nabbleCalendar.day).removeClass('current');
					var day = $(this).html();
					nabbleCalendar.setDay(day);
					$(this).addClass('current');
				});
			};
			$(document).ready(function() {
				Nabble.addEventHandlers();
			});
		</script>
		<select id="month" onchange="nabbleCalendar.updateCalendar()">
			<% for (int m = 0;m < 12; m++) { %>
			<option value="<%=m%>" <%=month == m? "selected" : ""%>><%=monthsArray[m]%></option>
			<% } %>
		</select>
		<select id="year" onchange="nabbleCalendar.updateCalendar()">
			<% for (int y = minYear;y <= currentYear; y++) { %>
			<option value="<%=y%>" <%=year == y? "selected" : ""%>><%=y%></option>
			<% } %>
		</select>
		<div id="calendar-wrapper">
			<% printCalendarTable(cal, weekDays, out); %>
		</div>
		<%
	}

	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;
		%>
		<table class="calendar">
			<tr>
				<td class="week-header"><%=weekDaysArray[0]%></td>
				<td class="week-header"><%=weekDaysArray[1]%></td>
				<td class="week-header"><%=weekDaysArray[2]%></td>
				<td class="week-header"><%=weekDaysArray[3]%></td>
				<td class="week-header"><%=weekDaysArray[4]%></td>
				<td class="week-header"><%=weekDaysArray[5]%></td>
				<td class="week-header"><%=weekDaysArray[6]%></td>
			</tr>
			<tr>
				<% for (i = 1; i < firstDay; i++) {%>
					<td class="empty"></td>
				<% } %>
				<% int d = 1; %>
				<% for (i = firstDay; i <= 7; i++) printDay(d++, day, out); %>
			</tr>
			<% while (d <= nDays) { %>
				<% int nextStop = d + 7; %>
				<tr>
					<% while (d < nextStop && d <= nDays) printDay(d++, day, out); %>
				</tr>
			<% } %>
		</table>
		<%
	}

	private static void printDay(int day, int currentDay, PrintWriter out) {
		%><td id="day<%=day%>" class="day<%=day == currentDay?" current":""%>"><%=day%></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);
		}

	}
}
%>