summaryrefslogtreecommitdiffstats
path: root/core/js/apps.js
blob: 5f221bb9826a045b294741ffa057ddc7d1bb15f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
 * ownCloud - core
 *
 * This file is licensed under the Affero General Public License version 3 or
 * later. See the COPYING file.
 *
 * @author Bernhard Posselt <dev@bernhard-posselt.com>
 * @copyright Bernhard Posselt 2014
 */

(function (document, $, exports) {

    'use strict';

    var dynamicSlideToggleEnabled = false;

    exports.Apps = {
        enableDynamicSlideToggle: function () {
            dynamicSlideToggleEnabled = true;
        }
    };

    /**
     * Provides a way to slide down a target area through a button and slide it
     * up if the user clicks somewhere else. Used for the news app settings and
     * add new field.
     *
     * Usage:
     * <button data-apps-slide-toggle=".slide-area">slide</button>
     * <div class=".slide-area" class="hidden">I'm sliding up</div>
     */
    var registerAppsSlideToggle = function () {
        var buttons = $('[data-apps-slide-toggle]');

        $(document).click(function (event) {

            if (dynamicSlideToggleEnabled) {
                buttons = $('[data-apps-slide-toggle]');
            }

            buttons.each(function (index, button) {

                var areaSelector = $(button).data('apps-slide-toggle');
                var area = $(areaSelector);

                // do nothing if the area is animated
                if (!area.is(':animated')) {

                    // button toggles the area
                    if (button === event.target) {
                        if (area.is(':visible')) {
                            area.slideUp();
                        } else {
                            area.slideDown();
                        }

                    // all other areas that have not been clicked but are open
                    // should be slid up
                    } else {
                        var closest = $(event.target).closest(areaSelector);
                        if (area.is(':visible') && closest[0] !== area[0]) {
                            area.slideUp();
                        }
                    }
                }
            });

        });
    };


    $(document).ready(function () {
        registerAppsSlideToggle();
    });

}(document, jQuery, OC));