summaryrefslogtreecommitdiff
path: root/rt/share
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-02-19 02:29:10 -0600
committerJonathan Prykop <jonathan@freeside.biz>2016-02-19 02:29:10 -0600
commit308694b3b6219171858f336681f4b265327fdc78 (patch)
tree7fedcb7b13643265cd8a306ed2896d2ceb67b052 /rt/share
parentf17a536f5f1219a29884c695a6c3d32e2e3c7a26 (diff)
RT#34237 installer scheduling [javascript debugging]
Diffstat (limited to 'rt/share')
-rw-r--r--rt/share/html/Elements/CalendarSlotSchedule1
-rw-r--r--rt/share/html/Search/Schedule.html51
2 files changed, 41 insertions, 11 deletions
diff --git a/rt/share/html/Elements/CalendarSlotSchedule b/rt/share/html/Elements/CalendarSlotSchedule
index 72c5316..b82997b 100644
--- a/rt/share/html/Elements/CalendarSlotSchedule
+++ b/rt/share/html/Elements/CalendarSlotSchedule
@@ -158,6 +158,7 @@
%# revert: 'invalid',
revert: true,
revertDuration: 0,
+ stop: clear_drag_hi,
});
$('#<% $td_id %>').data('ticketid', <% $draggable_ticketid %>);
$('#<% $td_id %>').data('length', <% $draggable_length * 60 %>);
diff --git a/rt/share/html/Search/Schedule.html b/rt/share/html/Search/Schedule.html
index 96670cd..0dbe8c3 100644
--- a/rt/share/html/Search/Schedule.html
+++ b/rt/share/html/Search/Schedule.html
@@ -46,17 +46,41 @@
% }
+% # it would be better if we had draggable-specific droppables, but this will prevent overlap for now...
+ function can_drop ($where, cells) {
+ for (var c=0; c < cells; c++) {
+ if (!$where.is('.ui-droppable')) {
+ return false;
+ }
+ var rownum = $where.parent().prevAll('tr').length;
+ var colnum = $where.prevAll('td').length;
+ $where = $where.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+ return true;
+ }
+
var drag_cells = 0;
var drag_hi;
+
+ // on drag stop (regardless of if it was dropped)
+ function clear_drag_hi () {
+ if ( drag_hi ) {
+ boxoff_do(drag_hi);
+ drag_hi = undefined;
+ }
+ }
+
+ // on drag over
function boxon_drop(event, ui) {
//var $this = $(what);
var $this = $(this);
drag_cells = ui.draggable.data('cells');
- if ( drag_hi ) {
- boxoff_do(drag_hi);
- }
+ clear_drag_hi();
+
+ if (!can_drop($this, drag_cells)) return;
+
drag_hi = $this;
for ( var c=0; c < drag_cells; c++) {
@@ -88,6 +112,7 @@
}
+ // clears highlighted box, used by clear_hi_drag (drag stop event)
function boxoff_do(what) {
var $this = what;
@@ -105,24 +130,29 @@
}
}
+ // drop event
function reschedule_appointment( event, ui ) {
+ var $this = $(this);
+
+ if (!can_drop($this, ui.draggable.data('cells'))) return;
+
% #get the ticket number and appointment length (from the draggable object)
var ticketid = ui.draggable.data('ticketid');
var length = ui.draggable.data('length');
var bgcolor = ui.draggable.data('bgcolor');
% #and.. the new date and time, and username (from the droppable object)
- var starts = $(this).data('starts');
- var username = $(this).data('username');
+ var starts = $this.data('starts');
+ var username = $this.data('username');
var due = parseInt(starts) + parseInt(length);
- var n_epoch = $(this).data('epoch');
- var n_st_tod_row = $(this).data('tod_row');
+ var n_epoch = $this.data('epoch');
+ var n_st_tod_row = $this.data('tod_row');
var draggable = ui.draggable;
- var droppable = $(this);
+ var droppable = $this;
draggable.effect( "transfer", { to: droppable }, 420 );
% #tell the backend to reschedule it
@@ -163,9 +193,7 @@
% #maybe use that animation which shows the box from point A to B
- if ( drag_hi ) {
- boxoff_do(drag_hi);
- }
+ clear_drag_hi();
for ( var d=0; d < cells; d++) {
var n_tod_row = parseInt(n_st_tod_row) + (d * <%$timestep%>);
var n_td_id = 'td_' + n_epoch +
@@ -193,6 +221,7 @@
%# revert: 'invalid',
revert: true,
revertDuration: 0,
+ stop: clear_drag_hi,
});
$('#'+n_td_id).data('ticketid', ticketid );
$('#'+n_td_id).data('length', length );