toggle_element_visibility.js 2.29 KB
Newer Older
1
(function(define) {
2 3
    'use strict';

4
    define(['jquery', 'logger', 'moment'],
5 6
        function($, Logger, moment) {
            return function() {
7
                // define variables for code legibility
Eric Fischer committed
8
                var $toggleActionElements = $('.toggle-visibility-button');
9

10
                var updateToggleActionText = function(elementIsHidden, actionElement) {
11 12 13 14 15
                    var show_text = actionElement.data('show'),
                        hide_text = actionElement.data('hide'),
                        first_hidden_update = $('.old-updates .toggle-visibility-button').first();

                    actionElement.attr('aria-expanded', elementIsHidden);
16

17
                    if (elementIsHidden) {
18 19 20 21
                        if (hide_text) {
                            actionElement.html(actionElement.data('hide'));
                        } else {
                            actionElement.hide();
22
                            first_hidden_update.focus();
23 24 25 26 27 28 29 30
                        }
                    } else {
                        if (show_text) {
                            actionElement.html(actionElement.data('show'));
                        }
                    }
                };

Eric Fischer committed
31 32 33
                $.each($toggleActionElements, function(i, elem) {
                    var $toggleActionElement = $(elem),
                        toggleTargetElement = $toggleActionElement.siblings('.toggle-visibility-element'),
34 35
                        elementIsHidden = toggleTargetElement.is(':visible'),
                        date = toggleTargetElement.siblings('.date').text();
36

Eric Fischer committed
37
                    updateToggleActionText(elementIsHidden, $toggleActionElement);
38

Eric Fischer committed
39
                    $toggleActionElement.on('click', function(event) {
40 41
                        event.preventDefault();
                        toggleTargetElement.toggleClass('hidden');
Eric Fischer committed
42
                        updateToggleActionText(!toggleTargetElement.hasClass('hidden'), $toggleActionElement);
43 44 45 46
                        Logger.log('edx.course.home.course_update.toggled', {
                            action: elementIsHidden ? 'hide' : 'show',
                            publish_date: moment(date, 'MMM DD, YYYY').format()
                        });
47 48 49 50
                    });
                });
            };
        });
Eric Fischer committed
51
}(define || RequireJS.define));