置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Sandbox/Kafe523/LuaSandbox

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
  1. --[[
  2. I know the code is bad, forgive me. XP
  3. Module:HyperIcon
  4. Code by Kafe523
  5. Modules implement to Template:HyperIcon
  6. Please refrain from invoking this module directly.
  7. ]]
  8. local getArgs = require('Module:Arguments').getArgs
  9. local p = {}
  10. -- /* Tables */
  11. local linkAssamble = {
  12. "", -- 1
  13. " ",
  14. "[",
  15. "]",
  16. '<span class="">', -- 5
  17. "</span>",
  18. '<span class="plainlinks">',
  19. '<span class="error" style="font-size:smaller;">' -- 8
  20. }
  21. local iconTable = {
  22. ["bili-logo"] = "[[File:Bilibilitv-logo.png|20px|link=]]",
  23. ["ig-logo"] = "[[File:Instagram_logo.png|20px|link=]]",
  24. ["nico-logo"] = "[[File:Niconico-2021-black.png|20px|link=]]",
  25. ["piapro-logo"] = "[[File:Piapro_icon.svg|20px|link=]]",
  26. ["tweets-logo"] = "[[File:Twitte_Logo.png|20px|link=]]", -- Yes, the file actually call "Twitte_Logo".
  27. ["youtube-logo"] = "[[File:YouTube Logo icon.png|20px|link=]]"
  28. }
  29. local prefixTable = {
  30. ["bilibili"] = {prefix = "https://www.bilibili.com/video/" , icon = iconTable["bili-logo"]},
  31. ["instagram"] = {prefix = "https://www.instagram.com/tv/" , icon = iconTable["ig-logo"]},
  32. ["niconico"] = {prefix = "https://www.nicovideo.jp/watch/" , icon = iconTable["nico-logo"]},
  33. ["piapro"] = {prefix = "https://piapro.jp/t/", icon = iconTable["piapro-logo"]},
  34. ["twitter"] = {prefix = "https://twitter.com/" , prefix2 = "https://t.co/", ending1 = "/status/" , icon = iconTable["tweets-logo"]},
  35. ["youtube"] = {prefix = "https://youtu.be/" , icon = iconTable["youtube-logo"]}
  36. }
  37. -- Index Start at 1
  38. local centralTable = {
  39. -- center
  40. prefixTable["bilibili"], -- 1
  41. prefixTable["instagram"],
  42. prefixTable["instagram"],
  43. prefixTable["niconico"],
  44. prefixTable["piapro"], -- 5
  45. prefixTable["twitter"],
  46. prefixTable["twitter"],
  47. prefixTable["twitter"],
  48. prefixTable["youtube"] -- 9
  49. }
  50. local leftTable = {
  51. --left
  52. [10] = prefixTable["bilibili"],
  53. [11] = prefixTable["instagram"],
  54. [12] = prefixTable["niconico"],
  55. [13] = prefixTable["piapro"],
  56. [14] = prefixTable["twitter"],
  57. [15] = prefixTable["youtube"],
  58. }
  59. local rightTable = {
  60. --right
  61. [16] = prefixTable["bilibili"],
  62. [17] = prefixTable["instagram"],
  63. [18] = prefixTable["niconico"],
  64. [19] = prefixTable["piapro"],
  65. [20] = prefixTable["twitter"],
  66. [21] = prefixTable["youtube"],
  67. }
  68. local onlyLogoTable = {
  69. [22] = prefixTable["bilibili"],
  70. [23] = prefixTable["instagram"],
  71. [24] = prefixTable["niconico"],
  72. [25] = prefixTable["piapro"],
  73. [26] = prefixTable["twitter"],
  74. [27] = prefixTable["youtube"],
  75. }
  76. local indexTable = {
  77. -- Video Link
  78. {"bl","bili","bilibili"}, -- 1
  79. {"ig","instagram"},
  80. {"igf","instagramfull"},
  81. {"nc","nico","nicovideo"},
  82. {"pp","piapro"}, -- 5
  83. {"tw","tweet","twitter"},
  84. {"twsc","tweetsc","twittershortcut"},
  85. {"tws","tweetsh","twittershort"},
  86. {"yt","youtube"}, -- 9
  87. -- General Link (Logo on the left)
  88. {"bl_l","bili_lf","bilibili_left"}, -- 10
  89. {"ig_l","instagram_left"},
  90. {"nc_l","nico_lf","nicovideo_left"},
  91. {"pp_l","piapro_left"},
  92. {"tw_l","tweet_lf","twitter_left"}, -- 11
  93. {"yt_l","youtube_left"},
  94. -- General Link (Logo on the right)
  95. {"bl_r","bili_rg","bilibili_right"},
  96. {"ig_r","instagram_right"},
  97. {"nc_r","nico_rg","nicovideo_right"}, -- 15
  98. {"pp_r","piapro_right"},
  99. {"tw_r","tweet_rg","twitter_right"},
  100. {"yt_r","youtube_right"},
  101. -- General Link (Logo but button)
  102. {"bl_c","bili_ct","bilibili_center"},
  103. {"ig_c","instagram_center"}, -- 20
  104. {"nc_c","nico_ct","nicovideo_center"},
  105. {"pp_c","piapro_center"},
  106. {"tw_c","tweet_ct","twitter_center"},
  107. {"yt_c","youtube_center"} -- 24
  108. }
  109. local errorMessageTable = {
  110. ["missingArg_1"] = linkAssamble[8] .. "缺少第<big>1</big>參數,請確認是否已填妥所需資料." .. linkAssamble[6],
  111. ["missingArg_2"] = linkAssamble[8] .. "缺少第<big>2</big>參數,請確認是否已填妥所需資料." .. linkAssamble[6],
  112. ["missingArg_3"] = linkAssamble[8] .."缺少第<big>3</big>參數,請確認是否已填妥所需資料." .. linkAssamble[6],
  113. ["tooManyArg"] = linkAssamble[8] .."請刪除多餘參數,或檢查第<big>1</big>參數是否錯誤." .. linkAssamble[6]
  114. }
  115. -- /* Main function */
  116. function p.main(frame)
  117. return p._main(getArgs(frame,{removeBlanks = false}),frame)
  118. end
  119. function p._main(args,frame)
  120. local argA,argB,argC,argD = mw.ustring.lower(args[1] or ""),args[2],args[3],args[4]
  121. if argA == "" then
  122. return errorMessageTable["missingArg_1"]
  123. elseif argD ~= nil then
  124. return errorMessageTable["tooManyArg"]
  125. end
  126. local translatedHeader = p.findPrefixIndex(argA)
  127. if translatedHeader == false then -- Default Error Message
  128. return linkAssamble[8] .. "模板網站代號變數錯誤:<code>" .. argA .. "</code>本模板暫不支持此網站鏈接." .. linkAssamble[6]
  129. elseif argB == nil then
  130. return errorMessageTable["missingArg_2"]
  131. end
  132. if centralTable[translatedHeader] then -- Video Link Section
  133. return p.videoLink(translatedHeader,argB,argC)
  134. end
  135. if (leftTable[translatedHeader] or rightTable[translatedHeader]) and argC == nil then -- Side Logo Section
  136. return errorMessageTable["missingArg_3"]
  137. elseif leftTable[translatedHeader] then
  138. return p.generalLink_leftLogo(translatedHeader,argB,argC)
  139. elseif rightTable[translatedHeader] then
  140. return p.generalLink_rightLogo(translatedHeader,argB,argC)
  141. end
  142. if onlyLogoTable[translatedHeader] then -- Center Logo Section
  143. if argC ~= nil then
  144. return errorMessageTable["tooManyArg"]
  145. else
  146. return p.generalLink_centralLogo(translatedHeader,argB)
  147. end
  148. end
  149. end
  150. function p.findPrefixIndex (argA)
  151. for i , x in pairs(indexTable) do
  152. for j , y in pairs(x) do
  153. if x[j] == argA then
  154. return i
  155. end
  156. end
  157. end
  158. return false
  159. end
  160. function p.videoLink(translatedHeader,argB,argC)
  161. if translatedHeader == 7 then -- twittershortcut
  162. if argC == nil then
  163. return errorMessageTable["missingArg_3"]
  164. else
  165. return linkAssamble[7] .. linkAssamble[3] .. centralTable[translatedHeader].prefix .. argB .. centralTable[translatedHeader].ending1 .. argC .. centralTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
  166. end
  167. elseif translatedHeader == 8 then -- twittershort
  168. return linkAssamble[7] .. linkAssamble[3] .. centralTable[translatedHeader].prefix2 .. argB .. centralTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
  169. elseif argC ~= nil then
  170. return errorMessageTable["tooManyArg"]
  171. end
  172. return linkAssamble[7] .. linkAssamble[3] .. centralTable[translatedHeader].prefix .. argB .. linkAssamble[2] .. centralTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
  173. end
  174. function p.generalLink_leftLogo(translatedHeader,argB,argC)
  175. return leftTable[translatedHeader].icon .. linkAssamble[2] .. linkAssamble[3] .. argB .. linkAssamble[2] .. argC .. linkAssamble[4]
  176. end
  177. function p.generalLink_rightLogo(translatedHeader,argB,argC)
  178. return linkAssamble[3] .. argB .. linkAssamble[2] .. argC .. linkAssamble[4] .. linkAssamble[2] .. rightTable[translatedHeader].icon
  179. end
  180. function p.generalLink_centralLogo(translatedHeader,argB)
  181. return linkAssamble[7] .. linkAssamble[3] .. argB .. linkAssamble[2] .. onlyLogoTable[translatedHeader].icon .. linkAssamble[4] .. linkAssamble[6]
  182. end
  183. return p