138 lines
4.4 KiB
JavaScript
138 lines
4.4 KiB
JavaScript
/*
|
|
* Sport selection.
|
|
*/
|
|
|
|
(function (win, doc, undef)
|
|
{
|
|
"use strict";
|
|
let ss = sax.mdl.selectSport = sax.mdl.selectSport || {};
|
|
ss.sports = {}; ss.fn = {}; ss.ajax = {};;
|
|
|
|
//--------------------------------------------------------------
|
|
/*
|
|
* 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
|
|
{
|
|
ss.ajax.sports = ss.ajax.sports || { url: sax.url.base + 'Reference/Ajax/GetSports', formId: 'frmNavigate', callbackFn: ss.fn.refreshSportsAndSelect };
|
|
sax.doAjaxRequest(ss.ajax.sports, 20);
|
|
}
|
|
}
|
|
ss.fn.refreshSportsAndSelect = function (response)
|
|
{
|
|
//sax.debug('refreshSportsAndSelect', 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.on('click', function () { ss.fn.onClickSport(sport, $sport); }).on('dblclick', function () { ss.fn.onDblClickSport(sport, $sport); }).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 (sport, $sport)
|
|
{
|
|
$('.SelectedSportName', ss.$dlg).text(ss.fn.getSportName(ss.sportId = sport.id) || ' ');
|
|
$('.sax-panel-item.Sport', ss.$dlg).removeClass('sel');
|
|
$sport.addClass('sel');
|
|
}
|
|
ss.fn.onDblClickSport = function (sport, $sport)
|
|
{
|
|
ss.sportId = sport.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 */ |