Scratch Doodles

Changes the logo to today's Scratch Doodle.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         Scratch Doodles
// @namespace    http://tampermonkey.net/
// @version      2.0.4
// @description  Changes the logo to today's Scratch Doodle.
// @author       alboxer2000
// @match        *://scratch.mit.edu/*
// @grant        none
// @run-at       document-start
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    const BASE_IMAGE_URL = 'https://uploads.scratch.mit.edu/get_image/project/1236507918_104564560x84564560.png';
    const ADJUSTED_IMAGE_URL = 'https://uploads.scratch.mit.edu/get_image/project/1236733177_104564560x84564560.png';
    
    const BASE_WIDTH = 87; 
    const BASE_HEIGHT = 67; 
    const BASE_TOP = -18;
    const BASE_LEFT = -4;
    
    const OTHER_PAGE_SIZE_ADJ = 13; 
    const OTHER_PAGE_TOP_ADJ = 5; 
    const OTHER_PAGE_LEFT_ADJ = 3;

    const HOMEPAGE_PATHS = ['/', '']; 
    const SPECIFIED_PAGES = HOMEPAGE_PATHS.concat([
        '/projects/',
        
        '/ideas',
        '/explore', 
        '/explore/', 
        '/about',
        '/contact-us',
        '/community_guidelines',
        '/starter-projects',
        '/credits',
        '/messages',
        
        '/search/',
        '/studios/',
        '/download'
    ]);

    const currentPath = window.location.pathname;
    
    const isSpecifiedPage = SPECIFIED_PAGES.some(specifiedPath => {
        if (specifiedPath === currentPath) {
            return true;
        }
        
        if (specifiedPath.endsWith('/') && specifiedPath.length > 1 && currentPath.startsWith(specifiedPath)) {
            return true;
        }
        return false;
    });


    let finalWidth = BASE_WIDTH;
    let finalHeight = BASE_HEIGHT;
    let finalTop = BASE_TOP;
    let finalLeft = BASE_LEFT; 
    let finalImageUrl = BASE_IMAGE_URL;

    if (!isSpecifiedPage) {
        finalWidth -= OTHER_PAGE_SIZE_ADJ;
        finalHeight -= OTHER_PAGE_SIZE_ADJ;
        
        finalTop -= OTHER_PAGE_TOP_ADJ;
        finalLeft += OTHER_PAGE_LEFT_ADJ;
        finalImageUrl = ADJUSTED_IMAGE_URL;
    }

    const imgElement = document.createElement('img');
    imgElement.src = finalImageUrl;
    imgElement.alt = 'Userscript Injected Image';

    imgElement.style.cssText = `
        position: absolute; 
        top: ${finalTop}px; 
        left: ${finalLeft}px; 
        width: ${finalWidth}px; 
        height: ${finalHeight}px; 
        border-radius: 8px;
        z-index: 10003; 
    `;

    const injectImage = () => {
        const logoContainer = document.querySelector('a[href="/"]');

        if (logoContainer && !logoContainer.querySelector('img[alt="Userscript Injected Image"]')) {
            if (window.getComputedStyle(logoContainer).position === 'static') {
                logoContainer.style.position = 'relative';
            }
            
            logoContainer.prepend(imgElement);
            return true;
        }
        return false;
    };

    const observer = new MutationObserver((mutationsList, observer) => {
        if (injectImage()) {
            observer.disconnect();
        }
    });

    observer.observe(document.body || document.documentElement, { childList: true, subtree: true });

})();