refstack/refstack-ui/app/components/results/resultsController.js
Paul Van Eck d23adad7f6 Update eslint and update angular style to match
With an updated eslint version and the addition of eslint-config-openstack
and eslint-plugin-angular, there are several more stylistic guidelines to
follow. However, this is what other OpenStack angular projects follow such
as Horizon. Some notable changes are:

* Wrapped javascript content in anonymous functions. This is a safeguard to
  keep the code from conflicting with other variables with the same name in
  other scripts on the same page.

* Explicitly inject dependencies and have controllers, factories, etc as
  explicitly declared functions.

* Use angular "controller as" syntax instead of assigning variables to $scope.

* Added eslint rule that requires JSDoc for every function declaration.

Note these are mainly stylistic changes and all the functionality of RefStack
should remain the same.

Change-Id: I044b1f473d589681a2ae9d2704700dd85687cbb6
2015-09-30 13:47:20 -07:00

143 lines
4.8 KiB
JavaScript

/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
'use strict';
angular
.module('refstackApp')
.controller('ResultsController', ResultsController);
ResultsController.$inject = [
'$scope', '$http', '$filter', '$state', 'refstackApiUrl'
];
/**
* RefStack Results Controller
* This controller is for the '/results' page where a user can browse
* a listing of community uploaded results.
*/
function ResultsController($scope, $http, $filter, $state, refstackApiUrl) {
var ctrl = this;
ctrl.update = update;
ctrl.open = open;
ctrl.clearFilters = clearFilters;
/** Initial page to be on. */
ctrl.currentPage = 1;
/**
* How many results should display on each page. Since pagination
* is server-side implemented, this value should match the
* 'results_per_page' configuration of the Refstack server which
* defaults to 20.
*/
ctrl.itemsPerPage = 20;
/**
* How many page buttons should be displayed at max before adding
* the '...' button.
*/
ctrl.maxSize = 5;
/** The upload date lower limit to be used in filtering results. */
ctrl.startDate = '';
/** The upload date upper limit to be used in filtering results. */
ctrl.endDate = '';
/** The date format for the date picker. */
ctrl.format = 'yyyy-MM-dd';
/** Check to see if this page should display user-specific results. */
ctrl.isUserResults = $state.current.name === 'userResults';
// Should only be on user-results-page if authenticated.
if (ctrl.isUserResults && !$scope.auth.isAuthenticated) {
$state.go('home');
}
ctrl.pageHeader = ctrl.isUserResults ?
'Private test results' : 'Community test results';
if (ctrl.isUserResults) {
ctrl.authRequest = $scope.auth.doSignCheck()
.then(ctrl.update);
} else {
ctrl.update();
}
/**
* This will contact the Refstack API to get a listing of test run
* results.
*/
function update() {
ctrl.showError = false;
// Construct the API URL based on user-specified filters.
var content_url = refstackApiUrl + '/results' +
'?page=' + ctrl.currentPage;
var start = $filter('date')(ctrl.startDate, 'yyyy-MM-dd');
if (start) {
content_url =
content_url + '&start_date=' + start + ' 00:00:00';
}
var end = $filter('date')(ctrl.endDate, 'yyyy-MM-dd');
if (end) {
content_url = content_url + '&end_date=' + end + ' 23:59:59';
}
if (ctrl.isUserResults) {
content_url = content_url + '&signed';
}
ctrl.resultsRequest =
$http.get(content_url).success(function (data) {
ctrl.data = data;
ctrl.totalItems = ctrl.data.pagination.total_pages *
ctrl.itemsPerPage;
ctrl.currentPage = ctrl.data.pagination.current_page;
}).error(function (error) {
ctrl.data = null;
ctrl.totalItems = 0;
ctrl.showError = true;
ctrl.error =
'Error retrieving results listing from server: ' +
angular.toJson(error);
});
}
/**
* This is called when the date filter calendar is opened. It
* does some event handling, and sets a scope variable so the UI
* knows which calendar was opened.
* @param {Object} $event - The Event object
* @param {String} openVar - Tells which calendar was opened
*/
function open($event, openVar) {
$event.preventDefault();
$event.stopPropagation();
ctrl[openVar] = true;
}
/**
* This function will clear all filters and update the results
* listing.
*/
function clearFilters() {
ctrl.startDate = null;
ctrl.endDate = null;
ctrl.update();
}
}
})();