Fixes few issues with File Manager.

- Rename file/folder not working in list view.
- Selection folder only should not allow to select file.
- Ui changes in table list to match with the pgadmin color styles.
- Custom STORAGE_DIR path don't list files/folders when opened in window
  system.
- Code cleanup, formatting & did proper commenting.
- In file selection mode, the value typed in text box not setting into
  backbone model.
- Removed create file code, it should be handled on module using it.
- Written a common function to make ajax request, instead of writing
  individual functions for same task.
This commit is contained in:
Surinder Kumar 2016-05-21 15:01:47 +05:30 committed by Ashesh Vashi
parent 875e251359
commit 3120ce1909
5 changed files with 367 additions and 543 deletions

View File

@ -677,6 +677,7 @@ class Filemanager(object):
dir = self.dir
err_msg = ''
code = 1
name = unquote(name)
try:
orig_path = "{0}{1}".format(dir, path)
newName = '{0}{1}'.format(orig_path, name)
@ -689,40 +690,7 @@ class Filemanager(object):
result = {
'Path': path,
'Name': newName,
'Error': err_msg,
'Code': code
}
return result
def create_file(self, path, name, req=None):
"""
Create new file functionality
"""
if not self.validate_request('create'):
return {
'Error': gettext('Not allowed'),
'Code': 1
}
dir = self.dir
err_msg = ''
code = 1
try:
orig_path = "{0}{1}".format(dir, path)
newName = '{0}{1}'.format(orig_path, name)
if not os.path.exists(newName):
open(newName, 'w')
code = 0
else:
err_msg = gettext("Error: File already exists")
except Exception as e:
err_msg = "Error: {0}".format(e.strerror)
result = {
'Path': path,
'Name': newName,
'Name': name,
'Error': err_msg,
'Code': code
}

View File

@ -40,9 +40,12 @@
overflow: auto;
/* no margin or border allowed */
}
.file_listing #contents.grid li.selected {
border: 1px solid #D9EDF7;
}
.fileinfo #contents li.selected, .fileinfo #contents tbody tr.selected {
background: #D9EDF7;
.file_listing #contents.grid li.selected, .fileinfo #contents tbody tr.selected {
background: #D9EDF7 !important;
}
.fileinfo #contents li .fm_file_rename,
@ -54,6 +57,17 @@
height: 17px;
}
.fileinfo #contents li p > span.less_text,
.fileinfo table#contents tr td:first-child p span.less_text {
width: 100%;
display: inline-block;
text-overflow: ellipsis;
overflow: hidden;
text-align: center;
white-space: nowrap;
padding: 0 10px;
}
.fileinfo table#contents tr td p {
display: inline-block;
margin-bottom: 0;
@ -164,13 +178,14 @@ x:-o-prefocus, .file-input-container {top:16px;width:198px;}
display: block;
float: left;
width: 100px;
min-height: 80px;
height: 80px;
text-align: center;
overflow: hidden;
margin-bottom: 10px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
border: 1px solid #fff;
}
div.clip {
@ -199,12 +214,12 @@ div.clip {
.file_listing #contents.list thead {
background: rgb(244,241,237); /* Old browsers */
background: -moz-linear-gradient(top, rgba(244,241,237,1) 0%, rgba(214,212,209,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(244,241,237,1)), color-stop(100%,rgba(214,212,209,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(244,241,237,1) 0%,rgba(214,212,209,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(244,241,237,1) 0%,rgba(214,212,209,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(244,241,237,1) 0%,rgba(214,212,209,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(244,241,237,1) 0%,rgba(214,212,209,1) 100%); /* W3C */
background: -moz-linear-gradient(top, rgba(44, 118, 180, 0.71) 0%, rgba(44, 118, 180, 0.98) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(44, 118, 180, 0.71)), color-stop(100%,rgba(44, 118, 180, 0.98))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(44, 118, 180, 0.71) 0%,rgba(44, 118, 180, 0.98) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(44, 118, 180, 0.71) 0%,rgba(44, 118, 180, 0.98) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(44, 118, 180, 0.71) 0%,rgba(44, 118, 180, 0.98) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(44, 118, 180, 0.71) 0%,rgba(44, 118, 180, 0.98) 100%)
border-bottom: 1px solid #ccc;
display: inline-block;
width: 100%;
@ -213,6 +228,7 @@ div.clip {
.file_listing #contents.list th {
font-weight: bold;
cursor: pointer;
color: #fff;
}
.file_listing #contents.list th.tablesorter-headerAsc,
@ -226,15 +242,11 @@ div.clip {
background: linear-gradient(to bottom, rgba(214,212,209,1) 0%,rgba(244,241,237,1) 100%); /* W3C */
}
.file_listing #contents.list td {
border-bottom: 1px dotted #ccc;
}
.file_listing #contents.list td:first-child {
display: table-cell;
padding-left: 0;
width: 100%;
padding-left: 22px;
padding-left: 12px;
background-repeat: no-repeat;
background-position: 3px center;
}
@ -253,16 +265,15 @@ div.clip {
margin-right: 5px;
}
.file_listing #contents.list tbody tr:hover {
background-color: #eee;
cursor: pointer;
.file_listing #contents.list tbody tr:nth-child(even):hover {
background-color: #f5f5f5 !important;
}
.file_listing #contents.grid li:hover {
border: 1px solid #E5E5E5;
background-color: #F7F7F7;
cursor: pointer;
max-height: 78px;
height: 80px;
}
.meta {
@ -320,7 +331,8 @@ button.list span {
top: 0;
}
.btn-group.filemanager-btn-group .btn:not(:first-child):not(:last-child) {
.btn-group.filemanager-btn-group .btn:not(:first-child):not(:last-child),
.btn-group.filemanager-path-group .btn:not(:first-child):not(:last-child) {
border-left: 1px solid #A9A9A9;
}
@ -377,6 +389,14 @@ button.list span {
width: 100%;
}
.file_manager .fileinfo #contents tbody tr:nth-child(even) {
background: #eee;
}
.file_manager .fileinfo #contents thead tr th:not(:first-child) {
border-left: 1px solid #fff;
}
.file_manager .fileinfo #contents thead tr th:nth-child(1),
.file_manager .fileinfo #contents tbody tr td:nth-child(1) {
position: relative;
@ -389,6 +409,7 @@ button.list span {
width: 152px;
min-width: 152px;
max-width: 152px;
padding-left: 10px;
}
.file_manager .fileinfo #contents tbody tr td:nth-child(2) {
@ -401,12 +422,13 @@ button.list span {
width: 197px;
min-width: 197px;
max-width: 197px;
padding-left: 10px;
}
.file_manager .fileinfo #contents tbody tr td:nth-child(3) {
width: 180px;
min-width: 180px;
max-width: 180px;
width: 177px;
min-width: 177px;
max-width: 177px;
}
.file_manager .fileinfo #contents tbody {
@ -415,10 +437,12 @@ button.list span {
width: 100%;
height: calc(100% - 30px);
}
.file_manager .fileinfo #contents tbody tr{
display: table;
/*display: table;*/
max-width: 100%;
width: 100%;
cursor: pointer;
}
.file_manager .upload_file {
@ -457,11 +481,14 @@ button.list span {
}
.file_manager #uploader .btn-group .show_selected_file {
float: left;
text-align: left;
vertical-align: middle;
text-align: left;
padding: 4px 0 0 5px;
height: 100%;
display: inline-block;
overflow: hidden;
width: calc(100% - 73px);
text-overflow: ellipsis;
white-space: nowrap;
}
.fileinfo .file_listing {
@ -559,6 +586,7 @@ button.list span {
}
.file_upload_main .dz-progress {
height: 21px !important;
top: 83px !important;
border: 1px solid #8a6d3b;
border-radius: 0 !important;
@ -655,7 +683,7 @@ a.dz-remove {
.file_manager .fileinfo #contents .fa-lock.tbl_lock_icon {
color: red;
position: absolute;
left: 29px;
left: 19px;
top: 5px;
font-size: 10px;
}
@ -676,8 +704,9 @@ a.dz-remove {
.file_listing .no_folder_found {
text-align: center;
position: absolute;
top: 35;
top: 35px;
width: 100%;
font-size: 14px;
}
.fileinfo .is_file_replace {

View File

@ -131,7 +131,7 @@ define([
//closeEvent.cancel = true;
}
if (closeEvent.button.text == "{{ _('Select') }}") {
if($('.fileinfo').data('view') == 'grid'){
if($('.fileinfo').data('view') == 'grid') {
sel_file = $('.fileinfo').find('#contents li.selected p span').attr('title');
} else {
sel_file = $('.fileinfo tbody tr.selected td p span').attr('title');
@ -239,7 +239,7 @@ define([
},
callback: function(closeEvent) {
if (closeEvent.button.text == "{{ _('Select') }}") {
if($('.fileinfo').data('view') == 'grid'){
if($('.fileinfo').data('view') == 'grid') {
sel_file = $('.fileinfo').find('#contents li.selected p span').attr('title');
} else {
sel_file = $('.fileinfo tbody tr.selected td p span').attr('title');
@ -346,7 +346,7 @@ define([
},
callback: function(closeEvent) {
if (closeEvent.button.text == "{{ _('Select') }}") {
if($('.fileinfo').data('view') == 'grid'){
if($('.fileinfo').data('view') == 'grid') {
sel_file = $('.fileinfo').find('#contents li.selected p span').attr('title');
} else {
sel_file = $('.fileinfo tbody tr.selected td p span').attr('title');
@ -481,9 +481,9 @@ define([
dataType: 'json',
contentType: "application/x-download; charset=utf-8",
async: false,
success: function(resp){
success: function(resp) {
data = resp.data.result;
if(data['Code'] === 0){
if(data['Code'] === 0) {
is_exist = true;
} else {
is_exist = false;
@ -492,39 +492,8 @@ define([
});
return is_exist;
},
create_file: function() {
var selected_item = $('.allowed_file_types .create_input input[type="text"]').val(),
is_exist = false,
is_created = false;
var post_data = {
'path': $('.currentpath').val(),
'name': selected_item,
'mode': 'create_file'
};
$.ajax({
type: 'POST',
data: JSON.stringify(post_data),
url: fileConnector + trans_id+'/',
dataType: 'json',
contentType: "application/x-download; charset=utf-8",
async: false,
success: function(resp){
data = resp.data.result;
if(data['Code'] === 0){
alertify.success("New File created successfully.");
is_created = true;
} else {
alertify.error(data['Error']);
return false;
}
}
});
return is_created;
},
callback: function(closeEvent) {
if (closeEvent.button.text == "{{ _('Create') }}"){
if (closeEvent.button.text == "{{ _('Create') }}") {
var selected_item = $('.allowed_file_types .create_input input[type="text"]').val();
var newFile = $('.currentpath').val() + selected_item;
newFile = newFile.substr(1);
@ -533,17 +502,11 @@ define([
closeEvent.cancel = true;
}
else {
var is_created = this.create_file();
if (is_created) {
pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:create_file', newFile);
removeTransId(trans_id);
}
else {
closeEvent.cancel = true;
}
pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:create_file', newFile);
removeTransId(trans_id);
}
}
if (closeEvent.button.text == "{{ _('Cancel') }}"){
if (closeEvent.button.text == "{{ _('Cancel') }}") {
removeTransId(trans_id);
}
},

View File

@ -12,106 +12,52 @@
(function($) {
"use strict";
// User alertify object
var alertify = require("alertify");
// use alertify and underscore js
var alertify = require("alertify"),
_ = require("underscore");
/*---------------------------------------------------------
Define functions used for various operations
---------------------------------------------------------*/
// function to retrieve GET params
$.urlParam = function(name) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results) {
return results[1];
} else {
return 0;
}
};
// return file extension
var getFileExtension = function(name) {
var found = name.lastIndexOf('.') + 1;
return (found > 0 ? name.substr(found) : "");
var found = name.lastIndexOf('.') + 1;
return (found > 0 ? name.substr(found) : "");
};
// returns filename without extension
var getFileName = function(name) {
var fm_filename = name;
if (fm_filename.length > 15 ) {
fm_filename = name.substr(0, 10) +'...';
fm_filename = name.substr(0, 10) +'...';
}
return fm_filename;
};
// send a request to get transaction id
var getTransId = function() {
/* Common function to load:
* en.js language file
* file_manager_config.js config file
* return transaction id
*/
var loadData = function(url) {
return $.ajax({
async: false,
url: "{{ url_for('file_manager.index') }}get_trans_id",
dataType: "jsonp"
});
};
// Load language file
var loadLangFile = function(enjs) {
if ($.urlParam('langCode') !== 0 && file_exists (enjs)) {
culture = $.urlParam('langCode');
}
return $.ajax({
async: false,
url: enjs,
url: url,
dataType: 'jsonp',
contentType: "application/json; charset=utf-8"
});
};
var userconfig = file_manager_config_json;
// We retrieve config settings from filemanager.config.js
var loadConfigFile = function (type) {
type = (typeof type === "undefined") ? "user" : type;
var url;
if (type == 'user') {
url = file_manager_config_json;
}
return $.ajax({
async: false,
url: url,
dataType: "jsonp",
contentType: "application/json; charset=utf-8"
});
};
/*
* Forces columns to fill the layout vertically.
* Called on initial page load and on resize.
*/
var setDimensions = function() {
var main_container_height = ( $(window).height() ) / 2 + 35;
var newH = main_container_height - $('#uploader').height() - 30;
};
// Display Min Path
var displayPath = function(path) {
if (config.options.showFullPath === false) {
// if a "displayPathDecorator" function is defined, use it to decorate path
return 'function' === (typeof displayPathDecorator)
? displayPathDecorator(path)
: path.replace(fileRoot, "/");
} else {
return path;
}
};
// Set the view buttons state
// Set enable/disable state of list and grid view
var setViewButtonsFor = function(viewMode) {
if (viewMode == 'grid') {
$('.grid').addClass('ON');
$('.list').removeClass('ON');
} else {
$('.list').addClass('ON');
$('.grid').removeClass('ON');
}
if (viewMode == 'grid') {
$('.grid').addClass('ON');
$('.list').removeClass('ON');
} else {
$('.list').addClass('ON');
$('.grid').removeClass('ON');
}
};
/*
@ -193,10 +139,7 @@ var formatBytes = function(bytes) {
}
};
/*
* Handle Error. Freeze interactive buttons and display
* error message. Also called when auth() function return false (Code == "-1")
*/
// Freeze toolbar buttons and display errors
var handleError = function(errMsg) {
$('.storage_dialog .newfile').attr("disabled", "disabled");
$('.storage_dialog .upload').attr("disabled", "disabled");
@ -207,27 +150,12 @@ var handleError = function(errMsg) {
* Test if Data structure has the 'cap' capability
* 'cap' is one of 'select', 'rename', 'delete', 'download'
*/
function has_capability(data, cap) {
var has_capability = function(data, cap) {
if (typeof(data.Capabilities) == "undefined") {
return true;
} else {
return ($.inArray(cap, data.Capabilities) > -1);
}
}
// Test if file is authorized
var isAuthorizedFile = function(filename) {
return ((
config.security.uploadPolicy == 'DISALLOW_ALL' &&
$.inArray(
getExtension(filename), config.security.uploadRestrictions
) != -1
) || (
config.security.uploadPolicy == 'ALLOW_ALL' &&
$.inArray(
getExtension(filename), config.security.uploadRestrictions
) == -1
));
};
// return filename extension
@ -238,7 +166,7 @@ var getExtension = function(filename) {
return filename.split('.').pop();
};
// return filename without extension {
// return filename without extension
var getFilename = function(filename) {
if (filename.lastIndexOf('.') != -1) {
return filename.substring(0, filename.lastIndexOf('.'));
@ -250,7 +178,8 @@ var getFilename = function(filename) {
// helpful in show/hide toolbar button for Windows
var hideButtons = function() {
return (
config.options.platform_type == 'win32' && $('.currentpath').val() == ''
config.options.platform_type == 'win32' &&
$('.currentpath').val() === ''
);
};
@ -265,7 +194,7 @@ var setUploader = function(path) {
path = decodeURI(path);
var display_string = displayPath(path),
var display_string = path,
mypath = '';
// split path
@ -401,7 +330,7 @@ var setUploader = function(path) {
if (fname != '') {
foldername = cleanString(fname);
var d = new Date(); // to prevent IE cache issues
$.getJSON(fileConnector + '?mode=addfolder&path=' + $('.currentpath').val() + '&name=' + foldername + '&time=' + d.getMilliseconds(), function(resp) {
$.getJSON(fileConnector + '?mode=addfolder&path=' + $('.currentpath').val() + '&name=' + foldername, function(resp) {
var result = resp.data.result;
if (result.Code === 0) {
alertify.success(lg.successful_added_folder);
@ -423,16 +352,18 @@ var setUploader = function(path) {
* and show/hide buttons
*/
var bindToolbar = function(data) {
if (!has_capability(data, 'upload') || hideButtons()) {
$('.file_manager').find('button.upload').hide();
} else {
$('.file_manager').find('button.upload').show();
}
if (!has_capability(data, 'create') || hideButtons()) {
$('.file_manager').find('button.create').hide();
} else {
$('.file_manager').find('button.create').show();
// hide/show rename, upload and create button
if(_.has(data, 'Capabilities')) {
_.each(data.Capabilities, function(cap) {
var target_btn = 'button.' + cap,
$target_el = $('.file_manager').find(target_btn);
if (!has_capability(data, cap) || hideButtons()) {
$target_el.hide();
} else {
$target_el.show();
}
});
}
if (!has_capability(data, 'delete') || hideButtons()) {
@ -484,12 +415,6 @@ var bindToolbar = function(data) {
}
});
}
if (!has_capability(data, 'rename') || hideButtons()) {
$('.file_manager').find('button.rename').hide();
} else {
$('.file_manager').find('button.rename').show();
}
};
// enable/disable button when files/folder are loaded
@ -522,26 +447,6 @@ var enable_disable_btn = function() {
$('.file_manager #uploader .show_selected_file').remove();
};
// switch to folder view
$('.file_manager .fileinfo').on('click', function(e) {
enable_disable_btn();
});
// refresh current directory
$('.file_manager .refresh').on('click', function(e) {
enable_disable_btn();
var curr_path = $('.currentpath').val(),
path = curr_path.substring(
0, curr_path.lastIndexOf("/")
) + "/";
getFolderInfo(path);
});
/*---------------------------------------------------------
Item Actions
---------------------------------------------------------*/
/*
* Rename the current item and returns the new name.
* by double clicking or by clicking the "Rename" button in
@ -660,12 +565,6 @@ var deleteItem = function(data) {
return isDeleted;
};
// hide message prompt and dimmer if clicked no
$('.delete_item button.btn_no').on('click', function() {
$('.delete_item, .fileinfo .fm_dimmer').hide();
});
/*---------------------------------------------------------
Functions to Retrieve File and Folder Details
---------------------------------------------------------*/
@ -771,12 +670,6 @@ var getFolderInfo = function(path, file_type) {
"<img src='{{ url_for('browser.static', filename='css/aciTree/image/load-root.gif') }}'>"
);
// Retrieve the data and generate the markup.
var d = new Date(); // to prevent IE cache issues
if ($.urlParam('type')) {
url += '&type=' + $.urlParam('type');
}
var post_data = {
'path': path,
'mode': 'getfolder',
@ -848,7 +741,7 @@ var getFolderInfo = function(path, file_type) {
} else {
result +=
'<p><input type="text" class="fm_file_rename" />' +
'<span title="' + file_name_original+'">' + fm_filename +
'<span class="less_text" title="' + file_name_original+'">' + fm_filename +
'</span></p>';
}
if (props.Width && props.Width != '') {
@ -919,7 +812,7 @@ var getFolderInfo = function(path, file_type) {
result += '<span title="' + (data[key]).Filename + '">' +
fm_filename + '</span></td>';
} else {
result += '<p><input type="text" class="fm_file_rename"/><span title="' +
result += '<p><input type="text" class="fm_file_rename"/><span class="less_text" title="' +
file_name_original + '">' + fm_filename + '</span></p></td>';
}
if (props.Size && props.Size != '') {
@ -994,11 +887,12 @@ var getFolderInfo = function(path, file_type) {
'table#contents tbody tr.selected td:first-child p'
),
orig_value = decodeURI($this.find('span').html()),
newvalue = orig_value.substring(0, orig_value.indexOf('.'));
newvalue = orig_value.substring(0, orig_value.lastIndexOf('.'));
if (newvalue === '') {
newvalue = orig_value;
if (orig_value.lastIndexOf('/') == orig_value.length - 1 || newvalue === '') {
newvalue = decodeURI(orig_value);
}
$this.find('input').toggle().val(newvalue).focus();
$this.find('span').toggle();
@ -1116,14 +1010,13 @@ var getFolderInfo = function(path, file_type) {
$('.fileinfo table#contents tr td p').on('dblclick', function(e) {
e.stopPropagation();
// Prompt to rename file/folder
var $this = $(this),
orig_value = decodeURI(
$this.find('span').attr('title')
),
newvalue = orig_value.substring(0, orig_value.indexOf('.'));
);
if (newvalue === '') {
var newvalue = orig_value.substring(0, orig_value.lastIndexOf('.'));
if (orig_value.lastIndexOf('/') == orig_value.length - 1 || newvalue === '') {
newvalue = orig_value;
}
@ -1181,6 +1074,7 @@ var getFolderInfo = function(path, file_type) {
});
var data_cap = {};
data_cap.Capabilities = capabilities;
/*
* Bind click events
* Select items - afolder dblclick
@ -1212,7 +1106,6 @@ var getFolderInfo = function(path, file_type) {
}
});
data_cap.Capabilities = capabilities;
$('.fileinfo').find('#contents li').click(function(e) {
e.stopPropagation();
var path = decodeURI($(this).find('.clip span').attr('data-alt')),
@ -1243,7 +1136,6 @@ var getFolderInfo = function(path, file_type) {
'.file_manager #uploader .filemanager-path-group'
);
}
//getFolderInfo(path);
} else {
if (
has_capability(data_cap, 'select_file') &&
@ -1291,12 +1183,14 @@ var getFolderInfo = function(path, file_type) {
$('.file_manager_ok').removeClass('disabled');
$('.file_manager button.download').attr('disabled', 'disabled');
$('.file_manager button.delete, .file_manager button.rename').removeAttr('disabled');
// set selected folder name in breadcrums
$('.file_manager #uploader h1').hide();
$('.file_manager #uploader .show_selected_file').remove();
$('<span class="show_selected_file">'+path+'</span>').appendTo('.file_manager #uploader .filemanager-path-group');
$('<span class="show_selected_file">'+path+'</span>').appendTo(
'.file_manager #uploader .filemanager-path-group'
);
}
//getFolderInfo(path);
} else {
if (has_capability(data_cap, 'select_file') && is_protected == undefined) {
$(this).parent().find('tr.selected').removeClass('selected');
@ -1348,7 +1242,6 @@ var getFolderInfo = function(path, file_type) {
// Enable/Disable level up button
var enab_dis_level_up = function() {
$('.file_manager #uploader h1').show();
$('.show_selected_file').remove();
@ -1367,11 +1260,16 @@ var enab_dis_level_up = function() {
}, 100);
};
// Get transaction id to generate request url and
// to generate config files on runtime
var transId = getTransId(),
t_id = '',
t_res;
/*---------------------------------------------------------
Initialization - Entry point
---------------------------------------------------------*/
/*
* get transaction id to generate request url and
* to generate config files on runtime
*/
var fm_url = "{{ url_for('file_manager.index') }}get_trans_id",
transId = loadData(fm_url),
t_id = '';
if (transId.readyState == 4) {
t_res = JSON.parse(transId.responseText);
@ -1382,7 +1280,7 @@ var root_url = '{{ url_for("file_manager.index") }}',
file_manager_config_json = root_url+t_id+'/file_manager_config.json',
file_manager_config_js = root_url+'file_manager_config.js',
fileConnector = root_url+'filemanager/'+t_id+'/',
cfg = loadConfigFile(),
cfg = loadData(file_manager_config_json),
config;
// load user configuration file
@ -1390,6 +1288,7 @@ if (cfg.readyState == 4) {
config = JSON.parse(cfg.responseText);
}
// set main url to filemanager and its capabilites
var fileRoot = config.options.fileRoot,
capabilities = config.options.capabilities;
@ -1399,16 +1298,13 @@ var fileRoot = config.options.fileRoot,
*/
var lg = [],
enjs = '{{ url_for("file_manager.index") }}' + "en.js",
lgf = loadLangFile(enjs);
lgf = loadData(enjs);
if (lgf.readyState == 4) {
lg = JSON.parse(lgf.responseText);
}
// Disable home button on load
$('.file_manager').find('button.home').attr('disabled', 'disabled');
$('.file_manager').find('button.rename').attr('disabled', 'disabled');
// create and enable user to create new file
if (
config.options.dialog_type == 'select_file' ||
config.options.dialog_type == 'create_file' ||
@ -1436,14 +1332,14 @@ if (
have_all_types = (have_all_types || (t == '*'));
} else {
select_box += '<option value="' + t +'">' +
(t == '*' ? '{{ _('All Files') }}' : t) + "</option>";
(t == '*' ? '{{ _("All Files") }}' : t) + "</option>";
have_all_types = (have_all_types || (t == '*'));
}
i++;
}
if (!have_all_types) {
select_box += '<option value="*">{{ _('All Files') }}</option>';
select_box += '<option value="*">{{ _("All Files") }}</option>';
}
select_box += "</select><label>{{ _('Format') }}: </label></div>";
}
@ -1464,7 +1360,6 @@ if (config.options.dialog_type == 'create_file') {
'</div>';
$('.create_mode_dlg').find('.allowed_file_types').prepend(create_file_html);
$('.create_input input[type="text"]').on('keypress, keydown', function() {
var input_text_len = $(this).val().length;
if (input_text_len > 0 ) {
@ -1474,258 +1369,218 @@ if (config.options.dialog_type == 'create_file') {
}
});
}
/*---------------------------------------------------------
Initialization
Item Actions - Object events
---------------------------------------------------------*/
$(function() {
var expandedFolder = '';
if (config.extra_js) {
for(var i=0; i< config.extra_js.length; i++) {
$.ajax({
url: config.extra_js[i],
dataType: "script",
async: extra_js_async
});
}
}
if ($.urlParam('expandedFolder') != 0) {
expandedFolder = $.urlParam('expandedFolder');
}
// Adjust layout.
setDimensions();
// we finalize the FileManager UI initialization
// with localized text if necessary
if (config.autoload == true) {
$('.upload').append(lg.upload);
$('.create').append(lg.new_folder);
$('.grid').attr('title', lg.grid_view);
$('.list').attr('title', lg.list_view);
$('.fileinfo h1').append(lg.select_from_left);
$('#itemOptions a[href$="#select"]').append(lg.select);
$('#itemOptions a[href$=".download"]').append(lg.download);
$('#itemOptions a[href$=".rename"]').append(lg.rename);
$('#itemOptions a[href$=".delete"]').append(lg.del);
/** Input file Replacement */
$('.browse').append('+');
$('.browse').attr('title', lg.browse);
$(".newfile").change(function() {
$(".filepath").val($(this).val());
});
/** Input file Replacement - end */
}
// stop click event on dimmer click
$('.fileinfo .fm_dimmer').on('click', function(e) {
e.stopPropagation();
});
$('.fileinfo .replace_file').not(
$(this).find('span.pull-right')
).on(
'click', function(e) {
$('#uploader .filemanager-btn-group').unbind().on(
'click', function() {
$('.fileinfo .delete_item, .fileinfo .replace_file, .fileinfo .fm_dimmer').hide();
});
e.stopPropagation();
});
// Set initial view state.
$('.fileinfo').data('view', config.options.defaultViewMode);
setViewButtonsFor(config.options.defaultViewMode);
// Upload click event
$('.file_manager .uploader').on('click', 'a', function(e) {
e.preventDefault();
var b = $('.currentpath').val();
var node_val = $(this).next().text();
parent = b.substring(0, b.slice(0, -1).lastIndexOf(node_val));
getFolderInfo(parent);
});
// re-render the home view
$('.file_manager .home').click(function() {
var currentViewMode = $('.fileinfo').data('view');
$('.fileinfo').data('view', currentViewMode);
getFolderInfo(fileRoot);
enab_dis_level_up();
});
// Go one directory back
$(".file_manager .level-up").click(function() {
var b = $('.currentpath').val();
// Enable/Disable level up button
enab_dis_level_up();
if (b != fileRoot) {
parent = b.substring(0, b.slice(0, -1).lastIndexOf("/")) + "/";
var d = $(".fileinfo").data("view");
$(".fileinfo").data("view", d);
getFolderInfo(parent);
}
});
// set buttons to switch between grid and list views.
$('.file_manager .grid').click(function() {
setViewButtonsFor('grid');
$('.fileinfo').data('view', 'grid');
enable_disable_btn();
getFolderInfo($('.currentpath').val());
});
// Show list mode
$('.file_manager .list').click(function() {
setViewButtonsFor('list');
$('.fileinfo').data('view', 'list');
enable_disable_btn();
getFolderInfo($('.currentpath').val());
});
// Provide initial values for upload form, status, etc.
setUploader(fileRoot);
$('#uploader').attr('action', fileConnector);
var data = {
'Capabilities': capabilities
};
if (has_capability(data, 'upload')) {
Dropzone.autoDiscover = false;
// we remove simple file upload element
$('.file-input-container').remove();
$('.upload').remove();
$( ".create" ).before( '<button value="Upload" type="button" title="Upload File" name="upload" id="upload" class="btn fa fa-upload upload"><span></span></button> ' );
$('.upload').unbind().click(function() {
// we create prompt
var msg = '<div id="dropzone-container">' +
'<button class="fa fa-times dz_cross_btn"></button>' +
'<div id="multiple-uploads" class="dropzone"></div>' +
'<div class="prompt-info">' + lg.file_size_limit +
config.upload.fileSizeLimit + ' ' + lg.mb + '.</div>',
error_flag = false,
path = $('.currentpath').val(),
filesizelimit = config.upload.fileSizeLimit,
// default dropzone value
fileSize = (filesizelimit != 'auto') ? filesizelimit : 256,
acceptFiles;
if (config.security.uploadPolicy == 'DISALLOW_ALL') {
acceptFiles = '.' + config.security.uploadRestrictions.join(',.');
} else {
// We allow any extension since we have no easy way to handle the the
// built-in `acceptedFiles` params would be handled later by the
// connector.
acceptFiles = null;
}
if ($.urlParam('type').toString().toLowerCase() == 'images' || config.upload.imagesOnly) {
acceptFiles = '.' + config.images.imagesExt.join(',.');
}
$('.file_manager .upload_file').toggle();
$('.file_manager .upload_file').html(msg);
//var previewTemplate = '<div id="dropzone-container">';
var previewTemplate = '<div class="file_upload_main dz-preview dz-file-preview">'+
'<div class="show_error">' +
'<p class="size dz-size" data-dz-size></p>' +
'<p class="name dz-filename" data-dz-name></p>' +
'</div>' +
'<div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>' +
'<div class="dz-success-mark"><span></span></div>' +
'<div class="dz-error-mark"><span></span></div>' +
'<div class="dz-error-message"><span data-dz-errormessage></span></div>' +
'<a href="javascript:void(0);" class="fa fa-trash dz_file_remove" data-dz-remove></a>' +
'</div>';
$("div#multiple-uploads").dropzone({
paramName: "newfile",
url: fileConnector + '?config=' + userconfig,
maxFilesize: fileSize,
maxFiles: config.upload.number,
addRemoveLinks: true,
previewTemplate: previewTemplate,
parallelUploads: config.upload.number,
dictMaxFilesExceeded: lg.dz_dictMaxFilesExceeded.replace(
"%s", config.upload.number
),
dictDefaultMessage: lg.dz_dictDefaultMessage,
dictInvalidFileType: lg.dz_dictInvalidFileType,
dictFileTooBig: lg.file_too_big + ' ' + lg.file_size_limit +
config.upload.fileSizeLimit + ' ' + lg.mb,
acceptedFiles: acceptFiles,
autoProcessQueue: true,
init: function() {
var dropzone = this;
$('.dz_cross_btn').unbind().on('click', function() {
$('.file_manager .upload_file').toggle();
});
},
sending: function(file, xhr, formData) {
formData.append("mode", "add");
formData.append("currentpath", path);
$('.upload_file .dz_cross_btn').attr('disabled', 'disabled');
setTimeout(function() {}, 10000);
},
success: function(file, response) {
var response = jQuery.parseJSON(response),
data = response.data.result,
$this = $(file.previewTemplate);
if (data.Code == 0) {
setTimeout(function() {
$this.find(".dz-upload").addClass("success");
}, 1000);
$this.find(".dz-upload").css('width', "100%").html("100%");
alertify.success(lg.upload_success);
} else {
$this.find(".dz-upload").addClass("error");
$this.find(".dz-upload").css('width', "0%").html("0%");
alertify.error(data.Error);
}
getFolderInfo(path);
},
totaluploadprogress: function(progress) {},
complete: function(file) {
if (
this.getUploadingFiles().length === 0 &&
this.getQueuedFiles().length === 0
) {}
if (file.status == "error") {
alertify.error(lg.ERROR_UPLOADING_FILE);
}
$('.upload_file .dz_cross_btn').removeAttr('disabled');
getFolderInfo(path);
}
});
});
}
// Disable select function if no window.opener
if (! (window.opener || window.tinyMCEPopup) ) {
$('#itemOptions a[href$="#select"]').remove();
}
// Keep only browseOnly features if needed
if (config.options.browseOnly == true) {
$('.newfile').remove();
$('.upload').remove();
$('.create').remove();
$('#toolbar').remove('.rename');
$('.contextMenu .rename').remove();
$('.contextMenu .delete').remove();
}
getDetailView(fileRoot + expandedFolder);
// switch to folder view
$('.file_manager .fileinfo').on('click', function(e) {
enable_disable_btn();
});
// refresh current directory
$('.file_manager .refresh').on('click', function(e) {
enable_disable_btn();
var curr_path = $('.currentpath').val(),
path = curr_path.substring(
0, curr_path.lastIndexOf("/")
) + "/";
getFolderInfo(path);
});
// hide message prompt and dimmer if clicked no
$('.delete_item button.btn_no').on('click', function() {
$('.delete_item, .fileinfo .fm_dimmer').hide();
});
// Disable home button on load
$('.file_manager').find('button.home').attr('disabled', 'disabled');
$('.file_manager').find('button.rename').attr('disabled', 'disabled');
// stop click event on dimmer click
$('.fileinfo .fm_dimmer').on('click', function(e) {
e.stopPropagation();
});
$('.fileinfo .replace_file').not(
$(this).find('span.pull-right')
).on(
'click', function(e) {
$('#uploader .filemanager-btn-group').unbind().on(
'click', function() {
$('.fileinfo .delete_item, .fileinfo .replace_file, .fileinfo .fm_dimmer').hide();
});
e.stopPropagation();
});
// Set initial view state.
$('.fileinfo').data('view', config.options.defaultViewMode);
setViewButtonsFor(config.options.defaultViewMode);
// Upload click event
$('.file_manager .uploader').on('click', 'a', function(e) {
e.preventDefault();
var b = $('.currentpath').val();
var node_val = $(this).next().text();
parent = b.substring(0, b.slice(0, -1).lastIndexOf(node_val));
getFolderInfo(parent);
});
// re-render the home view
$('.file_manager .home').click(function() {
var currentViewMode = $('.fileinfo').data('view');
$('.fileinfo').data('view', currentViewMode);
getFolderInfo(fileRoot);
enab_dis_level_up();
});
// Go one directory back
$(".file_manager .level-up").click(function() {
var b = $('.currentpath').val();
// Enable/Disable level up button
enab_dis_level_up();
if (b != fileRoot) {
parent = b.substring(0, b.slice(0, -1).lastIndexOf("/")) + "/";
var d = $(".fileinfo").data("view");
$(".fileinfo").data("view", d);
getFolderInfo(parent);
}
});
// set buttons to switch between grid and list views.
$('.file_manager .grid').click(function() {
setViewButtonsFor('grid');
$('.fileinfo').data('view', 'grid');
enable_disable_btn();
getFolderInfo($('.currentpath').val());
});
// Show list mode
$('.file_manager .list').click(function() {
setViewButtonsFor('list');
$('.fileinfo').data('view', 'list');
enable_disable_btn();
getFolderInfo($('.currentpath').val());
});
// Provide initial values for upload form, status, etc.
setUploader(fileRoot);
$('#uploader').attr('action', fileConnector);
var data = {
'Capabilities': capabilities
};
// Upload file
if (has_capability(data, 'upload')) {
Dropzone.autoDiscover = false;
// we remove simple file upload element
$('.file-input-container').remove();
$('.upload').remove();
$( ".create" ).before( '<button value="Upload" type="button" title="Upload File" name="upload" id="upload" class="btn fa fa-upload upload"><span></span></button> ' );
$('.upload').unbind().click(function() {
// we create prompt
var msg = '<div id="dropzone-container">' +
'<button class="fa fa-times dz_cross_btn"></button>' +
'<div id="multiple-uploads" class="dropzone"></div>' +
'<div class="prompt-info">' + lg.file_size_limit +
config.upload.fileSizeLimit + ' ' + lg.mb + '.</div>',
error_flag = false,
path = $('.currentpath').val(),
filesizelimit = config.upload.fileSizeLimit,
// default dropzone value
fileSize = (filesizelimit != 'auto') ? filesizelimit : 256,
acceptFiles;
if (config.security.uploadPolicy == 'DISALLOW_ALL') {
acceptFiles = '.' + config.security.uploadRestrictions.join(',.');
} else {
// We allow any extension since we have no easy way to handle the the
// built-in `acceptedFiles` params would be handled later by the
// connector.
acceptFiles = null;
}
$('.file_manager .upload_file').toggle();
$('.file_manager .upload_file').html(msg);
//var previewTemplate = '<div id="dropzone-container">';
var previewTemplate = '<div class="file_upload_main dz-preview dz-file-preview">'+
'<div class="show_error">' +
'<p class="size dz-size" data-dz-size></p>' +
'<p class="name dz-filename" data-dz-name></p>' +
'</div>' +
'<div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>' +
'<div class="dz-success-mark"><span></span></div>' +
'<div class="dz-error-mark"><span></span></div>' +
'<div class="dz-error-message"><span data-dz-errormessage></span></div>' +
'<a href="javascript:void(0);" class="fa fa-trash dz_file_remove" data-dz-remove></a>' +
'</div>';
$("div#multiple-uploads").dropzone({
paramName: "newfile",
url: fileConnector,
maxFilesize: fileSize,
maxFiles: config.upload.number,
addRemoveLinks: true,
previewTemplate: previewTemplate,
parallelUploads: config.upload.number,
dictMaxFilesExceeded: lg.dz_dictMaxFilesExceeded.replace(
"%s", config.upload.number
),
dictDefaultMessage: lg.dz_dictDefaultMessage,
dictInvalidFileType: lg.dz_dictInvalidFileType,
dictFileTooBig: lg.file_too_big + ' ' + lg.file_size_limit +
config.upload.fileSizeLimit + ' ' + lg.mb,
acceptedFiles: acceptFiles,
autoProcessQueue: true,
init: function() {
var dropzone = this;
$('.dz_cross_btn').unbind().on('click', function() {
$('.file_manager .upload_file').toggle();
});
},
sending: function(file, xhr, formData) {
formData.append("mode", "add");
formData.append("currentpath", path);
$('.upload_file .dz_cross_btn').attr('disabled', 'disabled');
setTimeout(function() {}, 10000);
},
success: function(file, response) {
var response = jQuery.parseJSON(response),
data = response.data.result,
$this = $(file.previewTemplate);
if (data.Code == 0) {
setTimeout(function() {
$this.find(".dz-upload").addClass("success");
}, 1000);
$this.find(".dz-upload").css('width', "100%").html("100%");
alertify.success(lg.upload_success);
} else {
$this.find(".dz-upload").addClass("error");
$this.find(".dz-upload").css('width', "0%").html("0%");
alertify.error(data.Error);
}
getFolderInfo(path);
},
totaluploadprogress: function(progress) {},
complete: function(file) {
if (file.status == "error") {
alertify.error(lg.ERROR_UPLOADING_FILE);
}
$('.upload_file .dz_cross_btn').removeAttr('disabled');
getFolderInfo(path);
}
});
});
}
getDetailView(fileRoot);
})(jQuery);
//@ sourceURL=utility.js

View File

@ -2090,23 +2090,32 @@
'</div>'
].join("\n")),
events: function() {
// Inherit all default events of InputControl
return _.extend({}, Backform.InputControl.prototype.events, {
"click .select_item": "onSelect",
});
"click .select_item": "onSelect"
});
},
onSelect: function(e) {
onSelect: function(ev) {
var dialog_type = this.field.get('dialog_type');
supp_types = this.field.get('supp_types'),
btn_primary = this.field.get('btn_primary'),
dialog_title = this.field.get('dialog_title');
var params = {
supported_types: supp_types,
dialog_type: dialog_type,
dialog_title: dialog_title,
btn_primary: btn_primary
};
dialog_title = this.field.get('dialog_title'),
params = {
supported_types: supp_types,
dialog_type: dialog_type,
dialog_title: dialog_title,
btn_primary: btn_primary
};
pgAdmin.FileManager.init();
pgAdmin.FileManager.show_dialog(params);
// Stop prograting the event further
ev = ev || window.event;
if (ev) {
ev.cancelBubble = true;
ev.stopPropagation();
}
},
storage_dlg_hander: function(value) {
var field = _.defaults(this.field.toJSON(), this.defaults),