// ==UserScript== // @name CAI Swipe Navigator // @namespace Massgen swipenav // @version 0.1 // @description Stolen and broken code that hyperlinks to swipes. // @author n/a // @match https://beta.character.ai/chat* // @grant none // @license MIT // @downloadURL none // ==/UserScript== // Create display box for showing the message text var displayBox = document.createElement('div'); displayBox.setAttribute('id', 'message-display-mass-'); displayBox.setAttribute('class', 'messages-list-mass-'); displayBox.setAttribute('style', 'display: none;'); document.body.appendChild(displayBox); var count = 0; var prevClass = ''; function clearDisplayAndCount() { count = 0; document.getElementById('message-display-mass-').innerHTML = ''; } // Function to retrieve and display the associated message function getMessage(event) { var number = parseInt(event.target.getAttribute('data-slide-number')); var messageDiv = document.querySelectorAll('div[class="msg char-msg"]')[number - 1].cloneNode(true); // clone the message element var annotationContainer = messageDiv.querySelector('.annotation-buttons-container'); // find the annotation buttons container if(annotationContainer !== null) { annotationContainer.remove(); // remove the annotation buttons container } var message = messageDiv.innerHTML; // Check if message is already in the message display box before adding it var messageExists = false; var messageDivs = document.querySelectorAll('.hywmsg.non-deleted'); for (var i = 0; i < messageDivs.length; i++) { if (messageDivs[i].innerHTML.includes(message)) { messageExists = true; break; } } if (!messageExists) { var newMessage = document.createElement('div'); newMessage.innerHTML = '
Swipe ' + (number) + ':
' + message; newMessage.setAttribute('class', 'hywmsg non-deleted'); document.getElementById('message-display').appendChild(newMessage); } } function checkNewMessages() { var messages = document.querySelectorAll('.swiper-slide div[class="msg char-msg"]'); for (var i = 0; i < messages.length; i++) { if (!messages[i].hasAttribute('data-isnew')) { var messageContent = messages[i].innerHTML; if (!messageContent.includes("typing-dot typing-dot-light-bg")) { messages[i].setAttribute('data-isnew', 'true'); var message = messageContent.trim(); var messageNumber = i + 1; var currentClass = messages[i].parentNode.parentNode.parentNode.parentNode.getAttribute('class'); if (prevClass !== '' && prevClass !== currentClass) { count = 0; document.getElementById('message-display-mass-').innerHTML = ''; } prevClass = currentClass; count++; var existingMessage = document.querySelector('.hywmsg.non-deleted-mass-[data-slide-number="' + messageNumber + '"]'); if (existingMessage) { existingMessage.remove(); } var newMessage = document.createElement('div'); newMessage.setAttribute('data-slide-number', messageNumber); newMessage.innerHTML = '
Swipe ' + count + ':
' + message; newMessage.setAttribute('class', 'hywmsg non-deleted-mass-'); document.getElementById('message-display-mass-').appendChild(newMessage); newMessage.addEventListener('click', getMessage); } } } var newMessages = document.querySelectorAll('.hywmsg.non-deleted-mass-'); for (var i = 0; i < newMessages.length; i++) { var annotationButtons = newMessages[i].querySelectorAll('.annotation-buttons-container.col.mb-3'); for (var j = 0; j < annotationButtons.length; j++) { annotationButtons[j].remove(); } } } // Function to check for new messages and add them to the display box function checkNewMessages() { var messages = document.querySelectorAll('.swiper-slide div[class="msg char-msg"]'); for (var i = 0; i < messages.length; i++) { if (!messages[i].hasAttribute('data-isnew')) { var messageContent = messages[i].innerHTML; // Exclude messages with typing-dot typing-dot-light-bg class if (!messageContent.includes("typing-dot typing-dot-light-bg")) { messages[i].setAttribute('data-isnew', 'true'); var message = messageContent.trim(); var messageNumber = i + 1; var existingMessage = document.querySelector('.hywmsg.non-deleted-mass-[data-slide-number="' + messageNumber + '"]'); if (existingMessage) { existingMessage.remove(); } var newMessage = document.createElement('div'); newMessage.setAttribute('data-slide-number', messageNumber); newMessage.innerHTML = '
Swipe ' + messageNumber + ':
' + message; newMessage.setAttribute('class', 'hywmsg non-deleted-mass-'); document.getElementById('message-display-mass-').appendChild(newMessage); newMessage.addEventListener('click', getMessage); } } } // Remove the annotation buttons from newly added messages var newMessages = document.querySelectorAll('.hywmsg.non-deleted-mass-'); for (var i = 0; i < newMessages.length; i++) { var annotationButtons = newMessages[i].querySelectorAll('.annotation-buttons-container.col.mb-3'); for (var j = 0; j < annotationButtons.length; j++) { annotationButtons[j].remove(); } } // Function to navigate to the corresponding slide when slide-number-msg element is clicked function navigateToSlide(event) { var slideNumber = parseInt(event.target.getAttribute('data-slide-number')); var activeSlideNumber = parseInt(document.querySelector('.swiper-slide.swiper-slide-active').getAttribute('data-slide-number')); var slideDifference = slideNumber - activeSlideNumber; if (slideDifference < 0) { for (var i = 0; i < Math.abs(slideDifference); i++) { document.querySelector('.swiper-button-prev').click(); } } else if (slideDifference > 0) { for (var i = 0; i < slideDifference; i++) { document.querySelector('.swiper-button-next').click(); } } } // Add slide navigation function to slide-number-msg elements var slideNumberMsgs = document.querySelectorAll('.slide-number-msg-mass-'); for (var i = 0; i < slideNumberMsgs.length; i++) { slideNumberMsgs[i].setAttribute('data-slide-number', i + 1); slideNumberMsgs[i].addEventListener('click', navigateToSlide); } // Add numbered navigation to swiper-slide elements var swiperSlides = document.getElementsByClassName('swiper-slide'); for (var i = 0; i < swiperSlides.length; i++) { swiperSlides[i].setAttribute('data-slide-number', i + 1); // Check if slide already has a slide-number element before adding one if (!swiperSlides[i].querySelector('.slide-number-mass-')) { var messageNumber = document.createElement('div'); messageNumber.innerHTML = i + 1; messageNumber.setAttribute('class', 'slide-number-mass-'); messageNumber.setAttribute('data-slide-number', i + 1); messageNumber.onclick = function() { var slideNumber = this.getAttribute('data-slide-number'); var activeSlideNumber = document.querySelector('.swiper-slide.swiper-slide-active').getAttribute('data-slide-number'); var slideDifference = slideNumber - activeSlideNumber; if (slideDifference < 0) { for (var i = 0; i < Math.abs(slideDifference); i++) { document.querySelector('.swiper-button-prev').click(); } } else if (slideDifference > 0) { for (var i = 0; i < slideDifference; i++) { document.querySelector('.swiper-button-next').click(); } } }; swiperSlides[i].appendChild(messageNumber); } } // Add class to currently active swiper-slide element var activeSlide = document.querySelector('.swiper-slide.swiper-slide-active'); activeSlide.classList.add('active-slide-mass-'); } // Create a MutationObserver to detect changes in the DOM var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { if (mutation.target.classList.contains('infinite-scroll-component')) { clearDisplayAndCount(); } } }); }); // Observe changes in the body element and its child nodes observer.observe(document.body, { childList: true, subtree: true }); // Call the checkNewMessages function every second setInterval(checkNewMessages, 1000); // Style HTML let styleHTML = document.createElement('style'); styleHTML.innerHTML = ` html { height: 100%; overflow: hidden; width: 100%; } body { height: 100%; overflow-x: hidden; overflow-y: auto; width: 100%; } .messages-list-mass- { padding: 4px 4px 3px 4px; margin: 40px 4px 0 0; border: 3px solid gray; position: absolute; top: 0; right: 0; width: 20%; height: 80%; overflow-y: scroll; border-radius: 0 0 8px 8px; z-index: 100; resize: both; direction: rtl; min-width: 100px; min-height: 100px; } .display-btn-mass- { cursor: pointer; user-select: none; border: 3px solid gray; padding: 4px; margin: 4px; width: 20%; position: absolute; top: 0; right: 0; background-color: lightsteelblue; color: black; font-weight: bold; text-align: center; z-index: 100; } .messages-list-mass- div { margin-top: 5px; padding: 8px; background-color: lightpink; direction: ltr; } .hywmsg-mass- { border-radius: 8px; } .hywmsg.non-deleted-mass- { background-color: aquamarine; } .hywmsg.hidden-mass- { display: none; } .screen-btn-mass- { cursor: pointer; user-select: none; border: 3px solid gray; padding: 4px; margin: 4px; width: 20%; position: absolute; top: 0; right: 0; background-color: lightsteelblue; color: black; font-weight: bold; text-align: center; z-index: 100; } .swiper-slide { position: relative; } .slide-number-mass- { position: absolute; top: 0; right: 0; background-color: white; border-radius: 50%; height: 20px; width: 20px; text-align: center; line-height: 20px; font-weight: bold; } .active-slide-mass- .slide-number-mass- { background-color: lightsteelblue; color: black; } .slide-number-msg-mass- { display: inline-block; margin-right: 5px; font-weight: bold; cursor: pointer; } ` document.body.appendChild(styleHTML); // Button HTML let buttonHTML = document.createElement('div'); buttonHTML.innerHTML = "Massgen Navigation"; buttonHTML.onclick = function () { let msgList = document.getElementsByClassName('messages-list-mass-')[0] if (msgList.style.display === "none") { msgList.style.display = "block"; } else { msgList.style.display = "none"; } }; buttonHTML.classList.add("display-btn-mass-"); document.body.appendChild(buttonHTML); window.addEventListener('load', function() { const displayBtn = { default: document.querySelector('.display-btn'), massgen: document.querySelector('.display-btn-mass-'), }; const messagesList = { default: document.querySelector('.messages-list'), massgen: document.querySelector('.messages-list-mass-'), }; const hideBtn = document.createElement('div'); let isHidden = false; let currentMode = 'default'; function setMode(mode) { if (mode === currentMode) { return; } if (mode === 'default') { displayBtn.default.style.display = 'block'; messagesList.default.style.display = 'block'; displayBtn.massgen.style.display = 'none'; messagesList.massgen.style.display = 'none'; hideBtn.innerHTML = 'HYW'; } else if (mode === 'massgen') { displayBtn.default.style.display = 'none'; messagesList.default.style.display = 'none'; displayBtn.massgen.style.display = 'block'; messagesList.massgen.style.display = 'block'; hideBtn.innerHTML = 'Massgen'; } currentMode = mode; } hideBtn.innerHTML = 'HYW'; hideBtn.style.position = 'absolute'; hideBtn.style.top = '50px'; hideBtn.style.right = '400px'; hideBtn.style.cursor = 'pointer'; hideBtn.style.userSelect = 'none'; hideBtn.style.border = '3px solid grey'; hideBtn.style.padding = '8px'; hideBtn.style.margin = '4px'; hideBtn.style.backgroundColor = 'lightsteelblue'; hideBtn.style.color = 'white'; hideBtn.style.fontWeight = 'bold'; hideBtn.style.textAlign = 'center'; hideBtn.style.zIndex = '100'; hideBtn.onclick = function () { if (isHidden) { setMode('default'); hideBtn.style.backgroundColor = 'lightsteelblue'; isHidden = false; } else { setMode('massgen'); hideBtn.style.backgroundColor = 'lightsteelblue'; isHidden = true; } }; displayBtn.massgen.style.display = 'none'; messagesList.massgen.style.display = 'none'; document.body.appendChild(hideBtn); });