Este é o script MOOC central para renderizar um item MOOC em uma página wiki.

Funções invocáveis editar

As seguintes funções são estáticas e, portanto, podem ser invocadas pelas páginas do wiki.

overview editar

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

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

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

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

Registra um manipulador de tipo para um tipo de item MOOC.

Parâmetros:

  1. TypeHandler - instância do manipulador de tipo a ser registrada.

getBaseUrl editar

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

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

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

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

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:

  1. 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

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:

  1. 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

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

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:

  1. 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;