Module:Video game review score: Difference between revisions
Appearance
Content deleted Content added
Fix new show parameter default values |
No edit summary |
||
Line 59: | Line 59: | ||
local function printReviewRow(frame, gameName, reviewscore, df, showRefs, |
local function printReviewRow(frame, gameName, reviewscore, df, showRefs, proseScore) |
||
local ret = "" |
local ret = "" |
||
Line 69: | Line 69: | ||
system = vgwd.getSystemAlias(reviewscore['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']); |
system = vgwd.getSystemAlias(reviewscore['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']); |
||
end |
end |
||
if(not (system == nil or system == "") and |
if(not (system == nil or system == "") and not(proseScore)) then |
||
ret = ret.."("..system..") "; |
ret = ret.."("..system..") "; |
||
end; |
end; |
||
Line 78: | Line 78: | ||
end; |
end; |
||
if(not (reviewscore['references'] == nil or reviewscore['references'][1] == nil) and showRefs) then |
if(not (reviewscore['references'] == nil or reviewscore['references'][1] == nil) and showRefs and not(proseScore)) then |
||
local cite = buildCiteWeb(reviewscore['references'][1], df); |
local cite = buildCiteWeb(reviewscore['references'][1], df); |
||
Line 102: | Line 102: | ||
function p._main(frame, args) |
function p._main(frame, args) |
||
local reviewer = args["reviewer"]; |
local reviewer = args["reviewer"]; |
||
⚫ | |||
-- No reviewer, stop. Must have reviewer at least. |
-- No reviewer, stop. Must have reviewer at least. |
||
Line 119: | Line 118: | ||
end; |
end; |
||
-- Check for a date format parameter. Default to mdy if missing. |
|||
⚫ | |||
if(df == nil or df == "") then |
if(df == nil or df == "") then |
||
df = "mdy"; |
df = "mdy"; |
||
Line 124: | Line 125: | ||
df = string.lower(df); |
df = string.lower(df); |
||
-- Check for a game parameter. If missing, default to current article. |
|||
local game = args["game"]; |
local game = args["game"]; |
||
local entity = nil; |
local entity = nil; |
||
Line 138: | Line 140: | ||
local gameName = entity:getLabel(); |
local gameName = entity:getLabel(); |
||
-- Reference suppression. |
|||
⚫ | |||
local |
local showRefs = true; |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- Prose score formatting. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- Check for system parameter, and resolve it's QID if possible. |
|||
local system = args["system"]; |
local system = args["system"]; |
||
local systemId = nil; |
local systemId = nil; |
||
Line 145: | Line 158: | ||
system = string.upper(system); |
system = string.upper(system); |
||
systemId = vgwd.getSystemID(system); |
systemId = vgwd.getSystemID(system); |
||
elseif(proseScore) then |
|||
-- If no system was specified, force proseScore off. |
|||
proseScore = false; |
|||
end; |
end; |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
local reviewscores = entity['claims']['P444']; |
|||
⚫ | |||
⚫ | |||
local showSystems = true; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
if(reviewscores) then |
if(reviewscores) then |
||
for i = 1, #reviewscores do |
for i = 1, #reviewscores do |
||
Line 167: | Line 176: | ||
if(not(system == nil or system == "")) then |
if(not(system == nil or system == "")) then |
||
if(not(reviewscores[i]['qualifiers']['P400'] == nil or reviewscores[i]['qualifiers']['P400'][1] == nil)) then |
if(not(reviewscores[i]['qualifiers']['P400'] == nil or reviewscores[i]['qualifiers']['P400'][1] == nil)) then |
||
-- Try to match based on QID. |
|||
local reviewSysId = reviewscores[i]['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']; |
local reviewSysId = reviewscores[i]['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']; |
||
if(systemId == reviewSysId) then |
if(systemId == reviewSysId) then |
||
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, |
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, proseScore); |
||
else |
else |
||
-- If that failed, try to match based on label. |
|||
local systemName = mw.wikibase.label('Q'..reviewSysId); |
local systemName = mw.wikibase.label('Q'..reviewSysId); |
||
if(not(systemName == nil) and string.upper(systemName) == system) then |
if(not(systemName == nil) and string.upper(systemName) == system) then |
||
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, |
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, proseScore); |
||
end; |
end; |
||
end; |
end; |
||
Line 180: | Line 190: | ||
else |
else |
||
-- No system specified, so output each one found. |
-- No system specified, so output each one found. |
||
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, |
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, false); |
||
end; |
end; |
||
end; |
end; |
||
Line 186: | Line 196: | ||
end; |
end; |
||
-- Add edit link at end. |
-- Add edit link at end. If proseScore is set, suppress. |
||
if(not(proseScore)) then |
|||
⚫ | |||
--ret = string.sub(ret, 1, -7)..'<sup>[[d:'..entity['id']..'#P444|[±]]]</sup>'; |
|||
⚫ | |||
⚫ | |||
end; |
|||
return ret; |
return ret; |
||
end; |
end; |
Revision as of 22:14, 19 April 2016
![]() | This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
Usage
![]() | This module depends on the following other modules: |
This module uses the Wikidata properties:
platform (P400) (see uses)
review score (P444) (see uses)
review score by (P447) (see uses)
reference URL (P854) (see uses)
retrieved (P813) (see uses)
publisher (P123) (see uses)
title (P1476) (see uses)
published in (P1433) (see uses)
Implements {{Video game review score}}
local Date = require('Module:Date')._Date
local vgwd = require('Module:Video game wikidata')
local yesno = require('Module:Yesno')
local p = {}
local function buildCiteWeb(reference, df)
local referenceUrl = nil;
local cite = nil;
if(not(reference['snaks']['P854'] == nil or reference['snaks']['P854'][1] == nil)) then
referenceUrl = reference['snaks']['P854'][1]['datavalue']['value'];
end;
if(not (referenceUrl == nil or referenceUrl == "")) then
cite = "{{cite web|url="..referenceUrl;
local timestamp = nil;
local publisher = nil;
local work = nil;
local title = nil;
if(not (reference['snaks']['P813'] == nil or reference['snaks']['P813'][1] == nil)) then
timestamp = reference['snaks']['P813'][1]['datavalue']['value']['time'];
end;
if(not (reference['snaks']['P123'] == nil or reference['snaks']['P123'][1] == nil)) then
publisher = mw.wikibase.label('Q'..reference['snaks']['P123'][1]['datavalue']['value']['numeric-id']);
end;
if(not (reference['snaks']['P1433'] == nil or reference['snaks']['P1433'][1] == nil)) then
work = mw.wikibase.label('Q'..reference['snaks']['P1433'][1]['datavalue']['value']['numeric-id']);
end;
if(not (reference['snaks']['P1476'] == nil or reference['snaks']['P1476'][1] == nil)) then
title = reference['snaks']['P1476'][1]['datavalue']['value']['text'];
end;
if(not(title == nil or title == "")) then
cite = cite .. "|title="..title;
end;
if(not(publisher == nil or publisher == "")) then
cite = cite .. "|publisher="..publisher;
end;
if(not(work == nil or work == "")) then
cite = cite .. "|work="..work;
end;
if(not(timestamp == nil or timestamp == "")) then
local year = string.sub(timestamp,2,5);
local month = string.sub(timestamp,7,8);
local day = string.sub(timestamp,10,11);
local accessdate = Date(year, month, day):text(df);
cite = cite .. "|accessdate="..accessdate;
end;
cite = cite..'}}';
end;
return cite;
end;
local function printReviewRow(frame, gameName, reviewscore, df, showRefs, proseScore)
local ret = ""
local system = nil;
local score = nil;
local reference = nil;
if(not(reviewscore['qualifiers']['P400'] == nil or reviewscore['qualifiers']['P400'][1] == nil)) then
system = vgwd.getSystemAlias(reviewscore['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']);
end
if(not (system == nil or system == "") and not(proseScore)) then
ret = ret.."("..system..") ";
end;
score = reviewscore['mainsnak']['datavalue']['value'];
if(not (score == nil or score == "")) then
ret = ret..score;
end;
if(not (reviewscore['references'] == nil or reviewscore['references'][1] == nil) and showRefs and not(proseScore)) then
local cite = buildCiteWeb(reviewscore['references'][1], df);
if(not(cite == nil)) then
local scoreBy = vgwd.getAggregatorAlias(reviewscore['qualifiers']['P447'][1]['datavalue']['value']['numeric-id']);
if(scoreBy == nil) then
scoreBy = vgwd.getReviewerAlias(reviewscore['qualifiers']['P447'][1]['datavalue']['value']['numeric-id']);
end;
local name = gameName..'-'..scoreBy;
if(not (system == nil or system == "")) then
name = name..system;
end;
cite = frame:extensionTag{ name = "ref", args = {name=name}, content=cite };
ret = ret..cite;
end;
end;
return ret.."<br />";
end
function p._main(frame, args)
local reviewer = args["reviewer"];
-- No reviewer, stop. Must have reviewer at least.
if(reviewer == nil or reviewer == "") then
return "Missing reviewer";
end;
-- See if supplied reviewer is in the aggregator table.
reviewer = vgwd.getAggregatorID(string.upper(reviewer));
if(reviewer == nil or reviewer == "") then
-- No? Maybe in the reviewer table.
reviewer = vgwd.getReviewerID(string.upper(reviewer));
if(reviewer == nil or reviewer == "") then
return "Invalid reviewer";
end;
end;
-- Check for a date format parameter. Default to mdy if missing.
local df = args["df"];
if(df == nil or df == "") then
df = "mdy";
end;
df = string.lower(df);
-- Check for a game parameter. If missing, default to current article.
local game = args["game"];
local entity = nil;
if(game == nil or game == "") then
entity = mw.wikibase.getEntity();
else
entity = mw.wikibase.getEntity(game);
end;
if(not entity) then
return "No matching wikidata entity found";
end
local gameName = entity:getLabel();
-- Reference suppression.
local showRefs = true;
if(args['showRefs']) then
showRefs = yesno(args['showRefs'], true);
end;
-- Prose score formatting.
local proseScore = false;
if(args['proseScore']) then
proseScore = yesno(args['proseScore'], false);
end;
-- Check for system parameter, and resolve it's QID if possible.
local system = args["system"];
local systemId = nil;
if(not(system == nil or system == "")) then
system = string.upper(system);
systemId = vgwd.getSystemID(system);
elseif(proseScore) then
-- If no system was specified, force proseScore off.
proseScore = false;
end;
-- Loop all of "review scores" for this title
local ret = "";
local reviewscores = entity['claims']['P444'];
if(reviewscores) then
for i = 1, #reviewscores do
local scoreBy = nil
if(not(reviewscores[i]['qualifiers']['P447'] == nil or reviewscores[i]['qualifiers']['P447'][1] == nil)) then
scoreBy = reviewscores[i]['qualifiers']['P447'][1]['datavalue']['value']['numeric-id'];
end;
if(scoreBy == reviewer) then
-- If template specified a system, we need to check for the specific system and only output that one.
if(not(system == nil or system == "")) then
if(not(reviewscores[i]['qualifiers']['P400'] == nil or reviewscores[i]['qualifiers']['P400'][1] == nil)) then
-- Try to match based on QID.
local reviewSysId = reviewscores[i]['qualifiers']['P400'][1]['datavalue']['value']['numeric-id'];
if(systemId == reviewSysId) then
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, proseScore);
else
-- If that failed, try to match based on label.
local systemName = mw.wikibase.label('Q'..reviewSysId);
if(not(systemName == nil) and string.upper(systemName) == system) then
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, proseScore);
end;
end;
end;
else
-- No system specified, so output each one found.
ret = ret .. printReviewRow(frame, gameName, reviewscores[i], df, showRefs, false);
end;
end;
end;
end;
-- Add edit link at end. If proseScore is set, suppress.
if(not(proseScore)) then
--ret = string.sub(ret, 1, -7)..'<sup>[[d:'..entity['id']..'#P444|[±]]]</sup>';
ret = ret..'<sup>[[d:'..entity['id']..'#P444|[±]]]</sup>';
end;
return ret;
end;
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Video game review score'
})
return p._main(frame, args)
end
return p