MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 1: Line 1:
export function masonryGridPolyfill(selectors = ".masonry-group") {
export function masonryGridPolyfill(selectors = '.masonry-group') {
  const elements = [...document.querySelectorAll(selectors)]
    const elements = [...document.querySelectorAll(selectors)];
 
    // Bail if no elements where found
  // Bail if no elements where found
    if (!elements.length)
  if (!elements.length) return
        return;
 
    // Bail if masonry layouts are already supported by the browser
  // Bail if masonry layouts are already supported by the browser
    if (getComputedStyle(elements[0]).gridTemplateRows === 'masonry')
  if (getComputedStyle(elements[0]).gridTemplateRows === "masonry") return
        return;
 
    for (const el of elements) {
  for (const el of elements) {
        const grid = {
    const grid = {
            el,
      el,
            items: [...el.childNodes]
      items: [...el.childNodes].filter(i => i.nodeType === 1),
                // Make sure the child nodes are element nodes
      gap: parseFloat(getComputedStyle(el).rowGap),
                .filter(i => i.nodeType === 1),
      columns: 0,
            gap: parseFloat(getComputedStyle(el).rowGap),
      count: 0
            columns: 0,
            count: 0,
        };
        renderGrid(grid);
        const resizeObserver = new ResizeObserver(() => renderGrid(grid));
        resizeObserver.observe(grid.el);
     }
     }
    renderGrid(grid)
    const resizeObserver = new ResizeObserver(() => renderGrid(grid))
    resizeObserver.observe(grid.el)
  }
}
}
function renderGrid(grid) {
function renderGrid(grid) {
  const columns = getComputedStyle(grid.el).gridTemplateColumns.split(" ")
    var _a;
    .length
    const columns = getComputedStyle(grid.el).gridTemplateColumns.split(' ').length;
 
    for (const column of grid.items) {
  for (const column of grid.items) {
        const { height } = column.getBoundingClientRect();
    const { height } = column.getBoundingClientRect()
        const h = height.toString();
    const h = height.toString()
        if (h !== ((_a = column.dataset) === null || _a === void 0 ? void 0 : _a.h)) {
 
            column.dataset.h = h;
    if (h !== column.dataset?.h) {
            grid.count++;
      column.dataset.h = h
        }
      grid.count++
     }
     }
  }
    // Bail if the number of columns hasn't changed
 
    if (grid.columns === columns && grid.count)
  // Bail if the number of columns hasn't changed
        return;
  if (grid.columns === columns && grid.count) return
    // Update the number of columns
 
    grid.columns = columns;
  // Update the number of columns
    // Revert to initial positioning, no margin
  grid.columns = columns
    for (const { style } of grid.items)
 
        style.removeProperty('margin-top');
  // Revert to initial positioning, no margin
    // If we have more than one column
  for (const { style } of grid.items) style.removeProperty("margin-top")
    if (grid.columns > 1) {
 
        for (const [index, column] of grid.items.slice(columns).entries()) {
  // If we have more than one column
            // Bottom edge of item above
  if (grid.columns > 1) {
            const { bottom: prevBottom } = grid.items[index].getBoundingClientRect();
    for (const [index, column] of grid.items.slice(columns).entries()) {
            // Top edge of current item
      // Bottom edge of item above
            const { top } = column.getBoundingClientRect();
      const { bottom: prevBottom } = grid.items[index].getBoundingClientRect()
            column.style.marginTop = `${prevBottom + grid.gap - top}px`;
      // Top edge of current item
        }
      const { top } = column.getBoundingClientRect()
 
      column.style.marginTop = `${prevBottom + grid.gap - top}px`
     }
     }
  }
    grid.count = 0;
 
  grid.count = 0
}
}



Revision as of 22:00, 23 March 2024

export function masonryGridPolyfill(selectors = '.masonry-group') {
    const elements = [...document.querySelectorAll(selectors)];
    // Bail if no elements where found
    if (!elements.length)
        return;
    // Bail if masonry layouts are already supported by the browser
    if (getComputedStyle(elements[0]).gridTemplateRows === 'masonry')
        return;
    for (const el of elements) {
        const grid = {
            el,
            items: [...el.childNodes]
                // Make sure the child nodes are element nodes
                .filter(i => i.nodeType === 1),
            gap: parseFloat(getComputedStyle(el).rowGap),
            columns: 0,
            count: 0,
        };
        renderGrid(grid);
        const resizeObserver = new ResizeObserver(() => renderGrid(grid));
        resizeObserver.observe(grid.el);
    }
}
function renderGrid(grid) {
    var _a;
    const columns = getComputedStyle(grid.el).gridTemplateColumns.split(' ').length;
    for (const column of grid.items) {
        const { height } = column.getBoundingClientRect();
        const h = height.toString();
        if (h !== ((_a = column.dataset) === null || _a === void 0 ? void 0 : _a.h)) {
            column.dataset.h = h;
            grid.count++;
        }
    }
    // Bail if the number of columns hasn't changed
    if (grid.columns === columns && grid.count)
        return;
    // Update the number of columns
    grid.columns = columns;
    // Revert to initial positioning, no margin
    for (const { style } of grid.items)
        style.removeProperty('margin-top');
    // If we have more than one column
    if (grid.columns > 1) {
        for (const [index, column] of grid.items.slice(columns).entries()) {
            // Bottom edge of item above
            const { bottom: prevBottom } = grid.items[index].getBoundingClientRect();
            // Top edge of current item
            const { top } = column.getBoundingClientRect();
            column.style.marginTop = `${prevBottom + grid.gap - top}px`;
        }
    }
    grid.count = 0;
}

mw.hook('wikipage.content').add(function($content) {
	var $bandcamp = $content.find( '.bandcamp:not(.loaded)' );
    if ( !$bandcamp.length ) return;
 
	$bandcamp.each( function() {
		var elem = $( this );
 
		var width = elem.attr( 'data-width' ),
			height = elem.attr( 'data-height' ),
			data_src = elem.attr( 'data-src' );
 
		if ( !/^https?:\/\/bandcamp\.com\//.test( data_src ) ) return;
		elem.empty();
		var is_px = [ true, true ]; // width, height
 
		if ( /%/.test( width ) || !/\d+/.test( width ) ) is_px[ 0 ] = false;
		if ( /%/.test( height ) ) is_px[ 1 ] = false;

		var frame_width = parseFloat( width, 10 ) || 100;
			frame_height = height ? ( parseFloat( height, 10 ) || 'auto' ) : '';
 
		$( '<iframe />', {
			style: 'border: 0',
			width: frame_width + ( is_px[ 0 ] ? 'px' : '%' ),
			height: frame_height + ( frame_height ? ( is_px[ 1 ] ? 'px': '%' ) : '' ),
			src: data_src
		}).appendTo( elem );
            elem.addClass( 'loaded' );
	});
});

if(!players) {
  var players = document.querySelectorAll(".player-wrapper");

players.forEach((player)=>{
  let btn = player.querySelector(".btn");
  let record = player.querySelector(".record");
  let toneArm = player.querySelector(".tone-arm");
  let song = player.querySelector(".my-song");
  let slider = player.querySelector(".slider");
  btn.addEventListener("click", () => {

  if (record.classList.contains("on")) {
    record.classList.remove("on");
    toneArm.classList.remove("play");
    song.pause();
  } else {
    record.classList.add("on");
    toneArm.classList.add("play");
    setTimeout(() => {
      song.play();
    }, 1000);
  }
});
  slider.addEventListener("input", (e) => {
  song.volume = Number(e.target.value);
});

})

}

/**
 * Name:        DataTables.js
 * Author:      KockaAdmiralac <wikia@kocka.tech>
 * Description: Loads CSS and JavaScript from https://datatables.net and
 *              initializes all tables with the `datatable` class as data tables
 */
(function($, mw) {
    'use strict';
    var initialized = false, queue = [];
    function process($content) {
        $content.find('.datatable:not(.datatable-loaded)').each(function() {
            var $table = $(this).addClass('datatable-loaded'),
                $tableHeader = $('<thead>');
            $table.prepend($tableHeader);
            $table.find('> tbody > tr').first().appendTo($tableHeader);
            $table.DataTable( {         
			    layout: {
			        top1: 'searchPanes',
			    },
            	searchPanes: {
                	cascadePanes: true,
                	initCollapsed: true
            	},
				columnDefs: [
				    {
				        targets: [0, 1, 2, 3, 4, 5],
				        className: 'dt-nowrap'
				    },
			        {
			            searchPanes: {
			                show: true
			            },
			            targets: [6]
			        }				    
				  ]
});
        });
    }
    function initialize($content) {
        if (initialized) {
            process($content);
        } else {
            queue.push($content);
        }
    }
    mw.loader.load('https://cdn.datatables.net/v/dt/dt-2.0.0/r-3.0.0/sp-2.3.0/sl-2.0.0/datatables.min.css', 'text/css');
    mw.loader.getScript('https://cdn.datatables.net/v/dt/dt-2.0.0/r-3.0.0/sp-2.3.0/sl-2.0.0/datatables.min.js').then(function() {
        initialized = true;
        queue.forEach(process);
    });
    mw.hook('wikipage.content').add(initialize);
    mw.hook('datatables.loaded').fire();
})(jQuery, mediaWiki);

const slider = document.querySelector(".cards");
let isDown = false;
let startX;
let scrollLeft;

slider.addEventListener("pointerdown", (e) => {
	isDown = true;
	slider.classList.add("active");
	startX = e.pageX - slider.offsetLeft;
	scrollLeft = slider.scrollLeft;
});
slider.addEventListener("pointerleave", () => {
	isDown = false;
	slider.classList.remove("active");
});
slider.addEventListener("pointerup", () => {
	isDown = false;
	slider.classList.remove("active");
});
slider.addEventListener("pointermove", (e) => {
	if (!isDown) return;
	e.preventDefault();
	const x = e.pageX - slider.offsetLeft;
	const walk = (x - startX) * 3; //scroll-fast
	slider.scrollLeft = scrollLeft - walk;
});