diff options
Diffstat (limited to 'plugins/Realtime')
-rw-r--r-- | plugins/Realtime/RealtimePlugin.php | 13 | ||||
-rw-r--r-- | plugins/Realtime/icon_pause.gif | bin | 0 -> 75 bytes | |||
-rw-r--r-- | plugins/Realtime/icon_play.gif | bin | 0 -> 75 bytes | |||
-rw-r--r-- | plugins/Realtime/realtimeupdate.css | 49 | ||||
-rw-r--r-- | plugins/Realtime/realtimeupdate.js | 186 |
5 files changed, 188 insertions, 60 deletions
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index a21c33b10..198cb5ad7 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -101,8 +101,8 @@ class RealtimePlugin extends Plugin $realtimeUI = ' RealtimeUpdate.initPopupWindow();'; } else { - $iconurl = common_path('plugins/Realtime/icon_external.gif'); - $realtimeUI = ' RealtimeUpdate.addPopup("'.$url.'", "'.$timeline.'", "'. $iconurl .'");'; + $pluginPath = common_path('plugins/Realtime/'); + $realtimeUI = ' RealtimeUpdate.initActions("'.$url.'", "'.$timeline.'", "'. $pluginPath .'");'; } $action->elementStart('script', array('type' => 'text/javascript')); @@ -118,7 +118,14 @@ class RealtimePlugin extends Plugin return true; } - function onEndNoticeSave($notice) + function onEndShowStatusNetStyles($action) + { + $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'), + null, 'screen, projection, tv'); + return true; + } + + function onHandleQueuedNotice($notice) { $paths = array(); diff --git a/plugins/Realtime/icon_pause.gif b/plugins/Realtime/icon_pause.gif Binary files differnew file mode 100644 index 000000000..ced0b6440 --- /dev/null +++ b/plugins/Realtime/icon_pause.gif diff --git a/plugins/Realtime/icon_play.gif b/plugins/Realtime/icon_play.gif Binary files differnew file mode 100644 index 000000000..794ec85b6 --- /dev/null +++ b/plugins/Realtime/icon_play.gif diff --git a/plugins/Realtime/realtimeupdate.css b/plugins/Realtime/realtimeupdate.css new file mode 100644 index 000000000..0ab5dd32b --- /dev/null +++ b/plugins/Realtime/realtimeupdate.css @@ -0,0 +1,49 @@ +#notices_primary { +position:relative; +} + +#realtime_actions { +position: absolute; +top: -20px; +right: 0; +margin: 0 0 11px 0; +} + +#realtime_actions li { +margin-left: 18px; +list-style-type: none; +float: left; +} + +#realtime_actions button { +width: 16px; +height: 16px; +display: block; +border: none; +cursor: pointer; +text-indent: -9999px; +float: left; +} + +#realtime_play { +background: url(icon_play.gif) no-repeat 47% 47%; +margin-left: 4px; +} + +#realtime_pause { +background: url(icon_pause.gif) no-repeat 47% 47%; +} + +#realtime_popup { +background: url(icon_external.gif) no-repeat 0 30%; +} + +#queued_counter { +float:left; +line-height:1.2; +} + +#showstream #notices_primary { +margin-top: 18px; +} + diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js index fa0fefed4..a2c4da113 100644 --- a/plugins/Realtime/realtimeupdate.js +++ b/plugins/Realtime/realtimeupdate.js @@ -34,9 +34,11 @@ RealtimeUpdate = { _favorurl: '', _deleteurl: '', _updatecounter: 0, - _updatedelay: 500, _maxnotices: 50, - _windowhasfocus: false, + _windowhasfocus: true, + _documenttitle: '', + _paused:false, + _queuedNotices:[], init: function(userid, replyurl, favorurl, deleteurl) { @@ -45,23 +47,17 @@ RealtimeUpdate = { RealtimeUpdate._favorurl = favorurl; RealtimeUpdate._deleteurl = deleteurl; - DT = document.title; + RealtimeUpdate._documenttitle = document.title; $(window).bind('focus', function(){ RealtimeUpdate._windowhasfocus = true; }); $(window).bind('blur', function() { - $('#notices_primary .notice').css({ - 'border-top-color':$('#notices_primary .notice:last').css('border-top-color'), - 'border-top-style':'dotted' - }); + $('#notices_primary .notice').removeClass('mark-top'); - $('#notices_primary .notice:first').css({ - 'border-top-color':'#AAAAAA', - 'border-top-style':'solid' - }); + $('#notices_primary .notice:first').addClass('mark-top'); RealtimeUpdate._updatecounter = 0; - document.title = DT; + document.title = RealtimeUpdate._documenttitle; RealtimeUpdate._windowhasfocus = false; return false; @@ -70,34 +66,49 @@ RealtimeUpdate = { receive: function(data) { - setTimeout(function() { - id = data.id; + if (RealtimeUpdate._paused === false) { + RealtimeUpdate.purgeLastNoticeItem(); - // Don't add it if it already exists - if ($("#notice-"+id).length > 0) { - return; - } + RealtimeUpdate.insertNoticeItem(data); + } + else { + RealtimeUpdate._queuedNotices.push(data); + + RealtimeUpdate.updateQueuedCounter(); + } + + RealtimeUpdate.updateWindowCounter(); + }, + + insertNoticeItem: function(data) { + // Don't add it if it already exists + if ($("#notice-"+data.id).length > 0) { + return; + } - var noticeItem = RealtimeUpdate.makeNoticeItem(data); - $("#notices_primary .notices").prepend(noticeItem); - $("#notices_primary .notice:first").css({display:"none"}); - $("#notices_primary .notice:first").fadeIn(1000); + var noticeItem = RealtimeUpdate.makeNoticeItem(data); + $("#notices_primary .notices").prepend(noticeItem); + $("#notices_primary .notice:first").css({display:"none"}); + $("#notices_primary .notice:first").fadeIn(1000); - if ($('#notices_primary .notice').length > RealtimeUpdate._maxnotices) { - $("#notices_primary .notice:last .form_disfavor").unbind('submit'); - $("#notices_primary .notice:last .form_favor").unbind('submit'); - $("#notices_primary .notice:last .notice_reply").unbind('click'); - $("#notices_primary .notice:last").remove(); - } + SN.U.NoticeReply(); + SN.U.NoticeFavor(); + }, - NoticeFavors(); - NoticeReply(); + purgeLastNoticeItem: function() { + if ($('#notices_primary .notice').length > RealtimeUpdate._maxnotices) { + $("#notices_primary .notice:last .form_disfavor").unbind('submit'); + $("#notices_primary .notice:last .form_favor").unbind('submit'); + $("#notices_primary .notice:last .notice_reply").unbind('click'); + $("#notices_primary .notice:last").remove(); + } + }, - if (RealtimeUpdate._windowhasfocus === false) { - RealtimeUpdate._updatecounter += 1; - document.title = '('+RealtimeUpdate._updatecounter+') ' + DT; - } - }, RealtimeUpdate._updatedelay); + updateWindowCounter: function() { + if (RealtimeUpdate._windowhasfocus === false) { + RealtimeUpdate._updatecounter += 1; + document.title = '('+RealtimeUpdate._updatecounter+') ' + RealtimeUpdate._documenttitle; + } }, makeNoticeItem: function(data) @@ -178,30 +189,86 @@ RealtimeUpdate = { return dl; }, - addPopup: function(url, timeline, iconurl) + initActions: function(url, timeline, path) { - $('#notices_primary').css({'position':'relative'}); - $('#notices_primary').prepend('<button id="realtime_timeline" title="Pop up in a window">Pop up</button>'); - - $('#realtime_timeline').css({ - 'margin':'0 0 11px 0', - 'background':'transparent url('+ iconurl + ') no-repeat 0% 30%', - 'padding':'0 0 0 20px', - 'display':'block', - 'position':'absolute', - 'top':'-20px', - 'right':'0', - 'border':'none', - 'cursor':'pointer', - 'color':$("a").css("color"), - 'font-weight':'bold', - 'font-size':'1em' - }); + var NP = $('#notices_primary'); + NP.prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>'); + + RealtimeUpdate._pluginPath = path; + + RealtimeUpdate.initPlayPause(); + RealtimeUpdate.initAddPopup(url, timeline, RealtimeUpdate._pluginPath); + }, + + initPlayPause: function() + { + RealtimeUpdate.showPause(); + }, + + showPause: function() + { + RT_PP = $('#realtime_playpause'); + RT_PP.empty(); + RT_PP.append('<button id="realtime_pause" class="pause" title="Pause">Pause</button>'); + + RT_P = $('#realtime_pause'); + RT_P.bind('click', function() { + RealtimeUpdate._paused = true; + + RealtimeUpdate.showPlay(); + return false; + }); + }, + + showPlay: function() + { + RT_PP = $('#realtime_playpause'); + RT_PP.empty(); + RT_PP.append('<span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button>'); + + RT_P = $('#realtime_play'); + RT_P.bind('click', function() { + RealtimeUpdate._paused = false; + + RealtimeUpdate.showPause(); + + RealtimeUpdate.showQueuedNotices(); + + return false; + }); + }, + + showQueuedNotices: function() + { + $.each(RealtimeUpdate._queuedNotices, function(i, n) { + RealtimeUpdate.insertNoticeItem(n); + }); + + RealtimeUpdate._queuedNotices = []; - $('#realtime_timeline').click(function() { + RealtimeUpdate.removeQueuedCounter(); + }, + + updateQueuedCounter: function() + { + $('#realtime_playpause #queued_counter').html('('+RealtimeUpdate._queuedNotices.length+')'); + }, + + removeQueuedCounter: function() + { + $('#realtime_playpause #queued_counter').empty(); + }, + + initAddPopup: function(url, timeline, path) + { + var NP = $('#realtime_timeline'); + NP.append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>'); + + var PP = $('#realtime_popup'); + PP.bind('click', function() { window.open(url, - timeline, - 'toolbar=no,resizable=yes,scrollbars=yes,status=yes'); + '', + 'toolbar=no,resizable=yes,scrollbars=yes,status=yes,width=500,height=550'); return false; }); @@ -209,7 +276,6 @@ RealtimeUpdate = { initPopupWindow: function() { - window.resizeTo(500, 550); $('address').hide(); $('#content').css({'width':'93.5%'}); @@ -229,6 +295,12 @@ RealtimeUpdate = { 'left':'auto', 'right':'0' }); + + $('.notices .entry-title a, .notices .entry-content a').bind('click', function() { + window.open(this.href, ''); + + return false; + }); } } |