let user = {};
let bookmarkCursor = null;
let end = false;
let linkColors = {};
let activeTweet;
function updateUserData() {
API.account.verifyCredentials().then(async u => {
user = u;
userDataFunction(u);
renderUserData();
}).catch(e => {
if (e === "Not logged in") {
window.location.href = "https://twitter.com/i/flow/login?newtwitter=true";
}
console.error(e);
});
}
// Render
function renderUserData() {
document.getElementById('user-name').innerText = user.name;
document.getElementById('user-name').classList.toggle('user-verified', user.verified);
document.getElementById('user-name').classList.toggle('user-protected', user.protected);
document.getElementById('user-handle').innerText = `@${user.screen_name}`;
document.getElementById('user-tweets').innerText = Number(user.statuses_count).toLocaleString().replace(/\s/g, ',');
if(user.statuses_count >= 100000) {
let style = document.createElement('style');
style.innerText = `
.user-stat-div > h1 { font-size: 18px !important }
.user-stat-div > h2 { font-size: 13px !important }
`;
document.head.appendChild(style);
}
document.getElementById('user-following').innerText = Number(user.friends_count).toLocaleString().replace(/\s/g, ',');
document.getElementById('user-followers').innerText = Number(user.followers_count).toLocaleString().replace(/\s/g, ',');
document.getElementById('user-banner').src = user.profile_banner_url;
document.getElementById('user-avatar').src = `${(user.default_profile_image && vars.useOldDefaultProfileImage) ? chrome.runtime.getURL(`images/default_profile_images/default_profile_${Number(user.id_str) % 7}_normal.png`): user.profile_image_url_https}`.replace('_normal.', '_400x400.');
document.getElementById('wtf-viewall').href = `https://twitter.com/i/connect_people?newtwitter=true&user_id=${user.id_str}`;
document.getElementById('user-avatar-link').href = `https://twitter.com/${user.screen_name}`;
document.getElementById('user-info').href = `https://twitter.com/${user.screen_name}`;
if(vars.enableTwemoji) twemoji.parse(document.getElementById('user-name'));
if(document.getElementById('user-stats').clientWidth > 300) {
let style = document.createElement('style');
style.innerHTML = `.user-stat-div > h2 { font-size: 10px !important }`;
document.head.appendChild(style);
}
}
async function renderBookmarks(cursor) {
let bookmarks;
let bookmarksContainer = document.getElementById('timeline');
try {
bookmarks = await API.bookmarks.get(cursor);
} catch(e) {
console.error(e);
bookmarksContainer.innerHTML = `
${e}
`;
document.getElementById('loading-box').hidden = true;
return;
}
if (bookmarks.cursor) {
bookmarkCursor = bookmarks.cursor;
} else {
end = true;
}
bookmarks = bookmarks.list;
if(bookmarks.length === 0 && !cursor) {
bookmarksContainer.innerHTML = `${LOC.empty.message}
`;
document.getElementById('delete-all').hidden = true;
return;
}
if(bookmarks.length === 0 && cursor) {
end = true;
return;
}
for (let i = 0; i < bookmarks.length; i++) {
let b = bookmarks[i];
await appendTweet(b, bookmarksContainer, {
bigFont: b.full_text && b.full_text.length < 75
});
}
document.getElementById('loading-box').hidden = true;
}
let lastScroll = Date.now();
let loadingNewTweets = false;
let lastTweetDate = 0;
setTimeout(async () => {
if(!vars) {
await loadVars();
}
// weird bug
try {
document.getElementById('wtf-refresh').addEventListener('click', async () => {
renderDiscovery(false);
});
} catch(e) {
setTimeout(() => location.reload(), 500);
console.error(e);
return;
}
document.addEventListener('scroll', async () => {
lastScroll = Date.now();
// find active tweet by scroll amount
if(Date.now() - lastTweetDate > 50) {
lastTweetDate = Date.now();
let tweets = Array.from(document.getElementsByClassName('tweet'));
let scrollPoint = scrollY + innerHeight/2;
let newActiveTweet = tweets.find(t => scrollPoint > t.offsetTop && scrollPoint < t.offsetTop + t.offsetHeight);
if(!activeTweet || (newActiveTweet && !activeTweet.className.startsWith(newActiveTweet.className))) {
if(activeTweet) {
activeTweet.classList.remove('tweet-active');
}
if(newActiveTweet) newActiveTweet.classList.add('tweet-active');
if(vars.autoplayVideos && !document.getElementsByClassName('modal')[0]) {
if(activeTweet) {
let video = activeTweet.querySelector('.tweet-media > video[controls]');
if(video) {
video.pause();
}
}
if(newActiveTweet) {
let newVideo = newActiveTweet.querySelector('.tweet-media > video[controls]');
let newVideoOverlay = newActiveTweet.querySelector('.tweet-media > .tweet-media-video-overlay');
if(newVideo && !newVideo.ended) {
newVideo.play();
} else if(newVideoOverlay && !newVideoOverlay.style.display) {
newVideoOverlay.click();
}
}
}
activeTweet = newActiveTweet;
}
}
// loading new tweets
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 500 && !end) {
if (loadingNewTweets) return;
loadingNewTweets = true;
await renderBookmarks(bookmarkCursor);
setTimeout(() => {
loadingNewTweets = false;
}, 250);
}
}, { passive: true });
document.getElementById('delete-all').addEventListener('click', async () => {
let modal = createModal(`
${LOC.delete_bookmarks.message}
`);
modal.getElementsByClassName('nice-button')[0].addEventListener('click', () => {
API.bookmarks.deleteAll().then(() => {
document.getElementById('timeline').innerHTML = `${LOC.empty.message}
`;
document.getElementById('delete-all').hidden = true;
modal.remove();
});
});
});
// Run
updateUserData();
renderDiscovery();
renderTrends();
renderBookmarks();
setInterval(updateUserData, 60000 * 3);
setInterval(() => renderDiscovery(false), 60000 * 15);
setInterval(renderTrends, 60000 * 5);
}, 50);