Editing Module:Set page header

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

This page is not enabled for semantic in-text annotations due to namespace restrictions. Details about how to enable the namespace can be found on the configuration help page.

Latest revision Your text
Line 12: Line 12:
 
local DATA = require( 'Module:Data' )
 
local DATA = require( 'Module:Data' )
 
local UTIL = require( 'Module:Util' )
 
local UTIL = require( 'Module:Util' )
 +
 +
local LANGUAGE_ENGLISH = DATA.getLanguage( 'English' )
  
 
local mwTitle = mw.title
 
local mwTitle = mw.title
 
-- Object containing data on this release of the set
 
-- (Object is called `releaseData` rather than `setData`, which is ambiguous in programming terms.)
 
--
 
-- @param pagename    string    The name of the current page (the list/gallery)
 
-- @param set        string    The page name of the set
 
-- @param name        string    The English name of the set
 
-- @param localName  string    The name of the set in this particular print and language
 
-- @param language    table    The language of this particular print e.g. "English", "Korean", etc.
 
--                              (See [[Module:Data/static/language/data]] for the table structure)
 
-- @param region      table    The distribution region of this print e.g. "European English", "Korean", etc.
 
--                              (See [[Module:Data/static/region/data]] for the table structure)
 
-- @param medium      table    The medium (OCG, TCG, etc.)
 
--                              (See [[Module:Data/static/medium/data]] for the table structure)
 
-- @param edition    table    The edition of this particular print
 
--                              (See [[Module:Data/static/edition/data]] for the table structure)
 
-- @param releaseDate string    The date this print was released
 
local releaseData = {
 
pagename = nil,
 
set = nil,
 
name = nil,
 
localName = nil,
 
language = {},
 
region = {},
 
medium = {},
 
edition = nil,
 
releaseDate = nil,
 
isParentSet = nil,
 
}
 
  
 
local function getRegion( pagename )
 
local function getRegion( pagename )
-- Get content after the first hyphen after the last `(` in the page name
+
local index = pagename:match( 'CG%-(%a+)%-?' )
-- up until the next `-` or `)`
 
-- More specifically match
 
-- `(`
 
-- Any amount of non-`(` non-`-`
 
-- `-`
 
-- Any amount of non-`(` non-`-` (Capture the text in this group)
 
-- An optional `-`
 
-- An optional amout of non-`(` non-`-`
 
-- A `)`
 
-- the end of the string
 
local index = pagename:match( '%([^%(-]*-([^%(-]*)-?[^%(-]*%)$' )
 
  
 
local region = DATA.getRegion( index ) -- TODO: handle erroneous region (nil)?
 
local region = DATA.getRegion( index ) -- TODO: handle erroneous region (nil)?
Line 64: Line 26:
  
 
local function getEdition( pagename )
 
local function getEdition( pagename )
-- Get content after the second hyphen after the last `(` in the page name.
+
local index = pagename:match( 'CG%-%a+%-(%w+)' )
local index = pagename:match( '%([^%(-]*-[^%(-]*-([^%(]*)%)$' )
 
  
 
local edition = DATA.getEdition( index ) -- TODO: handle erroneous edition (nil)?
 
local edition = DATA.getEdition( index ) -- TODO: handle erroneous edition (nil)?
Line 80: Line 41:
 
end
 
end
  
 +
local function makeHeader( setPagename, region, edition )
 +
local language = DATA.getLanguage( region.index )
  
local function makeHeader( setPagename, region, edition )
+
local medium = DATA.getMedium( region.index )
 +
 
 +
local englishName = DATA.getName(
 +
setPagename,
 +
LANGUAGE_ENGLISH
 +
)
 +
 
 +
local localizedName = DATA.getName(
 +
setPagename,
 +
language
 +
)
  
 
local header = mw.html.create( 'div' ):addClass( 'page-header' )
 
local header = mw.html.create( 'div' ):addClass( 'page-header' )
Line 88: Line 61:
 
header:tag( 'div' )
 
header:tag( 'div' )
 
:addClass( 'page-header__link' )
 
:addClass( 'page-header__link' )
:wikitext( UTIL.link( releaseData.set, releaseData.name ) )
+
:wikitext( UTIL.link( setPagename, englishName ) )
  
 
-- Localized set name:
 
-- Localized set name:
if releaseData.language.index ~= 'en' and releaseData.localName then
+
if language.index ~= LANGUAGE_ENGLISH.index and localizedName then
 
header:tag( 'div' )
 
header:tag( 'div' )
 
:addClass( 'page-header__localized' )
 
:addClass( 'page-header__localized' )
:attr( 'lang', releaseData.language.index )
+
:attr( 'lang', language.index )
:wikitext( releaseData.localName )
+
:wikitext( localizedName )
 
end
 
end
  
Line 101: Line 74:
 
header:tag( 'div' )
 
header:tag( 'div' )
 
:addClass( 'page-header__caption' )
 
:addClass( 'page-header__caption' )
:wikitext( releaseData.region.full )
+
:wikitext( region.full )
:wikitext( releaseData.edition and ( ' - %s' ):format( releaseData.edition.full ) )
+
:wikitext( edition and ( ' - %s' ):format( edition.full ) )
 
 
-- If there is a release date, show it in the header
 
if ( releaseData.releaseDate ) then
 
header:tag( 'div' ):wikitext( '(Release date: ' .. releaseData.releaseDate .. ')' )
 
end
 
  
 
return tostring( header )
 
return tostring( header )
 
end
 
end
  
local function makeCategories( ns )
+
local function makeCategories( ns, region, edition )
local categories = {
+
return table.concat{
( '[[Category:%s %s]]' ):format( releaseData.region.full, ns )
+
( '[[Category:%s %s]]' ):format( region.full, ns ),
}
+
edition and ( '[[Category:%s %s]]' ):format( edition.full, ns ),
 
if ( releaseData.edition ) then
 
table.insert( categories, ( '[[Category:%s %s]]' ):format( releaseData.edition.full, ns ) )
 
end
 
 
 
if ( ns == 'Set Card Lists' and releaseData.isParentSet ) then
 
table.insert( categories, '[[Category:Set Card Lists for parent sets]]' )
 
end
 
 
 
-- Set lists with no release dates
 
-- Excludes lists for parent sets, whose children each have individual release dates
 
if ( ns == 'Set Card Lists' and not releaseData.releaseDate and not releaseData.isParentSet ) then
 
table.insert( categories, '[[Category:Set Card Lists with no release date]]' )
 
end
 
 
 
return table.concat(categories)
 
end
 
 
 
local function setSmwData( ns, setPagename, region, edition )
 
mw.smw.set({
 
['Set page']    = releaseData.set,
 
['Local name']  = releaseData.localName,
 
['Release']      = releaseData.medium and releaseData.medium.full,
 
['Language']    = releaseData.language.full,
 
['Locality']    = releaseData.region and releaseData.region.full,
 
['Edition']      = releaseData.edition and releaseData.edition.full,
 
['Release date'] = releaseData.releaseDate
 
})
 
end
 
 
 
-- Fetch data from the set page
 
-- @return table    name, localName, releaseDate
 
local function querySetData()
 
local results = mw.smw.ask{
 
'[[' .. releaseData.set .. ']]',
 
'?English name = name' ,
 
'?' .. releaseData.language.full .. ' name = localName',
 
'?' .. releaseData.region.full .. ' release date = releaseDate',
 
-- Bit sloppy, but we need to fallback to this if "Worldwide English release date" is empty
 
'?English release date = englishReleaseDate',
 
'?-Parent set = isParentSet',
 
mainlabel = '-'
 
 
}
 
}
 
-- Reurn the first result, if there is one
 
return results and results[ 1 ]
 
end
 
 
-- Set data for the `releaseData` table based on the page name and parameters
 
local function setReleaseData( ns, currentPageName, args )
 
-- Set the set page equal to the supplied set
 
-- or defaul to to the one that can be inferred from the page name
 
releaseData.set = args.set or getSetPagename( currentPageName )
 
 
-- Set the region equal to the supplied region
 
-- or default to the one that can be inferred from the page name
 
releaseData.region = args.region
 
and DATA.getRegion( args.region )
 
or getRegion( currentPageName )
 
 
-- Set the language, based on the region
 
releaseData.language = DATA.getLanguage( releaseData.region.index )
 
 
-- Set the medium based on the region
 
releaseData.medium = DATA.getMedium( releaseData.region.index )
 
 
-- Set the edition based on the page name
 
releaseData.edition = getEdition( currentPageName )
 
 
-- Query the set page to find more information
 
local queriedData = querySetData()
 
 
-- Exit early if no results were found
 
if ( not queriedData ) then
 
-- todo: Tracking category
 
return
 
end
 
 
-- Update the `releaseData` object based on the results of the query
 
-- except where overwritten by the `args`.
 
releaseData.name        = queriedData.name
 
releaseData.localName  = args.name        or queriedData.localName
 
releaseData.isParentSet = queriedData.isParentSet and true or false
 
 
-- For now, only do the release date for list pages
 
-- Don't add it to parent set lists e.g. the overall "Shonen Jump promotional cards" list
 
-- which have multiple releases, each with their own set list.
 
if ( ns == 'Set Card Lists' and not queriedData.isParentSet ) then
 
releaseData.releaseDate = args.releaseDate or queriedData.releaseDate
 
 
-- If 'Worldwide English' and the `releaseDate` is empty, check the `englishReleaseDate`
 
if ( not releaseData.releaseDate and releaseData.region.full == 'Worldwide English' ) then
 
releaseData.releaseDate = queriedData.englishReleaseDate
 
end
 
end
 
 
end
 
end
  
 
function main( args )
 
function main( args )
-- Get the name of the current page (distinct from the name of the set page)
 
 
local currentTitle = args.pagename
 
local currentTitle = args.pagename
 
and mwTitle.new( args.pagename )
 
and mwTitle.new( args.pagename )
Line 221: Line 94:
 
local ns = currentTitle.subjectNsText
 
local ns = currentTitle.subjectNsText
  
-- Skip everything if this is in the main namespace
 
 
if not UTIL.trim( ns ) then
 
if not UTIL.trim( ns ) then
 
return
 
return
 
end
 
end
  
-- Update the `releaseData` object based on information from the page name
+
local pagename = currentTitle.text
-- and the supplied arguments.
+
 
setReleaseData( ns, currentTitle.text, args )
+
local region = args.region and DATA.getRegion( args.region ) or getRegion( pagename )
 +
 
 +
local edition = getEdition( pagename )
  
-- Get the header wikitext
+
local setPagename = args.set or getSetPagename( pagename )
local header = makeHeader()
 
  
-- Get the categories wikitext
+
local header = makeHeader( setPagename, region, edition )
local categories = makeCategories( ns )
 
  
-- Set SMW properties
+
local categories = makeCategories( ns, region, edition )
setSmwData()
 
  
-- Return the wikitext to render
 
 
return table.concat{
 
return table.concat{
 
'__NOTOC__',
 
'__NOTOC__',

Please note that all contributions to Yugipedia are considered to be released under the Creative Commons Attribution-ShareAlike 4.0 International License (see Yugipedia:Licensing for more details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)
Preview page with this template
Below are some commonly used wiki markup codes. Simply click on what you want to use and it will appear in the edit box above.

View this template