https://dsp-wiki.com/api.php?hidebots=1&urlversion=1&days=7&limit=50&target=Keybindings&action=feedrecentchanges&feedformat=atom
DSP Wiki - Changes related to "Keybindings" [en]
2024-03-29T05:07:39Z
Related changes
MediaWiki 1.39.6
https://dsp-wiki.com/index.php?title=Template:Navbox&diff=19226&oldid=0
Template:Navbox
2024-03-24T11:54:51Z
<p><a href="/User:Antt1995" class="mw-userlink" title="User:Antt1995"><bdi>Antt1995</bdi></a> imported <a href="/Template:Navbox" class="mw-redirect" title="Template:Navbox">Template:Navbox</a> by file upload (1 revision) New Files</p>
<p><b>New page</b></p><div>#REDIRECT [[Template:Navplate]]</div>
Antt1995
https://dsp-wiki.com/index.php?title=Template:Navplate&diff=17778&oldid=0
Template:Navplate
2024-03-24T11:54:48Z
<p><a href="/User:Antt1995" class="mw-userlink" title="User:Antt1995"><bdi>Antt1995</bdi></a> imported <a href="/Template:Navplate" title="Template:Navplate">Template:Navplate</a> by file upload (1 revision) New Files</p>
<p><b>New page</b></p><div><includeonly>{{#invoke:Navplate|navplate}}</includeonly><noinclude><br />
{{/doc}}<br />
<!-- Categories go in the /doc subpage --><br />
</noinclude></div>
Antt1995
https://dsp-wiki.com/index.php?title=Module:Navplate&diff=14626&oldid=0
Module:Navplate
2024-03-24T11:54:37Z
<p><a href="/User:Antt1995" class="mw-userlink" title="User:Antt1995"><bdi>Antt1995</bdi></a> imported <a href="/Module:Navplate" title="Module:Navplate">Module:Navplate</a> by file upload (1 revision) New Files</p>
<p><b>New page</b></p><div>--------------------------------------------------------------------------------<br />
-- Module:Navplate --<br />
-- This module implements {{Navplate}} --<br />
-- Based on Module:Infobox --<br />
-- This is a work in progress --<br />
--------------------------------------------------------------------------------<br />
<br />
local p = {}<br />
local args = {}<br />
local origArgs = {}<br />
local root<br />
local header<br />
local content<br />
<br />
local function union(t1, t2)<br />
-- Returns the union of the values of two tables, as a sequence.<br />
local vals = {}<br />
for k, v in pairs(t1) do<br />
vals[v] = true<br />
end<br />
for k, v in pairs(t2) do<br />
vals[v] = true<br />
end<br />
local ret = {}<br />
for k, v in pairs(vals) do<br />
table.insert(ret, k)<br />
end<br />
return ret<br />
end<br />
<br />
-- Returns a table containing the numbers of the arguments that exist<br />
-- for the specified prefix. For example, if the prefix was 'data', and<br />
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.<br />
local function getArgNums(prefix)<br />
local nums = {}<br />
for k, v in pairs(args) do<br />
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')<br />
if num then table.insert(nums, tonumber(num)) end<br />
end<br />
table.sort(nums)<br />
return nums<br />
end<br />
<br />
local function addRow(rowArgs, content)<br />
-- Adds a row to the navplate, with either a header<br />
-- or a label/list combination.<br />
if rowArgs.header then<br />
content<br />
:tag('div')<br />
:addClass('template-navplate__groupheader')<br />
:wikitext(rowArgs.header)<br />
elseif rowArgs.list then<br />
local row = content:tag('div')<br />
row:addClass('template-navplate-item')<br />
row<br />
:tag('div')<br />
:addClass('template-navplate-item__label')<br />
:wikitext(rowArgs.label)<br />
:done()<br />
<br />
local list = row:tag('div')<br />
list<br />
:addClass('template-navplate-item__list')<br />
:wikitext(rowArgs.list)<br />
end<br />
end<br />
<br />
local function renderTitle(header)<br />
local headerContent = mw.html.create('div')<br />
headerContent:addClass('template-navplate__headerContent')<br />
<br />
if not args.title then return end<br />
if args.subtitle then<br />
headerContent<br />
:tag('div')<br />
:addClass('template-navplate__subtitle')<br />
:wikitext(args.subtitle)<br />
:done()<br />
end<br />
headerContent<br />
:tag('div')<br />
:addClass('template-navplate__title')<br />
:wikitext(args.title)<br />
<br />
header:node(headerContent)<br />
end<br />
<br />
local function renderRows(content)<br />
-- Gets the union of the header and list argument numbers,<br />
-- and renders them all in order using addRow.<br />
local rownums = union(getArgNums('header'), getArgNums('list'))<br />
table.sort(rownums)<br />
for k, num in ipairs(rownums) do<br />
addRow({<br />
header = args['header' .. tostring(num)],<br />
label = args['label' .. tostring(num)],<br />
list = args['list' .. tostring(num)]<br />
},<br />
content)<br />
end<br />
end<br />
<br />
-- If the argument exists and isn't blank, add it to the argument table.<br />
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.<br />
local function preprocessSingleArg(argName)<br />
if origArgs[argName] and origArgs[argName] ~= '' then<br />
args[argName] = origArgs[argName]<br />
end<br />
end<br />
<br />
-- Assign the parameters with the given prefixes to the args table, in order, in<br />
-- batches of the step size specified. This is to prevent references etc. from<br />
-- appearing in the wrong order. The prefixTable should be an array containing<br />
-- tables, each of which has two possible fields, a "prefix" string and a<br />
-- "depend" table. The function always parses parameters containing the "prefix"<br />
-- string, but only parses parameters in the "depend" table if the prefix<br />
-- parameter is present and non-blank.<br />
local function preprocessArgs(prefixTable, step)<br />
if type(prefixTable) ~= 'table' then<br />
error("Non-table value detected for the prefix table", 2)<br />
end<br />
if type(step) ~= 'number' then<br />
error("Invalid step value detected", 2)<br />
end<br />
<br />
-- Get arguments without a number suffix, and check for bad input.<br />
for i,v in ipairs(prefixTable) do<br />
if type(v) ~= 'table' or type(v.prefix) ~= "string" or<br />
(v.depend and type(v.depend) ~= 'table') then<br />
error('Invalid input detected to preprocessArgs prefix table', 2)<br />
end<br />
preprocessSingleArg(v.prefix)<br />
-- Only parse the depend parameter if the prefix parameter is present<br />
-- and not blank.<br />
if args[v.prefix] and v.depend then<br />
for j, dependValue in ipairs(v.depend) do<br />
if type(dependValue) ~= 'string' then<br />
error('Invalid "depend" parameter value detected in preprocessArgs')<br />
end<br />
preprocessSingleArg(dependValue)<br />
end<br />
end<br />
end<br />
<br />
-- Get arguments with number suffixes.<br />
local a = 1 -- Counter variable.<br />
local moreArgumentsExist = true<br />
while moreArgumentsExist == true do<br />
moreArgumentsExist = false<br />
for i = a, a + step - 1 do<br />
for j,v in ipairs(prefixTable) do<br />
local prefixArgName = v.prefix .. tostring(i)<br />
if origArgs[prefixArgName] then<br />
-- Do another loop if any arguments are found, even blank ones.<br />
moreArgumentsExist = true<br />
preprocessSingleArg(prefixArgName)<br />
end<br />
-- Process the depend table if the prefix argument is present<br />
-- and not blank, or we are processing "prefix1" and "prefix" is<br />
-- present and not blank, and if the depend table is present.<br />
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then<br />
for j,dependValue in ipairs(v.depend) do<br />
local dependArgName = dependValue .. tostring(i)<br />
preprocessSingleArg(dependArgName)<br />
end<br />
end<br />
end<br />
end<br />
a = a + step<br />
end<br />
end<br />
<br />
local function parseDataParameters()<br />
preprocessSingleArg('id')<br />
preprocessSingleArg('subtitle')<br />
preprocessSingleArg('title')<br />
preprocessArgs({<br />
{prefix = 'header'},<br />
{prefix = 'list', depend = {'label'}},<br />
}, 50)<br />
end<br />
<br />
local function _navplate()<br />
root = mw.html.create('div')<br />
header = mw.html.create('div')<br />
content = mw.html.create('div')<br />
<br />
header<br />
:addClass('template-navplate__header')<br />
:addClass('mw-collapsible-toggle')<br />
:tag('div')<br />
:addClass('citizen-ui-icon mw-ui-icon-wikimedia-collapse')<br />
:done()<br />
<br />
content<br />
:addClass('template-navplate__content')<br />
:addClass('mw-collapsible-content')<br />
<br />
renderTitle(header)<br />
renderRows(content)<br />
<br />
root<br />
:addClass('template-navplate')<br />
:addClass('mw-collapsible')<br />
:attr('role', 'navigation')<br />
:node(header)<br />
:node(content)<br />
<br />
if args.id then root:attr('id', 'navplate-' .. args.id) end<br />
<br />
return mw.getCurrentFrame():extensionTag{<br />
name = 'templatestyles', args = { src = 'Module:Navplate/styles.css' }<br />
} .. tostring(root)<br />
end<br />
<br />
-- If called via #invoke, use the args passed into the invoking template.<br />
-- Otherwise, for testing purposes, assume args are being passed directly in.<br />
function p.navplate(frame)<br />
if frame == mw.getCurrentFrame() then<br />
origArgs = frame:getParent().args<br />
else<br />
origArgs = frame<br />
end<br />
<br />
parseDataParameters()<br />
<br />
return _navplate()<br />
end<br />
<br />
-- For calling via #invoke within a template<br />
function p.navplateTemplate(frame)<br />
origArgs = {}<br />
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end<br />
<br />
parseDataParameters()<br />
<br />
return _navplate()<br />
end<br />
return p</div>
Antt1995
https://dsp-wiki.com/index.php?title=Module:Navplate/styles.css&diff=14642&oldid=0
Module:Navplate/styles.css
2024-03-24T11:54:37Z
<p><a href="/User:Antt1995" class="mw-userlink" title="User:Antt1995"><bdi>Antt1995</bdi></a> imported <a href="/Module:Navplate/styles.css" title="Module:Navplate/styles.css">Module:Navplate/styles.css</a> by file upload (1 revision) New Files</p>
<p><b>New page</b></p><div>.template-navplate {<br />
margin-top: var( --space-md );<br />
clear: both;<br />
font-size: 0.875rem;<br />
line-height: var( --line-height-sm );<br />
border: 1px solid var( --border-color-base );<br />
border-radius: var( --border-radius--medium );<br />
overflow: hidden;<br />
}<br />
<br />
.template-navplate__header {<br />
padding: var( --space-sm ) var( --space-md );<br />
background-color: var( --color-surface-2 );<br />
display: flex;<br />
align-items: center;<br />
gap: var(--space-md);<br />
}<br />
<br />
.template-navplate.mw-collapsed .template-navplate__header {<br />
background-color: transparent;<br />
}<br />
<br />
.template-navplate__subtitle {<br />
font-size: 0.8125rem;<br />
}<br />
<br />
.template-navplate__subtitle,<br />
.template-navplate-item__label {<br />
color: var( --color-base--subtle );<br />
letter-spacing: 0.05em;<br />
}<br />
<br />
.template-navplate__title,<br />
.template-navplate__groupheader {<br />
color: var( --color-base--emphasized );<br />
font-weight: var( --font-weight-semibold );<br />
}<br />
<br />
.template-navplate__title {<br />
font-size: var( --font-size-h3 );<br />
}<br />
<br />
.template-navplate__content {<br />
position: relative;<br />
border-top: 1px solid var( --border-color-base );<br />
}<br />
<br />
.template-navplate__groupheader {<br />
background-color: var( --color-surface-2 );<br />
padding: var( --space-xs ) var( --space-md );<br />
}<br />
<br />
.template-navplate-item {<br />
display: grid;<br />
}<br />
<br />
.template-navplate-item__label {<br />
display: flex;<br />
padding: var( --space-sm ) var( --space-md ) 0 var( --space-md );<br />
gap: var( --space-xs );<br />
}<br />
<br />
.template-navplate-item__label img {<br />
opacity: var( --opacity-icon-base );<br />
filter: var( --filter-invert );<br />
}<br />
<br />
.template-navplate-item__list {<br />
padding: 10px; /* 10px + 2px = space-sm; 10px + 6px = space-md */<br />
}<br />
<br />
.template-navplate-item__list a {<br />
display: inline-block;<br />
padding: 2px 6px;<br />
}<br />
<br />
.template-navplate__content > div + div {<br />
border-top: 1px solid var( --border-color-base );<br />
}<br />
<br />
/* Style collapse button */<br />
.template-navplate__header.mw-collapsible-toggle {<br />
float: none;<br />
}<br />
<br />
.template-navplate__header.mw-collapsible-toggle:hover {<br />
background-color: var( --background-color-quiet--hover );<br />
}<br />
<br />
.template-navplate__header.mw-collapsible-toggle .mw-ui-icon-wikimedia-collapse {<br />
width: 0.875rem;<br />
height: 0.875rem;<br />
transition: var( --transition-menu );<br />
transition-property: transform;<br />
}<br />
<br />
.template-navplate__header.mw-collapsible-toggle.mw-collapsible-toggle-collapsed .mw-ui-icon-wikimedia-collapse {<br />
transform: rotate( 180deg );<br />
}<br />
<br />
@media only screen and ( min-width: 640px ) {<br />
.template-navplate-item {<br />
grid-template-columns: 180px auto;<br />
}<br />
<br />
.template-navplate-item__label {<br />
border-right: 1px solid var( --border-color-base );<br />
padding-bottom: var( --space-sm );<br />
}<br />
}</div>
Antt1995