mame/scripts/minimaws/lib/assets/common.js
Vas Crabb 5f6296049b Miscellaneous minor stuff:
* scripts/minimaws: Set option strict for JavaScript code.
* util/mfpresolve.h: Be explicit about turning nullptr into a pointer to
  data.
* cpu/drcbearm64.cpp: Reduced number of temporary registers used for AND
  with some operand combinations.
2025-03-17 05:17:57 +11:00

151 lines
3.9 KiB
JavaScript

// license:BSD-3-Clause
// copyright-holders:Vas Crabb
'use strict';
function make_collapsible(heading, section)
{
var hidden = false;
var display = section.style.display;
var icon = heading.insertBefore(document.createElement('img'), heading.firstChild);
icon.setAttribute('src', assetsurl + '/disclosedown.svg');
icon.setAttribute('class', 'disclosure');
icon.addEventListener(
'click',
function (event)
{
hidden = !hidden;
if (hidden)
{
icon.setAttribute('src', assetsurl + '/discloseup.svg');
section.style.display = 'none';
}
else
{
icon.setAttribute('src', assetsurl + '/disclosedown.svg');
section.style.display = display;
var headingtop = 0;
for (var element = heading; element !== null; element = element.offsetParent)
headingtop += element.offsetTop;
var sectionbot = section.offsetHeight;
for (var element = section; element !== null; element = element.offsetParent)
sectionbot += element.offsetTop;
if ((window.pageYOffset + window.innerHeight) < sectionbot)
{
if ((sectionbot - headingtop) > window.innerHeight)
heading.scrollIntoView(true);
else
window.scroll(window.pageXOffset, sectionbot - window.innerHeight);
}
}
});
return function ()
{
hidden = true;
icon.setAttribute('src', assetsurl + '/discloseup.svg');
section.style.display = 'none';
};
}
function make_table_sortable(tbl)
{
var sorticons = new Array(tbl.tHead.rows[0].cells.length);
function TableSortHelper(i)
{
this.column = i;
this.header = tbl.tHead.rows[0].cells[i];
this.sorted = false;
this.direction = 1;
var container = this.header.appendChild(document.createElement('div'));
container.setAttribute('class', 'sorticon');
this.icon = container.appendChild(document.createElement('img'));
this.icon.setAttribute('src', assetsurl + '/sortind.svg');
this.icon.addEventListener('click', this.icon_click.bind(this));
}
TableSortHelper.prototype = (function ()
{
function set_unsorted(obj)
{
obj.sorted = false;
obj.icon.setAttribute('src', assetsurl + '/sortind.svg');
}
function sort_table(obj)
{
var c = obj.header.cellIndex;
var numeric = obj.header.getAttribute('class') == 'numeric';
var tbody = tbl.tBodies[0];
var trows;
if (numeric)
{
trows = Array.prototype.slice.call(tbody.rows, 0).sort(
function (x, y)
{
return obj.direction * (parseFloat(x.cells[c].textContent) - parseFloat(y.cells[c].textContent));
});
}
else
{
trows = Array.prototype.slice.call(tbody.rows, 0).sort(
function (x, y)
{
return obj.direction * x.cells[c].textContent.localeCompare(y.cells[c].textContent);
});
}
trows.forEach(function (row) { tbody.appendChild(row); });
}
return {
icon_click : function (event)
{
if (this.sorted)
this.direction = -this.direction;
if (this.direction < 0)
this.icon.setAttribute('src', assetsurl + '/sortdesc.svg');
else
this.icon.setAttribute('src', assetsurl + '/sortasc.svg');
this.sorted = true;
for (var i = 0; i < sorticons.length; i++)
{
if (i != this.column)
set_unsorted(sorticons[i]);
}
sort_table(this);
}
};
})();
for (var i = 0; i < sorticons.length; i++)
sorticons[i] = new TableSortHelper(i);
}
function make_restore_default_handler(popup, index)
{
return function (event)
{
if (popup.selectedIndex != index)
{
popup.selectedIndex = index;
popup.dispatchEvent(new Event('change'));
}
}
}
function make_restore_default_button(title, id, popup, index)
{
var btn = document.createElement('button');
btn.setAttribute('id', id);
btn.setAttribute('type', 'button');
btn.disabled = popup.selectedIndex == index;
btn.textContent = title;
btn.onclick = make_restore_default_handler(popup, index);
return btn;
}