Compare commits

...

10 Commits

Author SHA1 Message Date
b82790933b Added powerpoint 2022-11-05 11:49:49 +01:00
jacktjong
e3e7ad4c7d Commented + Tidying Up 2022-11-04 22:40:38 +01:00
jacktjong
f840a456af Cleaner Python Code 2022-11-04 22:21:19 +01:00
d3b62c1c61 fixup! Merge pull request #33 from olinpin/Minutes 2022-11-04 14:17:44 +01:00
352954e79e Merge pull request #33 from olinpin/Minutes
Add 0 before the minutes if they are smaller than 10
2022-11-04 14:16:47 +01:00
youri.apell@gmail.com
deb1bcf70b Add 0 before the minutes if they are smaller than 10 2022-11-04 14:14:39 +01:00
b9e02380f2 Fixed sort by 2022-11-04 13:57:09 +01:00
Tim Wijma
b6c0aab42e text white 2022-11-04 13:51:15 +01:00
88d00e2a63 fixed filters 2022-11-04 13:50:24 +01:00
5c4155bb5c Fixed if no tweets in a sport 2022-11-04 13:46:45 +01:00
7 changed files with 59 additions and 73 deletions

BIN
Cluccer.pptx Normal file
View File

Binary file not shown.

View File

@@ -41,51 +41,26 @@ def words(message):
@event('tweet') @event('tweet')
def generate_tweet(ctx, e): def generate_tweet(ctx, e):
tweet = dict(e.data) tweet = dict(e.data)
# array of indexes that we want to pop from our tweets; this is to save memory
pops = [
"display_text_range",
"in_reply_to_status_id",
"in_reply_to_status_id_str",
"in_reply_to_user_id",
"in_reply_to_user_id_str",
"in_reply_to_screen_name",
"geo",
"coordinates",
"place",
"contributors",
"is_quote_status"
]
try: try:
try: for x in pops:
tweet.pop("display_text_range") try:
except KeyError: tweet.pop(x)
pass except KeyError:
try: pass
tweet.pop("in_reply_to_status_id")
except KeyError:
pass
try:
tweet.pop("in_reply_to_status_id_str")
except KeyError:
pass
try:
tweet.pop("in_reply_to_user_id")
except KeyError:
pass
try:
tweet.pop("in_reply_to_user_id_str")
except KeyError:
pass
try:
tweet.pop("in_reply_to_screen_name")
except KeyError:
pass
try:
tweet.pop("geo")
except KeyError:
pass
try:
tweet.pop("coordinates")
except KeyError:
pass
try:
tweet.pop("place")
except KeyError:
pass
try:
tweet.pop("contributors")
except KeyError:
pass
try:
tweet.pop("is_quote_status")
except KeyError:
pass
except: except:
pass pass
# base sample on previous one # base sample on previous one

View File

@@ -16,7 +16,6 @@
<link rel="icon" type="image/x-icon" href="./media/logo.png"> <link rel="icon" type="image/x-icon" href="./media/logo.png">
</head> </head>
<body> <body>
<!-- <div id="tweet" style="height: 200px;"></div> -->
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<div class="logo"> <div class="logo">
@@ -140,25 +139,10 @@
memory: 100 memory: 100
}); });
block('#pie').piechart(); block('#pie').piechart();
events.connect('pie', '#pie');
events.connect("tweet", "#latest");
// // create a rolling chart block events.connect("tweet", "#latest");
// block('#graph').rolling_chart({ events.connect('pie', '#pie');
// memory: 150,
// chart: {
// yaxis: {
// min: -100,
// max: 100
// },
// xaxis: {
// show: false
// }
// }
// });
// // connect sample event to graph
// events.connect('tweet', '#graph');
</script> </script>
</body> </body>
</html> </html>

View File

@@ -9,6 +9,8 @@ let filters = {
sports: [] sports: []
} }
// smartly removes one of the feeds when the window is too narrow for both feeds to be shown properly
// it will swap between the "recent" and "filtered" feeds depending on if a filter is active
function showFeeds() { function showFeeds() {
if ($(window).width() < 1280) { if ($(window).width() < 1280) {
if(filters.sports.length === 0 && filters.blockedWords.length === 0 && filters.searchedWords.length === 0 && (filters.sorted == "time" && filters.order == "desc")) { if(filters.sports.length === 0 && filters.blockedWords.length === 0 && filters.searchedWords.length === 0 && (filters.sorted == "time" && filters.order == "desc")) {
@@ -24,8 +26,16 @@ function showFeeds() {
} }
} }
// outputs HTML of a tweet based on the tweet that gets given as input
function tweetCell(tweet) { function tweetCell(tweet) {
const date = new Date(tweet.created_at); const date = new Date(tweet.created_at);
let minutes = date.getMinutes();
if (minutes < 10) {
minutes = "0" + minutes
}
var cell = document.createElement("div"); var cell = document.createElement("div");
cell.innerHTML = cell.innerHTML =
`<div class="tweet"> `<div class="tweet">
@@ -36,9 +46,9 @@ function tweetCell(tweet) {
<a class="tweet-nickname" href = "https://www.twitter.com/${tweet.user.screen_name}" target = "_blank">${tweet.user.name}</a> <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> <a class="tweet-username" href = "https://www.twitter.com/${tweet.user.screen_name}" target = "_blank">@${tweet.user.screen_name}</a>
</div> </div>
<span class="tweet-date"><em>${date.getHours()}:${date.getMinutes()}</em></span> <span class="tweet-date"><em>${date.getHours()}:${minutes}</em></span>
</div> </div>
<a class="tweet-text" href = "https://www.twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}" target = "_blank">${tweet.text}</a> <a class="tweet-text" href = "https://www.twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}" target = "_blank">${tweet.text}</a>
<div class="tweet-interactions"> <div class="tweet-interactions">
<div class="tweet-interaction tweet-likes"> <div class="tweet-interaction tweet-likes">
<span class="material-symbols-outlined">favorite</span> <span class="material-symbols-outlined">favorite</span>
@@ -58,12 +68,15 @@ function tweetCell(tweet) {
return cell return cell
} }
// applies all filters to a list of tweets
function filterTweets(tweets, bannedWords=[], searchWords=[], sorted, order) { function filterTweets(tweets, bannedWords=[], searchWords=[], sorted, order) {
if(bannedWords.length == 1 && bannedWords[0] == ""){ if(bannedWords.length == 1 && bannedWords[0] == ""){
bannedWords = [] bannedWords = []
filters.blockedWords = []
} }
if(searchWords.length == 1 && searchWords[0] == ""){ if(searchWords.length == 1 && searchWords[0] == ""){
searchWords = [] searchWords = []
filters.searchedWords = []
} }
if(bannedWords.length > 0){ if(bannedWords.length > 0){
tweets = filterBannedWords(bannedWords, tweets) tweets = filterBannedWords(bannedWords, tweets)
@@ -74,6 +87,7 @@ function filterTweets(tweets, bannedWords=[], searchWords=[], sorted, order) {
return tweets return tweets
} }
// iterates through each tweet in the list and removes any tweets that contain any of the given words in their text
function filterBannedWords(bannedWords, tweets){ function filterBannedWords(bannedWords, tweets){
for (let i = 0; i < tweets.length; i++) { for (let i = 0; i < tweets.length; i++) {
var tweet = tweets[i] var tweet = tweets[i]
@@ -87,6 +101,7 @@ function filterBannedWords(bannedWords, tweets){
return tweets return tweets
} }
// iterates through each tweet in the list and removes any tweets that do not contain any of the given words in their text
function searchForWords(searchWords, tweets){ function searchForWords(searchWords, tweets){
var filteredTweets = [] var filteredTweets = []
for (let i = 0; i < tweets.length; i++) { for (let i = 0; i < tweets.length; i++) {
@@ -103,6 +118,7 @@ function searchForWords(searchWords, tweets){
return filteredTweets.reverse() return filteredTweets.reverse()
} }
// sorts through a list of tweets based on an array with options (sort)
function sortTweets(tweets, sort){ function sortTweets(tweets, sort){
if(typeof sort.sortby == 'undefined'){ if(typeof sort.sortby == 'undefined'){
return tweets return tweets
@@ -134,7 +150,7 @@ function sortTweets(tweets, sort){
} }
if (sort.sortby == "time"){ if (sort.sortby == "time"){
if(sort.order == 'asc'){ if(sort.order == 'asc'){
tweets.sort(function(a,b){return Date(b.created_at)-Date(a.reply_count)}) tweets.reverse()
} else{ } else{
tweets.sort(function(a,b){return Date(a.created_at)-Date(b.reply_count)}) tweets.sort(function(a,b){return Date(a.created_at)-Date(b.reply_count)})
} }

View File

@@ -31,16 +31,19 @@ $(".sport").on("click", function() {
$(this).trigger("selected", [selectedSports.includes(sportName), selectedSports]) // Trigger event $(this).trigger("selected", [selectedSports.includes(sportName), selectedSports]) // Trigger event
}) })
//evaluate and alter our page layout when page gets resized
$(window).on("resize", function(){ $(window).on("resize", function(){
showFeeds() showFeeds()
}); });
//evaluate and alter our page layout when page gets loaded
$(window).on("load", function() { $(window).on("load", function() {
showFeeds() showFeeds()
}) })
let root = document.querySelector(":root") let root = document.querySelector(":root")
//switch between light and dark mode
$(".logo").on("click", function() { $(".logo").on("click", function() {
if (root.style.getPropertyValue("--main-bg") === 'snow') { if (root.style.getPropertyValue("--main-bg") === 'snow') {
var audio = new Audio("../media/Chicken.mp3"); var audio = new Audio("../media/Chicken.mp3");
@@ -63,6 +66,7 @@ $(".logo").on("click", function() {
} }
}) })
//when a filter event happens, filter and sort tweets, then remove all old HTML and fill with new HTML
$(window).on("filter", function() { $(window).on("filter", function() {
var parent = document.querySelector("#filtered") var parent = document.querySelector("#filtered")
var lastTweet = parent.firstChild var lastTweet = parent.firstChild
@@ -72,6 +76,10 @@ $(window).on("filter", function() {
tweets = filterTweets(tweets, filters.blockedWords, filters.searchedWords.concat(filters.sports), filters.sorted, filters.order); tweets = filterTweets(tweets, filters.blockedWords, filters.searchedWords.concat(filters.sports), filters.sorted, filters.order);
tweets = sortTweets(tweets, {"sortby":filters.sorted, "order":filters.order}); tweets = sortTweets(tweets, {"sortby":filters.sorted, "order":filters.order});
var displayTweets = tweets.reverse().slice(0, 100).reverse(); var displayTweets = tweets.reverse().slice(0, 100).reverse();
if(displayTweets.length == 0) {
parent.replaceChildren();
return
}
if(!paused) { if(!paused) {
if(tweetCell(displayTweets[0]) != lastTweet){ if(tweetCell(displayTweets[0]) != lastTweet){
parent.replaceChildren(); parent.replaceChildren();
@@ -83,6 +91,7 @@ $(window).on("filter", function() {
} }
}) })
// toggle html for the sorting dropdown menu
$(".current-sort").on("click", function() { $(".current-sort").on("click", function() {
$(".sort-dropdown-list li:not(:first-of-type)").toggle() $(".sort-dropdown-list li:not(:first-of-type)").toggle()
}) })
@@ -96,7 +105,7 @@ $(".sort-dropdown-list li:not(:first-of-type)").on("click", function() {
$(".current-sort").html($(this).html()) $(".current-sort").html($(this).html())
}) })
// toggle ordering between ascending or descending and changing arrow to match
$(".order-btn").on("click", function() { $(".order-btn").on("click", function() {
if($(this).html() == "arrow_downward") { // Descending to ascending if($(this).html() == "arrow_downward") { // Descending to ascending
$(this).html("arrow_upward") $(this).html("arrow_upward")
@@ -109,6 +118,7 @@ $(".order-btn").on("click", function() {
showFeeds() showFeeds()
}) })
//functions that get called in HTML onchange attributes to trigger filters
function updateSearched(searched){ function updateSearched(searched){
searched = searched.split(","); searched = searched.split(",");
filters.searchedWords = searched; filters.searchedWords = searched;
@@ -130,6 +140,7 @@ function updateSort(sort){
showFeeds() showFeeds()
} }
// toggle between paused and unpaused
$(".pause-btn").on("click", function() { $(".pause-btn").on("click", function() {
if($(".pause-btn").html() == "pause") { // Unpaused to paused if($(".pause-btn").html() == "pause") { // Unpaused to paused
$(".pause-btn").html("play_arrow") $(".pause-btn").html("play_arrow")

View File

@@ -87,11 +87,11 @@ block.fn.tweets = function(config) {
} }
window.sessionStorage.setItem('tweets', JSON.stringify(tweets)); window.sessionStorage.setItem('tweets', JSON.stringify(tweets));
if(!paused) { if(!paused) {
// remove tweets // remove tweets
$list.replaceChildren(); $list.replaceChildren();
var displayTweets = tweets.reverse().slice(0, options.memory).reverse(); var displayTweets = tweets.reverse().slice(0, options.memory).reverse();
for (i = 0; i < Math.min(options.memory-1, displayTweets.length); i++){ for (i = 0; i < Math.min(options.memory-1, displayTweets.length); i++){
$list.prepend(tweetCell(displayTweets[i])); $list.prepend(tweetCell(displayTweets[i]));
} }
} }

View File

@@ -150,13 +150,13 @@ body {
} }
.tweet-nickname:hover { .tweet-nickname:hover {
color: white; color: var(--main-light);
text-decoration: underline; text-decoration: underline;
font-weight: bold; font-weight: bold;
} }
.tweet-text { .tweet-text {
color: white; color: var(--main-light);
text-decoration: none; text-decoration: none;
} }