]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch '0.8.x' of git@gitorious.org:statusnet/mainline into 0.8.x
authorEvan Prodromou <evan@status.net>
Wed, 23 Sep 2009 17:51:41 +0000 (13:51 -0400)
committerEvan Prodromou <evan@status.net>
Wed, 23 Sep 2009 17:51:41 +0000 (13:51 -0400)
Conflicts:
plugins/Realtime/realtimeupdate.js

plugins/Meteor/meteorupdater.js
plugins/Realtime/RealtimePlugin.php
plugins/Realtime/realtimeupdate.js

index 91d12cde9c2696b546b2eeb37cec21ef09ef6ca6..9ce68775bf8ba1ebd89efc05f90605a753487231 100644 (file)
@@ -4,34 +4,19 @@
 
 var MeteorUpdater = function()
 {
-    return {
-
-        init: function(server, port, timeline)
-        {
-            Meteor.callbacks["process"] = function(data) {
-                var d = JSON.parse(data);
-
-                var user_url = $('address .url')[0].href+d['user']['screen_name'];
-
-                var wlh = window.location.href;
-
-                if (wlh.indexOf('?') > 0) {
-                   wlh = wlh.slice(0, wlh.indexOf('?'))
-                }
-
-                if (timeline == 'public' ||
-                    user_url+'/all' == wlh ||
-                    user_url == wlh) {
-
-                    RealtimeUpdate.receive(d);
-                }
-            };
-
-            Meteor.host = server;
-            Meteor.port = port;
-            Meteor.joinChannel(timeline, 0);
-            Meteor.connect();
-        }
-    }
+     return {
+
+          init: function(server, port, timeline)
+          {
+               Meteor.callbacks["process"] = function(data) {
+                    RealtimeUpdate.receive(JSON.parse(data));
+               };
+
+               Meteor.host = server;
+               Meteor.port = port;
+               Meteor.joinChannel(timeline, 0);
+               Meteor.connect();
+          }
+     }
 }();
 
index 611b1d86c975a5e9b02737db7e626e91649929a9..0f3e3107148f6931910172551d2d1cc696d5b9ce 100644 (file)
@@ -50,6 +50,11 @@ class RealtimePlugin extends Plugin
     protected $favorurl = null;
     protected $deleteurl = null;
 
+    /**
+     * When it's time to initialize the plugin, calculate and
+     * pass the URLs we need.
+     */
+
     function onInitializePlugin()
     {
         $this->replyurl = common_local_url('newnotice');
@@ -57,31 +62,19 @@ class RealtimePlugin extends Plugin
         // FIXME: need to find a better way to pass this pattern in
         $this->deleteurl = common_local_url('deletenotice',
                                             array('notice' => '0000000000'));
+        return true;
     }
 
     function onEndShowScripts($action)
     {
-        $path = null;
+        $timeline = $this->_getTimeline($action);
 
-        $a = $action->trimmed('action');
-
-        switch ($a) {
-            case 'public': case 'all': case 'replies': case 'showstream':
-                $path = array($a);
-                break;
-            case 'tag':
-                $tag = $action->trimmed('tag');
-                if (!empty($tag)) {
-                    $path = array('tag', $tag);
-                } else {
-                    return true;
-                }
-                break;
-             default:
-                return true;
-        }
+        // If there's not a timeline on this page,
+        // just return true
 
-        $timeline = $this->_pathToChannel($path);
+        if (empty($timeline)) {
+            return true;
+        }
 
         $scripts = $this->_getScripts();
 
@@ -97,16 +90,14 @@ class RealtimePlugin extends Plugin
             $user_id = 0;
         }
 
-        $action->script('plugins/Realtime/jquery.getUrlParam.js');
-
         $action->elementStart('script', array('type' => 'text/javascript'));
-        $action->raw('
-        <!--
-        $(document).ready(function() {
-            ' . $this->_updateInitialize($timeline, $user_id) . '
-        });
-        -->
-        ');
+
+        $script = ' $(document).ready(function() { '.
+          $this->_updateInitialize($timeline, $user_id).
+          '}); ';
+
+        $action->raw($script);
+
         $action->elementEnd('script');
 
         return true;
@@ -116,15 +107,23 @@ class RealtimePlugin extends Plugin
     {
         $paths = array();
 
-        // TODO: Replies timeline
+        // Add to the author's timeline
+
+        $user = User::staticGet('id', $notice->profile_id);
+
+        if (!empty($user)) {
+            $paths[] = array('showstream', $user->nickname);
+        }
+
+        // Add to the public timeline
 
         if ($notice->is_local ||
             ($notice->is_local == 0 && !common_config('public', 'localonly'))) {
-            foreach (array('public', 'all', 'replies', 'showstream') as $a) {
-                $paths[] = array($a);
-            }
+            $paths[] = array('public');
         }
 
+        // Add to the tags timeline
+
         $tags = $this->getNoticeTags($notice);
 
         if (!empty($tags)) {
@@ -133,6 +132,46 @@ class RealtimePlugin extends Plugin
             }
         }
 
+        // Add to inbox timelines
+        // XXX: do a join
+
+        $inbox = new Notice_inbox();
+        $inbox->notice_id = $notice->id;
+
+        if ($inbox->find()) {
+            while ($inbox->fetch()) {
+                $user = User::staticGet('id', $inbox->user_id);
+                $paths[] = array('all', $user->nickname);
+            }
+        }
+
+        // Add to the replies timeline
+
+        $reply = new Reply();
+        $reply->notice_id = $notice->id;
+
+        if ($reply->find()) {
+            while ($reply->fetch()) {
+                $user = User::staticGet('id', $reply->profile_id);
+                if (!empty($user)) {
+                    $paths[] = array('replies', $user->nickname);
+                }
+            }
+        }
+
+        // Add to the group timeline
+        // XXX: join
+
+        $gi = new Group_inbox();
+        $gi->notice_id = $notice->id;
+
+        if ($gi->find()) {
+            while ($gi->fetch()) {
+                $ug = User_group::staticGet('id', $gi->group_id);
+                $paths[] = array('showgroup', $ug->nickname);
+            }
+        }
+
         if (count($paths) > 0) {
 
             $json = $this->noticeAsJson($notice);
@@ -150,6 +189,47 @@ class RealtimePlugin extends Plugin
         return true;
     }
 
+    function onStartShowPageNotice($action)
+    {
+        $timeline = $this->_getTimeline($action);
+        if (!empty($timeline)) {
+            $base = $action->selfUrl();
+            if (mb_strstr($url, '?')) {
+                $url = $base . '&realtime=1';
+            } else {
+                $url = $base . '?realtime=1';
+            }
+            $title = $action->title();
+            $code = "window.open('$url', '$title', 'toolbar=no,resizable=yes,scrollbars=yes,status=yes,height=640,width=575');";
+            $action->element('a', array('href' => $base,
+                                        'onclick' => $code,
+                                        'id' => 'realtime_timeline',
+                                        'title' => _('Pop up')),
+                             'Pop up');
+
+        }
+        return true;
+    }
+
+    function onStartShowBody($action)
+    {
+        $realtime = $action->boolean('realtime');
+        if (!$realtime) {
+            return true;
+        }
+
+        $action->elementStart('body',
+                              (common_current_user()) ? array('id' => $action->trimmed('action'),
+                                                              'class' => 'user_in')
+                              : array('id' => $action->trimmed('action')));
+        if (common_logged_in()) {
+            $action->showNoticeForm();
+        }
+        $action->showContent();
+        $action->elementEnd('body');
+        return false; // No default processing
+    }
+
     function noticeAsJson($notice)
     {
         // FIXME: this code should be abstracted to a neutral third
@@ -234,4 +314,41 @@ class RealtimePlugin extends Plugin
     {
         return '';
     }
+
+    function _getTimeline($action)
+    {
+        $path = null;
+        $timeline = null;
+
+        $action_name = $action->trimmed('action');
+
+        switch ($action_name) {
+         case 'public':
+            $path = array('public');
+            break;
+         case 'tag':
+            $tag = $action->trimmed('tag');
+            if (!empty($tag)) {
+                $path = array('tag', $tag);
+            }
+            break;
+         case 'showstream':
+         case 'all':
+         case 'replies':
+         case 'showgroup':
+            $nickname = common_canonical_nickname($action->trimmed('nickname'));
+            if (!empty($nickname)) {
+                $path = array($action_name, $nickname);
+            }
+            break;
+         default:
+            break;
+        }
+
+        if (!empty($path)) {
+            $timeline = $this->_pathToChannel($path);
+        }
+
+        return $timeline;
+    }
 }
index d034deef16792ccc9be448dae6706b5a5561d720..3293ef6e9f1c99c771de7220e6855ee9ec2d548d 100644 (file)
-$(document).ready(function() {
-    if (!$(document).getUrlParam('realtime')) {
-        $('#site_nav_local_views .current a').append('<button id="realtime_timeline" title="Pop this tab">&#8599;</button>');
-
-        $('#realtime_timeline').css({
-            'margin':'2px 0 0 11px',
-            'background':'transparent url('+$('address .url')[0].href+'/plugins/Realtime/icon_external.gif) no-repeat 45% 45%',
-            'text-indent':'-9999px',
-            'width':'16px',
-            'height':'16px',
-            'padding':'0',
-            'display':'block',
-            'float':'right',
-            'border':'none',
-            'cursor':'pointer'
-        });
-
-        $('#realtime_timeline').click(function() {
-            window.open($(this).parent('a').attr('href')+'?realtime=1',
-                        $('body').attr('id'),
-                        'toolbar=no,resizable=yes,scrollbars=yes,status=yes');
-
-            return false;
-        });
-    }
-    else {
-        window.resizeTo(575, 640);
-        var address = $('address');
-        var content = $('#content');
-        $('body').html(address);
-        $('address').hide();
-        $('body').append(content);
-        $('#content').css({'width':'92%'});
-    }
-
-
-    // add a notice encoded as JSON into the current timeline
-    //
-    // TODO: i18n
-
-    RealtimeUpdate = {
-        _userid: 0,
-        _replyurl: '',
-        _favorurl: '',
-        _deleteurl: '',
-
-        init: function(userid, replyurl, favorurl, deleteurl)
-        {
-            RealtimeUpdate._userid = userid;
-            RealtimeUpdate._replyurl = replyurl;
-            RealtimeUpdate._favorurl = favorurl;
-            RealtimeUpdate._deleteurl = deleteurl;
-        },
-
-        receive: function(data)
-        {
-            id = data.id;
-
-            // Don't add it if it already exists
-
-            if ($("#notice-"+id).length > 0) {
-                return;
-            }
-
-            var noticeItem = RealtimeUpdate.makeNoticeItem(data);
-            $("#notices_primary .notices").prepend(noticeItem, true);
-            $("#notices_primary .notice:first").css({display:"none"});
-            $("#notices_primary .notice:first").fadeIn(1000);
-            NoticeReply();
-        },
-
-        makeNoticeItem: function(data)
-        {
-            user = data['user'];
-            html = data['html'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
-            source = data['source'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
-
-            ni = "<li class=\"hentry notice\" id=\"notice-"+data['id']+"\">"+
-                "<div class=\"entry-title\">"+
-                "<span class=\"vcard author\">"+
-                "<a href=\""+user['profile_url']+"\" class=\"url\">"+
-                "<img src=\""+user['profile_image_url']+"\" class=\"avatar photo\" width=\"48\" height=\"48\" alt=\""+user['screen_name']+"\"/>"+
-                "<span class=\"nickname fn\">"+user['screen_name']+"</span>"+
-                "</a>"+
-                "</span>"+
-                "<p class=\"entry-content\">"+html+"</p>"+
-                "</div>"+
-                "<div class=\"entry-content\">"+
-                "<a class=\"timestamp\" rel=\"bookmark\" href=\""+data['url']+"\" >"+
-                "<abbr class=\"published\" title=\""+data['created_at']+"\">a few seconds ago</abbr>"+
-                "</a> "+
-                "<span class=\"source\">"+
-                "from "+
+// add a notice encoded as JSON into the current timeline
+//
+// TODO: i18n
+
+RealtimeUpdate = {
+     _userid: 0,
+     _replyurl: '',
+     _favorurl: '',
+     _deleteurl: '',
+
+     init: function(userid, replyurl, favorurl, deleteurl)
+     {
+        RealtimeUpdate._userid = userid;
+        RealtimeUpdate._replyurl = replyurl;
+        RealtimeUpdate._favorurl = favorurl;
+        RealtimeUpdate._deleteurl = deleteurl;
+     },
+
+     receive: function(data)
+     {
+          id = data.id;
+
+          // Don't add it if it already exists
+          //
+          if ($("#notice-"+id).length > 0) {
+               return;
+          }
+
+          var noticeItem = RealtimeUpdate.makeNoticeItem(data);
+          $("#notices_primary .notices").prepend(noticeItem, true);
+          $("#notices_primary .notice:first").css({display:"none"});
+          $("#notices_primary .notice:first").fadeIn(1000);
+          NoticeReply();
+     },
+
+     makeNoticeItem: function(data)
+     {
+          user = data['user'];
+          html = data['html'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
+          source = data['source'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"');
+
+          ni = "<li class=\"hentry notice\" id=\"notice-"+data['id']+"\">"+
+               "<div class=\"entry-title\">"+
+               "<span class=\"vcard author\">"+
+               "<a href=\""+user['profile_url']+"\" class=\"url\">"+
+               "<img src=\""+user['profile_image_url']+"\" class=\"avatar photo\" width=\"48\" height=\"48\" alt=\""+user['screen_name']+"\"/>"+
+               "<span class=\"nickname fn\">"+user['screen_name']+"</span>"+
+               "</a>"+
+               "</span>"+
+               "<p class=\"entry-content\">"+html+"</p>"+
+               "</div>"+
+               "<div class=\"entry-content\">"+
+               "<a class=\"timestamp\" rel=\"bookmark\" href=\""+data['url']+"\" >"+
+               "<abbr class=\"published\" title=\""+data['created_at']+"\">a few seconds ago</abbr>"+
+               "</a> "+
+               "<span class=\"source\">"+
+               "from "+
                 "<span class=\"device\">"+source+"</span>"+ // may have a link
-                "</span>";
-            if (data['in_reply_to_status_id']) {
-                ni = ni+" <a class=\"response\" href=\""+data['in_reply_to_status_url']+"\">in context</a>";
-            }
+               "</span>";
+          if (data['in_reply_to_status_id']) {
+               ni = ni+" <a class=\"response\" href=\""+data['in_reply_to_status_url']+"\">in context</a>";
+          }
 
-            ni = ni+"</div>"+
+          ni = ni+"</div>"+
             "<div class=\"notice-options\">";
 
-            if (RealtimeUpdate._userid != 0) {
-                var input = $("form#form_notice fieldset input#token");
-                var session_key = input.val();
-                ni = ni+RealtimeUpdate.makeFavoriteForm(data['id'], session_key);
-                ni = ni+RealtimeUpdate.makeReplyLink(data['id'], data['user']['screen_name']);
-                if (RealtimeUpdate._userid == data['user']['id']) {
+          if (RealtimeUpdate._userid != 0) {
+               var input = $("form#form_notice fieldset input#token");
+               var session_key = input.val();
+               ni = ni+RealtimeUpdate.makeFavoriteForm(data['id'], session_key);
+               ni = ni+RealtimeUpdate.makeReplyLink(data['id'], data['user']['screen_name']);
+               if (RealtimeUpdate._userid == data['user']['id']) {
                     ni = ni+RealtimeUpdate.makeDeleteLink(data['id']);
-                }
-             }
+               }
+          }
 
-            ni = ni+"</div>"+
-            "</li>";
-            return ni;
-        },
+          ni = ni+"</div>"+
+               "</li>";
+          return ni;
+     },
 
-        makeFavoriteForm: function(id, session_key)
-        {
-            var ff;
+     makeFavoriteForm: function(id, session_key)
+     {
+          var ff;
 
-            ff = "<form id=\"favor-"+id+"\" class=\"form_favor\" method=\"post\" action=\""+RealtimeUpdate._favorurl+"\">"+
+          ff = "<form id=\"favor-"+id+"\" class=\"form_favor\" method=\"post\" action=\""+RealtimeUpdate._favorurl+"\">"+
                 "<fieldset>"+
-                "<legend>Favor this notice</legend>"+
-                "<input name=\"token-"+id+"\" type=\"hidden\" id=\"token-"+id+"\" value=\""+session_key+"\"/>"+
-                "<input name=\"notice\" type=\"hidden\" id=\"notice-n"+id+"\" value=\""+id+"\"/>"+
-                "<input type=\"submit\" id=\"favor-submit-"+id+"\" name=\"favor-submit-"+id+"\" class=\"submit\" value=\"Favor\" title=\"Favor this notice\"/>"+
+               "<legend>Favor this notice</legend>"+
+               "<input name=\"token-"+id+"\" type=\"hidden\" id=\"token-"+id+"\" value=\""+session_key+"\"/>"+
+               "<input name=\"notice\" type=\"hidden\" id=\"notice-n"+id+"\" value=\""+id+"\"/>"+
+               "<input type=\"submit\" id=\"favor-submit-"+id+"\" name=\"favor-submit-"+id+"\" class=\"submit\" value=\"Favor\" title=\"Favor this notice\"/>"+
                 "</fieldset>"+
-                "</form>";
-            return ff;
+               "</form>";
+          return ff;
+     },
+
+     makeReplyLink: function(id, nickname)
+     {
+          var rl;
+          rl = "<a class=\"notice_reply\" href=\""+RealtimeUpdate._replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span></a>";
+          return rl;
         },
 
-        makeReplyLink: function(id, nickname)
-        {
-            var rl;
-            rl = "<a class=\"notice_reply\" href=\""+RealtimeUpdate._replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span></a>";
-            return rl;
-        },
-
-        makeDeleteLink: function(id)
-        {
-            var dl, delurl;
-            delurl = RealtimeUpdate._deleteurl.replace("0000000000", id);
-
-            dl = "<a class=\"notice_delete\" href=\""+delurl+"\" title=\"Delete this notice\">Delete</a>";
+     makeDeleteLink: function(id)
+     {
+          var dl, delurl;
+          delurl = RealtimeUpdate._deleteurl.replace("0000000000", id);
 
-            return dl;
-        }
-    }
+          dl = "<a class=\"notice_delete\" href=\""+delurl+"\" title=\"Delete this notice\">Delete</a>";
 
-});
+          return dl;
+     }
+}