Page MenuHomePhabricator

D12978.diff
No OneTemporary

D12978.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -331,7 +331,8 @@
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'b1a59974',
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761',
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
- 'rsrc/js/application/calendar/event-all-day.js' => 'ca5fa62a',
+ 'rsrc/js/application/calendar/behavior-day-view.js' => 'f4f4ad80',
+ 'rsrc/js/application/calendar/behavior-event-all-day.js' => '38dcf3c8',
'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de',
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '10246726',
'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a',
@@ -553,6 +554,7 @@
'javelin-behavior-dashboard-move-panels' => '82439934',
'javelin-behavior-dashboard-query-panel-select' => '453c5375',
'javelin-behavior-dashboard-tab-panel' => 'd4eecc63',
+ 'javelin-behavior-day-view' => 'f4f4ad80',
'javelin-behavior-device' => 'a205cf28',
'javelin-behavior-differential-add-reviewers-and-ccs' => 'e10f8e18',
'javelin-behavior-differential-comment-jump' => '4fdb476d',
@@ -573,7 +575,7 @@
'javelin-behavior-doorkeeper-tag' => 'e5822781',
'javelin-behavior-durable-column' => '16c695bf',
'javelin-behavior-error-log' => '6882e80a',
- 'javelin-behavior-event-all-day' => 'ca5fa62a',
+ 'javelin-behavior-event-all-day' => '38dcf3c8',
'javelin-behavior-fancy-datepicker' => '5c0f680f',
'javelin-behavior-global-drag-and-drop' => 'c8e57404',
'javelin-behavior-herald-rule-editor' => '7ebaeed3',
diff --git a/src/view/phui/calendar/PHUICalendarDayView.php b/src/view/phui/calendar/PHUICalendarDayView.php
--- a/src/view/phui/calendar/PHUICalendarDayView.php
+++ b/src/view/phui/calendar/PHUICalendarDayView.php
@@ -10,6 +10,7 @@
private $browseURI;
private $events = array();
private $todayEvents = array();
+ private $jsTodayEvents = array();
private $allDayEvents = array();
@@ -45,6 +46,7 @@
require_celerity_resource('phui-calendar-day-css');
$hours = $this->getHoursOfDay();
+ $js_hourly_events = array();
$hourly_events = array();
$first_event_hour = null;
@@ -83,6 +85,11 @@
&& $event->getEpochStart() < $hour_end)) {
$current_hour_events[] = $event;
$this->todayEvents[] = $event;
+ $this->jsTodayEvents[] = array(
+ 'eventStartEpoch' => $event->getEpochStart(),
+ 'eventEndEpoch' => $event->getEpochEnd(),
+ 'eventName' => $event->getName(),
+ );
}
}
foreach ($current_hour_events as $event) {
@@ -102,6 +109,17 @@
$first_event_hour = $hour;
}
+ $js_hourly_events[$event->getEventID()] = array(
+ 'eventStartEpoch' => $event->getEpochStart(),
+ 'eventEndEpoch' => $event->getEpochEnd(),
+ 'eventName' => $event->getName(),
+ 'hour' => $hour,
+ 'offset' => '0',
+ 'width' => '100%',
+ 'top' => $top.'%',
+ 'height' => $height.'%',
+ );
+
$hourly_events[$event->getEventID()] = array(
'hour' => $hour,
'event' => $event,
@@ -176,6 +194,13 @@
$sidebar = $this->renderSidebar();
$warnings = $this->getQueryRangeWarning();
+ Javelin::initBehavior(
+ 'day-view',
+ array(
+ 'todayEvents' => $this->jsTodayEvents,
+ 'hourlyEvents' => $js_hourly_events,
+ ));
+
$table_box = id(new PHUIObjectBoxView())
->setHeader($header)
->appendChild($all_day_event_box)
diff --git a/webroot/rsrc/js/application/calendar/behavior-day-view.js b/webroot/rsrc/js/application/calendar/behavior-day-view.js
new file mode 100644
--- /dev/null
+++ b/webroot/rsrc/js/application/calendar/behavior-day-view.js
@@ -0,0 +1,50 @@
+/**
+ * @provides javelin-behavior-day-view
+ */
+
+
+JX.behavior('day-view', function(config) {
+ var hourly_events = config.hourlyEvents;
+ var today_events = config.todayEvents;
+
+ function findTodayClusters() {
+ var events = today_events.sort(function(x, y){
+ return (x.eventStartEpoch - y.eventStartEpoch);
+ });
+
+ var clusters = [];
+
+ events.forEach(function(e){
+ var destination_cluster_index = null;
+ var event_start = e.eventStartEpoch - (30*60);
+ var event_end = e.eventEndEpoch + (30*60);
+
+ clusters.forEach(function(cluster, index){
+ for(var i=0; i < cluster.length; i++) {
+ var clustered_event = cluster[i];
+ var compare_event_start = clustered_event.eventStartEpoch;
+ var compare_event_end = clustered_event.eventEndEpoch;
+
+ if (event_start < compare_event_end &&
+ event_end > compare_event_start) {
+ destination_cluster_index = index;
+ break;
+ }
+ }
+ });
+
+ if (destination_cluster_index !== null) {
+ clusters[destination_cluster_index].push(e);
+ destination_cluster_index = null;
+ } else {
+ var next_cluster = [];
+ next_cluster.push(e);
+ clusters.push(next_cluster);
+ }
+ });
+
+ return clusters;
+ }
+
+ var today_clusters = findTodayClusters();
+});
diff --git a/webroot/rsrc/js/application/calendar/event-all-day.js b/webroot/rsrc/js/application/calendar/behavior-event-all-day.js
rename from webroot/rsrc/js/application/calendar/event-all-day.js
rename to webroot/rsrc/js/application/calendar/behavior-event-all-day.js

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 21, 12:11 PM (1 d, 19 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7654222
Default Alt Text
D12978.diff (5 KB)

Event Timeline