X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FEvent%2Fevent.js;h=696176edbde81b562daf05711a604c4a5637d3f6;hb=51b28eda19d632e6d6deb5ce6950ca014197370a;hp=8ed25a899bff11674efa006380a047a7dbc5d267;hpb=8b32ac85d8cbfe1be03836af461d80fddd54fc6c;p=quix0rs-gnu-social.git diff --git a/plugins/Event/event.js b/plugins/Event/event.js index 8ed25a899b..696176edbd 100644 --- a/plugins/Event/event.js +++ b/plugins/Event/event.js @@ -1,73 +1,144 @@ $(document).ready(function() { - var today = new Date(); + // get current time from server + var today = new Date($('now').val()); $("#event-startdate").datepicker({ - // Don't let the user set a crazy start date + // Don't let the user set a start date < before today minDate: today, - onClose: function(dateText, picker) { - // Don't let the user set a crazy end date - var newStartDate = new Date(dateText); - var endDate = new Date($("#event-startdate").val()); - if (endDate < newStartDate) { - $("#event-enddate").val(dateText); - } - if (dateText !== null) { - $("#event-enddate").datepicker('option', 'minDate', new Date(dateText)); - } - }, - onSelect: function() { - var startd = $("#event-startdate").val(); - var endd = $("#event-enddate").val(); - var sdate = new Date(startd); - var edate = new Date(endd); - if (sdate !== edate) { - updateTimes(); - } - } + onClose: onStartDateSelected }); $("#event-enddate").datepicker({ minDate: today, - onSelect: function() { - var startd = $("#event-startdate").val(); - var endd = $("#event-enddate").val(); - var sdate = new Date(startd); - var edate = new Date(endd); - if (sdate !== edate) { - updateTimes(); + onClose: onEndDateSelected + }); + + $("#event-starttime").change(function(e) { + var tz = $("#tz").val(); + + var startDate = $("#event-startdate").val(); + var startTime = $("#event-starttime option:selected").val().replace(/(pm|am)/, ' $1'); + var startStr = startDate + ' ' + startTime + ' ' + tz; + + var endDate = $("#event-enddate").val(); + var endTime = $("#event-endtime option:selected").val(); + var endStr = endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz; + + // just need to compare hours + var start = new Date(startStr); + var end = new Date(endStr); + + updateTimes(startStr, (startDate === endDate), function (data) { + var times = []; + $.each(data, function(key, val) { + times.push(''); + }); + $("#event-endtime").html(times.join('')); + + if (start > end) { + $("#event-endtime").val(startTime).attr("selected", "selected"); + } else { + $("#event-endtime").val(endTime).attr("selected", "selected"); + } + }); + + }); + + $("#event-endtime").change(function(e) { + var HOUR = 60 * 60 * 1000; + var tz = $("#tz").val(); + var startDate = $("#event-startdate").val(); + var endDate = $("#event-enddate").val(); + var starttime = $("#event-starttime option:selected").val(); + var endtime = $("#event-endtime option:selected").val(); + var endtimeText = $("#event-endtime option:selected").text(); + + // If the end time is in the next day then update the start date + if (startDate === endDate) { + var startstr = startDate + ' ' + starttime.replace(/(pm|am)/, ' $1') + ' ' + tz; + var start = new Date(startstr); + var matches = endtimeText.match(/\(.*\)/); + var hours; + if (matches) { + hours = matches[0].substr(1).split(' ')[0]; // get x from (x hours) + if (hours) { + if (hours == 30) { + hours = .5; // special case: x == 30 from (30 mins) + } + var end = new Date(start.getTime() + (hours * HOUR)); + if (end.getDate() > start.getDate()) { + $("#event-enddate").datepicker('setDate', end); + var endstr = endDate + ' 12:00 am ' + tz; + updateTimes(endstr, false, function(data) { + var times = []; + $.each(data, function(key, val) { + times.push(''); + }); + $("#event-endtime").html(times.join('')); + + if (start > end) { + $("#event-endtime").val(starttime).attr("selected", "selected"); + } else { + $("#event-endtime").val(endtime).attr("selected", "selected"); + } + }); + } + } } } }); - function updateTimes() { - var startd = $("#event-startdate").val(); - var endd = $("#event-enddate").val(); + function onStartDateSelected(dateText, inst) { + var tz = $("#tz").val(); + var startTime = $("#event-starttime option:selected").val(); + var startDateTime = new Date(dateText + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz); + + // When we update the start date and time, we need to update the end date and time + // to make sure they are equal or in the future + $("#event-enddate").datepicker('option', 'minDate', startDateTime); + + recalculateTimes(); + } + + function onEndDateSelected(dateText, inst) { + recalculateTimes(); + } + + function recalculateTimes(showDuration) { + var tz = $("#tz").val(); - var startt = $("#event-starttime option:selected").val(); - var endt = $("#event-endtime option:selected").val(); + var startDate = $("#event-startdate").val(); + var startTime = $("#event-starttime option:selected").val(); + var startStr = startDate + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz; + var startDateTime = new Date(startStr); - var sdate = new Date(startd + " " + startt); - var edate = new Date(endd + " " + endt); - var duration = (startd === endd); + var endDate = $("#event-enddate").val(); + var endTime = $("#event-endtime option:selected").val(); + var endDateTime = new Date(endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz); + var showDuration = true; + + if (endDateTime.getDate() !== startDateTime.getDate()) { + starStr = endDate + ' 12:00 am ' + tz; + showDuration = false; + } - $.getJSON($('#timelist_action_url').val(), - { start: startt, ajax: true, duration: duration }, - function(data) { - var times = []; - $.each(data, function(key, val) { + updateTimes(startStr, showDuration, function(data) { + var times = []; + $.each(data, function(key, val) { times.push(''); }); - $("#event-endtime").html(times.join('')); - if (startt < endt) { - $("#event-endtime").val(endt).attr("selected", "selected"); + if (startDateTime > endDateTime) { + $("#event-endtime").val(startTime).attr("selected", "selected"); + } else { + $("#event-endtime").val(endTime).attr("selected", "selected"); } - }) + }); } - $("#event-starttime").change(function(e) { - updateTimes(); - }); + function updateTimes(start, duration, onSuccess) { + $.getJSON($('#timelist_action_url').val(), {start: start, ajax: true, duration: duration}, onSuccess); + } });