Newer
Older
istex-api-demo / js / controllers / searchPageController.js
/*jslint jquery: true */
/*jslint node: true */

define(["../models/searchPage", "../conf", "../vendor/mustache"], function(searchPage, conf, mustache) {
    "use strict";
    var searchPageController = {};
    /*****************************************
     * Fonctions de recherche et d'affichage
     *****************************************/
    $.get(conf.apiUrl + "corpus", function(data) {
        var corpusTemplate = "{{#corpusList}}<option value={{term}}>{{term}}</option>{{/corpusList}}";
        var corpusList = {
            corpusList: data
        };
        $('#editorField').append(mustache.to_html(corpusTemplate, corpusList));
    });

    searchPageController.displayResults = function(data) {
        if (data.total > 0) {
            searchPage.numberOfResults = data.total;
            searchPage.numberOfPages = searchPage.numberOfResults === 0 ? 0 : Math.ceil(searchPage.numberOfResults / searchPage.resultsPerPage);
            searchPage.currentPage = searchPage.numberOfResults === 0 ? 0 : searchPage.currentPage;
            $("#currentPage").text(searchPage.currentPage === 0 ? "*" : searchPage.currentPage);
            $("#totalPages").text(searchPage.numberOfPages === 0 ? "*" : searchPage.numberOfPages);

            data["abstr"] = function() {
                return function(text, render) {
                    if (render(text) == "") return "Pas de résumé pour ce résultat.";
                    return render(text);
                }
            };

            data["ftext"] = function() {
                return function(text, render) {
                    console.log(render(text));
                    var html = "";
                    var infos = render(text).split(" ");
                    var i = 0;
                    while ((i + 1) < infos.length) {
                        var typeFile;
                        switch (infos[i]) {
                            case 'application/zip':
                                typeFile = 'img/mimetypes/32px/zip.png'
                                break;
                            case 'application/pdf':
                                typeFile = 'img/mimetypes/32px/pdf.png'
                                break;
                            case 'image/tiff':
                                typeFile = 'img/mimetypes/32px/tiff.png'
                                break;
                            default:
                                typeFile = 'img/mimetypes/32px/_blank.png'
                                break;
                        }
                        html += "<a href=\"" + infos[i + 1] + "\" target=\"_blank\"><img src=\"" + typeFile + "\" alt=\'"+infos[i].split("/")[1]+"\' title=\'"+infos[i].split("/")[1]+"\'></a>"
                        i = i + 2;
                    }
                    return html;
                }
            };

            data["mdata"] = function() {
                return function(text, render) {
                    console.log(render(text));
                    var html = "";
                    var infos = render(text).split(" ");
                    var i = 0;
                    while ((i + 1) < infos.length) {
                        var typeFile;
                        switch (infos[i]) {
                            case 'application/xml':
                                typeFile = 'img/mimetypes/32px/xml.png'
                                break;
                            case 'application/mods+xml':
                                typeFile = 'img/mimetypes/32px/mods.png'
                                break;
                            default:
                                typeFile = 'img/mimetypes/32px/_blank.png'
                                break;
                        }
                        html += "<a href=\"" + infos[i + 1] + "\" target=\"_blank\"><img src=\"" + typeFile + "\" alt=\'"+infos[i].split("/")[1]+"\' title=\'"+infos[i].split("/")[1]+"\'></a>"
                        i = i + 2;
                    }
                    return html;
                }
            };

            var tableLine = "{{#hits}}<tr class='row'><td><h4 class='alert-success col-md-12'><b>{{title}}</b></h4><p class='col-md-12' style='font-size:X-small;'>{{#abstr}}{{abstract}}{{/abstr}}</p><div class='label label-default' style='text-align:left;'><b>{{corpusName}}</b></div><div class='col-md-10' style='text-align:center;'>{{#ftext}}{{#fulltext}}{{{mimetype}}} {{{uri}}} {{/fulltext}}{{/ftext}}{{#mdata}}{{#metadata}}{{{mimetype}}} {{{uri}}} {{/metadata}}{{/mdata}}</div></tr>{{/hits}}";

            $("#tableResult").html(mustache.to_html(tableLine, data));

            if (!searchPage.reaffine) {
                var corpusFacetTemplate = "{{#facets.corpusFacet.terms}}<div class='col-sm-offset-2 col-sm-10'><div class='checkbox'><label><input value={{term}} type='checkbox'>{{term}}</label><span class='badge pull-right'>{{count}}</span></div></div>{{/facets.corpusFacet.terms}}";
                $('#nbCorpusFacet').text(data.facets.corpusFacet.terms.length);
                $('#facetCorpus').empty();
                $('#facetCorpus').append(mustache.to_html(corpusFacetTemplate, data));

                if (data.facets.corpusFacet.terms.length == 1) {
                    facetCorpus.getElementsByTagName('input').item(0).checked = true;
                    facetCorpus.getElementsByTagName('input').item(0).disabled = true;
                }
            }

        } else {

            $("#tableResult").html("<tr class='row'><td class='truncate col-md-8' colspan=\"3\" style='text-align:center'>Pas de résultat pour cette recherche.</td>");
            $('#nbCorpusFacet').text("");
            $('#facetCorpus').empty();

        }
        $("button").button('reset');
    };

    searchPageController.manageError = function(err) {
        $("button").button('reset');
        $(".alert span").html("Houston ... Problem!" + err.responseText);
        $(".alert").alert();
    };

    searchPageController.search = function() {
        var query = "document/?q=";
        var fields = [];

        if (searchPage.searchField !== "" && searchPage.searchField !== undefined) {
            fields.push(searchPage.searchField);
        }

        if ($("#collapse").is(':visible')) {

            if (searchPage.author !== "" && searchPage.author !== undefined) {
                fields.push("author.personal:" + searchPage.author);
            }
            if (searchPage.title !== "" && searchPage.title !== undefined) {
                fields.push("title:" + searchPage.title);
            }
            if (searchPage.keywords !== "" && searchPage.keywords !== undefined) {
                fields.push("subject.value:" + searchPage.keywords);
            }
        }

        query += fields.join(" AND ");
        query += "&size=" + searchPage.resultsPerPage;
        query += "&from=" + searchPage.resultsPerPage * (searchPage.currentPage === 0 ? 1 : searchPage.currentPage - 1);
        $.each(searchPage.editor, function(index, editor) {
            if (editor !== "-1") {
                query += "&corpus=" + editor;
            }
        });

        // Facets (à compléter au fur et à mesure de l'ajout de fonctionnalités)
        query += "&facet=corpus";

        query += "&output=*";

        $("#searchButton").button('loading');

        var request = {
            url: conf.apiUrl + query,
            jsonp: true,
            crossDomain: true,
            success: searchPageController.displayResults,
            error: searchPageController.manageError
        };

        $.ajax(request);

        $("#result").removeClass('hide');
        $("#paginRow").removeClass('hide');
        $("#pageNumber").removeClass('hide');

    };
    return searchPageController;
});