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 ; // -------------------------------------------------------------------- function editTurnTrackSettings() { // initialize 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 ; function loadControls() { // load the dialog controls $dlg.find( "select[name='nturns']" ).val( $panel.find( "select[name='TURN_TRACK_NTURNS'].param" ).val() ).trigger("change" ) ; var width = $panel.find( "input[name='TURN_TRACK_WIDTH']" ).val() ; $dlg.find( "select[name='width']" ).val( isNaN( parseInt( width ) ) ? "" : width ).trigger( "change" ) ; $dlg.find( "input[name='vertical']" ).prop( "checked", $panel.find( "input[name='TURN_TRACK_VERTICAL']" ).prop( "checked" ) ) ; $dlg.find( "input[name='swap-players']" ).prop( "checked", $panel.find( "input[name='TURN_TRACK_SWAP_PLAYERS']" ).prop( "checked" ) ) ; // load the reinforcements var params = updatePreview( false ) ; var args = parseTurnTrackParams( params ) ; gTurnTrackReinforcements = { 1: args.reinforce1, 2: args.reinforce2 } ; gTurnTrackShading = args.shading ; // update the UI updateUI() ; } function onResetControls() { // reset all the controls ask( "Reset turn track", "Do you want to reset the turn track?", { ok: function() { setTurnTrackNTurns( DEFAULT_TURN_TRACK_TURNS_MIN ) ; $panel.find( "input[name='TURN_TRACK_WIDTH']" ).val( "" ) ; $panel.find( "input[name='TURN_TRACK_VERTICAL']" ).prop( "checked", false ) ; $panel.find( "input[name='TURN_TRACK_SWAP_PLAYERS']" ).prop( "checked", false ) ; $panel.find( "input[name='TURN_TRACK_SHADING']" ).val( "" ) ; $panel.find( "input[name='TURN_TRACK_REINFORCEMENTS_1']" ).val( "" ) ; $panel.find( "input[name='TURN_TRACK_REINFORCEMENTS_2']" ).val( "" ) ; gTurnTrackReinforcements = null ; gTurnTrackShading = null ; loadControls() ; } } ) ; } function initTurnCountSelect2( $sel ) { // initialize the TURN COUNT droplist init_select2( $sel, "4em", false, formatTurnTrackOption ).on( "select2:open", function() { restrict_droplist_height( $(this) ) ; } ).on( "change", function() { setTurnTrackNTurns( $(this).val() ) ; if ( $dlg ) updateUI() ; } ) ; for ( var nTurns=1 ; nTurns <= _MAX_TURN_TRACK_TURNS ; nTurns += 0.5 ) $sel.append( $( "" ) ) ; } function initWidthSelect2( $sel ) { // initialize the WIDTH droplist init_select2( $sel, "3.5em", false, null ).on( "select2:open", function() { restrict_droplist_height( $(this) ) ; } ).on( "change", function() { $panel.find( "input[name='TURN_TRACK_WIDTH']" ).val( $(this).val() ) ; if ( $dlg ) updateUI() ; } ) ; $sel.append( $( "" ) ) ; for ( var i=1 ; i <= 30 ; ++i ) $sel.append( $( "" ) ) ; } function syncCheckbox( $elem, $target ) { // sync the target checkbox in the SCENARIO panel with the one in this dialog $target.prop( "checked", $elem.prop("checked") ) ; updateUI() ; } function updatePreview( showAllFlags ) { // generate the turn track snippet var params = unload_snippet_params( true, "turn_track" ) ; if ( showAllFlags ) params.TURN_TRACK.REINFORCEMENTS_1 = params.TURN_TRACK.REINFORCEMENTS_2 = makeCommaList( _MAX_TURN_TRACK_TURNS ) ; params.TURN_TRACK_PREVIEW_MODE = true ; var $btn = $( "button.generate[data-id='turn_track']" ) ; var snippet = make_snippet( $btn, params, {}, false ).content ; // update the preview // NOTE: To minimize flickering, we load the snippet into a hidden ", { style: style, "data-seqno": ++iframeSeqNo } ) ; $iframe.after( $newFrame ) ; $iframe.remove() ; $iframe = $newFrame ; $newFrame.attr( "srcdoc", snippet ).on( "load", function() { // update the state of each reinforcement flag for ( var turnNo=1 ; turnNo <= _MAX_TURN_TRACK_TURNS ; ++turnNo ) { for ( var playerNo=1 ; playerNo <= 2 ; ++playerNo ) updateFlag( turnNo, playerNo ) ; } // install the new