Módulo:Mooc
Este é o script MOOC central para renderizar um item MOOC em uma página wiki.
Funções invocáveis
[editar código-fonte]As seguintes funções são estáticas e, portanto, podem ser invocadas pelas páginas do wiki.
overview
[editar código-fonte]Renderiza a visão geral na página invocadora. A página de visão geral lista todas as lições que o MOOC consiste.
Parâmetros:
- Frame: Objeto do quadro WikiMedia que contém informações sobre a página de invocação.
Retorno:
Representação em string da página de visão geral renderizada.
render
[editar código-fonte]Renderiza um item MOOC na página invocadora. O título da página invocadora é usado para identificar o item a ser renderizado. Assim, você não pode invocar o módulo em páginas não-moco: O título da página deve ser uma subpágina da página MOOC.
Parâmetros:
- Frame: Objeto do quadro WikiMedia que contém informações sobre a página de invocação.
Retorno:
- Representação em string da página de visão geral renderizada.
- Lança um erro se a página invocadora não for um filho da base MOOC.
- Lança um erro se a página invocadora não representar um item MOOC (veja explicação abaixo).
Funções de Instância
[editar código-fonte]As funções a seguir são acessíveis por outros módulos LUA se eles tiverem acesso a uma instância MOOC. Portanto, elas não podem ser invocadas diretamente por páginas wiki.
init
[editar código-fonte]Inicializa o Módulo MOOC. Este método pode ser substituído e é suposto registrar manipuladores de tipos para todos os tipos de itens conhecidos. Se o método for substituído, você sempre pode chamar o método super.
Parâmetros:
- BaseUrl - string que indica o título da base MOOC (a página onde o MOOC está locado).
addTypeHandler
[editar código-fonte]Registra um manipulador de tipo para um tipo de item MOOC.
Parâmetros:
- TypeHandler - instância do manipulador de tipo a ser registrada.
getBaseUrl
[editar código-fonte]Determina o título da página da base MOOC. Esta implementação padrão considera a página raiz da página wiki de invocação como base MOOC.
Retorno:
Título da página da base MOOC.
getIndexUrl
[editar código-fonte]Determina o título da página do index MOOC padrão.
O índice MOOC padrão está localizado em `/MoocIndex` relativo à base MOOC.
Retorno: Título da página do MOOC index.
getCurrentPath
[editar código-fonte]Obtém o caminho do item MOOC da página wiki invocadora. O caminho do item MOOC é sempre relativo à base MOOC.
Retorno:
- Caminho do item MOOC da página wiki de invocação.
- Nulo ("nil") se a página invocadora não for filha da base MOOC.
getIndex
[editar código-fonte]Recupera o conteúdo simples do texto wiki da página do índice MOOC.
Retorno:
- Texto wiki da página index do MOOC.
- Lança um erro se a recuperação do conteúdo falhar.
renderOverview
[editar código-fonte]Renderiza a visão geral na página invocadora. A página de visão geral lista todas as lições em que o MOOC consiste.
Parâmetros:
- Frame: Objeto do quadro WikiMedia que contém informações sobre a página de invocação.
Retorno:
Representação em string da página de visão geral renderizada.
renderItem
[editar código-fonte]Renderiza um item MOOC na página invocadora. No momento, uma página só pode renderizar o item que representa (item com o caminho igual ao título da página relativo à base MOOC).
Parâmetros:
- Frame: Objeto do quadro WikiMedia que contém informações sobre a página de invocação.
Retorno:
Representação em string da página de visão geral renderizada.
- Lança um erro se a página invocadora não for um filho da base MOOC.
- Lança um erro se a página invocadora não representar um item MOOC (veja explicação abaixo).
Funções locais
[editar código-fonte]As funções abaixo são locais e, portanto, não podem ser invocadas por páginas wiki ou outros módulos Lua.
getHandler
[editar código-fonte]Obtém o manipulador de tipos para um determinado tipo de item MOOC. The handler must be registered before. Por exemplo, usando `addTypeHandler`.
Parâmetros:
- typeIdentifier - String que identifica o tipo do item MOOD que o manipulador precisa.
Retorno:
- Manipulador de template para o tipo de item MOOC especificado,
- Lança um erro se nenhum manipulador de tipo registrado lidar com o tipo de item especificado.
require("Módulo:Exceção");
local inheritance = require("Módulo:Herança");
local Item = require("Módulo:Mooc/Data/Item");
local TypeHandler = require("Módulo:Mooc/ManipuladorTipos");
local IndexParser = require("Módulo:Mooc/AnalisadorIndex");
local Unit = require("Módulo:Mooc/Data/Unidade");
local Lesson = require("Módulo:Mooc/Data/Lição");
local Mooc = inheritance.extend(inheritance.Class);
local handlers = {}
local function getHandler(typeIdentifier)
for k,v in pairs(handlers) do
if v:handlesType(typeIdentifier) then
return v;
end
end
local registered = {}
for k,v in pairs(handlers) do
table.insert(registered, k);
end
throw('there is no type handler for item type "' .. typeIdentifier .. '" registered. Registered: ' .. table.concat(registered, ",") .. ".\n");
end
function Mooc:init(baseUrl, video, quiz)
if baseUrl then
self.baseUrl = baseUrl;
end
if video then
self.video = video;
end
if quiz then
self.quiz = quiz;
end
self.typeHandlers = {}
-- register basic item types
if video == 'no' then
self:addTypeHandler(TypeHandler(Unit.TYPE, "Módulo:Mooc/Data/Unidade", "Módulo:Mooc/Modelo/UnidadeSemVideo"));
else
self:addTypeHandler(TypeHandler(Unit.TYPE, "Módulo:Mooc/Data/Unidade", "Módulo:Mooc/Modelo/Unidade"));
end
self:addTypeHandler(TypeHandler(Lesson.TYPE, "Módulo:Mooc/Data/Lição", "Módulo:Mooc/Modelo/Lição"));
self.typeHandlers.getHandler = function(typeIdentifier)
return getHandler(typeIdentifier);
end
end
function Mooc:addTypeHandler(typeHandler)
handlers[typeHandler:getType():getIdentifier()] = typeHandler;
end
function Mooc:getBaseUrl()
if not self.baseUrl then
local crrTitle = mw.title.getCurrentTitle();
local rootTitle = crrTitle.rootPageTitle;
self.baseUrl = rootTitle.fullText;
end
return self.baseUrl;
end
function Mooc:getIndexUrl()
return self:getBaseUrl() .. "/MoocIndex";
end
function Mooc:getCurrentPath()
local crrUrl = mw.title.getCurrentTitle().fullText;
local baseUrl = self:getBaseUrl();
if string.sub(crrUrl:lower(), 1, string.len(baseUrl)) == baseUrl:lower() then
local crrPath = string.gsub(string.sub(crrUrl, string.len(baseUrl) + 2), "_", " ");
return crrPath;
end
return nil;
end
function Mooc:getIndex()
local indexUrl = self:getIndexUrl();
local indexPage = mw.title.new(indexUrl);
local indexPlain = indexPage:getContent();
if indexPlain then
return indexPlain;
end
throw('failed to read index from URL "' .. indexUrl .. '"');
end
function Mooc:renderOverview(frame)
local overviewTemplate = require("Módulo:Mooc/Modelo/VisãoGeral");
local index = IndexParser.parseIndexOverview(self:getIndex(), self:getBaseUrl());
return overviewTemplate:render(frame, index, self);
end
function Mooc:renderItem(frame, itemPath)
local itemPath = itemPath;
if itemPath == nil then
itemPath = self:getCurrentPath();
if itemPath == nil then
throw("failed to render item: the page is not a child of the base page");
end
end
local index = IndexParser.parseIndex(self:getIndex(), itemPath, self:getBaseUrl());
if not index then
throw('failed to render item @ "' .. itemPath .. '": item not found');
end
local typeHandler = self.typeHandlers.getHandler(index["item"]:getTypeIdentifier());
return typeHandler:getTemplate():render(frame, index, self);
end
function Mooc.overview(frame)
local baseUrl = frame.args['base'];
local mooc = Mooc(baseUrl);
return mooc:renderOverview(frame);
end
function Mooc.render(frame)
local baseUrl = frame.args['base'];
local video = frame.args['video'];
local quiz = frame.args['quiz'];
local itemPath = frame.args['path'];
local mooc = Mooc(baseUrl, video, quiz);
return mooc:renderItem(frame, itemPath);
end
return Mooc;