Jump to content

Editing Module:Recipe

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 publish the changes below to finish undoing the edit.
Latest revision Your text
Line 6: Line 6:
local param = {
local param = {
   sCharArg = 'character',
   sCharArg = 'character',
  sKitchArg = 'kitchenware',
   sTypeArg = 'type',
   sTypeArg = 'type',
   sSortArg = 'sort',
   sSortArg = 'sort',
Line 43: Line 42:
end
end


local function addUseCategory(category, name, quality, sort)
local function addUseCategory(category, name, sort)
if not name or tostring(name) == '' then
  if not name or tostring(name) == '' then
return
    return
end
  end


if quality and tostring(quality) ~= '' then
  if sort then
if sort and tostring(sort) ~= '' then
    category:wikitext('[[Category:Uses ', name, '|', sort, ']]')
category:wikitext('[[Category:Uses ', quality, '-Quality ', name, '|', sort, ']]')
  else
else
    category:wikitext('[[Category:Uses ', name, ']]')
category:wikitext('[[Category:Uses ', quality, '-Quality ', name, ']]')
  end
end
 
return
end
 
if sort and tostring(sort) ~= '' then
category:wikitext('[[Category:Uses ', name, '|', sort, ']]')
else
category:wikitext('[[Category:Uses ', name, ']]')
end
end
end


local function getCurrentPageName(args)
local function getCurrentPageName(args)
   return args[param.sPage] or args.page or mw.title.getCurrentTitle().text
   return args[param.sPage] or args.page or mw.title.getCurrentTitle().text
end
local function getQualityClass(quality)
  if not quality or tostring(quality) == '' then
    return nil
  end
  return 'card-quality-' .. normalizeText(quality)
end
end


Line 85: Line 66:
     name = sName,
     name = sName,
     text = sAmt,
     text = sAmt,
     show_caption = '1'
     show_caption = '1',
    mobile = 'bulleted'
   }
   }


Line 97: Line 79:
     category,
     category,
     sName,
     sName,
    quality,
     padLeft(tostring(sAmt or ''):gsub('%D', ''), 10)
     padLeft(tostring(sAmt or ''):gsub('%D', ''), 10)
   )
   )
Line 109: Line 90:
     text = sText or '',
     text = sText or '',
     show_caption = '1',
     show_caption = '1',
    mobile = 'bulleted',
     mini = '1'
     mini = '1'
   }
   }
Line 136: Line 118:


local function renderHeader(args, output, category)
local function renderHeader(args, output, category)
   local header = output:tag('div'):addClass('recipe-header')
   local header = output:tag('div'):addClass('recipe_header')
   local sType = args[param.sTypeArg]
   local sType = args[param.sTypeArg]


   header:tag('span'):addClass('recipe-header-main')
   header:tag('span'):addClass('recipe_header_main')
     :tag('span'):addClass('recipe-header-text'):wikitext('[[' .. sType .. ']]'):done()
    -- Preserved from original module
    :tag('span'):addClass('mobileHide'):wikitext('<big>' .. sType .. '</big>'):done()
    :tag('span'):addClass('mobileHide'):wikitext('<big>' .. sType .. '</big>'):done()
     :tag('span'):addClass('recipe_header_text'):wikitext('[[' .. sType .. ']]'):done()


   category:wikitext('[[Category:' .. sType .. ']]')
   category:wikitext('[[Category:' .. sType .. ']]')
Line 224: Line 209:
   end
   end


   header:tag('span'):addClass('recipe-header-sub')
   header:tag('span'):addClass('recipe_header_sub')
     :tag('span'):wikitext(' for '):done()
     :tag('span'):addClass('mobileHide'):wikitext(' for '):done()
     :tag('span'):addClass('recipe-header-text'):wikitext(sTime):done()
    :tag('span'):addClass('hidden'):wikitext(' for '):done()
     :tag('span'):addClass('recipe_header_text'):wikitext(sTime):done()
end
end


Line 236: Line 222:
   local sCharName = args[param.sCharArg]
   local sCharName = args[param.sCharArg]


   header:tag('span'):addClass('recipe-header-sub')
   header:tag('span'):addClass('recipe_header_sub')
    :tag('span'):wikitext('[[File:' .. sCharName .. ' Icon.png|24x24px|link=' .. sCharName .. ']]'):done()
     :tag('span'):addClass('mobileHide'):wikitext(' with '):done()
     :tag('span'):addClass('recipe-header-text'):wikitext('[[' .. sCharName .. ']]'):done()
     :tag('span'):addClass('hidden'):wikitext('[[File:' .. sCharName .. ' Icon.png|24x24px|link=' .. sCharName .. ']]'):done()
end
     :tag('span'):addClass('recipe_header_text'):wikitext('[[' .. sCharName .. ']]'):done()
 
local function renderKitchenwareHeader(args, header)
  if type(args[param.sKitchArg]) ~= 'string' then
     return
  end
 
  local sKitchName = args[param.sKitchArg]
 
  header:tag('span'):addClass('recipe-header-sub')
    :tag('span'):wikitext('[[File:' .. sKitchName .. ' Icon.png|24x24px|link=' .. sKitchName .. ']]'):done()
     :tag('span'):addClass('recipe-header-text'):wikitext('[[' .. sKitchName .. ']]'):done()
end
end


Line 272: Line 247:
   end
   end


   local sYield = args[param.sYieldArg] or nil
   local sYield = args[param.sYieldArg] or '1'
   local pageTitle = getCurrentPageName(args)
   local pageTitle = getCurrentPageName(args)


Line 278: Line 253:


   body
   body
     :tag('div'):addClass('recipe-body-icon')
     :tag('div'):addClass('recipe_body_icon')
       :wikitext('➜'):done()
       :wikitext('➜'):done()
     :tag('div'):addClass('recipe-body-yield')
     :tag('div'):addClass('recipe_body_yield')
       :node(yieldCard)
       :node(yieldCard)
end
end
Line 292: Line 267:
   renderCharacter(args, header)
   renderCharacter(args, header)


   local body = output:tag('div'):addClass('recipe-body')
   local body = output:tag('div'):addClass('recipe_body')


   local sSortDelim = param.sSortDelim
   local sSortDelim = param.sSortDelim
Line 300: Line 275:
   end
   end


  -- Process sort parameter.
   for sKey in string.gmatch(args[param.sSortArg] or '', '([^' .. sSortDelim .. ']+)') do
   for sKey in string.gmatch(args[param.sSortArg] or '', '([^' .. sSortDelim .. ']+)') do
     if type(args[sKey]) ~= 'nil' then
     if type(args[sKey]) ~= 'nil' then
Line 307: Line 283:
   end
   end


  -- Process rest of unrestricted parameters.
   for sKey, sVal in pairs(args) do
   for sKey, sVal in pairs(args) do
     if tArgsProcessed[sKey] ~= true and not isRestrictedStandardParam(sKey) then
     if tArgsProcessed[sKey] ~= true and not isRestrictedStandardParam(sKey) then
Line 344: Line 321:
   local ingredient = {
   local ingredient = {
     index = index,
     index = index,
     amount = args[prefix .. '_amount'] or nil,
     amount = args[prefix .. '_amount'] or '1',
     quality = args[prefix .. '_quality'],
     quality = args[prefix .. '_quality'],
     item = args[prefix],
     item = args[prefix],
Line 351: Line 328:
   }
   }


  -- Specific type:
  -- |item_1_type = Fish
   if argExists(args, prefix .. '_type') then
   if argExists(args, prefix .. '_type') then
     table.insert(ingredient.types, args[prefix .. '_type'])
     table.insert(ingredient.types, args[prefix .. '_type'])
   end
   end


  -- Multiple accepted types:
  -- |item_1_type_1 = Freshwater Fish
  -- |item_1_type_2 = Saltwater Fish
   local typeIndex = 1
   local typeIndex = 1


Line 362: Line 344:
   end
   end


  -- Multiple accepted specific items:
  -- |item_1_option_1 = Rice
  -- |item_1_option_2 = Wheat
   local optionIndex = 1
   local optionIndex = 1


Line 381: Line 366:
end
end


--------------------------------------------------------------------------------
local function getKitchenware(args)
-- Cooking type split-card helpers
  local kitchenware = {}
--------------------------------------------------------------------------------


local function makeTypeIcon(typeName)
  if argExists(args, 'kitchenware') then
  return '[[File:' .. typeName .. ' Icon.png|74x74px|link=' .. typeName .. ']]'
     table.insert(kitchenware, args.kitchenware)
end
 
local function joinTypeCaption(types)
  local out = {}
 
  for _, typeName in ipairs(types) do
     table.insert(out, '[[' .. typeName .. ']]')
   end
   end


   return table.concat(out, ' / ')
   local index = 1
end
 
local function renderCookingSplitTypeCard(category, body, ingredient)
  local qualityClass = getQualityClass(ingredient.quality or 'Gray')


   local container = body:tag('span')
   while argExists(args, 'kitchenware_' .. index) do
     :addClass('card-container')
     table.insert(kitchenware, args['kitchenware_' .. index])
    :addClass('recipe-type-split-card')
     index = index + 1
 
  local wrapper = container:tag('span')
    :addClass('card-wrapper')
 
  local cardBody = wrapper:tag('span')
    :addClass('card-body')
 
  local imageContainer = cardBody:tag('span')
    :addClass('card-image-container')
    :addClass('recipe-type-split-image')
 
  imageContainer:tag('span')
    :addClass('recipe-type-split-half')
    :addClass('recipe-type-split-half-a')
    :wikitext(makeTypeIcon(ingredient.types[1]))
    :done()
 
  imageContainer:tag('span')
    :addClass('recipe-type-split-half')
    :addClass('recipe-type-split-half-b')
    :wikitext(makeTypeIcon(ingredient.types[2]))
    :done()
      
if qualityClass then
    imageContainer:addClass(qualityClass)
end
 
  if tostring(ingredient.amount or '') ~= '' then
    container:tag('span')
      :addClass('card-label')
      :wikitext(tostring(ingredient.amount or '1'))
      :done()
   end
   end


   container:tag('span')
   return kitchenware
    :addClass('card-caption')
    :wikitext(joinTypeCaption(ingredient.types))
    :done()
 
  for _, typeName in ipairs(ingredient.types) do
    addUseCategory(category, typeName)
  end
end
end


Line 462: Line 396:
end
end


local function renderCookingTypeFallback(category, body, ingredient)
local function renderCookingTypeCards(category, body, ingredient)
   local wrapper = body:tag('div')
   local wrapper = body:tag('div')
     :addClass('recipe-body-cooking-ingredient')
     :addClass('recipe_body_cooking_ingredient')
     :addClass('recipe-body-cooking-type-cards')
     :addClass('recipe_body_cooking_type_cards')


   for _, typeName in ipairs(ingredient.types) do
   for _, typeName in ipairs(ingredient.types) do
Line 474: Line 408:
       ingredient.quality
       ingredient.quality
     ))
     ))
  end
end
local function renderCookingTypeCards(category, body, ingredient)
  if #ingredient.types == 2 then
    renderCookingSplitTypeCard(category, body, ingredient)
  else
    renderCookingTypeFallback(category, body, ingredient)
   end
   end
end
end
Line 487: Line 413:
local function renderCookingOptionCards(category, body, ingredient)
local function renderCookingOptionCards(category, body, ingredient)
   local wrapper = body:tag('div')
   local wrapper = body:tag('div')
     :addClass('recipe-body-cooking-ingredient')
     :addClass('recipe_body_cooking_ingredient')
     :addClass('recipe-body-cooking-option-cards')
     :addClass('recipe_body_cooking_option_cards')


   for _, itemName in ipairs(ingredient.options) do
   for _, itemName in ipairs(ingredient.options) do
Line 501: Line 427:


local function renderCookingIngredient(category, body, ingredient)
local function renderCookingIngredient(category, body, ingredient)
  -- Specific item:
  -- |item_1 = Rice
   if ingredient.item then
   if ingredient.item then
     renderCookingSpecificItem(category, body, ingredient)
     renderCookingSpecificItem(category, body, ingredient)
Line 506: Line 434:
   end
   end


  -- Multiple accepted specific items:
  -- |item_1_option_1 = Rice
  -- |item_1_option_2 = Wheat
   if #ingredient.options > 0 then
   if #ingredient.options > 0 then
     renderCookingOptionCards(category, body, ingredient)
     renderCookingOptionCards(category, body, ingredient)
Line 511: Line 442:
   end
   end


  -- Type-based ingredient:
  -- |item_1_type = Fish
  -- |item_1_type_1 = Freshwater Fish
  -- |item_1_type_2 = Saltwater Fish
   if #ingredient.types > 0 then
   if #ingredient.types > 0 then
     renderCookingTypeCards(category, body, ingredient)
     renderCookingTypeCards(category, body, ingredient)
     return
     return
  end
end
--[[
local function renderKitchenwareSlot(category, body, args)
  local kitchenware = getKitchenware(args)
  if #kitchenware == 0 then
    body:tag('div')
      :addClass('recipe_body_icon')
      :wikitext('➜')
    return
  end
  local wrapper = body:tag('div')
    :addClass('recipe_body_icon')
    :addClass('recipe_body_kitchenware_cards')
  for _, kitchenwareName in ipairs(kitchenware) do
    wrapper:node(addMiniCard(
      category,
      kitchenwareName,
      '',
      nil
    ))
  end
end
--]]
local function renderKitchenwareSlot(category, body, args)
  local kitchenware = getKitchenware(args)
  if #kitchenware == 0 then
    body:tag('div')
      :addClass('recipe_body_icon')
      :wikitext('➜')
    return
  end
  local slot = body:tag('div')
    :addClass('recipe_body_icon')
    :addClass('recipe_header_sub')
  for i, kitchenwareName in ipairs(kitchenware) do
    if i > 1 then
      slot:tag('span')
        :addClass('recipe_header_text')
        :wikitext(' / ')
        :done()
    end
    slot
      :tag('span'):addClass('mobileHide')
        :wikitext('[[File:Icon_' .. kitchenwareName .. '.png|35x35px|link=' .. kitchenwareName .. ']]'):done()
      :tag('span'):addClass('hidden')
        :wikitext('[[File:Icon_' .. kitchenwareName .. '.png|35x35px|link=' .. kitchenwareName .. ']]'):done()
      :tag('span'):addClass('recipe_header_text')
        :wikitext('[[' .. kitchenwareName .. ']]'):done()
    addUseCategory(category, kitchenwareName)
   end
   end
end
end
Line 522: Line 517:
   end
   end


   local sYield = args[param.sYieldArg] or nil
   local sYield = args[param.sYieldArg] or '1'
   local pageTitle = getCurrentPageName(args)
   local pageTitle = getCurrentPageName(args)


   local yieldCard = addYieldCard(pageTitle, sYield)
   local yieldCard = addYieldCard(pageTitle, sYield)


   body
   renderKitchenwareSlot(category, body, args)
    :tag('div'):addClass('recipe-body-icon')
 
      :wikitext('➜'):done()
  body:tag('div')
    :tag('div'):addClass('recipe-body-yield')
    :addClass('recipe_body_yield')
      :node(yieldCard)
    :node(yieldCard)
end
end


Line 539: Line 534:
   renderTime(args, header)
   renderTime(args, header)
   renderCharacter(args, header)
   renderCharacter(args, header)
  renderKitchenwareHeader(args, header)


   local body = output:tag('div')
   local body = output:tag('div')
     :addClass('recipe-body')
     :addClass('recipe_body')
     :addClass('recipe-body-cooking')
     :addClass('recipe_body_cooking')


   local foundIngredient = false
   local foundIngredient = false
Line 583: Line 577:
function p._main(args, frame)
function p._main(args, frame)
   local output = mw.html.create('div')
   local output = mw.html.create('div')
     :addClass('recipe-container')
     :addClass('recipe_container')


  -- Must be local per render.
  -- Keeping this global can cause category leakage between recipe calls.
   local category = mw.html.create()
   local category = mw.html.create()


Please note that all contributions to The Petit Planet Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see Petit Planet Wiki:Copyrights for 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 commonly used wikitext from MediaWiki:Edittools. Click on any to insert them in the edit box.
File Pages==Summary====Licensing=={{Fairuse}}{{File|}}
Dynamic Page List¦²«»²{¦}²«»«/»«!----»
Array in DPL¹^2{}^2^2{¹}^2
Parser Functions{{#if:||}}
{{#ifeq:|||}}
{{#expr:}}
{{#switch:||#default=}}
{{#replace:||}}
{{#titleparts:}}
{{#tag:|}}
Markup{{}}|[][[]][[Category:]]#REDIRECT [[]] [[Category:Redirect Pages]]<code></code><includeonly></includeonly><noinclude></noinclude><nowiki></nowiki><!----><br>§
Notices{{Stub|}}{{Stub Dialogue}}{{Upcoming}}{{Under Construction}}{{Placeholder|}}
Magic Words{{!}}{{formatnum:}}{{lc:}}{{uc:}}{{PAGENAME}}{{FULLPAGENAME}}{{ROOTPAGENAME}}{{BASEPAGENAME}}{{SUBPAGENAME}}{{DISPLAYTITLE:|noreplace}}__TOC____NOTOC____EXPECTUNUSEDCATEGORY____HIDDENCAT__
HTML Entities&mdash;&nbsp;&comma;&shy;