Files
Saxonite/SaxoniteCoreWebOnline/wwwroot/js/sax-selectSport.js
T
andy 7e5940a542 v1.0.6.0
Refresh Online Session with profile region and sports.
2021-06-02 16:52:57 +01:00

136 lines
4.4 KiB
JavaScript

/*
* Sport selection.
*/
(function (win, doc, undef)
{
"use strict";
let ss = sax.data.selectSport = sax.data.selectSport || { sports: {}, fn: {}, $dlg: {}, itemIdPrefix: 'Spt_' };
//--------------------------------------------------------------
/*
* Sport selection config:
* - caption - dialog title.
* - sportId - currently selected sport.
* - excludeIds - array of sports Ids to ignore.
* - fnCallback - method to call on completion to store selected sport.
*/
ss.fn.selectSport = function (cfg)
{
ss.fn.init();
ss.cfg = cfg;
ss.sportId = cfg.sportId;
if (ss.sports.length) ss.fn.showSelectSport();
else
{
sax.ajaxSports = sax.ajaxSports || { url: sax.url.base + 'Reference/Ajax/GetSports', formId: 'frmNavigate', callbackFn: ss.fn.refreshSportsAndSelect };
sax.doAjaxRequest(sax.ajaxSports, 20);
}
}
ss.fn.refreshSportsAndSelect = function (response)
{
if (!response || !response.success) return;
ss.sports = response.sports;
ss.fn.showSelectSport();
}
ss.fn.showSelectSport = function ()
{
$('.SelectedSportName', ss.$dlg).text(ss.fn.getSportName(ss.sportId) || ' ');
$('#ifSportFilter', ss.$dlg).val('');
ss.fn.displaySports();
sax.openDialog(ss.$dlg.dialog('option', { title: ss.cfg.caption || 'Select Sport' }), ss.cfg.width || 400, ss.cfg.height || 800);
}
//--------------------------------------------------------------
ss.fn.compareSports = function (a, b)
{
var comparison = a.name.toLowerCase().localeCompare(b.name.toLowerCase());
if (comparison === 0)
return a.name.localeCompare(b.name);
return comparison;
}
//--------------------------------------------------------------
ss.fn.displaySports = function ()
{
let filter = $('#ifSportFilter', ss.$dlg).val();
let reFilter = new RegExp(sax.escapeRegExp((filter || '').trim()), 'i');
let $sportsAvail = $('.sax-selectSport-sports.AvailableSports', ss.$dlg).empty();
let $sportTmpl = $('.sax-panel-item-template .sax-panel-item.Sport', ss.$dlg);
let sports = [...ss.sports];
sports.sort(ss.fn.compareSports);
for (let rgnIdx = 0; rgnIdx < sports.length; rgnIdx++)
{
let sport = sports[rgnIdx];
if (ss.cfg.excludeIds && ss.cfg.excludeIds.includes(sport.id)) continue;
let id = sport.id;
if (filter && !sport.name.match(reFilter)) continue;
let $sport = $sportTmpl.clone();
$sport.prop('id', ss.itemIdPrefix + id).on('click', function () { ss.fn.onClickSport(id); }).on('dblclick', function () { ss.fn.onDblClickSport(id); }).find('.SportName').text(sport.name).end();
if (id == ss.sportId) $sport.addClass('sel');
$sportsAvail.append($sport);
}
}
ss.fn.getSport = function (id)
{
for (let rgnIdx = 0; rgnIdx < ss.sports.length; rgnIdx++)
{
let sport = ss.sports[rgnIdx];
if (sport.id == id) return sport;
}
}
ss.fn.getSportName = function (id)
{
let sport = ss.fn.getSport(id);
return sport ? sport.name : '';
}
//--------------------------------------------------------------
ss.fn.onClickSport = function (id)
{
$('.SelectedSportName', ss.$dlg).text(ss.fn.getSportName(ss.sportId = id) || ' ');
$('.sax-panel-item.Sport', ss.$dlg).removeClass('sel');
$('.sax-panel-item.Sport#' + ss.itemIdPrefix + id, ss.$dlg).addClass('sel');
}
ss.fn.onDblClickSport = function (id)
{
ss.sportId = id;
ss.fn.storeSelectSport();
}
ss.fn.storeSelectSport = function ()
{
if (!ss.sportId) return;
let sport = ss.fn.getSport(ss.sportId);
if (!sport) return;
if (ss.cfg.fnCallback) ss.cfg.fnCallback(sport);
ss.$dlg.dialog('close');
ss.fn.cleanUp();
}
ss.fn.cleanUp = function ()
{
delete ss.cfg;
delete ss.sportId;
}
//--------------------------------------------------------------
ss.fn.onDlgSize = function ()
{
let $pnl = $('.sax-selectSport-sports.AvailableSports', ss.$dlg);
$pnl.outerHeight(Math.floor(ss.$dlg.innerHeight() - $pnl.position().top - ($pnl.outerHeight(true) - $pnl.innerHeight())));
}
//--------------------------------------------------------------
ss.fn.init = function ()
{
if (!ss.$dlg) return;
var opt = sax.dlgOpts();
opt.open = function (evt, ui) { ss.fn.onDlgSize(); };
opt.resize = function (evt, ui) { ss.fn.onDlgSize(); };
opt.buttons[sax.dlg.btn.ok] = function () { ss.fn.storeSelectSport(); };
opt.buttons[sax.dlg.btn.cancel] = function () { ss.fn.cleanUp(); $(this).dialog('close'); };
ss.$dlg = $('#dlgSelectSport').dialog(opt);
}
}(window, window.document));
/* The End */