Skip to content
Snippets Groups Projects
Commit 81a739f7 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Merge branch 'mlong/xtrnweb'

parents 88586297 a77f86b8
No related branches found
No related tags found
2 merge requests!463MRC mods by Codefenix (2024-10-20),!98Remove errant files from webv4
<!--Games-->
<?xjs
/**
* Web Display for Custom External Program Menus
* by Michael Long mlong innerrealmbbs.us
*
* See wiki at http://wiki.synchro.net/module:xtrnmenu
*/
load("ftelnethelper.js");
load('sbbsdefs.js');
load("xtrnmenulib.js");
load(settings.web_lib + 'ftelnet.js');
load(settings.web_lib + 'request.js');
var ExternalMenus = new ExternalMenus();
if (typeof settings.xtrn_blacklist === 'string') {
settings.xtrn_blacklist = settings.xtrn_blacklist.toLowerCase().split(',');
} else {
settings.xtrn_blacklist = [];
}
var menuitems = [];
?>
<style>.fTelnetStatusBar { display : none; }</style>
<a name="fTelnet"></a>
<div id="fTelnetContainer" class="fTelnetContainer" style="margin-bottom:1em;"></div>
<div id="xtrn-list" class="list-group">
<?xjs
var menuobj;
if (Request.get_param('type')) {
var target = Request.get_param('target');
switch (Request.get_param('type')) {
case 'custommenu':
if (target !== undefined) {
menuobj = ExternalMenus.getMenu(target);
}
break;
case 'xtrnmenu':
if (target !== undefined) {
menuobj = ExternalMenus.getSectionMenu(target);
}
break;
case 'recentall':
menuobj = ExternalMenus.getSpecial(Request.get_param('type'), "Most Recent - All", target);
break;
case 'recentuser':
menuobj = ExternalMenus.getSpecial(Request.get_param('type'), "Most Recent - Yours", target);
break;
case 'mostlaunchedall':
menuobj = ExternalMenus.getSpecial(Request.get_param('type'), "Most Launched - All", target);
break;
case 'mostlauncheduser':
menuobj = ExternalMenus.getSpecial(Request.get_param('type'), "Most Launched - Yours", target);
break;
case 'longestrunall':
menuobj = ExternalMenus.getSpecial(Request.get_param('type'), "Longest Run - All", target);
break;
case 'longestrunuser':
menuobj = ExternalMenus.getSpecial(Request.get_param('type'), "Longest Run - Yours", target);
break;
case 'favorites':
menuobj = ExternalMenus.getFavorites("Favorites", target);
break;
default:
break;
}
} else {
if (Request.has_param('target')) {
menuobj = ExternalMenus.getMenu(Request.get_param('target'));
} else {
menuobj = ExternalMenus.getMenu('main');
}
}
if ((typeof menuobj === "undefined") || !menuobj
|| (typeof menuobj.items === "undefined") || (menuobj.items.length < 1)) {
writeln("<h4>" + ExternalMenus.options.no_programs_msg + "</h4>");
} else if (user.security.restrictions&UFLAG_X) {
writeln("<h4>" + options.restricted_user_msg + "</h4>");
} else {
// ok to display menu
writeln("<h4>" + menuobj.title + "</h4>");
var menuitemsfiltered = ExternalMenus.getSortedItems(menuobj);
menuitemsfiltered.forEach(function (menuitem) {
if (settings.xtrn_blacklist.indexOf(menuitem.target.toLowerCase()) > -1) {
return;
}
switch (menuitem.type) {
case 'custommenu':
case 'xtrnmenu':
case 'xtrnprog':
case 'favorites':
case 'recentall':
case 'recentuser':
case 'mostlaunchedall':
case 'mostlauncheduser':
case 'longestrunuser':
case 'longestrunall':
menuitems.push({
'itemtitle': menuitem.title,
'itemtype': menuitem.type,
'itemtarget': menuitem.target,
'stats': typeof menuitem.stats !== undefined ? menuitem.stats : null
});
break;
default:
break;
}
});
}
?>
</div>
<script id="fTelnetScript" src="<?xjs write(get_url()); ?>"></script>
<script type="text/javascript">
window.addEventListener('load', (event) => {
var wsp = <?xjs write(settings.wsp || GetWebSocketServicePort()); ?>;
var wssp = <?xjs write(settings.wssp || GetWebSocketServicePort(true)); ?>;
var Options = new fTelnetOptions();
Options.BareLFtoCRLF = false;
Options.BitsPerSecond = 57600;
Options.ConnectionType = 'rlogin';
Options.Emulation = 'ansi-bbs';
Options.Enter = '\r';
Options.Font = 'CP437';
Options.ForceWss = false;
Options.Hostname = '<?xjs write(http_request.vhost); ?>';
Options.LocalEcho = false;
Options.Port = location.protocol == 'https:' ? wssp : wsp;
Options.RLoginClientUsername = '<?xjs write(user.security.password); ?>';
Options.RLoginServerUsername = '<?xjs write(user.alias); ?>';
Options.ScreenColumns = 80;
Options.ScreenRows = 25;
Options.SplashScreen = Options.SplashScreen = '<?xjs write(get_splash()); ?>';
Options.WebSocketUrlPath = '?Port=<?xjs write(GetRLoginPort()); ?>';
window.fTelnet = new fTelnetClient('fTelnetContainer', Options);
fTelnet.OnConnectionClose = function () {
window.location.reload();
};
});
async function launchXtrn() {
var code = event.srcElement.id;
await v4_get('./api/system.ssjs?call=set-xtrn-intent&code=' + code);
fTelnet._Options.RLoginTerminalType = 'xtrn=' + code;
fTelnet.Connect();
}
var menuitems = <?xjs write(JSON.stringify(menuitems)); ?>;
var currentTarget = "<?xjs Request.write_param('target'); ?>";
var currentType = "<?xjs Request.write_param('type'); ?>";
var currentTitle = `<?xjs write(menuobj.title) ?>`;
if (currentTitle && !currentTarget) {
// main menu - store title for breadcrumb
sessionStorage.setItem("mainmenu", currentTitle);
}
var div = $('#xtrn-list');
menuitems.forEach(function (menuitem) {
var a = document.createElement('a');
$(a).addClass("list-group-item");
$(a).addClass("striped");
a.text = menuitem.itemtitle;
if (typeof menuitem.stats !== "undefined") {
var badge = document.createElement('span');
$(badge).addClass('badge').text(menuitem.stats);
a.appendChild(badge);
}
if (menuitem.itemtype == "xtrnprog") {
a.href = "#fTelnet";
a.id = menuitem.itemtarget;
a.onclick = function () { launchXtrn(); };
} else {
a.href = "/?page=<?xjs Request.write_param('page') ?>&type=" +menuitem.itemtype
+ "&target=" + menuitem.itemtarget;
a.onclick = function () {
sessionStorage.setItem('prev:' + menuitem.itemtarget.toLowerCase(), '<?xjs Request.write_param('target')?>');
sessionStorage.setItem('prevtype:' + menuitem.itemtarget.toLowerCase(), '<?xjs Request.write_param('type')?>');
sessionStorage.setItem('prevtitle:' + menuitem.itemtarget.toLowerCase(), currentTitle);
};
}
$(div).append(a);
});
// breadcrumb
var prevTarget = sessionStorage.getItem('prev:' + currentTarget.toLowerCase());
var prevType = sessionStorage.getItem('prevtype:' + currentTarget.toLowerCase());
var prevTitle = sessionStorage.getItem('prevtitle:' + currentTarget.toLowerCase());
if (prevType && prevTarget && prevTitle) {
$('#xtrn-list').prepend('<ol class="breadcrumb"><a href="/?page=<?xjs Request.write_param('page') ?>&type=' + prevType
+ '&target=' + prevTarget + '">' + prevTitle + '</a></ol>');
} else if (currentTarget) {
// level 2, not main menu
var mainmenuTitle = sessionStorage.getItem('mainmenu');
if (!mainmenuTitle) {
mainmenuTitle = 'Games';
}
$('#xtrn-list').prepend('<ol class="breadcrumb"><a href="/?page=<?xjs Request.write_param('page') ?>">' + mainmenuTitle + '</a></ol>');
}
</script>
<!--Game Stats-->
<div class="list-group">
<h1>Game Stats</h1>
<?xjs
load('sbbsdefs.js');
load("xtrnmenulib.js");
var ExternalMenus = new ExternalMenus();
if (typeof settings.xtrn_blacklist === 'string') {
settings.xtrn_blacklist = settings.xtrn_blacklist.toLowerCase().split(',');
} else {
settings.xtrn_blacklist = [];
}
// Edit these lines as needed to adjust the page
gameStats("recentall", "Most Recent", 10);
gameStats("mostlaunchedall", "Top 15 Most Launched", 15);
gameStats("longestrunall", "Top 15 Longest Run", 15);
function gameStats(menutype, title, maxitems) {
var menuobj = ExternalMenus.getSpecial(menutype, title);
?>
<div class="row list-group-item" style="background-color: #993399; color: #FFF">
<div class="col-sm-12"><h3><?xjs write(title) ?></h3></div>
</div>
<?xjs
if ((typeof menuobj.items !== "undefined") || (menuobj.items.length > 0)) {
var i = 0;
menuobj.items.some(function (menuitem) {
if (menuitem.type != "xtrnprog") {
return;
}
if (settings.xtrn_blacklist.indexOf(menuitem.target.toLowerCase()) > -1) return;
if (++i > maxitems) return;
?>
<div class="row list-group-item striped">
<div class="col-sm-2"><span class="badge badge-inverse"><?xjs write(menuitem.stats) ?></span></div>
<div class="col-sm-10"><?xjs write(menuitem.title) ?></div>
</div>
<?xjs
});
}
}
?>
</div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment