This commit is contained in:
2022-03-04 18:15:23 +00:00
parent 122056a9da
commit 362aa31e15
68 changed files with 1163 additions and 761 deletions
@@ -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 */