all files / invenio-search-js/services/ invenioSearchAPI.js

100% Statements 23/23
100% Branches 4/4
100% Functions 7/7
100% Lines 23/23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106                                                                                  99×               54×                       99×   99×           99× 95× 95× 266×     263×     95×     99×       99×   49×                
/*
 * This file is part of Invenio.
 * Copyright (C) 2017 CERN.
 *
 * Invenio is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * Invenio is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Invenio; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 *
 * In applying this license, CERN does not
 * waive the privileges and immunities granted to it by virtue of its status
 * as an Intergovernmental Organization or submit itself to any jurisdiction.
 */
 
/**
  * @ngdoc service
  * @name invenioSearchAPI
  * @namespace invenioSearchAPI
  * @param {service} $http - Angular http requests service.
  * @param {service} $q - Angular promise services.
  * @description
  *     Call the search API
  */
function invenioSearchAPI($http, $q, $window) {
 
  /**
    * Make a search request to the API
    * @memberof invenioSearchAPI
    * @param {Object} args - The search request parameters.
    * @returns {service} promise
    */
  function search(args, hidden) {
 
    // Initialize the promise
    var deferred = $q.defer();
 
    /**
      * Search on success
      * @memberof invenioSearchAPI
      * @param {Object} response - The search API response.
      * @returns {Object} response
      */
    function success(response) {
      deferred.resolve(response);
    }
 
    /**
      * Search on error
      * @memberof invenioSearchAPI
      * @param {Object} response - The search API error response.
      * @returns {Object} error
      */
    function error(response) {
      deferred.reject(response);
    }
 
    // Place all parameters together
    var params = angular.copy(args);
    // Extend parameters with the hidden params
    params.params = angular.merge(params.params, hidden || {});
    // Make sure the params are encoded
    // By default Angular is not so strict and we have to override the
    // serializer
    // https://github.com/angular/angular.js/blob/464dde8bd12d9be8503678ac57529
    // 45661e006a5/src/Angular.js#L1464-L1491
    params.paramSerializer = function(data) {
      var output = [];
      angular.forEach(data, function(value, key) {
        if (angular.isArray(value)) {
          var that = this;
          value.filter(function(item) {
            that.push($window.encodeURIComponent(key) + '=' + $window.encodeURIComponent(item));
          });
        } else {
          this.push($window.encodeURIComponent(key) + '=' + $window.encodeURIComponent(value));
        }
      }, output);
      return output.join('&');
    };
    // Make the request
    $http(params).then(
      success,
      error
    );
    return deferred.promise;
  }
  return {
    search: search
  };
}
 
// Inject the necessary angular services
invenioSearchAPI.$inject = ['$http', '$q', '$window'];
 
angular.module('invenioSearch.services')
  .service('invenioSearchAPI', invenioSearchAPI);