NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name YouTube Distraction Lock // @namespace http://tampermonkey.net/ // @version 1.3 // @description Lock YouTube with a Todo list, so you're forced into doing all your tasks before you can continue watching YouTube :) // @author Cryptic1526 // @match https://www.youtube.com/* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap'; document.head.appendChild(link); const style = document.createElement('style'); style.textContent = ` .todo-label-large { font-size: 120%; } `; document.head.appendChild(style); function loadTasks() { const tasks = localStorage.getItem('todoTasks'); return tasks ? JSON.parse(tasks) : []; } function saveTasks(tasks) { localStorage.setItem('todoTasks', JSON.stringify(tasks)); } function allTasksChecked() { const tasks = loadTasks(); return tasks.every(task => task.completed); } function handleTaskCompletion() { const tasks = loadTasks(); const taskIndex = tasks.findIndex(task => task.text === this.nextSibling.textContent); tasks[taskIndex].completed = this.checked; saveTasks(tasks); if (allTasksChecked()) { document.body.removeChild(document.querySelector('.todo-overlay')); localStorage.removeItem('todoTasks'); const xButton = document.querySelector('.x-button'); if (xButton) { document.body.removeChild(xButton); } } } function createAndAppendXButton() { const xButton = document.createElement('button'); xButton.textContent = '❌'; xButton.className = 'x-button'; xButton.style.position = 'fixed'; xButton.style.top = '10px'; xButton.style.right = '10px'; xButton.style.zIndex = '10000'; xButton.style.fontFamily = 'Ubuntu, sans-serif'; xButton.addEventListener('click', function () { document.body.removeChild(document.querySelector('.todo-overlay')); localStorage.removeItem('todoTasks'); document.body.removeChild(xButton); }); document.body.appendChild(xButton); } const todoList = document.createElement('div'); todoList.className = 'todo-overlay'; todoList.style.position = 'fixed'; todoList.style.top = '0'; todoList.style.left = '0'; todoList.style.width = '100%'; todoList.style.height = '100%'; todoList.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; todoList.style.color = 'white'; todoList.style.display = 'flex'; todoList.style.flexDirection = 'column'; todoList.style.alignItems = 'center'; todoList.style.justifyContent = 'center'; todoList.style.zIndex = '9999'; todoList.style.backdropFilter = 'blur(10px)'; todoList.style.fontFamily = 'Ubuntu, sans-serif'; const todoTitle = document.createElement('h1'); todoTitle.textContent = 'Todo List'; todoTitle.style.fontFamily = 'Ubuntu, sans-serif'; todoTitle.style.color = 'white'; todoTitle.style.padding = '15px'; todoList.appendChild(todoTitle); const todoInput = document.createElement('input'); todoInput.type = 'text'; todoInput.placeholder = 'Add a task...'; todoInput.style.fontFamily = 'Ubuntu, sans-serif'; todoInput.style.width = '9%'; todoInput.style.border = '2px solid #aaa'; todoInput.style.borderRadius = '4px'; todoInput.style.margin = '8px 0'; todoInput.style.outline = 'none'; todoInput.style.padding = '8px'; todoInput.style.boxSizing = 'border-box'; todoInput.style.transition = '.3s'; todoList.appendChild(todoInput); todoInput.addEventListener('focus', function () { this.style.boxShadow = '0 0 8px 0 black'; }); todoInput.addEventListener('blur', function () { this.style.borderColor = '#aaa'; this.style.boxShadow = 'none'; }); const todoListContainer = document.createElement('div'); todoListContainer.style.marginTop = '20px'; todoList.appendChild(todoListContainer); const tasks = loadTasks(); tasks.forEach(task => { const todoItem = document.createElement('input'); todoItem.type = 'checkbox'; todoItem.className = 'todo-item'; todoItem.checked = task.completed; todoItem.addEventListener('change', handleTaskCompletion); const todoLabel = document.createElement('label'); todoLabel.textContent = task.text; todoLabel.style.marginLeft = '5px'; todoLabel.style.fontFamily = 'Ubuntu, sans-serif'; todoLabel.className = 'todo-label-large'; todoListContainer.appendChild(todoItem); todoListContainer.appendChild(todoLabel); todoListContainer.appendChild(document.createElement('br')); }); todoInput.addEventListener('keydown', function (event) { if (event.key === 'Enter' && this.value.trim() !== '') { const todoItem = document.createElement('input'); todoItem.type = 'checkbox'; todoItem.className = 'todo-item'; todoItem.addEventListener('change', handleTaskCompletion); const todoLabel = document.createElement('label'); todoLabel.textContent = this.value; todoLabel.style.marginLeft = '5px'; todoLabel.style.fontFamily = 'Ubuntu, sans-serif'; todoListContainer.appendChild(todoItem); todoListContainer.appendChild(todoLabel); todoListContainer.appendChild(document.createElement('br')); const tasks = loadTasks(); tasks.push({ text: this.value, completed: false }); saveTasks(tasks); this.value = ''; const xButton = document.querySelector('.x-button'); if (xButton) { document.body.removeChild(xButton); } } }); if (tasks.length === 0) { createAndAppendXButton(); } document.body.appendChild(todoList); })();