flexview/webif/plugin/flexview/script.js

1342 lines
38 KiB
JavaScript

var spinner = '<div class=spinner><img border=0 src=/img/loading.gif>' +
'Loading... Please wait...</div>';
var did=0;
var saveTO={};
function saveCurState() {
// Save current state to session storage
clearTimeout(saveTO);
sessionStorage.fvConfig = JSON.stringify(fvConfig);
sessionStorage.flLoaded = JSON.stringify(flLoaded);
sessionStorage.flData = JSON.stringify(flData);
$.jgrid.saveState("dirlist", {storageType: "sessionStorage"});
$.jgrid.saveState("filelist",{storageType: "sessionStorage"});
//$.jgrid.saveState("dirlist" );
//$.jgrid.saveState("filelist");
console.log("saveCurState: saved current state");
//saveTO=setTimeout(saveCurState,fvConfig.saveInt);
};
function loadCurState() {
// Restore current state from session storage
fvConfig = JSON.parse(sessionStorage.fvConfig);
flLoaded = JSON.parse(sessionStorage.flLoaded);
flData = JSON.parse(sessionStorage.flData);
$.jgrid.loadState("dirlist", null, {storageType: "sessionStorage"});
$.jgrid.loadState("filelist", null, {storageType: "sessionStorage"});
//$.jgrid.loadState("dirlist" );
//$.jgrid.loadState("filelist");
console.log("loadCurState: reloaded saved state");
};
function loadServerState() {
// Reload grids from server
flLoaded={};
flLoadTime={};
flData=[];
$("#dirlist").jqGrid('clearGridData')
.jqGrid('setGridParam',{url: "genJSON.jim", datatype: "json", treedatatype: "json"})
.trigger('reloadGrid', [{ page: 1}]);
sessionStorage.dlLoadTime = new Date();
console.log("loadServerState: loading server state");
};
function saveExpSel() {
// Save expanded, Selected state of current directory tree
var sel = {};
fvConfig.sel = {};
fvConfig.exp = {};
fvConfig.excl = {};
var nodes = $('#dirlist').jqGrid('getRootNodes');
for (var i=0; i<nodes.length; i++)
{
var node=nodes[i];
var id=node.id;
// special directories starting with _ [
var special = false;
var d = node.title.trim();
if (d[0]== "_"
|| d[0] == "[" ) {special=true;}
if (node.sel!= 'Yes')
{
if (!special && sel[node.parent]==true)
{
fvConfig.excl[id] = true;
}
}
else
{
sel[id] = true;
if (special || sel[node.parent]!=true)
{
fvConfig.sel[id] = true;
}
}
if (!node.isLeaf)
{
if (node.expanded)
{
fvConfig.exp[id] = true;
}
if ($('#dirlist').jqGrid('isNodeLoaded',node))
{
nodes= nodes.concat($('#dirlist').jqGrid('getNodeChildren',node));
}
}
}
}
function adjExpSel() {
// Apply Saved expanded, Selected state of current directory tree
var sel = {};
var dirlist =[];
var reload = false;
var nodes = $('#dirlist').jqGrid('getRootNodes');
if (fvConfig.curdirsel!=null)
{
$('#dirlist').jqGrid('setSelection',fvConfig.curdirsel,false);
}
for (var i=0; i<nodes.length; i++)
{
var node=nodes[i];
var id=node.id;
// special directories starting with _ [
var special = false;
var d = node.title.trim();
if (d[0]== "_"
|| d[0] == "[" ) {special=true;}
// Expand/contract nodes as needed
if (!node.isLeaf)
{
if (fvConfig.exp[id])
{
if (!node.expanded)
{
// Should be expanded
$('#dirlist').jqGrid('expandNode',node);
if ($('#dirlist').jqGrid('isVisibleNode',node))
{
$('#dirlist').jqGrid('expandRow',node);
}
console.log('Expanded '+id);
}
}
else
{
if (node.expanded)
{
// Should not be expanded
$('#dirlist').jqGrid('collapseRow',node);
$('#dirlist').jqGrid('collapseNode',node);
console.log('Collapsed '+id);
}
}
if ($('#dirlist').jqGrid('isNodeLoaded',node))
{
nodes= nodes.concat($('#dirlist').jqGrid('getNodeChildren',node));
}
}
// Select/deselect directories
if (fvConfig.sel[id] ||
(!special && sel[node.parent] && !fvConfig.excl[id]))
{
// Selected
$("#dirlist").jqGrid('setCell',id,"sel","Yes");
sel[id]=true;
}
else
{
// Not selected
$("#dirlist").jqGrid('setCell',id,"sel","No");
}
// Show Selected directories
if (sel[id] ||
(id== fvConfig.curdirsel))
{
if (flLoaded[id])
{ // Row already loaded
showDir(id);
reload = true;
}
else
{ // Not yet loaded
dirlist.push(node.dir);
flLoaded[id] = true;
flLoadTime[id] = new Date();
}
}
else
{
if (flLoaded[id])
{ // loaded
hideDir(id);
reload = true;
}
}
}
if (dirlist.length>0 )
{
requestDir(dirlist);
}
else if (reload)
{
reloadTable();
}
}
function cmpColModel(grid,origCM) {
// compare grid colModels to find differences in column
// size, position, visibilty, ( sort order, filters }
var curCM = $(grid).jqGrid('getGridParam','colModel');
var difCM = {};
for (var i=0; i<origCM.length; i++)
{
var oCol = origCM[i];
var name = oCol.name;
var dCol = {};
var chg = false;
for (var j=0; j<curCM.length; j++)
{
if (name == curCM[j].name)
{
var cCol = curCM[j];
if (i != j)
{
dCol.pos =j;
chg=true;
}
break;
}
}
if (oCol.width != cCol.width)
{
dCol.width = cCol.width;
chg=true;
}
if (oCol.hidden != cCol.hidden)
{
dCol.hidden = cCol.hidden;
chg=true;
}
if (chg)
{
difCM[name] =dCol;
}
}
return difCM;
};
function adjColModel(grid,origCM,difCM) {
// apply colModel changes from saved config to current grid
// size, position, visibilty, ( sort order, filters }
var curCM = $(grid).jqGrid('getGridParam','colModel');
var remap = [];
for (var i=0; i<curCM.length; i++)
{
var cCol = curCM[i];
var name = cCol.name;
var oCol = cCol;
remap[i]=i;
// Restore column to default
for (var j=0; j<origCM.length; j++)
{
if (name == origCM[j].name)
{
var oCol = origCM[j];
remap[i]=j;
break;
}
}
if (oCol.width != cCol.width)
{
$(grid).jqGrid('resizeColumn',name,oCol.width);
}
if (oCol.hidden != cCol.hidden)
{
if (oCol.hidden)
{
$(grid).jqGrid('hideCol',name);
}
else
{
$(grid).jqGrid('showCol',name);
}
}
if (difCM.hasOwnProperty(name))
{
// Apply changes to default
var dCol = difCM[name];
if ('pos' in dCol)
{
remap[i]=dCol.pos;
}
if ('width' in dCol)
{
$(grid).jqGrid('resizeColumn',name,dCol.width);
}
if ('hidden' in dCol)
{
if (dCol.hidden)
{
$(grid).jqGrid('hideCol',name);
}
else
{ $(grid).jqGrid('showCol',name);
}
}
}
}
$(grid).jqGrid('remapColumns',remap,true);
};
function setTableWidth() {
if (fvConfig.dircolwidth)
{
$("#dirlist").jqGrid('setGridWidth',fvConfig.dircolwidth);
}
else
{
$("#dirlist").jqGrid('resetGridWidth');
}
if (fvConfig.dircolhidden)
{
$("#dirhead").hide('slow');
$("#dircell").hide('slow');
$("#show").show();
$("#flhead").height($("#show").outerHeight());
if (fvConfig.tablewidth)
{
$("#filelist").jqGrid('setGridWidth',fvConfig.tablewidth);
}
else
{
$("#filelist").jqGrid('resetGridWidth');
}
}
else
{
$("#dirhead").show('slow');
$("#dircell").show('slow');
$("#show").hide();
if (fvConfig.tablewidth)
{
$("#filelist").jqGrid('setGridWidth',fvConfig.tablewidth
-$("#dircell").outerWidth());
}
else
{
$("#filelist").jqGrid('resetGridWidth');
}
}
};
function setTableHeight() {
if (fvConfig.tabledepth)
{
var dirHeadSz = $("#dircell thead").outerHeight(true);
var flHeadSz = $("#flcell thead").outerHeight(true);
$("#dirlist").jqGrid('setGridHeight',fvConfig.tabledepth-dirHeadSz);
$("#filelist").jqGrid('setGridHeight',fvConfig.tabledepth-flHeadSz);
}
else
{
$("#dirlist").jqGrid('setGridHeight','auto');
$("#filelist").jqGrid('setGridHeight','auto');
}
};
function resizeFl(xchange) {
// Set FileList table width to take rest of table width after DirList
fvConfig.dircolwidth = $("#dirlist").jqGrid('getGridParam','width')-xchange;
if (fvConfig.tablewidth)
{
fvConfig.flcolwidth = $("#filelist").jqGrid('getGridParam','width')+xchange;
}
setTableWidth();
};
function applyConfig() {
// Apply saved configuration
// Dir tree
adjColModel('#dirlist', dirColModel, fvConfig.dirColChg);
adjExpSel();
// File list
adjColModel('#filelist', flColModel, fvConfig.flColChg);
// Table sizes
setTableWidth();
setTableHeight();
// display config name
statusMsg("Applied configuration- " + fvConfig.name);
};
function statusMsg(msg) {
$("#topmsg").show().html(msg).delay(5000).hide('slow');
}
function updateConfigList(data, status) {
// Message for update status
var output = data.split("<br>");
statusMsg(output[0]);
// Update configuration selection lists
$('#configllist').html(output[1]);
$('#configslist').html(output[1]);
console.log(output[0]);
};
function showDir(rowid) {
// Show already loaded directory in filelist table
console.log("showDir Row " + rowid);
var dir = $("#dirlist").jqGrid('getCell',rowid,"dir")
for (var i=0; i < flData.length; i++)
{
if (flData[i].dir == dir)
{
flData[i].showrow =true;
// setCell only works on visible rows!
}
}
};
function hideDir(rowid) {
// Hide already displayed directory in filelist table
console.log("hideDir Row " + rowid);
var dir = $("#dirlist").jqGrid('getCell',rowid,"dir")
for (var i=0; i < flData.length; i++)
{
if (flData[i].dir == dir)
{
flData[i].showrow =false;
id = flData[i].id;
$("#filelist").jqGrid('setCell',id,"showrow","false");
$("#filelist").jqGrid('setCell',id,"sel","false");
//$("#"+flData[i].id).hide();
}
}
};
function removeDir(dir) {
// Remove entries for directory from filelist table
var first = -1;
var ct = 0;
// find first entry
for (var i=0; i < flData.length; i++)
{
if (flData[i].dir == dir)
{
first = i;
ct=1;
break;
}
}
if (first >-1)
{
// count the additional entries
for (var i=first+1; i < flData.length; i++)
{
if (flData[i].dir != dir)
{
break;
}
ct++;
}
flData.splice(first,ct);
}
console.log("removeDir " + dir + " entries removed: " + ct);
};
function reloadDir(dir) {
var rowid= getRowId(dir);
flLoaded[rowid]=true;
flLoadTime[rowid]=new Date();
removeDir(dir);
requestDir(dir);
};
function dirSelected(rowid) {
if (fvConfig.curdirsel != null)
{
var record = $("#dirlist").jqGrid('getLocalRow',fvConfig.curdirsel);
if (record.sel!="Yes")
{
hideDir(fvConfig.curdirsel);
}
fvConfig.curdirsel = null;
}
// Show current directory and all sub directories
var record = $("#dirlist").jqGrid('getLocalRow',rowid);
var showlist = [record];
var dirlist = [];
var reload=false;
for (var rid=0;rid<showlist.length;rid++)
{
rowid=showlist[rid]._id_
$("#dirlist").jqGrid('setCell',rowid,"sel","Yes");
fvConfig.sel[rowid]=true;
if (flLoaded[rowid])
{ // Row already loaded
showDir(rowid);
reload=true;
}
else
{ // Not yet loaded
dirlist.push(showlist[rid].dir);
flLoaded[rowid] = true;
flLoadTime[rowid] = new Date();
}
if (showlist[rid].isLeaf == false
&& showlist[rid].expanded == true )
{
// get the children
var kids = $("#dirlist").jqGrid('getNodeChildren',showlist[rid]);
for (i=0;i<kids.length;i++)
{
// ignore special directories starting with _ [
var d = kids[i].title.trim();
if (d[0] != "_"
&& d[0] != "[" )
{
id=kids[i]._id_;
if (kids[i].sel != "Yes")
{
//console.log("kid "+id);
showlist.push(kids[i]); // add to list to be shown
}
}
}
}
}
if (dirlist.length>0 )
{
requestDir(dirlist);
}
else if (reload)
{
reloadTable();
}
};
function dirDeSelected(rowid) {
// Hide current directory and all sub directories
var record = $("#dirlist").jqGrid('getLocalRow',rowid);
var showlist = [record];
for (rid=0;rid<showlist.length;rid++)
{
rowid=showlist[rid]._id_
$("#dirlist").jqGrid('setCell',rowid,"sel","No");
fvConfig.sel[rowid]=false;
hideDir(rowid);
if (showlist[rid].isLeaf == false)
{
// get the children
var kids = $("#dirlist").jqGrid('getNodeChildren',showlist[rid]);
for (i=0;i<kids.length;i++)
{
id=kids[i]._id_;
if (kids[i].sel == "Yes")
{
//console.log("kid "+id);
showlist.push(kids[i]); // add to list to be hidden
}
}
}
}
reloadTable();
};
function triggerToolbar() {
console.log("triggerToolbar");
$("#filelist")[0].triggerToolbar();
};
function reloadTable() {
var start = new Date();
$('#flspin').show();
$("#filelist").jqGrid('clearGridData')
.jqGrid('setGridParam', { data: flData })
.trigger('reloadGrid', [{ page: 1}]);
$("#filelist")[0].triggerToolbar();
$('#flspin').hide();
var end = new Date();
var elapse = end-start;
console.log("reloadTable, Time " + elapse/1000);
};
function requestDir(dirlist) {
// Issue Ajax request to return directory contents for filelist table
console.log("requestDir " + dirlist);
$('#flspin').show();
var start = new Date();
$.getJSON("genJSON.jim?mode=filelist&dir="+dirlist,
function(data, status) {
// Call back function - load table
flData = flData.concat(data.rows);
reloadTable();
var end = new Date();
var elapse = end-start;
console.log("Loaded status= " + status + ", Time " + elapse/1000);
});
};
function getRowId(path) {
// Change all special chars to - to create id value
var id= "";
var chars="[";
chars=chars+"\\x01-\\x2f";
chars=chars+"\\x3a-\\x40";
chars=chars+"\\x5b-\\x5e";
chars=chars+"\\x7b-\\x7f";
chars=chars+"]";
re = new RegExp(chars,"g");
id = path.replace(re,"-");
return id;
}
function viewRow(grid,rowid) {
$(grid).jqGrid('viewGridRow',rowid,{modal:true,top:1,left:1});
};
function reloadNode(rowid) {
var record = $("#dirlist").jqGrid('getLocalRow',rowid);
record.isLeaf=false;
$("#dirlist").jqGrid('expandNode', record);
$("#dirlist").jqGrid('reloadNode', record);
};
function selAll(event) {
// Table header checbbox clicked
console.log("Checkbox " + $(event.target).is(":checked"));
event.stopPropagation();
if($(event.target).is(":checked"))
{
console.log("checkbox selected");
//$('#chkbox').val("Yes").prop('checked', true); // select all
$('input.fs').prop('checked', true).trigger('change');
}
else
{
console.log("checkbox deselected");
//$('#chkbox').prop('checked', false); // deselect all
$('input.fs').prop('checked', false).trigger('change');
}
inputChanged();
};
function fmtCheckbox(cellvalue, options, rowObject) {
// Format checkbox column as expected by browse
var file = encodeURI(rowObject.dir + "/" + rowObject.fname);
var fmtStr=
'<input type="checkbox" class="fs fs'+rowObject.ftype+'">'+
'<a class="bf" display=none file="'+file+'" href=#></a>'
;
return fmtStr;
};
function fmtHTML(cellvalue, options, rowObject)
{
//console.log("fmtHTML " + cellvalue);
return cellvalue;
}
function fmtIcon(cellvalue, options, rowObject)
{
//console.log("fmtIcon " + cellvalue);
if (cellvalue == 1)
{
var label = options.colModel.formatoptions.label
return options.colModel.formatoptions.img;
}
else {
var name= options.colModel.name;
rowObject[name] = 0;
return " ";
}
}
function fmtfname(cellvalue, options, rowObject)
{
// Format fname with hover display of title, synopsis & guidance
// Generate attributes expected by Browse context menu
//var title = rowObject.title+"\n"+rowObject.synopsis;
//if (rowObject.guidance != "")
//{
// title += "\nGUIDANCE: " + rowObject.guidance;
//}
var title = "<b>"+rowObject.title+"</b><br>"+rowObject.synopsis;
if (rowObject.guidance != "")
{
title += "</br><b>Guidance: </b>" ;
if (rowObject.GGuidance == 1)
{
title += icons.Gguidance +" ";
}
if (rowObject.Guidance == 1)
{
title += icons.guidance +" ";
}
title += rowObject.guidance;
}
title = encodeURI(title);
//console.log("fmtfname " + cellvalue);
var file = rowObject.dir + "/" + cellvalue;
var fmtStr= "<a class=bf title=\"" +title+
"\" file=\""+file+"\" type="+rowObject.ftype+
' onclick="viewFile(\''+rowObject.id+'\')" '+
//" href=#" +
" >" +
cellvalue +
"</a>";
return fmtStr;
}
function fmtChannel(cellvalue, options, rowObject)
{
// Add Channel icon to channel name
var name = cellvalue;
var icon = '<img class="fvIcon" src="/img/channels/out/'+name+'.png"> ' ;
var fmtStr= icon + name;
return fmtStr;
}
function fmtThumbnail(cellvalue, options, rowObject)
{
// Return thumbnail image if it exists
var file = rowObject.dir + "/" + rowObject.fname;
if (rowObject.thmok)
{
var img = '<img class="bmp va" src="/browse/bmp.jim?file='+file+'"> ' ;
return img;
}
return " ";
}
function fmtGuidance(cellvalue, options, rowObject)
{
// Format Guidance text with guidance flag icon
var fmtStr='<span class="guidetext" title="'+ encodeURI(cellvalue)+'" >';
if (rowObject.GGuidance == 1)
{
fmtStr += icons.Gguidance +" ";
}
if (rowObject.Guidance == 1)
{
fmtStr += icons.guidance +" ";
}
fmtStr += cellvalue + '</span>';
return fmtStr;
}
function fmtOpt(cellvalue, options, rowObject)
{
// Format File list Opt+ button
// Generate attributes expected by Browse context menu
var attr, col, value;
did = did+1;
var attrlist = 'did="did'+did+'" ';
for (attr in optmenuattr) {
col = optmenuattr[attr];
value = rowObject[col];
if (!value)
{
value=0;
}
attrlist += attr +'="'+value+'" ';
}
$('#'+rowObject.id).addClass('bf');
//console.log("fmtOpt " + cellvalue);
//var file = encodeURIComponent(rowObject.dir + "/" + rowObject.fname);
var file = rowObject.dir + "/" + rowObject.fname;
var fmtStr=
'<div class="bf" id="did'+did+'">' +
'<a class="bf" display=none file="'+file+'" href=#></a>' +
'<a href=#>' +
'<img class="'+cellvalue+' va" border=0 width=45 '+
attrlist +
' src="/images/181_1_00_Help5_OPT_Plus.png">'+
'</a>'+
'<div class="results blood" style="margin: 0 0 0 5em"></div>' +
'</div>'
;
return fmtStr;
}
function fmtDOpt(cellvalue, options, rowObject)
{
// Format Directory Opt+ button
// Generate attributes expected by Browse context menu
var attr, col, value;
var attrlist = "";
for (attr in dirmenuattr) {
col = dirmenuattr[attr];
value = rowObject[col];
if (!value)
{
value=0;
}
attrlist += attr +'="'+value+'" ';
}
//console.log("fmtOpt " + cellvalue);
//var file = encodeURIComponent(rowObject.dir);
var file = rowObject.dir;
var fmtStr=
'<a class="dbf" display=none file="'+file+'" href=#></a>' +
'<span class="iconset"></span>' +
'<a href=#>' +
'<img class="'+cellvalue+' va" border=0 width=45 '+
attrlist +
' src="/images/181_1_00_Help5_OPT_Plus.png">'+
'</a>'+
'<div class="results blood" style="margin: 0 0 0 5em"></div>'
;
return fmtStr;
}
// Initialize tables when document ready
$(function() {
//==================================================================
// Resize of main tables
//==================================================================
// resize table width (file list width)
$( "#fvtable" ).resizable({
handles: "e",
helper: "ui-resizable-helper",
stop: function( event, ui ) {
console.log("fvtable x= "+ ui.size.width +" y="+ ui.size.height);
var xchange = ui.originalSize.width - ui.size.width;
if (xchange !=0)
{
fvConfig.tablewidth = ui.size.width;
fvConfig.flcolwidth = $("#filelist").jqGrid('getGridParam','width') -xchange;
setTableWidth();
}
}
} );
// resize table height
$( "#dirrow" ).resizable({
handles: "s",
helper: "ui-resizable-helper",
stop: function( event, ui ) {
console.log("dirrow x= "+ ui.size.width +" y="+ ui.size.height);
if (ui.originalSize.height != ui.size.height)
{
fvConfig.tabledepth = ui.size.height;
setTableWidth();
setTableHeight();
}
}
} );
// resize directory column width
$( "#dirhead" ).resizable({
handles: "e",
minWidth: 0,
helper: "ui-resizable-helper",
stop: function( event, ui ) {
console.log("dircell x= "+ ui.size.width +" y="+ ui.size.height);
var xchange = ui.originalSize.width - ui.size.width;
if (xchange !=0)
{
resizeFl(xchange);
}
}
} );
//==================================================================
// Top Buttons
//==================================================================
$('#reload').button().enable()
.click(function() {
loadServerState();
});
$('#load').button().enable()
.click(function() {
$('#configload').dialog({
autoOpen: true,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Load": function() {
var setname = $('#configllist').val();
$(this).dialog('close');
var start = new Date();
// Issue Ajax request to return specified configuration set
console.log("load config: " + setname);
$('#topspin').show();
$.getJSON("loadConfig.jim",
{name: setname},
function(data, status) {
// Call back function - load table
if ('errmsg' in data)
{
console.error("Load error= " + data.errmsg);
statusMsg("Load error= " + data.errmsg);
} else
{
//Object.assign(fvConfig,data);
$.extend(fvConfig,data);
fvConfig.name = setname;
applyConfig();
saveCurState();
var end = new Date();
var elapse = end-start;
console.log("Loaded configuration= " + setname + ", Time " + elapse/1000);
}
$('#topspin').hide();
});
},
"Delete": function() {
var setname = $('#configllist').val();
$(this).dialog('close');
$.post('deleteConfig.jim',
{name: setname},
updateConfigList
);
},
"Cancel": function() {
$(this).dialog('close');
}
},
});
});
$('#save').button().enable()
.click(function() {
$('#configsave').dialog({
autoOpen: true,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Save": function() {
var setname = $('#configname').val();
$(this).dialog('close');
fvConfig.name = setname;
fvConfig.dirColChg = cmpColModel('#dirlist', dirColModel);
fvConfig.flColChg = cmpColModel('#filelist', flColModel);
saveExpSel();
$.post('saveConfig.jim',
{name: setname,
fvconfig: JSON.stringify(fvConfig)
},
updateConfigList
);
saveCurState();
},
"Cancel": function() {
$(this).dialog('close');
}
}
});
});
$('#dircolumn').button().enable()
.click(function() {
$("#dirlist").jqGrid('columnChooser', {
caption: "Select Directory tree columns",
done : function (perm) {
if (perm) {
// "OK" button are clicked
this.jqGrid("remapColumns", perm, true);
// the grid width is probably changed co we can get new width
// and adjust the width of other elements on the page
setTableWidth();
}
}
});
});
$('#flcolumn').button().enable()
.click(function() {
$("#filelist").jqGrid('columnChooser', {
caption: "Select file list columns",
done : function (perm) {
if (perm) {
// "OK" button are clicked
this.jqGrid("remapColumns", perm, true);
// the grid width is probably changed co we can get new width
// and adjust the width of other elements on the page
setTableWidth();
}
}
});
});
$('#hide').button().enable()
.click(function() {
fvConfig.dircolhidden = true;
setTableWidth();
});
$('#show').hide();
$('#show').button().enable()
.click(function() {
fvConfig.dircolhidden = false;
setTableWidth();
});
$('#topspin').hide();
$('#dirspin').hide();
$('#flspin').hide();
//==================================================================
// Directory tree table
//==================================================================
$("#dirlist").jqGrid({
url: "genJSON.jim",
datatype: "local",
//datatype: "json",
mtype: "POST",
colModel: dirColModel,
//colMenu: true,
loadonce: false, // needed for incremental load
sortname: "title",
viewrecords: true,
gridview: true,
autoencode: true,
//altRows: true,
//altClass: 'odd',
sortable: true,
shrinkToFit: false,
treeGrid: true,
treeGridModel: 'adjacency',
ExpandColumn: 'title',
onSelectRow: function(rowid, status, e){
console.log("Row " + rowid + " selected")
//if (rowid == fvConfig.curdirsel != null) return;
if (fvConfig.curdirsel != null)
{
var record = $("#dirlist").jqGrid('getLocalRow',fvConfig.curdirsel);
if (record.sel!="Yes")
{
hideDir(fvConfig.curdirsel);
}
}
fvConfig.curdirsel = rowid;
if (flLoaded[rowid])
{
showDir(rowid);
reloadTable();
}
else
{
var record = $("#dirlist").jqGrid('getLocalRow',rowid);
flLoaded[rowid] = true;
flLoadTime[rowid] = new Date();
requestDir(record.dir);
}
},
beforeSelectRow : function( rowid, event) {
if($(event.target).is(":checkbox"))
{
if($(event.target).is(":checked"))
{
console.log("Row " + rowid + " checkbox selected");
dirSelected(rowid);
reloadTable();
}
else
{
console.log("Row " + rowid + " checkbox deselected");
dirDeSelected(rowid);
}
return false;
}
return true;
},
serializeGridData: function(postData) {
console.log("serializeGridData");
//for (i in postData)
//{
// console.log(i +": "+postData[i]);
//}
//console.log(postData.nodeid);
$('#dirspin').show();
dirstart = new Date();
if ("nodeid" in postData)
{
postData.dir = $("#dirlist").jqGrid('getCell',postData.nodeid,"dir")
postData.mode = "children";
}
if (!("mode" in postData))
{
postData.mode = "parent";
postData.dir = $('#dir').text();
}
return postData;
},
gridComplete: function() {
var end = new Date();
var elapse = end-dirstart;
$('#dirspin').hide();
setTimeout(adjExpSel,500);
dirListReady();
$('#dirlist tr:nth-child(even)').addClass('even').removeClass('odd');
$('#dirlist tr:nth-child(odd)').addClass('odd').removeClass('even');
console.log("gridComplete dirTree, Time " + elapse/1000);
},
resizeStop: function(newwidth,index) {
setTableWidth();
},
beforeExpandTreeGridNode: function( id, record ){
console.log('beforeExpandTreeGridNode '+id);
fvConfig.exp[id]=true;
},
beforeCollapseTreeGridNode: function( id, record ){
console.log('beforeCollapseTreeGridNode '+id);
delete fvConfig.exp[id];
},
height: "100%"
}),
$("#dirlist").jqGrid('filterToolbar',{searchOperators: true,
//$("#dirlist").jqGrid('filterToolbar',{searchOperators: false,
beforeSearch:function() {
this.p.treedatatype = 'local';
this.p.loadonce = true;
},
afterSearch:function() {
this.p.loadonce = false;
this.p.treedatatype = 'json';
// Hide the filelist table
for (var i=0; i < flData.length; i++)
{
flData[i].showrow =false;
id = flData[i].id;
$("#filelist").jqGrid('setCell',id,"showrow","false");
$("#filelist").jqGrid('setCell',id,"sel","false");
}
reloadTable();
},
});
//==================================================================
// File list table
//==================================================================
$("#filelist").jqGrid({
//url: "genJSON.jim",
datatype: "local",
data: flData,
mtype: "POST",
colModel: flColModel,
//colMenu: true,
//loadonce: true,
//multiselect: true,
// multiboxonly: false,
// multikey: "ctrlKey",
sortname: "fname",
viewrecords: true,
gridview: true,
autoencode: true,
//altRows: true,
//altClass: 'odd',
sortable: true,
rowNum: 100000,
shrinkToFit: false,
beforeSelectRow : function( rowid, event) {
if($(event.target).is(":checkbox"))
{
if($(event.target).is(":checked"))
{
console.log("Row " + rowid + " checkbox selected")
}
else
{
console.log("Row " + rowid + " checkbox deselected");
$('#chkbox').prop('checked', false); // deselect all
}
inputChanged();
return false;
}
return false;
},
onSelectRow: function(rowid, status, e){
console.log("Row " + rowid + " selected, status " + status )
},
gridComplete: function() {
console.log("gridComplete filelist");
fileListReady();
$('#filelist tr:nth-child(even)').addClass('even');
$('#filelist tr:nth-child(odd)').addClass('odd');
//triggerToolbar();
$('#chkbox').prop('checked', false); // deselect all
inputChanged();
},
resizeStop: function(newwidth,index) {
setTableWidth();
},
// onCellSelect: function(rowid,iCol,cellcontent,e){
// console.log("Cell "+ iCol + " Row " + rowid + " selected, content " + cellcontent)
// },
//width: 700,
height: "100%"
})
,$("#filelist").jqGrid('filterToolbar',{searchOperators: true}) ;
//,$("#filelist").jqGrid('filterToolbar',{searchOperators: false}) ;
// Extend jqGrid with resetGridWidth function
// Set grid width to total width of visible columns
$.jgrid.extend({resetGridWidth: function() {
var gid = this.selector;
var colmod=$(this).jqGrid('getGridParam','colModel');
var w=0
for (i=0;i<colmod.length;i++) {
name=colmod[i].name;
if (!colmod[i].hidden) {
// console.log("resetGridWidth " + name);
w += $(gid+"_"+name).outerWidth();
}
}
if (fvConfig.tabledepth)
{
w+= getScrollBarWidth()+5;
}
$(this).jqGrid('setGridWidth',w);
// console.log("resetGridWidth " +w);
return w;
}});
sessionStorage.removeItem("dlLoadTime"); // disable loading for now
//console.log(sessionStorage.fvConfig);
var now = new Date();
var dlLoadTime = Date.parse(sessionStorage.dlLoadTime);
if (sessionStorage.dlLoadTime != undefined
&& (now.getTime() - dlLoadTime < fvConfig.reloadInt*60*1000)
)
{
loadCurState();
}
else
{
applyConfig();
loadServerState();
}
saveTO=setTimeout(saveCurState,fvConfig.saveInt);
// Allow jquery tooltip to format HTLML in title attribute
$( document ).tooltip(
{
content: function () {
var title = this.getAttribute("title");
if (title == " ")
{
return;
//title = null;
}
else
{
return decodeURI(title);
}
return title;
}
});
});
function getScrollBarWidth () {
// http://stackoverflow.com/questions/8079187/how-to-calculate-the-width-of-the-scroll-bar
// http://www.alexandre-gomes.com/?p=115
var inner = document.createElement('p');
inner.style.width = "100%";
inner.style.height = "200px";
var outer = document.createElement('div');
outer.style.position = "absolute";
outer.style.top = "0px";
outer.style.left = "0px";
outer.style.visibility = "hidden";
outer.style.width = "200px";
outer.style.height = "150px";
outer.style.overflow = "hidden";
outer.appendChild (inner);
document.body.appendChild (outer);
var w1 = inner.offsetWidth;
outer.style.overflow = 'scroll';
var w2 = inner.offsetWidth;
if (w1 == w2) w2 = outer.clientWidth;
document.body.removeChild (outer);
return (w1 - w2);
};