Toggle menu
862
3.8K
30.2K
279.1K
Catglobe Wiki
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
New page: →‎Any JavaScript here will be loaded for all users on every page load.: function AppendCategoryTreeToSidebar() {<br> try {<br> var node = document.getElementById( "p-tb" )<br> .getEle...
 
No edit summary
 
(24 intermediate revisions by 2 users not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
function attachModifiedClickHandler(element) {
    const eventsData = $._data(element, 'events');
    const handlers = eventsData && eventsData.click;
   
    if (handlers && handlers.length > 0) {
        const originalHandler = handlers[0].handler;


function AppendCategoryTreeToSidebar() {<br> try {<br> var node = document.getElementById( "p-tb" )<br> .getElementsByTagName('div')[0]<br> .getElementsByTagName('ul')[0];<br> <br> var aNode = document.createElement( 'a' );<br> var liNode = document.createElement( 'li' );<br> <br> aNode.appendChild( document.createTextNode( 'CategoryTree' ) );<br> aNode.setAttribute( 'href' , 'http://vietnamwiki.catglobe.com/Special:CategoryTree' );<br> liNode.appendChild( aNode );<br> liNode.className = 'plainlinks';<br> node.appendChild( liNode );<br> } catch(e) {<br> // lets just ignore what's happened<br> return;<br> }<br>}<br> <br>addOnloadHook( AppendCategoryTreeToSidebar );<br><br>
        // Properly detach and reattach the click handler using jQuery
        $(element).off('click').on('click', function(event) {
            event.stopPropagation();
            originalHandler.call(this, event);
        });
 
        // Use native JavaScript to add the fix class
        element.classList.add('FixCatTreeClick');
    }
}
 
addOnloadHook(function() {
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            const target = mutation.target;
 
            // Check if the element has the specified class and has not already been processed
            if (
                mutation.attributeName === 'class' &&
                target.classList.contains('CategoryTreeToggleHandlerAttached') &&
                !target.classList.contains('FixCatTreeClick')
            ) {
                attachModifiedClickHandler(target);
            } else if (target && mutation.attributeName == null) {
                target.querySelectorAll(".CategoryTreeToggle.CategoryTreeToggleHandlerAttached:not(.FixCatTreeClick)").forEach((e) => attachModifiedClickHandler(e));
            }
        });
    });
 
    // Observe changes to attributes, specifically the 'class' attribute, throughout the document
    observer.observe(document.body, {
        childList: true,
        attributes: true,
        attributeFilter: ['class'],
        subtree: true
    });
});

Latest revision as of 11:21, 30 October 2024

function attachModifiedClickHandler(element) {
    const eventsData = $._data(element, 'events');
    const handlers = eventsData && eventsData.click;
    
    if (handlers && handlers.length > 0) {
        const originalHandler = handlers[0].handler;

        // Properly detach and reattach the click handler using jQuery
        $(element).off('click').on('click', function(event) {
            event.stopPropagation();
            originalHandler.call(this, event);
        });

        // Use native JavaScript to add the fix class
        element.classList.add('FixCatTreeClick');
    }
}

addOnloadHook(function() {
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            const target = mutation.target;

            // Check if the element has the specified class and has not already been processed
            if (
                mutation.attributeName === 'class' &&
                target.classList.contains('CategoryTreeToggleHandlerAttached') &&
                !target.classList.contains('FixCatTreeClick')
            ) {
                attachModifiedClickHandler(target);
            } else if (target && mutation.attributeName == null) {
                target.querySelectorAll(".CategoryTreeToggle.CategoryTreeToggleHandlerAttached:not(.FixCatTreeClick)").forEach((e) => attachModifiedClickHandler(e));
            }
        });
    });

    // Observe changes to attributes, specifically the 'class' attribute, throughout the document
    observer.observe(document.body, {
        childList: true,
        attributes: true,
        attributeFilter: ['class'],
        subtree: true
    });
});