| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | //TL取得
 | 
					
						
							| 
									
										
										
										
											2019-03-06 17:08:48 +09:00
										 |  |  | moreloading=false; | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | function tl(type, data, acct_id, tlid, delc, voice, mode) { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	scrollevent(); | 
					
						
							|  |  |  | 	localStorage.removeItem("morelock"); | 
					
						
							|  |  |  | 	localStorage.removeItem("pool"); | 
					
						
							| 
									
										
										
										
											2018-01-31 01:43:01 +09:00
										 |  |  | 	var domain = localStorage.getItem("domain_" + acct_id); | 
					
						
							| 
									
										
										
										
											2018-04-01 06:00:27 +09:00
										 |  |  | 	//タグとかの場合はカラム追加して描画
 | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	if (tlid == "add") { | 
					
						
							|  |  |  | 		console.log("add"); | 
					
						
							|  |  |  | 		var newtab = $(".box").length; | 
					
						
							|  |  |  | 		var add = { | 
					
						
							|  |  |  | 			domain: acct_id, | 
					
						
							| 
									
										
										
										
											2018-04-01 06:00:27 +09:00
										 |  |  | 			type: type, | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			data: data | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		var multi = localStorage.getItem("column"); | 
					
						
							|  |  |  | 		var obj = JSON.parse(multi); | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 		localStorage.setItem("card_" + obj.length,"true"); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		obj.push(add); | 
					
						
							|  |  |  | 		console.log(obj); | 
					
						
							|  |  |  | 		var json = JSON.stringify(obj); | 
					
						
							|  |  |  | 		localStorage.setItem("column", json); | 
					
						
							|  |  |  | 		parseColumn(); | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-14 03:31:31 +09:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	if (!type) { | 
					
						
							|  |  |  | 		var type = localStorage.getItem("now"); | 
					
						
							|  |  |  | 		if (!type) { | 
					
						
							|  |  |  | 			//デフォルト
 | 
					
						
							|  |  |  | 			var type = "local"; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 	if (type == "mix" && localStorage.getItem("mode_" + domain)!="misskey") { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		//Integratedなら飛ばす
 | 
					
						
							| 
									
										
										
										
											2018-01-31 01:43:01 +09:00
										 |  |  | 			$("#notice_" + tlid).text("Integrated TL(" + localStorage.getItem( | 
					
						
							|  |  |  | 			"user_" + acct_id) + "@" + domain + ")"); | 
					
						
							| 
									
										
										
										
											2018-02-25 00:59:53 +09:00
										 |  |  | 			$("#notice_icon_" + tlid).text("merge_type"); | 
					
						
							| 
									
										
										
										
											2018-07-22 22:03:46 +09:00
										 |  |  | 		mixtl(acct_id, tlid, "integrated",delc,voice); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 	}else if (type == "plus") { | 
					
						
							|  |  |  | 		//Local+なら飛ばす
 | 
					
						
							|  |  |  | 			$("#notice_" + tlid).text("Local+ TL(" + localStorage.getItem( | 
					
						
							|  |  |  | 			"user_" + acct_id) + "@" + domain + ")"); | 
					
						
							|  |  |  | 			$("#notice_icon_" + tlid).text("people_outline"); | 
					
						
							| 
									
										
										
										
											2018-07-22 22:03:46 +09:00
										 |  |  | 		mixtl(acct_id, tlid, "plus",delc,voice); | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	}else if (type == "notf") { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		//通知なら飛ばす
 | 
					
						
							| 
									
										
										
										
											2019-01-26 12:24:26 +09:00
										 |  |  | 		notf(acct_id, tlid, 'direct'); | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 		$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem( | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			"user_" + acct_id) + "@" + domain + ")"); | 
					
						
							| 
									
										
										
										
											2018-02-25 00:59:53 +09:00
										 |  |  | 			$("#notice_icon_" + tlid).text("notifications"); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2019-03-06 20:56:39 +09:00
										 |  |  | 	}/*else if (type == "dm") { | 
					
						
							| 
									
										
										
										
											2019-03-06 17:08:48 +09:00
										 |  |  | 		//DMなら飛ばす
 | 
					
						
							|  |  |  | 		dm(acct_id, tlid, "plus",delc,voice); | 
					
						
							|  |  |  | 		$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem( | 
					
						
							|  |  |  | 			"user_" + acct_id) + "@" + domain + ")"); | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 			$("#notice_icon_" + tlid).text("mail_outline"); | 
					
						
							| 
									
										
										
										
											2019-03-06 17:08:48 +09:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2019-03-06 20:56:39 +09:00
										 |  |  | 	}*/ | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	localStorage.setItem("now", type); | 
					
						
							|  |  |  | 	todo(cap(type) + " TL Loading..."); | 
					
						
							| 
									
										
										
										
											2018-07-07 02:51:48 +09:00
										 |  |  | 	var at = localStorage.getItem("acct_"+ acct_id + "_at"); | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 	if(type!="noauth"){ | 
					
						
							|  |  |  | 		var hdr={ | 
					
						
							|  |  |  | 			'content-type': 'application/json', | 
					
						
							|  |  |  | 			'Authorization': 'Bearer ' + at | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem( | 
					
						
							|  |  |  | 			"user_" + acct_id) + "@" + domain + ")"); | 
					
						
							|  |  |  | 	}else{ | 
					
						
							|  |  |  | 		var hdr={ | 
					
						
							|  |  |  | 			'content-type': 'application/json' | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 		domain=acct_id; | 
					
						
							|  |  |  | 		$("#notice_" + tlid).text("Glance TL(" + domain + ")"); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-02-25 00:59:53 +09:00
										 |  |  | 		$("#notice_icon_" + tlid).text(icon(type)); | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		if(localStorage.getItem("mode_" + domain)=="misskey"){ | 
					
						
							|  |  |  | 			var misskey=true; | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var url=misskeycom(type, data); | 
					
						
							|  |  |  | 			var start = "https://" + domain + "/api/notes/"+url; | 
					
						
							|  |  |  | 			var method="POST"; | 
					
						
							|  |  |  | 			var req={}; | 
					
						
							|  |  |  | 			if(type!="noauth"){ | 
					
						
							|  |  |  | 				req.i=at; | 
					
						
							| 
									
										
										
										
											2018-03-14 03:31:31 +09:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-02-28 02:02:23 +09:00
										 |  |  | 			 | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			if(type=="local-media"||type=="pub-media"){ | 
					
						
							|  |  |  | 				req.mediaOnly=true; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="tag"){ | 
					
						
							|  |  |  | 				req.tag=data; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="list"){ | 
					
						
							|  |  |  | 				req.listId=data; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			req.limit=20; | 
					
						
							|  |  |  | 			var i={ | 
					
						
							|  |  |  | 				method: method, | 
					
						
							|  |  |  | 				headers: hdr, | 
					
						
							|  |  |  | 				body: JSON.stringify(req), | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}else{ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 			var misskey=false; | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var url=com(type, data); | 
					
						
							|  |  |  | 			if(type=="tag"){ | 
					
						
							|  |  |  | 				var tag = localStorage.getItem("tag-range"); | 
					
						
							|  |  |  | 				if(tag=="local"){ | 
					
						
							|  |  |  | 					url=url+"local=true"; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 			if(type=="dm"){ | 
					
						
							|  |  |  | 				var start = "https://" + domain + "/api/v1/conversations"; | 
					
						
							|  |  |  | 			}else{ | 
					
						
							|  |  |  | 				var start = "https://" + domain + "/api/v1/timelines/" + url; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var method="GET"; | 
					
						
							|  |  |  | 			var i={ | 
					
						
							|  |  |  | 				method: method, | 
					
						
							|  |  |  | 				headers: hdr | 
					
						
							|  |  |  | 			}; | 
					
						
							| 
									
										
										
										
											2018-03-14 03:31:31 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	console.log(start); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 	fetch(start, i).then(function(response) { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		return response.json(); | 
					
						
							|  |  |  | 	}).catch(function(error) { | 
					
						
							|  |  |  | 		todo(error); | 
					
						
							|  |  |  | 		console.error(error); | 
					
						
							|  |  |  | 	}).then(function(json) { | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 		console.log(json) | 
					
						
							|  |  |  | 		$("#landing_" + tlid).hide(); | 
					
						
							| 
									
										
										
										
											2018-07-17 00:39:06 +09:00
										 |  |  | 		if(localStorage.getItem("filter_"+ acct_id)!="undefined"){ | 
					
						
							|  |  |  | 			var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var mute=[]; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		if(misskey){ | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var templete = misskeyParse(json, type, acct_id, tlid, "", mute); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 			var templete = parse(json, type, acct_id, tlid, "", mute, type); | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 			localStorage.setItem("lastobj_"+ tlid,json[0].id) | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		$("#timeline_" + tlid).html(templete); | 
					
						
							|  |  |  | 		additional(acct_id, tlid); | 
					
						
							|  |  |  | 		jQuery("time.timeago").timeago(); | 
					
						
							|  |  |  | 		todc(); | 
					
						
							| 
									
										
										
										
											2018-07-22 22:03:46 +09:00
										 |  |  | 		reload(type, '', acct_id, tlid, data, mute, delc,voice); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		$(window).scrollTop(0); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //Streaming接続
 | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	if (!type) { | 
					
						
							|  |  |  | 		var type = localStorage.getItem("now"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var domain = localStorage.getItem("domain_" + acct_id); | 
					
						
							| 
									
										
										
										
											2018-07-07 02:51:48 +09:00
										 |  |  | 	var at = localStorage.getItem("acct_"+ acct_id + "_at"); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	localStorage.setItem("now", type); | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 	if(localStorage.getItem("mode_" + domain)=="misskey"){ | 
					
						
							|  |  |  | 		var misskey=true; | 
					
						
							| 
									
										
										
										
											2019-04-08 00:14:06 +09:00
										 |  |  | 		console.log(type); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		if (type == "home") { | 
					
						
							|  |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 				"/?i=" + at; | 
					
						
							|  |  |  | 		} else if (type == "pub") { | 
					
						
							|  |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 				"/global-timeline?i=" + at; | 
					
						
							|  |  |  | 		} else if (type == "pub-media") { | 
					
						
							|  |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 			"/global-timeline?i=" + at; | 
					
						
							|  |  |  | 		} else if (type == "local") { | 
					
						
							|  |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 			"/local-timeline?i=" + at; | 
					
						
							|  |  |  | 		} else if (type == "local-media") { | 
					
						
							|  |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 			"/local-timeline?i=" + at; | 
					
						
							|  |  |  | 		} else if (type == "mix") { | 
					
						
							|  |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 			"/hybrid-timeline?i=" + at; | 
					
						
							|  |  |  | 		} else if (type == "tag") { | 
					
						
							| 
									
										
										
										
											2019-04-08 00:14:06 +09:00
										 |  |  | 			Materialize.toast(lang.lang_misskeyparse_tagnostr, 3000); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		} else if (type == "noauth") { | 
					
						
							|  |  |  | 			var start = "wss://" + acct_id + | 
					
						
							|  |  |  | 			"/local-timeline?i=" + at; | 
					
						
							|  |  |  | 		} else if (type=="list"){ | 
					
						
							| 
									
										
										
										
											2019-04-11 01:52:01 +09:00
										 |  |  | 			var start = "wss://" + domain + | 
					
						
							|  |  |  | 			"/user-list?i=" + at+"&listId="+data; | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}else{ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		var misskey=false; | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 		if(localStorage.getItem("streaming_" + acct_id)){ | 
					
						
							|  |  |  | 			var wss=localStorage.getItem("streaming_" + acct_id) | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var wss="wss://"+domain | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		if (type == "home") { | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=user&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type == "pub") { | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=public&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type == "pub-media") { | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=public:media&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type == "local") { | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=public:local&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type == "local-media") { | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=public:local:media&only_media=true&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type == "tag") { | 
					
						
							|  |  |  | 			if(type=="tag"){ | 
					
						
							|  |  |  | 				var tag = localStorage.getItem("tag-range"); | 
					
						
							|  |  |  | 				if(tag=="local"){ | 
					
						
							|  |  |  | 					data=data+"&local=true"; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-03-14 03:31:31 +09:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=hashtag&tag=" + data +"&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type == "noauth") { | 
					
						
							| 
									
										
										
										
											2018-09-19 01:41:48 +09:00
										 |  |  | 			var start = "wss://" + acct_id+ | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=public:local"; | 
					
						
							|  |  |  | 		} else if (type=="list"){ | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=list&list=" + data +"&access_token=" + at; | 
					
						
							|  |  |  | 		} else if (type=="dm"){ | 
					
						
							| 
									
										
										
										
											2018-09-17 20:55:00 +09:00
										 |  |  | 			var start = wss + | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				"/api/v1/streaming/?stream=direct&access_token=" + at; | 
					
						
							| 
									
										
										
										
											2018-03-14 03:31:31 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	console.log(start); | 
					
						
							|  |  |  | 	var wsid = websocket.length; | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 	localStorage.setItem("wss_" + tlid, wsid); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	websocket[wsid] = new WebSocket(start); | 
					
						
							|  |  |  | 	websocket[wsid].onopen = function(mess) { | 
					
						
							|  |  |  | 		console.log(tlid + ":Connect Streaming API:" + type); | 
					
						
							|  |  |  | 		console.log(mess); | 
					
						
							| 
									
										
										
										
											2018-03-10 23:22:59 +09:00
										 |  |  | 		$("#notice_icon_" + tlid).removeClass("red-text"); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	websocket[wsid].onmessage = function(mess) { | 
					
						
							|  |  |  | 		console.log(tlid + ":Receive Streaming API:"); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		console.log(JSON.parse(mess.data)); | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		if(misskey){ | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			if (JSON.parse(mess.data).type == "note") { | 
					
						
							|  |  |  | 				var obj = JSON.parse(mess.data).body; | 
					
						
							| 
									
										
										
										
											2018-07-22 22:03:46 +09:00
										 |  |  | 				if(voice){ | 
					
						
							| 
									
										
										
										
											2018-08-05 01:26:34 +09:00
										 |  |  | 					say(obj.text) | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 				websocketNotf[acct_id].send(JSON.stringify({ | 
					
						
							|  |  |  | 					type: 'capture', | 
					
						
							|  |  |  | 					id: obj.id | 
					
						
							|  |  |  | 				})) | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				var templete = misskeyParse([obj], type, acct_id, tlid,"",mute); | 
					
						
							| 
									
										
										
										
											2018-03-10 23:22:59 +09:00
										 |  |  | 				var pool = localStorage.getItem("pool_" + tlid); | 
					
						
							|  |  |  | 				if (pool) { | 
					
						
							|  |  |  | 					pool = templete + pool; | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					pool = templete | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				localStorage.setItem("pool_" + tlid, pool); | 
					
						
							|  |  |  | 				scrollck(); | 
					
						
							|  |  |  | 				jQuery("time.timeago").timeago(); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		}else{ | 
					
						
							|  |  |  | 			var typeA = JSON.parse(mess.data).event; | 
					
						
							|  |  |  | 			if (typeA == "delete") { | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 				var del=localStorage.getItem("delete"); | 
					
						
							|  |  |  | 				if(del>10){ | 
					
						
							|  |  |  | 					reconnector(tlid,type,acct_id,data) | 
					
						
							|  |  |  | 				}else{ | 
					
						
							|  |  |  | 					localStorage.setItem("delete",del*1+1) | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				var obj = JSON.parse(mess.data).payload; | 
					
						
							|  |  |  | 				if(delc=="true"){ | 
					
						
							|  |  |  | 					$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized"); | 
					
						
							|  |  |  | 					$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch"); | 
					
						
							|  |  |  | 				}else{ | 
					
						
							|  |  |  | 					$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide(); | 
					
						
							|  |  |  | 					$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				 | 
					
						
							| 
									
										
										
										
											2018-12-09 03:46:01 +09:00
										 |  |  | 			} else if (typeA == "update" || typeA == "conversation") { | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 				localStorage.removeItem("delete"); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				var obj = JSON.parse(JSON.parse(mess.data).payload); | 
					
						
							|  |  |  | 				console.log(obj); | 
					
						
							|  |  |  | 				if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){ | 
					
						
							|  |  |  | 					if(voice){ | 
					
						
							|  |  |  | 						say(obj.content) | 
					
						
							|  |  |  | 					}	 | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 					var templete = parse([obj], type, acct_id, tlid,"",mute, type); | 
					
						
							| 
									
										
										
										
											2019-03-08 03:19:26 +09:00
										 |  |  | 					if ($("timeline_box_"+tlid+"_box .tl-box").scrollTop() === 0) { | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 						$("#timeline_" + tlid).prepend(templete); | 
					
						
							|  |  |  | 					}else{ | 
					
						
							|  |  |  | 						var pool = localStorage.getItem("pool_" + tlid); | 
					
						
							|  |  |  | 						if (pool) { | 
					
						
							|  |  |  | 							pool = templete + pool; | 
					
						
							|  |  |  | 						} else { | 
					
						
							|  |  |  | 							pool = templete | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						localStorage.setItem("pool_" + tlid, pool); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 					} | 
					
						
							|  |  |  | 					scrollck(); | 
					
						
							|  |  |  | 					additional(acct_id, tlid); | 
					
						
							|  |  |  | 					jQuery("time.timeago").timeago(); | 
					
						
							|  |  |  | 				}else{ | 
					
						
							|  |  |  | 					todo("二重取得発生中"); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				 | 
					
						
							|  |  |  | 				todc(); | 
					
						
							|  |  |  | 			}else if(typeA=="filters_changed"){ | 
					
						
							|  |  |  | 				filterUpdate(acct_id); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	websocket[wsid].onerror = function(error) { | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		console.error("Error closing"); | 
					
						
							|  |  |  | 		console.error(error); | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 		if(mode=="error"){ | 
					
						
							|  |  |  | 			$("#notice_icon_" + tlid).addClass("red-text"); | 
					
						
							|  |  |  | 			todo('WebSocket Error ' + error); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 			var errorct=localStorage.getItem("wserror_" + tlid)*1+1; | 
					
						
							|  |  |  | 			localStorage.setItem("wserror_" + tlid,errorct); | 
					
						
							|  |  |  | 			if(errorct<3){ | 
					
						
							|  |  |  | 				reconnector(tlid,type,acct_id,data,"error"); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 	websocket[wsid].onclose = function() { | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		console.error("Closing"); | 
					
						
							|  |  |  | 		console.error(tlid); | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 		if(mode=="error"){ | 
					
						
							|  |  |  | 			$("#notice_icon_" + tlid).addClass("red-text"); | 
					
						
							|  |  |  | 			todo('WebSocket Closed'); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 			var errorct=localStorage.getItem("wserror_" + tlid)*1+1; | 
					
						
							|  |  |  | 			localStorage.setItem("wserror_" + tlid,errorct); | 
					
						
							|  |  |  | 			if(errorct<3){ | 
					
						
							|  |  |  | 				reconnector(tlid,type,acct_id,data,"error"); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //一定のスクロールで発火
 | 
					
						
							|  |  |  | function moreload(type, tlid) { | 
					
						
							|  |  |  | 	var multi = localStorage.getItem("column"); | 
					
						
							|  |  |  | 	var obj = JSON.parse(multi); | 
					
						
							|  |  |  | 	var acct_id = obj[tlid].domain; | 
					
						
							|  |  |  | 	if (!type) { | 
					
						
							| 
									
										
										
										
											2018-01-31 01:43:01 +09:00
										 |  |  | 		var type = obj[tlid].type; | 
					
						
							| 
									
										
										
										
											2018-02-04 23:56:31 +09:00
										 |  |  | 	}else{ | 
					
						
							|  |  |  | 		var data; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(type=="tag"){ | 
					
						
							|  |  |  | 		var data=obj[tlid].data; | 
					
						
							| 
									
										
										
										
											2018-03-14 03:31:31 +09:00
										 |  |  | 		var tag = localStorage.getItem("tag-range"); | 
					
						
							|  |  |  | 		if(tag=="local"){ | 
					
						
							|  |  |  | 			data=data+"&local=true"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-04-16 22:58:14 +09:00
										 |  |  | 	}else if(type=="list"){ | 
					
						
							|  |  |  | 		var data=obj[tlid].data; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-07-19 01:05:53 +09:00
										 |  |  | 	var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id"); | 
					
						
							| 
									
										
										
										
											2019-03-06 17:08:48 +09:00
										 |  |  | 	if (sid && !moreloading) { | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		if (type == "mix" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 			mixmore(tlid,"integrated"); | 
					
						
							|  |  |  | 			return; | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		}else if (type == "plus" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 			mixmore(tlid,"plus"); | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			return; | 
					
						
							| 
									
										
										
										
											2018-03-15 04:42:48 +09:00
										 |  |  | 		}else if (type == "notf") { | 
					
						
							|  |  |  | 			notfmore(tlid); | 
					
						
							|  |  |  | 			return; | 
					
						
							| 
									
										
										
										
											2019-04-11 12:52:38 +09:00
										 |  |  | 		}else if (type == "tootsearch") { | 
					
						
							|  |  |  | 			var data=obj[tlid].data; | 
					
						
							|  |  |  | 			moreTs(tlid,data); | 
					
						
							|  |  |  | 			return; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-03-06 17:08:48 +09:00
										 |  |  | 		moreloading=true; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		localStorage.setItem("now", type); | 
					
						
							|  |  |  | 		todo(cap(type) + " TL MoreLoading"); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 		if(type!="noauth"){ | 
					
						
							| 
									
										
										
										
											2018-08-05 14:16:12 +09:00
										 |  |  | 			var at = localStorage.getItem("acct_"+ acct_id + "_at"); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var hdr={ | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 				'content-type': 'application/json', | 
					
						
							|  |  |  | 				'Authorization': 'Bearer ' + at | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			}; | 
					
						
							|  |  |  | 				var domain = localStorage.getItem("domain_" + acct_id); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var hdr={ | 
					
						
							|  |  |  | 				'content-type': 'application/json' | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 			domain=acct_id; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		if(localStorage.getItem("mode_" + domain)=="misskey"){ | 
					
						
							|  |  |  | 			var misskey=true; | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			hdr={ | 
					
						
							|  |  |  | 				'content-type': 'application/json' | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 			var url=misskeycom(type, data); | 
					
						
							|  |  |  | 			var start = "https://" + domain + "/api/notes/"+url; | 
					
						
							|  |  |  | 			var method="POST"; | 
					
						
							|  |  |  | 			var req={}; | 
					
						
							|  |  |  | 			if(type!="noauth"){ | 
					
						
							|  |  |  | 				req.i=at; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="local-media"||type=="pub-media"){ | 
					
						
							|  |  |  | 				req.mediaOnly=true; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="tag"){ | 
					
						
							|  |  |  | 				req.tag=data; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="list"){ | 
					
						
							|  |  |  | 				req.listId=data; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			req.untilId=sid; | 
					
						
							|  |  |  | 			req.limit=20; | 
					
						
							|  |  |  | 			var i={ | 
					
						
							|  |  |  | 				method: method, | 
					
						
							|  |  |  | 				headers: hdr, | 
					
						
							|  |  |  | 				body: JSON.stringify(req), | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}else{ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 			var misskey=false; | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) + | 
					
						
							|  |  |  | 			"max_id=" + sid; | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 			if(type=="dm"){ | 
					
						
							|  |  |  | 				var start = "https://" + domain + "/api/v1/conversations?" + | 
					
						
							|  |  |  | 					"max_id=" + sid; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			var method="GET"; | 
					
						
							|  |  |  | 			var i={ | 
					
						
							|  |  |  | 				method: method, | 
					
						
							|  |  |  | 				headers: hdr | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		fetch(start, i).then(function(response) { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			return response.json(); | 
					
						
							|  |  |  | 		}).catch(function(error) { | 
					
						
							|  |  |  | 			todo(error); | 
					
						
							|  |  |  | 			console.error(error); | 
					
						
							|  |  |  | 		}).then(function(json) { | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 			console.log(json); | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 			if(misskey){ | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 				var templete = misskeyParse(json, '', acct_id, tlid,"",mute); | 
					
						
							|  |  |  | 			}else{ | 
					
						
							| 
									
										
										
										
											2019-03-16 19:06:03 +09:00
										 |  |  | 				var templete = parse(json, '', acct_id, tlid,"",mute, type); | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			$("#timeline_" + tlid).append(templete); | 
					
						
							|  |  |  | 			additional(acct_id, tlid); | 
					
						
							|  |  |  | 			jQuery("time.timeago").timeago(); | 
					
						
							| 
									
										
										
										
											2019-03-06 17:08:48 +09:00
										 |  |  | 			moreloading=false; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 			todc(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-08 00:14:06 +09:00
										 |  |  | //TL差分取得
 | 
					
						
							|  |  |  | function tlDiff(type, data, acct_id, tlid, delc, voice, mode) { | 
					
						
							|  |  |  | 	console.log("sabun") | 
					
						
							|  |  |  | 	var multi = localStorage.getItem("column"); | 
					
						
							|  |  |  | 	var obj = JSON.parse(multi); | 
					
						
							|  |  |  | 	var acct_id = obj[tlid].domain; | 
					
						
							|  |  |  | 	if (!type) { | 
					
						
							|  |  |  | 		var type = obj[tlid].type; | 
					
						
							|  |  |  | 	}else{ | 
					
						
							|  |  |  | 		var data; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(type=="tag"){ | 
					
						
							|  |  |  | 		var data=obj[tlid].data; | 
					
						
							|  |  |  | 		var tag = localStorage.getItem("tag-range"); | 
					
						
							|  |  |  | 		if(tag=="local"){ | 
					
						
							|  |  |  | 			data=data+"&local=true"; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}else if(type=="list"){ | 
					
						
							|  |  |  | 		var data=obj[tlid].data; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var sid = $("#timeline_" + tlid + " .cvo").first().attr("unique-id"); | 
					
						
							|  |  |  | 	if (sid && !moreloading) { | 
					
						
							|  |  |  | 		if (type == "mix" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") { | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		}else if (type == "plus" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") { | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		}else if (type == "notf") { | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		moreloading=true; | 
					
						
							|  |  |  | 		localStorage.setItem("now", type); | 
					
						
							|  |  |  | 		todo(cap(type) + " TL MoreLoading"); | 
					
						
							|  |  |  | 		if(type!="noauth"){ | 
					
						
							|  |  |  | 			var at = localStorage.getItem("acct_"+ acct_id + "_at"); | 
					
						
							|  |  |  | 			var hdr={ | 
					
						
							|  |  |  | 				'content-type': 'application/json', | 
					
						
							|  |  |  | 				'Authorization': 'Bearer ' + at | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 				var domain = localStorage.getItem("domain_" + acct_id); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var hdr={ | 
					
						
							|  |  |  | 				'content-type': 'application/json' | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 			domain=acct_id; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if(localStorage.getItem("mode_" + domain)=="misskey"){ | 
					
						
							|  |  |  | 			var misskey=true; | 
					
						
							|  |  |  | 			hdr={ | 
					
						
							|  |  |  | 				'content-type': 'application/json' | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 			var url=misskeycom(type, data); | 
					
						
							|  |  |  | 			var start = "https://" + domain + "/api/notes/"+url; | 
					
						
							|  |  |  | 			var method="POST"; | 
					
						
							|  |  |  | 			var req={}; | 
					
						
							|  |  |  | 			if(type!="noauth"){ | 
					
						
							|  |  |  | 				req.i=at; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="local-media"||type=="pub-media"){ | 
					
						
							|  |  |  | 				req.mediaOnly=true; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="tag"){ | 
					
						
							|  |  |  | 				req.tag=data; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(type=="list"){ | 
					
						
							|  |  |  | 				req.listId=data; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			req.sinceId=sid; | 
					
						
							|  |  |  | 			req.limit=20; | 
					
						
							|  |  |  | 			var i={ | 
					
						
							|  |  |  | 				method: method, | 
					
						
							|  |  |  | 				headers: hdr, | 
					
						
							|  |  |  | 				body: JSON.stringify(req), | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var misskey=false; | 
					
						
							|  |  |  | 			var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) + | 
					
						
							|  |  |  | 			"since_id=" + sid; | 
					
						
							|  |  |  | 			if(type=="dm"){ | 
					
						
							|  |  |  | 				var start = "https://" + domain + "/api/v1/conversations?" + | 
					
						
							|  |  |  | 					"since_id=" + sid; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			var method="GET"; | 
					
						
							|  |  |  | 			var i={ | 
					
						
							|  |  |  | 				method: method, | 
					
						
							|  |  |  | 				headers: hdr | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		fetch(start, i).then(function(response) { | 
					
						
							|  |  |  | 			return response.json(); | 
					
						
							|  |  |  | 		}).catch(function(error) { | 
					
						
							|  |  |  | 			todo(error); | 
					
						
							|  |  |  | 			console.error(error); | 
					
						
							|  |  |  | 		}).then(function(json) { | 
					
						
							|  |  |  | 			console.log(json); | 
					
						
							|  |  |  | 			if(misskey){ | 
					
						
							|  |  |  | 				var templete = misskeyParse(json, '', acct_id, tlid,"",mute); | 
					
						
							|  |  |  | 			}else{ | 
					
						
							|  |  |  | 				var templete = parse(json, '', acct_id, tlid,"",mute, type); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$("#timeline_" + tlid).prepend(templete); | 
					
						
							|  |  |  | 			additional(acct_id, tlid); | 
					
						
							|  |  |  | 			jQuery("time.timeago").timeago(); | 
					
						
							|  |  |  | 			moreloading=false; | 
					
						
							|  |  |  | 			todc(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-11 12:52:38 +09:00
										 |  |  | //TL再取得
 | 
					
						
							|  |  |  | function reloadTL(type, data, acct_id, key, delc,voice){ | 
					
						
							|  |  |  | 	tl(type, data, acct_id, key, delc,voice,""); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | //WebSocket切断
 | 
					
						
							|  |  |  | function tlCloser() { | 
					
						
							|  |  |  | 	Object.keys(websocket).forEach(function(tlid) { | 
					
						
							|  |  |  | 		if (websocketOld[tlid]) { | 
					
						
							|  |  |  | 			websocketOld[tlid].close(); | 
					
						
							|  |  |  | 			console.log("Close Streaming API: Old" + tlid); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (websocket[0]) { | 
					
						
							|  |  |  | 			console.log(websocket[0]); | 
					
						
							|  |  |  | 			websocket[tlid].close(); | 
					
						
							|  |  |  | 			console.log("Close Streaming API:" + tlid); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	websocket = []; | 
					
						
							|  |  |  | 	Object.keys(websocketHome).forEach(function(tlid) { | 
					
						
							|  |  |  | 		if (websocketHome[tlid]) { | 
					
						
							|  |  |  | 			websocketHome[tlid].close(); | 
					
						
							|  |  |  | 			console.log("Close Streaming API:MixHome" + tlid); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	websocketHome = []; | 
					
						
							|  |  |  | 	Object.keys(websocketLocal).forEach(function(tlid) { | 
					
						
							|  |  |  | 		if (websocketLocal[tlid]) { | 
					
						
							|  |  |  | 			websocketLocal[tlid].close(); | 
					
						
							|  |  |  | 			console.log("Close Streaming API:MixLocal" + tlid); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	websocketLocal = []; | 
					
						
							| 
									
										
										
										
											2018-02-04 23:56:31 +09:00
										 |  |  | 	Object.keys(websocketNotf).forEach(function(tlid) { | 
					
						
							|  |  |  | 		if (websocketNotf[tlid]) { | 
					
						
							|  |  |  | 			websocketNotf[tlid].close(); | 
					
						
							|  |  |  | 			console.log("Close Streaming API:Notf" + tlid); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 	websocketNotf = []; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //TLのタイトル
 | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | function cap(type, data, acct_id) { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 	//独自ロケール
 | 
					
						
							|  |  |  | 	var locale = localStorage.getItem("locale"); | 
					
						
							|  |  |  | 	if(locale=="yes"){ | 
					
						
							|  |  |  | 		var locale=false; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	if (type == "home") { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 		if(localStorage.getItem("home_" + acct_id) && !locale){ | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 			var response=localStorage.getItem("home_" + acct_id); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response="Home TL"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "local") { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 		if(localStorage.getItem("local_" + acct_id) && !locale){ | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 			var response=localStorage.getItem("local_" + acct_id); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response="Local TL"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-06-12 00:44:28 +09:00
										 |  |  | 	} else if (type == "local-media") { | 
					
						
							|  |  |  | 		if(localStorage.getItem("local_" + acct_id) && !locale){ | 
					
						
							| 
									
										
										
										
											2019-01-26 12:24:26 +09:00
										 |  |  | 			var response=localStorage.getItem("local_" + acct_id)+"("+lang.lang_tl_media +")"; | 
					
						
							| 
									
										
										
										
											2018-06-12 00:44:28 +09:00
										 |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response="Local TL(Media)"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "pub") { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 		if(localStorage.getItem("public_" + acct_id) && !locale){ | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 			var response=localStorage.getItem("public_" + acct_id); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response="Federated TL"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-06-12 00:44:28 +09:00
										 |  |  | 	} else if (type == "pub-media") { | 
					
						
							|  |  |  | 		if(localStorage.getItem("public_" + acct_id) && !locale){ | 
					
						
							| 
									
										
										
										
											2019-01-26 12:24:26 +09:00
										 |  |  | 			var response=localStorage.getItem("public_" + acct_id)+"("+lang.lang_tl_media +")"; | 
					
						
							| 
									
										
										
										
											2018-06-12 00:44:28 +09:00
										 |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response="Federated TL(Media)"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "tag") { | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 		var response= "#" + data | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "list") { | 
					
						
							| 
									
										
										
										
											2018-04-01 06:00:27 +09:00
										 |  |  | 		var ltitle=localStorage.getItem("list_"+data+"_"+acct_id); | 
					
						
							|  |  |  | 		var response= "List(" + ltitle + ")" | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "notf") { | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 		if(localStorage.getItem("notification_" + acct_id) && !locale){ | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 			var response=localStorage.getItem("notification_" + acct_id); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response="Notification TL"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 	} else if (type == "noauth") { | 
					
						
							|  |  |  | 		var response= "Glance TL" | 
					
						
							| 
									
										
										
										
											2018-05-02 13:14:03 +09:00
										 |  |  | 	} else if (type == "dm") { | 
					
						
							|  |  |  | 		var response= "DM" | 
					
						
							| 
									
										
										
										
											2018-07-29 16:37:54 +09:00
										 |  |  | 	} else if (type == "mix") { | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 		if(localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))=="misskey"){ | 
					
						
							| 
									
										
										
										
											2018-08-10 00:18:35 +09:00
										 |  |  | 			var response= "Social TL" | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var response= "Integrated" | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-29 16:37:54 +09:00
										 |  |  | 	} else if (type == "plus") { | 
					
						
							|  |  |  | 		var response= "Local+" | 
					
						
							| 
									
										
										
										
											2018-09-10 02:06:00 +09:00
										 |  |  | 	}else if (type == "webview") { | 
					
						
							|  |  |  | 		var response="Twitter" | 
					
						
							| 
									
										
										
										
											2019-04-09 23:12:11 +09:00
										 |  |  | 	}else if (type == "tootsearch") { | 
					
						
							|  |  |  | 		var response="tootsearch(" + data + ")"; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-20 13:55:25 +09:00
										 |  |  | 	return response; | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //TLのURL
 | 
					
						
							|  |  |  | function com(type, data) { | 
					
						
							|  |  |  | 	if (type == "home") { | 
					
						
							|  |  |  | 		return "home?" | 
					
						
							| 
									
										
										
										
											2018-03-27 11:39:35 +09:00
										 |  |  | 	} else if (type == "local" || type == "noauth") { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		return "public?local=true&" | 
					
						
							| 
									
										
										
										
											2018-06-12 00:44:28 +09:00
										 |  |  | 	} else if (type == "local-media") { | 
					
						
							|  |  |  | 		return "public?local=true&only_media=true&" | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "pub") { | 
					
						
							|  |  |  | 		return "public?" | 
					
						
							| 
									
										
										
										
											2018-06-12 00:44:28 +09:00
										 |  |  | 	} else if (type == "pub-media") { | 
					
						
							|  |  |  | 		return "public?only_media=true&" | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} else if (type == "tag") { | 
					
						
							|  |  |  | 		return "tag/" + data + "?" | 
					
						
							| 
									
										
										
										
											2018-05-02 13:14:03 +09:00
										 |  |  | 	}else if (type == "list") { | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 		return "list/" + data + "?" | 
					
						
							| 
									
										
										
										
											2019-03-08 03:19:26 +09:00
										 |  |  | 	}else if (type=="dm") { | 
					
						
							| 
									
										
										
										
											2019-03-06 20:56:39 +09:00
										 |  |  | 		return "direct?" | 
					
						
							| 
									
										
										
										
											2018-01-28 21:22:43 +09:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-30 20:03:49 +09:00
										 |  |  | function misskeycom(type, data) { | 
					
						
							|  |  |  | 	if (type == "home") { | 
					
						
							|  |  |  | 		return "timeline" | 
					
						
							|  |  |  | 	}else if (type == "mix") { | 
					
						
							|  |  |  | 		return "hybrid-timeline" | 
					
						
							|  |  |  | 	} else if (type == "local" || type == "noauth") { | 
					
						
							|  |  |  | 		return "local-timeline" | 
					
						
							|  |  |  | 	} else if (type == "local-media") { | 
					
						
							|  |  |  | 		return "local-timeline" | 
					
						
							|  |  |  | 	} else if (type == "pub") { | 
					
						
							|  |  |  | 		return "global-timeline" | 
					
						
							|  |  |  | 	} else if (type == "pub-media") { | 
					
						
							|  |  |  | 		return "global-timeline" | 
					
						
							|  |  |  | 	} else if (type == "tag") { | 
					
						
							|  |  |  | 		return "search_by_tag" | 
					
						
							|  |  |  | 	}else if (type == "list") { | 
					
						
							|  |  |  | 		return "user-list-timeline" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-02-25 00:59:53 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | //TLのアイコン
 | 
					
						
							|  |  |  | function icon(type) { | 
					
						
							|  |  |  | 	if (type == "home") { | 
					
						
							| 
									
										
										
										
											2019-03-15 04:48:01 +09:00
										 |  |  | 		var response="home"; | 
					
						
							|  |  |  | 	} else if (type == "local") { | 
					
						
							|  |  |  | 		var response="people_outline"; | 
					
						
							|  |  |  | 	} else if (type == "local-media") { | 
					
						
							|  |  |  | 		var response="people_outline"; | 
					
						
							|  |  |  | 	} else if (type == "pub") { | 
					
						
							|  |  |  | 		var response="language"; | 
					
						
							|  |  |  | 	} else if (type == "pub-media") { | 
					
						
							|  |  |  | 		var response="language"; | 
					
						
							| 
									
										
										
										
											2018-02-25 00:59:53 +09:00
										 |  |  | 	} else if (type == "tag") { | 
					
						
							| 
									
										
										
										
											2019-04-09 23:12:11 +09:00
										 |  |  | 		var response="whatshot"; | 
					
						
							| 
									
										
										
										
											2018-04-01 06:00:27 +09:00
										 |  |  | 	} else if (type == "list") { | 
					
						
							| 
									
										
										
										
											2019-03-15 04:48:01 +09:00
										 |  |  | 		var response="view_headline"; | 
					
						
							|  |  |  | 	} else if (type == "notf") { | 
					
						
							|  |  |  | 		var response="notifications"; | 
					
						
							|  |  |  | 	} else if (type == "noauth") { | 
					
						
							|  |  |  | 		var response="people_outline"; | 
					
						
							|  |  |  | 	} else if (type == "dm") { | 
					
						
							|  |  |  | 		var response="mail_outline"; | 
					
						
							|  |  |  | 	} else if (type == "mix") { | 
					
						
							|  |  |  | 		var response="merge_type"; | 
					
						
							|  |  |  | 	} else if (type == "plus") { | 
					
						
							|  |  |  | 		var response="merge_type"; | 
					
						
							|  |  |  | 	}else if (type == "webview") { | 
					
						
							|  |  |  | 		var response="language"; | 
					
						
							| 
									
										
										
										
											2019-04-09 23:12:11 +09:00
										 |  |  | 	}else if (type == "tootsearch") { | 
					
						
							|  |  |  | 		var response="search"; | 
					
						
							| 
									
										
										
										
											2018-02-25 00:59:53 +09:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-03-15 04:48:01 +09:00
										 |  |  | 	return response; | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | } | 
					
						
							|  |  |  | function strAlive(){ | 
					
						
							|  |  |  |     var date = new Date() ; | 
					
						
							|  |  |  | 	var a = date.getTime() ; | 
					
						
							|  |  |  | 	var unix = Math.floor( a / 1000 ) ; | 
					
						
							|  |  |  | 	var col = localStorage.getItem("column"); | 
					
						
							|  |  |  | 	if(col){ | 
					
						
							|  |  |  | 		var obj = JSON.parse(col); | 
					
						
							|  |  |  | 		Object.keys(obj).forEach(function(key) { | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 			if($("#notice_icon_" + key).hasClass("red-text")){ | 
					
						
							|  |  |  | 				var type=obj[key].type; | 
					
						
							|  |  |  | 				var acct_id=obj[key].domain; | 
					
						
							|  |  |  | 				var data=obj[key].data; | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 				localStorage.removeItem("wserror_" + tlid) | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 				reconnector(key,type,acct_id,data,"error"); | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:29:39 +09:00
										 |  |  | 	return; | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function strAliveInt(){ | 
					
						
							|  |  |  |     setTimeout(strAlive, 10000); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | function reconnector(tlid,type,acct_id,data,mode){ | 
					
						
							|  |  |  | 	console.log("Reconnector:"+mode) | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 	if(type=="mix" || type=="plus"){ | 
					
						
							|  |  |  | 		if(localStorage.getItem("voice_" + tlid)){ | 
					
						
							|  |  |  | 			var voice=true; | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var voice=false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if(localStorage.getItem("filter_"+ acct_id)!="undefined"){ | 
					
						
							|  |  |  | 			var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var mute=[]; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		var wssh=localStorage.getItem("wssH_" + tlid); | 
					
						
							|  |  |  | 		websocketHome[wssh].close(); | 
					
						
							|  |  |  | 		var wssh=localStorage.getItem("wssL_" + tlid); | 
					
						
							|  |  |  | 		websocketLocal[wssl].close(); | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 		mixre(acct_id, tlid, type, mute,"",voice,mode); | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 	}else if(type=="notf"){ | 
					
						
							|  |  |  | 	}else{ | 
					
						
							|  |  |  | 		var wss=localStorage.getItem("wss_" + tlid); | 
					
						
							|  |  |  | 		websocket[wss].close(); | 
					
						
							|  |  |  | 		if(localStorage.getItem("voice_" + tlid)){ | 
					
						
							|  |  |  | 			var voice=true; | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var voice=false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if(localStorage.getItem("filter_"+ acct_id)!="undefined"){ | 
					
						
							|  |  |  | 			var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type); | 
					
						
							|  |  |  | 		}else{ | 
					
						
							|  |  |  | 			var mute=[]; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-21 03:26:14 +09:00
										 |  |  | 		reload(type, '', acct_id, tlid, data, mute, "",voice,mode); | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-01-26 12:24:26 +09:00
										 |  |  | 	Materialize.toast(lang.lang_tl_reconnect, 2000); | 
					
						
							| 
									
										
										
										
											2018-08-17 02:21:40 +09:00
										 |  |  | } | 
					
						
							|  |  |  | strAliveInt() |