Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Citizen.js

MediaWiki interface page

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// Citizen.js
// needs a heavy refactor

// new article icon button

$( document ).ready( function () {
	if ( document.getElementById( 'citizen-newarticle' ) ) {
		return;
	}

	const insert_anchor = document.querySelector( '.citizen-drawer.citizen-header__item' )
		|| document.querySelector( '.citizen-drawer' );

	if ( !insert_anchor ) {
		return;
	}



	const clone_source = document.querySelector( '.citizen-header__item.citizen-search' )
		|| insert_anchor;

	const new_article_button = clone_source.cloneNode( true );

	new_article_button.id = 'citizen-newarticle';
	new_article_button.classList.remove( 'citizen-search', 'citizen-drawer' );
	new_article_button.classList.add( 'citizen-newarticle' );



	Array.from( new_article_button.children ).forEach( function ( child ) {
		if ( child.tagName !== 'DETAILS' ) {
			child.remove();
		}
	} );



	const new_article_button_details = new_article_button.querySelector( 'details' );

	if ( !new_article_button_details ) {
		return;
	}



	new_article_button_details.id = 'citizen-newarticle-details';
	new_article_button_details.removeAttribute( 'open' );



	const new_article_button_summary = new_article_button_details.querySelector( 'summary' );

	if ( !new_article_button_summary ) {
		return;
	}



	new_article_button_summary.classList.add( 'owaf-new-article-trigger' );
	new_article_button_summary.setAttribute( 'aria-details', 'citizen-newarticle-details' );



	const new_article_button_svg = new_article_button_summary.querySelector( 'svg' );

	if ( new_article_button_svg ) {
		new_article_button_svg.setAttribute( 'height', '24' );
		new_article_button_svg.setAttribute( 'width', '24' );
		new_article_button_svg.setAttribute( 'viewBox', '0 -960 960 960' );
		new_article_button_svg.setAttribute( 'aria-hidden', 'true' );
		new_article_button_svg.setAttribute( 'focusable', 'false' );
		new_article_button_svg.setAttribute( 'title', 'New article' );
		new_article_button_svg.setAttribute( 'fill', 'currentColor' );
		new_article_button_svg.innerHTML = '<path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/>';
	}



	const new_article_button_label = new_article_button_summary.querySelector( 'span' );

	if ( new_article_button_label ) {
		new_article_button_label.textContent = 'New article';
	}

	insert_anchor.after( new_article_button );
} );

/**
 * @name SidebarIcons
 * Prepend icons to the MediaWiki sidebar
*/

const icons_by_ids = {
    'randomobby': {
        class: 'mw-ui-icon-controller',
    }
}

for (const [k, v] of Object.entries(icons_by_ids)) {
    const element = document.querySelector('.citizen-menu__content ' + '#n-' + k + ' a')

    const icon_element = document.createElement('span')
    icon_element.classList.add('citizen-ui-icon', v.class)

    element.prepend(icon_element)
}

/**
 * @name LinkifyYears
 * Automatically hyper-link years in the short description (#siteSub) to their respective Category:YYYY pages.
*/

(function () {
  const targetId = "siteSub";

  const linkifyYears = () => {
    const siteSub = document.getElementById(targetId);
    if (!siteSub) return;

    const yearRegex = /\b2\d{3}\b/g;

    if (siteSub.querySelector(".year-link")) return;

    const originalText = siteSub.textContent;
    if (yearRegex.test(originalText)) {
      const newHTML = originalText.replace(yearRegex, (year) => {
        const url = mw.util.getUrl("Category:" + year);
        return `<a href="${url}" class="year-link" style="opacity: 0.7;">${year}</a>`;
      });
      siteSub.innerHTML = newHTML;
    }
  };

  linkifyYears();

  const observer = new MutationObserver(() => {
    linkifyYears();
  });

  const targetNode = document.getElementById(targetId);
  if (targetNode) {
    observer.observe(targetNode, { childList: true, characterData: true, subtree: true });
  }
})();

document.addEventListener('DOMContentLoaded', function () {
setTimeout(() => {
  document.querySelectorAll('.citizen-overflow-wrapper').forEach(wrapper => {
    if (wrapper.querySelector('.full-width')) {
      wrapper.style.maxWidth = 'none';
    }
  });
}, 250);
});