• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

divio / django-cms / #28111

29 Nov 2023 12:59PM UTC coverage: 76.775%. Remained the same
#28111

push

travis-ci

web-flow
Merge branch 'develop-4' into feat/modernize-django-update-ci

1042 of 1539 branches covered (0.0%)

2519 of 3281 relevant lines covered (76.78%)

32.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.33
/cms/static/cms/js/modules/cms.pagetree.dropdown.js
1
import $ from 'jquery';
2
import Class from 'classjs';
3

4
/**
5
 * Dropdowns in the pagetree.
6
 * Have to be delegated, since pagetree nodes can be
7
 * lazy loaded.
8
 *
9
 * @class PageTreeDropdowns
10
 * @namespace CMS
11
 */
12
var PageTreeDropdowns = new Class({
1✔
13
    options: {
14
        dropdownSelector: '.js-cms-pagetree-dropdown',
15
        triggerSelector: '.js-cms-pagetree-dropdown-trigger',
16
        menuSelector: '.js-cms-pagetree-dropdown-menu',
17
        openCls: 'cms-pagetree-dropdown-menu-open'
18
    },
19

20
    initialize: function initialize(options) {
21
        this.options = $.extend(true, {}, this.options, options);
12✔
22
        this.click = 'click.cms.pagetree.dropdown';
12✔
23

24
        this._setupUI();
12✔
25
        this._events();
12✔
26
    },
27

28
    /**
29
     * @method _setupUI
30
     * @private
31
     */
32
    _setupUI: function _setupUI() {
33
        this.ui = {
12✔
34
            container: this.options.container,
35
            document: $(document)
36
        };
37
    },
38

39
    /**
40
     * Event handlers.
41
     *
42
     * @method _events
43
     * @private
44
     */
45
    _events: function _events() {
46
        var that = this;
14✔
47

48
        // attach event to the trigger
49
        this.ui.container.on(this.click, this.options.triggerSelector, function(e) {
14✔
50
            e.preventDefault();
1✔
51
            e.stopImmediatePropagation();
1✔
52

53
            that._toggleDropdown(this);
1✔
54
        });
55

56
        // stop propagation on the element
57
        this.ui.container.on(this.click, that.options.menuSelector, function(e) {
14✔
58
            e.stopImmediatePropagation();
2✔
59
        });
60

61
        this.ui.container.on(this.click, that.options.menuSelector + ' a', function() {
14✔
62
            that.closeAllDropdowns();
1✔
63
        });
64

65
        this.ui.document.on(this.click, function() {
14✔
66
            that.closeAllDropdowns();
50✔
67
        });
68
    },
69

70
    /**
71
     * @method _toggleDropdown
72
     * @param {jQuery} trigger trigger clicked
73
     * @private
74
     * @returns {Boolean|void}
75
     */
76
    _toggleDropdown: function _toggleDropdown(trigger) {
77
        var dropdowns = $(this.options.dropdownSelector);
3✔
78
        var dropdown = $(trigger).closest(this.options.dropdownSelector);
3✔
79

80
        // cancel if opened tooltip is triggered again
81
        if (dropdown.hasClass(this.options.openCls)) {
3✔
82
            dropdowns.removeClass(this.options.openCls);
1✔
83
            return false;
1✔
84
        }
85

86
        // otherwise show the dropdown
87
        dropdowns.removeClass(this.options.openCls);
2✔
88
        dropdown.addClass(this.options.openCls);
2✔
89

90
        this._loadContent(dropdown);
2✔
91
    },
92

93
    /**
94
     * @method _loadContent
95
     * @private
96
     * @param {jQuery} dropdown
97
     * @returns {Boolean|$.Deferred} false if not lazy or already loaded or promise
98
     */
99
    _loadContent: function _loadContent(dropdown) {
100
        var data = dropdown.data();
2✔
101
        var LOADER_SHOW_TIMEOUT = 200;
2✔
102

103
        if (!data.lazyUrl || data.loaded) {
2!
104
            return false;
2✔
105
        }
106

107
        var loaderTimeout = setTimeout(function() {
×
108
            dropdown.find('.js-cms-pagetree-dropdown-loader').addClass('cms-loader');
×
109
        }, LOADER_SHOW_TIMEOUT);
110

111
        $.ajax({
×
112
            url: data.lazyUrl,
113
            data: data.lazyUrlData
114
        }).done(function(response) {
115
            dropdown.find('.js-cms-pagetree-dropdown-menu').html(response);
×
116
            dropdown.data('loaded', true);
×
117
            clearTimeout(loaderTimeout);
×
118
        });
119
    },
120

121
    /**
122
     * @method closeAllDropdowns
123
     * @public
124
     */
125
    closeAllDropdowns: function closeAllDropdowns() {
126
        $(this.options.dropdownSelector).removeClass(this.options.openCls);
50✔
127
    }
128
});
129

130
export default PageTreeDropdowns;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc