/*────────────────────────────────────────────────────────────────────────────── Item Info Formatter [EDIT] [INFO] Renders item metadata into the NUI side panel. Prioritizes metadata (itemData.info) over base fields and supports a verbose "showItemData" mode that prints all metadata as a table. Main behaviors: • Phones list (phoneMeta) – Helper array to identify phone items. [INFO] • FormatItemInfo(itemData) – Entry point. Safely reads metadata and renders. [CORE] - If info.showItemData === true → prints all metadata via tableToString(). - Special case: "id_card" → prints structured ID details. - Fallbacks ensure safe, predictable output when fields are missing. Notes: • Keep DOM selectors (.item-info-title / .item-info-description) in sync with your UI. • Use `escapeHtml` for any untrusted string to avoid injection. [SEC] ──────────────────────────────────────────────────────────────────────────────*/ let phoneMeta = ['phone', 'black_phone', 'yellow_phone', 'red_phone', 'green_phone', 'white_phone']; // [INFO] function FormatItemInfo(itemData) { // Checks if itemData is valid and contains metadata info if (itemData != null && itemData.info != "") { let label = itemData?.info?.label || itemData?.label; // Sets the item label, prioritizing info metadata // If item has showItemData flag, display all metadata in a table format if (itemData.info.showItemData) { $(".item-info-title").html("

" + itemData.label + "

"); $(".item-info-description").html("

" + tableToString(itemData.info) + "

"); return; } // ID Card: Display CSN, first and last name, birthdate, gender, and nationality if (itemData.name == "id_card") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

CSN: " + (itemData.info.citizenid !== undefined ? itemData.info.citizenid : 'ID-Card ' + Math.floor(Math.random() * 99999)) + "

First Name: " + itemData.info.firstname + "

Last Name: " + itemData.info.lastname + "

Birth Date: " + itemData.info.birthdate + "

Gender: " + (itemData.info.gender !== undefined ? itemData.info.gender : 'AH-64 Apache Helicopter') + "

Nationality: " + (itemData.info.nationality !== undefined ? itemData.info.nationality : 'No information') + "

" ); } // Phone Items: Check if item is a phone and display relevant details if available else if (phoneMeta.includes(itemData.name) && itemData.info.phoneNumber) { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

Phone Number: " + itemData.info.phoneNumber + "

Firstname: " + itemData.info.charinfo.firstname + "

Lastname: " + itemData.info.charinfo.lastname + "

" ); // Other items } else if (itemData.name == "tradingcard_psa") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

PSA ID: " + itemData.info.serial + "

" ); } else if (itemData.name == "photo") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

" + itemData.info.location + "

" + itemData.info.date + "

" ); } else if (itemData.name == "vehiclekeys") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

Plate: " + itemData.info.plate + "

Model: " + itemData.info.description + "

" ); } else if (itemData.name == "plate") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

Plate: " + itemData.info.plate + "

" ); } else if (itemData.name == "backpack") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

ID: " + itemData.info.ID + "

Weight: " + itemData.info.weight + "

Slots: " + itemData.info.slots + "

" ); } else if (itemData.name == "backpack2") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

ID: " + itemData.info.ID + "

Weight: " + itemData.info.weight + "

Slots: " + itemData.info.slots + "

" ); } else if (itemData.name == "briefcase") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

ID: " + itemData.info.ID + "

Weight: " + itemData.info.weight + "

Slots: " + itemData.info.slots + "

" ); } else if (itemData.name == "paramedicbag") { $(".item-info-title").html("

" + label + "

"); $(".item-info-description").html( "

ID: " + itemData.info.ID + "

Weight: " + itemData.info.weight + "

Slots: " + itemData.info.slots + "

" ); } else if (itemData.name == "driver_license") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

First Name: " + itemData.info.firstname + "

Last Name: " + itemData.info.lastname + "

Birth Date: " + itemData.info.birthdate + "

Licenses: " + itemData.info.type + "

" ); } else if (itemData.name == "weaponlicense") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

First Name: " + itemData.info.firstname + "

Last Name: " + itemData.info.lastname + "

Birth Date: " + itemData.info.birthdate + "

" ); } else if (itemData.name == "lawyerpass") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

Pass-ID: " + itemData.info.id + "

First Name: " + itemData.info.firstname + "

Last Name: " + itemData.info.lastname + "

CSN: " + itemData.info.citizenid + "

" ); } else if (itemData.name == "harness") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

" + itemData.info.uses + " uses left.

" ); } else if (itemData.name == "weapontint_url") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

Tint status: " + (itemData.info.urltint !== undefined ? "Used" : "Without use") + "

URL Link: " + (itemData.info.urltint !== undefined ? itemData.info.urltint.substring(0, 40) + "..." : "N/A") + "

" ); } else if (itemData.type == "weapon") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); if (itemData.info.ammo == undefined) { itemData.info.ammo = 0; } else { itemData.info.ammo != null ? itemData.info.ammo : 0; } if (itemData.info.attachments != null) { var attachmentString = ""; $.each(itemData.info.attachments, function (i, attachment) { if (i == itemData.info.attachments.length - 1) { attachmentString += attachment.label; } else { attachmentString += attachment.label + ", "; } }); $(".item-info-description").html( "

Serial Number: " + itemData.info.serie + "

Munition: " + itemData.info.ammo + "

Attachments: " + attachmentString + "

" ); } else { $(".item-info-description").html( "

Serial Number: " + itemData.info.serie + "

Munition: " + itemData.info.ammo + "

" + itemData.description + "

" ); } } else if (itemData.name == "filled_evidence_bag") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); if (itemData.info.type == "casing") { $(".item-info-description").html( "

Evidence material: " + itemData.info.label + "

Type number: " + itemData.info.ammotype + "

Caliber: " + itemData.info.ammolabel + "

Serial Number: " + itemData.info.serie + "

Crime scene: " + itemData.info.street + "


" + itemData.description + "

" ); } else if (itemData.info.type == "blood") { $(".item-info-description").html( "

Evidence material: " + itemData.info.label + "

Blood type: " + itemData.info.bloodtype + "

DNA Code: " + itemData.info.dnalabel + "

Crime scene: " + itemData.info.street + "


" + itemData.description + "

" ); } else if (itemData.info.type == "fingerprint") { $(".item-info-description").html( "

Evidence material: " + itemData.info.label + "

Fingerprint: " + itemData.info.fingerprint + "

Crime Scene: " + itemData.info.street + "


" + itemData.description + "

" ); } else if (itemData.info.type == "dna") { $(".item-info-description").html( "

Evidence material: " + itemData.info.label + "

DNA Code: " + itemData.info.dnalabel + "


" + itemData.description + "

" ); } } else if ( itemData.info.costs != undefined && itemData.info.costs != null ) { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html("

" + itemData.info.costs + "

"); } else if (itemData.name == "stickynote") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html("

" + itemData.info.label + "

"); } else if (itemData.name == "moneybag") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

Amount of cash: $" + itemData.info.cash + "

" ); } else if (itemData.name == "cash") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

" + Lang('INVENTORY_NUI_OPTION_AMOUNT') + ": $" + itemData.amount + "

" ); } else if (itemData.name == "money") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

" + Lang('INVENTORY_NUI_OPTION_AMOUNT') + ": $" + itemData.amount + "

" ); } else if (itemData.name == "markedbills") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

" + Lang('INVENTORY_NUI_OPTION_AMOUNT') + ": $" + itemData.info.worth + "

" ); } else if (itemData.name == "visa" || itemData.name == "creditcard") { $(".item-info-title").html('

' + label + '

') var str = "" + itemData.info.cardNumber + ""; var res = str.slice(12); var cardNumber = "************" + res; $(".item-info-description").html('

Card Owner: ' + itemData.info.ownerName + '

Card Type: ' + itemData.info.cardType + '

Card Number: ' + cardNumber + '

'); } else if (itemData.name == "motelkey" && itemData.info) { $(".item-info-title").html('

' + label + '

') $(".item-info-description").html('

Motel Key: ' + itemData.info.motel + '

'); } else if (itemData.name == "labkey") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html("

Lab: " + itemData.info.lab + "

"); } else if (itemData.name == "ls_liquid_meth" || itemData.name == "ls_meth") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

Strain: " + itemData.info.strain + "

Purity: " + itemData.info.purity + "%

" ); } else if (itemData.name == "ls_ammonia" || itemData.name == "ls_iodine" || itemData.name == "ls_acetone") { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html( "

Remaining: " + itemData.info.quality + "%

" ); } else { $(".item-info-title").html("

" + `${itemData.info.label || label}` + "

"); $(".item-info-description").html("

" + itemData.description + "

"); } } else { $(".item-info-title").html("

" + itemData.label + "

"); $(".item-info-description").html("

" + itemData.description + "

"); } } const tableToString = (data) => { let table = ''; for (const [key, value] of Object.entries(data)) { table += ``; } table += '
${key}${value}
'; return table; }