Module:Sandbox/Kafe523/LuaSandbox
跳到导航
跳到搜索
- --[[
- I know the code is bad, forgive me. XP
- Module:HyperIcon
- Code by Kafe523
- Modules implement to Template:HyperIcon
- Please refrain from invoking this module directly.
- ]]
- local getArgs = require('Module:Arguments').getArgs
- local p = {}
- -- /* Tables */
- local linkAssamble = {
- "", -- 1
- " ",
- "[",
- "]",
- '<span class="">', -- 5
- "</span>",
- '<span class="plainlinks">',
- '<span class="error" style="font-size:smaller;">' -- 8
- }
- local iconTable = {
- ["bili-logo"] = "[[File:Bilibilitv-logo.png|20px|link=]]",
- ["ig-logo"] = "[[File:Instagram_logo.png|20px|link=]]",
- ["nico-logo"] = "[[File:Niconico-2021-black.png|20px|link=]]",
- ["piapro-logo"] = "[[File:Piapro_icon.svg|20px|link=]]",
- ["tweets-logo"] = "[[File:Twitte_Logo.png|20px|link=]]", -- Yes, the file actually call "Twitte_Logo".
- ["youtube-logo"] = "[[File:YouTube Logo icon.png|20px|link=]]"
- }
- local prefixTable = {
- ["bilibili"] = {prefix = "https://www.bilibili.com/video/" , icon = iconTable["bili-logo"]},
- ["instagram"] = {prefix = "https://www.instagram.com/tv/" , icon = iconTable["ig-logo"]},
- ["niconico"] = {prefix = "https://www.nicovideo.jp/watch/" , icon = iconTable["nico-logo"]},
- ["piapro"] = {prefix = "https://piapro.jp/t/", icon = iconTable["piapro-logo"]},
- ["twitter"] = {prefix = "https://twitter.com/" , prefix2 = "https://t.co/", ending1 = "/status/" , icon = iconTable["tweets-logo"]},
- ["youtube"] = {prefix = "https://youtu.be/" , icon = iconTable["youtube-logo"]}
- }
- -- Index Start at 1
- local centralTable = {
- -- center
- prefixTable["bilibili"], -- 1
- prefixTable["instagram"],
- prefixTable["instagram"],
- prefixTable["niconico"],
- prefixTable["piapro"], -- 5
- prefixTable["twitter"],
- prefixTable["twitter"],
- prefixTable["twitter"],
- prefixTable["youtube"] -- 9
- }
- local leftTable = {
- --left
- [10] = prefixTable["bilibili"],
- [11] = prefixTable["instagram"],
- [12] = prefixTable["niconico"],
- [13] = prefixTable["piapro"],
- [14] = prefixTable["twitter"],
- [15] = prefixTable["youtube"],
- }
- local rightTable = {
- --right
- [16] = prefixTable["bilibili"],
- [17] = prefixTable["instagram"],
- [18] = prefixTable["niconico"],
- [19] = prefixTable["piapro"],
- [20] = prefixTable["twitter"],
- [21] = prefixTable["youtube"],
- }
- local onlyLogoTable = {
- [22] = prefixTable["bilibili"],
- [23] = prefixTable["instagram"],
- [24] = prefixTable["niconico"],
- [25] = prefixTable["piapro"],
- [26] = prefixTable["twitter"],
- [27] = prefixTable["youtube"],
- }
- local indexTable = {
- -- Video Link
- {"bl","bili","bilibili"}, -- 1
- {"ig","instagram"},
- {"igf","instagramfull"},
- {"nc","nico","nicovideo"},
- {"pp","piapro"}, -- 5
- {"tw","tweet","twitter"},
- {"twsc","tweetsc","twittershortcut"},
- {"tws","tweetsh","twittershort"},
- {"yt","youtube"}, -- 9
- -- General Link (Logo on the left)
- {"bl_l","bili_lf","bilibili_left"}, -- 10
- {"ig_l","instagram_left"},
- {"nc_l","nico_lf","nicovideo_left"},
- {"pp_l","piapro_left"},
- {"tw_l","tweet_lf","twitter_left"}, -- 11
- {"yt_l","youtube_left"},
- -- General Link (Logo on the right)
- {"bl_r","bili_rg","bilibili_right"},
- {"ig_r","instagram_right"},
- {"nc_r","nico_rg","nicovideo_right"}, -- 15
- {"pp_r","piapro_right"},
- {"tw_r","tweet_rg","twitter_right"},
- {"yt_r","youtube_right"},
- -- General Link (Logo but button)
- {"bl_c","bili_ct","bilibili_center"},
- {"ig_c","instagram_center"}, -- 20
- {"nc_c","nico_ct","nicovideo_center"},
- {"pp_c","piapro_center"},
- {"tw_c","tweet_ct","twitter_center"},
- {"yt_c","youtube_center"} -- 24
- }
- local errorMessageTable = {
- ["missingArg_1"] = linkAssamble[8] .. "缺少第<big>1</big>參數,請確認是否已填妥所需資料." .. linkAssamble[6],
- ["missingArg_2"] = linkAssamble[8] .. "缺少第<big>2</big>參數,請確認是否已填妥所需資料." .. linkAssamble[6],
- ["missingArg_3"] = linkAssamble[8] .."缺少第<big>3</big>參數,請確認是否已填妥所需資料." .. linkAssamble[6],
- ["tooManyArg"] = linkAssamble[8] .."請刪除多餘參數,或檢查第<big>1</big>參數是否錯誤." .. linkAssamble[6]
- }
- -- /* Main function */
- function p.main(frame)
- return p._main(getArgs(frame,{removeBlanks = false}),frame)
- end
- function p._main(args,frame)
- local argA,argB,argC,argD = mw.ustring.lower(args[1] or ""),args[2],args[3],args[4]
- if argA == "" then
- return errorMessageTable["missingArg_1"]
- elseif argD ~= nil then
- return errorMessageTable["tooManyArg"]
- end
- local translatedHeader = p.findPrefixIndex(argA)
- if translatedHeader == false then -- Default Error Message
- return linkAssamble[8] .. "模板網站代號變數錯誤:<code>" .. argA .. "</code>本模板暫不支持此網站鏈接." .. linkAssamble[6]
- elseif argB == nil then
- return errorMessageTable["missingArg_2"]
- end
- if centralTable[translatedHeader] then -- Video Link Section
- return p.videoLink(translatedHeader,argB,argC)
- end
- if (leftTable[translatedHeader] or rightTable[translatedHeader]) and argC == nil then -- Side Logo Section
- return errorMessageTable["missingArg_3"]
- elseif leftTable[translatedHeader] then
- return p.generalLink_leftLogo(translatedHeader,argB,argC)
- elseif rightTable[translatedHeader] then
- return p.generalLink_rightLogo(translatedHeader,argB,argC)
- end
- if onlyLogoTable[translatedHeader] then -- Center Logo Section
- if argC ~= nil then
- return errorMessageTable["tooManyArg"]
- else
- return p.generalLink_centralLogo(translatedHeader,argB)
- end
- end
- end
- function p.findPrefixIndex (argA)
- for i , x in pairs(indexTable) do
- for j , y in pairs(x) do
- if x[j] == argA then
- return i
- end
- end
- end
- return false
- end
- function p.videoLink(translatedHeader,argB,argC)
- if translatedHeader == 7 then -- twittershortcut
- if argC == nil then
- return errorMessageTable["missingArg_3"]
- else
- return linkAssamble[7] .. linkAssamble[3] .. centralTable[translatedHeader].prefix .. argB .. centralTable[translatedHeader].ending1 .. argC .. centralTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
- end
- elseif translatedHeader == 8 then -- twittershort
- return linkAssamble[7] .. linkAssamble[3] .. centralTable[translatedHeader].prefix2 .. argB .. centralTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
- elseif argC ~= nil then
- return errorMessageTable["tooManyArg"]
- end
- return linkAssamble[7] .. linkAssamble[3] .. centralTable[translatedHeader].prefix .. argB .. linkAssamble[2] .. centralTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
- end
- function p.generalLink_leftLogo(translatedHeader,argB,argC)
- return leftTable[translatedHeader].icon .. linkAssamble[2] .. linkAssamble[3] .. argB .. linkAssamble[2] .. argC .. linkAssamble[4]
- end
- function p.generalLink_rightLogo(translatedHeader,argB,argC)
- return linkAssamble[3] .. argB .. linkAssamble[2] .. argC .. linkAssamble[4] .. linkAssamble[2] .. rightTable[translatedHeader].icon
- end
- function p.generalLink_centralLogo(translatedHeader,argB)
- return linkAssamble[7] .. linkAssamble[3] .. argB .. linkAssamble[2] .. onlyLogoTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
- end
- return p