मॉड्यूल:Shortcut
दिखावट
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
इस साँचे का इस्तेमाल कई बड़ी संख्या के पृष्ठों में किया जा रहा है। बड़े पैमाने पर व्यवधान और अनावश्यक सर्वर लोड से बचने के लिए, किसी भी बदलाव के पहले इस साँचे के /प्रयोगपृष्ठ उपपृष्ठ या अपने उपयोगकर्ता स्थान पर उसे जांच कर देख ले। जांचे गये बदलावों को इस साँचे में एक बार में जोड़ा जा सकता है।अन्य उपयोगकर्ताओं के खातिर, बदलाव करने से पहले उससे सम्बंधित बात-चीत वार्ता पृष्ठ पर करें। |
This module depends on the following other modules: |
This module uses TemplateStyles: |
Related pages |
---|
यह मॉड्यूल किसी पेज के शॉर्टकट लिंक दिखाने वाला एक बॉक्स बनाता है।
प्रयोग
[संपादित करें]विकिटेक्स्ट से
[संपादित करें]विकीटेक्स्ट से, इस मॉड्यूल को एक टेम्पलेट से बुलाया जाना चाहिए, आमतौर पर {{shortcut}}। कृपया दस्तावेज़ीकरण के लिए टेम्पलेट पृष्ठ देखें। हालाँकि, इसे सिंटैक्स {{#invoke:shortcut|main|arguments}}
का उपयोग करके भी कॉल किया जा सकता है।
लुआ से
[संपादित करें]लुआ से इस मॉड्यूल का उपयोग करने के लिए, पहले इसे लोड करें।
local mShortcut = require('Module:Shortcut')
फिर आप निम्नलिखित सिंटैक्स के साथ शॉर्टकट बॉक्स बना सकते हैं:
mShortcut._main(shortcuts, options, frame, cfg)
- shortcuts शॉर्टकट पेज नामों की एक सरणी है। (आवश्यक)
- options विकल्पों की एक तालिका है। निम्नलिखित कुंजियाँ समर्थित हैं:
msg
- शॉर्टकट की सूची के बाद छोड़ने के लिए एक संदेश।category
- यदि गलत पर सेट किया जाता है (या Module:Yesno द्वारा गलत माना जाने वाला मान, जैसे कि "नहीं"), तो श्रेणियां दबा दी जाती हैं।
- frame एक फ़्रेम ऑब्जेक्ट। यह वैकल्पिक है, और केवल आंतरिक रूप से उपयोग के लिए अभिप्रेत है।
- cfg कॉन्फ़िगरेशन मानों की एक तालिका। यह वैकल्पिक है, और केवल परीक्षण के लिए है।
तकनीकी विवरण
[संपादित करें]इस मॉड्यूल में Module:Shortcut/config पर एक कॉन्फ़िगरेशन फ़ाइल है। इसका उपयोग इस मॉड्यूल को विभिन्न भाषाओं में अनुवाद करने या श्रेणी के नाम जैसे विवरण बदलने के लिए किया जा सकता है।
-- This module implements {{shortcut}}.
-- Set constants
local CONFIG_MODULE = 'Module:Shortcut/config'
-- Load required modules
local checkType = require('libraryUtil').checkType
local yesno = require('Module:Yesno')
local p = {}
local function message(msg, ...)
return mw.message.newRawMessage(msg, ...):plain()
end
local function makeCategoryLink(cat)
return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end
function p._main(shortcuts, options, frame, cfg)
checkType('_main', 1, shortcuts, 'table')
checkType('_main', 2, options, 'table', true)
options = options or {}
frame = frame or mw.getCurrentFrame()
cfg = cfg or mw.loadData(CONFIG_MODULE)
local templateMode = options.template and yesno(options.template)
local redirectMode = options.redirect and yesno(options.redirect)
local isCategorized = not options.category or yesno(options.category) ~= false
-- Validate shortcuts
for i, shortcut in ipairs(shortcuts) do
if type(shortcut) ~= 'string' or #shortcut < 1 then
error(message(cfg['invalid-shortcut-error'], i), 2)
end
end
-- Make the list items. These are the shortcuts plus any extra lines such
-- as options.msg.
local listItems = {}
for i, shortcut in ipairs(shortcuts) do
local templatePath, prefix
if templateMode then
-- Namespace detection
local titleObj = mw.title.new(shortcut, 10)
if titleObj.namespace == 10 then
templatePath = titleObj.fullText
else
templatePath = shortcut
end
prefix = options['pre' .. i] or options.pre or ''
end
if options.target and yesno(options.target) then
listItems[i] = templateMode
and string.format("{{%s[[%s|%s]]}}", prefix, templatePath, shortcut)
or string.format("[[%s]]", shortcut)
else
listItems[i] = frame:expandTemplate{
title = 'No redirect',
args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}
}
if templateMode then
listItems[i] = string.format("{{%s%s}}", prefix, listItems[i])
end
end
end
table.insert(listItems, options.msg)
-- Return an error if we have nothing to display
if #listItems < 1 then
local msg = cfg['no-content-error']
msg = string.format('<strong class="error">%s</strong>', msg)
if isCategorized and cfg['no-content-error-category'] then
msg = msg .. makeCategoryLink(cfg['no-content-error-category'])
end
return msg
end
local root = mw.html.create()
root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Shortcut/styles.css'} })
-- Anchors
local anchorDiv = root
:tag('div')
:addClass('module-shortcutanchordiv')
for i, shortcut in ipairs(shortcuts) do
local anchor = mw.uri.anchorEncode(shortcut)
anchorDiv:tag('span'):attr('id', anchor)
end
-- Shortcut heading
local shortcutHeading
do
local nShortcuts = #shortcuts
if nShortcuts > 0 then
local headingMsg = options['shortcut-heading'] or
redirectMode and cfg['redirect-heading'] or
cfg['shortcut-heading']
shortcutHeading = message(headingMsg, nShortcuts)
shortcutHeading = frame:preprocess(shortcutHeading)
end
end
-- Shortcut box
local shortcutList = root
:tag('div')
:addClass('module-shortcutboxplain noprint')
:attr('role', 'note')
if options.float and options.float:lower() == 'left' then
shortcutList:addClass('module-shortcutboxleft')
end
if options.clear and options.clear ~= '' then
shortcutList:css('clear', options.clear)
end
if shortcutHeading then
shortcutList
:tag('div')
:addClass('module-shortcutlist')
:wikitext(shortcutHeading)
end
local ubl = require('Module:List').unbulleted(listItems)
shortcutList:wikitext(ubl)
return tostring(root)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
-- Separate shortcuts from options
local shortcuts, options = {}, {}
for k, v in pairs(args) do
if type(k) == 'number' then
shortcuts[k] = v
else
options[k] = v
end
end
-- Compress the shortcut array, which may contain nils.
local function compressArray(t)
local nums, ret = {}, {}
for k in pairs(t) do
nums[#nums + 1] = k
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
shortcuts = compressArray(shortcuts)
return p._main(shortcuts, options, frame)
end
return p