diff --git a/media/scripts/app/views/dir.js b/media/scripts/app/views/dir.js index 0c4ad59d97..cb04517f94 100644 --- a/media/scripts/app/views/dir.js +++ b/media/scripts/app/views/dir.js @@ -16,6 +16,8 @@ define([ el: $('#dir-view'), path_bar_template: _.template(PathBarTemplate), dir_op_bar_template: _.template(DirOpBarTemplate), + newDirTemplate: _.template($("#add-new-dir-form-template").html()), + newFileTemplate: _.template($("#add-new-file-form-template").html()), initialize: function(options) { this.$dirent_list = this.$('.repo-file-list tbody'); @@ -57,29 +59,29 @@ define([ }, renderPath: function() { - var dir = this.dir; - var path = dir.path, - obj = { - path: path, - repo_name: dir.repo_name, - }; + var dir = this.dir, + path = dir.path, + obj = {path: path, repo_name: dir.repo_name}; + if (path != '/') { $.extend(obj, { path_list: path.substr(1).split('/'), - repo_id: dir.repo_id, + repo_id: dir.repo_id }); } + this.$path_bar.html(this.path_bar_template(obj)); }, renderDirOpBar: function() { - var dir = this.dir; - var user_perm = dir.user_perm; + var dir = this.dir, + user_perm = dir.user_perm; + this.$dir_op_bar.html($.trim(this.dir_op_bar_template({ user_perm: user_perm, encrypted: dir.encrypted, path: dir.path, - repo_id: dir.repo_id, + repo_id: dir.repo_id }))); }, @@ -99,47 +101,95 @@ define([ }, newDir: function() { - var form = $('#add-new-dir-form'), - form_id = form.attr('id'); - form.modal({appendTo:'#main'}); - $('#simplemodal-container').css({'height':'auto'}); - var dir = this.dir; - var dirView = this; - form.submit(function() { - var dirent_name = $.trim($('input[name="name"]', form).val()); - if (!dirent_name) { - //apply_form_error(form_id, "{% trans "It is required." %}"); - //apply_form_error(form_id, "It is required."); - return false; - } - var post_data = {'dirent_name': dirent_name}; - var post_url = Common.getUrl({name: "new_dir", repo_id: dir.repo_id}) - + '?parent_dir=' + encodeURIComponent(dir.path); - var after_op_success = function(data) { - $.modal.close(); - var now = new Date().getTime()/1000; - var new_dirent = dir.add({ - 'is_dir': true, - 'obj_name': data['name'], - 'last_modified': now, - //'last_update': "{% trans "Just now" %}", - 'last_update': "Just now", - 'p_dpath': data['p_dpath'], - }, {silent:true}); - var view = new DirentView({model: new_dirent, dirView: dirView}); - $('tr:first', dirView.$dirent_list).before(view.render().el); // put the new dir as the first one - }; - Common.ajaxPost({ - 'form': form, - 'post_url': post_url, - 'post_data': post_data, - 'after_op_success': after_op_success, - 'form_id': form_id + var form = $(this.newDirTemplate()), + form_id = form.attr('id'), + dir = this.dir, + dirView = this; + + form.modal({appendTo:'#main'}); + $('#simplemodal-container').css({'height':'auto'}); + + form.submit(function() { + var dirent_name = $.trim($('input[name="name"]', form).val()), + post_data = {'dirent_name': dirent_name}, + post_url = Common.getUrl({name: "new_dir", repo_id: dir.repo_id}) + + '?parent_dir=' + encodeURIComponent(dir.path); + + if (!dirent_name) { + Common.showFormError(form_id, gettext("It is required.")); + return false; + }; + + var after_op_success = function(data) { + $.modal.close(); + + var new_dirent = dir.add({ + 'is_dir': true, + 'obj_name': data['name'], + 'last_modified': new Date().getTime() / 1000, + 'last_update': gettext("Just now"), + 'p_dpath': data['p_dpath'] + }, {silent:true}); + + var view = new DirentView({model: new_dirent, dirView: dirView}); + $('tr:first', dirView.$dirent_list).before(view.render().el); // put the new dir as the first one + }; + + Common.ajaxPost({ + 'form': form, + 'post_url': post_url, + 'post_data': post_data, + 'after_op_success': after_op_success, + 'form_id': form_id + }); + + return false; }); - return false; - }); }, + newFile: function() { + var form = $(this.newFileTemplate()), + form_id = form.attr('id'), + file_name = form.find('input[name="name"]'), + dir = this.dir, + dirView = this; + + form.modal({appendTo:'#main'}); + $('#simplemodal-container').css({'height':'auto'}); + + form.find('.set-file-type').on('click', function() { + file_name.val('.' + $(this).data('filetype')); + Common.setCaretPos(file_name[0], 0); + file_name.focus(); + }); + + form.submit(function() { + var dirent_name = $.trim(file_name.val()), + post_data = {'dirent_name': dirent_name}, + post_url = Common.getUrl({name: "new_file", repo_id: dir.repo_id}) + + '?parent_dir=' + encodeURIComponent(dir.path); + + if (!dirent_name) { + Common.showFormError(form_id, gettext("It is required.")); + return false; + }; + + var after_op_success = function(data) { + location.href = Common.getUrl({name: "repo_new_file", repo_id: dir.repo_id}) + + '?p=' + encodeURIComponent(dir.path) + encodeURIComponent(data['name']); + }; + + Common.ajaxPost({ + 'form': form, + 'post_url': post_url, + 'post_data': post_data, + 'after_op_success': after_op_success, + 'form_id': form_id + }); + + return false; + }); + } }); return DirView; diff --git a/media/scripts/common.js b/media/scripts/common.js index a04c349728..7b70ebb1b6 100644 --- a/media/scripts/common.js +++ b/media/scripts/common.js @@ -53,6 +53,7 @@ define([ case 'cp_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/cp/'; case 'new_dir': return siteRoot + 'ajax/repo/' + options.repo_id + '/dir/new/'; case 'new_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/new/'; + case 'repo_new_file': return siteRoot + 'repo/' + options.repo_id + '/files/'; case 'del_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/delete/'; case 'mv_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/move/'; case 'cp_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/copy/'; @@ -118,6 +119,17 @@ define([ btn.attr('disabled', 'disabled').addClass('btn-disabled'); }, + setCaretPos: function(inputor, pos) { + var range; + if (document.selection) { + range = inputor.createTextRange(); + range.move("character", pos); + return range.select(); + } else { + return inputor.setSelectionRange(pos, pos); + } + }, + prepareCSRFToken: function(xhr, settings) { function getCookie(name) { var cookieValue = null; diff --git a/seahub/templates/js/lib-op-popups.html b/seahub/templates/js/lib-op-popups.html index 3aac3881b4..8c8069260d 100644 --- a/seahub/templates/js/lib-op-popups.html +++ b/seahub/templates/js/lib-op-popups.html @@ -1,5 +1,6 @@ {% load i18n %} + +