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 99f07be..d6b7c59 100644 --- a/vasl_templates/webapp/data/default-template-pack/turn_track.j2 +++ b/vasl_templates/webapp/data/default-template-pack/turn_track.j2 @@ -28,6 +28,9 @@ td.half-turn { {% if TURN_TRACK_PREVIEW_MODE %} body { margin: 0 ; } +body ::selection {} +body ::moz-selection {} +body { user-select: none ; } .reinforce1, .reinforce2 { opacity: 0 ; } .flag-click { width: 13px ; height: 13px ; cursor: pointer ; } .shading-click { cursor: pointer ; } @@ -63,13 +66,13 @@ function onShadingClick( turnNo ) { {% for turnSquare in row %}
{% if TURN_TRACK_PREVIEW_MODE %}
{% if TURN_TRACK_PREVIEW_MODE and turnSquare[0] != TURN_TRACK_HALF_TURN %}
| args.nTurns )
break ;
- var val = [ turnNo,
- args.shading[turnNo] ? true : false,
+ var vals = [ turnNo,
args.reinforce2[turnNo] ? true : false,
args.reinforce1[turnNo] ? true : false,
] ;
if ( params.TURN_TRACK.SWAP_PLAYERS )
- val = [ val[0], val[1], val[3], val[2] ] ;
- turnTrackSquares[ turnTrackSquares.length-1 ].push( val ) ;
+ vals = [ vals[0], vals[2], vals[1] ] ;
+ if ( shadings[turnNo] )
+ vals.push( gAppConfig.TURN_TRACK_SHADING_COLORS[ shadings[turnNo] - 1 ] ) ;
+ turnTrackSquares[ turnTrackSquares.length-1 ].push( vals ) ;
nTurnTrackSquares += 1 ;
}
}
@@ -550,7 +552,6 @@ function make_turn_track_params( params )
params.TURN_TRACK_HALF_TURN_IMAGE_URL = forceLocalImages ?
make_app_url( "/static/images/turn-track-half-turn.png", true ) :
params.IMAGES_BASE_URL + "/turn-track-half-turn.png" ;
- params.TURN_TRACK_SHADING_COLOR = TURN_TRACK_SHADING_COLOR ;
// NOTE: The convention is that player 1 sets up first, player 2 moves first,
// so swapping players actually maps turn track player 1 to the real player 1.
// NOTE: We generate the player flag URL's instead of using params.PLAYER_FLAG_1/2
@@ -567,12 +568,16 @@ function make_turn_track_params( params )
function parseTurnTrackParams( params )
{
- function parseCommaList( reinf ) {
- var turnFlags = {} ;
+ function parseCommaList( reinf, verbatim ) {
+ var turnFlags = verbatim ? [] : {} ;
reinf.split( "," ).forEach( function( turnNo ) {
- turnNo = parseInt( turnNo.trim() ) ;
- if ( ! isNaN( turnNo ) )
- turnFlags[ turnNo ] = true ;
+ if ( verbatim )
+ turnFlags.push( turnNo.trim() ) ;
+ else {
+ turnNo = parseInt( turnNo.trim() ) ;
+ if ( ! isNaN( turnNo ) )
+ turnFlags[ turnNo ] = true ;
+ }
} ) ;
return turnFlags ;
}
@@ -588,13 +593,13 @@ function parseTurnTrackParams( params )
var width = params.TURN_TRACK.WIDTH ;
if ( width === "" )
width = vertical ? 1 : nTurns ;
- var shading = parseCommaList( params.TURN_TRACK.SHADING ) ;
- var reinforce1 = parseCommaList( params.TURN_TRACK.REINFORCEMENTS_1 ) ;
- var reinforce2 = parseCommaList( params.TURN_TRACK.REINFORCEMENTS_2 ) ;
+ var shadings = parseCommaList( params.TURN_TRACK.SHADING, true ) ;
+ var reinforce1 = parseCommaList( params.TURN_TRACK.REINFORCEMENTS_1, false ) ;
+ var reinforce2 = parseCommaList( params.TURN_TRACK.REINFORCEMENTS_2, false ) ;
return {
nTurns: nTurns, halfTurn: halfTurn,
- vertical: vertical, width: width, shading: shading,
+ vertical: vertical, width: width, shadings: shadings,
reinforce1: reinforce1, reinforce2: reinforce2
} ;
}
diff --git a/vasl_templates/webapp/static/turn_track.js b/vasl_templates/webapp/static/turn_track.js
index 801b79f..5be8fc7 100644
--- a/vasl_templates/webapp/static/turn_track.js
+++ b/vasl_templates/webapp/static/turn_track.js
@@ -1,12 +1,11 @@
DEFAULT_TURN_TRACK_TURNS_MIN = 6 ;
DEFAULT_TURN_TRACK_TURNS_MAX = 10 ;
-TURN_TRACK_SHADING_COLOR = "#e0e0e0" ;
// NOTE: Reinforcement flags get clipped on turn 100, but this is unlikely to be an issue :-/
_MAX_TURN_TRACK_TURNS = 100 ;
gTurnTrackReinforcements = null ;
-gTurnTrackShading = null ;
+gTurnTrackShadings = null ;
// --------------------------------------------------------------------
@@ -16,7 +15,7 @@ function editTurnTrackSettings()
var $dlg, $iframe, iframeSeqNo=0 ;
// FUDGE! This should work as a local variable, but causes a weird problem where it doesn't get reset properly :-/
gTurnTrackReinforcements = null ;
- gTurnTrackShading = null ;
+ gTurnTrackShadings = null ;
function loadControls() {
// load the dialog controls
@@ -37,7 +36,7 @@ function editTurnTrackSettings()
var params = updatePreview( false ) ;
var args = parseTurnTrackParams( params ) ;
gTurnTrackReinforcements = { 1: args.reinforce1, 2: args.reinforce2 } ;
- gTurnTrackShading = args.shading ;
+ gTurnTrackShadings = parseTurnTrackShadings( args.shadings ) ;
// update the UI
updateUI() ;
}
@@ -54,7 +53,7 @@ function editTurnTrackSettings()
$panel.find( "input[name='TURN_TRACK_REINFORCEMENTS_1']" ).val( "" ) ;
$panel.find( "input[name='TURN_TRACK_REINFORCEMENTS_2']" ).val( "" ) ;
gTurnTrackReinforcements = null ;
- gTurnTrackShading = null ;
+ gTurnTrackShadings = null ;
loadControls() ;
}
} ) ;
@@ -150,16 +149,27 @@ function editTurnTrackSettings()
function onShadingClick( turnNo ) {
// NOTE: This method gets called by a click handler in the snippet HTML.
// toggle the turn track square's shading
- if ( gTurnTrackShading[turnNo] )
- delete gTurnTrackShading[turnNo] ;
- else
- gTurnTrackShading[turnNo] = true ;
- $panel.find( "input[name='TURN_TRACK_SHADING']" ).val(
- Object.keys( gTurnTrackShading ).join( "," )
- ) ;
- $iframe.contents().find( "#turn-square-" + turnNo ).css( {
- "background-color": gTurnTrackShading && gTurnTrackShading[turnNo] ? TURN_TRACK_SHADING_COLOR : "inherit"
+ // determine the new shading strength
+ var strength = gTurnTrackShadings[turnNo] || 0 ;
+ var col ;
+ if ( ++strength <= gAppConfig.TURN_TRACK_SHADING_COLORS.length ) {
+ gTurnTrackShadings[turnNo] = strength ;
+ col = gAppConfig.TURN_TRACK_SHADING_COLORS[ strength-1 ] ;
+ } else {
+ delete gTurnTrackShadings[turnNo] ;
+ col = "inherit" ;
+ }
+ // update the saved setting
+ var shadings = [] ;
+ Object.keys( gTurnTrackShadings ).forEach( function( key ) {
+ var strength = gTurnTrackShadings[key] ;
+ for ( var i=1 ; i < strength ; ++i )
+ key += "+" ;
+ shadings.push( key ) ;
} ) ;
+ $panel.find( "input[name='TURN_TRACK_SHADING']" ).val( shadings.join( "," ) ) ;
+ // update the turn square in the UI
+ $iframe.contents().find( "#turn-square-" + turnNo ).css( { "background-color": col } ) ;
}
function updateFlag( turnNo, playerNo ) {
@@ -322,6 +332,26 @@ function updateTurnTrackNTurns( nTurns )
}
}
+function parseTurnTrackShadings( shadings ) {
+ // NOTE: A turn track shading setting consists of a number (the turn number),
+ // followed by 0 or more plus signs (to indicate a darker shading color).
+ var shadingTable = {} ;
+ shadings.forEach( function( shading ) {
+ var strength = 1 ;
+ while ( shading.length > 0 && shading.substr( shading.length-1 ) === "+" ) {
+ strength += 1 ;
+ shading = shading.substr( 0, shading.length-1 ) ;
+ }
+ if ( strength > gAppConfig.TURN_TRACK_SHADING_COLORS.length )
+ return ;
+ var turnNo = parseInt( shading ) ;
+ if ( isNaN( turnNo ) )
+ return ;
+ shadingTable[turnNo] = strength ;
+ } ) ;
+ return shadingTable ;
+}
+
function formatTurnTrackOption( opt ) {
// format the turn track |