v1.2.4.1
This commit is contained in:
@@ -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 */
|
||||
Reference in New Issue
Block a user