HtmlField   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 6
c 2
b 0
f 0
lcom 0
cbo 5
dl 0
loc 72
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A handles() 0 3 1
A inflate() 0 3 1
A render() 0 10 3
B headElements() 0 32 1
1
<?php
2
namespace rtens\domin\delivery\web\fields;
3
4
use rtens\domin\Parameter;
5
use rtens\domin\parameters\Html;
6
use rtens\domin\delivery\web\Element;
7
use rtens\domin\delivery\web\HeadElements;
8
use rtens\domin\delivery\web\WebField;
9
use watoki\reflect\type\ClassType;
10
11
class HtmlField implements WebField {
12
13
    /**
14
     * @param Parameter $parameter
15
     * @return bool
16
     */
17
    public function handles(Parameter $parameter) {
18
        return $parameter->getType() == new ClassType(Html::class);
19
    }
20
21
    /**
22
     * @param Parameter $parameter
23
     * @param string $serialized
24
     * @return Html
25
     */
26
    public function inflate(Parameter $parameter, $serialized) {
27
        return new Html($serialized);
28
    }
29
30
    /**
31
     * @param Parameter $parameter
32
     * @param Html|null $value
33
     * @return string
34
     */
35
    public function render(Parameter $parameter, $value) {
36
        return (string)new Element('textarea', array_merge([
37
            'name' => $parameter->getName(),
38
            'class' => 'summernote',
39
        ], $parameter->isRequired() ? [
40
            'required' => 'required'
41
        ] : []), [
42
            $value ? $value->getContent() : null
43
        ]);
44
    }
45
46
    /**
47
     * @param Parameter $parameter
48
     * @return array|Element[]
49
     */
50
    public function headElements(Parameter $parameter) {
51
        return [
52
            HeadElements::jquery(),
53
            HeadElements::bootstrap(),
54
            HeadElements::bootstrapJs(),
55
            HeadElements::fontAwesome(),
56
            HeadElements::style('//cdnjs.cloudflare.com/ajax/libs/summernote/0.6.10/summernote.min.css'),
57
            HeadElements::script('//cdnjs.cloudflare.com/ajax/libs/summernote/0.6.10/summernote.min.js'),
58
            new Element('script', [], ["
59
                $(function() {
60
                    $('.summernote').summernote({
61
                        onKeyup: function(e) {
62
                            $(this).val($(this).code());
63
                        }
64
                    });
65
                    $('.summernote').on('invalid', function (e) {
66
                        var editor = $(e.target).siblings('.note-editor');
67
                        editor.popover({
68
                            content: 'Please fill out this field.',
69
                            placement: 'bottom',
70
                            trigger: 'manual'
71
                        });
72
                        editor.popover('show');
73
74
                        editor.click(function () {
75
                            editor.popover('hide');
76
                        });
77
                    });
78
                });
79
            "])
80
        ];
81
    }
82
}