Skip to content
Snippets Groups Projects
Commit ff12b7f9 authored by Jaden Diefenbaugh's avatar Jaden Diefenbaugh
Browse files

now using checkbox delete for rm exps, fixed updated date on exp list

parent 61e349dc
No related branches found
No related tags found
1 merge request!223Reports overhaul
......@@ -19,24 +19,42 @@
* You should have received a copy of the GNU Affero Public License along
* with the BEAT platform. If not, see http://www.gnu.org/licenses/.
*/
// this controller handles the 'groups' partial, where groups of experiments are managed
angular.module('reportApp').controller('GroupsController', ['$scope', 'GroupsService', function ($scope, GroupsService){
let vm = this;
vm.report = $scope.report;
// GroupsService stuff to be used directly in ui
vm.groups = GroupsService.groups;
/*
* GroupsController
* provides access to the groups data to Django templates,
* mostly used for handling the removal of experiments from the report
*/
angular.module('reportApp').controller('GroupsController', ['$scope', '$http', 'GroupsService', 'UrlService', function ($scope, $http, GroupsService, UrlService){
let vm = this;
vm.createGroup = function(name) {
GroupsService.createGroup(name);
vm.newGroupName = '';
vm.expNamesToRemove = [];
vm.toggleExpName = (expName) => {
console.log(vm.expNamesToRemove);
let idx = vm.expNamesToRemove.indexOf(expName);
if(idx > -1){
vm.expNamesToRemove.splice(idx, 1);
} else {
vm.expNamesToRemove.push(expName);
}
console.log(vm.expNamesToRemove);
};
// createGroup input val
vm.newGroupName = '';
vm.removeExperiments = () => {
if(vm.expNamesToRemove.length === 0){
return;
}
vm.removeExperiment = (experiment_name) => {
beat.ui.report.remove_experiment('report_remove_experiment', experiment_name, $scope);
let url = UrlService.getRemoveExperimentUrl();
return $http({
headers: {'Content-Type': 'application/json'},
url,
method: "POST",
data: {
experiments: [...vm.expNamesToRemove]
}
})
.then(res => location.reload())
;
};
}]);
......@@ -67,6 +67,7 @@ angular.module('reportApp').factory('UrlService', [function(){
const getApiUrl = (apiSubpath) => `${apiPath()}${apiSubpath}`;
const getCompileRstUrl = () => `${getApiUrl(`${reportByName}rst/`)}`;
const getRemoveExperimentUrl = () => `${getApiUrl(`${reportByName}remove/`)}`;
extractUsingCurrentUrl();
......@@ -74,6 +75,7 @@ angular.module('reportApp').factory('UrlService', [function(){
getExperimentUrl,
getBlockUrl,
getDatabaseUrl,
getCompileRstUrl
getCompileRstUrl,
getRemoveExperimentUrl
};
}]);
......@@ -65,95 +65,111 @@
</div>
</div><!-- row -->
<div class="row">
<div class="col-sm-12">
<div class="scrollable table-responsive">
<table id="{{ panel_id }}" class="table table-hover table-condensed object-list experiment-list">
<thead>
<tr>
<th class='delete'></th>
<th class="attestation"></th>
<th class="privacy"></th>
<th class="status"></th>
<th class="date">Updated</th>
<th>Name</th>
<th class="datasets">Databases/Protocols</th>
<th class="analyzers">Analyzers</th>
</tr>
</thead>
<tbody>
{% for obj in objects %}
{% with obj.get_status_display as status %}
<tr class="{{ status }}">
{% if owner %}
<td class="delete" ng-controller='GroupsController as ctrl'>
<span class='btn-group action-buttons'>
<a
class='btn-delete'
title="Delete Experiment"
data-toggle="tooltip"
data-placement="top">
<span ng-click="ctrl.removeExperiment('{{ obj.fullname }}')">
<i class='fa fa-times fa-2x'></i>
<div ng-controller='GroupsController as ctrl'>
<div class="row" >
<div class="col-sm-12">
<div class="scrollable table-responsive">
<table id="{{ panel_id }}" class="table table-hover table-condensed object-list experiment-list">
<thead>
<tr>
{% if not report_number %}
<th class='delete'></th>
{% endif %}
<th class="attestation"></th>
<th class="privacy"></th>
<th class="status"></th>
<th class="date">Updated</th>
<th>Name</th>
<th class="datasets">Databases/Protocols</th>
<th class="analyzers">Analyzers</th>
</tr>
</thead>
<tbody>
{% for obj in objects %}
{% with obj.get_status_display as status %}
<tr class="{{ status }}">
{% if not report_number %}
<td class="delete">
<input
name='ctrl.expNamesToRemove[]'
type="checkbox"
value="{{ obj.fullname }}"
ng-checked="ctrl.expNamesToRemove.indexOf('{{ obj.fullname }}') > -1"
ng-click="ctrl.toggleExpName('{{ obj.fullname }}')"
>
</td>
{% endif %}
<td class="attestation">
{% if obj.attestation %}
<a class="icon-link" href="{% url 'attestations:view' obj.attestation.number %}" title="{% if obj.attestation.locked %}Locked{% else %}Attested{% endif %} (click to view)" data-toggle="tooltip" data-placement="top">
{% if obj.attestation.locked %}
<span class="icon-locked fa-stack">
<i class="fa fa-certificate fa-stack-2x"></i>
<i class="fa fa-lock fa-stack-1x fa-inverse"></i>
</span>
{% else %}
<i class="icon-attested fa fa-certificate"></i>
{% endif %}
</a>
</span>
</td>
{% endif %}
<td class="attestation">
{% if obj.attestation %}
<a class="icon-link" href="{% url 'attestations:view' obj.attestation.number %}" title="{% if obj.attestation.locked %}Locked{% else %}Attested{% endif %} (click to view)" data-toggle="tooltip" data-placement="top">
{% if obj.attestation.locked %}
<span class="icon-locked fa-stack">
<i class="fa fa-certificate fa-stack-2x"></i>
<i class="fa fa-lock fa-stack-1x fa-inverse"></i>
</span>
{% else %}
<i class="icon-attested fa fa-certificate"></i>
{% endif %}
</a>
</td>
<td class="privacy">
<a title="{{ obj.get_sharing_display }}" data-toggle="tooltip" data-placement="top">
{% if obj.get_sharing_display == 'Private' %}
<i class="fa fa-user fa-2x"></i>
{% elif obj.get_sharing_display == 'Shared' %}
<i class="fa fa-users fa-2x"></i>
{% else %}
<i class="fa fa-globe fa-2x"></i>
{% endif %}
</a>
</td>
<td class="status">
<a title="{{ status }}" data-toggle="tooltip" data-placement="top">
{% if status == 'Done' %}
<i class="icon-done fa fa-check fa-2x"></i>
{% elif status == 'Scheduled' %}
<i class="icon-scheduled fa fa-calendar-check-o fa-2x"></i>
{% elif status == 'Pending' %}
<i class="icon-pending fa fa-play fa-2x"></i>
{% elif status == 'Failed' %}
<i class="icon-failed fa fa-bug fa-2x"></i>
{% elif status == 'Canceling' %}
<i class="icon-canceling fa fa-power-off fa-2x"></i>
{% else %}
<i class="icon-running fa fa-refresh fa-spin fa-2x"></i>
{% endif %}
</a>
</td>
{% if obj.end_date %}
<td class="date">{{ obj.end_date|date }}</td>
{% elif obj.start_date %}
<td class="date">{{ obj.start_date|date }}</td>
{% else %}
<td class="date">{{ obj.creation_date|date }}</td>
{% endif %}
</td>
<td class="privacy">
<a title="{{ obj.get_sharing_display }}" data-toggle="tooltip" data-placement="top">
{% if obj.get_sharing_display == 'Private' %}
<i class="fa fa-user fa-2x"></i>
{% elif obj.get_sharing_display == 'Shared' %}
<i class="fa fa-users fa-2x"></i>
{% else %}
<i class="fa fa-globe fa-2x"></i>
{% endif %}
</a>
</td>
<td class="status">
<a title="{{ status }}" data-toggle="tooltip" data-placement="top">
{% if status == 'Done' %}
<i class="icon-done fa fa-check fa-2x"></i>
{% elif status == 'Scheduled' %}
<i class="icon-scheduled fa fa-calendar-check-o fa-2x"></i>
{% elif status == 'Pending' %}
<i class="icon-pending fa fa-play fa-2x"></i>
{% elif status == 'Failed' %}
<i class="icon-failed fa fa-bug fa-2x"></i>
{% elif status == 'Canceling' %}
<i class="icon-canceling fa fa-power-off fa-2x"></i>
{% else %}
<i class="icon-running fa fa-refresh fa-spin fa-2x"></i>
{% endif %}
</a>
</td>
<td class="date">{{ obj.updated|date }}</td>
<td class="name"><a href="{{ obj.get_absolute_url }}" data-toggle="tooltip" data-placement="top" title="Click to view">{{ obj.fullname }}</a></td>
<td class="datasets">{{ obj.databases_and_protocols|join:"," }}</td>
<td class="analyzers">{{ obj.analyzers|join:"," }}</td>
</tr>
{% endwith %}
{% endfor %}
</tbody>
</table>
</div>
</div><!-- col -->
</div><!-- row -->
<td class="name"><a href="{{ obj.get_absolute_url }}" data-toggle="tooltip" data-placement="top" title="Click to view">{{ obj.fullname }}</a></td>
<td class="datasets">{{ obj.databases_and_protocols|join:"," }}</td>
<td class="analyzers">{{ obj.analyzers|join:"," }}</td>
</tr>
{% endwith %}
{% endfor %}
</tbody>
</table>
</div>
</div><!-- col -->
</div><!-- row -->
{% if not report_number %}
<div>
<button
ng-disabled='ctrl.expNamesToRemove.length == 0'
class='btn btn-danger'
ng-click="ctrl.removeExperiments()">
Remove Selected Experiments
</button>
</div>
{% endif %}
</div>
{% else %} <!-- if objects -->
<div class="row">
<div class="col-sm-12 not-found">
......
......@@ -54,7 +54,7 @@
</div>{# panel-heading #}
<div id="collapse-info" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading">
<div class="panel-body">
{% experiment_table exps owner "experiment-list-test" %}
{% experiment_table exps owner report_number "experiment-list-test" %}
</div>{# panel-body #}
</div>{# collapse #}
</div>{# panel #}
......
......@@ -110,7 +110,7 @@
<script src="{% fingerprint "reports/app/directives/theColumn.js" %}" type="text/javascript" charset="utf-8"></script>
<!-- edit view -->
{% if report and user and not report_number %}
{% if not report_number %}
<script src="{% fingerprint "reports/app/directives/edit/addGroupMenu.js" %}" type="text/javascript" charset="utf-8"></script>
<script src="{% fingerprint "reports/app/directives/edit/addItemsMenu.js" %}" type="text/javascript" charset="utf-8"></script>
<script src="{% fingerprint "reports/app/directives/edit/itemContainer.js" %}" type="text/javascript" charset="utf-8"></script>
......@@ -201,7 +201,7 @@
{% endwith %}
{% report_viewer report owner %}
{% report_viewer report owner report_number %}
{% endif %}
......
......@@ -105,7 +105,7 @@ def report_actions(context, object, display_count):
@register.inclusion_tag('reports/panels/viewer.html', takes_context=True)
def report_viewer(context, object, owner):
def report_viewer(context, object, owner, report_number):
'''Composes the search results for visualization
Parameters:
......@@ -126,6 +126,7 @@ def report_viewer(context, object, owner):
object=object,
owner=owner,
exps=object.experiments.all(),
report_number=report_number,
URL_PREFIX=context['URL_PREFIX'],
)
......@@ -253,10 +254,11 @@ register.inclusion_tag('reports/dialogs/report_saved.html')(report_saved)
@register.inclusion_tag('reports/panels/experiment_table.html', takes_context=True)
def experiment_table(context, objects, owner, id):
def experiment_table(context, objects, owner, report_number, id):
return dict(
request=context['request'],
objects=objects,
owner=owner,
panel_id=id,
report_number=report_number
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment