]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Load notice data using javascript from the html on the page instead of writing json...
authorCraig Andrews <candrews@integralblue.com>
Thu, 3 Dec 2009 02:24:41 +0000 (21:24 -0500)
committerCraig Andrews <candrews@integralblue.com>
Thu, 3 Dec 2009 02:24:41 +0000 (21:24 -0500)
Clicking on a geo link pops up a map (round 2)

plugins/Mapstraction/MapstractionPlugin.php
plugins/Mapstraction/allmap.php
plugins/Mapstraction/usermap.php

index c0c2c5b8e357c239648cdcdc63a38fc15104327d..a0dbf52040e7255de1b3c9b9e83f7ec35060f01b 100644 (file)
@@ -58,12 +58,12 @@ class MapstractionPlugin extends Plugin
      *
      * The way to register new actions from a plugin.
      *
-     * @param Router $m reference to router
+     * @param Router &$m reference to router
      *
      * @return boolean event handler return
      */
 
-    function onRouterInitialized($m)
+    function onRouterInitialized(&$m)
     {
         $m->connect(':nickname/all/map',
                     array('action' => 'allmap'),
@@ -110,11 +110,6 @@ class MapstractionPlugin extends Plugin
     function onEndShowScripts($action)
     {
         $actionName = $action->trimmed('action');
-        // These are the ones that have maps on 'em
-        if (!in_array($actionName,
-                      array('showstream', 'all', 'allmap', 'usermap'))) {
-            return true;
-        }
 
         switch ($this->provider)
         {
@@ -151,39 +146,6 @@ class MapstractionPlugin extends Plugin
         $action->raw(sprintf('var _provider = "%s";', $this->provider));
         $action->elementEnd('script');
 
-        switch ($actionName) {
-        case 'usermap':
-        case 'showstream':
-            $notice = empty($action->tag)
-              ? $action->user->getNotices(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1)
-                : $action->user->getTaggedNotices($action->tag, ($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null);
-            break;
-        case 'all':
-        case 'allmap':
-            $cur = common_current_user();
-            if (!empty($cur) && $cur->id == $action->user->id) {
-                $notice = $action->user->noticeInbox(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
-            } else {
-                $notice = $action->user->noticesWithFriends(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
-            }
-            break;
-        }
-
-        $jsonArray = array();
-
-        while ($notice->fetch()) {
-            if (!empty($notice->lat) && !empty($notice->lon)) {
-                $jsonNotice = $this->noticeAsJson($notice);
-                $jsonArray[] = $jsonNotice;
-            }
-        }
-
-        $action->elementStart('script', array('type' => 'text/javascript'));
-        $action->raw('/*<![CDATA[*/'); // XHTML compat for Safari
-        $action->raw('var _notices = ' . json_encode($jsonArray));
-        $action->raw('/*]]>*/'); // XHTML compat for Safari
-        $action->elementEnd('script');
-
         return true;
     }
 
@@ -214,34 +176,4 @@ class MapstractionPlugin extends Plugin
 
         $action->elementEnd('div');
     }
-
-    function noticeAsJson($notice)
-    {
-        // FIXME: this code should be abstracted to a neutral third
-        // party, like Notice::asJson(). I'm not sure of the ethics
-        // of refactoring from within a plugin, so I'm just abusing
-        // the ApiAction method. Don't do this unless you're me!
-
-        require_once(INSTALLDIR.'/lib/api.php');
-
-        $act = new ApiAction('/dev/null');
-
-        $arr = $act->twitterStatusArray($notice, true);
-        $arr['url'] = $notice->bestUrl();
-        $arr['html'] = $notice->rendered;
-        $arr['source'] = $arr['source'];
-
-        if (!empty($notice->reply_to)) {
-            $reply_to = Notice::staticGet('id', $notice->reply_to);
-            if (!empty($reply_to)) {
-                $arr['in_reply_to_status_url'] = $reply_to->bestUrl();
-            }
-            $reply_to = null;
-        }
-
-        $profile = $notice->getProfile();
-        $arr['user']['profile_url'] = $profile->profileurl;
-
-        return $arr;
-    }
 }
index 6a48b141fec17b055a851f9df994854dcdd0b405..3a78ac0d4b0ff2a060d0e83f19e077a2ba4b3756 100644 (file)
@@ -122,4 +122,63 @@ class AllmapAction extends OwnerDesignAction
                                     'class' => 'gray smallmap',
                                     'style' => "width: 100%; height: 400px"));
     }
-}
\ No newline at end of file
+
+    function showScripts()
+    {
+        parent::showScripts();
+        $cur = common_current_user();
+        if (!empty($cur) && $cur->id == $this->user->id) {
+            $notice = $this->user->noticeInbox(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
+        } else {
+            $notice = $this->user->noticesWithFriends(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
+        }
+
+        $jsonArray = array();
+
+        while ($notice->fetch()) {
+            if (!empty($notice->lat) && !empty($notice->lon)) {
+                $jsonNotice = $this->noticeAsJson($notice);
+                $jsonArray[] = $jsonNotice;
+            }
+        }
+
+        $this->elementStart('script', array('type' => 'text/javascript'));
+        $this->raw('/*<![CDATA[*/'); // XHTML compat for Safari
+        $this->raw('var _notices = ' . json_encode($jsonArray).'; ');
+        $this->raw('showMapstraction($("#map_canvas"),_notices);');
+        $this->raw('/*]]>*/'); // XHTML compat for Safari
+        $this->elementEnd('script');
+
+        return true;
+    }
+
+    function noticeAsJson($notice)
+    {
+        // FIXME: this code should be abstracted to a neutral third
+        // party, like Notice::asJson(). I'm not sure of the ethics
+        // of refactoring from within a plugin, so I'm just abusing
+        // the ApiAction method. Don't do this unless you're me!
+
+        require_once(INSTALLDIR.'/lib/api.php');
+
+        $act = new ApiAction('/dev/null');
+
+        $arr = $act->twitterStatusArray($notice, true);
+        $arr['url'] = $notice->bestUrl();
+        $arr['html'] = $notice->rendered;
+        $arr['source'] = $arr['source'];
+
+        if (!empty($notice->reply_to)) {
+            $reply_to = Notice::staticGet('id', $notice->reply_to);
+            if (!empty($reply_to)) {
+                $arr['in_reply_to_status_url'] = $reply_to->bestUrl();
+            }
+            $reply_to = null;
+        }
+
+        $profile = $notice->getProfile();
+        $arr['user']['profile_url'] = $profile->profileurl;
+
+        return $arr;
+    }
+}
index fbf1469c33debe38f44d9e7631194c9072e8564f..afa48b16292fb25b5fb28c0f1349118dc8ff91f2 100644 (file)
@@ -123,4 +123,68 @@ class UsermapAction extends OwnerDesignAction
                                     'class' => 'gray smallmap',
                                     'style' => "width: 100%; height: 400px"));
     }
-}
\ No newline at end of file
+
+    /**
+     * Hook for adding extra JavaScript
+     *
+     * @param Action $action Action object for the page
+     *
+     * @return boolean event handler return
+     */
+
+    function showScripts()
+    {
+        parent::showScripts();
+        $notice = empty($this->tag)
+          ? $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1)
+            : $this->user->getTaggedNotices($this->tag, ($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null);
+
+        $jsonArray = array();
+
+        while ($notice->fetch()) {
+            if (!empty($notice->lat) && !empty($notice->lon)) {
+                $jsonNotice = $this->noticeAsJson($notice);
+                $jsonArray[] = $jsonNotice;
+            }
+        }
+
+        $this->elementStart('script', array('type' => 'text/javascript'));
+        $this->raw('/*<![CDATA[*/'); // XHTML compat for Safari
+        $this->raw('var _notices = ' . json_encode($jsonArray).'; ');
+        $this->raw('showMapstraction($("#map_canvas"),_notices);');
+        $this->raw('/*]]>*/'); // XHTML compat for Safari
+        $this->elementEnd('script');
+
+        return true;
+    }
+
+    function noticeAsJson($notice)
+    {
+        // FIXME: this code should be abstracted to a neutral third
+        // party, like Notice::asJson(). I'm not sure of the ethics
+        // of refactoring from within a plugin, so I'm just abusing
+        // the ApiAction method. Don't do this unless you're me!
+
+        require_once(INSTALLDIR.'/lib/api.php');
+
+        $act = new ApiAction('/dev/null');
+
+        $arr = $act->twitterStatusArray($notice, true);
+        $arr['url'] = $notice->bestUrl();
+        $arr['html'] = $notice->rendered;
+        $arr['source'] = $arr['source'];
+
+        if (!empty($notice->reply_to)) {
+            $reply_to = Notice::staticGet('id', $notice->reply_to);
+            if (!empty($reply_to)) {
+                $arr['in_reply_to_status_url'] = $reply_to->bestUrl();
+            }
+            $reply_to = null;
+        }
+
+        $profile = $notice->getProfile();
+        $arr['user']['profile_url'] = $profile->profileurl;
+
+        return $arr;
+    }
+}