پودمان:Index template: تفاوت میان نسخهها
ظاهر
محتوای حذفشده محتوای افزودهشده
بدون خلاصۀ ویرایش |
حذف ردههای نالازم برچسب: برگرداندهشده |
||
خط ۱: | خط ۱: | ||
categoryForGenre = mw.loadData('پودمان:Work/genre') |
|||
categoryForForm = mw.loadData('پودمان:Work/form') |
|||
categoryForAward = mw.loadData('پودمان:Work/award') |
|||
function withWikidataLink(wikitext, category) |
function withWikidataLink(wikitext, category) |
||
if wikitext == nil then |
if wikitext == nil then |
نسخهٔ ۷ ژانویهٔ ۲۰۲۵، ساعت ۱۳:۰۰
توضیحات این پودمان میتواند در پودمان:Index template/توضیحات قرار گیرد.
function withWikidataLink(wikitext, category)
if wikitext == nil then
return nil
end
new_wikitext = mw.ustring.gsub(wikitext, '%[%[([^|%]]*)%]%]', function(page)
return addWikidataToLink(page, mw.ustring.gsub(page, '%.*/', '') , category)
end)
if new_wikitext ~= wikitext then
return new_wikitext
end
return mw.ustring.gsub(wikitext, '%[%[([^|]*)|([^|%]]*)%]%]', function(page, link)
return addWikidataToLink(page, link, category)
end)
end
function addWikidataToLink(page, label, category)
local title = mw.title.new( page )
if title == nil then
return '[[' .. page .. '|' .. label .. ']]'
end
if title.isRedirect then
title = title.redirectTarget
end
local tag = mw.html.create('span')
local itemId = mw.wikibase.getEntityIdForTitle(title.fullText)
tag:wikitext('[[' .. page .. '|' .. label .. ']]')
if itemId ~= nil then
tag:wikitext( ' [[Image:Reasonator small logo wider white stripes.svg|15px|link=https://reasonator.toolforge.org/?q=' .. itemId .. '&lang=fa]] [[Image:Wikidocumentaries-logo.png|15px|link=https://wikidocumentaries-demo.wmflabs.org/' .. itemId .. '?language=fa]]')
if category ~= nil then
tag:wikitext('[[رده:' .. category .. ']]')
end
end
return tostring(tag)
end
function addRow(metadataTable, key, value)
if value then
metadataTable:tag('tr')
:tag('th')
:attr('score', 'row')
:css('vertical-align', 'top')
:wikitext(key)
:done()
:tag('td'):wikitext(value)
end
end
function splitFileNameInFileAndPage(title)
local slashPosition = string.find(title.text, "/")
if slashPosition == nil then
return title.text,nil
else
return string.sub(title.text, 1, slashPosition - 1), string.sub(title.text, slashPosition + 1)
end
end
function indexTemplate(frame)
--create a clean table of parameters with blank parameters removed
local data = (require 'Module:Index_data').indexDataWithWikidata(frame)
local args = data.args
local item = data.item
local page = mw.title.getCurrentTitle()
local html = mw.html.create()
if item then
html:wikitext('[[رده:نمایههای متصل به ویکیداده]]<indicator name="wikidata">[[File:Wikidata.svg|20px|ویکیداده|link=https://www.wikidata.org/wiki/' .. item.id .. '?uselang=fa]]</indicator>')
if next(item:getBestStatements('P629')) ~= nil then
local p629statementvalue = item:getBestStatements('P629')[1].mainsnak.datavalue.value.id
local p629statementitem = mw.wikibase.getEntity(p629statementvalue)
for _, statement in pairs(p629statementitem:getBestStatements('P136')) do
if statement.mainsnak.datavalue ~= nil then
genreId = statement.mainsnak.datavalue.value.id
if categoryForGenre[genreId] then
html:wikitext('[[رده:' .. categoryForGenre[genreId] .. ']]')
end
end
end
for _, statement in pairs(p629statementitem:getBestStatements('P7937')) do
if statement.mainsnak.datavalue ~= nil then
formId = statement.mainsnak.datavalue.value.id
if categoryForForm[formId] then
html:wikitext('[[رده:' .. categoryForForm[formId] .. ']]')
end
end
end
for _, statement in pairs(p629statementitem:getBestStatements('P166')) do
if statement.mainsnak.datavalue ~= nil then
awardId = statement.mainsnak.datavalue.value.id
if categoryForAward[awardId] then
html:wikitext('[[رده:' .. categoryForAward[awardId] .. ']]')
end
end
end
end
else
html:wikitext('[[رده:بدون پیوند به ویکیداده]]')
end
--Left part
local left = html:tag('div')
if args.remarks or args.notes then
left:css('width', '60%')
end
left:css('float', 'left')
--Image
if args.image then
local imageContainer = left:tag('div')
:css({
float = 'left',
overflow = 'hidden',
border = 'thin grey solid'
})
local imageTitle = nil
if tonumber(args.image) ~= nil then
-- this is a page number
imageTitle = mw.title.getCurrentTitle():subPageTitle(args.image)
else
-- this is an other file
imageTitle = mw.title.new(args.image, "Media")
-- TODO mettre une catégorie pour les livres ayant une couverture qui ne provient pas du DJVU/PDF
end
if imageTitle == nil then
imageContainer:wikitext(args.image)
-- TODO mettre une catégorie de maintenance ici lorsque la couverture est manquante
else
local imageName, imagePage = splitFileNameInFileAndPage(imageTitle)
if imagePage ~= nil then
imageContainer:wikitext('[[File:' .. imageName .. '|page=' .. imagePage .. '|200px]]')
else
imageContainer:wikitext('[[File:' .. imageName .. '|200px]]')
end
end
end
--Metadata
local metadataContainer = left:tag('div')
if args.image then
metadataContainer:css('margin-left', '160px')
end
local metadataTable = metadataContainer:tag('table')
if args.title then
if item then
addRow(metadataTable, 'عنوان', withWikidataLink(args.title, 'متصل به ویکیداده'))
else
addRow(metadataTable, 'عنوان', '[[' .. args.title .. ']]')
end
else
mw.addWarning('افزودن عنوان اثر')
end
addRow(metadataTable, 'عنوان فرعی', withWikidataLink(args.subtitle))
if args.volume then
addRow(metadataTable, 'جلد', '{{#invoke:ConvertDigit|main|' .. args.volume .. '}}')
else
end
if args.issue then
addRow(metadataTable, 'موضوع', '{{#invoke:ConvertDigit|main|' .. args.issue .. '}}')
else
end
if args.edition then
addRow(metadataTable, 'فارسی', '{{#invoke:ConvertDigit|main|' .. args.edition .. '}}')
else
end
if args.author then
if item then
local p50stmt = item['claims']['P50'][1]
if p50stmt['mainsnak']['snaktype'] == 'somevalue' then
addRow(metadataTable, 'نویسنده', withWikidataLink('[[پدیدآورنده: پدیدآورنده ناشناس|ناشناس]]', 'نوشتهشده توسط پدیدآورنده ناشناس'))
else
addRow(metadataTable, 'نویسنده', withWikidataLink(args.author))
-- local authors = item:formatPropertyValues( 'P50', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
-- for author in string.gmatch(authors, '([^,]+)') do
-- html:wikitext('[[رده:' .. author .. ' نویسنده]]')
-- end
local authors = item:getBestStatements('P50')
for i, author in pairs(authors) do
if author.mainsnak.snaktype == 'value' then
local authorid = author.mainsnak.datavalue.value.id
local authoritem = mw.wikibase.getEntity(authorid)
local authorsitelink = authoritem:getSitelink('fawikisource')
if authorsitelink ~= nil then
local authorsitelinkname = mw.ustring.sub(authorsitelink, 12)
html:wikitext('[[رده:آثار ' .. authorsitelinkname .. ']]')
end
end
end
end
else
addRow(metadataTable, 'نویسنده', '{{Al|' .. args.author .. '}} [[رده:آثار ' .. args.author .. ']]')
end
else
end
if args.translator then
if item then
local p655stmt = item['claims']['P655'][1]
if p655stmt['mainsnak']['snaktype'] == 'somevalue' then
addRow(metadataTable, 'مترجم', withWikidataLink('[[پدیدآورنده: پدیدآورنده ناشناس|ناشناس]]', 'مترجم ناشناس'))
else
addRow(metadataTable, 'مترجم', withWikidataLink(args.translator))
-- local translators = item:formatPropertyValues( 'P655', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
-- for translator in string.gmatch(translators, '([^,]+)') do
-- html:wikitext('[[رده:' .. translator .. 'مترجم]]')
-- end
local translators = item:getBestStatements('P655')
for i, translator in pairs(translators) do
if translator.mainsnak.snaktype == 'value' then
local translatorid = translator.mainsnak.datavalue.value.id
local translatoritem = mw.wikibase.getEntity(translatorid)
local translatorsitelink = translatoritem:getSitelink('fawikisource')
if translatorsitelink ~= nil then
local translatorsitelinkname = mw.ustring.sub(translatorsitelink, 12)
html:wikitext('[[رده:آثار ' .. translatorsitelinkname .. ']]')
end
end
end
end
else
addRow(metadataTable, 'مترجم', '{{Al|' .. args.translator .. '}} [[رده:آثار ' .. args.translator .. ']]')
end
else
end
if args.foreword_author then
if item then
addRow(metadataTable, 'نویسندهٔ پیشگفتار', withWikidataLink(args.foreword_author))
local foreword_authors = item:formatPropertyValues( 'P2679', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for foreword_author in string.gmatch(foreword_authors, '([^,]+)') do
end
else
addRow(metadataTable, 'نویسندهٔ پیشگفتار', '{{Al|' .. args.foreword_author .. '}}')
end
else
end
if args.afterword_author then
if item then
addRow(metadataTable, 'نویسندهٔ ضمیمه', withWikidataLink(args.afterword_author))
local afterword_authors = item:formatPropertyValues( 'P2680', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for afterword_author in string.gmatch(afterword_authors, '([^,]+)') do
end
else
addRow(metadataTable, ' نویسندهٔ ضمیمه', '{{Al|' .. args.afterword_author .. '}}')
end
else
end
if args.editor then
if item then
addRow(metadataTable, 'مصحح', withWikidataLink(args.editor))
local editors = item:formatPropertyValues( 'P98', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for editor in string.gmatch(editors, '([^,]+)') do
html:wikitext('[[رده:آثار ' .. editor .. ']]')
end
else
addRow(metadataTable, 'مصحح', '{{Al|' .. args.editor .. '}}')
end
else
end
addRow(metadataTable, 'تصویرگر', withWikidataLink(args.illustrator))
if args.lyricist then
if item then
addRow(metadataTable, 'ترانهسرا', withWikidataLink(args.lyricist))
local lyricists = item:formatPropertyValues( 'P676', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for lyricist in string.gmatch(lyricists, '([^,]+)') do
html:wikitext('[[رده:آثار ' .. lyricist .. ']]')
end
else
addRow(metadataTable, 'ترانهسرا', '{{Al|' .. args.lyricist .. '}}')
end
else
end
if args.composer then
if item then
addRow(metadataTable, 'آهنگساز', withWikidataLink(args.composer))
local composers = item:formatPropertyValues( 'P86', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for composer in string.gmatch(composers, '([^,]+)') do
html:wikitext('[[رده: آثار تصنیفشده توسط' .. composer .. ']]')
end
else
addRow(metadataTable, 'آهنگساز', '{{Al|' .. args.composer .. '}}')
end
else
end
if args.singer then
if item then
addRow(metadataTable, 'خواننده', withWikidataLink(args.singer))
local singers = item:formatPropertyValues( 'P175', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for singer in string.gmatch(singers, '([^,]+)') do
end
else
addRow(metadataTable, 'خواننده', '{{Al|' .. args.singer .. '}}')
end
else
end
if args.publisher then
if item then
addRow(metadataTable, 'ناشر', withWikidataLink(args.publisher))
local publishers = item:formatPropertyValues( 'P123', { mw.wikibase.entity.claimRanks.RANK_NORMAL } )['value']
for publisher in string.gmatch(publishers, '([^,]+)') do
html:wikitext('[[رده: آثار منتشرشده توسط ' .. publisher .. ']]')
end
else
addRow(metadataTable, 'ناشر', '[[ناشر:' .. args.publisher .. '|' .. args.publisher .. ']]')
end
else
html:wikitext( '[[رده:نمایههای بدون اطلاعات ناشر]]' )
end
if args.address then
if item then
addRow(metadataTable, 'مکان نشر', withWikidataLink(args.address))
else
addRow(metadataTable, 'مکان نشر', '[[:w:fa:' .. args.address .. '|' .. args.address .. ']]')
end
else
end
if args.year then
addRow(metadataTable, 'سال چاپ', '{{#invoke:ConvertDigit|main|' .. args.year .. '}} [[رده:آثار {{#invoke:ConvertDigit|main|' .. args.year .. '}} ]]' )
else
html:wikitext('[[رده:آثار نمونهخوانینشده بدون سال چاپ]]' )
end
addRow(metadataTable, 'چاپخانه', withWikidataLink(args.printer))
if args.source == 'djvu' then
addRow(metadataTable, 'منبع', '[[File:DjVu-logo.svg|25px|link=File:' .. mw.title.getCurrentTitle().text ..']] [[File:BookReader-favicon.svg|20px|link={{fullurl:toollabs:bookreader/fa/{{{n|{{PAGENAMEE}}}}}}}]]')
elseif args.source == 'pdf' then
addRow(metadataTable, 'منبع', '[[File:Icon pdf.svg|25px|link=File:' .. mw.title.getCurrentTitle().text ..']] [[File:BookReader-favicon.svg|20px|link={{fullurl:toollabs:bookreader/fa/{{{n|{{PAGENAMEE}}}}}}}]]')
elseif args.source == 'ogg' then
addRow(metadataTable, 'منبع', '[[File:Speaker Icon.svg|20px|link=File:' .. mw.title.getCurrentTitle().text ..']]')
elseif args.source == 'webm' then
addRow(metadataTable, 'منبع', '[[File:Open Iconic video.svg|20px|link=File:' .. mw.title.getCurrentTitle().text ..']]')
elseif args.source == 'mp3' then
addRow(metadataTable, 'منبع', '[[File:Speaker Icon.svg|20px|link=File:' .. mw.title.getCurrentTitle().text ..']]')
--add an indicator linking to the usages
local query = 'SELECT ?item ?itemLabel ?pages ?page WHERE {\n ?item wdt:P996 <http://commons.wikimedia.org/wiki/Special:FilePath/' .. mw.uri.encode(mw.title.getCurrentTitle().text, 'PATH') .. '> .\n OPTIONAL { ?page schema:about ?item ; schema:isPartOf <https://fa.wikisource.org/> . }\n OPTIONAL { ?item wdt:P304 ?pages . }\n SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],fa".\n}}'
html:wikitext('<indicator name="index-scan-wikidata">[[File:Wikidata Query Service Favicon.svg|20px|ویکیداده|link=https://query.wikidata.org/embed.html#' .. mw.uri.encode(query, 'PATH') .. ']]</indicator>')
else
addRow(metadataTable, 'منبع', args.source)
end
if args.progress == 'T' then
addRow(metadataTable, 'پیشرفت', '[[رده:آثار همسنجشده]][[:رده:آثار همسنجشده|همهٔ برگهای این اثر همسنجی شده و درست هستند]]')
elseif args.progress == 'V' then
addRow(metadataTable, 'پیشرفت', '[[رده:آثار نمونهخوانیشده]][[:رده:آثار نمونهخوانیشده|همهٔ برگهای این اثر نمونهخوانی شدهاند اما همگی همسنجی نشدهاند]]')
elseif args.progress == 'C' then
addRow(metadataTable, 'پیشرفت', '[[رده:آثار نمونهخوانینشده]][[:رده:آثار نمونهخوانینشده|در انتظار نمونهخوانی]]')
elseif args.progress == 'OCR' then
addRow(metadataTable, 'پیشرفت', '[[رده:آثار نیازمند نویسهخوان]][[:رده:آثار نیازمند نویسهخوان|نیازمند نویسهخوان نرمافزار اوسیآر]]')
elseif args.progress == 'L' then
addRow(metadataTable, 'پیشرفت', '[[رده:آثار نیازمند بازسازی پرونده]]<span style="color: #FF0000; ">[[:رده:آثار نیازمند بازسازی پرونده| پرونده منبع باید پیش از نمونهخوانی بازسازی شود]]</span>')
elseif args.progress == 'X' then
addRow(metadataTable, 'پیشرفت', '[[رده:آثار نیازمند رسیدگی به پرونده]][[:رده:آثار نیازمند رسیدگی به پرونده| پیش از نمونهخوانی یک pagelist برای پرونده درست کنید تا از صحت پرونده اطمینان یابید]]')
else
end
addRow(metadataTable, 'جلدها', args.volumes)
if args.pages then
left:tag('div'):css('clear', 'both')
left:tag('h3'):wikitext('برگها <br> {{نوار پیشرفت|{{PAGENAME}}}}')
left:tag('div'):attr('id', 'pagelist'):css({
background = '#F0F0F0',
['padding-left'] = '0.5em',
['text-align'] = 'justify'
}):newline():wikitext(args.pages):newline()
else
mw.addWarning('ایجاد فهرست برگها')
end
if args.remarks or args.notes then
local right = html:tag('div'):css({
width = '35%;',
['padding-left'] = '1em',
float = 'left'
})
if args.remarks then
right:tag('div'):attr('id', 'remarks'):wikitext(args.remarks)
end
if args.notes then
right:tag('hr'):css({
['margin-top'] = '1em',
['margin-bottom'] = '1em'
})
right:tag('div'):attr('id', 'notes'):wikitext(args.notes)
end
end
html:wikitext('[[رده:نمایه]]')
if args.source == 'djvu' then
html:wikitext('[[رده:نمایهها با فایلهای DjVu]]')
elseif args.source == 'pdf' then
html:wikitext('[[رده:نمایهها با فایلهای پیدیاف]]')
elseif args.source == 'ogg' then
html:wikitext('[[رده:نمایهها با فایلهای OGG]]')
elseif args.source == 'webm' then
html:wikitext('[[رده:نمایهها با فایلهای وبام]]')
elseif args.source == 'mp3' then
html:wikitext('[[رده:نمایهها با فایلهای MP3]]')
end
if not args.remarks then
html:wikitext('[[رده:نمایههای بدون فهرست]]')
end
return tostring(html)
end
local p = {}
function p.indexTemplate( frame )
return indexTemplate( frame )
end
return p