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

1182 lines
37 KiB
JavaScript
Executable File

NOVNC_PORT = 3388;
IMPORT_VM_EXTENSION_PC = [".ova", ".ovf", '.qvm', '.xml'];
IMPORT_VM_EXTENSION_NAS = [".ova", ".ovf", ".vmx", '.qvm', '.xml'];
PERMISSION_LIMIT_CONTROL = 2;
PERMISSION_LIMIT_VIEWONLY = 2;
function ShowMask(bShowCancel, elemID, blackMask) {
if(document.getElementById("document-mask")){
var o = document.getElementById("document-mask");
o.style.visibility = "visible";
o.style.zIndex = 10000;
o.style.display = 'block';
o.style.position = 'absolute';
o.style.filter = "alpha(opacity:50)";
o.style.KHTMLOpacity = 0.8;
o.style.MozOpacity = 0.8;
o.style.opacity = 0.8;
o.style.background = '#FFF';
o.style.height = window.innerHeight + 'px';
if (blackMask){
o.style.opacity = 0.6
o.style.background = '#000';
}
if (elemID) {
var rect = document.getElementById(elemID).getBoundingClientRect();
//o.style.top = rect.top + 'px';
o.style.left = rect.left + 'px';
o.style.width = (window.innerWidth-rect.left) + "px";
document.getElementById("loading-icon").style.left = ((rect.right-rect.left)/2-32) + 'px';
} else {
o.style.width = window.innerWidth + "px";
document.getElementById("loading-icon").style.left = (document.body.clientWidth/2-32) + 'px';
}
document.getElementById("loading-icon").style.top = ($(window).height()/2-32) + 'px';
o = document.getElementById("loading-cancel");
o.style.zIndex = 20000;
o.style.display = 'block';
o.style.position = 'absolute';
o.style.height = document.getElementsByName('importvm_cancel')[0].clientHeight + 'px';
if (elemID) {
var rect = document.getElementById(elemID).getBoundingClientRect();
o.style.left = (rect.left-15) + 'px';
o.style.width = (window.innerWidth-rect.left) + "px";
} else {
o.style.width = window.innerWidth + "px";
}
document.getElementById("loading-cancel").style.top = (document.body.clientHeight/2+52) + 'px';
document.getElementById("loading-cancel").style.visibility = bShowCancel ? 'visible':'hidden';
}
}
function CloseMask() {
var o = document.getElementById("document-mask");
o.style.visibility = "hidden";
document.getElementById("loading-cancel").style.visibility = 'hidden';
}
/*
function normalConfirm(msg)
{
var ret = confirm(msg);
if (ret) {
ShowMask();
}
return ret;
}
*/
function SubmitConfirm(msg, msgTitle, submitID, sendValue, blackMask)
{
jConfirm(msg, msgTitle, function(r) {
if(r)
{
if(submitID)
{
$('#'+submitID).val(sendValue);
$('#'+submitID).click();
}
}
else
{
if(!blackMask)
CloseMask();
return;
}
},blackMask);
if(!blackMask)
ShowMask();
}
window.alert = function(str,_callback, blackMask) {
jAlert(str, '', _callback, blackMask);
}
function SubmitConfirmCustom(msg, msgTitle, formID, sendID, _call_backend)
{
jConfirm(msg, msgTitle, function(r) {
if(r)
{
if(_call_backend)
{
_call_backend();
}
else
{
$('#'+sendID).attr("disabled", false);
$('#'+formID).submit();
}
}
else
CloseMask();
});
ShowMask();
}
function wait(ms)
{
var start = +(new Date());
while (new Date() - start < ms);
}
function makeRequest(url, data, func, param, sync) {
var http_request = true;
if (sync=="false")
sync = false;
else // (typeof sync == "undefined")
sync = true;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = function(){ func(http_request, param); };
if(data==''){
http_request.open('GET', url, sync);
http_request.send(null);
}
else{
http_request.open('POST', url, sync);
http_request.send(data);
}
}
function UpdateVMState(host_id, vname, vmstate)
{
clearTimeout(VMStateTimer);
var bExtendExpire = 0;
if (typeof(bAutoLogin) !== "undefined" && bAutoLogin) {
bExtendExpire = 1;
}
if($('#div_cpuus_text').length) // Update cpu state
UpdateVMHwState(host_id, vname, vmstate);
url = "/vminfo/" + host_id + "/"+ vname +"/?bExtendExpire="+bExtendExpire+"&r=" + Math.random();
makeRequest(url, '', _callbk_update_vmstate, {'host_id':host_id, 'vname':vname, 'vmstate':vmstate});
}
function _callbk_update_vmstate(http_request, param)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
if ((!json.success && (json.errors.indexOf('Authentication failed') != -1)) ||
(param.vmstate != json.state)) {
window.location.href = window.location.href
return;
}
}
VMStateTimer = setTimeout(function(){UpdateVMState(param.host_id, param.vname, param.vmstate);}, 5000);
}
}
function UpdateVMHwState(host_id, vname, vmstate)
{
url = "/vminfo/" + host_id + "/"+ vname +"/cpuus/?r=" + Math.random();
makeRequest(url, '', _callbk_update_vm_cpuus, vmstate);
}
function _callbk_update_vm_cpuus(http_request, vmstate)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
var new_cpu_usg = parseInt(json.percentage,10);
var old_cpu_usg = parseInt(document.getElementById('div_cpuus_text').innerHTML);
if((new_cpu_usg > 10 && old_cpu_usg < 10) || (new_cpu_usg < 10 && old_cpu_usg > 10))
{
var str = '';
if(new_cpu_usg > 10)
str = '<span id="div_cpuus_bar" class="bar bblue" style="width:'+new_cpu_usg+'%;"><span id="div_cpuus_text" class="bar_ltext">'+new_cpu_usg+'%</span></span>';
else
str = '<span id="div_cpuus_bar" class="bar bblue" style="width:'+new_cpu_usg+'%;float:left;"></span><span id="div_cpuus_text" class="bar_rtext">'+new_cpu_usg+'%</span>';
document.getElementById('div_cpuus').innerHTML = str;
}
else
{
document.getElementById('div_cpuus_bar').style.width = new_cpu_usg+'%';
document.getElementById('div_cpuus_text').innerHTML = new_cpu_usg+'%';
}
}
}
}
function UpdateTaskInfo(host_id)
{
clearTimeout(TaskInfoTimer);
makeRequest( "/taskinfo/"+host_id+'/', '', _callbk_update_taskinfo, host_id);
}
function _callbk_update_taskinfo(http_request, host_id)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
if (!json.success && (json.errors.indexOf('Authentication failed') != -1)) {
var refreshURL=window.location.href;
refreshURL=refreshURL.substr(0,refreshURL.lastIndexOf('/'));
refreshURL=refreshURL.substr(0,refreshURL.lastIndexOf('/'))+'/';
window.location.href = refreshURL;
return;
}
// show/hide export/import icon
var elem = document.getElementById('task-import-icon');
var title = "";
if (elem) {
elem.style.display = (json.tasks.import.running || json.tasks.import.queuing) ? '' : 'none';
if (json.tasks.import.running) {
title += gettext('Running')+' : ' + json.tasks.import.running + '\n';
}
if (json.tasks.import.queuing) {
title += gettext('Queuing')+' : ' + json.tasks.import.queuing;
}
elem.title = title;
}
elem = document.getElementById('task-export-icon');
title = "";
if (elem) {
elem.style.display = (json.tasks.export.running || json.tasks.export.queuing) ? '' : 'none';
if (json.tasks.export.running) {
title += gettext('Running')+' : ' + json.tasks.export.running + '\n';
}
if (json.tasks.export.queuing) {
title += gettext('Queuing')+' : ' + json.tasks.export.queuing;
}
elem.title = title;
}
// show/hide vm background action icon
var cloningVM = '';
for (var i=0; i<json.vm_bkg.length; i++) {
if (json.vm_bkg[i].lockmsg.indexOf('cloning') != -1) {
cloningVM = json.vm_bkg[i].name;
}
elem = document.getElementById('vm-bkg-icon-'+json.vm_bkg[i].name);
if (!elem) {
continue;
}
elem.style.display = json.vm_bkg[i].lockmsg ? '' : 'none';
elem.title = json.vm_bkg[i].lockmsg;
elem = document.getElementById('vm_background_msg_'+json.vm_bkg[i].name);
if (elem) {
elem.style.display = json.vm_bkg[i].lockmsg ? '' : 'none';
elem.innerHTML = json.vm_bkg[i].lockmsg;
if(json.vm_bkg[i].lockmsg){
$('#resumeBtn').attr('disabled',true);
$('#virtio_iso_Btn').attr('disabled',true);
$('#adv_addDeviceBtn').attr('disabled',true);
$('#adv_rmDeviceBtn').attr('disabled',true);
$('#adv_applyBtn').attr('disabled',true);
}
}
}
// show/hide warning message in cloning wizard
if (document.getElementById('cloning_warning')) {
ShowHideCloningWarning(cloningVM)
}
}
TaskInfoTimer = setTimeout(function(){UpdateTaskInfo(host_id);}, 5000);
}
}
function UpdateNetworkPlot(host_id, inf)
{
clearTimeout(NWPlotTimer);
url = "/nwinfo/" + host_id + "/" + inf + "/?r=" + Math.random()
makeRequest(url, '', _callbk_update_network_plot);
NWPlotTimer = setTimeout(function(){UpdateNetworkPlot(host_id,inf);}, 5000);
}
function _callbk_update_network_plot(http_request)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
for (var i=0; i<json.length; i++) {
NetworkFlot.InsertData(json[i].bridge_name, json[i].rx, json[i].tx);
}
NetworkFlot.Repaint();
}
}
}
function CheckImportVMFile(ele, step)
{
if (step == 1) {
var msg = gettext('File type not allowed')+':\n';
var bAlert = false;
for (var f=0; f<ele.files.length; f++) {
var str = ele.files[f].name.toLowerCase();
var bValid = false;
for (var i=0; i<IMPORT_VM_EXTENSION_PC.length; i++) {
if (str.indexOf(IMPORT_VM_EXTENSION_PC[i], str.length - IMPORT_VM_EXTENSION_PC[i].length) != -1) {
bValid = true;
break;
}
}
if (!bValid) {
bAlert = true;
msg += ele.files[f].name + "\n";
}
}
if (bAlert) {
alert(msg);
ele.value = "";
}
} else if (step == 2) {
var bAlert = false;
var msg = gettext('Still missing the following files')+':\n';
for (var i=0; i<RestFiles.length; i++) {
var bValid = false;
for (var f=0; f<ele.files.length; f++) {
var str = ele.files[f].name;
if (str.indexOf(RestFiles[i], str.length - RestFiles[i].length) != -1) {
bValid = true;
break;
}
}
if (!bValid) {
bAlert = true;
msg += '\t' + RestFiles[i] + "\n";
}
}
if (bAlert) {
msg += gettext('Please re-select upload files!');
alert(msg);
ele.value = "";
}
}
document.getElementById('bt_next').disabled = (ele.files.length > 0) ? false : true;
}
function GetScrollbarWidth()
{
var parent, child, width;
if (width === undefined) {
parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');
child = parent.children();
width = child.innerWidth() - child.height(99).innerWidth();
parent.remove();
}
return width;
}
function MacGenerator(inputID)
{
var mac = "52:54:00"
for (var i=0; i<3; i++) {
var tmp = Math.floor(Math.random()*256).toString(16).toUpperCase();
if (tmp.length < 2) {
tmp = '0' + tmp;
}
mac += ':' + tmp;
}
$('#'+inputID).css({'background-color':'','border':'', 'box-shadow': ''});
$('#'+inputID).attr('title','');
return mac;
}
function CreateMemSliderElement(elem_id)
{
var link = [256, MAX_MEMORY_VALUE/4, MAX_MEMORY_VALUE/2, MAX_MEMORY_VALUE*3/4, MAX_MEMORY_VALUE];
if (MAX_MEMORY_VALUE == 512){
link = [256, 512];
}
else if (MAX_MEMORY_VALUE == 768){
link = [256, 512, 768];
}
else if (MAX_MEMORY_VALUE == 1024){
link = [256, 512, 768, 1024];
}
var str = '';
for (var i=0; i<link.length; i++) {
var str2 = (link[i] < 1024) ? (link[i]+' MB') : ((link[i]/1024)+' GB');
var textalign = 'center';
var percent = 100/(link.length-1);
if (i == (link.length-1)) {
percent /= 2;
textalign = 'right';
}else if (i == 0) {
textalign = 'left';
percent /= 2;
}
str += '<a href=# style="width:'+percent+'%;display:inline-block;text-align:'+textalign+';" onclick="UpdateMemorySlider(\''+elem_id+'\', '+link[i]+');">'+str2+'</a>';
}
str += '<div id="slider-range-min" style="margin-bottom:10px"></div>';
document.getElementById("memory_slider_link").innerHTML = str;
}
function UpdateMemorySlider(elemID, value)
{
var reg = /^[0-9]*$/;
if (!reg.test(value)) {
value = $("#slider-range-min").slider("value");
}
if (value < 256) {
value = 256;
} else if (value > MAX_MEMORY_VALUE) {
value = MAX_MEMORY_VALUE;
}
$("#slider-range-min").slider("value", value);
if (document.getElementById(elemID).value != value) {
document.getElementById(elemID).value = value;
}
}
function OnHDDSourceChange(value, id_prefix, total)
{
for (var i=0; i<=total;i++) {
document.getElementById(id_prefix+i).className = (value == i) ? "active" : "";
}
var eleTrs = document.getElementById("hdd_table").getElementsByTagName('tr');
var cnt = 0;
for (var i=0; i<eleTrs.length;i++) {
var html = eleTrs[i].innerHTML;;
if (html.indexOf(STR_SOURCE_PATH) != -1) {
cnt++;
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("source_path_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
} else if (html.indexOf(STR_FORMAT) != -1) {
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("format_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
} else if (html.indexOf(STR_CACHE_MODE) != -1) {
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("cache_mode_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
} else if (html.indexOf(STR_CONTROLLER) != -1) {
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("controller_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
}
}
}
function OnBridgeChange(value, id_prefix, total)
{
for (var i=0; i<=total;i++) {
document.getElementById(id_prefix+i).className = (value == i) ? "active" : "";
}
var eleTrs = document.getElementById("network_table").getElementsByTagName('tr');
var cnt = 0;
for (var i=0; i<eleTrs.length;i++) {
var html = eleTrs[i].innerHTML;
if (html.indexOf(STR_MODE) != -1) {
cnt++;
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("bridge_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
} else if (html.indexOf(STR_MAC_ADDRESS) != -1) {
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("mac_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
} else if (html.indexOf(STR_DEVICE_MODEL) != -1) {
eleTrs[i].style.display = ((value == 0) || (value == cnt)) ? "" : "none";
document.getElementById("device_moidel_label_"+cnt).style.display = (value == 0) ? "inline" : "none";
}
}
}
function SetRadioBtnValue(radioObj, newValue) {
if (!radioObj) {
return;
}
var radioLength = radioObj.length;
if (radioLength == undefined) {
radioObj.checked = (radioObj.value == newValue.toString());
return;
}
for (var i=0; i<radioLength; i++) {
radioObj[i].checked = false;
if(radioObj[i].value == newValue.toString()) {
radioObj[i].checked = true;
}
}
}
function GetRadioBtnValue(radioObj) {
if (!radioObj) {
return "";
}
var radioLength = radioObj.length;
if (radioLength == undefined) {
if (radioObj.checked) {
return radioObj.value;
} else {
return "";
}
}
for (var i = 0; i < radioLength; i++) {
if (radioObj[i].checked) {
return radioObj[i].value;
}
}
return "";
}
function detectBrowser(){
var sAgent = navigator.userAgent.toLowerCase();
this.isIE = (sAgent.indexOf("msie")!=-1); //IE6.0-7
this.isFF = (sAgent.indexOf("firefox")!=-1);//firefox
this.isSa = (sAgent.indexOf("safari")!=-1);//safari
this.isOp = (sAgent.indexOf("opera")!=-1);//opera
this.isNN = (sAgent.indexOf("netscape")!=-1);//netscape
this.isCh = (sAgent.indexOf("chrome")!=-1);//chrome
this.isMa = this.isIE;//marthon
this.isOther = (!this.isIE && !this.isFF && !this.isSa && !this.isOp && !this.isNN && !this.isSa);//unknown Browser
this.isMobile = false;
if (sAgent.match(/(iphone|ipod|ipad|android)/)){
this.isMobile = true;
}
}
var oBrowser = new detectBrowser();
function resizeRightDiv()
{
if (oBrowser.isCh) {
vWidth = window.innerWidth-265-20+23;
vHeight = window.innerHeight-20;
vContainHeight = window.innerHeight-20-10;
vMenuHeight = window.innerHeight-2-8+4;
document.getElementById('rightDiv').style.padding="10px 10px 0";
document.getElementById('rightContainDiv').style.margin="0";
}
else {
vWidth = window.innerWidth-265-20+23;
vHeight = window.innerHeight-20-10;
vContainHeight = window.innerHeight-20-10;
vMenuHeight = window.innerHeight-2+4;
}
document.getElementById('rightDiv').style.width = parseInt(vWidth)+'px';
document.getElementById('rightDiv').style.height = parseInt(vHeight)+'px';
if(document.getElementById('rightContainDiv').scrollHeight < parseInt(vHeight))
document.getElementById('rightContainDiv').style.height = parseInt(vContainHeight)+'px';
else
document.getElementById('rightContainDiv').style.height = 'auto';
document.getElementById('leftDiv').style.height = parseInt(vMenuHeight)+'px';
}
function CreateHDDSliderElement(elem_id,startSize,endSize,style)
{
startSize=parseInt(startSize);
endSize=parseInt(endSize);
var level_1=1024;
var level_2=2048;
var level_3=3072;
var sliderWidth=202;
link = [startSize, level_1, level_2, level_3, endSize];
if(style=='exMode')
{
if(startSize>=level_3)
{
link = [level_3, endSize];
}
else if(startSize>=level_2)
{
link = [level_2, level_3, endSize];
}
else if(startSize>=level_1)
{
link = [level_1, level_2, level_3, endSize];
}
else
{
link = [0, level_1, level_2, level_3, endSize];
}
sliderWidth=305;
}
else
{
style='others';
}
var str = '';
for (var i=0; i<link.length; i++) {
var str2 = link[i];
var textalign = 'center';
var percent = 100/(link.length-1);
if (i == (link.length-1)) {
percent /= 2;
textalign = 'right';
str2='';
}else if (i == 0) {
textalign = 'left';
percent /= 2;
}
if(link[i]<startSize)
{
str += '<span style="width:'+percent+'%;display:inline-block;text-align:'+textalign+';">'+str2+'</span>';
}
else
{
str += '<a href=# style="width:'+percent+'%;display:inline-block;text-align:'+textalign+';" onclick="UpdateHDDSlider(\''+elem_id+'\', '+link[i]+', '+startSize+', '+endSize+');">'+str2+'</a>';
}
}
str += '<div style="width:35px;margin-top:-20px;margin-left:'+sliderWidth+'px;"><a href=# style="width:'+percent+'%;display:inline-block;text-align:'+textalign+';" onclick="UpdateHDDSlider(\''+elem_id+'\', '+link[link.length-1]+', '+startSize+', '+endSize+');">'+link[link.length-1]+'</a></div>';
str += '<div id="slider-range-HDDmin" style="margin-bottom:10px"></div>';
document.getElementById("HDD_slider_link").innerHTML = str;
}
function UpdateHDDSlider(elemID, value, startSize, endSize, style)
{
var reg = /^[0-9]*$/;
if (!reg.test(value)) {
value = $("#slider-range-HDDmin").slider("value");
}
if (value < startSize) {
value = startSize;
} else if (value > endSize) {
value = endSize;
}
$("#slider-range-HDDmin").slider("value", value);
if (document.getElementById(elemID).value != value) {
document.getElementById(elemID).value = value;
}
if(style=='exMode'){
document.getElementById("Hddresize_id").value = value-startSize;
}
}
function FL_CreateHDDSliderElement(elem_id,startSize,endSize)
{
startSize=parseInt(startSize);
endSize=parseInt(endSize);
var sizeRange=endSize-startSize;
var level_1=1024;
var level_2=2048;
var level_3=3072;
/*
var level_1=Math.round((startSize+sizeRange/4)/50)*50;
var level_2=Math.round((startSize+sizeRange/2)/50)*50;
var level_3=Math.round((startSize+sizeRange*3/4)/50)*50;
*/
var link = [startSize, level_1, level_2, level_3, endSize];
var str = '';
for (var i=0; i<link.length; i++) {
var str2 = link[i];
var textalign = 'center';
var percent = 100/(link.length-1);
if (i == (link.length-1)) {
percent /= 2;
textalign = 'right';
str2='';
}else if (i == 0) {
textalign = 'left';
percent /= 2;
}
str += '<a href=# style="width:'+percent+'%;display:inline-block;text-align:'+textalign+';" onclick="FL_UpdateHDDSlider(\''+elem_id+'\', '+link[i]+', '+startSize+', '+endSize+');">'+str2+'</a>';
}
str += '<div style="width:35px;margin-top:-20px;margin-left:202px;"><a href=# style="display:inline-block;text-align:'+textalign+';" onclick="FL_UpdateHDDSlider(\''+elem_id+'\', '+link[link.length-1]+', '+startSize+', '+endSize+');">'+link[link.length-1]+'</a></div>';
str += '<div id="FL_slider-range-HDDmin" style="margin-bottom:10px"></div>';
document.getElementById("FL_HDD_slider_link").innerHTML = str;
}
function FL_UpdateHDDSlider(elemID, value, startSize, endSize)
{
var reg = /^[0-9]*$/;
if (!reg.test(value)) {
value = $("#FL_slider-range-HDDmin").slider("value");
}
if (value < startSize) {
value = startSize;
} else if (value > endSize) {
value = endSize;
}
$("#FL_slider-range-HDDmin").slider("value", value);
if (document.getElementById(elemID).value != value) {
document.getElementById(elemID).value = value;
}
}
function ReloadShareList(func, params)
{
url = "/sharelist/";
makeRequest(url, '', _callbk_reload_sharelist, {'func':func, 'params':params});
}
function _callbk_reload_sharelist(http_request, data)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
if (json.success) {
if (data.params) {
data.func(json.list_data, data.params);
} else {
data.func(json.list_data);
}
} else {
func(null, []);
}
} else {
func(null, []);
}
}
}
function decodeHTMLEntities(text) {
var entities = [
['apos', '\''],
['amp', '&'],
['lt', '<'],
['gt', '>']
];
for (var i = 0, max = entities.length; i < max; ++i) {
text = text.replace(new RegExp('&'+entities[i][0]+';', 'g'), entities[i][1]);
}
return text;
}
function FileSizeFormat(bytes) {
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (bytes == 0) return 'n/a';
var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
};
function onMultiCkboxChange(elem, prefix, totalCnt,openBtn)
{
if (elem.id == (prefix+'all')) {
for (var i=0; i<totalCnt; i++) {
if (!document.getElementById(prefix+i).disabled) {
document.getElementById(prefix+i).checked = elem.checked;
}
}
if(openBtn){
if(elem.checked)
document.getElementById(openBtn).disabled = false;
else
document.getElementById(openBtn).disabled = true;
}
} else {
var bSelectAll = true;
var isSelect = false;
for (var i=0; i<totalCnt; i++) {
if (!document.getElementById(prefix+i).disabled && !document.getElementById(prefix+i).checked) {
bSelectAll = false;
//break;
}
if(document.getElementById(prefix+i).checked)
isSelect = true;
}
document.getElementById(prefix+'all').checked = bSelectAll;
if(openBtn){
if(isSelect)
document.getElementById(openBtn).disabled = false;
else
document.getElementById(openBtn).disabled = true;
}
}
}
function createHelpTip(helpContent,baseWidth){
var helpTip = $('<div/>').attr('id','helpTip').addClass('helpTip').appendTo($('#rightDiv'));
var helpTipBody = $('<div/>').addClass('helpTipBody').css({'width':baseWidth}).appendTo(helpTip);
var helpTipHeadBg = $('<div/>').addClass('helpTipHeadBg').appendTo(helpTip);
var helpTipHead = $('<div/>').addClass('helpTipHead').appendTo(helpTip);
$(helpContent).appendTo(helpTipBody);
var detectUserAgent = navigator.userAgent;
if (detectUserAgent.match(/(iPhone|iPod|iPad|Android)/)){
$('#help-window').on('touchstart click',function(e){
e.preventDefault();
var rect = document.getElementById('help-window').getBoundingClientRect();
var baseLeft=rect.left+11;
var baseTop=rect.top+30;
helpTipBody.css({'left':baseLeft-baseWidth,'top':baseTop});
helpTipHeadBg.css({'left':baseLeft-5,'top':baseTop-6});
helpTipHead.css({'left':baseLeft-5,'top':baseTop-5});
helpTip.show();
helpTip.before($('<div id="closeMask">'));
$('#closeMask').on('touchstart click',closeTip);
});
}
else{
$('#help-window').mouseover(function(){
var rect = document.getElementById('help-window').getBoundingClientRect();
var baseLeft=rect.left+11;
var baseTop=rect.top+30;
helpTipBody.css({'left':baseLeft-baseWidth,'top':baseTop});
helpTipHeadBg.css({'left':baseLeft-5,'top':baseTop-6});
helpTipHead.css({'left':baseLeft-5,'top':baseTop-5});
helpTip.show();
$('#help-window').click(function(e){
if(!$('#closeMask').attr('id'))
helpTip.before($('<div id="closeMask">'));
$('#help-window').off('mouseout');
$('#closeMask').on('click',closeTip);
});
$('#help-window').mouseout(function(){
$('.helpTip').hide();
});
function closeTip(e){
e.preventDefault();
$('.helpTip').hide();
$('#closeMask').remove();
}
});
}
}
function closeTip(e){
e.preventDefault();
$('.helpTip').hide();
$('#closeMask').remove();
}
//account function start
function accountMenu(userName,lastLoginTime,page){
if($('#accountMenu').attr('id')!=undefined){
$('#accountMenu').remove();
$('#closeMask').remove();
}
else{
var rect = $('.account')[0].getBoundingClientRect();
var baseTop=rect.top+28;
var scrollWidth=18;
if (oBrowser.isCh){
scrollWidth=4;
}
if($('#rightDiv')[0].scrollHeight > $('#rightDiv')[0].clientHeight){
scrollWidth=0;
}
if(page=='vm'){
baseTop = 60;
}
$('<div id="closeMask">').appendTo($('#rightDiv'));
var accountMenu = $('<div id="accountMenu"/>').appendTo($('#rightDiv'));
if (oBrowser.isCh){
var accountMenuContent = $('<div/>').addClass('accountContent').css({'right':15-scrollWidth,'top':baseTop}).appendTo(accountMenu);
var accountHeadBg = $('<div/>').addClass('accountHeadBg').css({'right':33-scrollWidth,'top':baseTop-7}).appendTo(accountMenu);
var accountHead = $('<div/>').addClass('accountHead').css({'right':33-scrollWidth,'top':baseTop-5}).appendTo(accountMenu);
}
else{
var accountMenuContent = $('<div/>').addClass('accountContent').css({'right':30-scrollWidth,'top':baseTop}).appendTo(accountMenu);
var accountHeadBg = $('<div/>').addClass('accountHeadBg').css({'right':48-scrollWidth,'top':baseTop-7}).appendTo(accountMenu);
var accountHead = $('<div/>').addClass('accountHead').css({'right':48-scrollWidth,'top':baseTop-5}).appendTo(accountMenu);
}
if(userName=='admin'){
if(window.parent != window.self){
accountMenuContent.append('<div class="accountHr" style="border-bottom:1px solid #B2B2B2;"><div class="showTime" style="margin-top:5px"><b>'+userName+'</b><br>'+gettext('Last login time')+': </div>'+
'<div class="showTime">'+lastLoginTime+'</div></div>'+
'<a data-toggle="modal" href="#aboutQVS" style="text-decoration:none;"><div class="accountBtn accountLastBtn" onclick="accountControl()"><div>'+gettext('About')+'</div></div></a>');
}
else{
accountMenuContent.append('<div class="accountHr" style="border-bottom:1px solid #B2B2B2;"><div class="showTime" style="margin-top:5px"><b>'+userName+'</b><br>'+gettext('Last login time')+': </div>'+
'<div class="showTime">'+lastLoginTime+'</div></div>'+
'<div class="accountBtn" onclick="accountControl(\'logout\')"><div>'+gettext('Logout')+'</div></div>'+
'<a data-toggle="modal" href="#aboutQVS" style="text-decoration:none;"><div class="accountBtn accountLastBtn" onclick="accountControl()"><div>'+gettext('About')+'</div></div></a>');
}
}
else{
accountMenuContent.append('<div class="accountHr" style="border-bottom:1px solid #B2B2B2;"><div class="showTime" style="margin-top:5px"><b>'+userName+'</b><br>'+gettext('Last login time')+': </div>'+
'<div class="showTime">'+lastLoginTime+'</div></div>'+
'<a data-toggle="modal" href="#changePassword" style="text-decoration:none;"><div class="accountBtn" onclick="accountControl()"><div>'+gettext('Change Password')+'</div></div></a>'+
'<div class="accountBtn" onclick="accountControl(\'logout\')"><div>'+gettext('Logout')+'</div></div>'+
'<a data-toggle="modal" href="#aboutQVS" style="text-decoration:none;"><div class="accountBtn accountLastBtn" onclick="accountControl()"><div>'+gettext('About')+'</div></div></a>');
}
$('#closeMask').on('touchstart click',closeAccount);
}
}
function closeAccount(e){
e.preventDefault();
$('#accountMenu').remove();
$('#closeMask').remove();
}
function accountControl(choice,blackMask){
$('.warningStr').hide();
$('#closeMask').remove();
$('#accountMenu').remove();
if(choice=='logout'){
ShowMask();
jConfirm(gettext('Are you sure to log out?'), gettext('Logout Confirm'), function(r) {
if(r)
{
document.location.href='/admin/logout/';
}
else
{
CloseMask();
return;
}
},blackMask);
}
}
//account function end
function getCookie(key)
{
if( document.cookie.length==0 )
return false;
var i=document.cookie.search(key+'=');
if( i==-1 )
return false;
i+=key.length+1;
var j=document.cookie.indexOf(';', i);
if( j==-1 )
j=document.cookie.length;
return document.cookie.slice(i,j);
}
function fireEvent(element, event)
{
if (document.createEventObject) {
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt)
} else {
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
function OnVNCShapshot(host_id, vmname, elem)
{
url = "/vncsnapshot/"+host_id+"/"+vmname+"/?r=" + Math.random();
makeRequest(url, '', _callbk_vnc_snapshot, elem.id);
}
function _callbk_vnc_snapshot(http_request, elemID)
{
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json = JSON.parse(http_request.responseText);
console.log(json);
if (!json.success) {
console.log('[Failed]'+json.errors)
return;
}
// update image source path = '/media/img/'+json.vname+'_snapshot.jpg'
showVNCSnapshot(json.vname);
}
}
}
function creatVNCSnapshot(host_id){
var helpTip = $('<div/>').attr('id','vncSnapshot').addClass('helpTip').appendTo($('#rightDiv'));
var helpTipBody = $('<div/>').attr('id','vncSnapshotBody').addClass('helpTipBody').appendTo(helpTip);
var helpTipHeadBg = $('<div/>').attr('id','vncSnapshotHeadBg').addClass('helpTipHeadBg').appendTo(helpTip);
var helpTipHead = $('<div/>').attr('id','vncSnapshotHead').addClass('helpTipHead').appendTo(helpTip);
$('.OnVNCShapshot').on('mouseover',function(e){
e.preventDefault();
var vmname = $(this).attr('id').replace('vnc_','');
if(oBrowser.isFF){
OnVNCShapshot(host_id, vmname, $(this));
}
else if(oBrowser.isCh){
if(e.relatedTarget.id == $(this).attr('id'))
OnVNCShapshot(host_id, vmname, $(this));
}
else{
var sAgent = navigator.userAgent.toLowerCase()
isWin8 = (sAgent.indexOf("windows nt 6.2")!=-1);
if(isWin8){
OnVNCShapshot(host_id, vmname, $(this));
}
else{
if(e.relatedTarget.id == $(this).attr('id'))
OnVNCShapshot(host_id, vmname, $(this));
}
}
$('#rightDiv').on('touchstart click',function(e){
e.preventDefault();
$('#vncSnapshot').hide();
});
});
$('.OnVNCShapshot').mouseout(function(e){
e.preventDefault();
$('#vncSnapshot').hide();
});
}
function showVNCSnapshot(vname){
$('#vncSnapshotBody').children().remove();
var baseWidth = 400;
var baseHeight = 250;
var dt=new Date();
var imgPath = '/media/img/'+vname+'_snapshot.jpg?r='+dt.getTime();
$('<img/>').attr('src',imgPath).css('height',250).appendTo($('#vncSnapshotBody'));
var detectUserAgent = navigator.userAgent;
if($('#btn_console').attr('id')==undefined){ //overview page
$('#vncSnapshotBody').css({'height':baseHeight});
var winWidth = window.innerWidth;
var rect = document.getElementById('vnc_'+vname).getBoundingClientRect();
var baseLeft=rect.left+11;
var baseTop=rect.top-5;
if((baseTop-272)>0){
$('#vncSnapshotHeadBg').removeClass().addClass('vncSnapshotHeadBg');
$('#vncSnapshotHead').removeClass().addClass('vncSnapshotHead');
$('#vncSnapshotBody').css({'right':winWidth-baseLeft-10,'top':baseTop-272});
$('#vncSnapshotHeadBg').css({'left':baseLeft-10,'top':baseTop-5});
$('#vncSnapshotHead').css({'left':baseLeft-10,'top':baseTop-6});
}
else{
$('#vncSnapshotHeadBg').removeClass().addClass('helpTipHeadBg');
$('#vncSnapshotHead').removeClass().addClass('helpTipHead');
baseTop=rect.top+30;
$('#vncSnapshotBody').css({'right':winWidth-baseLeft-10,'top':baseTop});
$('#vncSnapshotHeadBg').css({'left':baseLeft-10,'top':baseTop-6});
$('#vncSnapshotHead').css({'left':baseLeft-10,'top':baseTop-5});
}
$('#vncSnapshot').show();
}
else{ //VM page
//$('#vncSnapshotBody').css({'width':baseWidth});
$('#vncSnapshotHeadBg').addClass('helpTipHeadBg');
$('#vncSnapshotHead').addClass('helpTipHead');
var windowHeight = window.innerHeight;
var rect = document.getElementById('btn_console').getBoundingClientRect();
var baseLeft=rect.left+11;
var baseTop=rect.top+30;
$('#vncSnapshotBody').css({'left':baseLeft+20,'top':baseTop+7});
$('#vncSnapshotHeadBg').css({'left':baseLeft-5+40,'top':baseTop-6+5});
$('#vncSnapshotHead').css({'left':baseLeft-5+40,'top':baseTop-5+5});
if($('#conselModal').hasClass('in')){
$('#vncSnapshot').hide();
}
else{
$('#vncSnapshot').show();
}
$('#btn_console').on('mouseout click',function(){
$('#vncSnapshot').hide();
});
$('body').click(function(){
$('#vncSnapshot').hide();
});
}
}
function addSSLHint(){
var targetVNC = window.location.protocol + "//" + window.location.hostname + ":" + WebUtil.getQueryVar('port', '');
var SSLbrowser = "FF";
var hint = "";
$('#noVNC_canvas').hide();
$('body').css('overflow','auto');
if(oBrowser.isFF){
SSLbrowser = "FF";
hint = '<div class="hintTitle">'+gettext("Please add the console's URL to your web browser's [Exception List].")+'</div>'+
'<div class="hintText"><span class="hintNum">1.</span>'+gettext('Please click <button id="hintBtn01">start</button> to open a new tab.')+'</div>'+
'<div><img src=..\\..\\..\\media\\img\\addSSLHint\\'+SSLbrowser+'\\en.jpg></div>'+
'<div class="hintText"><span class="hintNum">4.</span>'+gettext('Close the new tab')+'</div>'+
'<div class="hintText"><span class="hintNum">5.</span>'+gettext('Please click <button id="hintBtn02">refresh</button> to refresh this page.')+'</div>';
$('<div>').attr('id','addSSLHint').appendTo($('#noVNC_container'));
}
else if(oBrowser.isIE){
SSLbrowser = "IE";
hint = '<div class="hintTitle">'+gettext('For security concerns, the HTML5 Console with SSL does not support Internet Explorer.')+'</div>'+
'<div class="hintText"><center>'+gettext('Click [Redirect] button to open a normal console page.')+'</center></div>'+
'<div class="hintText"><center><button id="hintBtn03">'+gettext('Redirect')+'</button></center></div>';
$('<div>').attr('id','addSSLHint').css({'height':'150px','width':'800px','margin-left':'-400px','padding':'40px 20px 0 20px'}).appendTo($('#noVNC_container'));
}
$(hint).appendTo($('#addSSLHint'));
$('#hintBtn01').on('touchstart click',function(){
window.open(targetVNC, '_blank');
});
$('#hintBtn02').on('touchstart click',function(){
location=location;
});
$('#hintBtn03').on('touchstart click',function(){
var port = window.location.port;
var url = window.location.href.replace('https:','http:');
var r1 = ':'+port+'/';
var r2 = ':'+(port-1)+'/';
url = url.replace(r1, r2);
location=url;
});
}