Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15423273
D12978.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D12978.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 23, 2:25 PM (6 h, 45 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7654222
Default Alt Text
D12978.diff (5 KB)
Attached To
Mode
D12978: First step towards a Javelin behavior for Calendar day view
Attached
Detach File
Event Timeline
Log In to Comment