SlickWidget::run()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 3
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 1
nc 1
nop 0
crap 1
1
<?php
2
3
namespace dev7ch\slick;
4
5
use dev7ch\slick\assets\PicturefillAsset;
6
use dev7ch\slick\assets\ResourcesAsset;
7
use dev7ch\slick\assets\SlickAsset;
8
9 1
\Yii::setAlias('@slick', '@bower/slick-carousel');
10 1
\Yii::setAlias('@resources', dirname(__DIR__).'/src/resources');
11
12
class SlickWidget extends \luya\base\Widget
13
{
14
    public $baseUrl;
15
    public $images;
16
    public $slickConfig = [];
17
    public $slickConfigWidget;
18
    public $slickConfigFile;
19
20
21 1
    private function slickConfigFile() {
22
23 1
        $file = dirname(__DIR__, 3) . '/' . $this->slickConfigFile;
24 1
        $type = pathinfo($file);
25
26 1
        if ($type['extension'] == 'php') {
27 1
            $config = include $file;
28
29 1
        } elseif ($type['extension'] == 'json') {
30 1
            $json = file_get_contents($file);
31 1
            $config = json_decode($json, true);
32
        }
33
34
        else {
35
36
            throw new \luya\Exception('The file type .'. $type['extension'] . ' is currently not supported. Please use .php or .json files array for custom configuration of Slick.js.');
37
        }
38
39 1
        return $this->slickConfigFile = $config;
40
    }
41
42
43 4
    public function init()
44
    {
45 4
        PicturefillAsset::register($this->getView());
46 4
        SlickAsset::register($this->getView());
47 4
        ResourcesAsset::register($this->getView());
48
49 4
        if ($this->slickConfigFile != null) {
50
51 1
            $this->slickConfig = $this->slickConfigFile();
52
53
        } else {
54
55 4
            $this->slickConfig = $this->slickConfigWidget;
56
57
        }
58
59 4
        $this->view->registerJs(
60
            "var slickSlider = $('.slick-slider').slick({"
61 4
                .implode(', ',
62 4
                    array_map(
63 4
                        function ($config, $option) {
64 4
                            return sprintf('%s:%s', $option, $config);
65 4
                        },
66 4
                        $this->slickConfig, array_keys($this->slickConfig)
67
                    )
68
                ).
69 4
            '});',
70 4
            \luya\web\View::POS_READY,
71 4
            'slickSlider'
72
        );
73
74 4
        parent::init();
75 4
    }
76
77 4
    public function run()
78
    {
79 4
        return $this->render('SlickSlider', ['widget' => $this]);
80
    }
81
}
82