Módulo:Mooc
Este é o script MOOC central para renderizar um item MOOC em uma página wiki.
Funções invocáveis
editarAs seguintes funções são estáticas e, portanto, podem ser invocadas pelas páginas do wiki.
overview
editarRenderiza 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
editarRenderiza 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
editarAs 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
editarInicializa 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
editarRegistra um manipulador de tipo para um tipo de item MOOC.
Parâmetros:
- TypeHandler - instância do manipulador de tipo a ser registrada.
getBaseUrl
editarDetermina 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
editarDetermina 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
editarObté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
editarRecupera 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
editarRenderiza 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
editarRenderiza 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
editarAs funções abaixo são locais e, portanto, não podem ser invocadas por páginas wiki ou outros módulos Lua.
getHandler
editarObté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;