Add plugin hooks for assets

This commit is contained in:
Frederic Guillot 2015-09-21 21:07:15 -04:00
parent 2cff1d6a37
commit 78ecdc05c3
4 changed files with 87 additions and 1 deletions

View File

@ -10,6 +10,26 @@ namespace Helper;
*/
class Hook extends \Core\Base
{
/**
* Add assets JS or CSS
*
* @access public
* @param string $type
* @param string $hook
* @param array $variables
* @return string
*/
public function asset($type, $hook)
{
$buffer = '';
foreach ($this->hook->getListeners($hook) as $file) {
$buffer .= $this->helper->asset->$type($file);
}
return $buffer;
}
/**
* Render all attached hooks
*

View File

@ -21,6 +21,9 @@
<?= $this->asset->css('assets/css/print.css', true, 'print') ?>
<?= $this->asset->customCss() ?>
<?= $this->hook->asset('css', 'template:layout:css') ?>
<?= $this->hook->asset('js', 'template:layout:js') ?>
<link rel="icon" type="image/png" href="<?= $this->url->dir() ?>assets/img/favicon.png">
<link rel="apple-touch-icon" href="<?= $this->url->dir() ?>assets/img/touch-icon-iphone.png">
<link rel="apple-touch-icon" sizes="72x72" href="<?= $this->url->dir() ?>assets/img/touch-icon-ipad.png">

View File

@ -154,6 +154,34 @@ List of merge hooks:
- `$start` Calendar start date (string, ISO-8601 format)
- `$end` Calendar end date (string, ISO-8601 format)
Asset Hooks
-----------
Asset hooks can be used to add easily a new stylesheet or a new javascript file in the layout. You can use this feature to create a theme and override all Kanboard default styles.
Example to add a new stylesheet:
```php
<?php
namespace Plugin\Css;
use Core\Plugin\Base;
class Plugin extends Base
{
public function initialize()
{
$this->hook->on('template:layout:css', 'plugins/Css/skin.css');
}
}
```
List of asset Hooks:
- `template:layout:css`
- `template:layout:js`
Template hooks
--------------
@ -338,3 +366,4 @@ Examples of plugins
- [User timetable](https://github.com/kanboard/plugin-timetable)
- [Subtask Forecast](https://github.com/kanboard/plugin-subtask-forecast)
- [Theme plugin sample](https://github.com/kanboard/plugin-example-theme)
- [CSS plugin sample](https://github.com/kanboard/plugin-example-css)

View File

@ -37,4 +37,38 @@ class HookHelperTest extends Base
$h->attach('test', 'tpl2');
$this->assertEquals('tpl1_contenttpl2_content', $h->render('test'));
}
}
public function testAssetHooks()
{
$this->container['helper']->asset = $this
->getMockBuilder('\Helper\Asset')
->setConstructorArgs(array($this->container))
->setMethods(array('css', 'js'))
->getMock();
$this->container['helper']
->asset
->expects($this->at(0))
->method('css')
->with(
$this->equalTo('skin.css')
)
->will($this->returnValue('<link rel="stylesheet" href="skin.css"></link>'));
$this->container['helper']
->asset
->expects($this->at(1))
->method('js')
->with(
$this->equalTo('skin.js')
)
->will($this->returnValue('<script src="skin.js"></script>'));
$h = new Hook($this->container);
$h->attach('test1', 'skin.css');
$h->attach('test2', 'skin.js');
$this->assertContains('<link rel="stylesheet" href="skin.css"></link>', $h->asset('css', 'test1'));
$this->assertContains('<script src="skin.js"></script>', $h->asset('js', 'test2'));
}
}