Added back removed NUI chunking code

This commit is contained in:
ElPumpo
2020-04-14 16:37:55 +02:00
parent a02b54f196
commit 2d46087ade
4 changed files with 71 additions and 122 deletions
+20 -54
View File
@@ -11,45 +11,41 @@ Citizen.CreateThread(function()
local openMenu = function(namespace, name, data)
SendNUIMessage({
action = 'openMenu',
action = 'openMenu',
namespace = namespace,
name = name,
data = data
name = name,
data = data
})
end
local closeMenu = function(namespace, name)
SendNUIMessage({
action = 'closeMenu',
action = 'closeMenu',
namespace = namespace,
name = name,
data = data
name = name,
data = data
})
end
ESX.UI.Menu.RegisterType(MenuType, openMenu, closeMenu)
RegisterNUICallback('menu_submit', function(data, cb)
AddEventHandler('esx_menu_default:message:menu_submit', function(data)
local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
if menu.submit then
if menu.submit ~= nil then
menu.submit(data, menu)
end
cb('OK')
end)
RegisterNUICallback('menu_cancel', function(data, cb)
AddEventHandler('esx_menu_default:message:menu_cancel', function(data)
local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
if menu.cancel then
if menu.cancel ~= nil then
menu.cancel(data, menu)
end
cb('OK')
end)
RegisterNUICallback('menu_change', function(data, cb)
AddEventHandler('esx_menu_default:message:menu_change', function(data)
local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
for i=1, #data.elements, 1 do
@@ -60,76 +56,46 @@ Citizen.CreateThread(function()
else
menu.setElement(i, 'selected', false)
end
end
if menu.change then
if menu.change ~= nil then
menu.change(data, menu)
end
cb('OK')
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
if IsControlPressed(0, 18) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
SendNUIMessage({
action = 'controlPressed',
control = 'ENTER'
})
SendNUIMessage({action = 'controlPressed', control = 'ENTER'})
GUI.Time = GetGameTimer()
end
if IsControlPressed(0, 177) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
SendNUIMessage({
action = 'controlPressed',
control = 'BACKSPACE'
})
SendNUIMessage({action = 'controlPressed', control = 'BACKSPACE'})
GUI.Time = GetGameTimer()
end
if IsControlPressed(0, 27) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 200 then
SendNUIMessage({
action = 'controlPressed',
control = 'TOP'
})
SendNUIMessage({action = 'controlPressed', control = 'TOP'})
GUI.Time = GetGameTimer()
end
if IsControlPressed(0, 173) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 200 then
SendNUIMessage({
action = 'controlPressed',
control = 'DOWN'
})
SendNUIMessage({action = 'controlPressed', control = 'DOWN'})
GUI.Time = GetGameTimer()
end
if IsControlPressed(0, 174) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
SendNUIMessage({
action = 'controlPressed',
control = 'LEFT'
})
SendNUIMessage({action = 'controlPressed', control = 'LEFT'})
GUI.Time = GetGameTimer()
end
if IsControlPressed(0, 175) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
SendNUIMessage({
action = 'controlPressed',
control = 'RIGHT'
})
SendNUIMessage({action = 'controlPressed', control = 'RIGHT'})
GUI.Time = GetGameTimer()
end
end
end)
end)
+1 -1
View File
@@ -91,4 +91,4 @@
.menu .menu-items .menu-item.selected {
background-color: #d0d0d0;
}
}
+44 -62
View File
@@ -1,9 +1,8 @@
(function(){
let MenuTpl =
'<div id="menu_{{_namespace}}_{{_name}}" class="menu{{#align}} align-{{align}}{{/align}}">' +
'<div class="head"><span>{{{title}}}</span></div>' +
'<div class="menu-items">' +
'<div class="menu-items">' +
'{{#elements}}' +
'<div class="menu-item {{#selected}}selected{{/selected}}">' +
'{{{label}}}{{#isSlider}} : &lt;{{{sliderLabel}}}&gt;{{/isSlider}}' +
@@ -14,14 +13,13 @@
'</div>'
;
window.ESX_MENU = {};
window.ESX_MENU = {};
ESX_MENU.ResourceName = 'esx_menu_default';
ESX_MENU.opened = {};
ESX_MENU.focus = [];
ESX_MENU.pos = {};
ESX_MENU.opened = {};
ESX_MENU.focus = [];
ESX_MENU.pos = {};
ESX_MENU.open = function(namespace, name, data) {
if (typeof ESX_MENU.opened[namespace] == 'undefined') {
ESX_MENU.opened[namespace] = {};
}
@@ -40,17 +38,17 @@
}
}
data._index = ESX_MENU.focus.length;
data._index = ESX_MENU.focus.length;
data._namespace = namespace;
data._name = name;
data._name = name;
for (let i=0; i<data.elements.length; i++) {
data.elements[i]._namespace = namespace;
data.elements[i]._name = name;
data.elements[i]._name = name;
}
ESX_MENU.opened[namespace][name] = data;
ESX_MENU.pos [namespace][name] = 0;
ESX_MENU.pos[namespace][name] = 0;
for (let i=0; i<data.elements.length; i++) {
if (data.elements[i].selected) {
@@ -62,15 +60,14 @@
ESX_MENU.focus.push({
namespace: namespace,
name : name
name: name
});
ESX_MENU.render();
$('#menu_' + namespace + '_' + name).find('.menu-item.selected')[0].scrollIntoView();
};
ESX_MENU.close = function(namespace, name) {
delete ESX_MENU.opened[namespace][name];
for (let i=0; i<ESX_MENU.focus.length; i++) {
@@ -81,37 +78,33 @@
}
ESX_MENU.render();
};
ESX_MENU.render = function() {
let menuContainer = document.getElementById('menus');
let focused = ESX_MENU.getFocused();
let menuContainer = document.getElementById('menus');
let focused = ESX_MENU.getFocused();
menuContainer.innerHTML = '';
$(menuContainer).hide();
for (let namespace in ESX_MENU.opened) {
for (let name in ESX_MENU.opened[namespace]) {
let menuData = ESX_MENU.opened[namespace][name];
let view = JSON.parse(JSON.stringify(menuData));
let view = JSON.parse(JSON.stringify(menuData));
for (let i=0; i<menuData.elements.length; i++) {
let element = view.elements[i];
switch (element.type) {
case 'default' : break;
case 'default': break;
case 'slider' : {
element.isSlider = true;
case 'slider': {
element.isSlider = true;
element.sliderLabel = (typeof element.options == 'undefined') ? element.value : element.options[element.value];
break;
}
default : break;
default: break;
}
if (i == ESX_MENU.pos[namespace][name]) {
@@ -134,28 +127,28 @@
};
ESX_MENU.submit = function(namespace, name, data) {
$.post('http://' + ESX_MENU.ResourceName + '/menu_submit', JSON.stringify({
SendMessage(ESX_MENU.ResourceName, 'menu_submit', {
_namespace: namespace,
_name : name,
current : data,
elements : ESX_MENU.opened[namespace][name].elements
}));
_name: name,
current: data,
elements: ESX_MENU.opened[namespace][name].elements
});
};
ESX_MENU.cancel = function(namespace, name) {
$.post('http://' + ESX_MENU.ResourceName + '/menu_cancel', JSON.stringify({
SendMessage(ESX_MENU.ResourceName, 'menu_cancel', {
_namespace: namespace,
_name : name
}));
_name: name
});
};
ESX_MENU.change = function(namespace, name, data) {
$.post('http://' + ESX_MENU.ResourceName + '/menu_change', JSON.stringify({
SendMessage(ESX_MENU.ResourceName, 'menu_change', {
_namespace: namespace,
_name : name,
current : data,
elements : ESX_MENU.opened[namespace][name].elements
}));
_name: name,
current: data,
elements: ESX_MENU.opened[namespace][name].elements
});
};
ESX_MENU.getFocused = function() {
@@ -163,7 +156,6 @@
};
window.onData = (data) => {
switch (data.action) {
case 'openMenu': {
@@ -177,16 +169,15 @@
}
case 'controlPressed': {
switch (data.control) {
case 'ENTER': {
let focused = ESX_MENU.getFocused();
if (typeof focused != 'undefined') {
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let elem = menu.elements[pos];
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let elem = menu.elements[pos];
if (menu.elements.length > 0) {
ESX_MENU.submit(focused.namespace, focused.name, elem);
@@ -207,13 +198,11 @@
}
case 'TOP': {
let focused = ESX_MENU.getFocused();
if (typeof focused != 'undefined') {
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
if (pos > 0) {
ESX_MENU.pos[focused.namespace][focused.name]--;
@@ -238,16 +227,14 @@
}
break;
}
case 'DOWN' : {
case 'DOWN': {
let focused = ESX_MENU.getFocused();
if (typeof focused != 'undefined') {
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let length = menu.elements.length;
if (pos < length - 1) {
@@ -275,13 +262,12 @@
break;
}
case 'LEFT' : {
case 'LEFT': {
let focused = ESX_MENU.getFocused();
if (typeof focused != 'undefined') {
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let elem = menu.elements[pos];
switch(elem.type) {
@@ -308,13 +294,12 @@
break;
}
case 'RIGHT' : {
case 'RIGHT': {
let focused = ESX_MENU.getFocused();
if (typeof focused != 'undefined') {
let menu = ESX_MENU.opened[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let pos = ESX_MENU.pos[focused.namespace][focused.name];
let elem = menu.elements[pos];
switch(elem.type) {
@@ -344,15 +329,12 @@
break;
}
default : break;
default: break;
}
break;
}
}
};
window.onload = function(e){
@@ -361,4 +343,4 @@
});
};
})();
})();
+6 -5
View File
@@ -1,16 +1,17 @@
<html>
<head>
<link rel="stylesheet" href="css/app.css" />
<meta charset="utf-8">
<link rel="stylesheet" href="nui://esx_menu_default/html/css/app.css">
</head>
<body>
<div id="menus"></div>
<script src="nui://game/ui/jquery.js"></script>
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
<script src="nui://es_extended/html/js/wrapper.js"></script>
<script src="js/mustache.min.js"></script>
<script src="js/app.js"></script>
<script src="nui://esx_menu_default/html/js/mustache.min.js" type="text/javascript"></script>
<script src="nui://esx_menu_default/html/js/app.js" type="text/javascript"></script>
</body>
</html>
</html>