Toda estrutura de código-fonte aberto tem seus próprios métodos de extensão de funcionalidade; alguns tornam a extensão incrivelmente fácil e outros… nem tanto. Na maioria das vezes, isso se resume a quão bem a estrutura está documentada. O Phabricator fez um trabalho incrível ao tornar as classes necessárias extensíveis, mas é justo dizer que seria ótimo se a estrutura tivesse uma documentação um pouco melhor (PRs bem-vindos, aposto!).
Ao criar minha própria extensão, precisei adicionar arquivos JavaScript e CSS à página. Infelizmente, o Adição de novos arquivos CSS e JS a documentação afirma que “Este documento é destinado aos desenvolvedores e colaboradores do Phabricator. Este processo não funcionará corretamente para códigos, plug-ins ou extensões de terceiros.” Descobri que isso não é verdade. Veja a seguir como adicionei ativos JavaScript e CSS à minha extensão.
Coloque os arquivos de ativos em seu diretório de extensão
Cada extensão que crio é colocada em seu próprio diretório com todas as dependências dentro desse diretório:
- extensões
- my-extension
- my-extension.php
- my-extension.css
- my-extension.js
- my-extension
Se desejar, o senhor pode colocar os arquivos CSS e JS em seus próprios diretórios. Cada arquivo CSS e JS deve ter um @provides
pelo qual o senhor se referirá a ele quando for necessário:
/** * @provides my-extension-js */
Optei por acrescentar -js
e -css
ao nome de referência para facilitar a manutenção.
Use require_celerity_resource
para solicitar o arquivo
Na função que representa a visualização na qual o senhor gostaria que os ativos fossem injetados, você usará require_celerity_resource
com a palavra @provides
nome do ativo:
protected function renderLoginForm(AphrontRequest $request, $mode) { // Add CSS and JS resources to the page require_celerity_resource('bmo-auth-css'); require_celerity_resource('bmo-auth-js'); // .... }
Durante a construção, mova os locais dos ativos
O Phabricator espera que todos os arquivos JavaScript e CSS estejam em sua pasta /webroot/rsrc/js/
e /webroot/rsrc/css/
portanto, o senhor precisará mover seus ativos de extensão durante o processo de compilação. Adicionei o seguinte ao meu Dockerfile
para fazer exatamente isso:
# Move static resources to phabricator, add files to celerity map array COPY auth/my-extension.css /app/phabricator/webroot/rsrc/css/my-extension.css COPY auth/my-extension.js /app/phabricator/webroot/rsrc/js/my-extension.js
Com seus arquivos JavaScript e CSS nesse local, o require_celerity_resource
poderá encontrar seus ativos pelo nome.
Atualização do mapa do Celerity
Para remover o cache e indexar seus arquivos, o senhor precisará executar o seguinte comando:
phabricator/ $ ./bin/celerity map
Esse é o processo simples, mas não muito bem documentado, para adicionar seus próprios ativos CSS e JavaScript ao Phabricator!