diff --git a/[esx]/esx_menu_default/.editorconfig b/[esx]/esx_menu_default/.editorconfig
deleted file mode 100644
index 9b425256..00000000
--- a/[esx]/esx_menu_default/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = true
-
-[*]
-indent_size = 4
-indent_style = tab
-end_of_line = crlf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
\ No newline at end of file
diff --git a/[esx]/esx_menu_default/README.md b/[esx]/esx_menu_default/README.md
index 7a2235e4..698365da 100644
--- a/[esx]/esx_menu_default/README.md
+++ b/[esx]/esx_menu_default/README.md
@@ -1,2 +1,18 @@
-# esx_menu_default
-ESX Menu Default
+
[ESX] Menu Defualt
Discord - Website - Documentation
+
+A defualt List type menu for ESX.
+
+
+
+
+## Legal
+
+esx_menu_defualt - Default Menu!
+
+Copyright (C) 2015-2022 Jérémie N'gadi
+
+This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version.
+
+This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details.
+
+You should have received a copy Of the GNU General Public License along with this program. If Not, see .
diff --git a/[esx]/esx_menu_default/client/main.lua b/[esx]/esx_menu_default/client/main.lua
index 0b9be851..d214c153 100644
--- a/[esx]/esx_menu_default/client/main.lua
+++ b/[esx]/esx_menu_default/client/main.lua
@@ -1,93 +1,117 @@
-local GUI, MenuType = {}, 'default'
+local GUI, MenuType, OpenedMenus = {}, 'default', 0
GUI.Time = 0
local function openMenu(namespace, name, data)
- SendNUIMessage({
- action = 'openMenu',
- namespace = namespace,
- name = name,
- data = data
- })
+ OpenedMenus += 1
+ SendNUIMessage({
+ action = 'openMenu',
+ namespace = namespace,
+ name = name,
+ data = data
+ })
end
local function closeMenu(namespace, name)
- SendNUIMessage({
- action = 'closeMenu',
- namespace = namespace,
- name = name,
- })
+ OpenedMenus -= 1
+ SendNUIMessage({
+ action = 'closeMenu',
+ namespace = namespace,
+ name = name
+ })
end
ESX.UI.Menu.RegisterType(MenuType, openMenu, closeMenu)
RegisterNUICallback('menu_submit', function(data, cb)
- local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
- if menu.submit ~= nil then
- menu.submit(data, menu)
- end
- cb('OK')
+ local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
+ if menu.submit ~= nil then
+ menu.submit(data, menu)
+ end
+ cb('OK')
end)
RegisterNUICallback('menu_cancel', function(data, cb)
- local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
+ local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
- if menu.cancel ~= nil then
- menu.cancel(data, menu)
- end
- cb('OK')
+ if menu.cancel ~= nil then
+ menu.cancel(data, menu)
+ end
+ cb('OK')
end)
RegisterNUICallback('menu_change', function(data, cb)
- local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
+ local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
- for i=1, #data.elements, 1 do
- menu.setElement(i, 'value', data.elements[i].value)
+ for i = 1, #data.elements, 1 do
+ menu.setElement(i, 'value', data.elements[i].value)
- if data.elements[i].selected then
- menu.setElement(i, 'selected', true)
- else
- menu.setElement(i, 'selected', false)
- end
- end
+ if data.elements[i].selected then
+ menu.setElement(i, 'selected', true)
+ else
+ menu.setElement(i, 'selected', false)
+ end
+ end
- if menu.change ~= nil then
- menu.change(data, menu)
- end
- cb('OK')
+ if menu.change ~= nil then
+ menu.change(data, menu)
+ end
+ cb('OK')
end)
CreateThread(function()
- while true do
- Wait(15)
+ while true do
+ local Sleep = 500
- if IsControlPressed(0, 18) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 150 then
- SendNUIMessage({action = 'controlPressed', control = 'ENTER'})
- GUI.Time = GetGameTimer()
- end
+ if OpenedMenus > 0 then
+ Sleep = 10
+ if IsControlPressed(0, 18) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
+ SendNUIMessage({
+ action = 'controlPressed',
+ control = 'ENTER'
+ })
+ GUI.Time = GetGameTimer()
+ end
- if IsControlPressed(0, 177) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 150 then
- SendNUIMessage({action = 'controlPressed', control = 'BACKSPACE'})
- GUI.Time = GetGameTimer()
- end
+ if IsControlPressed(0, 177) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
+ SendNUIMessage({
+ action = 'controlPressed',
+ control = 'BACKSPACE'
+ })
+ GUI.Time = GetGameTimer()
+ end
- if IsControlPressed(0, 27) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
- SendNUIMessage({action = 'controlPressed', control = 'TOP'})
- GUI.Time = GetGameTimer()
- end
+ if IsControlPressed(0, 27) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
+ SendNUIMessage({
+ action = 'controlPressed',
+ control = 'TOP'
+ })
+ GUI.Time = GetGameTimer()
+ end
- if IsControlPressed(0, 173) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
- SendNUIMessage({action = 'controlPressed', control = 'DOWN'})
- GUI.Time = GetGameTimer()
- end
+ if IsControlPressed(0, 173) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
+ SendNUIMessage({
+ action = 'controlPressed',
+ control = 'DOWN'
+ })
+ GUI.Time = GetGameTimer()
+ end
- if IsControlPressed(0, 174) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 150 then
- SendNUIMessage({action = 'controlPressed', control = 'LEFT'})
- GUI.Time = GetGameTimer()
- end
+ if IsControlPressed(0, 174) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
+ SendNUIMessage({
+ action = 'controlPressed',
+ control = 'LEFT'
+ })
+ GUI.Time = GetGameTimer()
+ end
- if IsControlPressed(0, 175) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 150 then
- SendNUIMessage({action = 'controlPressed', control = 'RIGHT'})
- GUI.Time = GetGameTimer()
- end
- end
+ if IsControlPressed(0, 175) and IsUsingKeyboard(0) and (GetGameTimer() - GUI.Time) > 200 then
+ SendNUIMessage({
+ action = 'controlPressed',
+ control = 'RIGHT'
+ })
+ GUI.Time = GetGameTimer()
+ end
+ end
+ Wait(Sleep)
+ end
end)
diff --git a/[esx]/esx_menu_default/fxmanifest.lua b/[esx]/esx_menu_default/fxmanifest.lua
index c9501bcb..9f92670f 100644
--- a/[esx]/esx_menu_default/fxmanifest.lua
+++ b/[esx]/esx_menu_default/fxmanifest.lua
@@ -3,25 +3,13 @@ fx_version 'adamant'
game 'gta5'
description 'ESX Menu Default'
-
+lua54 'yes'
version '1.7.5'
-client_scripts {
- '@es_extended/imports.lua',
- 'client/main.lua'
-}
+client_scripts {'@es_extended/imports.lua', 'client/main.lua'}
-ui_page {
- 'html/ui.html'
-}
+ui_page {'html/ui.html'}
-files {
- 'html/ui.html',
- 'html/css/app.css',
- 'html/js/mustache.min.js',
- 'html/js/app.js'
-}
+files {'html/ui.html', 'html/css/app.css', 'html/js/mustache.min.js', 'html/js/app.js'}
-dependencies {
- 'es_extended'
-}
+dependencies {'es_extended'}
diff --git a/[esx]/esx_menu_default/html/css/app.css b/[esx]/esx_menu_default/html/css/app.css
index d501d0c0..a4312dfe 100644
--- a/[esx]/esx_menu_default/html/css/app.css
+++ b/[esx]/esx_menu_default/html/css/app.css
@@ -1,110 +1,110 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@500;600&display=swap');
::-webkit-scrollbar {
- display: none;
- }
+ display: none;
+}
.menu {
- font-family: 'Poppins', sans-serif;
- min-width: 350px;
- color: #fff;
- position: absolute;
- background: rgba(33, 33, 33, 0.0);
- text-align: center;
+ font-family: 'Poppins', sans-serif;
+ min-width: 350px;
+ color: #fff;
+ position: absolute;
+ background: rgba(33, 33, 33, 0);
+ text-align: center;
}
.head {
- display: block;
- overflow: hidden;
- padding-bottom: 3px;
- text-align: center;
- margin-bottom: 5px;
- white-space: nowrap;
- background: rgba(10, 10, 10, 0.9);
+ display: block;
+ overflow: hidden;
+ padding-bottom: 3px;
+ text-align: center;
+ margin-bottom: 5px;
+ white-space: nowrap;
+ background: rgba(10, 10, 10, 0.9);
}
.menu .head {
- text-align: center;
- height: 28px;
- color: #ffffff;
- font-weight: 700;
- font-size: 20px;
+ text-align: center;
+ height: 28px;
+ color: #ffffff;
+ font-weight: 700;
+ font-size: 20px;
}
.menu .menu-items {
- max-height: 450px;
- overflow-y: auto;
- font-weight: 550;
+ max-height: 450px;
+ overflow-y: auto;
+ font-weight: 550;
}
.menu-items {
- margin-bottom: 2px;
+ margin-bottom: 2px;
}
.menu .menu-items .menu-item {
- display: block;
- padding: 7px;
- font-size: 13px;
- height: 16px;
- text-indent: 5px;
- margin-top: 5px;
- background: rgba(40, 40, 40, 0.8);
- color: rgb(202, 202, 202);
- border-radius: 5px;
- margin-bottom: 6px;
+ display: block;
+ padding: 7px;
+ font-size: 13px;
+ height: 16px;
+ text-indent: 5px;
+ margin-top: 5px;
+ background: rgba(40, 40, 40, 0.8);
+ color: rgb(202, 202, 202);
+ border-radius: 5px;
+ margin-bottom: 6px;
}
.menu .menu-items .menu-item.selected {
- border: 1px solid rgba(55, 55, 55, 0.9);
- background: rgba(20, 20, 20, 0.9);
- color: rgba(243, 243, 243);
- letter-spacing: 0.2px;
- font-weight: 500;
+ border: 1px solid rgba(55, 55, 55, 0.9);
+ background: rgba(20, 20, 20, 0.9);
+ color: rgba(243, 243, 243);
+ letter-spacing: 0.2px;
+ font-weight: 500;
}
.menu.align-left {
- left: 0;
- top: 50%;
+ left: 0;
+ top: 50%;
}
.menu.align-top-left {
- left: 3rem;
- top: 0;
+ left: 3rem;
+ top: 0;
}
.menu.align-top {
- left: 50%;
- top: 0;
+ left: 50%;
+ top: 0;
}
.menu.align-top-right {
- right: 3rem;
- top: 0;
+ right: 3rem;
+ top: 0;
}
.menu.align-right {
- right: 0;
- top: 50%;
+ right: 0;
+ top: 50%;
}
.menu.align-bottom-right {
- right: 3rem;
- bottom: 0;
+ right: 3rem;
+ bottom: 0;
}
.menu.align-bottom {
- left: 50%;
- bottom: 0;
- transform: translate(0, -50%);
+ left: 50%;
+ bottom: 0;
+ transform: translate(0, -50%);
}
.menu.align-bottom-left {
- left: 3rem;
- bottom: 0;
+ left: 3rem;
+ bottom: 0;
}
.menu.align-center {
- left: 50%;
- top: 35%;
- transform:translate(-50%, 50%);
+ left: 50%;
+ top: 35%;
+ transform: translate(-50%, 50%);
}
diff --git a/[esx]/esx_menu_default/html/js/app.js b/[esx]/esx_menu_default/html/js/app.js
index 3c9acd69..2ce7a0f9 100644
--- a/[esx]/esx_menu_default/html/js/app.js
+++ b/[esx]/esx_menu_default/html/js/app.js
@@ -1,346 +1,378 @@
-(function(){
- let MenuTpl =
- '
' +
- ''
- ;
-
- window.ESX_MENU = {};
- ESX_MENU.ResourceName = 'esx_menu_default';
- 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] = {};
- }
-
- if (typeof ESX_MENU.opened[namespace][name] != 'undefined') {
- ESX_MENU.close(namespace, name);
- }
-
- if (typeof ESX_MENU.pos[namespace] == 'undefined') {
- ESX_MENU.pos[namespace] = {};
- }
-
- for (let i=0; i {
- 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;
- }
-
- 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];
-
- if (menu.elements.length > 0) {
- ESX_MENU.submit(focused.namespace, focused.name, elem);
- }
- }
-
- break;
- }
-
- case 'BACKSPACE': {
- let focused = ESX_MENU.getFocused();
-
- if (typeof focused != 'undefined') {
- ESX_MENU.cancel(focused.namespace, focused.name);
- }
-
- break;
- }
-
- 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];
-
- if (pos > 0) {
- ESX_MENU.pos[focused.namespace][focused.name]--;
- } else {
- ESX_MENU.pos[focused.namespace][focused.name] = menu.elements.length - 1;
- }
-
- let elem = menu.elements[ESX_MENU.pos[focused.namespace][focused.name]];
-
- for (let i=0; i min) {
- elem.value--;
- ESX_MENU.change(focused.namespace, focused.name, elem);
- }
-
- ESX_MENU.render();
- break;
- }
-
- default: break;
- }
-
- $('#menu_' + focused.namespace + '_' + focused.name).find('.menu-item.selected')[0].scrollIntoView();
- }
-
- break;
- }
-
- 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 elem = menu.elements[pos];
-
- switch(elem.type) {
- case 'default': break;
-
- case 'slider': {
- if (typeof elem.options != 'undefined' && elem.value < elem.options.length - 1) {
- elem.value++;
- ESX_MENU.change(focused.namespace, focused.name, elem);
- }
-
- if (typeof elem.max != 'undefined' && elem.value < elem.max) {
- elem.value++;
- ESX_MENU.change(focused.namespace, focused.name, elem);
- }
-
- ESX_MENU.render();
- break;
- }
-
- default: break;
- }
-
- $('#menu_' + focused.namespace + '_' + focused.name).find('.menu-item.selected')[0].scrollIntoView();
- }
-
- break;
- }
-
- default: break;
- }
-
- break;
- }
- }
- };
-
- window.onload = function(e){
- window.addEventListener('message', (event) => {
- onData(event.data);
- });
- };
-
-})();
+;(function () {
+ let MenuTpl =
+ '' +
+ ''
+ window.ESX_MENU = {}
+ ESX_MENU.ResourceName = 'esx_menu_default'
+ 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] = {}
+ }
+
+ if (typeof ESX_MENU.opened[namespace][name] != 'undefined') {
+ ESX_MENU.close(namespace, name)
+ }
+
+ if (typeof ESX_MENU.pos[namespace] == 'undefined') {
+ ESX_MENU.pos[namespace] = {}
+ }
+
+ for (let i = 0; i < data.elements.length; i++) {
+ if (typeof data.elements[i].type == 'undefined') {
+ data.elements[i].type = 'default'
+ }
+ }
+
+ data._index = ESX_MENU.focus.length
+ data._namespace = namespace
+ data._name = name
+
+ for (let i = 0; i < data.elements.length; i++) {
+ data.elements[i]._namespace = namespace
+ data.elements[i]._name = name
+ }
+
+ ESX_MENU.opened[namespace][name] = data
+ ESX_MENU.pos[namespace][name] = 0
+
+ for (let i = 0; i < data.elements.length; i++) {
+ if (data.elements[i].selected) {
+ ESX_MENU.pos[namespace][name] = i
+ } else {
+ data.elements[i].selected = false
+ }
+ }
+
+ ESX_MENU.focus.push({
+ namespace: namespace,
+ 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++) {
+ if (
+ ESX_MENU.focus[i].namespace == namespace &&
+ ESX_MENU.focus[i].name == name
+ ) {
+ ESX_MENU.focus.splice(i, 1)
+ break
+ }
+ }
+
+ ESX_MENU.render()
+ }
+
+ ESX_MENU.render = function () {
+ 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))
+
+ for (let i = 0; i < menuData.elements.length; i++) {
+ let element = view.elements[i]
+
+ switch (element.type) {
+ case 'default':
+ break
+
+ case 'slider': {
+ element.isSlider = true
+ element.sliderLabel =
+ typeof element.options == 'undefined'
+ ? element.value
+ : element.options[element.value]
+
+ break
+ }
+
+ default:
+ break
+ }
+
+ if (i == ESX_MENU.pos[namespace][name]) {
+ element.selected = true
+ }
+ }
+
+ let menu = $(Mustache.render(MenuTpl, view))[0]
+ $(menu).hide()
+ menuContainer.appendChild(menu)
+ }
+ }
+
+ 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,
+ current: data,
+ elements: ESX_MENU.opened[namespace][name].elements
+ })
+ )
+ }
+
+ ESX_MENU.cancel = function (namespace, name) {
+ $.post(
+ 'http://' + ESX_MENU.ResourceName + '/menu_cancel',
+ JSON.stringify({
+ _namespace: namespace,
+ _name: name
+ })
+ )
+ }
+
+ ESX_MENU.change = function (namespace, name, data) {
+ $.post(
+ 'http://' + ESX_MENU.ResourceName + '/menu_change',
+ JSON.stringify({
+ _namespace: namespace,
+ _name: name,
+ current: data,
+ elements: ESX_MENU.opened[namespace][name].elements
+ })
+ )
+ }
+
+ 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
+ }
+
+ 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]
+
+ if (menu.elements.length > 0) {
+ ESX_MENU.submit(focused.namespace, focused.name, elem)
+ }
+ }
+
+ break
+ }
+
+ case 'BACKSPACE': {
+ let focused = ESX_MENU.getFocused()
+
+ if (typeof focused != 'undefined') {
+ ESX_MENU.cancel(focused.namespace, focused.name)
+ }
+
+ break
+ }
+
+ 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]
+
+ if (pos > 0) {
+ ESX_MENU.pos[focused.namespace][focused.name]--
+ } else {
+ ESX_MENU.pos[focused.namespace][focused.name] =
+ menu.elements.length - 1
+ }
+
+ let elem =
+ menu.elements[ESX_MENU.pos[focused.namespace][focused.name]]
+
+ for (let i = 0; i < menu.elements.length; i++) {
+ if (i == ESX_MENU.pos[focused.namespace][focused.name]) {
+ menu.elements[i].selected = true
+ } else {
+ menu.elements[i].selected = false
+ }
+ }
+
+ ESX_MENU.change(focused.namespace, focused.name, elem)
+ ESX_MENU.render()
+
+ $('#menu_' + focused.namespace + '_' + focused.name)
+ .find('.menu-item.selected')[0]
+ .scrollIntoView()
+ }
+
+ break
+ }
+
+ 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 length = menu.elements.length
+
+ if (pos < length - 1) {
+ ESX_MENU.pos[focused.namespace][focused.name]++
+ } else {
+ ESX_MENU.pos[focused.namespace][focused.name] = 0
+ }
+
+ let elem =
+ menu.elements[ESX_MENU.pos[focused.namespace][focused.name]]
+
+ for (let i = 0; i < menu.elements.length; i++) {
+ if (i == ESX_MENU.pos[focused.namespace][focused.name]) {
+ menu.elements[i].selected = true
+ } else {
+ menu.elements[i].selected = false
+ }
+ }
+
+ ESX_MENU.change(focused.namespace, focused.name, elem)
+ ESX_MENU.render()
+
+ $('#menu_' + focused.namespace + '_' + focused.name)
+ .find('.menu-item.selected')[0]
+ .scrollIntoView()
+ }
+
+ break
+ }
+
+ 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 elem = menu.elements[pos]
+
+ switch (elem.type) {
+ case 'default':
+ break
+
+ case 'slider': {
+ let min = typeof elem.min == 'undefined' ? 0 : elem.min
+
+ if (elem.value > min) {
+ elem.value--
+ ESX_MENU.change(focused.namespace, focused.name, elem)
+ }
+
+ ESX_MENU.render()
+ break
+ }
+
+ default:
+ break
+ }
+
+ $('#menu_' + focused.namespace + '_' + focused.name)
+ .find('.menu-item.selected')[0]
+ .scrollIntoView()
+ }
+
+ break
+ }
+
+ 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 elem = menu.elements[pos]
+
+ switch (elem.type) {
+ case 'default':
+ break
+
+ case 'slider': {
+ if (
+ typeof elem.options != 'undefined' &&
+ elem.value < elem.options.length - 1
+ ) {
+ elem.value++
+ ESX_MENU.change(focused.namespace, focused.name, elem)
+ }
+
+ if (typeof elem.max != 'undefined' && elem.value < elem.max) {
+ elem.value++
+ ESX_MENU.change(focused.namespace, focused.name, elem)
+ }
+
+ ESX_MENU.render()
+ break
+ }
+
+ default:
+ break
+ }
+
+ $('#menu_' + focused.namespace + '_' + focused.name)
+ .find('.menu-item.selected')[0]
+ .scrollIntoView()
+ }
+
+ break
+ }
+
+ default:
+ break
+ }
+
+ break
+ }
+ }
+ }
+
+ window.onload = function (e) {
+ window.addEventListener('message', event => {
+ onData(event.data)
+ })
+ }
+})()
diff --git a/[esx]/esx_menu_default/html/ui.html b/[esx]/esx_menu_default/html/ui.html
index 9e2a4979..5c090697 100644
--- a/[esx]/esx_menu_default/html/ui.html
+++ b/[esx]/esx_menu_default/html/ui.html
@@ -1,18 +1,25 @@
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+