186 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| let root = document.documentElement // Used for css variables
 | |
| 
 | |
| let selectedSports = []
 | |
| 
 | |
| $(".sport").on("click", function() {
 | |
|     $(this).toggleClass("selected")
 | |
| 
 | |
|     let sportName = $(this).children()[1].innerHTML // 2nd element, which is the sport name
 | |
| 
 | |
|     
 | |
|     let index = selectedSports.indexOf(sportName)
 | |
|     if (index > -1 ) {  // If element is found in array
 | |
|         selectedSports.splice(index, 1) // Remove sport at index
 | |
|     } else {
 | |
|         selectedSports.push(sportName)  // Add sport to array
 | |
|     }
 | |
| 
 | |
|     $(this).trigger("selected", [selectedSports.includes(sportName), selectedSports]) // Trigger event
 | |
| })
 | |
| 
 | |
| function getCSSVariable(name) {
 | |
|     return getComputedStyle(root).getPropertyValue(name)
 | |
| }
 | |
| 
 | |
| function tweetCell(tweet, parent) {
 | |
|     var cell = document.createElement("div");
 | |
|     cell.innerHTML =
 | |
|     `<div class="tweet">
 | |
|         <img src="${tweet.user.profile_image_url}" alt="" class="tweet-profilepicture">
 | |
|         <div class="tweet-content"> 
 | |
|             <div class="tweet-name">
 | |
|                 <span class="tweet-nickname">${tweet.user.name}</span>
 | |
|                 <span class="tweet-username">@${tweet.user.screen_name}</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>`
 | |
|     parent.append(cell);
 | |
| }
 | |
| 
 | |
| 
 | |
| var atweet = {
 | |
|     "created_at": "Sat Nov 16 12:51:41 +0000 2019",
 | |
|     "text": "@BobGreenburg @ONeill_Coffee Congrats to the excellent football program at Wilmington. One classy organization!",
 | |
|     "source": "<a href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\">Twitter for iPhone<\/a>",
 | |
|     "user": {
 | |
|         "name": "Express Youngstown",
 | |
|         "screen_name": "ExpressProsYO",
 | |
|         "url": "http:\/\/apply.expresspros.com\/",
 | |
|         "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/775167844921188353\/fWquHsOK_normal.jpg",
 | |
|     },
 | |
|     "quote_count": 0,
 | |
|     "reply_count": 0,
 | |
|     "retweet_count": 0,
 | |
|     "favorite_count": 0,
 | |
|     "entities": {
 | |
|         "hashtags": [
 | |
| 
 | |
|         ],
 | |
|         "urls": [
 | |
| 
 | |
|         ],
 | |
|         "user_mentions": [
 | |
|             {
 | |
|                 "screen_name": "BobGreenburg",
 | |
|                 "name": "Bob Greenburg",
 | |
|                 "id": 483881032,
 | |
|                 "id_str": "483881032",
 | |
|                 "indices": [
 | |
|                     0,
 | |
|                     13
 | |
|                 ]
 | |
|             },
 | |
|             {
 | |
|                 "screen_name": "ONeill_Coffee",
 | |
|                 "name": "O'NeillCoffeeCompany",
 | |
|                 "id": 2804543925,
 | |
|                 "id_str": "2804543925",
 | |
|                 "indices": [
 | |
|                     14,
 | |
|                     28
 | |
|                 ]
 | |
|             }
 | |
|         ],
 | |
|         "symbols": [
 | |
| 
 | |
|         ]
 | |
|     },
 | |
| }
 | |
| 
 | |
| for (let i = 0; i < 2; i++) {
 | |
|     tweetCell(atweet, $(".leftcol"));
 | |
| }
 | |
| 
 | |
| function filter(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
 | |
| }
 |