|
|
(6 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| local ability_module = require("Module:AbilityData") | | local ability_module = require("Module:Abilities/card") |
| local dictionary_module = require("Module:Dictionary") | | local dictionary_module = require("Module:Dictionary") |
| local lang_module = require("Module:Lang") | | local lang_module = require("Module:Lang") |
| local util_module = require("Module:Utilities") | | local util_module = require("Module:Utilities") |
| | local ability_util_module = require("Module:Abilities/utils") |
| local heroes_data = mw.loadJsonData("Data:HeroData.json") | | local heroes_data = mw.loadJsonData("Data:HeroData.json") |
| local abilities_data = mw.loadJsonData("Data:AbilityData.json")
| |
|
| |
|
| local p = {} | | local p = {} |
|
| |
|
| function p.get_hero_key(ability_key)
| | --collapsible list |
| if type(ability_key) == 'table' and ability_key.args then
| |
| local frame = ability_key
| |
| ability_key = frame.args[1]
| |
| end
| |
|
| |
| local ability_data = abilities_data[ability_key]
| |
| local hero_binds = ability_data["HeroBinds"]
| |
| if hero_binds == nil then return 'Ability ' .. ability_key .. ' is not bound by any heroes' end
| |
| for _, hero_bind_data in ipairs(hero_binds) do
| |
| return hero_bind_data["HeroKey"]
| |
| end
| |
| end
| |
| | |
| function p.get_ability_num(ability_key)
| |
| if type(ability_key) == 'table' and ability_key.args then
| |
| local frame = ability_key
| |
| ability_key = frame.args[1]
| |
| end
| |
|
| |
| local ability_data = abilities_data[ability_key]
| |
| local hero_binds = ability_data["HeroBinds"]
| |
| if hero_binds == nil then return 'Ability ' .. ability_key .. ' is not bound by any heroes' end
| |
| for _, hero_bind_data in ipairs(hero_binds) do
| |
| return hero_bind_data["Slot"]
| |
| end
| |
| end
| |
| | |
| -- Write each of the hero's ability cards in a tab of a tabber | |
| function p.write_hero_abilities(frame) | | function p.write_hero_abilities(frame) |
| local hero_key = frame.args[1] | | local hero_key = frame.args[1] |
Line 49: |
Line 21: |
| for ability_num, ability_data in pairs(abilities_data) do | | for ability_num, ability_data in pairs(abilities_data) do |
| local ability_key = ability_data["Key"] | | local ability_key = ability_data["Key"] |
| local ability_name_en = ability_data["Name"]
| |
| local ability_name_localized = lang_module.get_string(ability_key)
| |
| local notes_str_localized = dictionary_module.translate('Notes', nil, '')
| |
| local tab_name = "|-|(" .. ability_num .. ") " .. ability_name_en .. "="
| |
|
| |
| --Determine notes link
| |
| local notes_source_page
| |
| local notes_untranslated_msg = ''
| |
| -- if either "Notes" string or ability_name is not able to be localized,
| |
| -- use an english link instead, as transcluded content relies on it
| |
| if (ability_name_localized == '') or (notes_str_localized == '') then
| |
| notes_source_page = ability_name_en .. '/' .. dictionary_module.translate('Notes', 'en', '')
| |
| if notes_str_localized=='' then
| |
| notes_untranslated_msg = dictionary_module.translate('NotesNeedsTranslation') .. ' [[Template:Translate]]' .. "<br>"
| |
| end
| |
| else
| |
| notes_source_page = ability_name_localized .. '/' .. notes_str_localized
| |
| end
| |
| notes_source_page = "User:Sur/" .. notes_source_page --temp
| |
|
| |
| --Determine tab content
| |
| local tab_content = "<i>" .. dictionary_module.translate_embed(
| |
| 'TranscludedNotesFrom',
| |
| 'https://en.wikipedia.org/wiki/Help:Transclusion',
| |
| '[['..notes_source_page..']]',
| |
| 'https://deadlocked.wiki/index.php?title='..util_module.url_encode(notes_source_page)..'&action=edit'
| |
| ) .. "</i><br>" .. notes_untranslated_msg
| |
|
| |
| local tab_content = tab_content .. ability_module.get_ability_card_from_key(
| |
| hero_key,
| |
| ability_num,
| |
| 'true',
| |
| '{{'..notes_source_page..'}}'
| |
| )
| |
|
| |
| ret = ret .. tab_name .. tab_content
| |
| end
| |
| ret = "<tabber>" .. ret .. "</tabber>"
| |
| return frame:preprocess(ret)
| |
| end
| |
|
| |
| --collapsible list
| |
| function p.write_hero_abilities2(frame)
| |
| local hero_key = frame.args[1]
| |
|
| |
| --Determine the hero's abilities
| |
| local hero_data = heroes_data[hero_key]
| |
| if (hero_data==nil) then return "Hero key "..hero_key.." not found" end
| |
| local abilities_data = hero_data["BoundAbilities"]
| |
| if (abilities_data==nil) then return "Hero key"..hero_key.." has no BoundAbilities" end
| |
|
| |
| local ret = ""
| |
| for ability_num, ability_data in pairs(abilities_data) do
| |
| local ability_key = ability_data["Key"]
| |
| local ability_name_en = ability_data["Name"]
| |
| local ability_name_localized = lang_module.get_string(ability_key) | | local ability_name_localized = lang_module.get_string(ability_key) |
| local notes_str_localized = dictionary_module.translate('Notes', nil, '')
| | local tab_name = "<h3>" .. ability_name_localized .. "</h3>\n" |
| local tab_name = "|-|(" .. ability_num .. ") " .. ability_name_en .. "=" | | local notes_source_page = ability_util_module.get_notes_source_page_name(ability_key) |
|
| |
| --Determine notes link
| |
| local notes_source_page
| |
| local notes_untranslated_msg = '' | |
| -- if either "Notes" string or ability_name is not able to be localized,
| |
| -- use an english link instead, as transcluded content relies on it
| |
| if (ability_name_localized == '') or (notes_str_localized == '') then
| |
| notes_source_page = ability_name_en .. '/' .. dictionary_module.translate('Notes', 'en', '')
| |
| if notes_str_localized=='' then
| |
| notes_untranslated_msg = dictionary_module.translate('NotesNeedsTranslation') .. ' [[Template:Translate]]' .. "<br>"
| |
| end
| |
| else
| |
| notes_source_page = ability_name_localized .. '/' .. notes_str_localized
| |
| end
| |
| notes_source_page = "User:Sur/" .. notes_source_page --temp
| |
| | | |
| --Determine tab content | | --Determine tab content |
| local tab_content = "<i>" .. dictionary_module.translate_embed( | | local notes_content = '{{'..notes_source_page..'}}' |
| 'TranscludedNotesFrom',
| | local tab_content = ability_module.get_ability_card_from_key( |
| 'https://en.wikipedia.org/wiki/Help:Transclusion',
| |
| '[['..notes_source_page..']]',
| |
| 'https://deadlocked.wiki/index.php?title='..util_module.url_encode(notes_source_page)..'&action=edit'
| |
| ) .. "</i><br>" .. notes_untranslated_msg
| |
|
| |
| local tab_content = tab_content .. ability_module.get_ability_card_from_key( | |
| hero_key, | | hero_key, |
| ability_num, | | ability_num, |
| 'true', | | 'true', |
| '{{'..notes_source_page..'}}' | | frame:preprocess(notes_content), |
| | notes_source_page |
| ) | | ) |
| | | |
| local html = mw.html.create() | | ret = ret .. tab_name .. tab_content .. '\n' |
|
| |
| -- Outer div that is the clickable area
| |
| local outerDiv = html:tag('div')
| |
| :addClass('mw-collapsible mw-collapsed') -- Makes it collapsible and starts in collapsed state
| |
| :css('width', '100%') -- Adjust width if needed
| |
| :css('cursor', 'pointer') -- Makes the cursor a pointer for a clickable effect
| |
| :attr('style', 'display:block;') -- Ensures the div behaves like a block-level element
| |
|
| |
| -- Text A and the dropdown arrow image with size 35px
| |
| outerDiv:wikitext('Clickable div that expands ' .. '[[File:Dropdown Arrow.png|link=|35px]]')
| |
|
| |
| -- Inner div that will be revealed when clicked
| |
| local innerDiv = outerDiv:tag('div')
| |
| :addClass('mw-collapsible-content')
| |
| :wikitext(tab_content)
| |
|
| |
| local tab_wrapper = tostring(outerDiv)
| |
| ret = ret .. tab_wrapper .. '\n'
| |
| end | | end |
|
| |
|
Documentation for this module may be created at Module:AbilityData/hero/doc
local ability_module = require("Module:Abilities/card")
local dictionary_module = require("Module:Dictionary")
local lang_module = require("Module:Lang")
local util_module = require("Module:Utilities")
local ability_util_module = require("Module:Abilities/utils")
local heroes_data = mw.loadJsonData("Data:HeroData.json")
local p = {}
--collapsible list
function p.write_hero_abilities(frame)
local hero_key = frame.args[1]
--Determine the hero's abilities
local hero_data = heroes_data[hero_key]
if (hero_data==nil) then return "Hero key "..hero_key.." not found" end
local abilities_data = hero_data["BoundAbilities"]
if (abilities_data==nil) then return "Hero key"..hero_key.." has no BoundAbilities" end
local ret = ""
for ability_num, ability_data in pairs(abilities_data) do
local ability_key = ability_data["Key"]
local ability_name_localized = lang_module.get_string(ability_key)
local tab_name = "<h3>" .. ability_name_localized .. "</h3>\n"
local notes_source_page = ability_util_module.get_notes_source_page_name(ability_key)
--Determine tab content
local notes_content = '{{'..notes_source_page..'}}'
local tab_content = ability_module.get_ability_card_from_key(
hero_key,
ability_num,
'true',
frame:preprocess(notes_content),
notes_source_page
)
ret = ret .. tab_name .. tab_content .. '\n'
end
return frame:preprocess(ret)
end
return p