Allow template packs to include nationality data.

master
Pacman Ghost 6 years ago
parent 0320ea19a8
commit 6efa5be3a1
  1. 4
      vasl_templates/main.py
  2. 2
      vasl_templates/webapp/__init__.py
  3. 28
      vasl_templates/webapp/data/nationalities.json
  4. 7
      vasl_templates/webapp/snippets.py
  5. 28
      vasl_templates/webapp/static/main.js
  6. 15
      vasl_templates/webapp/static/snippets.js
  7. 12
      vasl_templates/webapp/tests/fixtures/template-packs/with-nationality-data/NATIONALITIES.JSON
  8. 0
      vasl_templates/webapp/tests/test_snippets.py
  9. 42
      vasl_templates/webapp/tests/test_template_packs.py

@ -15,7 +15,7 @@ import click
from vasl_templates.main_window import MainWindow
from vasl_templates.webapp import app as webapp
from vasl_templates.webapp import generate, load_debug_config
from vasl_templates.webapp import snippets, load_debug_config
# ---------------------------------------------------------------------
@ -53,7 +53,7 @@ def main( template_pack, debug ):
if not rc:
click.echo( "ERROR: The template pack must be a ZIP file or a directory containing the template files." )
return 1
generate.autoload_template_pack = template_pack
snippets.autoload_template_pack = template_pack
# install the debug config file
if debug:

@ -41,7 +41,7 @@ if os.path.isfile( _fname ):
# load the application
import vasl_templates.webapp.main #pylint: disable=cyclic-import
import vasl_templates.webapp.generate #pylint: disable=cyclic-import
import vasl_templates.webapp.snippets #pylint: disable=cyclic-import
# initialize the application
logger = logging.getLogger( "startup" )

@ -1,35 +1,43 @@
[
{
{ "display_name": "German",
"german": {
"display_name": "German",
"ob_colors": [ "OBCOL:german", "OBCOL2:german" ]
},
{ "display_name": "Russian",
"russian": {
"display_name": "Russian",
"ob_colors": [ "OBCOL:russian", "OBCOL2:russian" ]
},
{ "display_name": "American",
"american": {
"display_name": "American",
"ob_colors": [ "OBCOL:american", "OBCOL2:american" ]
},
{ "display_name": "British",
"british": {
"display_name": "British",
"ob_colors": [ "OBCOL:british", "OBCOL2:british" ]
},
{ "display_name": "French",
"french": {
"display_name": "French",
"ob_colors": [ "OBCOL:french", "OBCOL2:french" ]
},
{ "display_name": "Italian",
"italian": {
"display_name": "Italian",
"ob_colors": [ "OBCOL:italian", "OBCOL2:italian" ]
},
{ "display_name": "Finnish",
"finnish": {
"display_name": "Finnish",
"ob_colors": [ "OBCOL:finns", "OBCOL2:finns" ]
},
{ "display_name": "Japanese",
"japanese": {
"display_name": "Japanese",
"ob_colors": [ "OBCOL:japanese", "OBCOL2:japanese" ]
}
]
}

@ -88,9 +88,4 @@ def get_nationalities():
with open(fname,"r") as fp:
nationalities = json.load( fp )
# auto-generate ID's for those entries that don't already have one
for nat in nationalities:
if "id" not in nat:
nat["id"] = nat["display_name"].lower()
return jsonify( { n["id"]: n for n in nationalities } )
return jsonify( nationalities )

@ -1,4 +1,5 @@
var gNationalities = {} ;
var gDefaultNationalities = {} ;
var gDefaultTemplates = {} ;
var gUserDefinedTemplates = {} ;
@ -106,11 +107,8 @@ $(document).ready( function () {
// load the nationalities
$.getJSON( gGetNationalitiesUrl, function(data) {
gNationalities = data ;
var buf = [] ;
for ( var id in gNationalities )
buf.push( "<option value='" + id + "'>" + gNationalities[id].display_name + "</option>" ) ;
$("select[name='PLAYER_1']").html( buf ) ;
$("select[name='PLAYER_2']").html( buf ) ;
gDefaultNationalities = $.extend( true, {}, data ) ;
load_nationalities() ;
on_new_scenario( false ) ;
} ).fail( function( xhr, status, errorMsg ) {
showErrorMsg( "Can't get the nationalities:<div class='pre'>" + escapeHTML(errorMsg) + "</div>" ) ;
@ -213,6 +211,26 @@ $(document).ready( function () {
// --------------------------------------------------------------------
function load_nationalities()
{
// update the player droplists
var curSel1 = $("select[name='PLAYER_1']").val() ;
var curSel2 = $("select[name='PLAYER_2']").val() ;
var buf = [] ;
for ( var id in gNationalities )
buf.push( "<option value='" + id + "'>" + gNationalities[id].display_name + "</option>" ) ;
$("select[name='PLAYER_1']").html( buf ).val( curSel1 ) ;
$("select[name='PLAYER_2']").html( buf ).val( curSel2 ) ;
// update the OB tabs
if ( curSel1 )
on_player_change( $("select[name='PLAYER_1']") ) ;
if ( curSel2 )
on_player_change( $("select[name='PLAYER_2']") ) ;
}
// --------------------------------------------------------------------
function on_player_change( $select )
{
// figure out which player was changed

@ -407,10 +407,20 @@ function do_load_template_pack( fname, data )
var invalid_filename_extns = [] ;
var unknown_template_ids = [] ;
var new_templates = {} ;
var nationalities = null ;
// initialize
function on_new_template( fname, data ) {
// make sure the filename is valid
if ( fname.toLowerCase() === "nationalities.json" ) {
try {
nationalities = JSON.parse( data ) ;
} catch( ex ) {
showWarningMsg( "Can't parse the nationalities JSON data:<div class='pre'>" + escapeHTML(ex) + "</div>" ) ;
return ;
}
return ;
}
if ( fname.substring(fname.length-3) != ".j2" ) {
invalid_filename_extns.push( fname ) ;
return ;
@ -466,6 +476,11 @@ function do_load_template_pack( fname, data )
for ( tid in new_templates ){
gUserDefinedTemplates[tid] = new_templates[tid] ;
}
// install any user-defined nationality data
if ( nationalities !== null ) {
gNationalities = $.extend( true, {}, gDefaultNationalities, nationalities ) ;
load_nationalities() ;
}
showInfoMsg( success_msg ) ;
}

@ -0,0 +1,12 @@
{
"british": {
"display_name": "Poms!"
},
"korean": {
"display_name": "Korean",
"ob_colors": [ 111, 222 ]
}
}

@ -5,6 +5,8 @@ import zipfile
import tempfile
import base64
from selenium.webdriver.support.ui import Select
from vasl_templates.webapp.tests.utils import select_menu_option, get_clipboard
from vasl_templates.webapp.tests.utils import get_stored_msg, set_stored_msg, dismiss_notifications, find_child
from vasl_templates.webapp.tests.utils import for_each_template
@ -91,8 +93,8 @@ def test_autoload_template_pack( webapp, webdriver ):
# configure the autoload template pack
dname = os.path.join( os.path.split(__file__)[0], "fixtures/template-packs/autoload/" )
from vasl_templates.webapp import generate
generate.autoload_template_pack = dname
from vasl_templates.webapp import snippets
snippets.autoload_template_pack = dname
# initialize
webdriver.get( webapp.url_for( "main" ) )
@ -104,6 +106,42 @@ def test_autoload_template_pack( webapp, webdriver ):
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def test_nationality_data( webapp, webdriver ):
"""Test a template pack with nationality data."""
# initialize
webdriver.get( webapp.url_for( "main", store_msgs=1, template_pack_persistence=1 ) )
# select the British as player 1
sel = Select(
find_child( "select[name='PLAYER_1']" )
)
sel.select_by_value( "british" )
elem = find_child( "a[href='#tabs-ob1']" )
assert elem.text.strip() == "British OB"
sel = Select( find_child( "select[name='PLAYER_1']" ) )
assert sel.first_selected_option.text == "British"
players = [ o.text for o in sel.options ]
# upload a template pack that contains nationality data
zip_data = _make_zip_from_files( "with-nationality-data" )
_upload_template_pack( zip_data )
assert get_stored_msg("_last-error_") is None
# check that the UI was updated correctly
elem = find_child( "a[href='#tabs-ob1']" )
assert elem.text.strip() == "Poms! OB"
elem = find_child( "select[name='PLAYER_1']" )
assert Select(elem).first_selected_option.text == "Poms!"
# check that there is a new Korean player
players2 = [ o.text for o in sel.options ]
players2.remove( "Korean" )
players2 = [ "British" if o == "Poms!" else o for o in players2 ]
assert players2 == players
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def _check_snippets( func ):
"""Check that snippets are being generated as expected."""

Loading…
Cancel
Save