Módulo:Book: diferenças entre revisões
Aspeto
[edição verificada] | [edição verificada] |
Conteúdo apagado Conteúdo adicionado
frame:preprocess( '{{:'..frame.args['list']..'}}' ); --> mw.title.new( frame.args['list'] ):getContent(); |
-- On page *A'B&C, {{PAGENAME}} returns "*A'B&C", so decode it first! page = mw.text.decode( page ) |
||
(Há 7 edições intermédias do mesmo utilizador que não estão a ser apresentadas) | |||
Linha 1: | Linha 1: | ||
local function arraySearch( needle, haystack ) |
local function arraySearch( needle, haystack ) |
||
for k,v in pairs( haystack ) do |
for k,v in pairs( haystack ) do |
||
if v == needle then |
if v == needle then |
||
result = k; |
result = k; |
||
end |
end |
||
end |
end |
||
return result; |
return result; |
||
end |
end |
||
Linha 77: | Linha 77: | ||
if page == nil then |
if page == nil then |
||
page = mw.title.getCurrentTitle().text |
page = mw.title.getCurrentTitle().text |
||
else |
|||
-- On page [[*A'B&C]], {{PAGENAME}} returns "*A'B&C", so decode it first! |
|||
page = mw.text.decode( page ) |
|||
end |
end |
||
local pPosition = frame.args['position']; |
local pPosition = frame.args['position']; |
Revisão das 12h18min de 23 de janeiro de 2014
Uso
- ...
Tarefas pendentes
- Documentar este módulo
- Conferir os arquivos dos diálogos comunitários para ver o que ainda precisa ser feito...
- Atualizar Ajuda:Navegação automática
- ...
Ver também
local function arraySearch( needle, haystack )
for k,v in pairs( haystack ) do
if v == needle then
result = k;
end
end
return result;
end
-- Based on parseCollectionLine from https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/Collection.git;a=blob;f=Collection.body.php;hb=f2bd4ee2be12ab3df5f2dcb3bd56ff17247fff66#l793)
-- Get "Book/Title" from a line in any of these formats:
-- :[[Book/Title]]
-- :[[Book/Title|Text]]
-- :[{{fullurl:Book/Title|oldid=12345}} Text]
local function getChapterFromLine( line )
local title = string.match( line, "^%s*:%s*%[%[:?(.-)|(.-)%]%]%s*$" ) or
string.match( line, "^%s*:%s*%[%[:?(.-)%]%]%s*$" ) or
string.match( line, "^%s*:%s*%[{{fullurl:(.-)|oldid=.-}}%s+.-]%s*$" ) or
""
return title:gsub( '_',' ' )
end
-- Adapted from http://lua-users.org/wiki/SplitJoin
local function getListOfChaptersFromText( str )
local delim = "\r?\n+"
local result = {}
if string.find( str, delim ) == nil then
-- This book doesn't have a collection page
return result;
end
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for line, pos in string.gfind( str, pat ) do
nb = nb + 1
result[nb] = getChapterFromLine( line )
lastPos = pos
end
result[nb + 1] = getChapterFromLine( string.sub( str, lastPos ) )
return result
end
local function core( list, page, pPosition, relPosition )
local chapters = getListOfChaptersFromText( list );
if pPosition == 'first' then
return chapters[1];
end
if pPosition == 'last' then
return chapters[#chapters];
end
if pPosition == not nil then
return chapters[pPosition];
end
local cPosition = arraySearch( page, chapters );
if cPosition == nil then
return '';
end
if pPosition == 'prev' then
return chapters[cPosition - 1];
end
if pPosition == 'next' then
return chapters[cPosition + 1];
end
if relPosition == nil then
return '';
end
return chapters[cPosition + relPosition];
end
return {
_arraySearch = arraySearch,
_getChapterFromLine = getChapterFromLine,
_getListOfChaptersFromText = getListOfChaptersFromText,
_core = core,
nav = function ( frame )
local list = mw.title.new( frame.args['list'] ):getContent();
local page = frame.args['page'];
if page == nil then
page = mw.title.getCurrentTitle().text
else
-- On page [[*A'B&C]], {{PAGENAME}} returns "*A'B&C", so decode it first!
page = mw.text.decode( page )
end
local pPosition = frame.args['position'];
local relPosition = frame.args['relative-position'];
return core( list, page, pPosition, relPosition );
end
};