===== Componentes de um laboratório no RELLE =====
Um experimento é composto de três módulos: a interface web, o servidor de experimento e o próprio experimento físico, como ilustrado na figura abaixo. Esta página traz informações para desenvolvedores de laboratórios remotos criarem interfaces e hospedar seus experimentos no RELLE.
{{ :loading.png |}}
===== Pacote de arquivos =====
Este pacote contém os arquivos para a desenvolver a interface web de um experimento.
[[https://github.com/RExLab/lab_package]]
===== Dependências disponíveis para a interface de usuário =====
Obrigatórios - já são carregados na interface, não é necessário adicionar qualquer código para usar suas funcionalidades:
* Biblioteca jQuery 2.1.3 [[https://jquery.com/download/]]
* Framework CSS BootStrap [[http://getbootstrap.com/]]
* Tema Flat UI [[http://designmodo.github.io/Flat-UI/]]
Opcionais - não são carregados na interfaçe, é necessário adicionar códigos para usar suas funcionalidades:
* Biblioteca Shepherd. Tutoriais: [[http://github.hubspot.com/shepherd/docs/welcome/]]. Código:[[http://relle.ufsc.br/js/shepherd.js]]
* ChartJS: Esta biblioteca é usada para criação de diversos tipos de gráficos dinâmicos em HTML5 utilizando canvas. [[http://www.chartjs.org/| Documentação]] [[http://relle.ufsc.br/js/Chart.js| Chart.js]]
* Biblioteca mlens[[http://mlens.musings.it/]]: Ampliação de imagens Código: [[http://relle.ufsc.br/js/lens.js]]
* Biblioteca ZoomJS [[https://github.com/marcaube/bootstrap-magnify]]: Ampliação de imagens Código: [[http://relle.ufsc.br/js/zoom.js]]
* Biblioteca RoundSlider [[http://roundsliderui.com/]]
http://relle.ufsc.br/js/
Como exemplo, observe o código abaixo, ele deve estar no arquivo exp_script.js.
$.getScript('http://relle.ufsc.br/js/Chart.js', function () {
// Ajustar parâmetros necessários, etc...
});
===== pt.html =====
Este arquivo é carregado quando o usuário tem acesso ao experimento. Somente é obrigatório manter a div DivExp, o restante fica a critério de cada desenvolvedor.
Nome do Experimento
===== en.html =====
Este arquivo possui as mesmas características do pt.htlm, diferenciando-se do conteúdo para o usuário, que por sua vez deve estar em inglês
===== exp_style.css =====
É usado para definir como serão exibidos os elementos contidos no código de uma página da internet.
h1{
text-align: center;
padding-bottom: 20px;
}
#cam{
margin-top:7%;
}
// Insira aqui quantas regras css forem necessárias.
===== exp_script.js =====
Este é um template para aplicações de laboratório escritas em node.js.
var rpi_server = "http://painelcc1.relle.ufsc.br"; // URL para conexão com o servidor do experimento
$(function () {
$.getScript(rpi_server + '/socket.io/socket.io.js', function () {
socket = io.connect(rpi_server);
socket.emit('new connection', {pass: $("#pass").html()});
socket.on('new message', function (data) {
console.log(data);
});
socket.on('data received', function (data) {
});
$.getScript('http://relle.ufsc.br/exp_data/{ID}/welcome.js', function () {
$('#return').append('');
var shepherd = setupShepherd();
$('#btnIntro').on('click', function (event) {
event.preventDefault();
shepherd.start();
});
});
});
});
function report(id) {
}
===== Adicionando tutoriais =====
Em alguns casos pode ser necessário mostrar ao usuário como usar a interface de seu experimento. A biblioteca [[http://github.hubspot.com/shepherd/docs/welcome/|Shepherd]] permite criar guias que indicam o elemento da página com texto explicativo associado. Além disso, é possível inserir código javascript para serem chamados durante a transição entre uma mensagem e outra. \\
O pacote de arquivos traz um template para configuração dos guias no arquivo welcome.js. Este arquivo deve estar na pasta do seu experimento **(/exp_data/{ID})** e é carregado pelo arquivo exp_script.js (ver linhas 21 a 30).
\\
Os tutoriais dependem de um arquivo CSS. A seguinte linha de código deve ser incluída na primeira linha do arquivo exp_script.js ou também adicionado outro arquivo equivalente customizado.
$('head').append('');
var setupShepherd = function () {
var shepherd = new Shepherd.Tour({
defaults: {
classes: 'shepherd-element shepherd-open shepherd-theme-arrows',
showCancelLink: true,
scrollTo: true
}
});
shepherd.on('cancel', function () {
// função chamada ao cancelar ou sair do tutorial
});
shepherd.on('start', function () {
// função chamada ao iniciar o tutorial
});
// Primeira mensagem do tutorial
shepherd.addStep('shep_intro', {
text: [lang.intro],
classes: 'shepherd shepherd-open shepherd-theme-arrows shepherd-transparent-text',
buttons: [
{
text: lang.leave,
classes: 'shepherd-button-secondary',
action: function () {
// Função chamada ao clicar no primeiro botão.
// Se necessário, escrever seu código aqui
shepherd.cancel();
}
}, {
text: lang.next,
action: function () {
// Função chamada ao clicar no segundo botão.
// Se necessário, escrever seu código aqui
shepherd.next();
},
classes: 'shepherd-button-example-primary'
}
]
});
// Tour no meio
shepherd.addStep('shep_cam', {
text: [lang.introcamera],
attachTo: 'img.cam center', // A primeira string indica o elemento focado, isto é, uma tag img com classe cam. A string após o espaço indica a posição da mensagem será no centro deste elemento
// Sem este campo attachTo, a mensagem aparecerá no meio da página
classes: 'shepherd shepherd-open shepherd-theme-arrows shepherd-transparent-text',
buttons: [
{
text: lang.previous,
classes: 'shepherd-button-secondary',
action: function () {
shepherd.back();
}
}, {
text: lang.next,
action: function () {
shepherd.next();
},
classes: 'shepherd-button-example-primary'
}
]
});
shepherd.addStep('shep_report', {
text: [lang.report],
classes: 'shepherd shepherd-open shepherd-theme-arrows shepherd-transparent-text',
buttons: [
{
text: lang.previous,
classes: 'shepherd-button-secondary',
action: function () {
shepherd.back();
}
}, {
text: lang.done,
action: function () {
shepherd.cancel();
},
classes: 'shepherd-button-example-primary'
}
]
});
return shepherd;
};
Para configurações adicionais ou customização pode ser consultada documentação da biblioteca Shepherd e seguir as instruções lá presentes.