Skip to content

Commit

Permalink
Improved admin panel with AJAX
Browse files Browse the repository at this point in the history
  • Loading branch information
Ethan Pemble committed Jun 14, 2011
1 parent 209c4f9 commit 149124a
Show file tree
Hide file tree
Showing 13 changed files with 338 additions and 72 deletions.
1 change: 1 addition & 0 deletions Gemfile
Expand Up @@ -2,6 +2,7 @@ source 'http://rubygems.org'


gem 'rails', '3.0.0' gem 'rails', '3.0.0'
gem 'haml' gem 'haml'
gem 'sass'
gem 'mysql2' gem 'mysql2'


group :production do group :production do
Expand Down
18 changes: 15 additions & 3 deletions app/controllers/admin/points_controller.rb
Expand Up @@ -2,7 +2,7 @@ class Admin::PointsController < Admin::ApplicationController
# GET /points # GET /points
# GET /points.xml # GET /points.xml
def index def index
@points = Point.all @points = Point.order('created_at desc').limit(75)


respond_to do |format| respond_to do |format|
format.html # index.html.erb format.html # index.html.erb
Expand Down Expand Up @@ -34,12 +34,24 @@ def new
format.xml { render :xml => @point } format.xml { render :xml => @point }
end end
end end

def justadded
@point = Point.find(:last, :include => :participant )
@justadded = { :participant => @point.participant.name,
:pointtype => @point.point_type.name,
:description => @point.description,
:stars => @point.point_type.value,
:created_at => @point.created_at.strftime( "%H:%M:%S %b %d" ) }
respond_to do |format|
format.json { render :json => @justadded }
end
end


# GET /points/1/edit # GET /points/1/edit
def edit def edit
@point = Point.find(params[:id]) @point = Point.find(params[:id])
@participants = Participant.find(:all) @participants = Participant.all
@point_types = PointType.find(:all) @point_types = PointType.all
end end


# POST /points # POST /points
Expand Down
3 changes: 2 additions & 1 deletion app/models/point.rb
Expand Up @@ -9,7 +9,8 @@ def self.sums
where a.point_type_id = b.id where a.point_type_id = b.id
group by (a.participant_id)" group by (a.participant_id)"
{}.tap do |points| {}.tap do |points|
Point.find_by_sql( sql ).each{ |point| points[point.participant_id] = point.points } Point.find_by_sql( sql ).each{
|point| points[point.participant_id] = point.points }
end end
end end


Expand Down
10 changes: 6 additions & 4 deletions app/views/admin/points/_form.haml
Expand Up @@ -2,14 +2,16 @@


- if @point.errors.any? - if @point.errors.any?
#error_explanation #error_explanation
%h2== #{pluralize(@point.errors.count, "error")} prohibited this point from being saved: %h2
= pluralize @point.errors.count, "error"
prohibited this point from being saved:
%ul %ul
- @point.errors.full_messages.each do |msg| - @point.errors.full_messages.each do |msg|
%li= msg %li= msg


%table#point %table#point
%tr %tr
%td.participant= f.select :participant_id, options_for_select(@participants.collect{|p| [p.name,p.id]}.sort,@point.participant_id) %td.participant= f.select :participant_id, options_for_select(@participants.collect{|p| [p.name,p.id]}.sort, @point.participant_id)
%td.pointtype= f.select :point_type_id, options_for_select(@point_types.collect{|pt| [pt.name,pt.id]}.sort, @point.point_type_id) %td.pointtype= f.select :point_type_id, options_for_select(@point_types.collect{|pt| [pt.name,pt.id]}.sort, @point.point_type_id)
%td.description= f.text_field :description, :placeholder => 'Description' %td.description= f.text_field :description, :placeholder => 'Description', :size => 40
%td.submit= f.submit %td.submit= submit_tag ' ↵ Press Enter '
4 changes: 2 additions & 2 deletions app/views/admin/points/index.haml
Expand Up @@ -3,7 +3,7 @@
%strong= link_to 'Give stars!', new_admin_point_path %strong= link_to 'Give stars!', new_admin_point_path


%table#admin %table#admin
- @points.sort_by{|p| p['created_at']}.reverse.each do |point| - @points.each do |point|
%tr %tr
%td.participant= point.participant.name %td.participant= point.participant.name
%td.pointtype= point.point_type.name %td.pointtype= point.point_type.name
Expand All @@ -13,5 +13,5 @@
%td.admin= link_to 'view', [:admin,point] %td.admin= link_to 'view', [:admin,point]
%td.admin= link_to 'edit', edit_admin_point_path(point) %td.admin= link_to 'edit', edit_admin_point_path(point)
%td.admin= link_to 'destroy', 'points/'+point.id.to_s+'/destroy' %td.admin= link_to 'destroy', 'points/'+point.id.to_s+'/destroy'

%strong= link_to 'Give stars!', new_admin_point_path %strong= link_to 'Give stars!', new_admin_point_path
12 changes: 2 additions & 10 deletions app/views/admin/points/new.haml
@@ -1,16 +1,8 @@
%h2 Give stars %h2 Give stars
%p#notice= notice %p#notice= notice
= link_to '◄ Previous page', admin_points_path


= render 'form' = render 'form'


%h3.padded-top Just added:

%table#admin.just-added %table#admin.just-added
- @points.sort_by{|p| p['created_at']}.reverse.each do |point|
%tr = link_to '◄ Back to Points', admin_points_path
%td.participant= point.participant.name
%td.pointtype= point.point_type.name
%td.description= point.description
%td.stars== #{point.point_type.value} stars at
%td.created_at= point.created_at.strftime( "%H:%M:%S %b %d" )
1 change: 1 addition & 0 deletions app/views/layouts/admin.haml
Expand Up @@ -4,6 +4,7 @@
%title Gold Stars Administration %title Gold Stars Administration
= stylesheet_link_tag :all = stylesheet_link_tag :all
= javascript_include_tag 'prototype' = javascript_include_tag 'prototype'
= javascript_include_tag 'jquery-ui-1.8.13.custom.min'
= javascript_include_tag 'jquery-1.6.1.min' = javascript_include_tag 'jquery-1.6.1.min'
= javascript_include_tag 'goldstars' = javascript_include_tag 'goldstars'
= csrf_meta_tag = csrf_meta_tag
Expand Down
4 changes: 2 additions & 2 deletions config/routes.rb
@@ -1,15 +1,15 @@
Goldstars::Application.routes.draw do Goldstars::Application.routes.draw do


namespace :admin do namespace :admin do
match 'points/justadded' => 'points#justadded'
match 'points/:id/destroy' => 'points#destroy'
resources :awards resources :awards
resources :award_types resources :award_types
resources :points resources :points
resources :point_types resources :point_types
resources :roles resources :roles
resources :participants resources :participants
root :to => "points#index" root :to => "points#index"

match 'points/:id/destroy' => 'points#destroy'
end end


match 'points/rules' => 'points#rules' match 'points/rules' => 'points#rules'
Expand Down
41 changes: 39 additions & 2 deletions public/javascripts/goldstars.js
Expand Up @@ -12,7 +12,9 @@ $(function() {
$(this).addClass('spent'); $(this).addClass('spent');
else stars--; else stars--;
}); });
}); }
);

$( '.award img.spent' ).fadeTo( 500, .4 ); // Fade stars! $( '.award img.spent' ).fadeTo( 500, .4 ); // Fade stars!


$( 'span.award' ).hover( // When group-of-stars are moused-over $( 'span.award' ).hover( // When group-of-stars are moused-over
Expand All @@ -21,6 +23,41 @@ $(function() {
}, },
function() { // Mouse OFF function() { // Mouse OFF
$( this ).find( '.info' ).delay(50).fadeOut(0); // Fade box $( this ).find( '.info' ).delay(50).fadeOut(0); // Fade box
}); }
);

$( '#new_point' ).submit( function(event) {
event.preventDefault();

$( '.just-added' ).prepend( "<tr class=\"loading\"><td colspan=\"5\">Adding point to the database ...</td></tr>" );

var $form = $( this ),
user = $form.find( 'select[name="point[participant_id]"]' ).val(),
type = $form.find( 'select[name="point[point_type_id]"]' ).val(),
desc = $form.find( 'input[name="point[description]"]' ).val(),
url = $form.attr( 'action' );

$form.find( 'input[name="point[description]"]' ).val('');


$.post( url,
{ 'point': { 'participant_id': user, 'point_type_id': type, 'description': desc } },
function() {
$.ajax({
url: "justadded",
dataType: 'json',
success: function( json ) {
var content = "<tr>\n";
content += "<td class=\"participant\">" + json.participant + "</td>\n";
content += "<td class=\"pointtype\">" + json.pointtype + "</td>\n";
content += "<td class=\"description\">" + json.description + "</td>\n";
content += "<td class=\"stars\">" + json.stars + " stars at</td>\n";
content += "<td class=\"created_at\">" + json.created_at + "</td>\n";
content += "</tr>\n";
$( 'tr.loading' ).replaceWith( content ).effect( 'highlight', {}, 1000 );
}
});
});
});


}); });

0 comments on commit 149124a

Please sign in to comment.