Skip to content

Commit

Permalink
Merge pull request sodabrew#198 from fhrbek/rails3_class_parameters
Browse files Browse the repository at this point in the history
Class Parameters
  • Loading branch information
Jeff Weiss committed Apr 10, 2013
2 parents 621f4e0 + 2adac05 commit 304e6f2
Show file tree
Hide file tree
Showing 57 changed files with 1,478 additions and 129 deletions.
45 changes: 45 additions & 0 deletions app/assets/javascripts/ajax_helper.js
@@ -0,0 +1,45 @@
function form_submit_success(jsonResponse, error_messages_element_id) {

if(jsonResponse.status == "error") {
errorMessagesElement = document.getElementById(error_messages_element_id);
errorMessagesElement.style.display = "block";
errorMessagesElement.innerHTML = jsonResponse.error_html;
}
else {
if(jsonResponse.valid == "true") {
window.location = jsonResponse.redirect_to;
}
else {
confirmElement = document.createElement('div');
confirmElement.style.position = 'absolute';
confirmElement.style.top = '0px';
confirmElement.style.right = '0px';
confirmElement.style.bottom = '0px';
confirmElement.style.left = '0px';
document.getElementsByTagName('body')[0].appendChild(confirmElement);
confirmElement.innerHTML = jsonResponse.confirm_html;
}
}
}

function register_ajax_submit(form_id) {
jQuery(form_id).submit(function() {
var param_form = this;
// delay sending the data so that placeholders could be removed in non-html5 browsers before the form is serialized
// TODO - detect native HTML5 support and if it's the case then call following code directly
setTimeout(function() {
jQuery.post(param_form.action, jQuery(param_form).serialize(), "json").
success(function(data) {form_submit_success(data, 'error_messages');}).
error(function() {alert('Oops, something went wrong!');});
}, 0);
return false;
});
}

function bind_response_events(xhr_element_id, error_element_id) {
jQuery(xhr_element_id)
.bind("ajax:success", function(event, data, status, xhr) {
form_submit_success(data, error_element_id);
})
.bind("ajax:failure", function() { alert('Oops!! An error occurred.') });
}
3 changes: 3 additions & 0 deletions app/assets/javascripts/application.js
Expand Up @@ -30,3 +30,6 @@
//= require jqplot.canvasAxisTickRenderer
//= require jqplot.highlighter
//= require application
//= require ajax_helper
//= require validation_response

4 changes: 4 additions & 0 deletions app/assets/javascripts/dashboard.js
Expand Up @@ -7,6 +7,10 @@ var ALL = '#000';

jQuery(document).ready(function(J) {
J(":input[placeholder]").placeholder();
J.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/html")}
})

J('table.main .status img[title]').tipsy({gravity: 's'});

J('button.drop, a.drop').click( function(e) {
Expand Down
22 changes: 22 additions & 0 deletions app/assets/javascripts/validation_response.js
@@ -0,0 +1,22 @@
function form_submit_success(jsonResponse, error_messages_element_id) {
if(jsonResponse.status == "error") {
errorMessagesElement = document.getElementById(error_messages_element_id);
errorMessagesElement.style.display = "block";
errorMessagesElement.innerHTML = jsonResponse.error_html;
}
else {
if(jsonResponse.valid == "true") {
window.location = jsonResponse.redirect_to;
}
else {
confirmElement = document.createElement('div');
confirmElement.style.position = 'absolute';
confirmElement.style.top = '0px';
confirmElement.style.right = '0px';
confirmElement.style.bottom = '0px';
confirmElement.style.left = '0px';
document.getElementsByTagName('body')[0].appendChild(confirmElement);
confirmElement.innerHTML = jsonResponse.confirm_html;
}
}
}
1 change: 1 addition & 0 deletions app/assets/stylesheets/application.css
Expand Up @@ -24,4 +24,5 @@
*= require colorbox
*= require help
*= require jquery.jqplot
*= require popups
*/
37 changes: 37 additions & 0 deletions app/assets/stylesheets/popups.css
@@ -0,0 +1,37 @@
#popupWindowGlass, #popupWindowLayoutHelperTable {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}

#popupWindowGlass {
background-color: black;
opacity: 0.4;
}

#popupWindowLayoutHelperTable {
display: table;
width: 100%;
height: 100%;
}

#popupWindowLayoutHelperTableCell {
display: table-cell;
text-align: center;
vertical-align: middle;
}

#popupWindow {
background-color: white;
display: inline-block;
padding: 20px;
border: 1px solid #aaa;
border-radius: 4px;
text-align: left;
}

#popupWindowButtons {
margin-top: 20px;
}
4 changes: 4 additions & 0 deletions app/assets/stylesheets/typography.css
Expand Up @@ -37,6 +37,10 @@ h3 {
margin: 0;
}

h3.conflicts {
color:#c33;
}

h4 {
font-size: 1em;
line-height: 1.28em;
Expand Down
13 changes: 13 additions & 0 deletions app/controllers/application_controller.rb
Expand Up @@ -73,4 +73,17 @@ def set_group_and_class_autocomplete_data_sources(source_object)
:objects => source_object.node_groups
}
end

def force_create?
params[:force_create] == "true"
end

def force_update?
params[:force_update] == "true"
end

def force_delete?
params[:force_delete] == "true"
end

end
21 changes: 21 additions & 0 deletions app/controllers/node_class_memberships_controller.rb
@@ -0,0 +1,21 @@
class NodeClassMembershipsController < InheritedResources::Base
respond_to :html, :json
before_filter :raise_unless_using_external_node_classification
before_filter :raise_if_enable_read_only_mode, :only => [:new, :edit, :create, :update, :destroy]

include SearchableIndex
include ConflictAnalyzer
include ConflictHtml

def update
update_helper :class => NodeClassMembership,
:conflict_attribute => :node
end

def destroy
destroy_helper :class => NodeClassMembership,
:owner_class => Node,
:conflict_attribute => :node
end

end
21 changes: 21 additions & 0 deletions app/controllers/node_group_class_memberships_controller.rb
@@ -0,0 +1,21 @@
class NodeGroupClassMembershipsController < InheritedResources::Base
respond_to :html, :json
before_filter :raise_unless_using_external_node_classification
before_filter :raise_if_enable_read_only_mode, :only => [:new, :edit, :create, :update, :destroy]

include SearchableIndex
include ConflictAnalyzer
include ConflictHtml

def update
update_helper :class => NodeGroupClassMembership,
:conflict_attribute => :node_group
end

def destroy
destroy_helper :class => NodeGroupClassMembership,
:owner_class => NodeGroup,
:conflict_attribute => :node_group
end

end
77 changes: 65 additions & 12 deletions app/controllers/node_groups_controller.rb
Expand Up @@ -3,6 +3,8 @@ class NodeGroupsController < InheritedResources::Base
before_filter :raise_if_enable_read_only_mode, :only => [:new, :edit, :create, :update, :destroy]

include SearchableIndex
include ConflictAnalyzer
include ConflictHtml

def new
new! do |format|
Expand All @@ -14,12 +16,44 @@ def new
end

def create
create! do |success, failure|
failure.html {
set_node_autocomplete_data_sources(@node_group)
set_group_and_class_autocomplete_data_sources(@node_group)
render :new
}
ActiveRecord::Base.transaction do
related_resources = []
node_ids_params = params[:node_group][:assigned_node_ids]
unless node_ids_params.nil?
node_ids_params.each do |node_ids_param|
unless node_ids_param.nil? || node_ids_param.length == 0
node_ids_param.split(/,/).each do |resource_id|
related_resources << Node.find_by_id(resource_id)
end
end
end
end
old_conflicts = force_create? ? nil : get_current_conflicts(nil, related_resources)

create! do |success, failure|
success.html {
node_group = NodeGroup.find_by_name(params[:node_group][:name])

unless(force_create?)

new_conflicts_message = get_new_conflicts_message_as_html(old_conflicts, node_group)
if new_conflicts_message
render_conflicts_html new_conflicts_message, "Create", "jQuery('#force_create').attr('value', 'true'); jQuery('#submit_button').click();"
end
end

render :json => { :status => "ok", :valid => "true", :redirect_to => url_for(node_group) }, :content_type => 'application/json'
};

failure.html {
set_node_autocomplete_data_sources(@node_group)
set_group_and_class_autocomplete_data_sources(@node_group)
html = render_to_string(:template => "shared/_error",
:layout => false,
:locals => { :object_name => 'node_group', :object => @node_group })
render :json => { :status => "error", :error_html => html }, :content_type => 'application/json'
}
end
end
end

Expand All @@ -33,15 +67,34 @@ def edit
end

def update
update! do |success, failure|
failure.html {
set_node_autocomplete_data_sources(@node_group)
set_group_and_class_autocomplete_data_sources(@node_group)
render :edit
}
ActiveRecord::Base.transaction do
old_conflicts = force_update? ? nil : get_current_conflicts(NodeGroup.find_by_id(params[:id]))

update! do |success, failure|
success.html {
update_success_helper old_conflicts, :class => NodeGroup, :conflict_attribute => nil
};

failure.html {
node_group = NodeGroup.find_by_id(params[:id])

set_node_autocomplete_data_sources(node_group)
set_group_and_class_autocomplete_data_sources(node_group)
html = render_to_string(:template => "shared/_error",
:layout => false,
:locals => { :object_name => 'node_group', :object => node_group })
render :json => { :status => "error", :error_html => html }, :content_type => 'application/json'
}
end
end
end

def destroy
destroy_helper :class => NodeGroup,
:owner_class => NodeGroup,
:index_redirect => true
end

protected

def resource
Expand Down

0 comments on commit 304e6f2

Please sign in to comment.