Module:Sandbox/红石小蝈/UserPage
< Module:Sandbox | 红石小蝈
跳到导航
跳到搜索
upage = {} upage.main_color = "#0fa0df" upage.base_color = "#99eeff" -- variables boxes = {} hbox_cnt = 0 hobbies_at = 1 hobbies = {} local function set_default(args, default) for i, v in pairs(default) do if args[i] == nil then args[i] = v end end end function upage.box_base(args) set_default(args, upage.box_base_default) local width = 64 * args.w - 8 local height = 64 * args.h - 8 local retobj = mw.html.create("div") retobj :css{ display = "inline-flex", margin = "4px", width = tostring(width).."px", height = tostring(height).."px", background = args.bg, ["box-shadow"] = "3px 3px 8px rgba(0,0,0,0.5)", ["font-size"] = "10px" }:css(args.bs) :wikitext(args.c) return tostring(retobj) end upage.box_base_default = { bg = "#FFF", bs = {}, w = 1, h = 1, } function upage.box(args) set_default(args, upage.box_default) local css = { ["align-items"] = "center", ["justify-content"] = "center", ["text-align"] = "center", ["color"] = args.fg, overflow = "hidden" } for i, j in ipairs(args.bs) do css[i] = j end return upage.box_base{ bs = css, c = args.t } end upage.box_default = {fg = "#ccc", bs = {}, t = ""} function upage.empty() local retobj = mw.html.create("div") retobj:css{ display = "inline-flex", width = "64px", height = "64px", } return tostring(retobj) end function upage.glass() local retobj = mw.html.create("div") retobj :css{ display = "inline-flex", width = "64px", height = "64px", ["background-color"] = "rgb(155, 183, 213)" } local div1 = retobj:tag("div") div1 :css{ position = "relative", left = "4px", top = "4px", width = "56px", height = "56px", ["background-color"] = "rgb(163, 199, 214)"; } div1:tag("div") :css{ position = "absolute", left = "4px", top = "12px", width = "4px", height = "4px", ["background-color"] = "rgb(155, 183, 213)" } div1:tag("div") :css{ position = "absolute", left = "8px", top = "8px", width = "4px", height = "4px", ["background-color"] = "rgb(155, 183, 213)" } div1:tag("div") :css{ position = "absolute", left = "12px", top = "4px", width = "4px", height = "4px", ["background-color"] = "rgb(155, 183, 213)" } div1:tag("div") :css{ position = "absolute", right = "8px", bottom = "4px", width = "4px", height = "4px", ["background-color"] = "rgb(155, 183, 213)" } div1:tag("div") :css{ position = "absolute", right = "4px", bottom = "8px", width = "4px", height = "4px", ["background-color"] = "rgb(155, 183, 213)" } return tostring(retobj) end upage.vd = upage.empty -- vd for "void", uses as fillings. function upage.large_box(args) set_default(args, upage.large_box_default) local idc = 0 local retobj = mw.html.create("div") retobj:css{ display = "inline-block", margin = "4px", position = "relative", width = "248px", height = "56px", background = args.bg, ["box-shadow"] = "3px 3px 8px rgba(0,0,0,0.5)" } local left = "0" if type(args.id_l) == "string" then idc = idc + 1 retobj :tag("div") :css{ display = "flex", position = "absolute", left = "0", top = "0", width = "56px", height = "56px", background = args.id_l_bg, ["align-items"] = "center", ["justify-content"] = "center", overflow = "hidden" }:tag("div") :css{ ["max-height"] = "56px", ["text-align"] = "center", ["font-weight"] = "bold", ["font-size"] = args.id_l_s, color = args.id_l_c, ["line-height"] = "1em" }:wikitext(args.id_l) left = "56px" end if type(args.id_r) == "string" then idc = idc + 1 retobj :tag("div") :css{ display = "flex", position = "absolute", right = "0", top = "0", width = "56px", height = "56px", background = args.id_r_bg, ["align-items"] = "center", ["justify-content"] = "center", overflow = "hidden" }:tag("div") :css{ ["max-height"] = "56px", ["text-align"] = "center", ["font-weight"] = "bold", ["font-size"] = args.id_r_s, color = args.id_r_c, ["line-height"] = "1em" }:wikitext(args.id_r) end local width = 248 - 56 * idc local inner = retobj:tag("div") inner :css{ display = "flex", position = "absolute", top = "0", height = "56px", left = left, width = tostring(width).."px", ["align-items"] = "center", overflow = "auto" }:tag("div") :css{ ["padding-left"] = "0.5em", ["padding-right"] = "0.5em", width = tostring(width).."px", ["max-height"] = "56px", ["text-align"] = "left", ["font-size"] = args.content_s, ["line-height"] = "1.4em", color = args.content_c }:wikitext(args.content) return tostring(retobj) end upage.large_box_default = { bg = "#FFF", id_l_bg = upage.main_color, id_l_s = "20px", id_l_c = "#000", id_r_bg = upage.main_color, id_r_s = "20px", id_r_c = "#000", content_s = "10px", content_c = "#000", content = "", } function upage.hide_box(args) set_default(args, upage.hide_box_default) local count = hbox_cnt local left_size = nil if type(args.id_l) == "string" then if mw.ustring.len(args.id_l) == 1 then left_size = "30px" else left_size = "20px" end end local retobj = mw.html.create("div") local lbobj = mw.html.create("div") lbobj:addClass("mw-customtoggle-mnahide-"..count) lbobj:tag("div") :addClass("mw-collapsible") :attr("id", "mw-customcollapsible-mnahide-"..count) :wikitext(args.expp) lbobj:tag("div") :addClass("mw-collapsible") :addClass("mw-collapsed") :attr("id", "mw-customcollapsible-mnahide-"..count) :wikitext(args.fldp) local innerobj = mw.html.create("div") innerobj :css{ ["padding-left"] = "0.5em", ["padding-right"] = "0.5em", ["text-align"] = "left" }:wikitext(mw.getCurrentFrame():expandTemplate{title = args.source}) retobj :css{ display = "flex", ["flex-direction"] = "column" }:wikitext(upage.large_box{ id_l_bg = upage.main_color, id_l = args.id_l, id_l_s = left_size, id_l_c = args.id_l_c, content = tostring(lbobj) }):tag("div") :addClass("mw-collapsible mw-collapsed") :attr("id", "mw-customcollapsible-mnahide-"..count) :wikitext(upage.box_base{ w = 4, h = args.h, bs = {overflow = "auto"}, c = tostring(innerobj), }) hbox_cnt = count + 1 return tostring(retobj) end upage.hide_box_default = { h = 4, id_l_c = "#000" } function set_hobbies(list) for i, j in ipairs(list) do hobbies[i] = j end math.randomseed(os.time()) for i = #hobbies, 2, -1 do local j = math.random(i) hobbies[i], hobbies[j] = hobbies[j], hobbies[i] end end function upage.get_hobby() local ret = mw.html.create("div") ret:css{ position = "relative", width = "64px", height = "64px" }:wikitext(upage.box{ bs = { position = "absolute", left = "0px", top = "0px" }, t = hobbies[hobbies_at], }) hobbies_at = hobbies_at + 1 return tostring(ret) end function upage.generate(frame) --local source_name = frame.args.source --local content_json = frame:expandTemplate{title = source_name} local content = require("Module:Sandbox/红石小蝈/Data") set_hobbies(content.hobbies) for _, i in ipairs(content.large_boxes) do boxes[i.box_id] = upage.large_box(i) end for _, i in ipairs(content.hide_boxes) do boxes[i.box_id] = upage.hide_box(i) end local ret = mw.html.create("div") local inner = ret:css("position", "relative") :tag("div"):css{ ["min-width"] = "100%", ["max-width"] = "100%", ["overflow-x"] = "auto", ["background-color"] = upage.base_color }:tag("div"):css{ width = "1096px", -- 64 * 16 + margin * 2 + padding * 2 margin = "auto" }:tag("div"):css{ display = "flex", background = "#FFF", width = "1024px", margin = "32px", ["box-shadow"] = "inset 3px 3px 10px rgba(0,0,0,0.5)", padding = "4px", ["align-items"] = "center", ["justify-content"] = "center", ["flex-direction"] = "column" } for _, j in ipairs(frame.args) do local newline = inner:tag("div") newline :css{ display = "flex", align = "top", ["justify-content"] = "center", ["flex-direction"] = "row" } local x = 1 while x <= 16 do if string.sub(j, x, x) == "#" then newline:wikitext(upage.get_hobby()) x = x + 1 elseif string.sub(j, x, x) == " " or string.sub(j, x, x) == "%" then newline:wikitext(upage.vd()) x = x + 1 elseif string.sub(j, x, x) == "*" then newline:wikitext(upage.vd()) x = x + 1 elseif string.sub(j, x, x) == "@" then newline:wikitext(upage.vd()) x = x + 1 else newline:wikitext(boxes[string.sub(j, x, x+3)]) x = x + 4 end end end return tostring(ret) end return upage