diff --git a/Gemfile b/Gemfile index 12296c9..cc3499d 100644 --- a/Gemfile +++ b/Gemfile @@ -42,6 +42,8 @@ gem 'pry' # FactoryGirl for testing gem 'factory_girl_rails', '~> 4.0' +gem 'jquery-ui-rails' + group :doc do # bundle exec rake doc:rails generates the API under doc/api. diff --git a/Gemfile.lock b/Gemfile.lock index 3b91a00..f69eeee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -67,6 +67,8 @@ GEM jquery-rails (3.1.3) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) + jquery-ui-rails (5.0.5) + railties (>= 3.2.16) json (1.8.3) mail (2.5.4) mime-types (~> 1.16) @@ -161,6 +163,7 @@ DEPENDENCIES factory_girl_rails (~> 4.0) jbuilder (~> 1.2) jquery-rails + jquery-ui-rails pg pry rails (= 4.0.1) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index b3de8c8..15f8281 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -15,3 +15,5 @@ //= require jquery_ujs //= require turbolinks //= require_tree . + +//= require jquery-ui \ No newline at end of file diff --git a/app/assets/javascripts/move_piece.js b/app/assets/javascripts/move_piece.js new file mode 100644 index 0000000..58c920b --- /dev/null +++ b/app/assets/javascripts/move_piece.js @@ -0,0 +1,39 @@ +$(document).ready(function() { + if ($(".chess-board").length == 0) { + return; + } + + $( ".draggable" ).draggable(); + + + $( "td" ).droppable({ + drop: function( event, ui ) { + //these are where the piece is moving to + var startRow = $(this).data("square-row"); + var startCol = $(this).data("square-col"); + + //these are the draggable pieces + var pieceId = $(ui.draggable).data("piece-id"); + var newRow = $(ui.draggable).data("piece-start-row"); + var newCol = $(ui.draggable).data("piece-start-col"); + var piece = $(ui.draggable); + var newSquare = $(this); + + console.debug("The piece to move has an id of: "+pieceId+"."); + console.debug("The square to move to is on row: "+startRow+" and col: "+startCol+"."); + + $.ajax({ + method: 'put', + url: "/pieces/" + pieceId, + data: { y_position: startRow, x_position: startCol } + }).done(function() { + console.debug("it worked! valid move") + newSquare.append(piece.css('position','static')); + }).fail(function() { + // console.debug("the world really really hates me") + // move piece back - invalid move + }); + + } //drop + }); //droppable +}); \ No newline at end of file diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 32503d5..71cf878 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -10,6 +10,7 @@ * *= require_self *= require_tree . + *= require jquery-ui */ @import "bootstrap-sprockets"; @import "bootstrap"; diff --git a/app/assets/stylesheets/pieces.css.scss b/app/assets/stylesheets/pieces.css.scss index 4ece9bb..29898c6 100644 --- a/app/assets/stylesheets/pieces.css.scss +++ b/app/assets/stylesheets/pieces.css.scss @@ -1,3 +1,13 @@ -// Place all the styles related to the pieces controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ +div.piece.color_0 { +/* dark */ + color: red; +} + +div.piece.color_1 { +/* light */ + color: blue; +} + +div.piece.ui-draggable-dragging { + background-color: yellow; +} \ No newline at end of file diff --git a/app/controllers/pieces_controller.rb b/app/controllers/pieces_controller.rb index fc9046e..0c8171b 100644 --- a/app/controllers/pieces_controller.rb +++ b/app/controllers/pieces_controller.rb @@ -1,4 +1,3 @@ -require 'pry' class PiecesController < ApplicationController before_action :select_pc, :only => [:show, :update] @@ -7,11 +6,15 @@ def show end def update - row = params[:y_position] - col = params[:x_position] - @moved_pc = select_pc.update_attributes( - y_position: row, x_position: col) - redirect_to game_path(select_pc.game.id) + row, col = params[:y_position].to_i, + params[:x_position].to_i + if moved = select_pc.valid_move?(col, row) + select_pc.update_attributes(y_position: row, + x_position: col) + end + + render json: select_pc.to_json, + status: moved ? :ok : 422 end private diff --git a/app/models/game.rb b/app/models/game.rb index 454d99c..3cc5320 100644 --- a/app/models/game.rb +++ b/app/models/game.rb @@ -71,3 +71,5 @@ def populate_board! end end end + + diff --git a/app/views/shared/_chessboard.html.erb b/app/views/shared/_chessboard.html.erb index 4664c15..33b0e10 100644 --- a/app/views/shared/_chessboard.html.erb +++ b/app/views/shared/_chessboard.html.erb @@ -8,16 +8,14 @@ <% 8.downto(1) do |row| %> <% 1.upto(8) do |col| %> - - <%= link_to piece_path(id: @select_pc.id, x_position: col, y_position: row), method: :put do %> -
- <% @pieces.detect do |piece| %> - <% if piece.x_position == col && piece.y_position == row %> - <%= link_to piece_color(piece), piece_path(piece.id), :class => hilite(piece) %> - <% end %> - <% end %> -
- <% end %> + + <% @pieces.detect do |piece| %> + <% if piece.x_position == col && piece.y_position == row %> +
+ <%= piece_color(piece) %> +
+ <% end %> + <% end %> <% end %>