installers (calendaring), RT#16584
authorIvan Kohler <ivan@freeside.biz>
Mon, 14 Apr 2014 00:15:28 +0000 (17:15 -0700)
committerIvan Kohler <ivan@freeside.biz>
Mon, 14 Apr 2014 00:15:28 +0000 (17:15 -0700)
rt/share/html/Elements/CalendarSlotSchedule
rt/share/html/Search/Calendar.html
rt/share/html/Search/Schedule.html

index 8a0c617..5b40040 100644 (file)
@@ -1,11 +1,12 @@
 <%ARGS>
-  $Date     => undef
-  @Tickets  => ()
-  $slots    => $default_slots
-  $sday     => undef
-  $tod_row  => undef
-  $timestep => $default_timestep
-  @username => ()
+  $Date      => undef
+  @Tickets   => ()
+  $slots     => $default_slots
+  $sday      => undef
+  $tod_row   => undef
+  $timestep  => $default_timestep
+  @username  => ()
+  $LengthMin => $default_timestep
 </%ARGS>
 % foreach my $username ( @username ) {
 %
 %
 %   my $bgcolor = '666666;border-color:#555555';
 %   my $content = '';
+%   my $onmouse = 0;
 %
 %   #white out available times
 %   foreach my $avail ( @{ $schedule{'avail'} } ) {
 %     my( $start, $end ) = @$avail;
 %     next if $start >= ($tod_row+$timestep) || $end <= $tod_row;
 %     $bgcolor = 'FFFFFF';
+%     $onmouse = 1
+%       if $LengthMin <= $end - $tod_row  #the slot is long enough
+%       && ! grep { $_ > $tod_row && $LengthMin > $_ - $tod_row }
+%              map $_->[0], values %{ $schedule{'scheduled'} };
 %   }
 %
 %   #block out / show / color code existing appointments
 %
 %     next if $starts >= ($tod_row+$timestep) || $due < $tod_row;
 %
-%     if ( $starts >= $tod_row ) {
-%       $bgcolor = $col;
+%     $bgcolor = $col;
+%     $onmouse = 0;
+%
+%     if ( $starts >= $tod_row ) { #first row
 %       $content .= ($content?', ':''). $id; #XXX more
-%     } else {
-%       $bgcolor = $col;
 %     }
 %   }
 
 %#                  : $is_aweekago  ? 'aweekago'
 %#                  : ''
 %#               %>"
+%     if ( $onmouse ) {
+        onmouseover="boxon(this);"
+        onmouseout ="boxoff(this);"
+%     }
     ><% $content %></td>
 % }
 <%ONCE>
index 55b2b5a..092f6a5 100644 (file)
@@ -516,7 +516,7 @@ my %Tickets = FindTickets($session{'CurrentUser'}, $TempQuery, \@Dates, $start->
   $QueryString => undef
   $Embed => undef
 </%args>
-    <a href="<%$RT::WebPath%>/Search/<%$Embed||'Calendar.html'%>?Month=<% $Month %>&Year=<% $Year %>&<%$QueryString%>"><img src="<%$RT::WebPath%>/NoAuth/images/week-collapse.gif" STYLE="height:384px;width:11px"></a>
+    <a href="<%$RT::WebPath%>/Search/<%$Embed||'Calendar.html'%>?Month=<% $Month %>&Year=<% $Year %>&<%$QueryString%>"><img src="<%$RT::WebPath%>/NoAuth/images/week-collapse.gif" STYLE="height:384px;width:11px;border:none"></a>
 </%def>
 
 <%def td_time>
index 14956b2..4bc5134 100644 (file)
@@ -5,6 +5,51 @@
 <SCRIPT TYPE="text/javascript" SRC="<%$fsurl%>elements/<%$file%>.js"></SCRIPT>
 %}
 
+<SCRIPT TYPE="text/javascript" SRC="<%$fsurl%>elements/jquery.js"></SCRIPT>
+
+<SCRIPT TYPE="text/javascript">
+
+  function boxon(what) {
+    var $this = $(what);
+    for ( var c=0; c < <%$cells%>; c++) {
+
+      $this.css('background-color', '#ffffdd');
+      if ( c == 0 ) {
+        $this.css('border-top', '1px double black');
+        $this.css('border-left', '1px double black');
+        $this.css('border-right', '1px solid black');
+      } else if ( c == <%$cells-1%> ) {
+        $this.css('border-left', '1px double black');
+        $this.css('border-right', '1px solid black');
+        $this.css('border-bottom', '1px solid black');
+      } else {
+        $this.css('border-left', '1px double black');
+        $this.css('border-right', '1px solid black');
+      }
+
+      var rownum = $this.parent().prevAll('tr').length;
+      var colnum = $this.prevAll('td').length;
+      $this = $this.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+    }
+  }
+
+  function boxoff(what) {
+    var $this = $(what);
+    for ( var c=0; c < <%$cells%>; c++) {
+
+      //$this.css('background-color', '');
+      //$this.css('border', ''); //IE8 woes, removes cell borders
+      $this.removeAttr('style'); //slightly "flashy" on cell changes under IE8
+                                 //but at least it doesn't remove cell borders
+
+      var rownum = $this.parent().prevAll('tr').length;
+      var colnum = $this.prevAll('td').length;
+      $this = $this.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+    }
+  }
+
+</SCRIPT>
+
 <& /Search/Calendar.html,
      @_,
      Query       => "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
      Embed       => 'Schedule.html',
      DimPast     => 1,
      Display     => 'Schedule',
-     DisplayArgs => [ username => $ARGS{username} ],
+     DisplayArgs => [ username  => $ARGS{username},
+                      LengthMin => $LengthMin,
+                    ],
 &>
 
+<%ONCE>
+
+my $timestep =  RT->Config->Get('CalendarWeeklySizeMin') || 30; #1/2h
+
+</%ONCE>
 <%init>
+
 my @files = ();
 #if ( ! $initialized ) {
   push @files, map "overlibmws$_", ( '', qw( _iframe _draggable _crossframe ) );
   push @files, map { "${_}contentmws" } qw( iframe ajax );
 #%}
+
+my $LengthMin = 180; #XXX $ARGS{LengthMin};, passed in
+
+my $cells = int($LengthMin / $timestep);
+$cells++ if $LengthMin % $timestep;
+
 </%init>