123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /**
- * 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;
- }
- };
- /**
- * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings
- *
- * @param {Object} [$el] sidebar element to show, defaults to $('#app-sidebar')
- */
- exports.Apps.showAppSidebar = function($el) {
- var $appSidebar = $el || $('#app-sidebar');
- $appSidebar.removeClass('disappear')
- .show('slide', { direction: 'right' }, 200);
- $('#app-content').addClass('with-app-sidebar', 200).trigger(new $.Event('appresized'));
- };
- /**
- * Shows the #app-sidebar and removes .with-app-sidebar from subsequent
- * siblings
- *
- * @param {Object} [$el] sidebar element to hide, defaults to $('#app-sidebar')
- */
- exports.Apps.hideAppSidebar = function($el) {
- var $appSidebar = $el || $('#app-sidebar');
- $appSidebar.hide('slide', { direction: 'right' }, 100,
- function() {
- $appSidebar.addClass('disappear');
- });
- $('#app-content').removeClass('with-app-sidebar', 100).trigger(new $.Event('appresized'));
- };
- /**
- * 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]');
- if (buttons.length === 0) {
- $('#app-navigation').addClass('without-app-settings');
- }
- $(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);
- function hideArea() {
- area.slideUp(OC.menuSpeed*4, function() {
- area.trigger(new $.Event('hide'));
- });
- }
- function showArea() {
- area.slideDown(OC.menuSpeed*4, function() {
- area.trigger(new $.Event('show'));
- });
- var input = $(areaSelector + ' [autofocus]');
- if (input.length === 1) {
- input.focus();
- }
- }
- // do nothing if the area is animated
- if (!area.is(':animated')) {
- // button toggles the area
- if ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {
- if (area.is(':visible')) {
- hideArea();
- } else {
- showArea();
- }
- // 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]) {
- hideArea();
- }
- }
- }
- });
- });
- };
- $(document).ready(function () {
- registerAppsSlideToggle();
- });
- }(document, jQuery, OC));
|