Advertisement
Guest User

Telerik UI for JSP: Scheduler drag and drop to Grid

a guest
Feb 25th, 2015
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.47 KB | None | 0 0
  1. <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  2. <%@page import="java.util.HashMap"%>
  3. <%@page import="java.util.ArrayList"%>
  4. <%@page import="java.util.Date"%>
  5. <%@page import="java.text.SimpleDateFormat"%>
  6. <%@taglib prefix="kendo" uri="http://www.kendoui.com/jsp/tags"%>
  7. <%@taglib prefix="demo" tagdir="/WEB-INF/tags"%>
  8.  
  9. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  10.  
  11.  
  12. <c:url value="/scheduler/index/read" var="readUrl" />
  13. <c:url value="/scheduler/index/create" var="createUrl" />
  14. <c:url value="/scheduler/index/update" var="updateUrl" />
  15. <c:url value="/scheduler/index/destroy" var="destroyUrl" />
  16.  
  17. <%
  18.     Date date = new SimpleDateFormat("yyyy/MM/dd").parse("2013/6/13");
  19.    
  20.     Date startTime = new SimpleDateFormat("yyyy/MM/dd hh:mm").parse("2013/6/13 7:00");
  21.    
  22.     ArrayList<HashMap<String, Object>> resources = new ArrayList<HashMap<String, Object>>();
  23.    
  24.     HashMap<String, Object> alex = new HashMap<String, Object>();
  25.     alex.put("text", "Alex");
  26.     alex.put("value", 1);
  27.     alex.put("color", "#f8a398");
  28.     resources.add(alex);
  29.     HashMap<String, Object> bob = new HashMap<String, Object>();
  30.     bob.put("text", "Bob");
  31.     bob.put("value", 2);
  32.     bob.put("color", "#51a0ed");
  33.     resources.add(bob);
  34.     HashMap<String, Object> charlie = new HashMap<String, Object>();
  35.     charlie.put("text", "Charlie");
  36.     charlie.put("value", 3);
  37.     charlie.put("color", "#56ca85");
  38.     resources.add(charlie);
  39.  
  40. %>
  41. <demo:header />
  42.     <script>
  43.     function onDataBound(e) {
  44.         createDropArea(this);
  45.     }
  46.     </script>
  47.     <kendo:scheduler name="scheduler" timezone="Etc/UTC" height="600" date="<%= date %>" startTime="<%= startTime %>" dataBound="onDataBound">
  48.         <kendo:scheduler-views>
  49.             <kendo:scheduler-view type="day" />
  50.             <kendo:scheduler-view type="workWeek" selected="true" />
  51.             <kendo:scheduler-view type="week" />
  52.             <kendo:scheduler-view type="month"  />
  53.             <kendo:scheduler-view type="agenda" />
  54.             <kendo:scheduler-view type="timeline" />
  55.         </kendo:scheduler-views>
  56.         <kendo:scheduler-resources>
  57.             <kendo:scheduler-resource field="ownerId" title="Owner">
  58.                 <kendo:dataSource data="<%= resources %>" />
  59.             </kendo:scheduler-resource>
  60.         </kendo:scheduler-resources>
  61.         <kendo:dataSource batch="true">
  62.              <kendo:dataSource-schema>
  63.                 <kendo:dataSource-schema-model id="taskId">
  64.                      <kendo:dataSource-schema-model-fields>
  65.                          <kendo:dataSource-schema-model-field name="taskId" type="number" />
  66.                          <kendo:dataSource-schema-model-field name="title" defaultValue="No title" type="string" />
  67.                          <kendo:dataSource-schema-model-field name="description" type="string" />
  68.                          <kendo:dataSource-schema-model-field name="isAllDay" type="boolean" />
  69.                          <kendo:dataSource-schema-model-field name="recurrenceRule" type="string" nullable="true"/>
  70.                          <kendo:dataSource-schema-model-field name="recurrenceId" type="number" nullable="true" />
  71.                          <kendo:dataSource-schema-model-field name="recurrenceException" type="string" nullable="true" />
  72.                          <kendo:dataSource-schema-model-field name="ownerId" type="number" defaultValue="1" />
  73.                          <kendo:dataSource-schema-model-field name="start" type="date" />
  74.                          <kendo:dataSource-schema-model-field name="end" type="date" />
  75.                     </kendo:dataSource-schema-model-fields>
  76.                 </kendo:dataSource-schema-model>
  77.             </kendo:dataSource-schema>
  78.             <kendo:dataSource-transport>
  79.                 <kendo:dataSource-transport-create url="${createUrl}" dataType="json" type="POST" contentType="application/json" />
  80.                 <kendo:dataSource-transport-read url="${readUrl}" dataType="json" type="POST" contentType="application/json" />
  81.                 <kendo:dataSource-transport-update url="${updateUrl}" dataType="json" type="POST" contentType="application/json" />
  82.                 <kendo:dataSource-transport-destroy url="${destroyUrl}" dataType="json" type="POST" contentType="application/json" />
  83.                 <kendo:dataSource-transport-parameterMap>
  84.                     <script>
  85.                         function parameterMap(options, type) {
  86.                             if(type==="read"){
  87.                                 return JSON.stringify(options);
  88.                             } else {
  89.                                 return JSON.stringify(options.models);
  90.                             }
  91.                         }
  92.                     </script>
  93.                 </kendo:dataSource-transport-parameterMap>              
  94.             </kendo:dataSource-transport>
  95.         </kendo:dataSource>
  96.     </kendo:scheduler>
  97.    
  98.     <kendo:grid name="grid" selectable="single row">
  99.             <kendo:grid-columns>
  100.                 <kendo:grid-column  field="taskId"></kendo:grid-column>
  101.                 <kendo:grid-column  field="title"></kendo:grid-column>
  102.                 <kendo:grid-column  field="start" format="{0:yyyy/MM/dd HH:mm}"></kendo:grid-column>
  103.                 <kendo:grid-column  field="end" format="{0:D}"></kendo:grid-column>
  104.             </kendo:grid-columns>
  105.             <kendo:dataSource batch="true">
  106.                 <kendo:dataSource-schema>
  107.                     <kendo:dataSource-schema-model id="taskId">
  108.                          <kendo:dataSource-schema-model-fields>
  109.                              <kendo:dataSource-schema-model-field name="taskId" type="number" />
  110.                              <kendo:dataSource-schema-model-field name="title" defaultValue="No title" type="string" />
  111.                              <kendo:dataSource-schema-model-field name="description" type="string" />
  112.                              <kendo:dataSource-schema-model-field name="isAllDay" type="boolean" />
  113.                              <kendo:dataSource-schema-model-field name="recurrenceRule" type="string" nullable="true"/>
  114.                              <kendo:dataSource-schema-model-field name="recurrenceId" type="number" nullable="true" />
  115.                              <kendo:dataSource-schema-model-field name="recurrenceException" type="string" nullable="true" />
  116.                              <kendo:dataSource-schema-model-field name="ownerId" type="number" defaultValue="1" />
  117.                              <kendo:dataSource-schema-model-field name="start" type="date" />
  118.                              <kendo:dataSource-schema-model-field name="end" type="date" />
  119.                         </kendo:dataSource-schema-model-fields>
  120.                     </kendo:dataSource-schema-model>
  121.                 </kendo:dataSource-schema>
  122.                 <kendo:dataSource-transport>
  123.                     <kendo:dataSource-transport-read url="${readUrl}" dataType="json" type="POST" contentType="application/json" />
  124.                     <kendo:dataSource-transport-parameterMap>
  125.                         <script>
  126.                             function parameterMap(options, type) {
  127.                                 if(type==="read"){
  128.                                     return JSON.stringify(options);
  129.                                 } else {
  130.                                     return JSON.stringify(options.models);
  131.                                 }
  132.                             }
  133.                         </script>
  134.                     </kendo:dataSource-transport-parameterMap>              
  135.                 </kendo:dataSource-transport>
  136.             </kendo:dataSource>
  137.     </kendo:grid>
  138.    
  139. <script>
  140. function  createDropArea(scheduler) {
  141.     scheduler.view().content.kendoDropTargetArea({
  142.         filter: ".k-scheduler-table td, .k-event",
  143.         drop: function(e){
  144.             var offset = $(e.dropTarget).offset();
  145.             var slot = scheduler.slotByPosition(offset.left, offset.top);
  146.             var grid = $("#grid").data("kendoGrid");
  147.             var dataItem = grid.dataItem(grid.select());
  148.  
  149.             if(dataItem && slot) {
  150.                 var offsetMiliseconds = new Date().getTimezoneOffset() * 60000;
  151.                 var newEvent = {
  152.                     title: dataItem.title,
  153.                     end: new Date(slot.startDate.getTime() + (dataItem.end - dataItem.start)),
  154.                     start: slot.startDate ,
  155.                     isAllDay: slot.isDaySlot,
  156.                     description: dataItem.description,
  157.                     imdb: dataItem.imdb,
  158.                     image: dataItem.image
  159.                 };
  160.  
  161.                 grid.dataSource.remove(dataItem);
  162.                 scheduler.dataSource.add(newEvent);
  163.             }
  164.            
  165.         }
  166.     });
  167. }
  168.  
  169. $(function () {
  170.     var grid = $("#grid").data("kendoGrid");
  171.    
  172.     grid.table.kendoDraggable({
  173.         filter: "tbody > tr",
  174.         dragstart: function (e) {
  175.                 var grid = $("#grid").data("kendoGrid");
  176.              gridRowOffset = grid.tbody.find("tr:first").offset();
  177.             //add margin to position correctly the tooltip under the pointer
  178.             $("#dragTooltip").css("margin-left", e.clientX - gridRowOffset.left - 50);
  179.         },
  180.         hint: function (row) {
  181.    
  182.             //remove old selection
  183.             row.parent().find(".k-state-selected").each(function () {
  184.                 $(this).removeClass("k-state-selected")
  185.             });
  186.    
  187.             //add selected class to the current row
  188.             row.addClass("k-state-selected");
  189.    
  190.             var dataItem = grid.dataItem(row);
  191.             var tooltipHtml = "<div class='k-event' id='dragTooltip'><div class='k-event-template'>" +
  192.                         kendo.format("{0:t} - {1:t}", dataItem.start, dataItem.end) +
  193.                         "</div><div class='k-event-template'>" + dataItem.title +
  194.                         "</div></div>";
  195.    
  196.             return $(tooltipHtml).css("width", 300);
  197.         }
  198.     });
  199. })
  200. </script>
  201. <demo:footer />
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement