// ==UserScript==
// @name Camwhores.tv Evolution
// @description This script adds useful configurable features to the camwhores.tv site.
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAMUExURQAAAP8ANwwA/////7gbQJkAAAABdFJOUwBA5thmAAAAAWJLR0QDEQxM8gAAAAd0SU1FB+gDHhIuCjXV/h8AAAA4SURBVAjXY2ANDQ1gEA0NDWEIYWBgZAhgAAIUghEiC1YHBhpMDRpIhBbXghUMXKtWLWBgWqHVAACjlwz/pN0YPwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0wMy0zMFQxODo0NjowOSswMDowME+iXNIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMDMtMzBUMTg6NDY6MDkrMDA6MDA+/+RuAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI0LTAzLTMwVDE4OjQ2OjEwKzAwOjAwMNiA/AAAAABJRU5ErkJggg==
// @version 1.2.1
// @license MIT
// @namespace cw-evolution
// @match https://www.camwhores.tv/*
// @match https://camwhores.tv/*
// @exclude *.camwhores.tv/*mode=async*
// @grant none
// ==/UserScript==
if (!location.href.startsWith('https://www.')) {
location.href = location.href.replace('https://', 'https://www.');
return;
}
var config = Object.assign(
{
extendItemInformation: false,
removeLocked: false,
infiniteScroll: false,
muteVideoOnLoad: false,
customStyles: false,
},
JSON.parse(localStorage.getItem('cw-evolution-config'))
);
var icons = {
circleNotch: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z"/></svg>',
lightbulb: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M297.2 248.9C311.6 228.3 320 203.2 320 176c0-70.7-57.3-128-128-128S64 105.3 64 176c0 27.2 8.4 52.3 22.8 72.9c3.7 5.3 8.1 11.3 12.8 17.7l0 0c12.9 17.7 28.3 38.9 39.8 59.8c10.4 19 15.7 38.8 18.3 57.5H109c-2.2-12-5.9-23.7-11.8-34.5c-9.9-18-22.2-34.9-34.5-51.8l0 0 0 0c-5.2-7.1-10.4-14.2-15.4-21.4C27.6 247.9 16 213.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176c0 37.3-11.6 71.9-31.4 100.3c-5 7.2-10.2 14.3-15.4 21.4l0 0 0 0c-12.3 16.8-24.6 33.7-34.5 51.8c-5.9 10.8-9.6 22.5-11.8 34.5H226.4c2.6-18.7 7.9-38.6 18.3-57.5c11.5-20.9 26.9-42.1 39.8-59.8l0 0 0 0 0 0c4.7-6.4 9-12.4 12.7-17.7zM192 128c-26.5 0-48 21.5-48 48c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16s-7.2 16-16 16zm0 384c-44.2 0-80-35.8-80-80V416H272v16c0 44.2-35.8 80-80 80z"/></svg>',
eraser: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z"/></svg>',
infinite: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 241.1C0 161 65 96 145.1 96c38.5 0 75.4 15.3 102.6 42.5L320 210.7l72.2-72.2C419.5 111.3 456.4 96 494.9 96C575 96 640 161 640 241.1v29.7C640 351 575 416 494.9 416c-38.5 0-75.4-15.3-102.6-42.5L320 301.3l-72.2 72.2C220.5 400.7 183.6 416 145.1 416C65 416 0 351 0 270.9V241.1zM274.7 256l-72.2-72.2c-15.2-15.2-35.9-23.8-57.4-23.8C100.3 160 64 196.3 64 241.1v29.7c0 44.8 36.3 81.1 81.1 81.1c21.5 0 42.2-8.5 57.4-23.8L274.7 256zm90.5 0l72.2 72.2c15.2 15.2 35.9 23.8 57.4 23.8c44.8 0 81.1-36.3 81.1-81.1V241.1c0-44.8-36.3-81.1-81.1-81.1c-21.5 0-42.2 8.5-57.4 23.8L365.3 256z"/></svg>',
mute: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM425 167l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z"/></svg>',
brush: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M339.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L568.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S517.7-4.4 499.1 9.6L262.4 187.2c-24 18-38.2 46.1-38.4 76.1L339.3 367.1zm-19.6 25.4l-116-104.4C143.9 290.3 96 339.6 96 400c0 3.9 .2 7.8 .6 11.6C98.4 429.1 86.4 448 68.8 448H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H208c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg>',
download: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>',
thumbsUp: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2H464c26.5 0 48 21.5 48 48c0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1c4.4 7.3 6.9 15.8 6.9 24.9c0 21.3-13.9 39.4-33.1 45.6c.7 3.3 1.1 6.8 1.1 10.4c0 26.5-21.5 48-48 48H294.5c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3V320 272 247.1c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192H96c17.7 0 32 14.3 32 32V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V224c0-17.7 14.3-32 32-32z"/></svg>',
};
function injectedScript(config, icons) {
var processItems = () => {
var friendRequestAEl = document.querySelector(
'#list_messages_my_conversation_messages h2 a:last-child:not(.processed)'
);
if (friendRequestAEl) {
friendRequestAEl.classList.add('processed');
var profileReq = new XMLHttpRequest();
profileReq.responseType = 'document';
profileReq.addEventListener('load', function () {
var videoCountEl;
this.response.querySelectorAll('.item').forEach((it) => {
if (it.innerText.includes('Posted:')) {
videoCountEl = it;
}
});
if (videoCountEl) {
var userVideoCount = +videoCountEl.innerText.replace('Posted:', '').split(',')[0].replace('videos', '').trim();
userVideoCount = isNaN(userVideoCount) ? 0 : userVideoCount;
var videosRefEl = document.createElement('a');
videosRefEl.classList.add('processed');
videosRefEl.href = friendRequestAEl.href + 'videos/';
videosRefEl.innerText += `(Videos: ${userVideoCount})`;
videosRefEl.style.marginLeft = '4px';
friendRequestAEl.parentNode.insertBefore(videosRefEl, friendRequestAEl.nextSibling);
}
});
profileReq.open('GET', friendRequestAEl.href);
profileReq.send();
return;
}
var videoEl = document.querySelector('video:not(.processed)');
if (videoEl) {
videoEl.classList.add('processed');
var liEl = document.createElement('li');
liEl.innerHTML = `<a href="${videoEl.src}" class="toggle-button download-button" target="_blank">${icons.download}</a>`;
document.querySelector('.tabs-menu > ul').appendChild(liEl);
}
if (!config.extendItemInformation && !config.removeLocked) {
return;
}
document.querySelectorAll('.item:not(.processed)').forEach((it) => {
if (it.classList.contains('processed')) {
return;
}
it.classList.add('processed');
var privateEl = it.querySelector('.line-private');
var isNonPrivate = privateEl === null;
if (!privateEl) {
var imgWrapperEl = it.querySelector('.img');
if (imgWrapperEl) {
privateEl = document.createElement('a');
privateEl.target = config.infiniteScroll ? '_blank' : '_self';
privateEl.classList.add('line-private');
imgWrapperEl.appendChild(privateEl);
}
} else {
var aEl = document.createElement('a');
aEl.target = config.infiniteScroll ? '_blank' : '_self';
aEl.classList.add('line-private');
privateEl.parentElement.replaceChild(aEl, privateEl);
privateEl = aEl;
}
if (!privateEl) {
return;
}
var lockedContainerIds = [
'list_members_my_conversations_items',
'list_members_my_friends_items',
'list_members_friends_items',
];
if (
lockedContainerIds.includes(it.parentElement.id) ||
lockedContainerIds.includes(it.parentElement.parentElement.id)
) {
return;
}
var loaderEl = document.createElement('div');
if (config.extendItemInformation) {
loaderEl.classList.add('loader');
loaderEl.innerHTML = icons.circleNotch;
privateEl.parentElement.appendChild(loaderEl);
}
privateEl.style.opacity = 0;
var req = new XMLHttpRequest();
req.responseType = 'document';
req.addEventListener('load', function () {
var usernameLinkEl = this.response.querySelector('.username > a');
privateEl.href = usernameLinkEl.href;
if (!this.response.querySelector('.message') || !config.removeLocked) {
it.querySelector('img').style.opacity = '1';
privateEl.innerText = this.response.querySelector('.username').innerText.trim();
privateEl.style.color = 'black';
privateEl.classList.add('with-transition');
privateEl.style.opacity = 0.7;
loaderEl.style.opacity = 0;
loaderEl.style['pointer-events'] = 'none';
}
if (config.extendItemInformation) {
privateEl.style.background = isNonPrivate
? '#FFFFFF'
: !this.response.querySelector('.message')
? '#7dc78a'
: '#fc5729';
}
if (this.response.querySelector('.message') && config.removeLocked) {
it.remove();
}
});
req.open('GET', it.querySelector('a:last-child').href);
req.send();
});
};
var onDomUpdate = () => {
processItems();
if (
(document.querySelector('.filter') || document.querySelector('.sort')) &&
!document.querySelector('.profile-list')
) {
document.querySelectorAll('.box:not(.processed)').forEach((boxEl) => {
boxEl.classList.add('processed');
if (boxEl.parentElement.id === 'list_messages_my_conversation_messages') {
return;
}
var h2El = boxEl.parentElement.querySelector(':scope > .headline h1, :scope > .headline h2');
var paginationEl = boxEl.parentElement.querySelector(':scope > .pagination > .pagination-holder');
if (paginationEl) {
var isLoading = false;
var dataset = paginationEl.querySelector('.last > a')?.dataset;
var isLastPage = dataset === undefined;
if (isLastPage) {
const pages = paginationEl.querySelectorAll('.page');
dataset = pages[pages.length - 1].querySelector(':scope > a').dataset;
}
var o = Object.assign(
Object.fromEntries(dataset.parameters.split(';').map((x) => [x.split(':')[0], x.split(':')[1]])),
{ block_id: dataset.blockId }
);
o.q = o.q ?? '';
o.category_ids = o.category_ids ?? '';
var maxPage = +(o['from_videos+from_albums'] ?? o['from_videos'] ?? o['from_my_videos']);
if (isLastPage) {
maxPage++;
}
var firstPageReq = new XMLHttpRequest();
firstPageReq.responseType = 'document';
firstPageReq.addEventListener('load', function () {
var firstPageItems = this.response.querySelectorAll('.item');
var lastPageReq = new XMLHttpRequest();
lastPageReq.responseType = 'document';
lastPageReq.addEventListener('load', function () {
var lastPageItems = this.response.querySelectorAll('.item');
if (h2El) {
if (h2El.innerText.includes('(')) {
h2El.innerText = h2El.innerText.substr(0, h2El.innerText.indexOf('('));
}
h2El.innerText += ` (Results: ${
firstPageItems.length * (maxPage - 1) + lastPageItems.length
} - Pages: ${maxPage})`;
}
});
lastPageReq.open(
'GET',
`${location.href}?mode=async&function=get_block&block_id=${o.block_id}&q=${o.q}&category_ids=${o.category_ids}&sort_by=${o.sort_by}&from_videos=${maxPage}&from_albums=${maxPage}&from=${maxPage}&from_my_videos=${maxPage}`
);
lastPageReq.send();
});
firstPageReq.open(
'GET',
`${location.href}?mode=async&function=get_block&block_id=${o.block_id}&q=${o.q}&category_ids=${o.category_ids}&sort_by=${o.sort_by}&from_videos=1&from_albums=1&from=1&from_my_videos=1`
);
firstPageReq.send();
if (config.infiniteScroll) {
o['page'] = 2;
paginationEl.innerHTML = '';
var videosWrapperEl = paginationEl.parentNode.parentNode.querySelector('.list-videos').children[0];
videosWrapperEl.querySelectorAll('a').forEach((aEl) => {
aEl.target = '_blank';
});
var createIntermediateHeader = (page) => {
var intermediateHeader = document.createElement('div');
intermediateHeader.classList.add('intermediate-header');
var intermediateHeaderSpan = document.createElement('span');
intermediateHeaderSpan.innerText = `${page}/${maxPage}`;
intermediateHeader.append(intermediateHeaderSpan);
return intermediateHeader;
}
videosWrapperEl.prepend(createIntermediateHeader(1));
new IntersectionObserver(function () {
if (isLoading || o['page'] > maxPage) {
return;
}
isLoading = true;
var pageReq = new XMLHttpRequest();
pageReq.responseType = 'document';
pageReq.addEventListener('load', function () {
var newItems = this.response.querySelectorAll('.item');
newItems.forEach((el) => {
el.querySelector('a').target = '_blank';
});
videosWrapperEl.append(createIntermediateHeader(o['page'] - 1));
videosWrapperEl.append(...this.response.querySelectorAll('.item'));
$('.lazy-load[data-original]', videosWrapperEl).Lazy({ attribute: 'data-original' }).thumbs();
if (config.extendItemInformation || config.removeLocked) {
processItems();
}
isLoading = false;
});
pageReq.open(
'GET',
`${location.href}?mode=async&function=get_block&block_id=${o.block_id}&q=${o.q}&category_ids=${o.category_ids}&sort_by=${o.sort_by}&from_videos=${o['page']}&from_albums=${o['page']}&from=${o['page']}&from_my_videos=${maxPage}`
);
pageReq.send();
o['page']++;
}).observe(paginationEl);
}
} else if (h2El) {
if (h2El.innerText.includes('(')) {
h2El.innerText = h2El.innerText.substr(0, h2El.innerText.indexOf('('));
}
h2El.innerText += ` (Results: ${boxEl.querySelectorAll('.item').length} - Pages: 1)`;
}
});
}
if (config.muteVideoOnLoad && typeof flowplayer !== 'undefined') {
var wait = setInterval(() => {
if (flowplayer() && !flowplayer().muted) {
flowplayer().mute();
clearInterval(wait);
}
}, 100);
}
};
var domUpdateDelay;
new MutationObserver(() => {
clearTimeout(domUpdateDelay);
domUpdateDelay = setTimeout(() => {
onDomUpdate();
}, 10);
}).observe(document, { attributes: false, childList: true, subtree: true });
}
var scriptEl = document.createElement('script');
scriptEl.appendChild(
document.createTextNode('(' + injectedScript + ')(' + JSON.stringify(config) + ', ' + JSON.stringify(icons) + ');')
);
(document.body || document.head || document.documentElement).appendChild(scriptEl);
if (config.customStyles) {
var customStylesEl = document.createElement('style');
customStylesEl.textContent = `
body {
--cols: 2;
}
@media only screen and (min-width: 600px) {
body {
--cols: 3;
}
}
@media only screen and (min-width: 900px) {
body {
--cols: 4;
}
}
html {
background: #202020;
}
.logo a {
filter: brightness(0) invert(1);
}
.list-videos > div:not(#list_videos_my_uploaded_videos_items),
.list-albums > div,
.list-members > div:not(#list_members_my_friends_items),
.list-members > div > form,
.list-videos > div > form {
display: grid;
grid-template-columns: repeat(var(--cols), 1fr);
gap: 5px;
margin: 0;
}
.list-videos .item,
.list-albums .item,
.list-members .item,
.list-members .item,
.list-videos .item {
width: auto !important;
padding: 5px !important;
margin: 0 !important;
background: rgba(0,0,0,0.3);
border-radius: 5px;
}
.list-videos .item:hover,
.list-albums .item:hover,
.list-members .item:hover,
.list-members .item:hover,
.list-videos .item:hover {
background: rgba(0,0,0,0.7);
}
#list_videos_my_uploaded_videos_items,
#list_members_my_friends_items{
margin: 0;
}
.list-videos > div > *:not(div):not(form) {
display: none;
}
.item .img {
width: auto;
height: auto;
margin: -5px -5px 0;
border-radius: 5px;
aspect-ratio: 1.33;
}
.item .title,
.item .wrap {
margin-left: 0;
margin-right: 0;
height: auto;
}
.item .line-private {
width: auto;
max-width: calc(100% - 24px);
padding: 4px 8px;
border-radius: 8px;
bottom: 4px;
right: 4px;
left: auto;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.item .loader {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: rgba(0, 0, 0, .4);
color: white;
transition: opacity .3s;
}
.item .loader svg {
fill: currentcolor;
width: 26px;
height: 26px;
animation: spin 1s linear infinite;
}
.box {
background: transparent;
padding: 0;
}
.intermediate-header {
display: flex;
color: rgba(255,255,255,.1);
font-size: 4rem;
line-height: 4rem;
font-weight: 800;
text-transform: uppercase;
grid-column-start: 1;
grid-column-end: 5;
perspective: 50px;
perspective-origin: left;
}
.intermediate-header:not(:first-child) {
margin-top: 12px;
}
.intermediate-header span {
transform: rotateY(10deg);
transform-origin: left;
}
`;
(document.body || document.head || document.documentElement).appendChild(customStylesEl);
}
var pluginStylesEl = document.createElement('style');
pluginStylesEl.textContent = `
.item img {
transition: opacity .3s cubic-bezier(0.79, 0.33, 0.14, 0.53);
}
.item .line-private:hover {
opacity: 1 !important;
}
.item .line-private.with-transition {
transition: opacity .3s;
}
.pagination .prev,
.pagination .next {
display: inline;
}
.download-button svg {
fill: currentcolor;
height: 14px;
vertical-align: top;
}
.cw-evolution-options {
position: fixed;
bottom: 16px;
right: 16px;
height: 64px;
width: 64px;
border-radius: 64px;
background: #171717;
transition: height .3s cubic-bezier(0.79, 0.33, 0.14, 0.53);
overflow: hidden;
opacity: 0.8;
}
.cw-evolution-options.opened:not(.locked) {
height: 448px;
}
.cw-evolution-options.locked .icon-wrapper > button:last-child {
animation: spin 1s linear infinite;
}
.cw-evolution-options.opened .icon-wrapper > button:last-child {
transform: rotate(0);
}
.cw-evolution-options .icon-wrapper {
position: absolute;
bottom: 0;
right: 0;
display: flex;
flex-direction: column;
width: 64px;
}
.cw-evolution-options .icon-wrapper button {
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
width: 64px;
height: 64px;
background: transparent;
border: none;
padding: 0;
border-radius: 64px;
color: white;
cursor: pointer;
transition: transform .3s cubic-bezier(.51,.92,.24,1.15), color .3s cubic-bezier(0.79, 0.33, 0.14, 0.53);
}
.cw-evolution-options .icon-wrapper button:last-child {
transform: rotate(90deg);
}
.cw-evolution-options .icon-wrapper button:not(:last-child).active {
color: #51b523;
}
.cw-evolution-options .icon-wrapper button:not(:last-child):not(.active) {
color: #e0115f;
}
.cw-evolution-options .icon-wrapper button svg {
width: 26px;
height: 26px;
fill: currentColor;
}
@keyframes spin {
100% {
transform:rotate(360deg);
}
}
`;
(document.body || document.head || document.documentElement).appendChild(pluginStylesEl);
var optionsDialog = document.createElement('div');
optionsDialog.classList.add('cw-evolution-options');
var wrapper = document.createElement('div');
wrapper.classList.add('icon-wrapper');
var addButton = (icon, title, isActive, callback) => {
var b = document.createElement('button');
b.title = title;
b.innerHTML = icon;
if (isActive) {
b.classList.add('active');
}
b.addEventListener('click', callback);
wrapper.append(b);
};
var applyConfig = () => {
localStorage.setItem('cw-evolution-config', JSON.stringify(config));
optionsDialog.classList.add('locked');
location.reload();
};
addButton(
icons.lightbulb,
'Extend videos in list views with additional Information, like the uploader name and if its a friend',
config.extendItemInformation,
function () {
config.extendItemInformation = !this.classList.contains('active');
applyConfig();
}
);
addButton(
icons.eraser,
'Removes all private videos of non-friends from the liew views',
config.removeLocked,
function () {
config.removeLocked = !this.classList.contains('active');
applyConfig();
}
);
addButton(icons.infinite, 'Converts the pagination to infinite scroll', config.infiniteScroll, function () {
config.infiniteScroll = !this.classList.contains('active');
applyConfig();
});
addButton(icons.mute, 'Mutes a video initially', config.muteVideoOnLoad, function () {
config.muteVideoOnLoad = !this.classList.contains('active');
applyConfig();
});
addButton(icons.brush, 'Adds some UI style changes', config.customStyles, function () {
config.customStyles = !this.classList.contains('active');
applyConfig();
});
addButton(icons.thumbsUp, 'Rate', true, function () {
Object.assign(document.createElement('a'), {
target: '_blank',
rel: 'noopener noreferrer',
href: 'https://sleazyfork.org/de/scripts/498458-camwhores-tv-evolution/feedback#post-discussion',
}).click();
});
addButton(icons.circleNotch, '', false, () => {
if (!optionsDialog.classList.contains('locked')) {
optionsDialog.classList.toggle('opened');
}
});
optionsDialog.append(wrapper);
document.body.appendChild(optionsDialog);