Completed
Branch master (80c287)
by Lukáš
07:04 queued 05:15
created

JSBlockExtension::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Fousky\JSBlockBundle\Twig;
4
5
use Fousky\JSBlockBundle\Twig\TokenParser\JSTokenParser;
6
7
/**
8
 * @author Lukáš Brzák <[email protected]>
9
 */
10
class JSBlockExtension extends \Twig_Extension
11
{
12
    /** @var array $collected */
13
    protected $collected = [];
14
15
    /** @var bool $lock */
16
    protected $lock = false;
17
18
    /**
19
     * Returns the token parser instance to add to the existing list.
20
     *
21
     * @return array An array of Twig_TokenParser instances
22
     */
23
    public function getTokenParsers()
24
    {
25
        return [
26
            new JSTokenParser(), // {% jsblock %}
27
        ];
28
    }
29
30
    /**
31
     * Render collected javascripts (should be before tag </body>).
32
     *
33
     * {% jsblock 'render' %}
34
     *
35
     * @return string
36
     */
37
    public function render()
38
    {
39
        return implode("\n    ", $this->collected)."\n";
40
    }
41
42
    /**
43
     * Start collecting of some javascripts.
44
     *
45
     * {% jsblock 'start' %}
46
     *
47
     * @throws \BadFunctionCallException
48
     */
49
    public function start()
50
    {
51
        if ($this->lock) {
52
            throw new \BadFunctionCallException('Cannot use {% jsblock \'start\' %} inside multiple nesting level.');
53
        }
54
55
        $this->lock = true;
56
        \ob_start();
57
    }
58
59
    /**
60
     * Finish collecting of javascripts.
61
     *
62
     * {% jsblock 'stop' %}
63
     */
64
    public function stop()
65
    {
66
        $data = \ob_get_clean();
67
        $this->lock = false;
68
        $this->collected[] = $data;
69
    }
70
}
71