Completed
Pull Request — master (#3387)
by Edwin
02:58
created

Expand::setupScript()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 26
rs 9.504
c 0
b 0
f 0
1
<?php
2
3
namespace Encore\Admin\Grid\Displayers;
4
5
use Encore\Admin\Admin;
6
7
class Expand extends AbstractDisplayer
8
{
9
    public function display($callback = null, $def = '')
10
    {
11
        $callback = $callback->bindTo($this->row);
12
13
        $html = call_user_func_array($callback, [$this->row]);
14
15
        $this->setupStyle();
16
        $this->setupScript();
17
18
        $rowKey = $this->getKey();
19
        $key = uniqid();
20
        $val = $this->value ?: $def;
21
22
        return <<<EOT
23
<a href="javascript:;" class="btn btn-xs btn-default grid-expand collapsed" data-inserted="0" data-key="{$key}" data-row-key="{$rowKey}" data-parent="grid-collapse-group-{$rowKey}" data-toggle="collapse" data-target="#grid-collapse-{$key}">
24
   &nbsp;&nbsp;{$val}
25
</a>
26
<template class="grid-collapse-tpl-{$key}">
27
    <div id="grid-collapse-{$key}" class="collapse grid-collapse-group-{$rowKey}">
28
        <div  style="padding: 10px 10px 0 10px;">$html</div>
29
    </div>
30
</template>
31
EOT;
32
    }
33
34
    protected function setupScript()
35
    {
36
        $script = <<<'EOT'
37
38
$('.grid-expand').on('click', function () {
39
40
    var key = $(this).data('key');
41
    var rowkey = $(this).data('rowKey');
42
    
43
    $('.grid-expand:not(.collapsed)').each(function(){
44
        $(this).attr("id") == '#grid-collapse-' + key || $(this).addClass('collapsed');
45
    });
46
47
    if( ! $('#grid-collapse-' + key).length ) {
48
        var row = $(this).closest('tr');
49
        var html = $('template.grid-collapse-tpl-'+key).html();
50
51
        $('#grid-collapse-group-' + rowkey).length || row.after("<tr style='background-color: #ecf0f5;'><td id='grid-collapse-group-" + rowkey + "' colspan='"+(row.find('td').length)+"' style='padding:0 !important; border:0;'></td></tr>");
52
        
53
        $('#grid-collapse-group-' + rowkey).html(html);
54
55
    }
56
});
57
EOT;
58
        Admin::script($script);
59
    }
60
61
    protected function setupStyle()
62
    {
63
        $style = <<<STYLE
64
        .grid-expand:before{content:"\\f0d7";display: inline-block;font: normal normal normal 14px/1 FontAwesome;font-size: inherit;text-rendering: auto;-webkit-font-smoothing: antialiased;}
65
        .grid-expand.collapsed:before{content:"\\f0da";}
66
STYLE;
67
        Admin::style( $style );
68
    }
69
}
70