162 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| let selectedSports = []
 | |
| 
 | |
| let filters = {
 | |
|     selectedSports: selectedSports,
 | |
|     searchedWords: [],
 | |
|     blockedWords: [],
 | |
|     popularityFilter: {},
 | |
|     sorted: "time",
 | |
|     order: "desc"
 | |
| }
 | |
| 
 | |
| function showFeeds() {
 | |
|     if ($(window).width() < 1280) {
 | |
|         if (selectedSports.length === 0) {
 | |
|             $(".leftcol").show()
 | |
|             $(".centercol").hide()
 | |
|         } else {
 | |
|             $(".leftcol").hide()
 | |
|             $(".centercol").show()
 | |
|         }
 | |
|     } else {
 | |
|         $(".leftcol").show()
 | |
|         $(".centercol").show()
 | |
|     }
 | |
| }
 | |
| 
 | |
| function tweetCell(tweet) {
 | |
|     const date = new Date(tweet.created_at);
 | |
|     console.log(new Intl.DateTimeFormat('en-GB').format(date));
 | |
|     var cell = document.createElement("div");
 | |
|     cell.innerHTML =
 | |
|     `<div class="tweet">
 | |
|         <a href ="https://www.twitter.com/${tweet.user.screen_name}"><img src="${tweet.user.profile_image_url}" onerror="this.src='media/logo.png'" class="tweet-profilepicture"></a>
 | |
|         <div class="tweet-content"> 
 | |
|             <div class="tweet-name">
 | |
|                 <div>
 | |
|                     <a class="tweet-nickname" href = "https://www.twitter.com/${tweet.user.screen_name}" target = "_blank">${tweet.user.name}</a>
 | |
|                     <a class="tweet-username" href = "https://www.twitter.com/${tweet.user.screen_name}" target = "_blank">@${tweet.user.screen_name}</a>
 | |
|                 </div>
 | |
|                 <span class="tweet-date"><em>${date.getHours()}:${date.getMinutes()}</em></span> 
 | |
|             </div>
 | |
|             <span class="tweet-text">${tweet.text}</span>
 | |
|             <div class="tweet-interactions">
 | |
|                 <div class="tweet-interaction tweet-likes">
 | |
|                     <span class="material-symbols-outlined">favorite</span>
 | |
|                     <span>${tweet.favorite_count}</span>
 | |
|                 </div>
 | |
|                 <div class="tweet-interaction tweet-retweets">
 | |
|                     <span class="material-symbols-outlined">repeat</span>
 | |
|                     <span>${tweet.retweet_count}</span>
 | |
|                 </div>
 | |
|                 <div class="tweet-interaction tweet-replies">
 | |
|                     <span class="material-symbols-outlined">chat_bubble</span>
 | |
|                     <span>${tweet.reply_count}</span>
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>`
 | |
|     return cell
 | |
| }
 | |
| 
 | |
| function filterTweets(tweets, bannedWords=[], searchWords=[], likesTop=null, likesBottom=null, retweetsTop=null, retweetsBottom=null, repliesTop=null, repliesBottom=null) {
 | |
|     if(bannedWords.length > 0){
 | |
|         tweets = filterBannedWords(bannedWords, tweets)
 | |
|     }
 | |
|     if(searchWords.length > 0){
 | |
|         tweets = searchForWords(searchWords, tweets)
 | |
|     }
 | |
|     if(likesTop != null || likesBottom != null){
 | |
|         tweets = filterLikes(likesTop, likesBottom, tweets)
 | |
|     }
 | |
|     if(retweetsTop != null || retweetsBottom != null){
 | |
|         tweets = filterRetweets(retweetsTop, retweetsBottom, tweets)
 | |
|     }
 | |
|     if(repliesTop != null || repliesBottom != null){
 | |
|         tweets = filterReplies(repliesTop, repliesBottom, tweets)
 | |
|     }
 | |
|     return tweets
 | |
| }
 | |
| 
 | |
| function filterBannedWords(bannedWords, tweets){
 | |
|     for (let i = 0; i < tweets.length; i++) {
 | |
|         var tweet = tweets[i]
 | |
|         for(let j=0; j < bannedWords.length; j++){
 | |
|             if (tweet.text.toLowerCase().includes(bannedWords[j].toLowerCase())){
 | |
|                 tweets.splice(i, 1)
 | |
|                 break
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     return tweets
 | |
| }
 | |
| 
 | |
| function searchForWords(searchWords, tweets){
 | |
|     for (let i = 0; i < tweets.length; i++) {
 | |
|         var tweet = tweets[i]
 | |
|         for(let i=0; i < searchWords.length; i++){
 | |
|             if (!tweet.text.toLowerCase().includes(searchWords[i].toLowerCase())) {
 | |
|                 tweets.splice(i, 1)
 | |
|                 break
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     return tweets
 | |
| }
 | |
| 
 | |
| function filterLikes(likesTop, likesBottom, tweets){
 | |
|     for (let i = 0; i < tweets.length; i++) {
 | |
|         var tweet = tweets[i]
 | |
|         if(tweet.favorite_count >= likesTop || tweet.favorite_count <= likesBottom){
 | |
|             tweets.splice(i, 1)
 | |
|             break
 | |
|         }
 | |
|     }
 | |
|     return tweets
 | |
| }
 | |
| 
 | |
| function filterRetweets(retweetsTop, retweetsBottom, tweets){
 | |
|     for (let i = 0; i < tweets.length; i++) {
 | |
|         var tweet = tweets[i]
 | |
|         if(tweet.retweet_count >= retweetsTop || tweet.retweet_count <= retweetsBottom){
 | |
|             tweets.splice(i, 1)
 | |
|             break
 | |
|         }
 | |
|     }
 | |
|     return tweets
 | |
| }
 | |
| 
 | |
| function filterReplies(repliesTop, repliesBottom, tweets){
 | |
|     for (let i = 0; i < tweets.length; i++) {
 | |
|         var tweet = tweets[i]
 | |
|         if(tweet.reply_count >= repliesTop || tweet.reply_count <= repliesBottom){
 | |
|             tweets.splice(i, 1)
 | |
|             break
 | |
|         }
 | |
|     }
 | |
|     return tweets
 | |
| }
 | |
| 
 | |
| function sortTweets(tweets, likesDes=null, retweetsDes=null, repliesDes=null, dateDes=null){
 | |
|     if(likesDes && likesDes!=null){
 | |
|         tweets.sort(function(a,b){return b.favorite_count-a.favorite_count})
 | |
|     } else if (!likesDes && likesDes!=null){
 | |
|         tweets.sort(function(a,b){return a.favorite_count-b.favorite_count})
 | |
|     }
 | |
|     if(retweetsDes && retweetsDes!=null){
 | |
|         tweets.sort(function(a,b){return b.retweet_count-a.retweet_count})
 | |
|     } else if (!retweetsDes && retweetsDes!=null){
 | |
|         tweets.sort(function(a,b){return a.retweet_count-b.retweet_count})
 | |
|     }
 | |
|     if(repliesDes && repliesDes!=null){
 | |
|         tweets.sort(function(a,b){return b.reply_count-a.reply_count})
 | |
|     } else if (!repliesDes && repliesDes!=null){
 | |
|         tweets.sort(function(a,b){return a.reply_count-b.reply_count})
 | |
|     }
 | |
|     if(dateDes && dateDes!=null){
 | |
|         tweets.sort(function(a,b){return Date(b.created_at)-Date(a.reply_count)})
 | |
|     } else if (!dateDes && dateDes!=null){
 | |
|         tweets.sort(function(a,b){return Date(a.created_at)-Date(b.reply_count)})
 | |
|     }
 | |
|     return tweets
 | |
| } | 
