summaryrefslogtreecommitdiff
path: root/plugins/Comet
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Comet')
-rw-r--r--plugins/Comet/CometPlugin.php33
-rw-r--r--plugins/Comet/bayeux.class.inc.php9
-rw-r--r--plugins/Comet/updatetimeline.js93
3 files changed, 122 insertions, 13 deletions
diff --git a/plugins/Comet/CometPlugin.php b/plugins/Comet/CometPlugin.php
index 2e0bb40a4..45251c66f 100644
--- a/plugins/Comet/CometPlugin.php
+++ b/plugins/Comet/CometPlugin.php
@@ -45,9 +45,11 @@ class CometPlugin extends Plugin
{
var $server = null;
- function __construct($server=null)
+ function __construct($server=null, $username=null, $password=null)
{
- $this->server = $server;
+ $this->server = $server;
+ $this->username = $username;
+ $this->password = $password;
parent::__construct();
}
@@ -82,8 +84,22 @@ class CometPlugin extends Plugin
' ');
}
+ $user = common_current_user();
+
+ if (!empty($user->id)) {
+ $user_id = $user->id;
+ } else {
+ $user_id = 0;
+ }
+
+ $replyurl = common_local_url('newnotice');
+ $favorurl = common_local_url('favor');
+ // FIXME: need to find a better way to pass this pattern in
+ $deleteurl = common_local_url('deletenotice',
+ array('notice' => '0000000000'));
+
$action->elementStart('script', array('type' => 'text/javascript'));
- $action->raw("$(document).ready(function() { updater.init(\"$this->server\", \"$timeline\");});");
+ $action->raw("$(document).ready(function() { updater.init(\"$this->server\", \"$timeline\", $user_id, \"$replyurl\", \"$favorurl\", \"$deleteurl\"); });");
$action->elementEnd('script');
return true;
@@ -117,7 +133,7 @@ class CometPlugin extends Plugin
$json = $this->noticeAsJson($notice);
// Bayeux? Comet? Huh? These terms confuse me
- $bay = new Bayeux($this->server);
+ $bay = new Bayeux($this->server, $this->user, $this->password);
foreach ($timelines as $timeline) {
$this->log(LOG_INFO, "Posting notice $notice->id to '$timeline'.");
@@ -144,6 +160,15 @@ class CometPlugin extends Plugin
$arr = $act->twitter_status_array($notice, true);
$arr['url'] = $notice->bestUrl();
$arr['html'] = htmlspecialchars($notice->rendered);
+ $arr['source'] = htmlspecialchars($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;
diff --git a/plugins/Comet/bayeux.class.inc.php b/plugins/Comet/bayeux.class.inc.php
index 785d3e393..39ad8a8fc 100644
--- a/plugins/Comet/bayeux.class.inc.php
+++ b/plugins/Comet/bayeux.class.inc.php
@@ -26,9 +26,12 @@ class Bayeux
private $oCurl = '';
private $nNextId = 0;
+ private $sUser = '';
+ private $sPassword = '';
+
public $sUrl = '';
- function __construct($sUrl)
+ function __construct($sUrl, $sUser='', $sPassword='')
{
$this->sUrl = $sUrl;
@@ -43,6 +46,10 @@ class Bayeux
curl_setopt($this->oCurl, CURLOPT_POST, 1);
curl_setopt($this->oCurl, CURLOPT_RETURNTRANSFER,1);
+ if (!is_null($sUser) && mb_strlen($sUser) > 0) {
+ curl_setopt($this->oCurl, CURLOPT_USERPWD,"$sUser:$sPassword");
+ }
+
$this->handShake();
}
diff --git a/plugins/Comet/updatetimeline.js b/plugins/Comet/updatetimeline.js
index de750baba..170949e9b 100644
--- a/plugins/Comet/updatetimeline.js
+++ b/plugins/Comet/updatetimeline.js
@@ -3,14 +3,26 @@
var updater = function()
{
+ var _server;
+ var _timeline;
+ var _userid;
+ var _replyurl;
+ var _favorurl;
+ var _deleteurl;
var _cometd;
return {
- init: function(server, timeline)
+ init: function(server, timeline, userid, replyurl, favorurl, deleteurl)
{
_cometd = $.cometd; // Uses the default Comet object
_cometd.setLogLevel('debug');
_cometd.init(server);
+ _server = server;
+ _timeline = timeline;
+ _userid = userid;
+ _favorurl = favorurl;
+ _replyurl = replyurl;
+ _deleteurl = deleteurl;
_cometd.subscribe(timeline, receive);
$(window).unload(leave);
}
@@ -34,7 +46,7 @@ var updater = function()
var noticeItem = makeNoticeItem(message.data);
$("#notices_primary .notices").prepend(noticeItem, true);
$("#notices_primary .notice:first").css({display:"none"});
- $("#notices_primary .notice:first").fadeIn(2500);
+ $("#notices_primary .notice:first").fadeIn(1000);
NoticeHover();
NoticeReply();
}
@@ -42,7 +54,8 @@ var updater = function()
function makeNoticeItem(data)
{
user = data['user'];
- html = data['html'].replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ 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\">"+
@@ -65,13 +78,77 @@ var updater = function()
"</dl>"+
"<dl class=\"device\">"+
"<dt>From</dt> "+
- "<dd>"+data['source']+"</dd>"+
- "</dl>"+
- "</div>"+
- "<div class=\"notice-options\">"+
- "</div>"+
+ "<dd>"+source+"</dd>"+ // may have a link, I think
+ "</dl>";
+
+ if (data['in_reply_to_status_id']) {
+ ni = ni+" <dl class=\"response\">"+
+ "<dt>To</dt>"+
+ "<dd>"+
+ "<a href=\""+data['in_reply_to_status_url']+"\" rel=\"in-reply-to\">in reply to</a>"+
+ "</dd>"+
+ "</dl>";
+ }
+
+ ni = ni+"</div>"+
+ "<div class=\"notice-options\">";
+
+ if (_userid != 0) {
+ var input = $("form#form_notice fieldset input#token");
+ var session_key = input.val();
+ ni = ni+makeFavoriteForm(data['id'], session_key);
+ ni = ni+makeReplyLink(data['id'], data['user']['screen_name']);
+ if (_userid == data['user']['id']) {
+ ni = ni+makeDeleteLink(data['id']);
+ }
+ }
+
+ ni = ni+"</div>"+
"</li>";
return ni;
}
+
+ function makeFavoriteForm(id, session_key)
+ {
+ var ff;
+
+ ff = "<form id=\"favor-"+id+"\" class=\"form_favor\" method=\"post\" action=\""+_favorurl+"\">"+
+ "<fieldset>"+
+ "<legend>Favor this notice</legend>"+ // XXX: i18n
+ "<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;
+ }
+
+ function makeReplyLink(id, nickname)
+ {
+ var rl;
+ rl = "<dl class=\"notice_reply\">"+
+ "<dt>Reply to this notice</dt>"+
+ "<dd>"+
+ "<a href=\""+_replyurl+"?replyto="+nickname+"\" title=\"Reply to this notice\">Reply <span class=\"notice_id\">"+id+"</span>"+
+ "</a>"+
+ "</dd>"+
+ "</dl>";
+ return rl;
+ }
+
+ function makeDeleteLink(id)
+ {
+ var dl, delurl;
+ delurl = _deleteurl.replace("0000000000", id);
+
+ dl = "<dl class=\"notice_delete\">"+
+ "<dt>Delete this notice</dt>"+
+ "<dd>"+
+ "<a href=\""+delurl+"\" title=\"Delete this notice\">Delete</a>"+
+ "</dd>"+
+ "</dl>";
+
+ return dl;
+ }
}();