private function getEventTooltip(AphrontCalendarEventView $event)
 {
     $time_pref = $this->getUser()->getPreference(PhabricatorUserPreferences::PREFERENCE_TIME_FORMAT);
     Javelin::initBehavior('phabricator-tooltips');
     $start = id(AphrontFormDateControlValue::newFromEpoch($this->getUser(), $event->getEpochStart()));
     $end = id(AphrontFormDateControlValue::newFromEpoch($this->getUser(), $event->getEpochEnd()));
     $start_date = $start->getDateTime()->format('m d Y');
     $end_date = $end->getDateTime()->format('m d Y');
     if ($event->getIsAllDay()) {
         if ($start_date == $end_date) {
             $tip = pht('All day');
         } else {
             $tip = pht('All day, %s - %s', $start->getValueAsFormat('M j, Y'), $end->getValueAsFormat('M j, Y'));
         }
     } else {
         if ($start->getValueDate() == $end->getValueDate()) {
             $tip = pht('%s - %s', $start->getValueAsFormat($time_pref), $end->getValueAsFormat($time_pref));
         } else {
             $tip = pht('%s - %s', $start->getValueAsFormat('M j, Y, ' . $time_pref), $end->getValueAsFormat('M j, Y, ' . $time_pref));
         }
     }
     return $tip;
 }
 private function getEventTooltip(AphrontCalendarEventView $event)
 {
     $viewer = $this->getViewer();
     $time_key = PhabricatorTimeFormatSetting::SETTINGKEY;
     $time_pref = $viewer->getUserSetting($time_key);
     Javelin::initBehavior('phabricator-tooltips');
     $start = id(AphrontFormDateControlValue::newFromEpoch($viewer, $event->getEpochStart()));
     $end = id(AphrontFormDateControlValue::newFromEpoch($viewer, $event->getEpochEnd()));
     $start_date = $start->getDateTime()->format('m d Y');
     $end_date = $end->getDateTime()->format('m d Y');
     if ($event->getIsAllDay()) {
         if ($start_date == $end_date) {
             $tip = pht('All day');
         } else {
             $tip = pht('All day, %s - %s', $start->getValueAsFormat('M j, Y'), $end->getValueAsFormat('M j, Y'));
         }
     } else {
         if ($start->getValueDate() == $end->getValueDate()) {
             $tip = pht('%s - %s', $start->getValueAsFormat($time_pref), $end->getValueAsFormat($time_pref));
         } else {
             $tip = pht('%s - %s', $start->getValueAsFormat('M j, Y, ' . $time_pref), $end->getValueAsFormat('M j, Y, ' . $time_pref));
         }
     }
     return $tip;
 }
 private function renderEvent(AphrontCalendarEventView $event, $epoch_start, $epoch_end)
 {
     $user = $this->user;
     $event_start = $event->getEpochStart();
     $event_end = $event->getEpochEnd();
     $classes = array();
     $when = array();
     $classes[] = 'aphront-calendar-event';
     if ($event_start < $epoch_start) {
         $classes[] = 'aphront-calendar-event-continues-before';
         $when[] = 'Started ' . phabricator_datetime($event_start, $user);
     } else {
         $when[] = 'Starts at ' . phabricator_time($event_start, $user);
     }
     if ($event_end > $epoch_end) {
         $classes[] = 'aphront-calendar-event-continues-after';
         $when[] = 'Ends ' . phabricator_datetime($event_end, $user);
     } else {
         $when[] = 'Ends at ' . phabricator_time($event_end, $user);
     }
     Javelin::initBehavior('phabricator-tooltips');
     $info = $event->getName();
     if ($event->getDescription()) {
         $info .= "\n\n" . $event->getDescription();
     }
     $text_div = javelin_render_tag('div', array('sigil' => 'has-tooltip', 'meta' => array('tip' => $info . "\n\n" . implode("\n", $when), 'size' => 240), 'class' => 'aphront-calendar-event-text'), phutil_escape_html(phutil_utf8_shorten($event->getName(), 32)));
     return javelin_render_tag('div', array('class' => implode(' ', $classes)), $text_div);
 }