Initial UI to allow certain timelines to be viewed in a new window in
realtime
This commit is contained in:
		| @@ -97,6 +97,8 @@ class RealtimePlugin extends Plugin | ||||
|             $user_id = 0; | ||||
|         } | ||||
|  | ||||
|         $action->script('plugins/Realtime/jquery.getUrlParam.js'); | ||||
|  | ||||
|         $action->elementStart('script', array('type' => 'text/javascript')); | ||||
|         $action->raw(' | ||||
|         <!-- | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								plugins/Realtime/icon_external.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								plugins/Realtime/icon_external.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 90 B | 
							
								
								
									
										72
									
								
								plugins/Realtime/jquery.getUrlParam.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								plugins/Realtime/jquery.getUrlParam.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| /* Copyright (c) 2006-2007 Mathias Bank (http://www.mathias-bank.de) | ||||
|  * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)  | ||||
|  * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. | ||||
|  *  | ||||
|  * Version 2.1 | ||||
|  *  | ||||
|  * Thanks to  | ||||
|  * Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing. | ||||
|  * Tom Leonard for some improvements | ||||
|  *  | ||||
|  */ | ||||
| jQuery.fn.extend({ | ||||
| /** | ||||
| * Returns get parameters. | ||||
| * | ||||
| * If the desired param does not exist, null will be returned | ||||
| * | ||||
| * To get the document params: | ||||
| * @example value = $(document).getUrlParam("paramName"); | ||||
| *  | ||||
| * To get the params of a html-attribut (uses src attribute) | ||||
| * @example value = $('#imgLink').getUrlParam("paramName"); | ||||
| */  | ||||
|  getUrlParam: function(strParamName){ | ||||
| 	  strParamName = escape(unescape(strParamName)); | ||||
| 	   | ||||
| 	  var returnVal = new Array(); | ||||
| 	  var qString = null; | ||||
| 	   | ||||
| 	  if ($(this).attr("nodeName")=="#document") { | ||||
| 	  	//document-handler | ||||
| 		 | ||||
| 		if (window.location.search.search(strParamName) > -1 ){ | ||||
| 			 | ||||
| 			qString = window.location.search.substr(1,window.location.search.length).split("&"); | ||||
| 		} | ||||
| 			 | ||||
| 	  } else if ($(this).attr("src")!="undefined") { | ||||
| 	  	 | ||||
| 	  	var strHref = $(this).attr("src") | ||||
| 	  	if ( strHref.indexOf("?") > -1 ){ | ||||
| 	    	var strQueryString = strHref.substr(strHref.indexOf("?")+1); | ||||
| 	  		qString = strQueryString.split("&"); | ||||
| 	  	} | ||||
| 	  } else if ($(this).attr("href")!="undefined") { | ||||
| 	  	 | ||||
| 	  	var strHref = $(this).attr("href") | ||||
| 	  	if ( strHref.indexOf("?") > -1 ){ | ||||
| 	    	var strQueryString = strHref.substr(strHref.indexOf("?")+1); | ||||
| 	  		qString = strQueryString.split("&"); | ||||
| 	  	} | ||||
| 	  } else { | ||||
| 	  	return null; | ||||
| 	  } | ||||
| 	  	 | ||||
| 	   | ||||
| 	  if (qString==null) return null; | ||||
| 	   | ||||
| 	   | ||||
| 	  for (var i=0;i<qString.length; i++){ | ||||
| 			if (escape(unescape(qString[i].split("=")[0])) == strParamName){ | ||||
| 				returnVal.push(qString[i].split("=")[1]); | ||||
| 			} | ||||
| 			 | ||||
| 	  } | ||||
| 	   | ||||
| 	   | ||||
| 	  if (returnVal.length==0) return null; | ||||
| 	  else if (returnVal.length==1) return returnVal[0]; | ||||
| 	  else return returnVal; | ||||
| 	} | ||||
| }); | ||||
| @@ -1,113 +1,152 @@ | ||||
| // add a notice encoded as JSON into the current timeline | ||||
| // | ||||
| // TODO: i18n | ||||
| $(document).ready(function() { | ||||
|     if (!$(document).getUrlParam('realtime')) { | ||||
|         $('#site_nav_local_views .current a').append('<button id="realtime_timeline" title="Pop this tab">↗</button>'); | ||||
|  | ||||
| RealtimeUpdate = { | ||||
|      _userid: 0, | ||||
|      _replyurl: '', | ||||
|      _favorurl: '', | ||||
|      _deleteurl: '', | ||||
|         $('#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' | ||||
|         }); | ||||
|  | ||||
|      init: function(userid, replyurl, favorurl, deleteurl) | ||||
|      { | ||||
|           RealtimeUpdate._userid = userid; | ||||
|           RealtimeUpdate._replyurl = replyurl; | ||||
|           RealtimeUpdate._favorurl = favorurl; | ||||
|           RealtimeUpdate._deleteurl = deleteurl; | ||||
|      }, | ||||
|         $('#realtime_timeline').click(function() { | ||||
|             window.open($(this).parent('a').attr('href')+'?realtime=1', | ||||
|                         $(this).parent('a').attr('title'), | ||||
|                         'toolbar=no,resizable=yes,scrollbars=yes,status=yes'); | ||||
|  | ||||
|      receive: function(data) | ||||
|      { | ||||
|           id = data.id; | ||||
|             return false; | ||||
|         }); | ||||
|     } | ||||
|     else { | ||||
|         window.resizeTo(575, 640); | ||||
|         address = $('address'); | ||||
|         content = $('#content'); | ||||
|         $('body').html(address); | ||||
|         $('address').hide(); | ||||
|         $('body').append(content); | ||||
|         $('#content').css({'width':'92%'}); | ||||
|     } | ||||
|  | ||||
|           // Don't add it if it already exists | ||||
|  | ||||
|           if ($("#notice-"+id).length > 0) { | ||||
|                return; | ||||
|           } | ||||
|     // add a notice encoded as JSON into the current timeline | ||||
|     // | ||||
|     // TODO: i18n | ||||
|  | ||||
|           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(); | ||||
|      }, | ||||
|     RealtimeUpdate = { | ||||
|         _userid: 0, | ||||
|         _replyurl: '', | ||||
|         _favorurl: '', | ||||
|         _deleteurl: '', | ||||
|  | ||||
|      makeNoticeItem: function(data) | ||||
|      { | ||||
|           user = data['user']; | ||||
|           html = data['html'].replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); | ||||
|           source = data['source'].replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); | ||||
|         init: function(userid, replyurl, favorurl, deleteurl) | ||||
|         { | ||||
|             RealtimeUpdate._userid = userid; | ||||
|             RealtimeUpdate._replyurl = replyurl; | ||||
|             RealtimeUpdate._favorurl = favorurl; | ||||
|             RealtimeUpdate._deleteurl = deleteurl; | ||||
|         }, | ||||
|  | ||||
|           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>"; | ||||
|           } | ||||
|         receive: function(data) | ||||
|         { | ||||
|             id = data.id; | ||||
|  | ||||
|           ni = ni+"</div>"+ | ||||
|                "<div class=\"notice-options\">"; | ||||
|             // Don't add it if it already exists | ||||
|  | ||||
|           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 ($("#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(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); | ||||
|             source = data['source'].replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/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>"; | ||||
|             } | ||||
|  | ||||
|             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']) { | ||||
|                     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+"\">"+ | ||||
|                "<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\"/>"+ | ||||
|                "</fieldset>"+ | ||||
|                "</form>"; | ||||
|           return ff; | ||||
|      }, | ||||
|             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\"/>"+ | ||||
|                 "</fieldset>"+ | ||||
|                 "</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); | ||||
|         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>"; | ||||
|             dl = "<a class=\"notice_delete\" href=\""+delurl+"\" title=\"Delete this notice\">Delete</a>"; | ||||
|  | ||||
|             return dl; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| }); | ||||
|  | ||||
|           return dl; | ||||
|      }, | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user