summaryrefslogtreecommitdiffstats
path: root/apps/files/js/navigation.js
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-05-08 19:00:42 +0200
committerVincent Petry <pvince81@owncloud.com>2014-05-15 17:51:04 +0200
commitfb10bf4048aaf5b2a9665fc9dff217c790efe005 (patch)
tree9d65596c49ecb78d828c8b2fc661f46424c2965d /apps/files/js/navigation.js
parent88ebb15f1d91b82022e02903ab73338065e223b9 (diff)
downloadnextcloud-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.js81
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;
+
+})();