@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

First step towards a Javelin behavior for Calendar day view

Summary: Ref T8300, First step towards a Javelin behavior for Calendar day view

Test Plan: No user facing changes.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T8300

Differential Revision: https://secure.phabricator.com/D12978

+79 -2
+4 -2
resources/celerity/map.php
··· 331 331 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'b1a59974', 332 332 'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761', 333 333 'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18', 334 - 'rsrc/js/application/calendar/event-all-day.js' => 'ca5fa62a', 334 + 'rsrc/js/application/calendar/behavior-day-view.js' => 'f4f4ad80', 335 + 'rsrc/js/application/calendar/behavior-event-all-day.js' => '38dcf3c8', 335 336 'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de', 336 337 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '10246726', 337 338 'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a', ··· 553 554 'javelin-behavior-dashboard-move-panels' => '82439934', 554 555 'javelin-behavior-dashboard-query-panel-select' => '453c5375', 555 556 'javelin-behavior-dashboard-tab-panel' => 'd4eecc63', 557 + 'javelin-behavior-day-view' => 'f4f4ad80', 556 558 'javelin-behavior-device' => 'a205cf28', 557 559 'javelin-behavior-differential-add-reviewers-and-ccs' => 'e10f8e18', 558 560 'javelin-behavior-differential-comment-jump' => '4fdb476d', ··· 573 575 'javelin-behavior-doorkeeper-tag' => 'e5822781', 574 576 'javelin-behavior-durable-column' => '16c695bf', 575 577 'javelin-behavior-error-log' => '6882e80a', 576 - 'javelin-behavior-event-all-day' => 'ca5fa62a', 578 + 'javelin-behavior-event-all-day' => '38dcf3c8', 577 579 'javelin-behavior-fancy-datepicker' => '5c0f680f', 578 580 'javelin-behavior-global-drag-and-drop' => 'c8e57404', 579 581 'javelin-behavior-herald-rule-editor' => '7ebaeed3',
+25
src/view/phui/calendar/PHUICalendarDayView.php
··· 10 10 private $browseURI; 11 11 private $events = array(); 12 12 private $todayEvents = array(); 13 + private $jsTodayEvents = array(); 13 14 14 15 private $allDayEvents = array(); 15 16 ··· 45 46 require_celerity_resource('phui-calendar-day-css'); 46 47 47 48 $hours = $this->getHoursOfDay(); 49 + $js_hourly_events = array(); 48 50 $hourly_events = array(); 49 51 50 52 $first_event_hour = null; ··· 83 85 && $event->getEpochStart() < $hour_end)) { 84 86 $current_hour_events[] = $event; 85 87 $this->todayEvents[] = $event; 88 + $this->jsTodayEvents[] = array( 89 + 'eventStartEpoch' => $event->getEpochStart(), 90 + 'eventEndEpoch' => $event->getEpochEnd(), 91 + 'eventName' => $event->getName(), 92 + ); 86 93 } 87 94 } 88 95 foreach ($current_hour_events as $event) { ··· 102 109 $first_event_hour = $hour; 103 110 } 104 111 112 + $js_hourly_events[$event->getEventID()] = array( 113 + 'eventStartEpoch' => $event->getEpochStart(), 114 + 'eventEndEpoch' => $event->getEpochEnd(), 115 + 'eventName' => $event->getName(), 116 + 'hour' => $hour, 117 + 'offset' => '0', 118 + 'width' => '100%', 119 + 'top' => $top.'%', 120 + 'height' => $height.'%', 121 + ); 122 + 105 123 $hourly_events[$event->getEventID()] = array( 106 124 'hour' => $hour, 107 125 'event' => $event, ··· 175 193 $header = $this->renderDayViewHeader(); 176 194 $sidebar = $this->renderSidebar(); 177 195 $warnings = $this->getQueryRangeWarning(); 196 + 197 + Javelin::initBehavior( 198 + 'day-view', 199 + array( 200 + 'todayEvents' => $this->jsTodayEvents, 201 + 'hourlyEvents' => $js_hourly_events, 202 + )); 178 203 179 204 $table_box = id(new PHUIObjectBoxView()) 180 205 ->setHeader($header)
+50
webroot/rsrc/js/application/calendar/behavior-day-view.js
··· 1 + /** 2 + * @provides javelin-behavior-day-view 3 + */ 4 + 5 + 6 + JX.behavior('day-view', function(config) { 7 + var hourly_events = config.hourlyEvents; 8 + var today_events = config.todayEvents; 9 + 10 + function findTodayClusters() { 11 + var events = today_events.sort(function(x, y){ 12 + return (x.eventStartEpoch - y.eventStartEpoch); 13 + }); 14 + 15 + var clusters = []; 16 + 17 + events.forEach(function(e){ 18 + var destination_cluster_index = null; 19 + var event_start = e.eventStartEpoch - (30*60); 20 + var event_end = e.eventEndEpoch + (30*60); 21 + 22 + clusters.forEach(function(cluster, index){ 23 + for(var i=0; i < cluster.length; i++) { 24 + var clustered_event = cluster[i]; 25 + var compare_event_start = clustered_event.eventStartEpoch; 26 + var compare_event_end = clustered_event.eventEndEpoch; 27 + 28 + if (event_start < compare_event_end && 29 + event_end > compare_event_start) { 30 + destination_cluster_index = index; 31 + break; 32 + } 33 + } 34 + }); 35 + 36 + if (destination_cluster_index !== null) { 37 + clusters[destination_cluster_index].push(e); 38 + destination_cluster_index = null; 39 + } else { 40 + var next_cluster = []; 41 + next_cluster.push(e); 42 + clusters.push(next_cluster); 43 + } 44 + }); 45 + 46 + return clusters; 47 + } 48 + 49 + var today_clusters = findTodayClusters(); 50 + });
webroot/rsrc/js/application/calendar/event-all-day.js webroot/rsrc/js/application/calendar/behavior-event-all-day.js