docker-ubuntu-vnc-desktop/noVNC/media/js/QFolderTree.js

228 lines
6.6 KiB
JavaScript
Executable File

var gNodeIdCount = 100;
DEFAULT_POOL_FOLDER_ID = "";
MODE_SINGLE_FOLDER = 1;
MODE_SINGLE_FILE = 2;
FILTER_FOLDER = 'folder';
FILTER_EXPORT = 'export';
FILTER_ISO = 'iso';
FILTER_IMG = 'img';
function QFolderTree(mode, filter)
{
//public methods
QFolderTree.prototype.initTree = initTree;
QFolderTree.prototype.destroy = destroy;
QFolderTree.prototype.expandAll = expandAll;
QFolderTree.prototype.collapseAll = collapseAll;
QFolderTree.prototype.onItemlClick = onItemlClick;
QFolderTree.prototype.getItemInfo = getItemInfo;
QFolderTree.prototype.selectFolder = selectFolder;
this.FolderList = [];
this.FocusID = "";
this.Mode = mode ? mode : MODE_SINGLE_FOLDER;
this.Filter = filter ? filter : FILTER_FOLDER;
this.bInit = false;
this.BodyObgID = '';
this.argDefaultFolders = [];
this.bAutoSelect = false;
var idTreeViewRoot = 'treeviewroot';
var idTreeViewControl = 'treeviewcontrol';
var idTreeViewCollapse = 'treeviewcollapse';
var idTreeViewExpand = 'treeviewexpand';
function initTree(bodyObjID, shareList, rootName) {
gNodeIdCount = 100;
this.FolderList = shareList;
this.BodyObgID = bodyObjID;
var tmpStr = '<div id="'+idTreeViewControl+'"><a href="?#" id="'+idTreeViewCollapse+'">Collapse All</a> | <a href="?#" id="'+idTreeViewExpand+'">Expand All</a></div>' +
'<ul id="'+idTreeViewRoot+'" class="filetree treeview-famfamfam">'+
'<li><span id="node_'+(gNodeIdCount++)+'" class="folder" style="background-image: url(\'../../../media/img/treeview/nas.png\');background-position:0 3px;padding-left:22px;">'+rootName+'</span><ul>';
for (var i=0; i<this.FolderList.length; i++) {
this.FolderList[i].id = 'node_' + gNodeIdCount;
if (this.FolderList[i].name == 'Public') {
this.FocusID = this.FolderList[i].id;
DEFAULT_POOL_FOLDER_ID = this.FolderList[i].id;
}
tmpStr += '<li><span id="node_'+gNodeIdCount+'" class="'+this.FolderList[i].type+'">'+this.FolderList[i].name+'</span><ul id="root_node_'+(gNodeIdCount++)+'" style="display:none;"></ul></li>';
}
tmpStr += '</ul></li></ul>';
document.getElementById(bodyObjID).innerHTML = tmpStr;
var parentElm = this;
$('#'+idTreeViewRoot).treeview({
control:'#'+idTreeViewControl,
toggle: function() {
var elemID = $(this).find(">span").attr('id');
if (!parentElm.bInit || elemID == 'node_100') {
return false;
}
parentElm.onItemlClick(elemID);
}
});
this.collapseAll();
this.bInit = true;
}
function destroy() {
if (this.BodyObgID) {
document.getElementById(this.BodyObgID).innerHTML = '';
}
this.FolderList = [];
}
function expandAll() {
document.getElementById(idTreeViewExpand).click();
}
function collapseAll() {
document.getElementById(idTreeViewCollapse).click();
document.getElementById('node_100').click();
}
function getItemInfo(elemID) {
var item = null;
for (var i=0; i<this.FolderList.length; i++) {
if (this.FolderList[i].id == elemID) {
item = this.FolderList[i];
break;
}
}
return item;
}
function onItemlClick(elemID) {
var item = this.getItemInfo(elemID);
if (!item) {
return;
}
if (item.type == 'file') {
UpdateFocusFile(item.id); // implement by owner page
} else {
UpdateFocusFolder(item.id); // implement by owner page
}
if (item.load || (item.type != 'folder')) {
return;
}
var url = "/folderlist/?path=" + item.fullpath + "&filter=" + this.Filter + "&id=" + item.id;
makeRequest(url, '', _callbk_load_folder_list, this);
}
function selectFolder(folders) {
if (folders.length < 2) {
return;
}
this.argDefaultFolders = folders
this.bAutoSelect = true;
var find_cnt = 0;
var cur_path = '/' + folders[0] + '/' + folders[1] + '/';
for (var t=2;t<folders.length;t++) {
cur_path += folders[t] + '/';
for (var i=0; i<this.FolderList.length; i++) {
if (this.FolderList[i].fullpath == cur_path) {
find_cnt = t;
if (!this.FolderList[i].load) {
document.getElementById(this.FolderList[i].id).click();
}
break;
}
}
}
if (find_cnt == (folders.length-1)) {
this.bAutoSelect = false;
}
}
}
function _callbk_load_folder_list(http_request, objTree)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
if (!json.success) {
window.location.href = window.location.href
return;
}
var item = null;
for (var i=0; i<objTree.FolderList.length; i++) {
if (objTree.FolderList[i].id == json.id) {
objTree.FolderList[i].load = true;
item = objTree.FolderList[i];
break;
}
}
if (!item) {
return;
}
var tmpStr = '';
// list folder items
for (var i=0; i<json.list_data.length; i++) {
if (json.list_data[i].type != 'folder') {
continue;
}
var newItem = json.list_data[i];
newItem.id = 'node_' + gNodeIdCount;
FileFolderTree.FolderList.push(newItem);
tmpStr += '<li><span id="node_'+gNodeIdCount+'" class="'+newItem.type+'">'+newItem.name+'</span><ul id="root_node_'+gNodeIdCount+'" style="display:none;"></ul></li>';
gNodeIdCount++;
}
// list file items
for (var i=0; i<json.list_data.length; i++) {
if (json.list_data[i].type != 'file') {
continue;
}
var newItem = json.list_data[i];
newItem.id = 'node_' + gNodeIdCount;
FileFolderTree.FolderList.push(newItem);
tmpStr += '<li><span id="node_'+gNodeIdCount+'" class="'+newItem.type+'" onclick="UpdateFocusFile(this.id)">'+newItem.name+'</span></li>';
gNodeIdCount++;
}
var branches = $(tmpStr).appendTo("#root_"+json.id);
$("#root_"+json.id).treeview({
add: branches
});
if (objTree.bAutoSelect) {
objTree.selectFolder(objTree.argDefaultFolders);
}
}
}
}
function GetShareShortPath(shareMap, fullpath)
{
var strRet = fullpath;
for (var i=0; i<shareMap.length; i++) {
if (fullpath.indexOf(shareMap[i].fullpath) == 0) {
strRet = fullpath.replace(shareMap[i].fullpath, shareMap[i].shortpath + '/');
break;
}
}
return strRet;
}