Passed
Branch master (32b4c5)
by Askupa
01:33
created

src/js/components/top-bar.js   A

Complexity

Total Complexity 14
Complexity/F 1.4

Size

Lines of Code 78
Function Count 10

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
c 1
b 0
f 0
nc 1
dl 0
loc 78
rs 10
wmc 14
mnd 2
bc 12
fnc 10
bpm 1.2
cpm 1.4
noi 6
1
Mivhak.component('top-bar', {
2
    template: '<div class="mivhak-top-bar"><div class="mivhak-nav-tabs"></div><div class="mivhak-controls"></div><div class="mivhak-line"></div></div>',
3
    props: {
4
        mivhakInstance: null,
5
        navTabs: [],
6
        controls: [],
7
        line: null
8
    },
9
    created: function() {
10
        this.line = this.$el.find('.mivhak-line');
11
        this.createTabNav();
12
        if(this.mivhakInstance.options.runnable) this.createPlayButton();
13
        this.createCogButton();
14
    },
15
    methods: {
16
        activateNavTab: function(index) {
17
            var button = this.navTabs[index];
18
            // Deactivate all tabs and activate this tab
19
            $.each(this.navTabs, function(i,navTab){navTab.deactivate();});
20
            button.activate();
21
22
            // Position the line
23
            this.moveLine(button.$el);
24
        },
25
        moveLine: function($el) {
26
            if(typeof $el === 'undefined') {
27
                this.line.removeClass('mivhak-visible');
28
                return;
29
            }
30
            this.line.width($el.width());
31
            this.line.css({left:$el.position().left + ($el.outerWidth() - $el.width())/2});
32
            this.line.addClass('mivhak-visible');
33
        },
34
        createTabNav: function() {
35
            var source, i, pos = 0;
36
            for(i = 0; i < this.mivhakInstance.resources.count(); i++)
37
            {
38
                source = this.mivhakInstance.resources.get(i);
39
                if(source.visible) this.createNavTabButton(pos++, source.lang);
40
            }
41
        },
42
        createNavTabButton: function(i, lang) {
43
            var $this = this,
44
                button = Mivhak.render('top-bar-button',{
45
                text: lang,
46
                onClick: function() {
47
                    $this.mivhakInstance.callMethod('showTab',i);
48
                }
49
            });
50
            this.navTabs.push(button);
51
            this.$el.find('.mivhak-nav-tabs').append(button.$el);
52
        },
53
        createPlayButton: function() {
54
            var $this = this;
55
            var playBtn = Mivhak.render('top-bar-button',{
56
                icon: 'play',
57
                onClick: function() {
58
                    $this.mivhakInstance.preview.show();
59
                    $this.moveLine();
60
                }
61
            });
62
            this.controls.push(playBtn);
63
            this.$el.find('.mivhak-controls').append(playBtn.$el);
64
        },
65
        createCogButton: function() {
66
            var cogBtn = Mivhak.render('top-bar-button',{
67
                icon: 'cog',
68
                mivhakInstance: this.mivhakInstance,
69
                dropdown: Mivhak.render('dropdown',{
70
                    mivhakInstance: this.mivhakInstance,
71
                    items: this.mivhakInstance.options.buttons
72
                })
73
            });
74
            this.controls.push(cogBtn);
75
            this.$el.find('.mivhak-controls').append(cogBtn.$el);
76
        }
77
    }
78
});