mirror of
https://github.com/haiwen/seahub.git
synced 2025-06-29 16:37:56 +00:00
232 lines
7.8 KiB
JavaScript
232 lines
7.8 KiB
JavaScript
define([
|
|
'jquery',
|
|
'underscore',
|
|
'backbone',
|
|
'common',
|
|
'js.cookie'
|
|
], function($, _, Backbone, Common, Cookie) {
|
|
'use strict';
|
|
|
|
var sideNavView = Backbone.View.extend({
|
|
el: '.side-panel',
|
|
|
|
template: _.template($("#side-nav-tmpl").html()),
|
|
enableModTemplate: _.template($("#myhome-mods-enable-form-tmpl").html()),
|
|
|
|
initialize: function() {
|
|
this.default_cur_tab = 'mine';
|
|
this.group_expanded = false;
|
|
if (Cookie.get('group_expanded') &&
|
|
Cookie.get('group_expanded') == 'true') {
|
|
this.group_expanded = true;
|
|
}
|
|
this.data = {
|
|
'cur_tab': this.default_cur_tab,
|
|
'show_group_list': this.group_expanded, // when cur_tab is not 'group'
|
|
'groups': app.pageOptions.groups,
|
|
'mods_enabled': app.pageOptions.user_mods_enabled,
|
|
'show_share_admin': false, // show 'share admin' nav list or not
|
|
'can_add_repo': app.pageOptions.can_add_repo,
|
|
'can_generate_share_link': app.pageOptions.can_generate_share_link,
|
|
'can_generate_upload_link': app.pageOptions.can_generate_upload_link
|
|
};
|
|
var _this = this;
|
|
$('#js-toggle-side-nav').on('click', function() {
|
|
_this.show();
|
|
return false;
|
|
});
|
|
$(window).on('resize', function() {
|
|
if ($(window).width() >= 768) {
|
|
_this.show();
|
|
}
|
|
});
|
|
},
|
|
|
|
render: function() {
|
|
this.$('#side-nav').html(this.template(this.data));
|
|
return this;
|
|
},
|
|
|
|
events: {
|
|
'click #group-nav a:first': 'toggleGroupList',
|
|
'click #share-admin-nav a:first': 'toggleShareAdminList',
|
|
'click #enable-mods': 'enableMods',
|
|
'click .js-close': 'close',
|
|
'click #side-nav li > a': 'visitLink',
|
|
'click .js-about': 'showAbout',
|
|
|
|
// for touch devices
|
|
'touchstart .side-nav-con': 'conTouchStart'
|
|
},
|
|
|
|
conTouchStart: function() {
|
|
this.$('.side-nav-con').css({'overflow':'auto'});
|
|
},
|
|
|
|
toggleGroupList: function() {
|
|
var $icon = $('#group-nav .toggle-icon');
|
|
|
|
$icon.toggleClass('icon-caret-left icon-caret-down');
|
|
$('#group-nav .grp-list').slideToggle();
|
|
|
|
if ($icon.hasClass('icon-caret-down')) {
|
|
Cookie.set('group_expanded', 'true');
|
|
this.data.show_group_list = true;
|
|
} else {
|
|
Cookie.set('group_expanded', 'false');
|
|
this.data.show_group_list = false;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
toggleShareAdminList: function() {
|
|
var $shareAdmin = $('#share-admin-nav');
|
|
|
|
$('.toggle-icon', $shareAdmin).toggleClass('icon-caret-left icon-caret-down');
|
|
$('ul', $shareAdmin).slideToggle(250);
|
|
return false;
|
|
},
|
|
|
|
enableMods: function () {
|
|
var mods_enabled = app.pageOptions.user_mods_enabled;
|
|
var form = $(this.enableModTemplate({
|
|
'mods_available': app.pageOptions.user_mods_available,
|
|
'mods_enabled': mods_enabled
|
|
}));
|
|
form.modal({focus:false});
|
|
$('#simplemodal-container').css('height', 'auto');
|
|
|
|
var checkbox = $('[name="personal_wiki"]'),
|
|
original_checked = checkbox.prop('checked'),
|
|
_this = this;
|
|
|
|
form.on('submit', function() {
|
|
var cur_checked = checkbox.prop('checked');
|
|
if (cur_checked == original_checked) {
|
|
return false;
|
|
}
|
|
|
|
var submit_btn = form.children('[type="submit"]');
|
|
Common.disableButton(submit_btn);
|
|
|
|
$.ajax({
|
|
url: Common.getUrl({'name': 'user_enabled_modules'}),
|
|
type: cur_checked ? 'POST' : 'DELETE',
|
|
cache: false,
|
|
dataType: 'json',
|
|
beforeSend: Common.prepareCSRFToken,
|
|
success: function() {
|
|
if (cur_checked) {
|
|
mods_enabled.push('personal wiki');
|
|
} else {
|
|
var index = mods_enabled.indexOf('personal wiki');
|
|
if (index > -1) {
|
|
mods_enabled.splice(index, 1); // rm the item
|
|
}
|
|
}
|
|
$.modal.close();
|
|
_this.render();
|
|
},
|
|
error: function(xhr) {
|
|
Common.ajaxErrorHandler(xhr);
|
|
}
|
|
});
|
|
|
|
return false;
|
|
});
|
|
|
|
return false;
|
|
},
|
|
|
|
setCurTab: function(cur_tab, options) {
|
|
this.data.cur_tab = cur_tab || this.default_cur_tab;
|
|
if (options) {
|
|
$.extend(this.data, options);
|
|
}
|
|
|
|
if (this.$clickedTab) {
|
|
// The user click a link and this.$clickedTab is set by visitLink()
|
|
this.$('.tab-cur').removeClass('tab-cur');
|
|
this.$clickedTab.addClass('tab-cur');
|
|
this.$clickedTab = null;
|
|
} else {
|
|
// the first time the side nav is rendered or the side nav is re-rendered
|
|
// when dismiss a group, leave a group
|
|
this.render();
|
|
var curTabTop = this.$('.tab-cur').offset().top;
|
|
var visibleHeight = $(window).height() - this.$('.side-nav-footer').outerHeight(true);
|
|
if (curTabTop > visibleHeight) {
|
|
this.$('.side-nav-con').css({'overflow':'auto'}).scrollTop(curTabTop - visibleHeight + this.$('.tab-cur').outerHeight(true) + 10).removeAttr('style');
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
updateGroups: function() {
|
|
var _this = this;
|
|
$.ajax({
|
|
url: Common.getUrl({name: 'groups'}),
|
|
type: 'GET',
|
|
dataType: 'json',
|
|
cache: false,
|
|
success: function(data) {
|
|
var groups = [];
|
|
for (var i = 0, len = data.length; i < len; i++) {
|
|
groups.push({
|
|
'id': data[i].id,
|
|
'name': data[i].name
|
|
});
|
|
}
|
|
groups.sort(function(a, b) {
|
|
return Common.compareTwoWord(a.name, b.name);
|
|
});
|
|
|
|
// update app.pageOptions.groups
|
|
app.pageOptions.groups = groups;
|
|
|
|
_this.data.groups = groups;
|
|
_this.render();
|
|
},
|
|
error: function() {
|
|
}
|
|
});
|
|
},
|
|
|
|
show: function() {
|
|
this.$el.css({ 'left':'0px' });
|
|
},
|
|
|
|
hide: function() {
|
|
this.$el.css({ 'left':'-300px' });
|
|
},
|
|
|
|
close: function() {
|
|
this.hide();
|
|
return false;
|
|
},
|
|
|
|
visitLink: function(e) {
|
|
if ($(e.target).attr('href') !== "#") {
|
|
this.$clickedTab = $(e.target).parent();
|
|
}
|
|
|
|
if ($(window).width() < 768) {
|
|
if ($(e.target).attr('href') !== "#") {
|
|
// except for groups toggle link
|
|
this.hide();
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
|
|
showAbout: function() {
|
|
var $about = this.$('.about-content');
|
|
$about.modal();
|
|
return false;
|
|
}
|
|
|
|
});
|
|
|
|
return sideNavView;
|
|
});
|