/* * 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.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()))); } //-------------------------------------------------------------- $(function () { 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 */