Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F886080
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Aug 8, 8:43 PM
Size
10 KB
Mime Type
text/x-diff
Expires
Sun, Aug 10, 8:43 PM (1 d, 3 h)
Engine
blob
Format
Raw Data
Handle
246038
Attached To
rARCHIVING archiving
View Options
diff --git a/app/assets/javascripts/filesets.js b/app/assets/javascripts/filesets.js
index d32a362..1cf8042 100644
--- a/app/assets/javascripts/filesets.js
+++ b/app/assets/javascripts/filesets.js
@@ -1,54 +1,47 @@
$(document).ready(function() {
if ($('.include_files-plus-sign').size() > 0) {
$(".include_files-plus-sign").click(function() {
addIncludedFileTextArea();
});
};
if ($('.exclude_directions-plus-sign').size() > 0) {
$(".exclude_directions-plus-sign").click(function() {
addExcludeDirectionsTextArea();
});
};
if ($('.include_files-remove-sign').size() > 0) {
$(".include_files-remove-sign").click(function() {
- removeIncludedFileTextArea();
+ removeIncludedFileTextArea($(this));
});
};
if ($('.exclude_directions-remove-sign').size() > 0) {
$(".exclude_directions-remove-sign").click(function() {
- removeExcludeDirectionsTextArea();
+ removeExcludeDirectionsTextArea($(this));
});
};
});
function addIncludedFileTextArea() {
- var textArrea = $('.include_files:last').clone(true).val("");
- $('.include_files-plus-sign:last').parent().hide();
- textArrea.insertAfter('.include_files:last');
- $('.include_files:last input').val("");
- $('.include_files-remove-sign:last').show();
+ var textArrea = $('.templates .include_files:last').clone(true).val("");
+ textArrea.insertBefore('.here-included');
+ if ($('.include_files').size() > 1) {
+ $('.include_files-remove-sign').show();
+ };
}
function addExcludeDirectionsTextArea() {
- var textArrea = $('.exclude_directions:last').clone(true).val("");
- $('.exclude_directions-plus-sign:last').parent().hide();
- textArrea.insertAfter('.exclude_directions:last');
+ var textArrea = $('.templates .exclude_directions:last').clone(true).val("");
+ textArrea.insertAfter('.here-excluded');
$('.exclude_directions:last input').val("");
- $('.exclude_directions-remove-sign:last').show();
}
-function removeIncludedFileTextArea() {
- $('.include_files:last').remove();
- $('.include_files-plus-sign:last').parent().show();
- if ($('.include_files').size() > 1) {
- $('.include_files-remove-sign:last').parent().show();
+function removeIncludedFileTextArea(element) {
+ element.closest('div.include_files').remove();
+ if ($('.include_files').size() <= 1) {
+ $('.include_files-remove-sign').hide();
};
}
-function removeExcludeDirectionsTextArea() {
- $('.exclude_directions:last').remove();
- $('.exclude_directions-plus-sign:last').parent().show();
- if ($('.exclude_directions').size() > 1) {
- $('.exclude_directions-remove-sign:last').parent().show();
- };
+function removeExcludeDirectionsTextArea(element) {
+ element.closest('div.exclude_directions').remove()
}
diff --git a/app/controllers/filesets_controller.rb b/app/controllers/filesets_controller.rb
index 383935e..3cde529 100644
--- a/app/controllers/filesets_controller.rb
+++ b/app/controllers/filesets_controller.rb
@@ -1,87 +1,94 @@
class FilesetsController < ApplicationController
before_action :require_logged_in
before_action :fetch_host, only: [:new, :create, :show, :edit, :update]
before_action :fetch_job_id, only: [:new, :create, :edit, :update]
before_action :fetch_fileset, only: [:show, :edit, :update]
# GET /hosts/:host_id/filesets/new
def new
@fileset = @host.filesets.new
@fileset.include_directions = { 'file' => [nil] }
+ @fileset.exclude_directions = ['']
end
# GET /hosts/:host_id/filesets/:id
def show
@fileset = @host.filesets.find(params[:id])
respond_to do |format|
format.js {}
end
end
# GET /hosts/:host_id/filesets/:id/edit
def edit
@fileset.include_files = @fileset.include_directions['file']
+ @fileset.exclude_directions ||= ['']
end
# PATCH /hosts/:host_id/filesets/:id/
def update
- if @fileset.update(fetch_params)
+ fileset_params = fetch_params
+ if fileset_params[:exclude_directions].nil?
+ fileset_params[:exclude_directions] = []
+ end
+
+ if @fileset.update(fileset_params)
flash[:success] = 'Fileset updated successfully'
participating_hosts = @fileset.participating_hosts
if participating_hosts.size.nonzero?
participating_hosts.each(&:recalculate)
flash[:alert] = 'You will need to redeploy the afffected clients: ' +
participating_hosts.map(&:name).join(', ')
end
if @job_id
redirect_to edit_host_job_path(@host, @job_id, fileset_id: @fileset.id)
else
redirect_to new_host_job_path(@host, fileset_id: @fileset.id)
end
else
render :edit
end
end
# POST /hosts/:host_id/filesets
def create
@fileset = @host.filesets.new(fetch_params)
if @fileset.save
flash[:success] = 'Fileset created'
if @job_id.present?
redirect_to edit_host_job_path(@host, @job_id, fileset_id: @fileset.id)
else
redirect_to new_host_job_path(@host, fileset_id: @fileset.id)
end
else
@fileset.include_files = nil
- @fileset.exclude_directions = nil
+ @fileset.exclude_directions = ['']
@fileset.include_directions = { 'file' => [nil] }
render :new
end
end
# DELETE /hosts/:host_id/filesets/:id
def destroy
end
private
def fetch_host
@host = current_user.hosts.find(params[:host_id])
end
def fetch_job_id
@job_id = @host.job_templates.find(params[:job_id]).id if params[:job_id].present?
end
def fetch_fileset
@fileset = @host.filesets.find(params[:id])
end
def fetch_params
params.require(:fileset).permit(:name, exclude_directions: [], include_files: [])
end
end
diff --git a/app/helpers/filesets_helper.rb b/app/helpers/filesets_helper.rb
index 518e9f6..293732e 100644
--- a/app/helpers/filesets_helper.rb
+++ b/app/helpers/filesets_helper.rb
@@ -1,43 +1,41 @@
module FilesetsHelper
- # Creates a bootstrap form-group div with an additional 'Add' button next to the text field
+ # Creates a bootstrap form-group div with an additional 'Remove' button next to the text field
#
# @param object[ActiveRecord::Object] the form's subject
# @param resource[Symbol] the objects class
# @param attr[Symbol] the select box's attribute
# @param attr_name[String] the attribute's display name
# @param placeholder[String] the text box's placeholder
- def text_with_errors_and_plus(object, resource, attr, attr_name, placeholder, value=nil)
+ def text_with_errors_and_remove(object, resource, attr,
+ attr_name, placeholder, value=nil, no_sign=false)
has_errors = object.errors[attr].present?
content_tag(:div, class: "form-group #{attr} #{' has_error' if has_errors }") do
attr_label = label(resource, attr, attr_name, class: 'control-label col-xs-3')
text_div = content_tag(:div, class: 'col-xs-6') do
text_part = text_field_tag([resource, attr].join('_').to_sym,
value || object.send(attr.to_sym),
placeholder: placeholder,
name: "#{resource}[#{attr}][]",
multiple: true,
class: 'form-control'
) {}
if has_errors
text_part.concat(content_tag(:span, class: 'help-block') { object.errors[attr].first })
end
text_part
end
actions_part = content_tag(:div, class: 'col-xs-1') do
- add_link = content_tag(:a, href: '#', class: "#{attr}-plus-sign") do
- content_tag(:span, class: 'glyphicon glyphicon-plus') {}
- end
+ attrs = { href: '#', class: "#{attr}-remove-sign" }
+ attrs[:style] = "display:none" if value.nil? || no_sign
- remove_link = content_tag(:a, href: '#',
- class: "#{attr}-remove-sign", style: "display:none") do
+ remove_link = content_tag(:a, attrs) do
content_tag(:span, class: 'glyphicon glyphicon-remove text-danger') {}
end
- add_link.concat(remove_link)
end
attr_label.concat(text_div).concat(actions_part)
end
end
end
diff --git a/app/views/filesets/_form.html.erb b/app/views/filesets/_form.html.erb
index 85680b7..78c7f5f 100644
--- a/app/views/filesets/_form.html.erb
+++ b/app/views/filesets/_form.html.erb
@@ -1,27 +1,59 @@
<%= bootstrap_form_for(@fileset, url: url, method: method, layout: :horizontal,
label_col: 'col-xs-3', control_col: 'col-xs-8') do |f| %>
<div>
<%= f.text_field :name %>
+ <% no_remove_sign = @fileset.include_directions['file'].length <= 1 %>
+
<% @fileset.include_directions['file'].each do |file| %>
- <%= text_with_errors_and_plus(@fileset, :fileset, :include_files, 'Files', '/', file) %>
+ <%= text_with_errors_and_remove(
+ @fileset, :fileset, :include_files, 'Files', '/', file, no_remove_sign) %>
<% end %>
+
+ <p class='here-included' />
+
+ <div class="form-group">
+ <div class="col-xs-offset-3 col-xs-1">
+ <%= link_to '#', class: 'include_files-plus-sign' do %>
+ <span class="glyphicon glyphicon-plus text-success"></span>
+ <% end %>
+ </div>
+ </div>
+
<hr />
+
<% @fileset.exclude_directions.each do |file| %>
- <%= text_with_errors_and_plus(@fileset, :fileset, :exclude_directions, 'Exclude', '/an_exluded_dir', file) %>
+ <%= text_with_errors_and_remove(@fileset, :fileset, :exclude_directions, 'Exclude', '/an_exluded_dir', file) %>
<% end %>
+
+ <p class='here-excluded' />
+
+ <div class="form-group">
+ <div class="col-xs-offset-3 col-xs-1">
+ <%= link_to '#', class: 'exclude_directions-plus-sign' do %>
+ <span class="glyphicon glyphicon-plus text-success"></span>
+ <% end %>
+ </div>
+ </div>
+
<%= (hidden_field_tag :job_id, @job_id) if @job_id%>
</div>
+ <div class='templates hidden'>
+ <%= text_with_errors_and_remove(@fileset, :fileset, :include_files, 'Files', '/') %>
+ <%= text_with_errors_and_remove(@fileset, :fileset, :exclude_directions, 'Exclude',
+ '/an_excluded_dir', '') %>
+ </div>
+
<div class="form-group">
<div class="col-xs-offset-3 col-xs-3">
<%= f.submit class: 'btn btn-success' %>
</div>
<div class="col-xs-3">
<%= link_to 'Cancel',
@job_id.present? ? edit_host_job_path(@host, @job_id) : new_host_job_path(@host),
role: 'button', class: 'btn btn-danger'%>
</div>
</div>
<% end %>
Event Timeline
Log In to Comment