Source: directives/invenioSearch.js

/*
 * 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 directive
  * @name invenioSearch
  * @description
  *    The invenioSearch directive handler
  * @namespace invenioSearch
  * @example
  *    Usage:
  *    <invenio-search
  *     search-endpoint='SEARCH_PROVIDER_URL'
  *     search-headers='{"Accept": "application/json"}'
  *     search-hidden-params='{"collection": "Collection"}'
  *     search-extra-params='{"page": 2, "size": 5}'>
  *        ... Any children directives
  *    </invenio-search>
  */
function invenioSearch() {

  // Functions

  /**
    * Initialize search
    * @memberof invenioSearch
    * @param {service} scope -  The scope of this element.
    * @param {service} element - Element that this direcive is assigned to.
    * @param {service} attrs - Attribute of this element.
    * @param {invenioSearchCtrl} vm - Invenio search controller.
    */
  function link(scope, element, attrs, vm) {
    // Update search parameters
    var collectedArgs = {
      url: attrs.searchEndpoint,
      method: attrs.searchMethod || 'GET',
      headers: JSON.parse(attrs.searchHeaders || '{}'),
    };

    // Add any extra parameters
    var extraParams = {
      params: JSON.parse(attrs.searchExtraParams || '{}')
    };

    var urlParams = {
      params: vm.invenioSearchGetUrlArgs()
    };

    // Url listerner
    vm.disableUrlHandler = (attrs.disableUrlHandler) ? true : false;

    vm.invenioSearchHiddenParams = JSON.parse(
      attrs.searchHiddenParams  || '{}'
    );

    // Update arguments
    var params = angular.merge(
      {},
      collectedArgs,
      extraParams,
      urlParams
    );

    // Brodcast ready to initialization
    scope.$broadcast('invenio.search.initialazation', params);
  }

  ////////////

  return {
    restrict: 'AE',
    scope: false,
    controller: 'invenioSearchCtrl',
    controllerAs: 'vm',
    link: link,
  };
}

angular.module('invenioSearch.directives')
  .directive('invenioSearch', invenioSearch);