8,498
edits
(+پارامتر فارسی «محتوا») |
Nazarzadeh (talk | contribs) m (1 revision imported) |
||
(4 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
-- This module implements {{documentation}}. | -- This module implements {{documentation}}. | ||
Line 12: | Line 11: | ||
-- Often-used functions. | -- Often-used functions. | ||
local ugsub = mw.ustring.gsub | local ugsub = mw.ustring.gsub | ||
local format = mw.ustring.format | |||
---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ||
Line 33: | Line 33: | ||
expectType = expectType or 'string' | expectType = expectType or 'string' | ||
if type(msg) ~= expectType then | if type(msg) ~= expectType then | ||
error(' | error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2) | ||
end | end | ||
if not valArray then | if not valArray then | ||
Line 41: | Line 41: | ||
local function getMessageVal(match) | local function getMessageVal(match) | ||
match = tonumber(match) | match = tonumber(match) | ||
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4) | |||
return valArray[match] or error(' | |||
end | end | ||
return ugsub(msg, '$([1- | return ugsub(msg, '$([1-9][0-9]*)', getMessageVal) | ||
end | end | ||
Line 52: | Line 51: | ||
local function makeWikilink(page, display) | local function makeWikilink(page, display) | ||
if display then | if display then | ||
return | return format('[[%s|%s]]', page, display) | ||
else | else | ||
return | return format('[[%s]]', page) | ||
end | end | ||
end | end | ||
Line 68: | Line 67: | ||
local function makeUrlLink(url, display) | local function makeUrlLink(url, display) | ||
return | return format('[%s %s]', url, display) | ||
end | end | ||
Line 83: | Line 82: | ||
end | end | ||
-- 'documentation-toolbar' | -- 'documentation-toolbar' | ||
return '<span class="' | return format( | ||
'<span class="%s">(%s)</span>', | |||
message('toolbar-class'), | |||
table.concat(ret, ' | ') | |||
) | |||
end | end | ||
Line 98: | Line 100: | ||
valueFunc = function (key, value) | valueFunc = function (key, value) | ||
if type(value) == 'string' then | if type(value) == 'string' then | ||
value = | value = value:match('^%s*(.-)%s*$') -- Remove whitespace. | ||
if key == 'heading' or value ~= '' then | if key == 'heading' or value ~= '' then | ||
return value | return value | ||
Line 118: | Line 120: | ||
function p.nonexistent(frame) | function p.nonexistent(frame) | ||
if mw.title.getCurrentTitle().subpageText == ' | if mw.title.getCurrentTitle().subpageText == 'testcases' then | ||
return frame:expandTemplate{title = ' | return frame:expandTemplate{title = 'module test cases notice'} | ||
else | else | ||
return p.main(frame) | return p.main(frame) | ||
Line 141: | Line 143: | ||
-- 'documentation-container' | -- 'documentation-container' | ||
:addClass(message('container')) | :addClass(message('container')) | ||
:attr('role', 'complementary') | |||
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil) | |||
:attr('aria-label', args.heading == '' and 'Documentation' or nil) | |||
:newline() | :newline() | ||
:tag('div') | :tag('div') | ||
Line 312: | Line 317: | ||
local sandboxTitle = env.sandboxTitle | local sandboxTitle = env.sandboxTitle | ||
if templateTitle.exists and sandboxTitle.exists then | if templateTitle.exists and sandboxTitle.exists then | ||
local compareUrl = mw.uri. | local compareUrl = mw.uri.canonicalUrl( | ||
' | 'Special:ComparePages', | ||
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} | { page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} | ||
) | ) | ||
Line 348: | Line 353: | ||
-- | -- | ||
-- Messages: | -- Messages: | ||
-- 'sandbox-notice-image' --> '[[ | -- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]' | ||
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' | -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' | ||
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' | -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' | ||
Line 358: | Line 363: | ||
-- 'sandbox-notice-testcases-link-display' --> 'test cases' | -- 'sandbox-notice-testcases-link-display' --> 'test cases' | ||
-- 'sandbox-category' --> 'Template sandboxes' | -- 'sandbox-category' --> 'Template sandboxes' | ||
-- 'module-sandbox-category' --> 'Module sandboxes' | |||
-- 'other-sandbox-category' --> 'Sandboxes outside of template or module namespace' | |||
--]=] | --]=] | ||
local title = env.title | local title = env.title | ||
Line 372: | Line 379: | ||
-- Get the text. We start with the opening blurb, which is something like | -- Get the text. We start with the opening blurb, which is something like | ||
-- "This is the template sandbox for [[Template:Foo]] (diff)." | -- "This is the template sandbox for [[Template:Foo]] (diff)." | ||
local text = '' | local text = '__EXPECTUNUSEDTEMPLATE__' | ||
local pagetype | local pagetype, sandboxCat | ||
if subjectSpace == 10 then | if subjectSpace == 10 then | ||
pagetype = message('sandbox-notice-pagetype-template') | pagetype = message('sandbox-notice-pagetype-template') | ||
sandboxCat = message('sandbox-category') | |||
elseif subjectSpace == 828 then | elseif subjectSpace == 828 then | ||
pagetype = message('sandbox-notice-pagetype-module') | pagetype = message('sandbox-notice-pagetype-module') | ||
sandboxCat = message('module-sandbox-category') | |||
else | else | ||
pagetype = message('sandbox-notice-pagetype-other') | pagetype = message('sandbox-notice-pagetype-other') | ||
sandboxCat = message('other-sandbox-category') | |||
end | end | ||
local templateLink = makeWikilink(templateTitle.prefixedText) | local templateLink = makeWikilink(templateTitle.prefixedText) | ||
Line 406: | Line 416: | ||
end | end | ||
end | end | ||
-- Add the sandbox to the sandbox category. | -- Add the sandbox to the sandbox category. | ||
omargs.text = text .. makeCategoryLink( | omargs.text = text .. makeCategoryLink(sandboxCat) | ||
-- 'documentation-clear' | -- 'documentation-clear' | ||
Line 461: | Line 472: | ||
env = env or p.getEnvironment(args) | env = env or p.getEnvironment(args) | ||
local links | local links | ||
local content = args.content | local content = args.content | ||
if not content or args[1] then | if not content or args[1] then | ||
-- No need to include the links if the documentation is on the template page itself. | -- No need to include the links if the documentation is on the template page itself. | ||
Line 490: | Line 501: | ||
-- 'history-link-display' --> 'history' | -- 'history-link-display' --> 'history' | ||
-- 'purge-link-display' --> 'purge' | -- 'purge-link-display' --> 'purge' | ||
-- 'module-preload' --> 'Template:Documentation/preload-module-doc' | -- 'module-preload' --> 'Template:Documentation/preload-module-doc' | ||
-- 'docpage-preload' --> 'Template:Documentation/preload' | -- 'docpage-preload' --> 'Template:Documentation/preload' | ||
Line 505: | Line 515: | ||
end | end | ||
-- Create link if /doc doesn't exist. | -- Create link if /doc doesn't exist. | ||
local preload = args.preload | local preload = args.preload | ||
if not preload then | if not preload then | ||
if | if subjectSpace == 828 then -- Module namespace | ||
preload = message('module-preload') | preload = message('module-preload') | ||
else | else | ||
Line 524: | Line 524: | ||
end | end | ||
end | end | ||
return { | |||
title = title, | |||
docTitle = docTitle, | |||
-- View, display, edit, and purge links if /doc exists. | |||
viewLinkDisplay = message('view-link-display'), | |||
editLinkDisplay = message('edit-link-display'), | |||
historyLinkDisplay = message('history-link-display'), | |||
purgeLinkDisplay = message('purge-link-display'), | |||
preload = preload, | |||
createLinkDisplay = message('create-link-display') | |||
} | |||
end | end | ||
Line 534: | Line 543: | ||
-- @data - a table of data generated by p.makeStartBoxLinksData | -- @data - a table of data generated by p.makeStartBoxLinksData | ||
--]] | --]] | ||
local docTitle = data.docTitle | |||
-- yes, we do intend to purge the template page on which the documentation appears | |||
local purgeLink = makeWikilink("Special:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay) | |||
if docTitle.exists then | if docTitle.exists then | ||
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) | local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) | ||
local editLink = | local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay) | ||
local historyLink = | local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay) | ||
return "[" .. viewLink .. "] [" .. editLink .. "] [" .. historyLink .. "] [" .. purgeLink .. "]" | |||
else | else | ||
local createLink = makeUrlLink(docTitle: | local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) | ||
return "[" .. createLink .. "] [" .. purgeLink .. "]" | |||
end | end | ||
return ret | return ret | ||
Line 632: | Line 629: | ||
:tag('span') | :tag('span') | ||
:addClass(data.headingClass) | :addClass(data.headingClass) | ||
:attr('id', 'documentation-heading') | |||
:cssText(data.headingStyleText) | :cssText(data.headingStyleText) | ||
:wikitext(data.heading) | :wikitext(data.heading) | ||
Line 656: | Line 654: | ||
env = env or p.getEnvironment(args) | env = env or p.getEnvironment(args) | ||
local docTitle = env.docTitle | local docTitle = env.docTitle | ||
local content = args.content | local content = args.content | ||
if not content and docTitle and docTitle.exists then | if not content and docTitle and docTitle.exists then | ||
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText} | content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText} | ||
Line 670: | Line 668: | ||
env = env or p.getEnvironment(args) | env = env or p.getEnvironment(args) | ||
local docTitle = env.docTitle | local docTitle = env.docTitle | ||
if not | if not args.content and docTitle and docTitle.exists then | ||
return docTitle.prefixedText | return docTitle.prefixedText | ||
else | else | ||
Line 725: | Line 723: | ||
-- "Editors can experiment in this template's sandbox and testcases pages." | -- "Editors can experiment in this template's sandbox and testcases pages." | ||
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />' | text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />' | ||
if not | if not args.content and not args[1] then | ||
-- "Please add categories to the /doc subpage." | -- "Please add categories to the /doc subpage." | ||
-- Don't show this message with inline docs or with an explicitly specified doc page, | -- Don't show this message with inline docs or with an explicitly specified doc page, | ||
Line 768: | Line 766: | ||
return nil | return nil | ||
end | end | ||
if docTitle.exists then | if docTitle.exists then | ||
-- /doc exists; link to it. | -- /doc exists; link to it. | ||
local docLink = makeWikilink(docTitle.prefixedText) | local docLink = makeWikilink(docTitle.prefixedText) | ||
local editDisplay = message('edit-link-display') | local editDisplay = message('edit-link-display') | ||
local editLink = | local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, editDisplay) | ||
local historyDisplay = message('history-link-display') | local historyDisplay = message('history-link-display') | ||
local historyLink = | local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, historyDisplay) | ||
return message('transcluded-from-blurb', {docLink}) | |||
.. ' ' | .. ' ' | ||
.. makeToolbar(editLink, historyLink) | .. makeToolbar(editLink, historyLink) | ||
Line 784: | Line 779: | ||
elseif env.subjectSpace == 828 then | elseif env.subjectSpace == 828 then | ||
-- /doc does not exist; ask to create it. | -- /doc does not exist; ask to create it. | ||
local createUrl = docTitle: | local createUrl = docTitle:canonicalUrl{action = 'edit', preload = message('module-preload')} | ||
local createDisplay = message('create-link-display') | local createDisplay = message('create-link-display') | ||
local createLink = makeUrlLink(createUrl, createDisplay) | local createLink = makeUrlLink(createUrl, createDisplay) | ||
return message('create-module-doc-blurb', {createLink}) | |||
.. '<br />' | .. '<br />' | ||
end | end | ||
end | end | ||
Line 835: | Line 829: | ||
local sandboxDisplay = message('sandbox-link-display') | local sandboxDisplay = message('sandbox-link-display') | ||
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) | local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) | ||
local sandboxEditDisplay = message('sandbox-edit-link-display') | local sandboxEditDisplay = message('sandbox-edit-link-display') | ||
local sandboxEditLink = | local sandboxEditLink = makeWikilink("Special:EditPage/" .. sandboxPage, sandboxEditDisplay) | ||
local compareUrl = env.compareUrl | local compareUrl = env.compareUrl | ||
local compareLink | local compareLink | ||
Line 852: | Line 845: | ||
sandboxPreload = message('template-sandbox-preload') | sandboxPreload = message('template-sandbox-preload') | ||
end | end | ||
local sandboxCreateUrl = sandboxTitle: | local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = sandboxPreload} | ||
local sandboxCreateDisplay = message('sandbox-create-link-display') | local sandboxCreateDisplay = message('sandbox-create-link-display') | ||
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) | local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) | ||
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) | local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) | ||
local mirrorPreload = message('mirror-link-preload') | local mirrorPreload = message('mirror-link-preload') | ||
local mirrorUrl = sandboxTitle: | local mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} | ||
if subjectSpace == 828 then | if subjectSpace == 828 then | ||
mirrorUrl = sandboxTitle: | mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary} | ||
end | end | ||
local mirrorDisplay = message('mirror-link-display') | local mirrorDisplay = message('mirror-link-display') | ||
Line 869: | Line 862: | ||
local testcasesDisplay = message('testcases-link-display') | local testcasesDisplay = message('testcases-link-display') | ||
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) | local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) | ||
local testcasesEditUrl = testcasesTitle: | local testcasesEditUrl = testcasesTitle:canonicalUrl{action = 'edit'} | ||
local testcasesEditDisplay = message('testcases-edit-link-display') | local testcasesEditDisplay = message('testcases-edit-link-display') | ||
local testcasesEditLink = | local testcasesEditLink = makeWikilink("Special:EditPage/" .. testcasesPage, testcasesEditDisplay) | ||
-- for Modules, add testcases run link if exists | -- for Modules, add testcases run link if exists | ||
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then | if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then | ||
Line 887: | Line 880: | ||
testcasesPreload = message('template-testcases-preload') | testcasesPreload = message('template-testcases-preload') | ||
end | end | ||
local testcasesCreateUrl = testcasesTitle: | local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = 'edit', preload = testcasesPreload} | ||
local testcasesCreateDisplay = message('testcases-create-link-display') | local testcasesCreateDisplay = message('testcases-create-link-display') | ||
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) | local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) | ||
Line 944: | Line 937: | ||
end | end | ||
local subpagesLink = makeWikilink( | local subpagesLink = makeWikilink( | ||
' | 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', | ||
message('subpages-link-display', {pagetype}) | message('subpages-link-display', {pagetype}) | ||
) | ) | ||
Line 974: | Line 967: | ||
end | end | ||
local subpage = title.subpageText | local subpage = title.subpageText | ||
if message('display-strange-usage-category', nil, 'boolean') | if message('display-strange-usage-category', nil, 'boolean') | ||
and ( | and ( | ||
Line 981: | Line 973: | ||
) | ) | ||
then | then | ||
return makeCategoryLink(message('strange-usage-category')) | |||
end | end | ||
return | return '' | ||
end | end | ||
return p | return p |