braziljs/conf-boilerplate — pull request #85 by felquis (2013-12-03 14:01:23+00:00)
Title: Plugins test

Pessoal, fiz um teste com o objetivo de desvincular algumas áreas do core do CB, intitulando-os como plugins.

Isso é um Work in progress, mas acho que já posso expor para vocês darem ideias.

Basicamente, os plugins ficariam armazenados na pasta `src/partials/plugins/{nome-do-plugin}/` com a seguinte estrutura:
```
{nome-do-plugin}/
> less/
> js/
data.js
index.html.eco
```

### Onde:
* **index.html.eco** é o template do plugin que será compilado, onde o objeto `@plugin` tem acesso as informações deste plugin especificamente.
* **data.js** é os dados que o plugin irá consumir no template e é opcional, a omissão deste arquivo não gera um erro, os templates tem acesso aos dados contidos nesse arquivo e nos dados contidos no `docpad.js`
* **less/** é a pasta onde fica algum estilo necessário para o plugin funcionar, não implementei isso, mas o ideal seria que os arquivos less contidos nessa pasta fossem compilados junto ao `main.css.less` do CB em `src/documents/{nome-do-tema}/enfim-css-default`
* **js** é a pasta onde fica algum JavaScript necessário para o plugin funcionar, não implementei isso, mas o ideal seria que os JS contidos nessa pasta fossem compilados junto a um JS default da página.

Os plugins seriam chamados no `docpad.js` em `sections`, usando a nomenclatura `plugins:{nome-do-plugin}` ficando assim:
```js
sections: [
'about',
'plugins:location',
'speakers',
'schedule',
'plugins:sponsors',
'plugins:partners'
// 'contact'
],
```

Atualmente os índices que não tem `plugins:` carregam um arquivo com o mesmo nome na pasta `src/partials/section` se o template de um plugin ou section não é encontrado um 'erro' silencioso acontece.

Para lincar um plugin no menu, basta colocar no objeto `labels` assim:
```
labels: {
'plugins:location': "Location",
about: "About",
speakers: "Speakers",
schedule: "Schedule",
'plugins:sponsors': "Sponsors",
'plugins:partners': "Partners",
contact: "Contact"
},
```

PS: Atualmente o jeito que esta empregado sections e labels, é ruim como discutimos o hangout, durante meus testes pensei em algumas alternativas que seriam mais flexíveis, mas só pra informar... depois faço outro pull-request

## Notas
Os plugins ainda não estão totalmente desvinculados do core do CB, por exemplo em `sponsors` é usado `src="<%= @getTheme() %>/img/your-logo.jpg"` onde `@getTheme` retorna um path do tema `yellow-swan` e a imagem de um sponsor deveria ser algo do plugin e não do tema. Talvez junto as pastas `less` e `js` deveria ter uma `img` onde as imagens fossem também transferidas para um lugar onde tem todas as imagens do CB, e claro separada por pasta, por exemplo `out/plugins/{nome-do-plugin}/`

Outra coisa, é se um plugins for ser usado mais de uma vez. Por exemplo, supomos que exista um plugin `cb-awesome-text` que serve para por uma sessão de texto em qualquer luga do fluxo de conteúdo da página. Se a pessoa quiser usar isso como `about` e la no footer talvez como uma nota ou algo do tipo... isso atualmente pela estrutura que o CB esta é um problema, mas é algo a se pensar.

# Fora o plugins

Fiz um trabalho de desvincular o estilo que tinha no core como comentado pelo Bernard, por exemplo removi o `.wapper` que tinha em `/src/layouts/default.html.eco` e agora o `.wrapper` é usado individualmente em cada plugin ou section, ou seja o desenvolvedor escolhe a posição que fica o conteúdo.

Também removi a tag `

` que era colocada como wrapper de todas os templates `section`, continua um wrapper porém agora é uma `

`, acredito que deixar essa opção para o desenvolvedor do plugin é uma forma de não engessa-lo.

## É isso
Transformei algumas sections em plugins como spondors, location, partners a caráter de exemplificar.

Se não fui claro em alguma parte sobre os plugins, me perguntem... eeee misturei 4 e 2 espaços na identação... depois arrumo isso.