JSFiddle - React, Tailwind, and code Playground

by Nick Iaconis

HTML

<input id="position" placeholder="Satellite Position ID" />
<br />
<input id="satellite_offset" placeholder="Satellite ID Start #" />
<br />
<textarea id="input" placeholder="Satellites XML"></textarea>
<button id="go">Go</button><br />
Satellites<br />
<textarea id="satellites" disabled="disabled"></textarea><br />
Beams<br />
<textarea id="beams" disabled="disabled"></textarea><br />
Carriers<br />
<textarea id="carriers" disabled="disabled"></textarea>

JavaScript

// MUOS Contour Results Fixtures XML Parser

function parseContour(string) {
    var input = string.replace("\n", " "),
        output = "["
    input = input.split(" ")
    input.forEach(function(pair) {
        var lnglat = pair.split(",")
        if ( pair.indexOf(",") > -1 )
            output = output + "[" + lnglat[1] + ", " + lnglat[0] + "], "
    })
    output = output.substring(0, output.length - 2)
    output = output + "]"
    return output
}

function parseSatelliteXML(xml, satelliteNo, positionId) {
    var $satelliteXML = $(xml)
    return '{\n  id: "satellite_' + satelliteNo + '",\n  position: "' + positionId + '",\n  location: [' + $satelliteXML.attr('Latitude') + ', ' + $satelliteXML.attr('Longitude') + '],\n  beams: []\n}, '
}

function parseBeamXML(xml, beamName, satelliteNo) {
    var $beamXML = $(xml)
    return '{\n  id: "' + beamName + '",\n  satellite: "satellite_' + satelliteNo + '",\n  contour: ' + parseContour($beamXML.find('Contour').text()) + ',\n  carriers: []\n}, '
}

function parseCarrierXML(xml, beamName) {
    var $carrierXML = $(xml)
    return '{\n  id: generateCarrierId(),\n  beam: "' + beamName + '",\n  txPower: ' + $carrierXML.find('TxPower').text() + ',\n  loadFactor: ' + $carrierXML.find('LoadFactor').text() + ',\n  ovsf: ' + $carrierXML.find('OVSF').text() + '\n}, '
}

$('#go').on('click', function() {
    var positionId = $('#position').val() || "satellite_position_0",
        inputString = $('#input').val(),
        $xml = $($.parseXML(inputString)),
        satelliteOutput = "",
        beamOutput = "",
        carrierOutput = "",
        satelliteNo = Number($('#satellite_offset').val()) || 0
    
    // Parse all SATELLITES
    $xml.find('Satellite').each(function() {
        satelliteOutput = satelliteOutput + parseSatelliteXML(this, satelliteNo, positionId)
        
        // Parse BEAMS of this satellite
        $(this).find('Beam').each(function() {
            var $beam = $(this),
                beamName =...