]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Event upgraded to microformats2
authorMikael Nordfeldth <mmn@hethane.se>
Mon, 23 Jun 2014 12:18:59 +0000 (14:18 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Mon, 23 Jun 2014 12:20:06 +0000 (14:20 +0200)
plugins/Event/EventPlugin.php
plugins/Event/classes/Happening.php
plugins/Event/css/event.css
plugins/Event/event.js [deleted file]
plugins/Event/js/event.js [new file with mode: 0644]
plugins/Event/lib/eventlistitem.php

index c1c8ec77c3365da82e24c1aac72f58e82708dfce..c49103be77175543907e45ac55f70904f4b93201 100644 (file)
@@ -311,7 +311,7 @@ class EventPlugin extends MicroappPlugin
 
     function onEndShowScripts($action)
     {
-        $action->script($this->path('event.js'));
+        $action->script($this->path('js/event.js'));
     }
 
     function onEndShowStyles($action)
index 2b097e9077d6470164227406bf731fe5c8b427d2..3a094ece6cf3fe34672784e60544d3872b8a28d8 100644 (file)
@@ -149,16 +149,17 @@ class Happening extends Managed_DataObject
                            $location,
                            $description);
 
-        // TRANS: Rendered event description. %1$s is a title, %2$s is start time, %3$s is start time,
+        // TRANS: Rendered microformats2 tagged event description.
+        // TRANS: %1$s is a title, %2$s is start time, %3$s is start time,
         // TRANS: %4$s is end time, %5$s is end time, %6$s is location, %7$s is description.
         // TRANS: Class names should not be translated.
-        $rendered = sprintf(_m('<span class="vevent">'.
-                              '<span class="summary">%1$s</span> '.
-                              '<abbr class="dtstart" title="%2$s">%3$s</a> - '.
-                              '<abbr class="dtend" title="%4$s">%5$s</a> '.
-                              '(<span class="location">%6$s</span>): '.
-                              '<span class="description">%7$s</span> '.
-                              '</span>'),
+        $rendered = sprintf(_m('<div class="h-event">'.
+                              '<p class="p-name p-summary">%1$s</p> '.
+                              '<time class="dt-start" datetime="%2$s">%3$s</time> - '.
+                              '<time class="dt-end" datetime="%4$s">%5$s</time> '.
+                              '(<span class="p-location">%6$s</span>): '.
+                              '<div class="p-description">%7$s</div> '.
+                              '</div>'),
                             htmlspecialchars($title),
                             htmlspecialchars(common_date_iso8601($ev->start_time)),
                             htmlspecialchars(common_exact_date($ev->start_time)),
@@ -187,6 +188,20 @@ class Happening extends Managed_DataObject
         return $saved;
     }
 
+    /**
+     * Returns the profile's canonical url, not necessarily a uri/unique id
+     *
+     * @return string $url
+     */
+    public function getUrl()
+    {
+        if (empty($this->url) ||
+                !filter_var($this->url, FILTER_VALIDATE_URL)) {
+            throw new InvalidUrlException($this->url);
+        }
+        return $this->url;
+    }
+
     function getNotice()
     {
         return Notice::getKV('uri', $this->uri);
index 37561c397dba7ee64032c43c72dd6a91b0c6af7f..e50201a4474423bef49507cea0edfd394ff2385f 100644 (file)
@@ -6,8 +6,6 @@
 .event-notice-count { float: right; }
 .event-info { float: left; }
 .event-title { margin-left: 0px; }
-#content .event .h-entry { margin-left: 0px; }
-#content .event .e-content { margin-left: 0px; }
 .ui-autocomplete {
     max-height: 100px;
     overflow-y: auto;
@@ -37,7 +35,7 @@ li.rsvp-list .entities li .u-photo {
     float: none !important;
 }
 
-.notice .vevent div {
+.notice .h-event div {
     margin-bottom: 8px;
 }
 
@@ -94,7 +92,7 @@ li.rsvp-list .entities li .u-photo {
     background: linear-gradient(top, #fb6104 0%,#fc8035 100%);
 }
 
-#wrap .vevent form.processing input.submit {
+#wrap .h-event form.processing input.submit {
     text-indent: 0;
     background: #ff9d63;
 }
diff --git a/plugins/Event/event.js b/plugins/Event/event.js
deleted file mode 100644 (file)
index 696176e..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-$(document).ready(function() {
-
-    // get current time from server
-    var today = new Date($('now').val());
-
-    $("#event-startdate").datepicker({
-        // Don't let the user set a start date < before today
-        minDate: today,
-        onClose: onStartDateSelected
-    });
-
-    $("#event-enddate").datepicker({
-        minDate: today,
-        onClose: onEndDateSelected
-    });
-
-    $("#event-starttime").change(function(e) {
-        var tz = $("#tz").val();
-
-        var startDate = $("#event-startdate").val();
-        var startTime = $("#event-starttime option:selected").val().replace(/(pm|am)/, ' $1');
-        var startStr = startDate + ' ' + startTime + ' ' + tz;
-
-        var endDate =  $("#event-enddate").val();
-        var endTime = $("#event-endtime option:selected").val();
-        var endStr = endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz;
-
-        // just need to compare hours
-        var start = new Date(startStr);
-        var end = new Date(endStr);
-
-        updateTimes(startStr, (startDate === endDate), function (data) {
-            var times = [];
-            $.each(data, function(key, val) {
-                times.push('<option value="' + key + '">' + val + '</option>');
-            });
-            $("#event-endtime").html(times.join(''));
-
-            if (start > end) {
-                $("#event-endtime").val(startTime).attr("selected", "selected");
-            } else {
-                $("#event-endtime").val(endTime).attr("selected", "selected");
-            }
-        });
-
-    });
-
-    $("#event-endtime").change(function(e) {
-        var HOUR = 60 * 60 * 1000;
-        var tz = $("#tz").val();
-        var startDate = $("#event-startdate").val();
-        var endDate = $("#event-enddate").val();
-        var starttime = $("#event-starttime option:selected").val();
-        var endtime = $("#event-endtime option:selected").val();
-        var endtimeText = $("#event-endtime option:selected").text();
-
-        // If the end time is in the next day then update the start date
-        if (startDate === endDate) {
-            var startstr = startDate + ' ' + starttime.replace(/(pm|am)/, ' $1') + ' ' + tz;
-            var start = new Date(startstr);
-            var matches = endtimeText.match(/\(.*\)/);
-            var hours;
-            if (matches) {
-                hours = matches[0].substr(1).split(' ')[0]; // get x from (x hours)
-                if (hours) {
-                    if (hours == 30) {
-                        hours = .5; // special case: x == 30 from (30 mins)
-                    }
-                    var end = new Date(start.getTime() + (hours * HOUR));
-                    if (end.getDate() > start.getDate()) {
-                        $("#event-enddate").datepicker('setDate', end);
-                        var endstr = endDate + ' 12:00 am ' +  tz;
-                        updateTimes(endstr, false, function(data) {
-                            var times = [];
-                            $.each(data, function(key, val) {
-                                times.push('<option value="' + key + '">' + val + '</option>');
-                            });
-                            $("#event-endtime").html(times.join(''));
-
-                            if (start > end) {
-                                $("#event-endtime").val(starttime).attr("selected", "selected");
-                            } else {
-                                $("#event-endtime").val(endtime).attr("selected", "selected");
-                            }
-                        });
-                    }
-                }
-            }
-        }
-    });
-
-    function onStartDateSelected(dateText, inst) {
-        var tz = $("#tz").val();
-        var startTime = $("#event-starttime option:selected").val();
-        var startDateTime = new Date(dateText + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz);
-
-        // When we update the start date and time, we need to update the end date and time
-        // to make sure they are equal or in the future
-        $("#event-enddate").datepicker('option', 'minDate', startDateTime);
-
-        recalculateTimes();
-    }
-
-    function onEndDateSelected(dateText, inst) {
-        recalculateTimes();
-    }
-
-    function recalculateTimes(showDuration) {
-        var tz = $("#tz").val();
-
-        var startDate = $("#event-startdate").val();
-        var startTime = $("#event-starttime option:selected").val();
-        var startStr = startDate + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz;
-        var startDateTime = new Date(startStr);
-
-        var endDate = $("#event-enddate").val();
-        var endTime = $("#event-endtime option:selected").val();
-        var endDateTime = new Date(endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz);
-        var showDuration = true;
-
-        if (endDateTime.getDate() !== startDateTime.getDate()) {
-            starStr = endDate + ' 12:00 am ' +  tz;
-            showDuration = false;
-        }
-
-        updateTimes(startStr, showDuration, function(data) {
-            var times = [];
-            $.each(data, function(key, val) {
-                times.push('<option value="' + key + '">' + val + '</option>');
-            });
-            $("#event-endtime").html(times.join(''));
-            if (startDateTime > endDateTime) {
-                $("#event-endtime").val(startTime).attr("selected", "selected");
-            } else {
-                $("#event-endtime").val(endTime).attr("selected", "selected");
-            }
-        });
-    }
-
-    function updateTimes(start, duration, onSuccess) {
-        $.getJSON($('#timelist_action_url').val(), {start: start, ajax: true, duration: duration}, onSuccess);
-    }
-
-});
diff --git a/plugins/Event/js/event.js b/plugins/Event/js/event.js
new file mode 100644 (file)
index 0000000..696176e
--- /dev/null
@@ -0,0 +1,144 @@
+$(document).ready(function() {
+
+    // get current time from server
+    var today = new Date($('now').val());
+
+    $("#event-startdate").datepicker({
+        // Don't let the user set a start date < before today
+        minDate: today,
+        onClose: onStartDateSelected
+    });
+
+    $("#event-enddate").datepicker({
+        minDate: today,
+        onClose: onEndDateSelected
+    });
+
+    $("#event-starttime").change(function(e) {
+        var tz = $("#tz").val();
+
+        var startDate = $("#event-startdate").val();
+        var startTime = $("#event-starttime option:selected").val().replace(/(pm|am)/, ' $1');
+        var startStr = startDate + ' ' + startTime + ' ' + tz;
+
+        var endDate =  $("#event-enddate").val();
+        var endTime = $("#event-endtime option:selected").val();
+        var endStr = endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz;
+
+        // just need to compare hours
+        var start = new Date(startStr);
+        var end = new Date(endStr);
+
+        updateTimes(startStr, (startDate === endDate), function (data) {
+            var times = [];
+            $.each(data, function(key, val) {
+                times.push('<option value="' + key + '">' + val + '</option>');
+            });
+            $("#event-endtime").html(times.join(''));
+
+            if (start > end) {
+                $("#event-endtime").val(startTime).attr("selected", "selected");
+            } else {
+                $("#event-endtime").val(endTime).attr("selected", "selected");
+            }
+        });
+
+    });
+
+    $("#event-endtime").change(function(e) {
+        var HOUR = 60 * 60 * 1000;
+        var tz = $("#tz").val();
+        var startDate = $("#event-startdate").val();
+        var endDate = $("#event-enddate").val();
+        var starttime = $("#event-starttime option:selected").val();
+        var endtime = $("#event-endtime option:selected").val();
+        var endtimeText = $("#event-endtime option:selected").text();
+
+        // If the end time is in the next day then update the start date
+        if (startDate === endDate) {
+            var startstr = startDate + ' ' + starttime.replace(/(pm|am)/, ' $1') + ' ' + tz;
+            var start = new Date(startstr);
+            var matches = endtimeText.match(/\(.*\)/);
+            var hours;
+            if (matches) {
+                hours = matches[0].substr(1).split(' ')[0]; // get x from (x hours)
+                if (hours) {
+                    if (hours == 30) {
+                        hours = .5; // special case: x == 30 from (30 mins)
+                    }
+                    var end = new Date(start.getTime() + (hours * HOUR));
+                    if (end.getDate() > start.getDate()) {
+                        $("#event-enddate").datepicker('setDate', end);
+                        var endstr = endDate + ' 12:00 am ' +  tz;
+                        updateTimes(endstr, false, function(data) {
+                            var times = [];
+                            $.each(data, function(key, val) {
+                                times.push('<option value="' + key + '">' + val + '</option>');
+                            });
+                            $("#event-endtime").html(times.join(''));
+
+                            if (start > end) {
+                                $("#event-endtime").val(starttime).attr("selected", "selected");
+                            } else {
+                                $("#event-endtime").val(endtime).attr("selected", "selected");
+                            }
+                        });
+                    }
+                }
+            }
+        }
+    });
+
+    function onStartDateSelected(dateText, inst) {
+        var tz = $("#tz").val();
+        var startTime = $("#event-starttime option:selected").val();
+        var startDateTime = new Date(dateText + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz);
+
+        // When we update the start date and time, we need to update the end date and time
+        // to make sure they are equal or in the future
+        $("#event-enddate").datepicker('option', 'minDate', startDateTime);
+
+        recalculateTimes();
+    }
+
+    function onEndDateSelected(dateText, inst) {
+        recalculateTimes();
+    }
+
+    function recalculateTimes(showDuration) {
+        var tz = $("#tz").val();
+
+        var startDate = $("#event-startdate").val();
+        var startTime = $("#event-starttime option:selected").val();
+        var startStr = startDate + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz;
+        var startDateTime = new Date(startStr);
+
+        var endDate = $("#event-enddate").val();
+        var endTime = $("#event-endtime option:selected").val();
+        var endDateTime = new Date(endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz);
+        var showDuration = true;
+
+        if (endDateTime.getDate() !== startDateTime.getDate()) {
+            starStr = endDate + ' 12:00 am ' +  tz;
+            showDuration = false;
+        }
+
+        updateTimes(startStr, showDuration, function(data) {
+            var times = [];
+            $.each(data, function(key, val) {
+                times.push('<option value="' + key + '">' + val + '</option>');
+            });
+            $("#event-endtime").html(times.join(''));
+            if (startDateTime > endDateTime) {
+                $("#event-endtime").val(startTime).attr("selected", "selected");
+            } else {
+                $("#event-endtime").val(endTime).attr("selected", "selected");
+            }
+        });
+    }
+
+    function updateTimes(start, duration, onSuccess) {
+        $.getJSON($('#timelist_action_url').val(), {start: start, ajax: true, duration: duration}, onSuccess);
+    }
+
+});
index 54f069233f48854b470a11d3fc4e95a74486ddf3..cd28ce86e3df9d78d452499f6f42efbd1c2ee33e 100644 (file)
@@ -66,16 +66,14 @@ class EventListItem extends NoticeListItemAdapter
             return;
         }
 
-        $out->elementStart('div', 'vevent event e-content'); // VEVENT IN
+        // e-content since we're part of a h-entry
+        $out->elementStart('div', 'h-event e-content'); // VEVENT IN
 
-        $out->elementStart('h3', 'summary');  // VEVENT/H3 IN
+        $out->elementStart('h3', 'p-summary p-name');  // VEVENT/H3 IN
 
-        if (!empty($event->url)) {
-            $out->element('a',
-                          array('href' => $event->url,
-                                'class' => 'event-title entry-title summary'),
-                          $event->title);
-        } else {
+        try {
+            $out->element('a', array('href' => $event->getUrl()), $event->title);
+        } catch (InvalidUrlException $e) {
             $out->text($event->title);
         }
 
@@ -114,19 +112,15 @@ class EventListItem extends NoticeListItemAdapter
         // TRANS: Field label for event description.
         $out->element('strong', null, _m('Time:'));
 
-        $out->element('abbr', array('class' => 'dtstart',
-                                    'title' => common_date_iso8601($event->start_time)),
+        $out->element('time', array('class' => 'dt-start',
+                                    'datetime' => common_date_iso8601($event->start_time)),
                       $startDateStr . ' ' . $startTimeStr);
         $out->text(' – ');
-        if ($startDateStr == $endDateStr) {
-            $out->element('span', array('class' => 'dtend',
-                                        'title' => common_date_iso8601($event->end_time)),
-                          $endTimeStr);
-        } else {
-            $out->element('span', array('class' => 'dtend',
-                                        'title' => common_date_iso8601($event->end_time)),
-                          $endDateStr . ' ' . $endTimeStr);
-        }
+        $out->element('time', array('class' => 'dt-end',
+                                    'datetime' => common_date_iso8601($event->end_time)),
+                      $startDateStr == $endDateStr
+                                    ? "$endDatestr $endTimeStr"
+                                    :  $endTimeStr);
 
         $out->elementEnd('div'); // VEVENT/EVENT-TIMES OUT
 
@@ -134,7 +128,7 @@ class EventListItem extends NoticeListItemAdapter
             $out->elementStart('div', 'event-location');
             // TRANS: Field label for event description.
             $out->element('strong', null, _m('Location:'));
-            $out->element('span', 'location', $event->location);
+            $out->element('span', 'p-location', $event->location);
             $out->elementEnd('div');
         }
 
@@ -142,22 +136,21 @@ class EventListItem extends NoticeListItemAdapter
             $out->elementStart('div', 'event-description');
             // TRANS: Field label for event description.
             $out->element('strong', null, _m('Description:'));
-            $out->element('span', 'description', $event->description);
+            $out->element('div', 'p-description', $event->description);
             $out->elementEnd('div');
         }
 
         $rsvps = $event->getRSVPs();
 
         $out->elementStart('div', 'event-rsvps');
-        // TRANS: Field label for event description.
 
-        $out->text(_('Attending:'));
+        // TRANS: Field label for event description.
+        $out->element('strong', null, _m('Attending:'));
         $out->elementStart('ul', 'attending-list');
 
         foreach ($rsvps as $verb => $responses) {
             $out->elementStart('li', 'rsvp-list');
-            switch ($verb)
-            {
+            switch ($verb) {
             case RSVP::POSITIVE:
                 $out->text(_('Yes:'));
                 break;
@@ -173,9 +166,7 @@ class EventListItem extends NoticeListItemAdapter
                 $ids[] = $response->profile_id;
             }
             $ids = array_slice($ids, 0, ProfileMiniList::MAX_PROFILES + 1);
-            $profiles = Profile::pivotGet('id', $ids);
-            $profile  = new ArrayWrapper(array_values($profiles));
-            $minilist = new ProfileMiniList($profile, $out);
+            $minilist = new ProfileMiniList(Profile::multiGet('id', $ids), $out);
             $minilist->show();
 
             $out->elementEnd('li');