calenstyle
Version:
CalenStyle is a Responsive Drag-and-Drop Event Calendar for Web, iOS, Android & Windows. CalenStyle is customizable plugin having multiple, clean-designed event calendar templates specially designed for web & mobile applications.
439 lines (341 loc) • 13.8 kB
HTML
<html>
<head>
<title>Add Event</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-custom-1.11.2.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/jquery-ui-custom-1.11.2.min.css" />
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
<script type="text/javascript" src="js/DateTimePicker.js"></script>
<link rel="stylesheet" type="text/css" href="css/DateTimePicker.css" />
<link rel="stylesheet" type="text/css" href="../src/calenstyle.css" />
<link rel="stylesheet" type="text/css" href="../src/calenstyle-jquery-ui-override.css" />
<link rel="stylesheet" type="text/css" href="../src/calenstyle-iconfont.css" />
<script type="text/javascript" src="../src/calenstyle.js"></script>
<script type="text/javascript" src="js/CalJsonGenerator.js"></script>
<style type="text/css">
.calendarContOuterParent
{
width: 1024px;
height: 768px;
margin: 0px auto;
}
.calendarContOuter
{
width: 1000px;
height: 500px;
margin: 0px auto;
font-size: 14px;
}
#ipAlertStartEnd, #ipAlertTitle
{
display:none;
}
</style>
<script type="text/javascript">
var oCal1, sInputTZOffset = "-00:00";
$(document).ready(function()
{
$(".calendarContOuter").CalenStyle(
{
initialize: function()
{
oCal1 = this;
},
//selectedDate: new Date(2014, 05, 12, 0, 0, 0, 0),
displayWeekNumInMonthView: true,
calculateDetailedMonthViewRowMinHeight: false,
//fixedHeightOfDetailedMonthView: true,
changeColorBasedOn: "Event",
hideEventIcon: {Default: true},
formatDates:
{
"hh:mm": function(iDate)
{
if(iDate.H < 5)
return "Night " + oCal1.getNumberStringInFormat(iDate.h, 2, true) + ":" + oCal1.getNumberStringInFormat(iDate.m, 2, true);
else if(iDate.H < 10)
return "Morning " + oCal1.getNumberStringInFormat(iDate.h, 2, true) + ":" + oCal1.getNumberStringInFormat(iDate.m, 2, true);
else if(iDate.H < 14)
return "Afternoon " + oCal1.getNumberStringInFormat(iDate.h, 2, true) + ":" + oCal1.getNumberStringInFormat(iDate.m, 2, true);
else if(iDate.H < 19)
return "Evening " + oCal1.getNumberStringInFormat(iDate.h, 2, true) + ":" + oCal1.getNumberStringInFormat(iDate.m, 2, true);
else
return "Night " + oCal1.getNumberStringInFormat(iDate.h, 2, true) + ":" + oCal1.getNumberStringInFormat(iDate.m, 2, true);
}
},
calDataSource:
[
{
sourceId: "s1",
sourceFetchType: "DateRange",
sourceType: "FUNCTION",
config:
{
inputTZOffset: sInputTZOffset,
},
source: function(fetchStartDate, fetchEndDate, durationStartDate, durationEndDate, oConfig, loadViewCallback)
{
var calObj1 = this;
calObj1.incrementDataLoadingCount(1);
var oEventResponse = generateJsonEvents(fetchStartDate, fetchEndDate);
if(oEventResponse != undefined)
{
if(oEventResponse[0])
{
calObj1.parseDataSource("EventSource", oEventResponse[1], durationStartDate, durationEndDate, loadViewCallback, oConfig, false);
}
}
}
}
],
saveChangesOnEventDrop: function(oDraggedEvent, startDateBeforeDrop, endDateBeforeDrop, startDateAfterDrop, endDateAfterDrop)
{
var calObj1 = this;
console.log(oDraggedEvent);
console.log(startDateAfterDrop);
console.log(endDateAfterDrop);
//calObj1.revertToOriginalEvent(oDraggedEvent, startDateBeforeDrop, endDateBeforeDrop);
},
cellClicked: function(sView, dSelectedDate, bIsAllDay, pClickedAt)
{
console.log("Cell Clicked 1 : " + dSelectedDate);
showModal(true, dSelectedDate);
},
eventsAddedInView: function(visibleView, eventClass)
{
var thisObj = this;
$(thisObj.elem).find(eventClass).popover(
{
placement: "top",
trigger: "hover",
html: true,
container: "body",
content: function()
{
var oTooltipContent = $(this).data("tooltipcontent"),
sTooltipText = "<div class='cTooltipTitle'>" + oTooltipContent.title + "</div><div class='cTooltipTime'>" + oTooltipContent.startDateTime + "<br/>" + oTooltipContent.endDateTime + "</div>";
return sTooltipText;
}
});
}
});
$('input[type="checkbox"]').bind('click',function()
{
validateAllDayChecked();
});
$('#modal-form').on('show.bs.modal', function (e)
{
validateAllDayChecked();
});
customizeInputs();
defineFormEvents();
});
function showModal(bIsAllDay, dStartDateTime)
{
console.log("showModal : " + bIsAllDay + " " + dStartDateTime);
$("#modal-form").modal('show');
$("#ipTitle, #ipDesc").val("");
$("#ipAllDay").prop("checked", bIsAllDay);
var dEndDateTime, sStartDateTime, sEndDateTime;
if(bIsAllDay)
{
dEndDateTime = new Date(dStartDateTime);
dEndDateTime.setDate(dStartDateTime.getDate() + (oCal1.setting.allDayEventDuration - 1));
sStartDateTime = oCal1.getDateInFormat({"date": dStartDateTime}, "dd-MM-yyyy", false, false);
sEndDateTime = oCal1.getDateInFormat({"date": dEndDateTime}, "dd-MM-yyyy", false, false);
}
else
{
dEndDateTime = new Date(dStartDateTime.getTime() + (oCal1.setting.eventDuration * 6E4));
sStartDateTime = oCal1.getDateInFormat({"date": dStartDateTime}, "dd-MM-yyyy HH:mm", oCal1.setting.is24Hour, false);
sEndDateTime = oCal1.getDateInFormat({"date": dEndDateTime}, "dd-MM-yyyy HH:mm", oCal1.setting.is24Hour, false);
}
console.log(sEndDateTime + " " + sEndDateTime);
$("#ipStart").val(sStartDateTime);
$("#ipEnd").val(sEndDateTime);
validateAllDayChecked();
}
function customizeInputs()
{
console.log("DateTimePicker : ");
console.log($(".modal-dtpicker"));
$(".modal-dtpicker").DateTimePicker(
{
dateSeparator: oCal1.setting.formatSeparatorDate,
timeSeparator: oCal1.setting.formatSeparatorTime,
dateTimeSeparator: oCal1.setting.formatSeparatorDateTime,
dateFormat: "dd-MM-yyyy",
dateTimeFormat: "dd-MM-yyyy HH:mm:ss"
});
}
function validateDateTimes(bIsAllDay, dStartDateTime, dEndDateTime)
{
if(bIsAllDay)
{
console.log("Date Comparison : " + oCal1.compareDates(dStartDateTime, dEndDateTime));
if(oCal1.compareDates(dStartDateTime, dEndDateTime) > 0)
{
$("#ipAlertStartEnd").show();
return false;
}
}
else
{
console.log("DateTime Comparison : " + oCal1.compareDateTimes(dStartDateTime, dEndDateTime));
if(oCal1.compareDateTimes(dStartDateTime, dEndDateTime) > 0)
{
$("#ipAlertStartEnd").show();
return false;
}
}
$("#ipAlertStartEnd").hide();
return true;
}
function validateAllDayChecked()
{
console.log("validateAllDayChecked " + ($("#ipAllDay").is(':checked')));
if($("#ipAllDay").is(':checked'))
{
$("#ipStart-group label").html("Start Date : ");
$("#ipEnd-group label").html("End Date : ");
$("#ipStart, #ipEnd").data("field", "date");
var sDateTimeRegex = /^([0-3]{1}[0-9]{1})(-([0-1]{1}[0-9]{1}))(-([0-9]{4}))(\s)([0-2]{1}[0-9]{1}):([0-6]{1}[0-9]{1})/;
var sDateTimeStart = $("#ipStart").val(),
sArrDateTimeStart = sDateTimeStart.match(sDateTimeRegex),
sDateTimeEnd = $("#ipEnd").val(),
sArrDateTimeEnd = sDateTimeEnd.match(sDateTimeRegex);
if(sArrDateTimeStart != null)
$("#ipStart").val(sDateTimeStart.split(" ")[0]);
if(sArrDateTimeEnd != null)
$("#ipEnd").val(sDateTimeEnd.split(" ")[0]);
}
else
{
$("#ipStart-group label").html("Start Date Time : ");
$("#ipEnd-group label").html("End Date Time : ");
$("#ipStart, #ipEnd").data("field", "datetime");
var sDateTimeRegex = /^([0-3]{1}[0-9]{1})(-([0-1]{1}[0-9]{1}))(-([0-9]{4}))(\s)([0-2]{1}[0-9]{1}):([0-6]{1}[0-9]{1})/;
var sDateTimeStart = $("#ipStart").val(),
sArrDateTimeStart = sDateTimeStart.match(sDateTimeRegex),
sDateTimeEnd = $("#ipEnd").val(),
sArrDateTimeEnd = sDateTimeEnd.match(sDateTimeRegex);
console.log("Arrays : " + sDateTimeStart + " " + sDateTimeEnd);
console.log(sArrDateTimeStart);
console.log(sArrDateTimeEnd);
if(sArrDateTimeStart == null)
$("#ipStart").val(sDateTimeStart + " 00:00");
if(sArrDateTimeEnd == null)
$("#ipEnd").val(sDateTimeEnd + " 00:00");
}
}
function parseDateInFormat(bIsAllDay, sDateTime)
{
var dDateTime;
if(bIsAllDay)
{
var sArrDateTime = sDateTime.match(/^([0-3]{1}[0-9]{1})(-([0-1]{1}[0-9]{1}))(-([0-9]{4}))/);
console.log(sArrDateTime);
dDateTime = new Date(sArrDateTime[5], sArrDateTime[3] - 1, sArrDateTime[1], 0, 1, 0, 0);
}
else
{
var sArrDateTime = sDateTime.match(/^([0-3]{1}[0-9]{1})(-([0-1]{1}[0-9]{1}))(-([0-9]{4}))(\s)([0-2]{1}[0-9]{1}):([0-6]{1}[0-9]{1})/);
console.log(sArrDateTime);
dDateTime = new Date(sArrDateTime[5], sArrDateTime[3] - 1, sArrDateTime[1], sArrDateTime[7], sArrDateTime[8], 0, 0);
}
return dDateTime;
}
function defineFormEvents()
{
$("#ipStart, #ipEnd").change(function()
{
var bIsAllDay = $("#ipAllDay").is(':checked'),
dStartDateTime = parseDateInFormat(bIsAllDay, $("#ipStart").val()),
dEndDateTime = parseDateInFormat(bIsAllDay, $("#ipEnd").val());
validateDateTimes(bIsAllDay, dStartDateTime, dEndDateTime);
});
$("#submit").click(function()
{
var bIsAllDay = $("#ipAllDay").is(':checked'),
dStartDateTime = parseDateInFormat(bIsAllDay, $("#ipStart").val()),
dEndDateTime = parseDateInFormat(bIsAllDay, $("#ipEnd").val()),
sTitle = $("#ipTitle").val(),
sDesc= $("#ipDesc").val();
if(sTitle != "")
$("#ipAlertTitle").hide();
else
$("#ipAlertTitle").show();
if(sTitle != "" && validateDateTimes(bIsAllDay, dStartDateTime, dEndDateTime))
{
if(!bIsAllDay)
{
dStartDateTime = oCal1.normalizeDateTimeWithOffset(dStartDateTime, oCal1.setting.outputTZOffset, sInputTZOffset);
dEndDateTime = oCal1.normalizeDateTimeWithOffset(dEndDateTime, oCal1.setting.outputTZOffset, sInputTZOffset);
}
var oEvent = new CalEvent("AddedOnUI", bIsAllDay, dStartDateTime, dEndDateTime, "Dynamic", sTitle, sDesc, "https://www.google.com");
var oArrEvent = new Array();
oArrEvent.push(oEvent);
console.log(oEvent);
console.log(oArrEvent);
oCal1.addEventsForSource(oArrEvent, "s1");
oCal1.refreshView();
$("#modal-form").modal("hide");
}
});
}
</script>
</head>
<body>
<div class="calendarContOuterParent">
<div class="calendarContOuter"></div>
</div>
<div id="modal-form" class="modal fade">
<div class="modal-dtpicker"></div>
<div class="modal-dialog">
<div class="modal-content">
<form>
<div class="modal-header">
Add Event
</div>
<div class="modal-body">
<div id="ipAlertTitle" class="alert alert-danger" role="alert">
Title should not be Empty
</div>
<div id="ipTitle-group" class="form-group">
<label for="ipTitle">Title : </label>
<input type="text" class="form-control" id="ipTitle" placeholder="Title">
</div>
<div id="ipAllDay-group" class="checkbox">
<label>
<input id="ipAllDay" type="checkbox" checked> All Day
</label>
</div>
<div id="ipAlertStartEnd" class="alert alert-danger" role="alert">
Start DateTime should be earlier than End DateTime
</div>
<div id="ipStart-group" class="form-group">
<label for="ipStart">Start Date : </label>
<input type="text" class="form-control" id="ipStart" data-field="date" placeholder="Start">
</div>
<div id="ipEnd-group" class="form-group">
<label for="ipStart">End Date : </label>
<input type="text" class="form-control" id="ipEnd" data-field="date" placeholder="End">
</div>
<div id="ipDesc-group" class="form-group">
<label for="ipDesc">Description : </label>
<textarea class="form-control" rows="3" id="ipDesc" placeholder="Description"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default form-btn" data-dismiss="modal">Close</button>
<button id="submit" type="button" class="btn btn-default form-btn">Submit</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>