Module:Cite source

local util_vars = require('Module:VarsUtil') local concat local dump local print local properties = {"partOf", "series", "seriesNumber", "season", "Writer", "publisher"} -- year and issue also exist but have seperate handling. local p = {} --p stands for package

function p.getinfo( frame ) local testText = "" local queryResult = mw.smw.ask( [=[ Rose (TV story) || Rosa (TV story) || Dalek (TV story)	if queryResult == nil then       return "No data."    end    if type( queryResult ) == "table" then    	for queryResultsCounter = 1, #queryResult do    		local current = queryResult[queryResultsCounter]    		local outputText = ""	    	local data = {["partOf"] = "", ["series"] = "", ["seriesNumber"] = "", ["season"] = "", ["Writer"] = "", ["publisher"] = ""}	    	for key, val in pairs(data) do	    		if type( current[key] ) == "string" then	    			data[key] = current[key]	    		elseif type( current[key] ) == "table" then	    			data[key] = ""	    			for i = 1, #current[key] do		    			data[key] = data[key] .. current[key][i]		    			if i == #current[key]-1 then		    				data[key] = data[key] .. " and "		    			elseif i == #current[key] then		    				data[key] = data[key]		    			else data[key] = data[key] .. ", "		   			end end end end outputText = data["Writer"] local name = current[1] local varBin = util_vars.setVar("sc-" .. name, outputText) testText = testText .. current[1] .. ": " .. outputText .. "\n\n" .. util_vars.getVar("sc-" .. current[1]) .. "\n\n" end end testText = testText .. " " .. dump(queryResult) .. " " .. util_vars.getVar("sc-Dalek (TV story)") return testText end
 * ?Publisher
 * ?Writer
 * ?Release date
 * ?Pagename ]=] )

--from https://sandbox.semantic-mediawiki.org/wiki/Module:Sm --- Concatenates a variable number of strings and numbers to one single string -- ignores tables, bools, functions, and such and replaces them with the empty string -- -- What is the benefit of using variable.concat instead of the .. operator? -- Answer: .. throws an error, when trying to concat bools, tables, functions, etc. -- This here handels them by converting them to an empty string -- -- @param ... varaibles to concatenate -- -- @return string concat = function(...) local args = {...} if #args == 0 then error('you must supply at least one argument to \'concat\' (got none)') end local firstArg = table.remove(args, 1) if type(firstArg) == 'string' or type(firstArg) == 'number' then firstArg = print(firstArg) else firstArg = '' end if #args == 0 then return firstArg else return firstArg .. concat(unpack(args)) end end

--- This dumps the variable (converts it into a string representation of itself) -- -- @param entity mixed, value to dump -- @param indent string, can bu used to set an indentation -- @param omitType bool, set to true to omit the () in front of the value -- -- @return string dump = function(entity, indent, omitType) local entity = entity local indent = indent and indent or '' local omitType = omitType if type( entity ) == 'table' then local subtable if not omitType then subtable = '(table)[' .. #entity .. ']:'       end indent = indent .. '\t' for k, v in pairs( entity ) do           subtable = concat(subtable, '\n', indent, k, ': ', dump(v, indent, omitType)) end return subtable elseif type( entity ) == 'nil' or type( entity ) == 'function' or type( entity ) == 'boolean' then return ( not omitType and '(' .. type(entity) .. ') ' or '' ) .. print(entity) elseif type( entity ) == 'string' then entity = mw.ustring.gsub(mw.ustring.gsub(entity, "\\'", "'"), "'", "\\'") return concat(omitType or '(string) ', '\, entity, '\) else -- number value expected return concat(omitType or '(' .. type( entity ) .. ') ', entity) end end

--- This function prints a variable depending on its type: -- * tables get concatenated by a comma -- * bools get printed as true or false -- * strings and numbers get simple returned as string -- * functions and nils return as emtpy string -- @return string print = function(v) if type( v ) == 'table' then return table.concat(v, ',') elseif type( v ) == 'boolean' then return ( v and 'true' or 'false' ) elseif type(v) == 'string' or type(v) == 'number' then return tostring(v) else return '' end end

return p