This commit is contained in:
2021-05-13 19:36:30 +01:00
parent ae64e14da4
commit edd6e39c35
63 changed files with 2694 additions and 1680 deletions
@@ -1,83 +0,0 @@
/*
* Admin - User page scripts.
*/
(function (win, doc, undef)
{
"use strict";
let cs = sax.codeSelection = sax.codeSelection || { fn: {}, $dlg: {}, codeIdPrefix: 'Code_' };
//--------------------------------------------------------------
/*
* Code selection config:
* - caption - dialog title.
* - width: preferred dialog width (default: 400).
* - height: preferred dialog height (default: 400).
* - showFilter: whether to display filter control(s).
* - filterLabel: filter code field caption.
* - maxItems: maximum number of available items to list.
* - codes - list of {code,desc,comment} objects
* - selectedCodes - list of codes.
* - fnCallback - method to call on completion to store codes taking list of selected codes as parameter.
*/
cs.fn.openCodeSelection = function (cfg)
{
sax.debug('openCodeSelection', cfg);
cs.fn.init();
cs.cfg = cfg;
cs.selectedCodes = cfg.selectedCodes || [];
cs.fn.displayCodes(cfg.codes);
sax.openDialog(cs.$dlg.dialog('option', { title: cfg.caption || 'Select Codes' }), cs.cfg.width || 400, cs.cfg.height || 400);
}
cs.fn.displayCodes = function (codes)
{
let $codesAvail = $('.sax-codeSelection-codes.AvailableCodes').empty();
let $codesSelec = $('.sax-codeSelection-codes.SelectedCodes').empty();
let $codeTmpl = $('.sax-panel-item-template .sax-panel-item.Code');
for (let codeIdx = 0; codeIdx < codes.length; codeIdx++)
{
let code = codes[codeIdx];
let selected = cs.selectedCodes.indexOf(code.code) >= 0;
let $code = $codeTmpl.clone();
$($code).prop('id', cs.codeIdPrefix + code.code).attr('aria-code', code.code).on('click', function () { cs.fn.onClickCode(code.code); }).on('dblclick', function () { cs.fn.onDblClickCode(code.code); }).find('.CodeDesc').text(code.desc).end();
if (selected) $codesSelec.append($code);
else $codesAvail.append($code);
}
}
cs.fn.onClickCode = function (code)
{
$('.sax-panel-item.Code').removeClass('sel');
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
cs.fn.onDblClickCode = function (code)
{
let codeIdx = cs.selectedCodes.indexOf(code);
//sax.debug('onDblClickCode', code, codeIdx);
if (codeIdx >= 0) cs.selectedCodes.splice(codeIdx, 1); else cs.selectedCodes.push(code)
cs.fn.displayCodes(cs.cfg.codes)
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
cs.fn.storeCodeSelection = function ()
{
//sax.debug('storeCodeSelection', cs.cfg, cs.selectedCodes);
if (cs.cfg.fnCallback) cs.cfg.fnCallback(cs.selectedCodes);
cs.$dlg.dialog('close');
delete cs.cfg;
delete cs.selectedCodes;
}
//--------------------------------------------------------------
cs.fn.init = function ()
{
if (!cs.$dlg) return;
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { cs.fn.storeCodeSelection(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
cs.$dlg = $('#dlgCodeSelection').dialog(opt);
}
}(window, window.document));
/* The End */
@@ -31,6 +31,10 @@
{
return sax.isNumeric(value) ? parseInt(value, 10) : defaultValue || 0;
}
sax.escapeRegExp = function (val)
{
return (val || '').replace(/[[{}()*+?^$|\]\.\\]/g, "\\$&");
}
sax.debug = sax.debugMode ? win.console.log.bind(win.console) : function () { };
//--------------------------------------------------------------
@@ -56,6 +60,12 @@
return index % 2 == 1 ? "other" : "";
});
}
sax.populateSelectCodeDesc = function ($sel, values)
{
$sel = $($sel).empty();
for (const value of values)
$sel.append($('<option>').prop('value', value.code).text(value.desc));
}
sax.checkTextAreaMaxLength = function (ctrl, len)
{
if (ctrl == null || ctrl.value == null) return;
@@ -460,6 +470,7 @@
}(window, window.document));
//--------------------------------------------------------------
(function ()
{
if (typeof Object.defineProperty === 'function')
@@ -1,147 +1,223 @@
/*
* Admin - Organisation page scripts.
*/
"use strict";
sax.itemIdPrefix = 'Itm_';
//--------------------------------------------------------------
sax.refreshResults = function (delay)
(function (win, doc, undef)
{
var $results = $('.sax-panel-results');
if (!sax.awaitingRefreshResponse)
{
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Organisation/Ajax/GetList', formId: 'frmOrganisationFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
{
sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Organisation', $results);
if (!response.success) return;
// Items.
var items = response.organisations;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
{
let item = items[itemIdx];
let $item = $templ.clone();
sax.populateItem($item, item);
$items.append($item);
}
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
$('.OrganisationName', $item).text(item.name);
$('.OrganisationType', $item).text(item.typeDesc);
$('.OrganisationCategory', $item).text(item.categoryDesc);
$('.OrganisationMemberCount', $item).on('click', function () { sax.onClickMemberCount(item.id); }).find('.MemberCount').text(item.memberCount);
$('.StatusDesc', $item).text(item.statusDesc);
$('.sax-action.sax-item-update', $item).off('click').on('click', function () { sax.updateItem(item.id) })
}
"use strict";
sax.itemIdPrefix = 'Itm_';
//--------------------------------------------------------------
sax.createItem = function ()
{
$('.OrganisationId,input[type="text"],textarea,select', sax.$frm.organisation).val('');
sax.clearControlErrors();
sax.$dlg.organisation.dialog('option', 'title', sax.dlg.title.createOrganisation);
sax.openDialog(sax.$dlg.organisation, 600, 600);
}
sax.doCreateItem = function ()
{
sax.storeItem();
}
//--------------------------------------------------------------
sax.updateItem = function (id)
{
$('.OrganisationId', sax.$frm.organisationId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Organisation/Ajax/GetItem', formId: 'frmOrganisationId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
let $frm = sax.$frm.organisation;
$('.OrganisationId,input[type="text"],textarea,select', $frm).val('');
if (!response.success) return;
let item = response.organisation;
$('.OrganisationId', $frm).val(item.id);
$('.OrganisationName', $frm).val(item.name);
$('.OrganisationType', $frm).val(item.typeCode);
$('.OrganisationCategory', $frm).val(item.categoryCode);
sax.clearControlErrors();
sax.$dlg.organisation.dialog('option', 'title', sax.dlg.title.updateOrganisation);
sax.openDialog(sax.$dlg.organisation, 600, 600);
}
sax.doUpdateItem = function ()
{
sax.storeItem();
}
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Organisation/Ajax/StoreItem', formId: 'frmOrganisation', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
}
sax.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.$dlg.organisation.dialog('close');
var item = response.organisation;
var $item = $('#' + sax.itemIdPrefix + item.id);
if (!$item.length)
//--------------------------------------------------------------
sax.refreshResults = function (delay)
{
var $results = $('.sax-panel-results');
$item = $('.sax-panel-item-template .sax-panel-item.Organisation', $results).clone();
$('.sax-panel-item-list', $results).prepend($item).show();
if (!sax.awaitingRefreshResponse)
{
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Organisation/Ajax/GetList', formId: 'frmOrganisationFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
{
sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Organisation', $results);
if (!response.success) return;
// Reference data - Statuses.
if (response.defaultStatusCode) sax.data.defaultStatusCode = response.defaultStatusCode;
if (response.statuses)
sax.populateSelectCodeDesc('#cbOrganisationStatus', response.statuses);
// Items.
var items = response.organisations;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
{
let item = items[itemIdx];
let $item = $templ.clone();
sax.populateItem($item, item);
$items.append($item);
}
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
$('.OrganisationName', $item).text(item.name);
$('.OrganisationType', $item).text(item.typeDesc);
$('.OrganisationCategory', $item).text(item.categoryDesc);
$('.OrganisationRegion', $item).text(item.regionName);
$('.OrganisationSport', $item).text(item.sportName);
$('.OrganisationMemberCount', $item).on('click', function () { sax.onClickMemberCount(item.id); }).find('.MemberCount').text(item.memberCount);
$('.StatusDesc', $item).text(item.statusDesc);
$('.sax-action.sax-item-update', $item).off('click').on('click', function () { sax.updateItem(item.id) })
}
sax.populateItem($item, item)
}
//--------------------------------------------------------------
sax.onClickMemberCount = function (id)
{
if (!(id * 1)) return;
sax.doPleaseWait();
let $frm = $('#frmOrganisationId');
$('.OrganisationId',$frm).val(id);
$frm.prop('action', sax.url.base + 'Organisation/Members').submit();
}
//--------------------------------------------------------------
sax.selectRegion = function ()
{
if (!sax.data.regions)
{
let handleRegionsResponse = function (response)
{
if (response && response.success && response.regions)
sax.data.regions = response.regions;
sax.showSelectRegion();
}
sax.ajaxRegions = sax.ajaxRegions || { url: sax.url.base + 'Region/Ajax/GetList', formId: 'frmNavigate', callbackFn: handleRegionsResponse };
sax.doAjaxRequest(sax.ajaxRegions, 50);
}
else sax.showSelectRegion();
}
sax.showSelectRegion = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectRegion, items: sax.data.regions, fnCallback: sax.onRegionSelected });
}
sax.onRegionSelected = function (rgn)
{
sax.debug('onRegionSelected', rgn);
let $frm = sax.$frm.organisation;
$('.OrganisationRegionId', $frm).val(rgn.id);
$('.OrganisationRegionCaption', $frm).val(rgn.name);
}
//--------------------------------------------------------------
$(function ()
{
$('.sax-panel-filter .sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-panel-filter .sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('keydown', function () { sax.clearControlError(this); });
//--------------------------------------------------------------
sax.selectSport = function ()
{
if (!sax.data.sports)
{
let handleSportsResponse = function (response)
{
if (response && response.success && response.sports)
sax.data.sports = response.sports;
sax.showSelectSport();
}
sax.ajaxSports = sax.ajaxSports || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmNavigate', callbackFn: handleSportsResponse };
sax.doAjaxRequest(sax.ajaxSports, 50);
}
else sax.showSelectSport();
}
sax.showSelectSport = function ()
{
sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, items: sax.data.sports, fnCallback: sax.onSportSelected });
}
sax.onSportSelected = function (rgn)
{
sax.debug('onSportSelected', rgn);
let $frm = sax.$frm.organisation;
$('.OrganisationSportId', $frm).val(rgn.id);
$('.OrganisationSportCaption', $frm).val(rgn.name);
}
sax.$frm.organisationId = $('#frmOrganisationId');
sax.$frm.organisation = $('#frmOrganisation');
//--------------------------------------------------------------
sax.createItem = function ()
{
let $frm = sax.$frm.organisation;
$('.OrganisationId,.OrganisationRegionId,.OrganisationSportId,input[type="text"],textarea,select', $frm).val('');
$('.OrganisationStatus', $frm).val(sax.data.defaultStatusCode);
sax.clearControlErrors();
sax.$dlg.organisation.dialog('option', 'title', sax.dlg.title.createOrganisation);
sax.openDialog(sax.$dlg.organisation, 600, 600);
}
sax.doCreateItem = function ()
{
sax.storeItem();
}
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.organisation = $('#dlgOrganisation').dialog(opt);
//--------------------------------------------------------------
sax.updateItem = function (id)
{
$('.OrganisationId', sax.$frm.organisationId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Organisation/Ajax/GetItem', formId: 'frmOrganisationId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
let $frm = sax.$frm.organisation;
$('.OrganisationId,input[type="text"],textarea,select', $frm).val('');
if (!response.success) return;
let item = response.organisation;
$('.OrganisationId', $frm).val(item.id);
$('.OrganisationName', $frm).val(item.name);
$('.OrganisationType', $frm).val(item.typeCode);
$('.OrganisationCategory', $frm).val(item.categoryCode);
$('.OrganisationRegionId', $frm).val(item.regionId);
$('.OrganisationRegionCaption', $frm).val(item.regionName);
$('.OrganisationSportId', $frm).val(item.sportId);
$('.OrganisationSportCaption', $frm).val(item.sportName);
$('.OrganisationStatus', $frm).val(item.statusCode);
sax.clearControlErrors();
sax.$dlg.organisation.dialog('option', 'title', sax.dlg.title.updateOrganisation);
sax.openDialog(sax.$dlg.organisation, 600, 600);
}
sax.doUpdateItem = function ()
{
sax.storeItem();
}
setTimeout(sax.refreshResults, 250);
});
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Organisation/Ajax/StoreItem', formId: 'frmOrganisation', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
}
sax.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.$dlg.organisation.dialog('close');
//--------------------------------------------------------------
var item = response.organisation;
var $item = $('#' + sax.itemIdPrefix + item.id);
if (!$item.length)
{
var $results = $('.sax-panel-results');
$item = $('.sax-panel-item-template .sax-panel-item.Organisation', $results).clone();
$('.sax-panel-item-list', $results).prepend($item).show();
}
sax.populateItem($item, item)
}
//--------------------------------------------------------------
sax.onClickMemberCount = function (id)
{
if (!(id * 1)) return;
sax.doPleaseWait();
let $frm = $('#frmOrganisationId');
$('.OrganisationId', $frm).val(id);
$frm.prop('action', sax.url.base + 'Organisation/Members').submit();
}
//--------------------------------------------------------------
$(function ()
{
$('.sax-panel-filter .sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-panel-filter .sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('input', function () { sax.clearControlError(this); });
sax.$frm.filter = $('#frmOrganisationFilter');
$('.FilterOrganisation', sax.$frm.filter).on('input', function () { sax.refreshResults(250); });
sax.$frm.organisationId = $('#frmOrganisationId');
sax.$frm.organisation = $('#frmOrganisation');
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.organisation = $('#dlgOrganisation').dialog(opt);
setTimeout(sax.refreshResults, 250);
});
}(window, window.document));
/* The End */
@@ -30,9 +30,13 @@
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Member', $results);
if (!response.success) return;
// Reference data.
// Reference data - roles.
if (response.memberRoles && response.memberRoles.length)
sax.data.memberRoles = response.memberRoles;
// Reference data - Statuses.
if (response.defaultStatusCode) sax.data.defaultStatusCode = response.defaultStatusCode;
if (response.statuses)
sax.populateSelectCodeDesc('#cbMemberStatus', response.statuses);
// Items.
var items = response.members;
if (!items.length)
@@ -60,7 +64,7 @@
//--------------------------------------------------------------
sax.selectOrganisation = function ()
{
sax.debug('sax.selectOrganisation');
//sax.debug('sax.selectOrganisation');
sax.organisationSelection.fn.openDialog({ caption: sax.dlg.title.selectOrganisation, fnCallback: sax.onOrganisationSelected });
}
sax.onOrganisationSelected = function (id, name)
@@ -71,6 +75,22 @@
sax.refreshResults(50);
}
//--------------------------------------------------------------
sax.onChangeEmail = function ()
{
let $frm = sax.$frm.member;
let $mbrName = $('.MemberUserName', $frm);
$('#frmUserEmail .UserEmailAddress').val($('.MemberUserEmailAddress', $frm).val());
$mbrName.val('');
let fn = function (response)
{
if (!response || !response.success || !response.user) return;
$mbrName.val(response.user.displayName);
}
sax.ajaxUserByEmail = sax.ajaxUserByEmail || { url: sax.url.base + 'User/Ajax/GetUserByEmail', formId: 'frmUserEmail', callbackFn: fn };
sax.doAjaxRequest(sax.ajaxUserByEmail, 100);
}
//--------------------------------------------------------------
// Member Roles.
sax.selectMemberRoles = function ()
@@ -79,7 +99,7 @@
sax.selectMemberRoleConfig = sax.selectMemberRoleConfig || { caption: sax.dlg.title.selectMemberRoles, width: 520, fnCallback: sax.updateMemberRoles };
sax.selectMemberRoleConfig.codes = sax.data.memberRoles;
sax.selectMemberRoleConfig.selectedCodes = sax.member.roleCodes || [];
sax.codeSelection.fn.openCodeSelection(sax.selectMemberRoleConfig);
sax.selectCode.fn.openSelectCode(sax.selectMemberRoleConfig);
}
sax.updateMemberRoles = function (memberRoleCodes)
{
@@ -108,6 +128,7 @@
$('.UserOrganisationId,.MemberRoleCodes,input[type="text"],textarea,select', $frm).val('');
$('.MemberOrganisationId', $frm).val($('#frmMemberFilter #ifFilterOrganisationId').val());
$('.MemberUserEmailAddress', $frm).prop('readonly', false);
$('.MemberStatus', $frm).val(sax.data.defaultStatusCode);
sax.clearControlErrors();
sax.member = { roleCodes: [] };
sax.$dlg.member.dialog('option', 'title', sax.dlg.title.createMember);
@@ -138,6 +159,7 @@
$('.MemberUserName', $frm).val(item.displayName).prop('readonly', true);
$('.MemberRoleCodes', $frm).val(item.roleCodes);
$('#ifMemberRoles').val(sax.getSelectedMemberRoleDescs().join('\n'));
$('.MemberStatus', $frm).val(item.statusCode);
sax.clearControlErrors();
sax.$dlg.member.dialog('option', 'title', sax.dlg.title.updateMember);
sax.openDialog(sax.$dlg.member, 600, 600);
@@ -171,21 +193,16 @@
sax.populateItem($item, item)
}
//--------------------------------------------------------------
sax.onClickMemberCount = function (id)
{
sax.debug('onClickMemberCount', id);
}
//--------------------------------------------------------------
$(function ()
{
$('.sax-panel-filter .sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-panel-filter .sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('keydown', function () { sax.clearControlError(this); });
$('.sax-input').on('input', function () { sax.clearControlError(this); });
sax.$frm.memberId = $('#frmMemberId');
sax.$frm.member = $('#frmMember');
$('#ifMemberUserEmailAddress', sax.$frm.member).on('change', function () { sax.onChangeEmail(); });
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
@@ -32,8 +32,8 @@
{
//sax.debug('os.doRefreshResults', response);
if (!response.success) return;
let $results = $('.sax-selection-results.Organisations').empty().hide();
let $tmpl = $('.sax-panel-item-template .sax-panel-item.Organisation');
let $results = $('.sax-selection-results.Organisations', os.$dlg).empty().hide();
let $tmpl = $('.sax-panel-item-template .sax-panel-item.Organisation', os.$dlg);
let items = response.organisations;
if (items)
{
@@ -51,10 +51,10 @@
{
//sax.debug('onClickOrganisation', item);
os.data.item = item;
$('.sax-panel-item.Organisation').removeClass('sel');
$('.sax-panel-item.Organisation#' + os.itemIdPrefix + item.id).addClass('sel');
$('.sax-panel-item.Organisation', os.$dlg).removeClass('sel');
$('.sax-panel-item.Organisation#' + os.itemIdPrefix + item.id, os.$dlg).addClass('sel');
}
os.fn.onDblClickOrganisation= function (item)
os.fn.onDblClickOrganisation = function (item)
{
//sax.debug('onDblClickCode', item);
os.data.item = item;
@@ -62,7 +62,7 @@
}
os.fn.confirmSelection = function ()
{
//sax.debug('storeCodeSelection', os.data.item);
//sax.debug('confirmSelection', os.data.item);
if (!os.data.item) return;
if (os.cfg.fnCallback) os.cfg.fnCallback(os.data.item.id, os.data.item.name);
os.$dlg.dialog('close');
@@ -79,6 +79,8 @@
opt.buttons[sax.dlg.btn.ok] = function () { os.fn.confirmSelection(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
os.$dlg = $('#dlgOrganisationSelection').dialog(opt);
$('.sax-input.FilterOrganisation', os.$dlg).on('input', function () { sax.organisationSelection.fn.refreshOrganisations(250); });
}
}(window, window.document));
+137 -123
View File
@@ -1,137 +1,151 @@
/*
* Admin - Region page scripts.
*/
"use strict";
sax.itemIdPrefix = 'Itm_';
//--------------------------------------------------------------
sax.refreshResults = function (delay)
(function (win, doc, undef)
{
var $results = $('.sax-panel-results');
if (!sax.awaitingRefreshResponse)
{
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Region/Ajax/GetList', formId: 'frmRegionFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Region', $results);
if (!response.success) return;
// Items.
var items = response.regions;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
{
let item = items[itemIdx];
let $item = $templ.clone();
sax.populateItem($item, item);
$items.append($item);
}
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
$('.RegionName', $item).text(item.name);
$('.RegionCountryIso2Code', $item).text(item.countryIso2Code);
$('.RegionTypeDesc', $item).text(item.regionTypeDesc);
$('.RegionParentName', $item).text(item.parentName);
$('.RegionStatusDesc', $item).text(item.statusDesc);
$('.sax-action.sax-item-update', $item).off('click').on('click', function () { sax.updateItem(item.id) })
}
"use strict";
sax.itemIdPrefix = 'Itm_';
//--------------------------------------------------------------
sax.createItem = function ()
{
$('.RegionId,input[type="text"],textarea,select', sax.$frm.region).val('');
sax.clearControlErrors();
sax.$dlg.region.dialog('option', 'title', sax.dlg.title.createRegion);
sax.openDialog(sax.$dlg.region, 600, 600);
}
sax.doCreateItem = function ()
{
sax.storeItem();
}
//--------------------------------------------------------------
sax.updateItem = function (id)
{
$('.RegionId', sax.$frm.regionId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Region/Ajax/GetItem', formId: 'frmRegionId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
let $frm = sax.$frm.region;
$('.RegionId,input[type="text"],textarea,select', $frm).val('');
if (!response.success) return;
let item = response.region;
$('.RegionId', $frm).val(item.id);
$('.RegionType', $frm).val(item.regionTypeCode);
$('.RegionCountryIso2Code', $frm).val(item.countryIso2Code);
$('.RegionName', $frm).val(item.name);
sax.clearControlErrors();
sax.$dlg.region.dialog('option', 'title', sax.dlg.title.updateRegion);
sax.openDialog(sax.$dlg.region, 600, 600);
}
sax.doUpdateItem = function ()
{
sax.storeItem();
}
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Region/Ajax/StoreItem', formId: 'frmRegion', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
}
sax.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.$dlg.region.dialog('close');
var item = response.region;
var $item = $('#' + sax.itemIdPrefix + item.id);
if (!$item.length)
//--------------------------------------------------------------
sax.refreshResults = function (delay)
{
var $results = $('.sax-panel-results');
$item = $('.sax-panel-item-template .sax-panel-item.Region', $results).clone();
$('.sax-panel-item-list', $results).prepend($item).show();
if (!sax.awaitingRefreshResponse)
{
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Region/Ajax/GetList', formId: 'frmRegionFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Region', $results);
if (!response.success) return;
// Reference data - Statuses.
if (response.defaultStatusCode) sax.data.defaultStatusCode = response.defaultStatusCode;
if (response.statuses)
sax.populateSelectCodeDesc('#cbRegionStatus', response.statuses);
// Items.
var items = response.regions;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
{
let item = items[itemIdx];
let $item = $templ.clone();
sax.populateItem($item, item);
$items.append($item);
}
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
$('.RegionName', $item).text(item.name);
$('.RegionCountryIso2Code', $item).text(item.countryIso2Code);
$('.RegionTypeDesc', $item).text(item.regionTypeDesc);
$('.RegionParentName', $item).text(item.parentName);
$('.RegionStatusDesc', $item).text(item.statusDesc);
$('.sax-action.sax-item-update', $item).off('click').on('click', function () { sax.updateItem(item.id) })
}
sax.populateItem($item, item)
}
//--------------------------------------------------------------
$(function ()
{
$('.sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('keydown', function () { sax.clearControlError(this); });
//--------------------------------------------------------------
sax.createItem = function ()
{
let $frm = sax.$frm.region;
$('.RegionId,input[type="text"],textarea,select', $frm).val('');
$('.RegionStatus', $frm).val(sax.data.defaultStatusCode);
sax.clearControlErrors();
sax.$dlg.region.dialog('option', 'title', sax.dlg.title.createRegion);
sax.openDialog(sax.$dlg.region, 600, 600);
}
sax.doCreateItem = function ()
{
sax.storeItem();
}
sax.$frm.regionId = $('#frmRegionId');
sax.$frm.region = $('#frmRegion');
//--------------------------------------------------------------
sax.updateItem = function (id)
{
$('.RegionId', sax.$frm.regionId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Region/Ajax/GetItem', formId: 'frmRegionId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
let $frm = sax.$frm.region;
$('.RegionId,input[type="text"],textarea,select', $frm).val('');
if (!response.success) return;
let item = response.region;
$('.RegionId', $frm).val(item.id);
$('.RegionType', $frm).val(item.regionTypeCode);
$('.RegionCountryIso2Code', $frm).val(item.countryIso2Code);
$('.RegionName', $frm).val(item.name);
$('.RegionStatus', $frm).val(item.statusCode);
sax.clearControlErrors();
sax.$dlg.region.dialog('option', 'title', sax.dlg.title.updateRegion);
sax.openDialog(sax.$dlg.region, 600, 600);
}
sax.doUpdateItem = function ()
{
sax.storeItem();
}
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.region = $('#dlgRegion').dialog(opt);
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Region/Ajax/StoreItem', formId: 'frmRegion', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
}
sax.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.$dlg.region.dialog('close');
setTimeout(sax.refreshResults, 250);
});
var item = response.region;
var $item = $('#' + sax.itemIdPrefix + item.id);
if (!$item.length)
{
var $results = $('.sax-panel-results');
$item = $('.sax-panel-item-template .sax-panel-item.Region', $results).clone();
$('.sax-panel-item-list', $results).prepend($item).show();
}
sax.populateItem($item, item)
}
//--------------------------------------------------------------
//--------------------------------------------------------------
$(function ()
{
$('.sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('input', function () { sax.clearControlError(this); });
sax.$frm.filter = $('#frmRegionFilter');
$('.FilterRegion', sax.$frm.filter).on('input', function () { sax.refreshResults(250); });
sax.$frm.regionId = $('#frmRegionId');
sax.$frm.region = $('#frmRegion');
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.region = $('#dlgRegion').dialog(opt);
setTimeout(sax.refreshResults, 250);
});
}(window, window.document));
/* The End */
+79 -74
View File
@@ -1,84 +1,89 @@
/*
* Admin - Security page scripts.
*/
"use strict";
//--------------------------------------------------------------
sax.doSignin = function ()
(function (win, doc, undef)
{
sax.clearControlErrors();
sax.ajaxSignin = sax.ajaxSignin || { url: sax.url.base + 'Security/Ajax/Signin', formId: 'frmSignIn', callbackFn: sax.onSignin };
sax.doAjaxRequest(sax.ajaxSignin, 50);
}
sax.onSignin = function (response)
{
sax.debug(response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.goToPage('');
}
"use strict";
//--------------------------------------------------------------
sax.doScorePassword = function ()
{
sax.ajaxScorePassword = sax.ajaxScorePassword || { url: sax.url.base + 'Security/Ajax/ScorePassword', formId: 'frmChangePassword', callbackFn: sax.onScorePassword, noWaitIcon: true };
sax.doAjaxRequest(sax.ajaxScorePassword, 250);
}
sax.onScorePassword = function (response)
{
var score = (response || {}).score || 0;
sax.$prgPasswordStrength.progressbar("option", "value", score).removeClass('amber green').addClass(score > 3 ? 'green' : score > 2 ? 'amber' : '');
}
//--------------------------------------------------------------
sax.doChangePassword = function ()
{
sax.clearControlErrors();
sax.ajaxChangePassword = sax.ajaxChangePassword || { url: sax.url.base + 'Security/Ajax/StorePassword', formId: 'frmChangePassword', callbackFn: sax.onChangePassword };
sax.doAjaxRequest(sax.ajaxChangePassword, 50);
}
sax.onChangePassword = function (response)
{
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
if ($('#ifRpe').length)
sax.goToPage('Security/Signin');
else sax.goToPage('');
}
//--------------------------------------------------------------
sax.doRequestPassword = function ()
{
sax.clearControlErrors();
sax.ajaxRequestPassword = sax.ajaxRequestPassword || { url: sax.url.base + 'Security/Ajax/RequestNewPassword', formId: 'frmRequestPassword', callbackFn: sax.onRequestPassword };
sax.doAjaxRequest(sax.ajaxRequestPassword, 50);
}
sax.onRequestPassword = function (response)
{
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
var gotoSigninPage = function ()
//--------------------------------------------------------------
sax.doSignin = function ()
{
sax.goToPage('Security/Signin');
sax.clearControlErrors();
sax.ajaxSignin = sax.ajaxSignin || { url: sax.url.base + 'Security/Ajax/Signin', formId: 'frmSignIn', callbackFn: sax.onSignin };
sax.doAjaxRequest(sax.ajaxSignin, 50);
}
sax.onSignin = function (response)
{
sax.debug(response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.goToPage('');
}
if (response.successMsg)
sax.doAlert($('.sax-page-caption').text(), response.successMsg, gotoSigninPage);
else gotoSigninPage();
}
//--------------------------------------------------------------
$(function ()
{
$(':input:enabled:visible:first').focus();
$('#ifEmailAddress,#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm').on('keydown', function () { sax.clearControlError(this); });
$('#frmChangePassword #ifPassword').on('keyup', sax.doScorePassword);
sax.$prgPasswordStrength = $('#frmChangePassword #prgPasswordStrength').progressbar({ 'max': 5 });
$('#ifEmailAddress,#ifPassword', $('#frmSignIn')).on('keypress', function (e) { if (e.which == 13) sax.doSignin(); });
$('#frmSignIn #pbSignIn').on('click', function () { sax.doSignin(); });
$('#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm', $('#frmChangePassword')).on('keypress', function (e) { if (e.which == 13) sax.doChangePassword(); });
$('#frmChangePassword #pbChangePassword').on('click', function () { sax.doChangePassword(); });
$('#ifEmailAddress', $('#frmRequestPassword')).on('keypress', function (e) { if (e.which == 13) sax.doRequestPassword(); });
$('#frmRequestPassword #pbRequestPassword').on('click', function () { sax.doRequestPassword(); });
});
//--------------------------------------------------------------
sax.doScorePassword = function ()
{
sax.ajaxScorePassword = sax.ajaxScorePassword || { url: sax.url.base + 'Security/Ajax/ScorePassword', formId: 'frmChangePassword', callbackFn: sax.onScorePassword, noWaitIcon: true };
sax.doAjaxRequest(sax.ajaxScorePassword, 250);
}
sax.onScorePassword = function (response)
{
var score = (response || {}).score || 0;
sax.$prgPasswordStrength.progressbar("option", "value", score).removeClass('amber green').addClass(score > 3 ? 'green' : score > 2 ? 'amber' : '');
}
//--------------------------------------------------------------
//--------------------------------------------------------------
sax.doChangePassword = function ()
{
sax.clearControlErrors();
sax.ajaxChangePassword = sax.ajaxChangePassword || { url: sax.url.base + 'Security/Ajax/StorePassword', formId: 'frmChangePassword', callbackFn: sax.onChangePassword };
sax.doAjaxRequest(sax.ajaxChangePassword, 50);
}
sax.onChangePassword = function (response)
{
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
if ($('#ifRpe').length)
sax.goToPage('Security/Signin');
else sax.goToPage('');
}
//--------------------------------------------------------------
sax.doRequestPassword = function ()
{
sax.clearControlErrors();
sax.ajaxRequestPassword = sax.ajaxRequestPassword || { url: sax.url.base + 'Security/Ajax/RequestNewPassword', formId: 'frmRequestPassword', callbackFn: sax.onRequestPassword };
sax.doAjaxRequest(sax.ajaxRequestPassword, 50);
}
sax.onRequestPassword = function (response)
{
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
var gotoSigninPage = function ()
{
sax.goToPage('Security/Signin');
}
if (response.successMsg)
sax.doAlert($('.sax-page-caption').text(), response.successMsg, gotoSigninPage);
else gotoSigninPage();
}
//--------------------------------------------------------------
$(function ()
{
$(':input:enabled:visible:first').focus();
$('#ifEmailAddress,#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm').on('input', function () { sax.clearControlError(this); });
$('#frmChangePassword #ifPassword').on('keyup', sax.doScorePassword);
sax.$prgPasswordStrength = $('#frmChangePassword #prgPasswordStrength').progressbar({ 'max': 5 });
$('#ifEmailAddress,#ifPassword', $('#frmSignIn')).on('keypress', function (e) { if (e.which == 13) sax.doSignin(); });
$('#frmSignIn #pbSignIn').on('click', function () { sax.doSignin(); });
$('#ifPasswordCurrent,#ifPassword,#ifPasswordConfirm', $('#frmChangePassword')).on('keypress', function (e) { if (e.which == 13) sax.doChangePassword(); });
$('#frmChangePassword #pbChangePassword').on('click', function () { sax.doChangePassword(); });
$('#ifEmailAddress', $('#frmRequestPassword')).on('keypress', function (e) { if (e.which == 13) sax.doRequestPassword(); });
$('#frmRequestPassword #pbRequestPassword').on('click', function () { sax.doRequestPassword(); });
});
}(window, window.document));
/* The End */
@@ -0,0 +1,119 @@
/*
* Admin - Code selection.
*/
(function (win, doc, undef)
{
"use strict";
let sc = sax.selectCode = sax.selectCode || { fn: {}, $dlg: {}, codeIdPrefix: 'Code_' };
//--------------------------------------------------------------
/*
* Code selection config:
* - caption - dialog title.
* - width: preferred dialog width (default: 400).
* - height: preferred dialog height (default: 400).
* - showFilter: whether to display filter control(s).
* - filterLabel: filter code field caption.
* - maxItems: maximum number of available items to list.
* - codes - list of {code,desc,comment} objects
* - selectedCodes - list of codes.
* - fnCallback - method to call on completion to store codes taking list of selected codes as parameter.
*/
sc.fn.openSelectCode = function (cfg)
{
//sax.debug('openSelectCode', cfg);
sc.fn.init();
sc.cfg = cfg;
sc.selectedCodes = cfg.selectedCodes || [];
sc.fn.displayCodes(cfg.codes);
sax.openDialog(sc.$dlg.dialog('option', { title: cfg.caption || 'Select Codes' }), sc.cfg.width || 400, sc.cfg.height || 400);
}
sc.fn.displayCodes = function (codes)
{
let $codesAvail = $('.sax-selectCode-codes.AvailableCodes').empty();
let $codesSelec = $('.sax-selectCode-codes.SelectedCodes').empty();
let $codeTmpl = $('.sax-panel-item-template .sax-panel-item.Code');
for (let codeIdx = 0; codeIdx < codes.length; codeIdx++)
{
let code = codes[codeIdx];
let selected = sc.selectedCodes.indexOf(code.code) >= 0;
let $code = $codeTmpl.clone();
$($code).prop('id', sc.codeIdPrefix + code.code).attr('aria-code', code.code).on('click', function () { sc.fn.onClickCode(code.code); }).on('dblclick', function () { sc.fn.onDblClickCode(code.code); }).find('.CodeDesc').text(code.desc).end();
if (selected) $codesSelec.append($code);
else $codesAvail.append($code);
}
}
sc.fn.onClickCode = function (code)
{
$('.sax-panel-item.Code').removeClass('sel');
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
sc.fn.onDblClickCode = function (code)
{
let codeIdx = sc.selectedCodes.indexOf(code);
//sax.debug('onDblClickCode', code, codeIdx);
if (codeIdx >= 0) sc.selectedCodes.splice(codeIdx, 1); else sc.selectedCodes.push(code)
sc.fn.displayCodes(sc.cfg.codes)
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
sc.fn.onClickSelect = function ()
{
let codes = [];
$('.sax-selectCode-codes.AvailableCodes .sax-panel-item.Code.sel').each(function (idx, el)
{
let code = $(el).attr('aria-code');
if (code)
{
codes.push(code);
sc.selectedCodes.push(code);
};
});
sc.fn.displayCodes(sc.cfg.codes)
for (const code of codes)
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
sc.fn.onClickRemove = function ()
{
let codes = [];
$('.sax-selectCode-codes.SelectedCodes .sax-panel-item.Code.sel').each(function (idx, el)
{
let code = $(el).attr('aria-code');
if (code)
{
let codeIdx = sc.selectedCodes.indexOf(code);
if (codeIdx >= 0)
{
codes.push(code);
sc.selectedCodes.splice(codeIdx, 1);
}
};
});
sc.fn.displayCodes(sc.cfg.codes)
for (const code of codes)
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
sc.fn.storeSelectCode = function ()
{
//sax.debug('storeSelectCode', sc.cfg, sc.selectedCodes);
if (sc.cfg.fnCallback) sc.cfg.fnCallback(sc.selectedCodes);
sc.$dlg.dialog('close');
delete sc.cfg;
delete sc.selectedCodes;
}
//--------------------------------------------------------------
sc.fn.init = function ()
{
if (!sc.$dlg) return;
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sc.fn.storeSelectCode(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sc.$dlg = $('#dlgSelectCode').dialog(opt);
$('.sax-button.Select', sc.$dlg).on('click', function () { sc.fn.onClickSelect(); });
$('.sax-button.Remove', sc.$dlg).on('click', function () { sc.fn.onClickRemove(); });
}
}(window, window.document));
/* The End */
@@ -0,0 +1,124 @@
/*
* Admin - Item selection.
*/
(function (win, doc, undef)
{
"use strict";
let si = sax.data.selectItem = sax.data.selectItem || { items: {}, fn: {}, $dlg: {}, itemIdPrefix: 'Itm_' };
//--------------------------------------------------------------
/*
* Item selection config:
* - caption - dialog title.
* - items - list of objects: { id, name }
* - itemId - currently selected item.
* - fnCallback - method to call on completion to store selected item.
*/
si.fn.selectItem = function (cfg)
{
si.fn.init();
si.cfg = cfg;
si.itemId = cfg.itemId;
si.fn.showSelectItem();
}
si.fn.showSelectItem = function ()
{
$('.SelectedItemName', si.$dlg).text(si.fn.getItemName(si.itemId));
$('#ifItemFilter', si.$dlg).val('');
si.fn.displayItems();
sax.openDialog(si.$dlg.dialog('option', { title: si.cfg.caption || 'Select Item' }), 400, 600);
}
//--------------------------------------------------------------
si.fn.compareItems = function (a, b)
{
var comparison = a.name.toLowerCase().localeCompare(b.name.toLowerCase());
if (comparison === 0)
return a.name.localeCompare(b.name);
return comparison;
}
//--------------------------------------------------------------
si.fn.displayItems = function ()
{
let filter = $('#ifItemFilter', si.$dlg).val();
let reFilter = new RegExp(sax.escapeRegExp((filter || '').trim()), 'i');
let $itemsAvail = $('.sax-selectItem-items.AvailableItems').empty();
let $itemTmpl = $('.sax-panel-item-template .sax-panel-item.Item');
let items = [...si.cfg.items];
items.sort(si.fn.compareItems);
for (let rgnIdx = 0; rgnIdx < items.length; rgnIdx++)
{
let item = items[rgnIdx];
let id = item.id;
if (filter && !item.name.match(reFilter)) continue;
let $item = $itemTmpl.clone();
$item.prop('id', si.itemIdPrefix + id).on('click', function () { si.fn.onClickItem(id); }).on('dblclick', function () { si.fn.onDblClickItem(id); }).find('.ItemName').text(item.name).end();
if (id == si.itemId) $item.addClass('sel');
$itemsAvail.append($item);
}
}
si.fn.getItem = function (id)
{
for (let rgnIdx = 0; rgnIdx < si.cfg.items.length; rgnIdx++)
{
let item = si.cfg.items[rgnIdx];
if (item.id == id) return item;
}
}
si.fn.getItemName = function (id)
{
let item = si.fn.getItem(id);
return item ? item.name : '';
}
//--------------------------------------------------------------
si.fn.onClickItem = function (id)
{
$('.SelectedItemName', si.$dlg).text(si.fn.getItemName(si.itemId = id));
$('.sax-panel-item.Item').removeClass('sel');
$('.sax-panel-item.Item#' + si.itemIdPrefix + id).addClass('sel');
}
si.fn.onDblClickItem = function (id)
{
si.itemId = id;
si.fn.storeSelectItem();
}
si.fn.storeSelectItem = function ()
{
if (!si.itemId) return;
let item = si.fn.getItem(si.itemId);
if (!item) return;
if (si.cfg.fnCallback) si.cfg.fnCallback(item);
si.$dlg.dialog('close');
si.fn.cleanUp();
}
si.fn.cleanUp = function ()
{
delete si.cfg;
delete si.itemId;
}
//--------------------------------------------------------------
si.fn.onDlgSize = function ()
{
let $pnl = $('.sax-selectItem-items.AvailableItems');
$pnl.outerHeight(Math.floor(si.$dlg.innerHeight() - $pnl.position().top - ($pnl.outerHeight(true) - $pnl.innerHeight())));
}
//--------------------------------------------------------------
si.fn.init = function ()
{
if (!si.$dlg) return;
var opt = sax.dlgOpts();
opt.open = function (evt, ui) { si.fn.onDlgSize(); };
opt.resize = function (evt, ui) { si.fn.onDlgSize(); };
opt.buttons[sax.dlg.btn.ok] = function () { si.fn.storeSelectItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { si.fn.cleanUp(); $(this).dialog('close'); };
si.$dlg = $('#dlgSelectItem').dialog(opt);
}
}(window, window.document));
/* The End */
+132 -122
View File
@@ -1,136 +1,146 @@
/*
* Admin - Sport page scripts.
*/
"use strict";
sax.itemIdPrefix = 'Itm_';
//--------------------------------------------------------------
sax.refreshResults = function (delay)
(function (win, doc, undef)
{
var $results = $('.sax-panel-results');
if (!sax.awaitingRefreshResponse)
{
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmSportFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Sport', $results);
if (!response.success) return;
// Items.
var items = response.sports;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
{
let item = items[itemIdx];
let $item = $templ.clone();
sax.populateItem($item, item);
$items.append($item);
}
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
$('.SportName', $item).text(item.name);
$('.SportType', $item).text(item.typeDesc);
$('.SportCategory', $item).text(item.categoryDesc);
$('.StatusDesc', $item).text(item.statusDesc);
$('.sax-action.sax-item-update', $item).off('click').on('click', function () { sax.updateItem(item.id) })
}
"use strict";
sax.itemIdPrefix = 'Itm_';
//--------------------------------------------------------------
sax.createItem = function ()
{
$('.SportId,input[type="text"],textarea,select', sax.$frm.sport).val('');
sax.clearControlErrors();
sax.$dlg.sport.dialog('option', 'title', sax.dlg.title.createSport);
sax.openDialog(sax.$dlg.sport, 600, 600);
}
sax.doCreateItem = function ()
{
sax.storeItem();
}
//--------------------------------------------------------------
sax.updateItem = function (id)
{
$('.SportId', sax.$frm.sportId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Sport/Ajax/GetItem', formId: 'frmSportId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
let $frm = sax.$frm.sport;
$('.SportId,input[type="text"],textarea,select', $frm).val('');
if (!response.success) return;
let item = response.sport;
$('.SportId', $frm).val(item.id);
$('.SportName', $frm).val(item.name);
$('.SportType', $frm).val(item.typeCode);
$('.SportCategory', $frm).val(item.categoryCode);
sax.clearControlErrors();
sax.$dlg.sport.dialog('option', 'title', sax.dlg.title.updateSport);
sax.openDialog(sax.$dlg.sport, 600, 600);
}
sax.doUpdateItem = function ()
{
sax.storeItem();
}
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Sport/Ajax/StoreItem', formId: 'frmSport', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
}
sax.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.$dlg.sport.dialog('close');
var item = response.sport;
var $item = $('#' + sax.itemIdPrefix + item.id);
if (!$item.length)
//--------------------------------------------------------------
sax.refreshResults = function (delay)
{
var $results = $('.sax-panel-results');
$item = $('.sax-panel-item-template .sax-panel-item.Sport', $results).clone();
$('.sax-panel-item-list', $results).prepend($item).show();
if (!sax.awaitingRefreshResponse)
{
var $items = $('.sax-panel-item-list', $results).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $results).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajaxRefreshResults = sax.ajaxRefreshResults || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmSportFilter', callbackFn: sax.doRefreshResults };
sax.doAjaxRequest(sax.ajaxRefreshResults, delay || 50);
sax.awaitingRefreshResponse = true;
}
sax.doRefreshResults = function (response)
{
//sax.debug('doRefreshResults', response);
delete sax.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $results = $('.sax-panel-results');
var $msgs = $('.sax-panel-messages', $results).hide().empty();
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.Sport', $results);
if (!response.success) return;
// Reference data - Statuses.
if (response.defaultStatusCode) sax.data.defaultStatusCode = response.defaultStatusCode;
if (response.statuses)
sax.populateSelectCodeDesc('#cbSportStatus', response.statuses);
// Items.
var items = response.sports;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
{
let item = items[itemIdx];
let $item = $templ.clone();
sax.populateItem($item, item);
$items.append($item);
}
$items.fadeIn(50);
}
sax.populateItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
$('.SportName', $item).text(item.name);
$('.StatusDesc', $item).text(item.statusDesc);
$('.sax-action.sax-item-update', $item).off('click').on('click', function () { sax.updateItem(item.id) })
}
sax.populateItem($item, item)
}
//--------------------------------------------------------------
$(function ()
{
$('.sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('keydown', function () { sax.clearControlError(this); });
//--------------------------------------------------------------
sax.createItem = function ()
{
let $frm = sax.$frm.sport;
$('.SportId,input[type="text"],textarea,select', $frm).val('');
$('.SportStatus', $frm).val(sax.data.defaultStatusCode);
sax.clearControlErrors();
sax.$dlg.sport.dialog('option', 'title', sax.dlg.title.createSport);
sax.openDialog(sax.$dlg.sport, 600, 600);
}
sax.doCreateItem = function ()
{
sax.storeItem();
}
sax.$frm.sportId = $('#frmSportId');
sax.$frm.sport = $('#frmSport');
//--------------------------------------------------------------
sax.updateItem = function (id)
{
$('.SportId', sax.$frm.sportId).val(id);
sax.ajaxUpdateItem = sax.ajaxUpdateItem || { url: sax.url.base + 'Sport/Ajax/GetItem', formId: 'frmSportId', callbackFn: sax.onUpdateItem };
sax.doAjaxRequest(sax.ajaxUpdateItem, 50);
}
sax.onUpdateItem = function (response)
{
//sax.debug('onUpdateItem', response);
let $frm = sax.$frm.sport;
$('.SportId,input[type="text"],textarea,select', $frm).val('');
if (!response.success) return;
let item = response.sport;
$('.SportId', $frm).val(item.id);
$('.SportName', $frm).val(item.name);
$('.SportStatus', $frm).val(item.statusCode);
sax.clearControlErrors();
sax.$dlg.sport.dialog('option', 'title', sax.dlg.title.updateSport);
sax.openDialog(sax.$dlg.sport, 600, 600);
}
sax.doUpdateItem = function ()
{
sax.storeItem();
}
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.sport = $('#dlgSport').dialog(opt);
//--------------------------------------------------------------
sax.storeItem = function ()
{
sax.ajaxStoreItem = sax.ajaxStoreItem || { url: sax.url.base + 'Sport/Ajax/StoreItem', formId: 'frmSport', callbackFn: sax.onStoreItem };
sax.doAjaxRequest(sax.ajaxStoreItem, 50);
}
sax.onStoreItem = function (response)
{
//sax.debug('onStoreItem', response);
sax.refreshControlValues(response.controlValues);
if (!response.success) return;
sax.$dlg.sport.dialog('close');
setTimeout(sax.refreshResults, 250);
});
var item = response.sport;
var $item = $('#' + sax.itemIdPrefix + item.id);
if (!$item.length)
{
var $results = $('.sax-panel-results');
$item = $('.sax-panel-item-template .sax-panel-item.Sport', $results).clone();
$('.sax-panel-item-list', $results).prepend($item).show();
}
sax.populateItem($item, item)
}
//--------------------------------------------------------------
//--------------------------------------------------------------
$(function ()
{
$('.sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input').on('input', function () { sax.clearControlError(this); });
sax.$frm.filter = $('#frmSportFilter');
$('.FilterSport', sax.$frm.filter).on('input', function () { sax.refreshResults(250); });
sax.$frm.sportId = $('#frmSportId');
sax.$frm.sport = $('#frmSport');
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { sax.doCreateItem(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
sax.$dlg.sport = $('#dlgSport').dialog(opt);
setTimeout(sax.refreshResults, 250);
});
}(window, window.document));
/* The End */
+14 -4
View File
@@ -31,9 +31,13 @@
var $items = $('.sax-panel-item-list', $results).hide().empty();
var $templ = $('.sax-panel-item-template .sax-panel-item.User', $results);
if (!response.success) return;
// Reference data.
// Reference data - Roles.
if (response.userRoles && response.userRoles.length)
sax.data.userRoles = response.userRoles;
// Reference data - Statuses.
if (response.defaultStatusCode) sax.data.defaultStatusCode = response.defaultStatusCode;
if (response.statuses)
sax.populateSelectCodeDesc('#cbUserStatus', response.statuses);
// Items.
var items = response.users;
if (!items.length)
@@ -72,7 +76,7 @@
sax.selectUserRoleConfig = sax.selectUserRoleConfig || { caption: sax.dlg.title.selectUserRoles, width: 520, fnCallback: sax.updateUserRoles };
sax.selectUserRoleConfig.codes = sax.data.userRoles;
sax.selectUserRoleConfig.selectedCodes = sax.userAccount.userRoleCodes || [];
sax.codeSelection.fn.openCodeSelection(sax.selectUserRoleConfig);
sax.selectCode.fn.openSelectCode(sax.selectUserRoleConfig);
}
sax.updateUserRoles = function (userRoleCodes)
{
@@ -97,7 +101,9 @@
//--------------------------------------------------------------
sax.createItem = function ()
{
$('.UserAccountId,.UserRoleCodes,input[type="text"],textarea,select', sax.$frm.user).val('');
let $frm = sax.$frm.user;
$('.UserAccountId,.UserRoleCodes,input[type="text"],textarea,select', $frm).val('');
$('.UserStatus', $frm).val(sax.data.defaultStatusCode);
sax.clearControlErrors();
sax.userAccount = { userRoleCodes: [] };
sax.$dlg.user.dialog('option', 'title', sax.dlg.title.createUser);
@@ -130,6 +136,7 @@
$('.UserLastName', $frm).val(item.lastName);
$('.UserRoles', $frm).val(sax.getSelectedUserRoleDescs().join('\n'));
$('#ifUserRoleCodes').val(item.userRoleCodes.join(sax.data.userRoleCodeDelim));
$('.UserStatus', $frm).val(item.statusCode);
sax.$dlg.user.dialog('option', 'title', sax.dlg.title.updateUser);
sax.openDialog(sax.$dlg.user, 600, 600);
}
@@ -167,8 +174,11 @@
{
$('.sax-action.sax-item-create').on('click', function () { sax.createItem(); });
$('.sax-action.sax-results-refresh').on('click', function () { sax.refreshResults(); });
$('.sax-input,.sax-select').on('keydown click', function () { sax.clearControlError(this); });
$('.sax-input').on('input', function () { sax.clearControlError(this); });
$('.sax-select').on('click', function () { sax.clearControlError(this); });
sax.$frm.filter = $('#frmUserFilter');
$('.FilterUser', sax.$frm.filter).on('input', function () { sax.refreshResults(250); });
sax.$frm.userId = $('#frmUserId');
sax.$frm.user = $('#frmUser');