Create attractive VASL scenarios, with loads of useful information embedded to assist with game play. https://vasl-templates.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
vasl-templates/vasl_templates/webapp/templates/scenario-nat-report.html

132 lines
4.3 KiB

<!doctype html> <!-- NOTE: For testing porpoises only! -->
<html lang="en">
<head>
<meta charset="utf-8">
<title> Scenario nationalities</title>
<style>
table { margin: 0 0 0 2em ; }
th { padding: 2px 5px ; text-align: left ; background: #eee ; }
td { padding: 2px 5px 2px 1em ; text-align: right ; }
</style>
</head>
<body>
<div id="results"></div>
</body>
<script src="{{url_for('static',filename='jquery/jquery-3.3.1.min.js')}}"></script>
<script src="{{url_for('static',filename='scenarios.js')}}"></script>
<script>
var gAppConfig, gTemplatePack, gScenarioIndex ;
$(document).ready( function () {
// get the information we need
var nResponsesPending = 3 ;
function onResponse() {
if ( -- nResponsesPending == 0 )
generateReport() ;
}
$.getJSON( "{{url_for('get_app_config')}}", function( resp ) {
gAppConfig = resp ;
onResponse() ;
} ).fail( function( xhr, status, errorMsg ) {
alert( "Can't get the app config:\n\n" + errorMsg ) ;
} ) ;
$.getJSON( "{{url_for('get_template_pack')}}", function( resp ) {
gTemplatePack = resp ;
onResponse() ;
} ).fail( function( xhr, status, errorMsg ) {
alert( "Can't get the template pack:\n\n" + errorMsg ) ;
} ) ;
$.getJSON( "{{url_for('get_scenario_index')}}", function( resp ) {
gScenarioIndex = resp ;
onResponse() ;
} ).fail( function( xhr, status, errorMsg ) {
alert( "Can't get the scenario index:\n\n" + errorMsg ) ;
} ) ;
} ) ;
</script>
<script>
function generateReport() {
// initialize
var exactMatches={}, mappedMatches={}, unknownNats={} ;
function updateCount( counts, key ) {
if ( counts[key] === undefined )
counts[ key ] = 1 ;
else
++ counts[ key ] ;
}
function checkPlayerNat( playerName ) {
if ( ! playerName )
return ;
var effectiveNat = getEffectivePlayerNat( playerName ) ;
if ( ! effectiveNat ) {
// record an unknown player nationality
updateCount( unknownNats, playerName ) ;
}
else if ( effectiveNat[1] == "exactMatch" || effectiveNat[1] == "partialMatch" ) {
// record an exact match
updateCount( exactMatches, effectiveNat[0] ) ;
} else if ( effectiveNat[1] == "exactMapping" || effectiveNat[1] == "partialMapping" ) {
// record a mapping
updateCount( mappedMatches, effectiveNat[2] ) ;
} else {
alert( "Unknown effective nat type: " + effectiveNat[1] ) ;
}
}
// process each scenario
var $results = $( "#results" ) ;
var maxScenarios = gScenarioIndex.length ;
function processScenario( scenarioNo ) {
if ( scenarioNo >= maxScenarios ) {
// we've processed all the scenarios - output the results
outputResults() ;
return ;
}
// get the next scenario
$results.text( "Generating the report: " + (1+scenarioNo) + "/" + gScenarioIndex.length ) ;
var url = "{{url_for('get_scenario',scenario_id='ID')}}".replace( "ID", gScenarioIndex[scenarioNo].scenario_id ) ;
$.getJSON( url, function( resp ) {
// check the 2 players
checkPlayerNat( resp.defender_name ) ;
checkPlayerNat( resp.attacker_name ) ;
// process the next scenario
processScenario( scenarioNo + 1 ) ;
} ).fail( function( xhr, status, errorMsg ) {
alert( "Can't get the scenario:\n\n" + errorMsg ) ;
} ) ;
}
processScenario( 0 ) ;
function outputResults() {
// output the results
$results.text( "Processed " + gScenarioIndex.length + " scenarios." ) ;
makeTable( "Exact/partial matches", exactMatches ) ;
makeTable( "Mapped matches", mappedMatches ) ;
makeTable( "Unknown", unknownNats ) ;
}
function makeTable( caption, vals, cmp ) {
var rows = [] ;
for ( key in vals )
rows.push( [ key, vals[key] ] ) ;
rows.sort( function( lhs, rhs ) { return lhs[1] < rhs[1] ; } ) ;
var buf = [ "<h2>", caption, "</h2>", "<table>" ] ;
rows.forEach( function( row ) {
buf.push( "<tr>", "<th>", row[0], "<td>", row[1] ) ;
} ) ;
buf.push( "</table>" ) ;
$results.append( $( buf.join("") ) ) ;
}
}
</script>
</html>