Module:Location Table: Difference between revisions

From Brighter Shores Wiki
Jump to navigation Jump to search
Content added Content deleted
m (Artoire moved page Module:Sandbox/User:Artoire/Location Table to Module:Location Table without leaving a redirect: Move out of sandbox)
(Undo revision 78221 by Artoire (talk): Fixed in Module:Break Isolation)
Tag: Undo
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
require('strict')
require('strict')
local persistant = require('Module:Break Isolation').get_module_store('Module:Location Table')
local parse = require('Module:Param Parse')
local parse = require('Module:Param Parse')
local edit = 'Unknown <span class="small plainlinks">' .. require('Module:Edit button')() .. '</span>'
local edit = 'Unknown <span class="small plainlinks">' .. require('Module:Edit button')() .. '</span>'

persistant.counter = persistant.counter or 0


local p = {}
local p = {}


function p.main(frame)
function p.head(frame)
return p._main(frame:getParent().args)
local args = frame:getParent().args
assert(not persistant.in_table, 'Second Template:LocTableHead (Missing Template:LocTableBottom?)')
persistant.in_table = true
persistant.json = {}
persistant.version = args.version
persistant.location_object = mw.title.getCurrentTitle().fullText
if args.version then
persistant.location_object = persistant.location_object .. '#' .. args.version
end
end
end


function p._main(args)
function p.line(frame)
assert(persistant.in_table, 'Template:LocLine when not in a location table (Missing Template:LocTableHead?)')
local tbl = mw.html.create('table')
local args = frame:getParent().args
:addClass('wikitable sortable filterable sticky-header loctable autosort=1,a')
local loc = args.loc
:css{ ['text-align'] = 'center' }
local qty = args.quantity
:tag('tr')
qty = tonumber(qty or '')
:tag('th'):wikitext('Location'):done()
persistant.json[loc] = qty or -1
:tag('th'):wikitext('Episode'):done()
local loc_link = ('[[%s]]'):format(loc)
:tag('th'):wikitext('Qty.'):done()
local episode = mw.smw.ask{loc_link, '?Episode#=', 'mainlabel=-'}
:done()
episode = episode and episode[1][1]


persistant.counter = persistant.counter + 1
local loc_version = args.version
local id = 'LOC_' .. persistant.counter
local location_object = mw.title.getCurrentTitle().fullText
local id_prefix = 'LOC_'
if loc_version then
location_object = location_object .. '#' .. loc_version
id_prefix = id_prefix .. loc_version .. '_'
end
local loc_json = {}


mw.smw.subobject({
for i = 1, 9007199254740992 do
['Location object'] = persistant.location_object,
local loc = args['loc'..i]
['Located in'] = loc,
if not loc then
['Location quantity'] = qty or 'Unknown'
break
}, id)
end
local qty = args['qty'..i]
qty = tonumber(qty or '')
loc_json[loc] = qty or -1
local loc_link = ('[[%s]]'):format(loc)
local episode = mw.smw.ask{loc_link, '?Episode#=', 'mainlabel=-'}
episode = episode and episode[1][1]
local id = id_prefix .. loc


tbl:tag('tr')
return mw.html.create('tr')
:attr{ id = id }
:attr{ id = id }
:tag('td'):wikitext(loc_link)
:tag('td'):wikitext(loc_link):done()
:tag('td'):wikitext(parse.episode_func(episode)):done()
:tag('td'):wikitext(parse.episode_func(episode)):done()
:tag('td'):wikitext(qty or edit):done()
:tag('td'):wikitext(qty or edit):done()
:done()
:done()
end


function p.bottom(frame)
mw.smw.subobject({
assert(persistant.in_table, 'Template:LocTableBottom when not in a location table (Missing Template:LocTableHead?)')
['Location object'] = location_object,
['Located in'] = loc,
['Location quantity'] = qty or 'Unknown'
}, id)
end


if loc_version then
if persistant.version then
mw.smw.subobject({ ['Location JSON'] = mw.text.jsonEncode(loc_json) }, loc_version)
mw.smw.subobject({ ['Location JSON'] = mw.text.jsonEncode(persistant.json) }, persistant.version)
else
else
mw.smw.set{ ['Location JSON'] = mw.text.jsonEncode(loc_json) }
mw.smw.set{ ['Location JSON'] = mw.text.jsonEncode(persistant.json) }
end
end


persistant.in_table = nil
return tbl
persistant.json = nil
persistant.version = nil
persistant.location_object = nil
end
end



Latest revision as of 16:54, 16 December 2024

Module documentation
This documentation is transcluded from Module:Location Table/doc. [edit] [history] [purge]
Module:Location Table's function bottom is invoked by Template:LocTableBottom.
Module:Location Table's function head is invoked by Template:LocTableHead.
Module:Location Table's function line is invoked by Template:LocLine.
Module:Location Table requires Module:Break Isolation.
Module:Location Table requires Module:Edit button.
Module:Location Table requires Module:Param Parse.
Module:Location Table requires strict.

This module is used by {{LocTableHead}}, {{LocLine}} and {{LocTableBottom}}.

In {{LocTableHead}}: Saves the {{{version}}} argument.

In {{LocLine}}: Sets a smw subobject for each location, saves the location and quantity and generates the table row.

In {{LocTableBottom}}: Retrieves the location and quantity each LocLine was called with and stores the Property:Location JSON.


require('strict')
local persistant = require('Module:Break Isolation').get_module_store('Module:Location Table')
local parse = require('Module:Param Parse')
local edit = 'Unknown <span class="small plainlinks">' .. require('Module:Edit button')() .. '</span>'

persistant.counter = persistant.counter or 0

local p = {}

function p.head(frame)
	local args = frame:getParent().args
	assert(not persistant.in_table, 'Second Template:LocTableHead (Missing Template:LocTableBottom?)')
	persistant.in_table = true
	persistant.json = {}
	persistant.version = args.version
	persistant.location_object = mw.title.getCurrentTitle().fullText
	if args.version then
		persistant.location_object = persistant.location_object .. '#' .. args.version
	end
end

function p.line(frame)
	assert(persistant.in_table, 'Template:LocLine when not in a location table (Missing Template:LocTableHead?)')
	local args = frame:getParent().args
	local loc = args.loc
	local qty = args.quantity
	qty = tonumber(qty or '')
	persistant.json[loc] = qty or -1
	local loc_link = ('[[%s]]'):format(loc)
	local episode = mw.smw.ask{loc_link, '?Episode#=', 'mainlabel=-'}
	episode = episode and episode[1][1]

	persistant.counter = persistant.counter + 1
	local id = 'LOC_' .. persistant.counter

	mw.smw.subobject({
		['Location object'] = persistant.location_object,
		['Located in'] = loc,
		['Location quantity'] = qty or 'Unknown'
	}, id)

	return mw.html.create('tr')
		:attr{ id = id }
		:tag('td'):wikitext(loc_link):done()
		:tag('td'):wikitext(parse.episode_func(episode)):done()
		:tag('td'):wikitext(qty or edit):done()
	:done()
end

function p.bottom(frame)
	assert(persistant.in_table, 'Template:LocTableBottom when not in a location table (Missing Template:LocTableHead?)')

	if persistant.version then
		mw.smw.subobject({ ['Location JSON'] = mw.text.jsonEncode(persistant.json) }, persistant.version)
	else
		mw.smw.set{ ['Location JSON'] = mw.text.jsonEncode(persistant.json) }
	end

	persistant.in_table = nil
	persistant.json = nil
	persistant.version = nil
	persistant.location_object = nil
end

return p