Completed
Pull Request — master (#3391)
by Edwin
02:48
created

Expand::setupStyle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 8
rs 10
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
        $key = $this->column->getName().'-'.$this->getKey();
19
        $rowKey = $this->getKey();
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
$('.grid-expand').on('click', function () {
38
    
39
    var key = $(this).data('key');
40
    var rowkey = $(this).data('rowKey');
41
    
42
    $('.grid-expand:not(.collapsed)').each(function(){
43
        $(this).attr("id") == '#grid-collapse-' + key || $(this).addClass('collapsed');
44
    });
45
    
46
    if( ! $('#grid-collapse-' + key).length ) {
47
        var row = $(this).closest('tr');
48
        var html = $('template.grid-collapse-tpl-'+key).html();
49
        $('#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>");
50
        $('#grid-collapse-group-' + rowkey).html(html);
51
    }
52
});
53
EOT;
54
        Admin::script($script);
55
    }
56
57
    protected function setupStyle()
58
    {
59
        $style = <<<STYLE
60
        .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;}
61
        .grid-expand.collapsed:before{content:"\\f0da";}
62
STYLE;
63
        Admin::style( $style );
64
    }
65
}
66