Blame view
sources/apps/files/js/navigation.js
2.7 KB
|
6d9380f96
|
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
/*
* 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() {
var Navigation = function($el) {
this.initialize($el);
};
Navigation.prototype = {
/**
* Currently selected item in the list
*/
_activeItem: null,
/**
* Currently selected container
*/
$currentContent: null,
/**
* Initializes the navigation from the given container
* @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);
return false;
}
};
OCA.Files.Navigation = Navigation;
})();
|