diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-05-08 19:00:42 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-05-15 17:51:04 +0200 |
commit | fb10bf4048aaf5b2a9665fc9dff217c790efe005 (patch) | |
tree | 9d65596c49ecb78d828c8b2fc661f46424c2965d /apps/files/js/navigation.js | |
parent | 88ebb15f1d91b82022e02903ab73338065e223b9 (diff) | |
download | nextcloud-server-fb10bf4048aaf5b2a9665fc9dff217c790efe005.tar.gz nextcloud-server-fb10bf4048aaf5b2a9665fc9dff217c790efe005.zip |
Files app navigation can now switch
- added new OCA.Files namespace for files classes
- the sidebar can now switch between views/containers
- the trashbin renders in its own container but currently doesn't work
due to overrides
- added app.js as entry point for JS code (ideally all other files should
only contain classes and not trigger anything)
Diffstat (limited to 'apps/files/js/navigation.js')
-rw-r--r-- | apps/files/js/navigation.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js new file mode 100644 index 00000000000..f53abddd4db --- /dev/null +++ b/apps/files/js/navigation.js @@ -0,0 +1,81 @@ +/* + * 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 + */ + _selectedItem: 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._selectedItem = null; + this.$currentContent = null; + this._setupEvents(); + }, + + /** + * Setup UI events + */ + _setupEvents: function() { + this.$el.on('click', 'li a', _.bind(this._onClickItem, this)); + }, + + /** + * 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 + */ + setSelectedItem: function(itemId) { + if (itemId === this._selectedItem) { + return; + } + this._selectedItem = itemId; + this.$el.find('li').removeClass('selected'); + if (this.$currentContent) { + this.$currentContent.addClass('hidden'); + } + this.$currentContent = $('#app-content-' + itemId); + this.$currentContent.removeClass('hidden'); + this.$el.find('li[data-id=' + itemId + ']').addClass('selected'); + }, + + /** + * Event handler for when clicking on an item. + */ + _onClickItem: function(ev) { + var $target = $(ev.target); + var itemId = $target.closest('li').attr('data-id'); + this.setSelectedItem(itemId); + } + }; + + OCA.Files.Navigation = Navigation; + +})(); |