Mercurial Hosting > nabble
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/web/template/CalendarWidget.jtp Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,159 @@ +<% +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); + } + + } +} +%> \ No newline at end of file