summaryrefslogtreecommitdiff
path: root/plugins/Realtime/RealtimePlugin.php
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2009-09-23 17:07:20 -0400
committerEvan Prodromou <evan@status.net>2009-09-23 17:07:20 -0400
commit1fe11eabb675fa876bdbcd5884231ffd6fa278ff (patch)
tree8cc28a129bad66ddea78593999d51985a439fe08 /plugins/Realtime/RealtimePlugin.php
parent6cb2f89983f89fb7f4559fe607ca2af2c6729d27 (diff)
Do realtime popup with PHP instead of Javascript
Move the realtime detection code to PHP extension rather than JavaScript.
Diffstat (limited to 'plugins/Realtime/RealtimePlugin.php')
-rw-r--r--plugins/Realtime/RealtimePlugin.php110
1 files changed, 85 insertions, 25 deletions
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index 454882261..22851a6c1 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -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,30 +62,20 @@ 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);
- switch ($action->trimmed('action')) {
- case 'public':
- $path = array('public');
- break;
- case 'tag':
- $tag = $action->trimmed('tag');
- if (!empty($tag)) {
- $path = array('tag', $tag);
- } else {
- return true;
- }
- break;
- default:
+ // If there's not a timeline on this page,
+ // just return true
+
+ if (empty($timeline)) {
return true;
}
- $timeline = $this->_pathToChannel($path);
-
$scripts = $this->_getScripts();
foreach ($scripts as $script) {
@@ -95,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;
@@ -146,6 +139,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
@@ -230,4 +264,30 @@ class RealtimePlugin extends Plugin
{
return '';
}
+
+ function _getTimeline($action)
+ {
+ $path = null;
+ $timeline = null;
+
+ switch ($action->trimmed('action')) {
+ case 'public':
+ $path = array('public');
+ break;
+ case 'tag':
+ $tag = $action->trimmed('tag');
+ if (!empty($tag)) {
+ $path = array('tag', $tag);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!is_null($path)) {
+ $timeline = $this->_pathToChannel($path);
+ }
+
+ return $timeline;
+ }
}