210 lines
No EOL
10 KiB
JavaScript
Executable file
210 lines
No EOL
10 KiB
JavaScript
Executable file
var SelectedFriends = []
|
|
|
|
chrome.storage.sync.get(['PolyPlus_Settings'], function(result){
|
|
Settings = result.PolyPlus_Settings;
|
|
if (Settings.ImprovedFrListsOn === true) {
|
|
var Tab = "requests"
|
|
|
|
var FriendsContainer = document.getElementById('friends-container')
|
|
var Container = document.createElement('div')
|
|
Container.classList = 'row mb-3'
|
|
Container.innerHTML = `
|
|
<div class="col"><button id="AccAllFrBtn" class="btn btn-success w-100">Accept all Friend Request(s)</button></div>
|
|
<div class="col"><button id="DelAllFrBtn" class="btn btn-danger w-100">Decline all Friend Request(s)</button></div>
|
|
`
|
|
FriendsContainer.parentElement.insertBefore(Container, FriendsContainer)
|
|
var AccAllFrBtn = document.getElementById('AccAllFrBtn')
|
|
var DelAllFrBtn = document.getElementById('DelAllFrBtn')
|
|
var AccBtns = document.querySelectorAll('[onclick="acceptFriendRequest(this)"]')
|
|
var DelBtns = document.querySelectorAll('[onclick="declineFriendRequest(this)"]')
|
|
if (!(AccBtns.length === 0)) {
|
|
AccAllFrBtn.addEventListener('click', function(){
|
|
AccBtns.forEach(element => {
|
|
setTimeout(function () {}, 145)
|
|
fetch('https://polytoria.com/api/friends/send', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': document.querySelector('input[name="_csrf"]').value
|
|
},
|
|
body: JSON.stringify({ userID: parseInt(element.getAttribute('data-user-id')) }),
|
|
})
|
|
.catch(error => {
|
|
// Handle any errors
|
|
console.error('Error:', error);
|
|
Success = false
|
|
});
|
|
|
|
/*
|
|
let NewAcceptBtn = document.createElement('a')
|
|
NewAcceptBtn.style.display = 'none'
|
|
sNewAcceptBtn.classList = 'btn btn-success'
|
|
NewAcceptBtn.setAttribute('data-user-id', element.getAttribute('data-user-id'))
|
|
NewAcceptBtn.setAttribute('onclick', 'acceptFriendRequest(this)')
|
|
FriendsContainer.appendChild(NewAcceptBtn)
|
|
NewAcceptBtn.click();
|
|
*/
|
|
})
|
|
});
|
|
} else {
|
|
AccAllFrBtn.setAttribute('disabled', 'true')
|
|
}
|
|
if (!(DelBtns.length === 0)) {
|
|
DelAllFrBtn.addEventListener('click', function(){
|
|
DelBtns.forEach(element => {
|
|
setTimeout(function () {}, 110)
|
|
fetch('https://polytoria.com/api/friends/remove', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': document.querySelector('input[name="_csrf"]').value
|
|
},
|
|
body: JSON.stringify({ userID: parseInt(element.getAttribute('data-user-id')) }),
|
|
})
|
|
.catch(error => {
|
|
// Handle any errors
|
|
console.error('Error:', error, document.querySelector('input[name="_csrf"]').value);
|
|
Success = false
|
|
});
|
|
|
|
/*
|
|
let NewDeclineBtn = document.createElement('a')
|
|
NewDeclineBtn.style.display = 'none'
|
|
NewDeclineBtn.classList = 'btn btn-danger'
|
|
NewDeclineBtn.setAttribute('data-user-id', element.getAttribute('data-user-id'))
|
|
NewDeclineBtn.setAttribute('onclick', 'declineFriendRequest(this)')
|
|
FriendsContainer.appendChild(NewDeclineBtn)
|
|
NewDeclineBtn.click();
|
|
*/
|
|
})
|
|
});
|
|
} else {
|
|
DelAllFrBtn.setAttribute('disabled', 'true')
|
|
}
|
|
let Text = document.createElement('p')
|
|
Text.classList = 'mx-auto'
|
|
Text.style.textAlign = 'center'
|
|
Text.style.fontSize = '1.3rem'
|
|
Text.style.display = 'none'
|
|
Text.innerHTML = `
|
|
<span>0</span> friends selected!
|
|
<br>
|
|
<button id="viewSelectionBtn" class="btn btn-primary">View Selection</button>
|
|
<button id="clearSelectionBtn" class="btn btn-warning">Clear Selection</button>
|
|
<button id="removeSelectionBtn" class="btn btn-danger">Remove Selected Friends</button>
|
|
`
|
|
FriendsContainer.parentElement.insertBefore(Text, FriendsContainer)
|
|
let Text_Span = Text.querySelector('span');
|
|
let Text_View = document.getElementById('viewSelectionBtn');
|
|
let Text_Clear = document.getElementById('clearSelectionBtn');
|
|
let Text_Remove = document.getElementById('removeSelectionBtn');
|
|
document.querySelector('[data-friends-tab="requests"]').addEventListener('click', function(){
|
|
Tab = "requests"
|
|
Container.style.display = '';
|
|
Text.style.display = 'none';
|
|
document.querySelectorAll('input[type="check"]').forEach(element => {element.remove();});
|
|
});
|
|
document.querySelector('[data-friends-tab="friends"]').addEventListener('click', function(){
|
|
Tab = "friends"
|
|
Container.style.display = 'none';
|
|
Text.style.display = '';
|
|
});
|
|
var ConfirmRemove = 0
|
|
Text_View.addEventListener('click', function(){});
|
|
Text_Clear.addEventListener('click', function(){
|
|
SelectedFriends = []
|
|
UpdateCheckboxes();
|
|
Text_Span.innerText = SelectedFriends.length
|
|
});
|
|
Text_Remove.addEventListener('click', function(){
|
|
ConfirmRemove = ConfirmRemove + 1
|
|
switch(ConfirmRemove) {
|
|
case 0:
|
|
Text_Remove.innerText = 'Remove Selected Friends'
|
|
break
|
|
case 1:
|
|
Text_Remove.innerText = 'Are you sure?'
|
|
break
|
|
case 2:
|
|
for (let i = 0; i < SelectedFriends.length; i++) {
|
|
setTimeout(function () {}, 110)
|
|
let NewDeclineBtn = document.createElement('a')
|
|
NewDeclineBtn.style.display = 'none'
|
|
NewDeclineBtn.classList = 'btn btn-danger'
|
|
NewDeclineBtn.setAttribute('data-user-id', SelectedFriends[i])
|
|
NewDeclineBtn.setAttribute('onclick', 'declineFriendRequest(this)')
|
|
FriendsContainer.appendChild(NewDeclineBtn)
|
|
NewDeclineBtn.click();
|
|
}
|
|
SelectedFriends = []
|
|
UpdateCheckboxes();
|
|
Text_Remove.innerText = 'Remove Selected Friends'
|
|
ConfirmRemove = 0
|
|
break
|
|
}
|
|
});
|
|
|
|
const observer = new MutationObserver(function (){
|
|
if (FriendsContainer.children.length > 0 && Tab === "friends") {
|
|
LoadCheckBoxes();
|
|
}
|
|
});
|
|
observer.observe(FriendsContainer, {childList: true, subtree: false});
|
|
|
|
function LoadCheckBoxes() {
|
|
Array.from(FriendsContainer.children).forEach(element => {
|
|
let DeclineBtn = element.querySelector('a.btn.btn-danger')
|
|
let UserID = DeclineBtn.getAttribute('data-user-id')
|
|
let Column = document.createElement('div')
|
|
let EditColumn = element.querySelector('.col-9')
|
|
Column.classList = 'col-auto'
|
|
var NewCheckBox = document.createElement('button')
|
|
NewCheckBox.classList = 'polyplus-multiremovefr-checkbox'
|
|
NewCheckBox.setAttribute('style', 'padding: 20px; background-color: #191919; border: 1px solid #393939; border-radius: 1rem;')
|
|
var Index = SelectedFriends.indexOf(UserID)
|
|
if (Index !== -1) {
|
|
DeclineBtn.classList.add('disabled')
|
|
NewCheckBox.style.borderColor = 'lime'
|
|
}
|
|
EditColumn.classList.remove('col-9')
|
|
EditColumn.classList.add('col')
|
|
Column.appendChild(NewCheckBox)
|
|
EditColumn.parentElement.appendChild(Column)
|
|
NewCheckBox.addEventListener('click', function(){
|
|
var Index = SelectedFriends.indexOf(UserID)
|
|
if (Index === -1) {
|
|
DeclineBtn.classList.add('disabled')
|
|
SelectedFriends.push(UserID)
|
|
NewCheckBox.style.borderColor = 'lime'
|
|
} else {
|
|
SelectedFriends.splice(Index, 1)
|
|
NewCheckBox.style.borderColor = '#393939'
|
|
DeclineBtn.classList.remove('disabled')
|
|
}
|
|
Text_Span.innerText = SelectedFriends.length
|
|
UpdateCheckboxes();
|
|
});
|
|
});
|
|
}
|
|
|
|
function UpdateCheckboxes(){
|
|
document.querySelectorAll('.polyplus-multiremovefr-checkbox').forEach(element => {
|
|
let Parent = element.parentElement.parentElement.parentElement.parentElement.parentElement
|
|
let DeclineBtn = Parent.querySelector('a.btn.btn-danger')
|
|
if (element.getAttribute('disabled')) {
|
|
element.removeAttribute('disabled')
|
|
}
|
|
if (SelectedFriends.IndexOf(DeclineBtn.getAttribute('data-user-id')) === -1) {
|
|
element.style.borderColor = '#393939'
|
|
DeclineBtn.classList.remove('disabled')
|
|
if (SelectedFriends.length >= 25) {
|
|
element.setAttribute('disabled', true)
|
|
}
|
|
} else {
|
|
DeclineBtn.classList.add('disabled')
|
|
element.style.borderColor = 'lime'
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}); |