`;
// #serviceLnb 하위에 HTML 삽입
const serviceLnbElement = document.getElementById('sidebar');
if (serviceLnbElement) {
serviceLnbElement.insertAdjacentHTML('beforeend', newHtml);
}
try {
// 응답에서 필요한 정보 추출
const jsonData = response;
// 데이터 배열을 순회하면서 각각의 객체에서 broad_info를 확인합니다.
jsonData.data.forEach(item => {
// broad_info가 비어있는지 확인합니다.
if (item.broad_info.length === 0) { //비방
//console.log(`broad_info is empty for user ${item.user_nick}`);
} else { //방송중
// broad_info가 비어있지 않은 경우, 여러가지 작업을 수행할 수 있습니다.
//console.log(`broad_info is not empty for user ${item.user_nick}`);
// users-section에 동적으로 user 요소 추가
const usersSection = document.querySelector('.users-section.follow');
const userElement = createUserElement(item.broad_info[0]);
usersSection.appendChild(userElement);
}
});
document.querySelector('.users-section.follow').classList.add('loaded');
} catch (error) {
console.error('Error parsing JSON:', error);
}
}
function insertMyplusChannels(){
// 특정 HTML 삽입
const newHtml = `
MY+ 추천 채널
추천 채널이 없습니다
`;
// #serviceLnb 하위에 HTML 삽입
const serviceLnbElement = document.getElementById('sidebar');
if (serviceLnbElement) {
serviceLnbElement.insertAdjacentHTML('beforeend', newHtml);
}
GM_xmlhttpRequest({
method: 'GET',
url: 'https://live.afreecatv.com/api/myplus/preferbjLiveVodController.php?nInitCnt=6&szRelationType=C',
headers: {
'Content-Type': 'application/json',
},
onload: function(response) {
try {
// 응답을 JSON으로 파싱
const jsonResponse = JSON.parse(response.responseText);
// 응답에서 필요한 정보 추출
const channels = jsonResponse.DATA.live_list;
if(channels.length!==0){
const noti = document.querySelector('.twitch-message-section.myplus');
noti.style.display = 'none';
}
// users-section에 동적으로 user 요소 추가
const usersSection = document.querySelector('.users-section.myplus');
channels.forEach(channel => {
const userElement = createUserElement(channel);
usersSection.appendChild(userElement);
});
usersSection.classList.add('loaded');
} catch (error) {
console.error('Error parsing JSON:', error);
}
},
onerror: function(error) {
console.error('Error:', error);
}
});
}
function makethumbnailtooltip(){
// HTMLCollection을 가져옴
const elements = document.getElementsByClassName('user');
const tooltipcontainer = document.getElementsByClassName('tooltip-container')[0];
// 각 요소에 대해 반복하면서 이벤트 리스너 추가
for (const element of elements) {
element.addEventListener('mouseenter', function() {
const rect = this.getBoundingClientRect();
const elementX = rect.left + 240; // 요소의 X 좌표
const elementY = rect.top; // 요소의 Y 좌표
//console.log(elementX,elementY);
// 각 툴팁에 대해 위치 설정
const imgSrc = this.getAttribute('broad_thumnail');
const broad_title = this.getAttribute('tooltip');
// 새로운 div 요소를 생성하고 스타일과 내용을 설정
tooltipcontainer.style.left = `${elementX}px`;
tooltipcontainer.style.top = `${elementY}px`;
tooltipcontainer.innerHTML = `
${broad_title}
`;
tooltipcontainer.style.display = 'block';
});
element.addEventListener('mouseleave', function() {
tooltipcontainer.style.display = 'none';
});
}
}
function showMore_myplus(n){
const userContainer = document.querySelector('.users-section.myplus');
const users = userContainer.querySelectorAll('.user');
if (users.length < n+1){
return false;
}
users.forEach((user, index) => {
if (index >= n) {
user.classList.add('show-more');
}
});
// 동적으로 버튼 생성 및 삽입
const toggleButton = document.createElement('button');
toggleButton.textContent = `더 보기 (${users.length - n})`;
toggleButton.id = 'toggleButton';
userContainer.appendChild(toggleButton);
const toggle_button = document.getElementById('toggleButton');
toggle_button.addEventListener('click', function () {
const users = userContainer.querySelectorAll('.user');
const hiddenUsers = users.length - n; // 숨겨진 요소의 개수 계산
const lastUser = users[users.length - 1];
if (lastUser.classList.contains('show-more')) {
// 더 보기를 눌렀을 때
toggleButton.textContent = `접기`;
users.forEach((user, index) => {
if (index >= n) {
user.classList.remove('show-more');
}
});
} else {
// 접기를 눌렀을 때
toggleButton.textContent = `더 보기 (${hiddenUsers})`;
users.forEach((user, index) => {
if (index >= n) {
user.classList.add('show-more');
}
});
}
});
}
function showMore_follow(n){
const userContainer = document.querySelector('.users-section.follow');
const users = userContainer.querySelectorAll('.user');
if (users.length < n+1){
return false;
}
users.forEach((user, index) => {
if (index >= n) {
user.classList.add('show-more');
}
});
// 동적으로 버튼 생성 및 삽입
const toggleButton = document.createElement('button');
toggleButton.textContent = `더 보기 (${users.length - n})`;
toggleButton.id = 'toggleButton2';
userContainer.appendChild(toggleButton);
const toggle_button = document.getElementById('toggleButton2');
toggle_button.addEventListener('click', function () {
const users = userContainer.querySelectorAll('.user');
const hiddenUsers = users.length - n; // 숨겨진 요소의 개수 계산
const lastUser = users[users.length - 1];
if (lastUser.classList.contains('show-more')) {
// 더 보기를 눌렀을 때
toggleButton.textContent = `접기`;
users.forEach((user, index) => {
if (index >= n) {
user.classList.remove('show-more');
}
});
} else {
// 접기를 눌렀을 때
toggleButton.textContent = `더 보기 (${hiddenUsers})`;
users.forEach((user, index) => {
if (index >= n) {
user.classList.add('show-more');
}
});
}
});
}
function showMore_top(n){
const userContainer = document.querySelector('.users-section.top');
const users = userContainer.querySelectorAll('.user');
if (users.length < n+1){
return false;
}
users.forEach((user, index) => {
if (index >= n) {
user.classList.add('show-more');
}
});
// 동적으로 버튼 생성 및 삽입
const toggleButton = document.createElement('button');
toggleButton.textContent = `더 보기 (${users.length - n})`;
toggleButton.id = 'toggleButton3';
userContainer.appendChild(toggleButton);
const toggle_button = document.getElementById('toggleButton3');
toggle_button.addEventListener('click', function () {
const users = userContainer.querySelectorAll('.user');
const hiddenUsers = users.length - n; // 숨겨진 요소의 개수 계산
const lastUser = users[users.length - 1];
if (lastUser.classList.contains('show-more')) {
// 더 보기를 눌렀을 때
toggleButton.textContent = `접기`;
users.forEach((user, index) => {
if (index >= n) {
user.classList.remove('show-more');
}
});
} else {
// 접기를 눌렀을 때
toggleButton.textContent = `더 보기 (${hiddenUsers})`;
users.forEach((user, index) => {
if (index >= n) {
user.classList.add('show-more');
}
});
}
});
}
function removeDuplicates(){
if(document.querySelectorAll('.users-section.follow > .user').length ===0){
return false;
}
// .users-section.follow > .user 모든 요소 반복
document.querySelectorAll('.users-section.follow > .user').forEach(followUser => {
const followUserId = followUser.getAttribute('user_id');
// .users-section.myplus > .user 모든 요소 반복
document.querySelectorAll('.users-section.myplus > .user').forEach(myplusUser => {
const myplusUserId = myplusUser.getAttribute('user_id');
// user_id 일치 여부 확인
if (followUserId === myplusUserId) {
// 일치할 경우 .user 요소 제거
myplusUser.remove();
}
});
});
}
// HTML 요소를 가져옵니다.
const htmlElement = document.querySelector('html');
// dark 속성의 값을 확인합니다.
const isDarkMode = htmlElement.getAttribute('dark') === 'true';
if(isDarkMode){
GM_addStyle(css_Darkmode);
} else {
GM_addStyle(css_Whitemode);
}
var listsection = document.querySelector('#list-section');
// .left_navbar를 찾거나 생성
var leftNavbar = document.querySelector('.left_navbar');
if (!leftNavbar) {
leftNavbar = document.createElement('div');
leftNavbar.className = 'left_navbar';
// 페이지의 적절한 위치에 추가
var targetElement = document.body; // 원하는 위치에 따라 수정
targetElement.insertBefore(leftNavbar, targetElement.firstChild);
}
// 새로운 버튼을 만들기
var newButton = document.createElement('a');
newButton.href = 'https://www.afreecatv.com/?hash=all';
newButton.innerHTML = '';
var newButton2 = document.createElement('a');
newButton2.href = 'https://www.afreecatv.com/?hash=game';
newButton2.innerHTML = '';
var newButton3 = document.createElement('a');
newButton3.href = 'https://www.afreecatv.com/?hash=bora';
newButton3.innerHTML = '';
var newButton4 = document.createElement('a');
newButton4.href = 'https://www.afreecatv.com/?hash=sports';
newButton4.innerHTML = '';
var tooltipContainer = document.createElement('div');
tooltipContainer.classList.add('tooltip-container');
// .left_navbar에 버튼 삽입
listsection.appendChild(tooltipContainer);
leftNavbar.appendChild(newButton4);
leftNavbar.appendChild(newButton3);
leftNavbar.appendChild(newButton2);
leftNavbar.appendChild(newButton);
waitForElement('.left_nav_button', function (elementSelector, element) {
// Get the current page URL
const currentPage = window.location.href;
// Get all navigation links
const navLinks = document.querySelectorAll('.left_nav_button');
// Loop through each link and check if it matches the current page
navLinks.forEach(link => {
var parentLink = link.parentElement;
if (parentLink.href === currentPage) {
link.classList.add('active'); // Add the 'active' class if it matches
}
});
});
GM_xmlhttpRequest({
method: 'GET',
url: 'https://myapi.afreecatv.com/api/favorite',
headers: {
'Content-Type': 'application/json',
},
onload: function(response) {
// 응답 수정
response = response.responseText;
response = JSON.parse(response);
//console.log(response);
// if 문으로 code 값 확인
if (response.code === -10000) {
//console.log('로그인 상태가 아닙니다.');
insertTopChannels();
waitForElement('.users-section.top.loaded', function (elementSelector, element) {
makethumbnailtooltip();
});
return false;
}
let hasNonEmptyBroadInfo = false;
// "data" 배열의 각 요소를 확인하는 반복문
for (const item of response.data) {
// "broad_info"가 비어 있지 않은 경우
if (item.broad_info.length > 0) {
hasNonEmptyBroadInfo = true;
// 여기에 해당 요소에 대한 추가 동작을 수행할 수 있습니다.
break; // 만약 하나라도 비어 있지 않은 경우에 중단하려면 이 부분을 사용합니다.
}
}
if (response.data.length === 0) {
//console.log('즐찾이 없습니다.');
if(myplus_position){
insertMyplusChannels();
insertTopChannels();
} else {
insertTopChannels();
insertMyplusChannels();
}
waitForElement('.users-section.myplus.loaded', function (elementSelector, element) {
waitForElement('.users-section.top.loaded', function (elementSelector, element) {
makethumbnailtooltip();
});
});
waitForElement('.users-section.myplus.loaded', function (elementSelector, element) {
if(!myplus_order){
desc_order('.users-section.myplus');
}
showMore_myplus(display_myplus);
});
waitForElement('.users-section.top.loaded', function (elementSelector, element) {
showMore_top(display_top);
});
} else if (hasNonEmptyBroadInfo) { // 즐찾 중 방송중인 스트리머가 한 명 이상
insertFavoriteChannels(response);
if(myplus_position){
insertMyplusChannels();
insertTopChannels();
} else {
insertTopChannels();
insertMyplusChannels();
}
waitForElement('.users-section.follow.loaded', function (elementSelector, element) {
waitForElement('.users-section.myplus.loaded', function (elementSelector, element) {
removeDuplicates();
waitForElement('.users-section.top.loaded', function (elementSelector, element) {
makethumbnailtooltip();
});
});
});
waitForElement('.users-section.follow.loaded', function (elementSelector, element) {
desc_order('.users-section.follow');
showMore_follow(display_follow);
});
waitForElement('.users-section.myplus.loaded', function (elementSelector, element) {
if(!myplus_order){
desc_order('.users-section.myplus');
}
showMore_myplus(display_myplus);
});
waitForElement('.users-section.top.loaded', function (elementSelector, element) {
showMore_top(display_top);
});
} else { // 즐찾은 있지만 전부 비방
const newHtml = `