Yu-Gi-Oh! Wiki
Yu-Gi-Oh! Wiki
(Fix \t on the comments. Fix :tag() (missing «:»). More development on the card list stuff. Rough draft for the table design.)
Tag: sourceedit
(Some code hints)
Tag: sourceedit
Line 180: Line 180:
 
local _header = parameters['header'];
 
local _header = parameters['header'];
 
local _rarity = parameters['rarity'];
 
local _rarity = parameters['rarity'];
  +
-- You don't really want to name this object "table", due to conflicts with the keyword.
 
local table = mw.html.create( 'table' )
 
local table = mw.html.create( 'table' )
 
:addClass('wikitable'):addClass('sortable'):addClass('card-list')
 
:addClass('wikitable'):addClass('sortable'):addClass('card-list')
Line 186: Line 187:
 
:tag('th'):attr('scope','col'):attr('colspan',counter_colspan):wikitext(_header):done()
 
:tag('th'):attr('scope','col'):attr('colspan',counter_colspan):wikitext(_header):done()
 
:done()
 
:done()
  +
-- rather than all the colspan, what you really should use here is the <caption> element
 
end
 
end
 
table:tag('tr')
 
table:tag('tr')
Line 238: Line 240:
 
_rarityCard = cardList_array_std[2];
 
_rarityCard = cardList_array_std[2];
 
_qtyCard = cardList_array_std[3];
 
_qtyCard = cardList_array_std[3];
  +
-- _nameCard, _rarityCard, _qtyCard = cardList_array_std
 
else
 
else
 
_numberCard = cardList_array_std[1];
 
_numberCard = cardList_array_std[1];
Line 243: Line 246:
 
_rarityCard = cardList_array_std[3];
 
_rarityCard = cardList_array_std[3];
 
_qtyCard = cardList_array_std[4];
 
_qtyCard = cardList_array_std[4];
  +
-- _numberCard, _nameCard, _rarityCard, _qtyCard = cardList_array_std
 
end
 
end
 
_nameCard_localized = LN.localized_name( _nameCard, _language );
 
_nameCard_localized = LN.localized_name( _nameCard, _language );

Revision as of 00:12, 10 August 2017

Test Template Info-Icon - Version (2) Module documentation

The documentation for this module is missing. Click here to create it.

--[[
    Var list:
    (so I can keep track of what to use)
    ------
    # Set:
    ->  PAGENAME            //  {{PAGENAME}};
    ->  NAMESPACE           //  {{NAMESPACE}};
    ->  _rg                 //  Region code;
    ->  _region             //  Region name;
    ->  _ln                 //  Language code;
    ->  _language           //  Language name;
    ->  nameSet_parts       //  Aux var containing the parts for the set name by «(»;
    ->  _nameSet            //  Set name;
    ->  _nameSet_localized  //  Localized set name;
    ->  _qty                //  Quantity value;
    ---------
    # Design:
    ->  header              //  Page header (HTML);
    ->  category            //  Category;
    --------------
    # List (main):
    ->  cardList_input      //  List of cards passed;
    ->  cardList_array      //  Array of the above (by «\n»).
    ->  extra_column        //  If there's an extra column ({{{col}}});
    --------
    # Table:
    ->  _header             //  {{{header}}};
    ->  _rarity             //  {{{rarity}}};
    ->  table               //  Table to dsiplay (HTML);
    -----------------
    # List (entries):
    ## Section:
    ->  _headerSection      //  For sections («!:»), the header info («header::»);
    ->  _raritySection      //  For sections («!:»), the rarity info («rarity::»);
    ->  _qtySection         //  For sections («!:»), the quantity info («qty::»);
    ## Standard values (passed and parsed directly: <number>; <name>; <rarity>; <qty>;):
    ->  _nameCard           //  Card name (<name>);
    ->  _nameCard_localized //  Localized card name;
    ->  _numberCard         //  Card number (<number>);
    ->  _rarityCard         //  Card rarity (<rarity>);
    ->  _typeCard           //  Card type (or category);
    ->  _qtyCard            //  Card quantity (<qty>);
    ## Alternate values (literal, separated by «//»):
    ->  _nameCard_alt       //  «name::»;
    ->  _nameCard_localized_alt //  «name-local::»;
    ->  _numberCard_alt     //  «number::»;
    ->  _rarityCard_alt     //  «rarity::»;
    ->  _typeCard_alt       //  «category::»;
    ->  _description        //  «description::»;
    ->  _extra              //  «<lowercased_column_name>::», where the column name is «extra_column»;
    ## Processing:
    ->  cardList_array_parts//  Array of «cardList_array» divided by «//»;
    ->  cardList_array_std  //  Array of [1] of the above, divided by «;»;
    --------
    # Flags:
    ->  notEnglish          //  Boolean;
    ->  italics             //  Italicized name;
    ->  qty                 //  Boolean: exists {{{qty}}};
    ->  noAbbr              //  Boolean: if {{{abbr}}} is set off;
    ->  
    -----------
    # Counters:
    ->  colspan             //  Number of columns (colspan);
]]
----------
--  Start:
----------
local myInput = {};
--  Load outside data and modules:
local data = mw.loadData( 'Module:Set list/data' );
local LN = require( 'Module:Set list/name' );   --  For Localized Name.

function myInput.list( frame )
    --  Get arguments:
    --  { '1' or 'list', 'region', 'set', 'qty', 'abbr', 'col', 'header', 'rarity' }
    local parameters = frame.args;
    
    --  Load outside data:
    local rg_list       = data.rg_list;
    local region_list   = data.region_list;
    local ln_list       = data.ln_list;
    local language_list = data.language_list;
    --  {{PAGENAME}}
    local PAGENAME = mw.title.getCurrentTitle().text;
    --  {{NAMESPACE}}
    local NAMESPACE = mw.title.getCurrentTitle().nsText;
    
    ----------------------------------------
    --  Define vars related to the set info:
    ----------------------------------------
    
    --  Region and language:
    local _rg = parameters['region'] and parameters['region']:lower();
    local _region = '';
    if _rg == nil or _rg == '' then
        --_region = string.match( PAGENAME, '%-(%a*)' ):lower();  -- a value is needed always!
        return '<strong class="error">Error: A «region» is always needed!</strong>';
    else
        _region = region_list[_rg] or region_list['default'];
    end
    local flag_notEnglish = true;
    local flag_italics = 'italic';
    local _ln = ln_list[_rg];
    local _language = language_list[_ln];
    if _ln == 'en' then
        flag_notEnglish = false;
    end
    if _ln == 'ja' or _ln == 'zh' or _ln == 'ko' then
        flag_italics = 'normal';
    end

    --  Set name:
    local _nameSet = parameters['set'];
    if _nameSet == nil or _nameSet == '' then
        local nameSet_parts = mw.text.split( PAGENAME, ' %(' );
        if nameSet_parts[3] == nil or nameSet_parts[3] == '' then
            _nameSet = nameSet_parts[1];  -- Set name doesn't contain dab text.
        else
            _nameSet = nameSet_parts[1] ..' ('.. nameSet_parts[2];  -- Set name contains dab text.
        end
    end
    local _nameSet_localized = LN.localized_name( _nameSet, _language );
    
    --  Set abbreviation:
    local _abbr = parameters['abbr'] and parameters['abbr']:lower();
    local flag_noAbbr = false;
    if _abbr == 'no' or _abbr == 'none' or _abbr == 'off' or _abbr == 'false' or _abbr == '0' then
        flag_noAbbr = true;
    end
    
    -- Quantity (main):
    local _qty = parameters['qty'];  -- $qty-value
    local flag_qty = false;
    if not(_qty == nil or _qty == '') then
        flag_qty = true;
        _qty = tonumber(_qty) or 1;
    end
    
    -----------------------
    --  Design page header:
    -----------------------
    
    local header = mw.html.create( 'div' ):css('text-align', 'center')
        :tag('span'):css{
                            ['font-size']   = '120%',
                            ['font-weight'] = 'bold',
                            ['font-style']  = 'italic'
                    }
            :wikitext('[[' .._nameSet.. ']]')
        :done()
        if flag_notEnglish and _nameSet_localized ~= '' and _nameSet_localized then
            header:tag('br'):done()
            :tag('span'):css{
                                ['font-weight'] ='bold',
                                ['font-style']  = flag_italics
                            }
                :wikitext(_nameSet_localized)
            :done()
        end
        header:tag('br'):done()
        :wikitext(_region)
    :allDone()

    local category = string.format('[['..'Category:%s %s]]', _region, NAMESPACE)
    
    ---------------------------
    --  Process the list array:
    ---------------------------
    --  General:
    local cardList_input  = parameters['list'] or parameters['1'] or parameters[1]; -- @INPUT
    local cardList_array  = mw.text.split( cardList_input, '\n' );
    local extra_column    = parameters['col'];
    local counter_colspan = 4;
        if flag_notEnglish then counter_colspan = 5 end;
        if flag_qty then counter_colspan = counter_colspan + 1 end;
        if flag_noAbbr then counter_colspan = counter_colspan - 1 end;
        if extra_column and extra_column ~= '' then counter_colspan = counter_colspan + 1 end;
    
    --  Build table:
    local _header = parameters['header'];
    local _rarity = parameters['rarity'];
    -- You don't really want to name this object "table", due to conflicts with the keyword.
    local table   = mw.html.create( 'table' )
        :addClass('wikitable'):addClass('sortable'):addClass('card-list')
        if _header and _header ~= '' then   -- If {{{header}}}.
            table:tag('tr')
                :tag('th'):attr('scope','col'):attr('colspan',counter_colspan):wikitext(_header):done()
            :done()
            -- rather than all the colspan, what you really should use here is the <caption> element
        end
        table:tag('tr')
            if not(flag_noAbbr) then
                table:tag('th'):attr('scope','col'):wikitext('Card number'):done()
            end
            if flag_notEnglish then
                table:tag('th'):attr('scope','col'):wikitext('English name'):done()
                     :tag('th'):attr('scope','col'):wikitext(_language..' name'):done()
            else
                table:tag('th'):attr('scope','col'):wikitext('Name'):done()
            end
            table:tag('th'):attr('scope','col'):wikitext('Rarity'):done()
                 :tag('th'):attr('scope','col'):wikitext('Category'):done()
            if flag_qty then
                table:tag('th'):attr('scope','col'):wikitext('Qty'):done()
            end
            if extra_column and extra_column ~= '' then
                table:tag('th'):attr('scope','col'):wikitext(extra_column):done()
            end
        table:done() -- Close <tr>
    
    --  Process list results:
    local _headerSection, _raritySection, _qtySection;  -- Section info.
    local _nameCard, _nameCard_localized, _numberCard, _rarityCard, _typeCard, _qtyCard; -- Standard info.
    local _nameCard_alt, _nameCard_localized_alt, _numberCard_alt, _rarityCard_alt, _typeCard_alt, 
          _description, _extra;  -- Alternate info.
    
    for index, value in ipairs(cardList_array) do
        if value:match('!:') then
            -- It's a section; contains section info.
            _headerSection = cardList_array[index]:match('header::(.-);');
            _raritySection = cardList_array[index]:match('rarity::(.-);');
            _qtySection    = cardList_array[index]:match(   'qty::(.-);');
            
            if _headerSection then
                table:tag('tr')
                    :tag('th'):attr('scope','col'):attr('colspan',counter_colspan):wikitext(_headerSection):done()
                :done()
            end
        elseif cardList_array[index]:match('^(%s*)$') then
            -- Nothing: empty line.
        else
            local cardList_array_parts = mw.text.split( cardList_array[index], '//' );
            --[[
                cardList_array_parts[1] has the standard values ($values-standard);
                cardList_array_parts[2] has the alternate values ($values-alternate);
            ]]
            local cardList_array_std = mw.text.split( cardList_array_parts[1], ';' );
            if flag_noAbbr then
                _nameCard   = cardList_array_std[1];
                _rarityCard = cardList_array_std[2];
                _qtyCard    = cardList_array_std[3];
                -- _nameCard, _rarityCard, _qtyCard = cardList_array_std
            else 
                _numberCard = cardList_array_std[1];
                _nameCard   = cardList_array_std[2];
                _rarityCard = cardList_array_std[3];
                _qtyCard    = cardList_array_std[4];
                -- _numberCard, _nameCard, _rarityCard, _qtyCard = cardList_array_std
            end
            _nameCard_localized = LN.localized_name( _nameCard, _language );
            _typeCard           = frame:expandTemplate{ title = 'Card type', args = { _nameCard } };
            
            -- TO DO:   process each one of these to «display» vars.
            --          Deal with alt values.
            
            -- Add to table:
            -- (rough draft!)
            table:tag('tr')
                :tag('td'):wikitext(_numberCard):done()
                :tag('td'):wikitext(_nameCard):done()
                :tag('td'):wikitext(_nameCard_localized):done()
                :tag('td'):wikitext(_rarityCard):done()
                :tag('td'):wikitext(_typeCard):done()
            :done()
        end
    end
    
    table:allDone() -- Close <table> (for testing)
    --  For debug.
    local debug = mw.html.create( 'ul' )
        :tag('li'):tag('code'):wikitext('PAGENAME'):done():wikitext(': '..PAGENAME):done()
        :tag('li'):tag('code'):wikitext('NAMESPACE'):done():wikitext(': '..NAMESPACE):done()
        :tag('li'):tag('code'):wikitext('_rg'):done():wikitext(': '.._rg):done()
        :tag('li'):tag('code'):wikitext('_region'):done():wikitext(': '.._region):done()
        :tag('li'):tag('code'):wikitext('_ln'):done():wikitext(': '.._ln):done()
        :tag('li'):tag('code'):wikitext('_language'):done():wikitext(': '.._language):done()
        :tag('li'):tag('code'):wikitext('_nameSet'):done():wikitext(': '.._nameSet):done()
        :tag('li'):tag('code'):wikitext('_nameSet_localized'):done():wikitext(': '.._nameSet_localized):done()
        :tag('li'):tag('code'):wikitext('_qty'):done():wikitext(': '..tostring(_qty)):done()
        :tag('li'):wikitext('<b>Flags</b>'):done()
        :tag('li'):tag('code'):wikitext('flag_notEnglish'):done():wikitext(': '..tostring(flag_notEnglish)):done()
        :tag('li'):tag('code'):wikitext('flag_italics'):done():wikitext(': '..flag_italics):done()
        :tag('li'):tag('code'):wikitext('flag_qty'):done():wikitext(': '..tostring(flag_qty)):done()
        :tag('li'):tag('code'):wikitext('flag_noAbbr'):done():wikitext(': '..tostring(flag_noAbbr)):done()
        :tag('li'):wikitext('<b>List</b>'):done()
        :tag('li'):tag('code'):wikitext('extra_column'):done():wikitext(': '..tostring(extra_column)):done()
        :tag('li'):tag('code'):wikitext('counter_colspan'):done():wikitext(': '..counter_colspan):done()
        :tag('li'):tag('code'):wikitext('cardList_input'):done():wikitext(': '..tostring(cardList_input)):done()
    :done()
        
    return tostring(debug)..tostring(header)..category..tostring(table); --the set list page;
end

return myInput;