From 91b26d963cb379dc87dac3c0d0b20134b49341a3 Mon Sep 17 00:00:00 2001 From: Taka Date: Wed, 17 Oct 2018 03:34:21 +0000 Subject: [PATCH] Added a button to reset a vehicle/ordnance's capabilities back to default. --- vasl_templates/webapp/static/css/sortable.css | 2 ++ .../webapp/static/images/sortable-reset.png | Bin 0 -> 10053 bytes vasl_templates/webapp/static/sortable.js | 9 +++++++ vasl_templates/webapp/static/vo2.js | 24 +++++++++--------- .../webapp/templates/edit-vo-dialog.html | 2 ++ .../webapp/tests/test_capabilities.py | 24 +++++++++++++++--- 6 files changed, 45 insertions(+), 16 deletions(-) create mode 100755 vasl_templates/webapp/static/images/sortable-reset.png diff --git a/vasl_templates/webapp/static/css/sortable.css b/vasl_templates/webapp/static/css/sortable.css index f44b8c2..f5bed89 100644 --- a/vasl_templates/webapp/static/css/sortable.css +++ b/vasl_templates/webapp/static/css/sortable.css @@ -1,5 +1,7 @@ button.sortable-add { vertical-align: top ; height: 30px ; padding: 4px 10px ; } img.sortable-add { vertical-align: middle ; height: 15px ; margin-right: 0.25em ; } +button.sortable-reset { vertical-align: top ; height: 30px ; padding: 4px 10px ; } +img.sortable-reset { vertical-align: middle ; height: 15px ; margin-right: 0.25em ; } .sortable { list-style-type: none ; margin: 0 ; padding: 0 ; } diff --git a/vasl_templates/webapp/static/images/sortable-reset.png b/vasl_templates/webapp/static/images/sortable-reset.png new file mode 100755 index 0000000000000000000000000000000000000000..1d50e1257c459b3de10a6ba70005c74a6e63bbea GIT binary patch literal 10053 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 RX+X6Y2qLX0RW4!Z|39@@Lx=zX literal 0 HcmV?d00001 diff --git a/vasl_templates/webapp/static/sortable.js b/vasl_templates/webapp/static/sortable.js index 6497587..29cf354 100644 --- a/vasl_templates/webapp/static/sortable.js +++ b/vasl_templates/webapp/static/sortable.js @@ -81,6 +81,15 @@ $.fn.sortable2 = function( action, args ) var $add = find_helper( $sortable2, "add" ) ; $add.prop( "title", "Add a new " + display_name[0] ) .click( args.add ) ; + if ( args.reset ) { + $sortable2.data( "on_reset", args.reset ) ; + var $reset_btn = find_helper( $sortable2, "reset" ) ; + $reset_btn.prepend( $( "
Reset
" ) ) + .addClass( "ui-button" ) ; + var $reset = find_helper( $sortable2, "reset" ) ; + $reset.prop( "title", "Reset the " + display_name[1] ) + .click( args.reset ) ; + } // handle overflow when there are too many entries // NOTE: We do this by setting the height of the entry list fairly low; if there are diff --git a/vasl_templates/webapp/static/vo2.js b/vasl_templates/webapp/static/vo2.js index 6adcf56..d0a3abc 100644 --- a/vasl_templates/webapp/static/vo2.js +++ b/vasl_templates/webapp/static/vo2.js @@ -65,6 +65,13 @@ function _do_edit_ob_vo( $entry, player_no, vo_type ) } ) ; } + function on_reset_capabilities() { + $capabilities.sortable2( "delete-all" ) ; + var capabilities = get_default_capabilities() ; + for ( var i=0 ; i < capabilities.length ; ++i ) + add_capability( capabilities[i] ) ; + } + // show the dialog var $dlg = $( "#edit-vo" ).dialog( { dialogClass: "edit-vo", @@ -81,6 +88,7 @@ function _do_edit_ob_vo( $entry, player_no, vo_type ) $elem.find( "input[type='text']" ).focus() ; $elem[0].scrollIntoView() ; }, + reset: on_reset_capabilities, no_confirm_delete: true, } ) ; }, @@ -112,18 +120,10 @@ function _do_edit_ob_vo( $entry, player_no, vo_type ) if ( val ) capabilities.push( val ) ; } ) ; - if ( capabilities.length > 0 ) { - if ( capabilities.join() !== get_default_capabilities( false ).join() ) - $entry.data( "sortable2-data" ).custom_capabilities = capabilities ; - else { - // the capabilities are the same as the default - no need to retain these custom settings - delete $entry.data( "sortable2-data" ).custom_capabilities ; - } - } else { - // NOTE: We treat "no capabilities" as meaning "revert back to the default capabilities". - // This means that the user can never have a V/O that actually has no capabilities, but then - // why would they want to include that V/O in a label in the scenario? :shrug: If they - // really want it there, they can always include a dummy capability of "none" or "-"... + if ( capabilities.join() !== get_default_capabilities( false ).join() ) + $entry.data( "sortable2-data" ).custom_capabilities = capabilities ; + else { + // the capabilities are the same as the default - no need to retain these custom settings delete $entry.data( "sortable2-data" ).custom_capabilities ; } // update the original V/O entry to reflect the changes diff --git a/vasl_templates/webapp/templates/edit-vo-dialog.html b/vasl_templates/webapp/templates/edit-vo-dialog.html index c576710..e2023f6 100644 --- a/vasl_templates/webapp/templates/edit-vo-dialog.html +++ b/vasl_templates/webapp/templates/edit-vo-dialog.html @@ -10,6 +10,8 @@ diff --git a/vasl_templates/webapp/tests/test_capabilities.py b/vasl_templates/webapp/tests/test_capabilities.py index 90e330b..3a302f3 100644 --- a/vasl_templates/webapp/tests/test_capabilities.py +++ b/vasl_templates/webapp/tests/test_capabilities.py @@ -445,7 +445,7 @@ def test_custom_capabilities( webapp, webdriver ): #pylint: disable=too-many-sta def extract_capabilities( clipboard ): """Extract the capabilities.""" mo = re.search( r"^- capabilities: (.*)$", clipboard, re.MULTILINE ) - return mo.group(1) + return mo.group(1) if mo else "" def check_snippet( expected ): """Check the vehicle's snippet.""" snippet_btn.click() @@ -503,18 +503,34 @@ def test_custom_capabilities( webapp, webdriver ): #pylint: disable=too-many-sta ActionChains(webdriver).double_click( elems[0] ).perform() elems = check_capabilities_in_dialog( [ "QSU (modified)", "a new capability" ] ) - # delete all capabilities (this will revert the capabilities back to default) + # delete all capabilities for elem in elems: ActionChains(webdriver).key_down( Keys.CONTROL ).click( elem ).key_up( Keys.CONTROL ).perform() click_dialog_button( "OK" ) - check_snippet( '"QSU" "cs 4 (brew up)"') + check_snippet( "" ) + + # save the scenario + saved_scenario2 = save_scenario() + assert len(saved_scenario2["OB_VEHICLES_1"]) == 1 + assert saved_scenario2["OB_VEHICLES_1"][0]["custom_capabilities"] == [] + + # reload the scenario, and reset the vehicle's capabilities back to the default + load_scenario( saved_scenario ) + select_tab( "ob1" ) + elems = find_children( "li", vehicles_sortable ) + assert len(elems) == 1 + ActionChains(webdriver).double_click( elems[0] ).perform() + btn = find_child( "#vo_capabilities-reset" ) + btn.click() + click_dialog_button( "OK" ) + check_snippet( '"QSU" "cs 4 (brew up)"' ) # make sure the custom capabilities are no longer saved in the scenario saved_scenario2 = save_scenario() assert len(saved_scenario2["OB_VEHICLES_1"]) == 1 assert "custom_capabilities" not in saved_scenario2["OB_VEHICLES_1"][0] - # reload the scenario, and edit the vehicle's capabilities to be the default + # reload the scenario, and manually set the vehicle's capabilities to be the same as the default load_scenario( saved_scenario ) select_tab( "ob1" ) elems = find_children( "li", vehicles_sortable )