(function(){ let MenuTpl = '' ; window.ESX_MENU = {}; ESX_MENU.ResourceName = 'esx_menu_list'; ESX_MENU.opened = {}; ESX_MENU.focus = []; ESX_MENU.data = {}; ESX_MENU.open = function(namespace, name, data) { if (typeof ESX_MENU.opened[namespace] == 'undefined') { ESX_MENU.opened[namespace] = {}; } if (typeof ESX_MENU.opened[namespace][name] != 'undefined') { ESX_MENU.close(namespace, name); } data._namespace = namespace; data._name = name; ESX_MENU.opened[namespace][name] = data; ESX_MENU.focus.push({ namespace: namespace, name : name }); ESX_MENU.render(); }; ESX_MENU.close = function(namespace, name) { delete ESX_MENU.opened[namespace][name]; for (let i=0; i' + matches[k][1] + ''); } view.rows[i].cols.push({data: data, content: col}); } } let menu = $(Mustache.render(MenuTpl, view)); menu.find('button[data-namespace][data-name]').click(function() { ESX_MENU.submit($(this).data('namespace'), $(this).data('name'), { data : ESX_MENU.data[$(this).data('namespace')][$(this).data('name')][parseInt($(this).data('id'))], value: $(this).data('value') }); }); menu.hide(); menuContainer.appendChild(menu[0]); } } if (typeof focused != 'undefined') { $('#menu_' + focused.namespace + '_' + focused.name).show(); } $(menuContainer).show(); }; ESX_MENU.submit = function(namespace, name, data){ $.post('http://' + ESX_MENU.ResourceName + '/menu_submit', JSON.stringify({ _namespace: namespace, _name : name, data : data.data, value : data.value })); }; ESX_MENU.cancel = function(namespace, name){ $.post('http://' + ESX_MENU.ResourceName + '/menu_cancel', JSON.stringify({ _namespace: namespace, _name : name })); }; ESX_MENU.getFocused = function(){ return ESX_MENU.focus[ESX_MENU.focus.length - 1]; }; window.onData = (data) => { switch(data.action){ case 'openMenu' : { ESX_MENU.open(data.namespace, data.name, data.data); break; } case 'closeMenu' : { ESX_MENU.close(data.namespace, data.name); break; } } }; window.onload = function(e){ window.addEventListener('message', (event) => { onData(event.data); }); }; document.onkeyup = function(data) { if(data.which == 27) { let focused = ESX_MENU.getFocused(); ESX_MENU.cancel(focused.namespace, focused.name); } }; })();