123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /*
- * Copyright (c) 2014
- *
- * @author Vincent Petry
- * @copyright 2014 Vincent Petry <pvince81@owncloud.com>
- *
- * This file is licensed under the Affero General Public License version 3
- * or later.
- *
- * See the COPYING-README file.
- *
- */
- (function() {
- /**
- * @class OCA.Files.Navigation
- * @classdesc Navigation control for the files app sidebar.
- *
- * @param $el element containing the navigation
- */
- var Navigation = function($el) {
- this.initialize($el);
- };
- /**
- * @memberof OCA.Files
- */
- Navigation.prototype = {
- /**
- * Currently selected item in the list
- */
- _activeItem: null,
- /**
- * Currently selected container
- */
- $currentContent: null,
- /**
- * Initializes the navigation from the given container
- *
- * @private
- * @param $el element containing the navigation
- */
- initialize: function($el) {
- this.$el = $el;
- this._activeItem = null;
- this.$currentContent = null;
- this._setupEvents();
- },
- /**
- * Setup UI events
- */
- _setupEvents: function() {
- this.$el.on('click', 'li a', _.bind(this._onClickItem, this));
- },
- /**
- * Returns the container of the currently active app.
- *
- * @return app container
- */
- getActiveContainer: function() {
- return this.$currentContent;
- },
- /**
- * Returns the currently active item
- *
- * @return item ID
- */
- getActiveItem: function() {
- return this._activeItem;
- },
- /**
- * Switch the currently selected item, mark it as selected and
- * make the content container visible, if any.
- *
- * @param string itemId id of the navigation item to select
- * @param array options "silent" to not trigger event
- */
- setActiveItem: function(itemId, options) {
- var oldItemId = this._activeItem;
- if (itemId === this._activeItem) {
- if (!options || !options.silent) {
- this.$el.trigger(
- new $.Event('itemChanged', {itemId: itemId, previousItemId: oldItemId})
- );
- }
- return;
- }
- this.$el.find('li').removeClass('active');
- if (this.$currentContent) {
- this.$currentContent.addClass('hidden');
- this.$currentContent.trigger(jQuery.Event('hide'));
- }
- this._activeItem = itemId;
- this.$el.find('li[data-id=' + itemId + ']').addClass('active');
- this.$currentContent = $('#app-content-' + itemId);
- this.$currentContent.removeClass('hidden');
- if (!options || !options.silent) {
- this.$currentContent.trigger(jQuery.Event('show'));
- this.$el.trigger(
- new $.Event('itemChanged', {itemId: itemId, previousItemId: oldItemId})
- );
- }
- },
- /**
- * Returns whether a given item exists
- */
- itemExists: function(itemId) {
- return this.$el.find('li[data-id=' + itemId + ']').length;
- },
- /**
- * Event handler for when clicking on an item.
- */
- _onClickItem: function(ev) {
- var $target = $(ev.target);
- var itemId = $target.closest('li').attr('data-id');
- this.setActiveItem(itemId);
- ev.preventDefault();
- }
- };
- OCA.Files.Navigation = Navigation;
- })();
|