วิกิพีเดีย
มอดูล:AutomaticTOC
นี่เป็นมอดูลที่ถูกป้องกันถาวรเนื่องจากมีความเสี่ยงสูง กรุณาอภิปรายการเปลี่ยนแปลงใด ๆ ทางหน้าคุย คุณอาจส่งคำขอแก้ไขไปยังผู้ดูแลระบบเพื่อให้แก้ไขได้หากเป็นการแก้ไขที่ไม่มีการคัดค้านหรือมีความเห็นพ้องสนับสนุน คุณยังสามารถขอให้เลิกป้องกันหน้าได้ |
คู่มือการใช้งานมอดูล[ดู] [แก้] [ประวัติ] [ล้างแคช]
การใช้งาน
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |
พารามิเตอร์
- name: เป็นชื่อของตาราง ถ้าไม่ระบุจะไม่แสดงผล อาจระบุเป็น {{MediaWiki:Toc}}: ก็ได้
- short: หากระบุ จะทำให้ name อยู่บรรทัดเดียวกับข้อมูล แต่ถ้าไม่ระบุจะทำให้ name อยู่บนสุด และลอยอยู่ตรงกลาง
- delim: ไว้ใช้เป็นตัวแบ่งสำหรับพารามิเตอร์ include, exclude, pre, post ค่ามาตรฐานคือ ","
- sep: ไว้ใช้เป็นตัวแบ่งเวลาแสดงผล TOC ค่ามาตรฐานคือ " " (ช่องว่าง) สามารถกำหนดเป็นอย่างอื่น เช่น " · " ได้
- pre: เป็นรายการอะไรก็ได้ที่ต้องการให้แสดงผลก่อนลิงก์ที่สร้างขึ้นโดยอัตโนมัติ เช่น [[#top|บนสุด]]
- post: เป็นรายการอะไรก็ได้ที่ต้องการให้แสดงผลหลังลิงก์ที่สร้างขึ้นโดยอัตโนมัติ เช่น [[#อ้างอิง|อ้างอิง]]
- prebreak: เป็นตัวคั่นระหว่าง pre กับชุดข้อมูล โดยปกติจะมีค่าเป็น sep อาจระบุเป็น <br> หากต้องการให้ pre กับชุดข้อมูลอยู่คนละบรรทัดกัน
- postbreak: เป็นตัวคั่นระหว่าง post กับชุดข้อมูล โดยปกติจะมีค่าเป็น sep อาจระบุเป็น <br> หากต้องการให้ post กับชุดข้อมูลอยู่คนละบรรทัดกัน
- include: เป็นรายการหัวเรื่องที่ต้องการให้รวมเป็นกรณีพิเศษ เช่น "0-9"
- exclude: เป็นรายการหัวเรื่องที่ต้องการให้นำออกเป็นกรณีพิเศษ
- top: หากกำหนด จะมีลิงก์โยงไปยังบนสุดของหน้า โดยมีชื่อแสดงผลลิงก์ตามที่กำหนดไว้ ค่ามาตรฐานคือค่าว่าง (นั่นคือไม่แสดงผล)
- anchor: จับกับ anchor ที่สร้างผ่านแม่แบบ anchor ด้วย
- title: หากกำหนดจะดึงข้อมูลจากหน้านั้น ๆ ค่ามาตรฐานคือหน้าปัจจุบันที่กำลังเปิดอยู่
- prefix: หากกำหนด จะใส่ข้อความแสดงผลลิงก์จะมีข้อความนี้เติมเข้าไปข้างหน้า
- suffix: หากกำหนด จะใส่ข้อความแสดงผลลิงก์จะมีข้อความนี้เติมเข้าไปด้านหลัง
- level: รวบรวมลิงก์ที่มีความยาวน้อยกว่าหรือเท่ากับ level มาสร้างตาราง ค่ามาตรฐานคือ 1
ข้อจำกัด
- เมื่อมีการเปลี่ยนแปลงหัวข้อย่อย อาจจะต้องทำการล้างแคชเซิร์ฟเวอร์เสียก่อน จึงจะแสดงผลถูกต้อง
ดูเพิ่ม
- {{ดรรชนีอัตโนมัติ}}
คู่มือการใช้งานที่ปรากฏด้านบนนี้ดึงมาจาก มอดูล:AutomaticTOC/doc (แก้ | ประวัติ) ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (แก้ | ดูความแตกต่าง) และชุดทดสอบ (สร้าง) ของมอดูลนี้ หน้าย่อยของมอดูลนี้ |
z = {}; -- main function function z.main(frame) local args = frame.args local title = handle_param(args.title, nil) title = title and mw.title.new(args.title) or mw.title.getCurrentTitle() local delim = handle_param(args.delim, ",") local sep = handle_param(args.sep, " ") local short = handle_param(args.short, nil) local name = handle_param(args.name, '') name = (name == '') and '' or "'''" .. name .. "'''" name = "|" .. (short and name or "<center>" .. name .. "</center>\n|-") .. "\n|" local include = args.include and Set(Split(args.include, "%" .. delim)) or {} local exclude = args.exclude and Set(Split(args.exclude, "%" .. delim)) or {} local pre = args.pre and Split(args.pre, "%" .. delim) or {} local prebreak = handle_param(args.prebreak, sep) local post = args.post and Split(args.post, "%" .. delim) or {} local postbreak = handle_param(args.postbreak, sep) local prefix = handle_param(args.prefix, "") local suffix = handle_param(args.suffix, "") local anchor = handle_param(args.anchor, nil) local wiki_text = title:getContent() local all = {} local level = handle_param(tonumber(args.level), 1) eval = function(v) v = v:match "^%s*(.-)%s*$" if v ~= "" then if (mw.ustring.len(v) <= level or include[v]) then table.insert(all, v) end end end for line in wiki_text:gmatch("[^\n]+") do --- eval(string.gsub(line:match("^=+%s*(.-)%s*=+%s-$") or "", "%b{}", "")) if anchor then for _, v in pairs(Split(line:match("%{%{[Aa]nchor%|(.-)%}%}") or "", "%|")) do eval(v) end end --- end table.sort(all, function(a, b) return mw.ustring.codepoint(a) < mw.ustring.codepoint(b) end) complete_list = {} for k, v in pairs(all) do if not exclude[v] and (k == 0 or (k > 0 and all[k - 1] ~= v)) then table.insert(complete_list, table.concat{"[[#", v, "|", prefix, v, suffix, "]]"}) end end local cat_error = "[[Category:หน้าที่แม่แบบดรรชนีอัตโนมัติทำงานผิดพลาด]]" if #complete_list == 0 then return errorPrinter({{"", "no section link found" .. cat_error}}) end if #pre == 0 then prebreak = "" end if #post == 0 then postbreak = "" end out = '{| class="toccolours" style="margin: 0px auto;"\n' .. name .. table.concat(pre, sep) .. prebreak .. table.concat(complete_list, sep) .. postbreak .. table.concat(post, sep) .. ' __NOTOC__\n|}' if args.db then out = '<pre>' .. out .. '</pre>' end return frame:preprocess(out) end -- handle parameter function handle_param(value, default) if (value == nil or value == "¬") then return default else return value end end -- from Module:Coordinates function errorPrinter(errors) local result = "" for i,v in ipairs(errors) do local errorHTML = '<strong class="error">AutomaticTOC: ' .. v[2] .. '</strong>' result = result .. errorHTML .. "<br />" end return result end -- http://stackoverflow.com/questions/656199/search-for-an-item-in-a-lua-list function Set (list) local set = {} for _, l in pairs(list) do set[l] = true end return set end -- http://lua-users.org/wiki/SplitJoin function Split(str, delim, maxNb) -- Eliminate bad cases... if string.find(str, delim) == nil then if str == "" then return {} else return {str} end end if maxNb == nil or maxNb < 1 then maxNb = 0 -- No limit end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end -- Handle the last field if nb ~= maxNb then nb = nb + 1 result[nb] = string.sub(str, lastPos) end if result[nb] == "" then table.remove(result, nb) end return result end return z -- 2 May 2013: Thanks to [[:en:User:Darklama]] for helping improving the code :)