Compare commits
3 Commits
9f558d9b9f
...
53c5cec199
Author | SHA1 | Date |
---|---|---|
Simon Smith | 53c5cec199 | |
adnan29979 | 3ce2fd92c0 | |
si458 | 2649d630e9 |
|
@ -60,32 +60,204 @@
|
|||
<input id="SaveServerButton" title="Ctrl-S" type=button value="Save to Server (F3)" onclick="saveServerTranslations()">
|
||||
<input id="SaveFileButton" title="Ctrl-Shift-S" type=button value="Save to File (F4)" onclick="saveToFile()">
|
||||
<select id="langSelector" onchange="langSelectorChange()">
|
||||
<option value="ar">Arabic (ar)</option>
|
||||
<option value="af">Afrikaans (af)</option>
|
||||
<option value="sq">Albanian (sq)</option>
|
||||
<option value="ar">Arabic (Standard) (ar)</option>
|
||||
<option value="ar-dz">Arabic (Algeria) (ar-dz)</option>
|
||||
<option value="ar-bh">Arabic (Bahrain) (ar-bh)</option>
|
||||
<option value="ar-eg">Arabic (Egypt) (ar-eg)</option>
|
||||
<option value="ar-iq">Arabic (Iraq) (ar-iq)</option>
|
||||
<option value="ar-jo">Arabic (Jordan) (ar-jo)</option>
|
||||
<option value="ar-kw">Arabic (Kuwait) (ar-kw)</option>
|
||||
<option value="ar-lb">Arabic (Lebanon) (ar-lb)</option>
|
||||
<option value="ar-ly">Arabic (Libya) (ar-ly)</option>
|
||||
<option value="ar-ma">Arabic (Morocco) (ar-ma)</option>
|
||||
<option value="ar-om">Arabic (Oman) (ar-om)</option>
|
||||
<option value="ar-qa">Arabic (Qatar) (ar-qa)</option>
|
||||
<option value="ar-sa">Arabic (Saudi Arabia) (ar-sa)</option>
|
||||
<option value="ar-sy">Arabic (Syria) (ar-sy)</option>
|
||||
<option value="ar-tn">Arabic (Tunisia) (ar-tn)</option>
|
||||
<option value="ar-ae">Arabic (U.A.E.) (ar-ae)</option>
|
||||
<option value="ar-ye">Arabic (Yemen) (ar-ye)</option>
|
||||
<option value="an">Aragonese (an)</option>
|
||||
<option value="hy">Armenian (hy)</option>
|
||||
<option value="as">Assamese (as)</option>
|
||||
<option value="ast">Asturian (ast)</option>
|
||||
<option value="az">Azerbaijani (az)</option>
|
||||
<option value="eu">Basque (eu)</option>
|
||||
<option value="bg">Bulgarian (bg)</option>
|
||||
<option value="be">Belarusian (be)</option>
|
||||
<option value="bn">Bengali (bn)</option>
|
||||
<option value="bs">Bosnian (bs)</option>
|
||||
<option value="hr">Croatian (hr)</option>
|
||||
<option value="da">Danish (da)</option>
|
||||
<option value="fi">Finnish (fi)</option>
|
||||
<option value="fr">French (fr)</option>
|
||||
<option value="cs">Czech (cs)</option>
|
||||
<option value="de">German (de)</option>
|
||||
<option value="el">Greek (el)</option>
|
||||
<option value="he">Hebrew (he)</option>
|
||||
<option value="hi">Hindi (hi)</option>
|
||||
<option value="it">Italian (it)</option>
|
||||
<option value="ja">Japanese (ja)</option>
|
||||
<option value="ko">Korean (ko)</option>
|
||||
<option value="nl">Dutch (nl)</option>
|
||||
<option value="pl">Polish (pl)</option>
|
||||
<option value="pt">Portuguese (pt)</option>
|
||||
<option value="pt-br">Portuguese Brazil (pt-br)</option>
|
||||
<option value="ru">Russian (ru)</option>
|
||||
<option value="ro">Romanian (ro)</option>
|
||||
<option value="br">Breton (br)</option>
|
||||
<option value="my">Burmese (my)</option>
|
||||
<option value="ca">Catalan (ca)</option>
|
||||
<option value="ch">Chamorro (ch)</option>
|
||||
<option value="ce">Chechen (ce)</option>
|
||||
<option value="zh">Chinese (zh)</option>
|
||||
<option value="zh-hk">Chinese (Hong Kong) (zh-hk)</option>
|
||||
<option value="zh-cn">Chinese (PRC) (zh-cn)</option>
|
||||
<option value="zh-sg">Chinese (Singapore) (zh-sg)</option>
|
||||
<option value="zh-tw">Chinese (Taiwan) (zh-tw)</option>
|
||||
<option value="zh-CHS">Simplified Chinese (zh-CHS)</option>
|
||||
<option value="zh-CHT">Traditional Chinese (zh-CHT)</option>
|
||||
<option value="cv">Chuvash (cv)</option>
|
||||
<option value="co">Corsican (co)</option>
|
||||
<option value="cr">Cree (cr)</option>
|
||||
<option value="hr">Croatian (hr)</option>
|
||||
<option value="cs">Czech (cs)</option>
|
||||
<option value="da">Danish (da)</option>
|
||||
<option value="nl">Dutch (Standard) (nl)</option>
|
||||
<option value="nl-be">Dutch (Belgian) (nl-be)</option>
|
||||
<option value="en">English (en)</option>
|
||||
<option value="en-au">English (Australia) (en-au)</option>
|
||||
<option value="en-bz">English (Belize) (en-bz)</option>
|
||||
<option value="en-ca">English (Canada) (en-ca)</option>
|
||||
<option value="en-ie">English (Ireland) (en-ie)</option>
|
||||
<option value="en-jm">English (Jamaica) (en-jm)</option>
|
||||
<option value="en-nz">English (New Zealand) (en-nz)</option>
|
||||
<option value="en-ph">English (Philippines) (en-ph)</option>
|
||||
<option value="en-za">English (South Africa) (en-za)</option>
|
||||
<option value="en-tt">English (Trinidad & Tobago) (en-tt)</option>
|
||||
<option value="en-gb">English (United Kingdom) (en-gb)</option>
|
||||
<option value="en-us">English (United States) (en-us)</option>
|
||||
<option value="en-zw">English (Zimbabwe) (en-zw)</option>
|
||||
<option value="eo">Esperanto (eo)</option>
|
||||
<option value="et">Estonian (et)</option>
|
||||
<option value="fo">Faeroese (fo)</option>
|
||||
<option value="fa">Farsi (Persian) (fa)</option>
|
||||
<option value="fj">Fijian (fj)</option>
|
||||
<option value="fi">Finnish (fi)</option>
|
||||
<option value="fr">French (Standard) (fr)</option>
|
||||
<option value="fr-be">French (Belgium) (fr-be)</option>
|
||||
<option value="fr-ca">French (Canada) (fr-ca)</option>
|
||||
<option value="fr-fr">French (France) (fr-fr)</option>
|
||||
<option value="fr-lu">French (Luxembourg) (fr-lu)</option>
|
||||
<option value="fr-mc">French (Monaco) (fr-mc)</option>
|
||||
<option value="fr-ch">French (Switzerland) (fr-ch)</option>
|
||||
<option value="fy">Frisian (fy)</option>
|
||||
<option value="fur">Friulian (fur)</option>
|
||||
<option value="gd">Gaelic (Scots) (gd)</option>
|
||||
<option value="gd-ie">Gaelic (Irish) (gd-ie)</option>
|
||||
<option value="gl">Galacian (gl)</option>
|
||||
<option value="ka">Georgian (ka)</option>
|
||||
<option value="de">German (Standard) (de)</option>
|
||||
<option value="de-at">German (Austria) (de-at)</option>
|
||||
<option value="de-de">German (Germany) (de-de)</option>
|
||||
<option value="de-li">German (Liechtenstein) (de-li)</option>
|
||||
<option value="de-lu">German (Luxembourg) (de-lu)</option>
|
||||
<option value="de-ch">German (Switzerland) (de-ch)</option>
|
||||
<option value="el">Greek (el)</option>
|
||||
<option value="gu">Gujurati (gu)</option>
|
||||
<option value="ht">Haitian (ht)</option>
|
||||
<option value="he">Hebrew (he)</option>
|
||||
<option value="hi">Hindi (hi)</option>
|
||||
<option value="hu">Hungarian (hu)</option>
|
||||
<option value="is">Icelandic (is)</option>
|
||||
<option value="id">Indonesian (id)</option>
|
||||
<option value="iu">Inuktitut (iu)</option>
|
||||
<option value="ga">Irish (ga)</option>
|
||||
<option value="it">Italian (Standard) (it)</option>
|
||||
<option value="it-ch">Italian (Switzerland) (it-ch)</option>
|
||||
<option value="ja">Japanese (ja)</option>
|
||||
<option value="kn">Kannada (kn)</option>
|
||||
<option value="ks">Kashmiri (ks)</option>
|
||||
<option value="kk">Kazakh (kk)</option>
|
||||
<option value="km">Khmer (km)</option>
|
||||
<option value="ky">Kirghiz (ky)</option>
|
||||
<option value="tlh">Klingon (tlh)</option>
|
||||
<option value="ko">Korean (ko)</option>
|
||||
<option value="ko-kp">Korean (North Korea) (ko-kp)</option>
|
||||
<option value="ko-kr">Korean (South Korea) (ko-kr)</option>
|
||||
<option value="la">Latin (la)</option>
|
||||
<option value="lv">Latvian (lv)</option>
|
||||
<option value="lt">Lithuanian (lt)</option>
|
||||
<option value="lb">Luxembourgish (lb)</option>
|
||||
<option value="mk">FYRO Macedonian (mk)</option>
|
||||
<option value="ms">Malay (ms)</option>
|
||||
<option value="ml">Malayalam (ml)</option>
|
||||
<option value="mt">Maltese (mt)</option>
|
||||
<option value="mi">Maori (mi)</option>
|
||||
<option value="mr">Marathi (mr)</option>
|
||||
<option value="mo">Moldavian (mo)</option>
|
||||
<option value="nv">Navajo (nv)</option>
|
||||
<option value="ng">Ndonga (ng)</option>
|
||||
<option value="ne">Nepali (ne)</option>
|
||||
<option value="no">Norwegian (no)</option>
|
||||
<option value="nb">Norwegian (Bokmal) (nb)</option>
|
||||
<option value="nn">Norwegian (Nynorsk) (nn)</option>
|
||||
<option value="oc">Occitan (oc)</option>
|
||||
<option value="or">Oriya (or)</option>
|
||||
<option value="om">Oromo (om)</option>
|
||||
<option value="fa-ir">Persian/Iran (fa-ir)</option>
|
||||
<option value="pl">Polish (pl)</option>
|
||||
<option value="pt">Portuguese (pt)</option>
|
||||
<option value="pt-br">Portuguese (Brazil) (pt-br)</option>
|
||||
<option value="pa">Punjabi (pa)</option>
|
||||
<option value="pa-in">Punjabi (India) (pa-in)</option>
|
||||
<option value="pa-pk">Punjabi (Pakistan) (pa-pk)</option>
|
||||
<option value="qu">Quechua (qu)</option>
|
||||
<option value="rm">Rhaeto-Romanic (rm)</option>
|
||||
<option value="ro">Romanian (ro)</option>
|
||||
<option value="ro-mo">Romanian (Moldavia) (ro-mo)</option>
|
||||
<option value="ru">Russian (ru)</option>
|
||||
<option value="ru-mo">Russian (Moldavia) (ru-mo)</option>
|
||||
<option value="sz">Sami (Lappish) (sz)</option>
|
||||
<option value="sg">Sango (sg)</option>
|
||||
<option value="sa">Sanskrit (sa)</option>
|
||||
<option value="sc">Sardinian (sc)</option>
|
||||
<option value="sd">Sindhi (sd)</option>
|
||||
<option value="si">Singhalese (si)</option>
|
||||
<option value="sr">Serbian (sr)</option>
|
||||
<option value="sk">Slovak (sk)</option>
|
||||
<option value="sl">Slovenian (sl)</option>
|
||||
<option value="so">Somani (so)</option>
|
||||
<option value="sb">Sorbian (sb)</option>
|
||||
<option value="es">Spanish (es)</option>
|
||||
<option value="es-ar">Spanish (Argentina) (es-ar)</option>
|
||||
<option value="es-bo">Spanish (Bolivia) (es-bo)</option>
|
||||
<option value="es-cl">Spanish (Chile) (es-cl)</option>
|
||||
<option value="es-co">Spanish (Colombia) (es-co)</option>
|
||||
<option value="es-cr">Spanish (Costa Rica) (es-cr)</option>
|
||||
<option value="es-do">Spanish (Dominican Republic) (es-do)</option>
|
||||
<option value="es-ec">Spanish (Ecuador) (es-ec)</option>
|
||||
<option value="es-sv">Spanish (El Salvador) (es-sv)</option>
|
||||
<option value="es-gt">Spanish (Guatemala) (es-gt)</option>
|
||||
<option value="es-hn">Spanish (Honduras) (es-hn)</option>
|
||||
<option value="es-mx">Spanish (Mexico) (es-mx)</option>
|
||||
<option value="es-ni">Spanish (Nicaragua) (es-ni)</option>
|
||||
<option value="es-pa">Spanish (Panama) (es-pa)</option>
|
||||
<option value="es-py">Spanish (Paraguay) (es-py)</option>
|
||||
<option value="es-pe">Spanish (Peru) (es-pe)</option>
|
||||
<option value="es-pr">Spanish (Puerto Rico) (es-pr)</option>
|
||||
<option value="es-es">Spanish (Spain) (es-es)</option>
|
||||
<option value="es-uy">Spanish (Uruguay) (es-uy)</option>
|
||||
<option value="es-ve">Spanish (Venezuela) (es-ve)</option>
|
||||
<option value="sx">Sutu (sx)</option>
|
||||
<option value="sw">Swahili (sw)</option>
|
||||
<option value="sv">Swedish (sv)</option>
|
||||
<option value="sv-fi">Swedish (Finland) (sv-fi)</option>
|
||||
<option value="sv-sv">Swedish (Sweden) (sv-sv)</option>
|
||||
<option value="ta">Tamil (ta)</option>
|
||||
<option value="tt">Tatar (tt)</option>
|
||||
<option value="te">Teluga (te)</option>
|
||||
<option value="th">Thai (th)</option>
|
||||
<option value="tig">Tigre (tig)</option>
|
||||
<option value="ts">Tsonga (ts)</option>
|
||||
<option value="tn">Tswana (tn)</option>
|
||||
<option value="tr">Turkish (tr)</option>
|
||||
<option value="tk">Turkmen (tk)</option>
|
||||
<option value="uk">Ukrainian (uk)</option>
|
||||
<option value="hsb">Upper Sorbian (hsb)</option>
|
||||
<option value="ur">Urdu (ur)</option>
|
||||
<option value="ve">Venda (ve)</option>
|
||||
<option value="vi">Vietnamese (vi)</option>
|
||||
<option value="vo">Volapuk (vo)</option>
|
||||
<option value="wa">Walloon (wa)</option>
|
||||
<option value="cy">Welsh (cy)</option>
|
||||
<option value="xh">Xhosa (xh)</option>
|
||||
<option value="ji">Yiddish (ji)</option>
|
||||
<option value="zu">Zulu (zu)</option>
|
||||
</select>
|
||||
<input id="searchInput" type="text" placeholder="Search" onchange="onSearchChanged()" onkeyup="onSearchChanged()">
|
||||
<label><input id="showLocCheck" type="checkbox" onchange="onLocChanged()"> Show Location</label>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
@ -674,6 +674,23 @@
|
|||
.night .tagSpan {
|
||||
color: black;
|
||||
}
|
||||
|
||||
#d3serveraction, #d2serveraction {
|
||||
width: 100%;
|
||||
background-color: #d3d9d6;
|
||||
text-align: left;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
#d3serverfiles, #d2serverfiles {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
background-color: white;
|
||||
padding: 2px;
|
||||
border: 1px solid gray;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body id="body" onload="if (typeof(startup) !== 'undefined') startup();" style="overflow-y:hidden;margin:0;padding:0;border:0;font-size:13px;font-family:\'Trebuchet MS\', Arial, Helvetica, sans-serif">
|
||||
|
@ -927,6 +944,7 @@
|
|||
<span id=DeskChatButton><img src='images/icon-chat.png' onclick=deviceChat(event) height=16 width=16 style=padding-top:5px;cursor:pointer /></span>
|
||||
<span id=DeskToastButton><img src='images/icon-notify.png' onclick=deviceToastFunction() height=16 width=16 style=padding-top:5px;cursor:pointer /></span>
|
||||
<span id=DeskOpenWebButton><img src='images/icon-url2.png' onclick=deviceUrlFunction() height=16 width=16 style=padding-top:5px;cursor:pointer /></span>
|
||||
<span id=DeskRunButton><img src='images/icon-play.png' onclick=runDeviceCmd() height=16 width=16 style=padding-top:2px;cursor:pointer /></span>
|
||||
<!--<input id=DeskToolsButton type=button value=Tools onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()"> -->
|
||||
</div>
|
||||
<div>
|
||||
|
@ -2570,6 +2588,111 @@
|
|||
go(20);
|
||||
}
|
||||
|
||||
//
|
||||
// FILE SELECTOR, DIALOG 3
|
||||
//
|
||||
|
||||
function d3init() {
|
||||
d3fileoptions = { dialog: 1, filter: 'd3filter', files: 'd3serverfiles', folderup: 'p3FolderUp', currentFolder: 'p3CurrentFolder', func: d3setActions };
|
||||
Q('d3localFile').value = '';
|
||||
Q('d3localFile').accept = Q('d3filter').value;
|
||||
d3modechange();
|
||||
}
|
||||
|
||||
function d3modechange() {
|
||||
var mode = Q('d3uploadMode').value;
|
||||
QV('d3localmode', mode == 1);
|
||||
QV('d3servermode', mode == 2);
|
||||
if (mode == 1) { d3setActions(); } else { d3updatefiles(); }
|
||||
}
|
||||
|
||||
var d3filetreelinkpath;
|
||||
var d3filetreelocation = [];
|
||||
var d3fileoptions = null;
|
||||
function d3updatefiles() {
|
||||
if (d3fileoptions == null) return;
|
||||
if ((d3fileoptions.filter == 'd3filter') && (Q('d3uploadMode').value == 1)) return;
|
||||
var html1 = '', html2 = '', filetreex = filetree, folderdepth = 1, publicPath = null, lastFolderName = '';
|
||||
|
||||
// Navigate to path location, build the paths at the same time
|
||||
var d3filetreelocation2 = [], oldlinkpath = d3filetreelinkpath, checkedBoxes = [], checkboxes = document.getElementsByName('fc');
|
||||
for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { checkedBoxes.push(checkboxes[i].value) }; } // Save all existing checked boxes
|
||||
|
||||
d3filetreelinkpath = '';
|
||||
for (var i in d3filetreelocation) {
|
||||
if ((filetreex.f != null) && (filetreex.f[d3filetreelocation[i]] != null)) {
|
||||
d3filetreelocation2.push(d3filetreelocation[i]);
|
||||
if ((folderdepth == 1)) {
|
||||
var sp = d3filetreelocation[i].split('/');
|
||||
publicPath = window.location + sp[0] + 'files/' + sp[2];
|
||||
if (d3filetreelocation[i] === userinfo._id) { d3filetreelinkpath += 'self'; } else { d3filetreelinkpath += (sp[0] + '/' + sp[2]); }
|
||||
} else {
|
||||
if (d3filetreelinkpath != '') { d3filetreelinkpath += '/' + d3filetreelocation[i]; if (folderdepth > 2) { publicPath += '/' + d3filetreelocation[i]; } }
|
||||
}
|
||||
filetreex = filetreex.f[d3filetreelocation[i]];
|
||||
lastFolderName = filetreex.n;
|
||||
folderdepth++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
d3filetreelocation = d3filetreelocation2; // In case we could not go down the full path, we set the new path location here.
|
||||
|
||||
// Sort the files
|
||||
var filetreexx = p5sort_files(filetreex.f);
|
||||
|
||||
// File filter
|
||||
var fileFilter = '';
|
||||
if (d3fileoptions.filter) { fileFilter = Q(d3fileoptions.filter).value };
|
||||
|
||||
// Display all files and folders at this location
|
||||
for (var i in filetreexx) {
|
||||
// Figure out the name and shortname
|
||||
var f = filetreexx[i], name = f.n, shortname;
|
||||
|
||||
// Filter out files
|
||||
if ((f.t == 3) && (fileFilter != '') && (f.nx.toLowerCase().endsWith(fileFilter) == false)) { continue; }
|
||||
if (name.length > 70) { shortname = '<span title="' + EscapeHtml(name) + '">' + EscapeHtml(name.substring(0, 70)) + ("..." + '</span>'); } else { shortname = EscapeHtml(name); }
|
||||
|
||||
// Figure out the size
|
||||
var fsize = '';
|
||||
if (f.s != null) { fsize = getFileSizeStr(f.s); }
|
||||
|
||||
var h = '';
|
||||
if (f.t != 3) {
|
||||
var title = '';
|
||||
h = '<div class=filelist file=999><span style=float:right title="' + title + '"></span><span><div class=fileIcon' + f.t + ' onclick=d3folderset("' + encodeURIComponentEx(f.nx) + '")></div> <a href=# style=cursor:pointer onclick=\'return d3folderset("' + encodeURIComponentEx(f.nx) + '")\'>' + shortname + '</a></span></div>';
|
||||
} else {
|
||||
var link = shortname;
|
||||
//if (f.s > 0) { link = "<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"downloadfile.ashx?link=" + encodeURIComponentEx(filetreelinkpath + '/' + f.nx) + "\">" + shortname + "</a>"; }
|
||||
h = '<div class=filelist file=3><input style=float:left name=fcx class=fcb type=checkbox onchange=d3setActions() value="' + f.nx + '"> <span style=float:right>' + EscapeHtml(fsize) + '</span><span><div class=fileIcon' + f.t + '></div>' + link + '</span></div>';
|
||||
}
|
||||
|
||||
if (f.t < 3) { html1 += h; } else { html2 += h; }
|
||||
}
|
||||
|
||||
if (d3fileoptions.currentFolder) { QH(d3fileoptions.currentFolder, lastFolderName); }
|
||||
QH(d3fileoptions.files, html1 + html2);
|
||||
QE(d3fileoptions.folderup, d3filetreelocation.length > 0);
|
||||
if (d3fileoptions.func) { d3fileoptions.func(); }
|
||||
}
|
||||
|
||||
function d3folderset(x) { d3filetreelocation.push(decodeURIComponent(x)); d3updatefiles(); return false; }
|
||||
function d3folderup(x) { if (x == null) { d3filetreelocation.pop(); } else { while (d3filetreelocation.length > x) { d3filetreelocation.pop(); } } d3updatefiles(); }
|
||||
function d3getFileSel() { var cc = []; var checkboxes = document.getElementsByName('fcx'); for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { cc.push(checkboxes[i].value) } } return cc; }
|
||||
function d3setActions() {
|
||||
if (d3fileoptions.dialog == 1) {
|
||||
var mode = Q('d3uploadMode').value;
|
||||
if (mode == 1) {
|
||||
QE('idx_dlgOkButton', Q('d3localFile').value.length > 0);
|
||||
} else {
|
||||
QE('idx_dlgOkButton', d3getFileSel().length == 1);
|
||||
}
|
||||
} else if (d3fileoptions.dialog == 2) {
|
||||
QE('idx_dlgOkButton', d3getFileSel().length == 1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// MY FILES
|
||||
//
|
||||
|
@ -3957,6 +4080,99 @@
|
|||
meshserver.send({ action: 'msg', type: 'openUrl', nodeid: currentNode._id, url: Q('d2devurl').value });
|
||||
}
|
||||
|
||||
function runDeviceCmd(nodeid) { if (xxdialogMode) return; d2runCommandDialog({ nodeids: [ nodeid ? decodeURIComponent(nodeid) : currentNode._id ] }); }
|
||||
|
||||
function d2runCommandDialog(options) {
|
||||
var wintype = false, linuxtype = false, agenttype = false;
|
||||
for (var i in options.nodeids) {
|
||||
var n = getNodeFromId(options.nodeids[i]);
|
||||
if (n.agent) { if ((GetNodeRights(n) & 24) == 24) { agenttype = true; }
|
||||
if ((n.agent.id > 0) && (n.agent.id < 5)) { wintype = true; } else { linuxtype = true; } }
|
||||
}
|
||||
if ((wintype == true) || (linuxtype == true) || (agenttype == true)) {
|
||||
// Fetch run options
|
||||
var runopt = { type:1, runAs:0, source:1, cmd:'' };
|
||||
try { runopt = JSON.parse(getstore('runopt', runopt)); } catch (ex) {}
|
||||
|
||||
if (options.selectedFile) {
|
||||
var filename = options.selectedFile.name.toLowerCase();
|
||||
console.log('filename', filename);
|
||||
if (filename.endsWith('.bat')) { runopt.type = 1; }
|
||||
if (filename.endsWith('.ps1')) { runopt.type = 2; }
|
||||
if (filename.endsWith('.sh')) { runopt.type = 3; }
|
||||
if (filename.endsWith('.agentconsole')) { runopt.type = 4; }
|
||||
}
|
||||
|
||||
var x = '';
|
||||
if (options.title) { x += options.title + '<br />'; }
|
||||
x += '<select id=d2cmdtype onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px;margin-top:4px>';
|
||||
if (wintype == true) { x += '<option value=1' + ((runopt.type == 1)?' selected':'') + '>' + "Windows Command Prompt" + '</option><option value=2' + ((runopt.type == 2)?' selected':'') + '>' + "Windows PowerShell" + '</option>'; }
|
||||
if (linuxtype == true) { x += '<option value=3' + ((runopt.type == 3)?' selected':'') + '>' + "Linux/BSD/macOS Command Shell" + '</option>'; }
|
||||
if (agenttype == true) { x += '<option value=4' + ((runopt.type == 4)?' selected':'') + '>' + "Agent Console" + '</option>'; } // MESHRIGHT_REMOTECONTROL & MESHRIGHT_AGENTCONSOLE are needed
|
||||
x += '</select>';
|
||||
x += '<select id=d2cmduser style=width:100%;margin-bottom:4px><option value=0' + ((runopt.runAs == 0)?' selected':'') + '>' + "Run as agent" + '</option><option value=1' + ((runopt.runAs == 1)?' selected':'') + '>' + "Run as user, agent if no user" + '</option><option value=2' + ((runopt.runAs == 2)?' selected':'') + '>' + "Must run as user" + '</option></select>';
|
||||
if (options.selectedFile == null) {
|
||||
x += '<select id=d2cmdsource onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px><option value=0' + ((runopt.source == 0)?' selected':'') + '>' + "Commands from text box" + '</option><option value=1' + ((runopt.source == 1)?' selected':'') + '>' + "Commands from file" + '</option>';
|
||||
if (userinfo.siteadmin & 8) { x += '<option value=2' + ((runopt.source == 2)?' selected':'') + '>' + "Commands from file on server" + '</option>'; }
|
||||
x += '</select><textarea id=d2runcmd onkeyup=d2runCommandValidate() style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll>' + (runopt.cmd ? EscapeHtml(decodeURIComponent(runopt.cmd)) : '') + '</textarea>';
|
||||
x += '<div id=d2runfile style=display:none><input id=d2runfileex type=file onchange=d2runCommandValidate() id=d2localFile name=files onchange=d2runCommandValidate() /></div>';
|
||||
if (userinfo.siteadmin & 8) { x += '<div id=d2runsfile style=display:none><div id=d2serveraction valign=bottom><input type=button id=p2FolderUp disabled="disabled" onclick=d3folderup() value="Up" /> <span id=p2CurrentFolder></span></div><div id=d2serverfiles></div></div>'; }
|
||||
}
|
||||
setDialogMode(2, "Run Commands", 3, d2groupActionFunctionRunCommands, x, options);
|
||||
if (options.selectedFile == null) {
|
||||
Q('d2runcmd').focus();
|
||||
if (userinfo.siteadmin & 8) { d3fileoptions = { dialog: 2, files: 'd2serverfiles', folderup: 'p2FolderUp', currentFolder: 'p2CurrentFolder', func: null }; d3updatefiles(); } // Update the server files
|
||||
}
|
||||
d2runCommandValidate();
|
||||
}
|
||||
}
|
||||
|
||||
function d2runCommandValidate() {
|
||||
QV('d2cmduser', Q('d2cmdtype').value < 4);
|
||||
if (xxdialogTag.selectedFile == null) {
|
||||
QV('d2runcmd', Q('d2cmdsource').value == 0);
|
||||
QV('d2runfile', Q('d2cmdsource').value == 1);
|
||||
QV('d2runsfile', Q('d2cmdsource').value == 2);
|
||||
var ok = false;
|
||||
if (Q('d2cmdsource').value == 0) { if (Q('d2runcmd').value.length > 0) { ok = true; } } // From text box
|
||||
if (Q('d2cmdsource').value == 1) { if (Q('d2runfileex').files.length == 1) { ok = true; } } // From file
|
||||
if (Q('d2cmdsource').value == 2) { ok = false; } // From server file
|
||||
QE('idx_dlgOkButton', ok);
|
||||
} else {
|
||||
QE('idx_dlgOkButton', true);
|
||||
}
|
||||
}
|
||||
|
||||
function d2groupActionFunctionRunCommands(b, options) {
|
||||
var type = 3;
|
||||
try { type = parseInt(Q('d2cmdtype').value); } catch (ex) { }
|
||||
if (options.selectedFile == null) { putstore('runopt', JSON.stringify({ type: type, runAs: parseInt(Q('d2cmduser').value), source: parseInt(Q('d2cmdsource').value), cmd: encodeURIComponent(Q('d2runcmd').value) })); } // Save run options
|
||||
var cmd = { action: 'runcommands', nodeids: options.nodeids, type: type, runAsUser: parseInt(Q('d2cmduser').value) };
|
||||
if (options.selectedFile) {
|
||||
// Drag & drop file
|
||||
var reader = new FileReader();
|
||||
reader.onload = function (e) { cmd.cmds = e.target.result; meshserver.send(cmd); if (options.func) { options.func(); } }
|
||||
reader.readAsText(options.selectedFile);
|
||||
} else if (Q('d2cmdsource').value == 0) {
|
||||
// From text box
|
||||
cmd.cmds = Q('d2runcmd').value;
|
||||
meshserver.send(cmd);
|
||||
if (options.func) { options.func(); }
|
||||
} else if (Q('d2cmdsource').value == 1) {
|
||||
// From file
|
||||
var reader = new FileReader();
|
||||
reader.onload = function (e) { cmd.cmds = e.target.result; meshserver.send(cmd); if (options.func) { options.func(); } }
|
||||
reader.readAsText(Q('d2runfileex').files[0]);
|
||||
} else if (Q('d2cmdsource').value == 2) {
|
||||
// From server file
|
||||
var files = d3getFileSel();
|
||||
if (files.length != 1) return;
|
||||
cmd.cmdpath = d3filetreelocation.join('/') + '/' + files[0];
|
||||
meshserver.send(cmd);
|
||||
if (options.func) { options.func(); }
|
||||
}
|
||||
}
|
||||
|
||||
// Look to see if we need to update the device timeline
|
||||
function updateDeviceTimeline() {
|
||||
if ((meshserver.State != 2) || (powerTimelineNode == null) || (powerTimelineUpdate == null) || (currentNode == null) || (currentNode.mtype == 3)) return;
|
||||
|
|
Loading…
Reference in New Issue