Nota
Esta seção discute a adição de funcionalidade de pré-visualização a plugins que criam impressões de saída/HTML. Recomenda-se que você leia a seção separada sobre pré-visualizações de gráficos, antes desta seção.
Criar uma pré-visualização da saída HTML é um procedimento quase idêntico ao de criar uma pré-visualização de um gráfico. Nesse caso, basta garantir que o comando preview() gere os comandos relevantes rk.print()/rk.results(). No entanto, geralmente é uma boa prática omitir as declarações de cabeçalho na pré-visualização. Aqui está um exemplo simplificado:
<!-- In the plugin's XML file -->>
<dialog label="Importar dados CSV" >
<browser id="file" type="file" label="Nome do arquivo"/>
<!-- [...] -->>
<preview id="preview" mode="output"/>
</dialog>
>
Observe a especificação de mode="output" no elemento <preview>.
// No arquivo JS do plugin
function preview () {
// gera o código usado para a pré-visualização
printout (true);
}
function printout (is_preview) {
// somente gera um header se is_preview==false
if (!is_preview) {
new Header ("Esta é uma descrição").print ();
}
echo ('rk.print (result)');
}
Nota
Esta seção discute a adição de funcionalidade de pré-visualização a plugins que criam (ou importam) dados. Recomenda-se que você leia a seção separada sobre pré-visualizações de gráficos antes desta seção.
Criar uma pré-visualização de dados importados (qualquer tipo de dado que o comando rk.edit() possa manipular) é muito semelhante a criar uma pré-visualização de gráfico. O exemplo simplificado a seguir deve ajudar a ilustrar como criar uma pré-visualização de dados:
<!-- No arquivo XML do plugin -->>
<dialog label="Importar dados CSV" >
<browser id="file" type="file" label="Nome do arquivo"/>
<!-- [...] -->>
<preview id="preview" active="true" mode="data"/>
</dialog>
>
Observe que o elemento <preview> especifica mode="data" desta vez. active="true" simplesmente torna a pré-visualização ativa por padrão.
// No arquivo JS do plugin
function preview () {
// gera o código usado para a pré-visualização
calculate (true);
}
function calculate (is_preview) {
echo ('imported <- read.csv (file="' + getString ("file") /* [+ options] */);
if (is_preview) {
echo ('preview_data <- imported\n');
} else {
echo ('.GlobalEnv$' + getString ("name") + ' >- imported\n');
}
}
function printout () {
// [...]
}
Novamente, a função preview() gera quase o mesmo código R que a função calculate(), então criamos uma função auxiliar doCalculate() para isolar as partes comuns. O mais importante a observar é que você precisará atribuir os dados importados a um objeto chamado preview_data (dentro do ambiente local atual). Todo o resto acontecerá automaticamente (grosso modo, o RKWard chamará rk.edit(preview_data), dentro de uma chamada para .rk.with.window.hints()).
Nota
Embora as pré-visualizações sejam um ótimo recurso, elas consomem recursos. No caso de pré-visualizações de dados, pode haver situações em que elas causem problemas de desempenho significativos. Isso pode ocorrer ao importar conjuntos de dados enormes (que são grandes demais para serem abertos para edição na janela do editor do RKWard), mas também conjuntos de dados "normais" podem ser importados incorretamente, criando um número enorme de linhas ou colunas. É altamente recomendável limitar o parâmetro preview_data a uma dimensão que forneça uma pré-visualização útil, sem o risco de criar problemas de desempenho perceptíveis (por exemplo, 50 linhas por 50 colunas devem ser mais do que suficientes na maioria dos casos).
O elemento <preview> pode ser usado para criar pré-visualizações para qualquer tipo de janela de "documento" que possa ser anexada à área de trabalho do RKWard. Além de plots e data windows, isso inclui arquivos HTML, scripts R e janelas de resumo de objetos. Para estes últimos, você precisará usar <preview mode="custom"> .
Se você leu as seções que descrevem a pré-visualização de gráficos e a pré-visualização de dados, você já deve ter uma ideia geral do procedimento, mas as pré-visualizações "personalizadas" exigem um pouco mais de trabalho manual nos bastidores. A função R mais importante a ser analisada é rk.assign.preview.data(), neste exemplo. A seguinte listagem resumida mostra como o seu código R (pré-visualização) gerado poderia ser para um plugin que cria um arquivo de texto como saída:
## A ser gerado na seção de código do preview() de um plugin
pdata <- rk.get.preview.data("ALGUMAID")
if (is.null (pdata)) {
outfile <- rk.get.tempfile.name(prefix="preview", extension=".txt")
pdata <- list(filename=outfile, on.delete=function (id) {
unlink(rk.get.preview.data(id)$filename)
})
rk.assign.preview.data("ALGUMAID", pdata)
}
try ({
cat ("Isto é um teste", pdata$filename)
rk.edit.files(file=pdata$filename)
})
Aqui você deve obter o valor ALGUMAID da propriedade id do elemento <preview>, ou seja, usando getString ("preview.id") no arquivo .js do plugin.