diff --git a/vasl_templates/webapp/data/default-template-pack/turn_track.j2 b/vasl_templates/webapp/data/default-template-pack/turn_track.j2 index 50e72d7..99f07be 100644 --- a/vasl_templates/webapp/data/default-template-pack/turn_track.j2 +++ b/vasl_templates/webapp/data/default-template-pack/turn_track.j2 @@ -22,14 +22,15 @@ td.no-reinforce { {{RESET_TD}} ; width: 13px ; } td.reinforce1 { {{RESET_TD}} ; width: 13px ; background: url("{{TURN_TRACK_FLAG_1}}") top left no-repeat ; vertical-align: top ; } td.reinforce2 { {{RESET_TD}} ; width: 13px ; background: url("{{TURN_TRACK_FLAG_2}}") bottom right no-repeat ; vertical-align: bottom ; } td.half-turn { - background: url("{{IMAGES_BASE_URL}}/turn-track-half-turn.png") bottom right no-repeat ; + background: url("{{TURN_TRACK_HALF_TURN_IMAGE_URL}}") bottom right no-repeat ; background-size: contain ; {# nb: doesn't work in VASSAL, the image file needs to be the correct size :-/ #} } {% if TURN_TRACK_PREVIEW_MODE %} body { margin: 0 ; } .reinforce1, .reinforce2 { opacity: 0 ; } -.click { width: 13px ; height: 13px ; cursor: pointer ; } +.flag-click { width: 13px ; height: 13px ; cursor: pointer ; } +.shading-click { cursor: pointer ; } {%endif%} @@ -45,6 +46,12 @@ function onFlagClick( turnNo, playerNo ) { turnNo: turnNo, uiPlayerNo: playerNo }, "*" ) ; } +function onShadingClick( turnNo ) { + window.parent.postMessage( { + type: "ShadingClick", + turnNo: turnNo + }, "*" ) ; +} {%endif%} @@ -54,27 +61,40 @@ function onFlagClick( turnNo, playerNo ) {
{% if TURN_TRACK_PREVIEW_MODE %}
- |
- {{turnSquare[0]}} | +
+{% if TURN_TRACK_PREVIEW_MODE %}
+
+ {{turnSquare[0]}}
+
+{%else%}
+ {{turnSquare[0]}}
+{%endif%}
+ |
{% if TURN_TRACK_PREVIEW_MODE and turnSquare[0] != TURN_TRACK_HALF_TURN %}
-
diff --git a/vasl_templates/webapp/tests/test_turn_track.py b/vasl_templates/webapp/tests/test_turn_track.py
index 6513dea..8eb481d 100644
--- a/vasl_templates/webapp/tests/test_turn_track.py
+++ b/vasl_templates/webapp/tests/test_turn_track.py
@@ -44,10 +44,10 @@ def test_turn_track_controls( webapp, webdriver ):
# show the turn track dialog
dlg = _show_turn_track_dialog( 6 )
with SwitchFrame( webdriver, "#turn-track-preview" ):
- _click_reinf_flag( 1, 1 )
- _click_reinf_flag( 2, 1 )
- _click_reinf_flag( 2, 2 )
- _click_reinf_flag( 3, 2 )
+ _toggle_reinf( 1, 1 )
+ _toggle_reinf( 2, 1 )
+ _toggle_reinf( 2, 2 )
+ _toggle_reinf( 3, 2 )
# change the width
_change_turn_track_width( dlg, 3 )
@@ -100,10 +100,10 @@ def test_turn_track_reinforcements( webapp, webdriver ):
# turn on some reinforcements, then check the snippet
with SwitchFrame( webdriver, "#turn-track-preview" ):
- _click_reinf_flag( 2, 1 )
- _click_reinf_flag( 3, 1 )
- _click_reinf_flag( 3, 2 )
- _click_reinf_flag( 7, 1 )
+ _toggle_reinf( 2, 1 )
+ _toggle_reinf( 3, 1 )
+ _toggle_reinf( 3, 2 )
+ _toggle_reinf( 7, 1 )
assert _generate_turn_track_snippet( dlg ) == [
[ (1,None,None), (2,"player1",None), (3,"player1","player2"),
(4,None,None), (5,None,None) , (6,None,None), (7,"player1",None)
@@ -112,11 +112,11 @@ def test_turn_track_reinforcements( webapp, webdriver ):
# turn off some reinforcements, turn some on, then check the snippet
with SwitchFrame( webdriver, "#turn-track-preview" ):
- _click_reinf_flag( 2, 2 )
- _click_reinf_flag( 3, 1 )
- _click_reinf_flag( 3, 2 )
- _click_reinf_flag( 5, 2 )
- _click_reinf_flag( 7, 1 )
+ _toggle_reinf( 2, 2 )
+ _toggle_reinf( 3, 1 )
+ _toggle_reinf( 3, 2 )
+ _toggle_reinf( 5, 2 )
+ _toggle_reinf( 7, 1 )
assert _generate_turn_track_snippet( dlg ) == [
[ (1,None,None), (2,"player1","player2"), (3,None,None),
(4,None,None), (5,None,"player2") , (6,None,None), (7,None,None)
@@ -125,6 +125,40 @@ def test_turn_track_reinforcements( webapp, webdriver ):
# ---------------------------------------------------------------------
+def test_turn_track_shading( webapp, webdriver ):
+ """Test shading squares on the turn track."""
+
+ # initialize
+ webapp.control_tests.set_data_dir( "{REAL}" )
+ init_webapp( webapp, webdriver )
+
+ # show the turn track dialog
+ dlg = _show_turn_track_dialog( 6.5 )
+
+ # shade some turn track squares, then check the snippet
+ with SwitchFrame( webdriver, "#turn-track-preview" ):
+ _toggle_shading( 1 )
+ _toggle_shading( 2 )
+ _toggle_shading( 7 )
+ assert _generate_turn_track_snippet( dlg ) == [
+ [ (1,None,None,True), (2,None,None,True), (3,None,None),
+ (4,None,None), (5,None,None) , (6,None,None), (7,None,None,True)
+ ]
+ ]
+
+ # change the shading for some turn track squares, then check the snippet
+ with SwitchFrame( webdriver, "#turn-track-preview" ):
+ _toggle_shading( 1 )
+ _toggle_shading( 3 )
+ _toggle_shading( 7 )
+ assert _generate_turn_track_snippet( dlg ) == [
+ [ (1,None,None), (2,None,None,True), (3,None,None,True),
+ (4,None,None), (5,None,None) , (6,None,None), (7,None,None)
+ ]
+ ]
+
+# ---------------------------------------------------------------------
+
def test_turn_track_persistence( webapp, webdriver ):
"""Test saving and loading turn track settings."""
@@ -141,10 +175,12 @@ def test_turn_track_persistence( webapp, webdriver ):
# configure the turn track
with SwitchFrame( webdriver, "#turn-track-preview" ):
- _click_reinf_flag( 1, 1 )
- _click_reinf_flag( 2, 2 )
- _click_reinf_flag( 3, 1 )
- _click_reinf_flag( 3, 2 )
+ _toggle_reinf( 1, 1 )
+ _toggle_reinf( 2, 2 )
+ _toggle_reinf( 3, 1 )
+ _toggle_reinf( 3, 2 )
+ _toggle_shading( 2 )
+ _toggle_shading( 4 )
_change_turn_track_width( dlg, 4 )
_swap_turn_track_players( dlg )
_change_turn_track_direction( dlg )
@@ -152,7 +188,7 @@ def test_turn_track_persistence( webapp, webdriver ):
# check the snippet
expected = [
[ (1,None,"player2"), (3,"player1","player2"), (5,None,None), (7,None,None) ],
- [ (2,"player1",None) , (4,None,None), (6,None,None) ]
+ [ (2,"player1",None,True) , (4,None,None,True), (6,None,None) ]
]
wait_for( 2,
lambda: _generate_turn_track_snippet( dlg ) == expected
@@ -164,6 +200,7 @@ def test_turn_track_persistence( webapp, webdriver ):
assert saved_scenario["TURN_TRACK"] == {
"NTURNS": "6.5",
"WIDTH": "4", "VERTICAL": True, "SWAP_PLAYERS": True,
+ "SHADING": "2,4",
"REINFORCEMENTS_1": "2,3", "REINFORCEMENTS_2": "1,3",
}
assert _generate_turn_track_snippet( None ) == expected
@@ -264,13 +301,18 @@ def _generate_turn_track_snippet( dlg ):
return None
def unload_square( square ):
+ # unload the reinforcement flags
cells = square.xpath( ".//td" )
assert len(cells) == 3
- return (
+ vals = (
int( cells[1].text ),
get_reinforce_class( cells[0] ),
get_reinforce_class( cells[2] ),
)
+ # check if the square is shaded
+ if any( s.startswith( "background-color:" ) for s in square.xpath( ".//@style" ) ):
+ vals = ( *vals, True )
+ return vals
# unload the snippet contents
squares = unload_table( "//table[@class='turn-track']", html=clipboard, unload=False )
@@ -302,10 +344,16 @@ def _unload_turn_track_droplist():
keys.append( key )
return keys
-def _click_reinf_flag( turn_no, player_no ):
- """Click on a reinforcement flag."""
+def _toggle_reinf( turn_no, player_no ):
+ """Toggle a player's reinforcements for the specified turn."""
+ find_child(
+ "#flag-{}_{} .flag-click".format( turn_no, player_no )
+ ).click()
+
+def _toggle_shading( turn_no ):
+ """Toggle the shading for a turn track square."""
find_child(
- "#flag-{}_{} .click".format( turn_no, player_no )
+ "#turn-square-{} .shading-click".format( turn_no )
).click()
# ---------------------------------------------------------------------
|