Exact-Time-Viewer-For-Instagram

Converts Instagram time elements to local time zone in user's local time zone format with time zone info added.

Stan na 01-12-2024. Zobacz najnowsza wersja.

// ==UserScript==
// @name         Exact-Time-Viewer-For-Instagram
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Converts Instagram time elements to local time zone in user's local time zone format with time zone info added.
// @match        *://*.instagram.com/*
// @author       aspen138
// @grant        none
// @license      MIT
// ==/UserScript==

// Port the chrome extension Exact-Time-Viewer-For-Instagram to tampermonkey script
// reference: https://github.com/ehmorris/Exact-Time-Viewer-For-Instagram

(function() {
    'use strict';

    const processedElements = new WeakSet();

    function formatDate(datetime) {
        const dateObject = new Date(datetime);
        const time = dateObject.toLocaleTimeString();
        const date = dateObject.toLocaleDateString();
        const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        return `${time}, ${date} (in the ${localTimeZone} time zone)`;
    }

    function processTimeElement(element) {
        if (!processedElements.has(element)) {
            const datetime = element.getAttribute('datetime');
            if (datetime) {
                const formattedDate = formatDate(datetime);
                element.innerHTML = formattedDate;
                processedElements.add(element);
            }
        }
    }

    function processTimeElements(root) {
        const timeElements = root.querySelectorAll('time[datetime]');
        timeElements.forEach(element => {
            processTimeElement(element);
        });
    }

    // Process existing <time> elements on the page
    processTimeElements(document);

    // Observe for future <time> elements added to the DOM
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === 1) { // Node.ELEMENT_NODE
                    if (node.tagName && node.tagName.toUpperCase() === 'TIME') {
                        processTimeElement(node);
                    } else {
                        processTimeElements(node);
                    }
                }
            });
        });
    });

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

})();