From 6044fa6305a0c19cf7e5b40ca21926555b5e15fb Mon Sep 17 00:00:00 2001 From: Antoine Lambert <antoine.lambert@inria.fr> Date: Thu, 16 Nov 2017 17:40:32 +0100 Subject: [PATCH] browse: Add software origins search interface Closes T848 --- docs/uri-scheme-api-origin.rst | 2 +- swh/web/browse/views/origin.py | 26 +++ swh/web/static/css/style.css | 17 +- swh/web/static/img/swh-spinner.gif | Bin 0 -> 63178 bytes swh/web/templates/browse.html | 96 ++++++---- .../templates/includes/origins-search.html | 164 ++++++++++++++++++ 6 files changed, 266 insertions(+), 39 deletions(-) create mode 100644 swh/web/static/img/swh-spinner.gif create mode 100644 swh/web/templates/includes/origins-search.html diff --git a/docs/uri-scheme-api-origin.rst b/docs/uri-scheme-api-origin.rst index 285935c90..e5f3efbc0 100644 --- a/docs/uri-scheme-api-origin.rst +++ b/docs/uri-scheme-api-origin.rst @@ -113,7 +113,7 @@ Origin .. parsed-literal:: - $ curl -i :swh_web_api:`origin/search/python/`?limit=2 + $ curl -i :swh_web_api:`origin/search/python/?limit=2` **Response:** diff --git a/swh/web/browse/views/origin.py b/swh/web/browse/views/origin.py index 163e8d37c..46f2c8489 100644 --- a/swh/web/browse/views/origin.py +++ b/swh/web/browse/views/origin.py @@ -4,7 +4,11 @@ # See top-level LICENSE file for more information import dateutil +import json +from distutils.util import strtobool + +from django.http import HttpResponse from django.shortcuts import render from django.utils.safestring import mark_safe from django.template.defaultfilters import filesizeformat @@ -618,3 +622,25 @@ def origin_log_browse(request, origin_id, visit_id=None, timestamp=None): 'top_right_link_text': None, 'include_top_navigation': True, 'no_origin_context': False}) + + +@browse_route(r'origin/search/(?P<url_pattern>.+)/', + view_name='browse-origin-search') +def origin_search(request, url_pattern): + """Search for origins whose urls contain a provided string pattern + or match a provided regular expression. + The search is performed in a case insensitive way. + + """ + + offset = int(request.GET.get('offset', '0')) + limit = int(request.GET.get('limit', '50')) + regexp = request.GET.get('regexp', 'false') + + results = service.search_origin(url_pattern, offset, limit, + bool(strtobool(regexp))) + + results = json.dumps(list(results), sort_keys=True, indent=4, + separators=(',', ': ')) + + return HttpResponse(results, content_type='application/json') diff --git a/swh/web/static/css/style.css b/swh/web/static/css/style.css index 545c875e2..3d767b6f4 100644 --- a/swh/web/static/css/style.css +++ b/swh/web/static/css/style.css @@ -446,4 +446,19 @@ fieldset[disabled] .btn-swh.active { .swh-counter { font-size: 150%; -} \ No newline at end of file +} +.swh-loading { + display : none; +} + +.swh-loading.show { + display:inline-block; + position: absolute; + background: white; + border: 1px solid black; + top: 50%; + left: 50%; + transform: translate(0, -50%); + margin: -50px 0px 0px -50px; + text-align: center; +} diff --git a/swh/web/static/img/swh-spinner.gif b/swh/web/static/img/swh-spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4fd2a0d5e5a6a06c0a0fa054519af5fb3bef2fe GIT binary patch literal 63178 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 P3qpTE=>N6|J@J14$X4H- literal 0 HcmV?d00001 diff --git a/swh/web/templates/browse.html b/swh/web/templates/browse.html index 6f8f00495..c6e4d2e37 100644 --- a/swh/web/templates/browse.html +++ b/swh/web/templates/browse.html @@ -5,52 +5,74 @@ {% block content %} -<div class="panel-group" id="accordion"> - {% if top_panel_visible %} - <div class="panel panel-default" style="overflow-x: auto;"> - <div class="panel-heading"> - {% if top_panel_collapsible %} - <a data-toggle="collapse" data-parent="#accordion" href="#swh-browse-top-collapse" style="outline:none;"> - {% endif %} - <div class="panel-title pull-left"> - <h4>{{ top_panel_text_left }}</h4> +<ul class="nav nav-tabs"> + <li class="active"> + <a href="#tab_browse" data-toggle="tab" style="outline:none;">Browse</a> + </li> + <li> + <a href="#tab_search" data-toggle="tab" style="outline:none;">Search</a> + </li> +</ul> + +<div class="tab-content" style="margin-top: 5px;"> + <div class="tab-pane active" id="tab_browse"> + + <div class="panel-group" id="accordion"> + {% if top_panel_visible %} + <div class="panel panel-default" style="overflow-x: auto;"> + <div class="panel-heading"> + {% if top_panel_collapsible %} + <a data-toggle="collapse" data-parent="#accordion" href="#swh-browse-top-collapse" style="outline:none;"> + {% endif %} + <div class="panel-title pull-left"> + <h4>{{ top_panel_text_left }}</h4> + </div> + <div class="panel-title pull-right"> + <h4>{{ top_panel_text_right }}</h4> + </div> + <div class="clearfix"></div> + {% if top_panel_collapsible %} + </a> + {% endif %} + </div> - <div class="panel-title pull-right"> - <h4>{{ top_panel_text_right }}</h4> + {% if top_panel_collapsible %} + <div id="swh-browse-top-collapse" class="panel-collapse collapse"> + {% endif %} + <table class="table"> + <tbody> + {% for key, val in swh_object_metadata.items|dictsort:"0.lower" %} + <tr> + <th class="swh-metadata-table-row">{{ key }}</th> + <td class="swh-metadata-table-row"> + <pre>{{ val | safe | urlize_links_and_mails | safe }}</pre> + </td> + </tr> + {% endfor %} + </tbody> + </table> + {% if top_panel_collapsible %} </div> - <div class="clearfix"></div> - {% if top_panel_collapsible %} - </a> - {% endif %} - + {% endif %} </div> - {% if top_panel_collapsible %} - <div id="swh-browse-top-collapse" class="panel-collapse collapse"> {% endif %} - <table class="table"> - <tbody> - {% for key, val in swh_object_metadata.items|dictsort:"0.lower" %} - <tr> - <th class="swh-metadata-table-row">{{ key }}</th> - <td class="swh-metadata-table-row"> - <pre>{{ val | safe | urlize_links_and_mails | safe }}</pre> - </td> - </tr> - {% endfor %} - </tbody> - </table> - {% if top_panel_collapsible %} + {% if main_panel_visible %} + <div class="panel panel-default" style="overflow-x: auto;"> + {% block swh-browse-main-panel-content %}{% endblock %} </div> {% endif %} + </div> + + {% block swh-browse-after-panels %}{% endblock %} + </div> - {% endif %} - {% if main_panel_visible %} - <div class="panel panel-default" style="overflow-x: auto;"> - {% block swh-browse-main-panel-content %}{% endblock %} + <div class="tab-pane" id="tab_search"> + + {% include "includes/origins-search.html" %} + </div> - {% endif %} </div> -{% block swh-browse-after-panels %}{% endblock %} + {% endblock %} diff --git a/swh/web/templates/includes/origins-search.html b/swh/web/templates/includes/origins-search.html new file mode 100644 index 000000000..2456061c6 --- /dev/null +++ b/swh/web/templates/includes/origins-search.html @@ -0,0 +1,164 @@ +{% load static %} + +<div class="panel panel-default" style="overflow-x: auto;"> + <div class="panel-heading"> + <h4>Search Software Heritage origins to browse:</h4> + </div> + <div class="panel-body"> + <form class="form-horizontal" id="search_origins"> + <div class="input-group add-on"> + <input class="form-control" placeholder="Enter string pattern(s) to search for in origin urls" type="text" id="origins-url-patterns"/> + <div class="input-group-btn"> + <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button> + </div> + </div> + </form> + + <div class="swh-loading"> + <img src="{% static 'img/swh-spinner.gif' %}"></img> + <p>Searching origins ...</p> + </div> + + <table class="table" id="origin-search-results"> + <thead> + <tr> + <th>Origin id</th> + <th>Origin type</th> + <th>Origin url</th> + <th></th> + </tr> + </thead> + <tbody></tbody> + </table> + + <ul class="pager"> + <li class="disabled" id="origins-prev-results-button"><a href="#">Previous</a></li> + <li class="disabled" id="origins-next-results-button"><a href="#">Next</a></li> + </ul> + </div> +</div> +<script> + + var origin_patterns; + var per_page = 15; + var offset = 0; + var origins_search_url = "{% url 'browse-origin-search' 'url_regexp' %}?limit=limit_val&offset=offset_val®exp=true"; + var origin_browse_url = "{% url 'browse-origin' '0' %}"; + var search_request = null; + + function populateOriginSearchResultsTable(data, limit, offset) { + $("#origin-search-results tbody tr").remove(); + var table = $("#origin-search-results tbody"); + $.each(data, function(idx, elem){ + var tableRow = '<tr>'; + tableRow += '<td>' + elem.id + '</td>'; + tableRow += '<td>' + elem.type + '</td>'; + tableRow += '<td><a href="' + elem.url + '">' + elem.url + '</a></td>'; + var browse_url = origin_browse_url.replace('0', elem.id); + tableRow += '<td><a href="' + browse_url + '">Browse</a></td>'; + tableRow += '</tr>'; + table.append(tableRow); + }); + if (data.length == per_page) { + $('#origins-next-results-button').removeClass('disabled'); + } else { + $('#origins-next-results-button').addClass('disabled'); + } + if (offset > 0) { + $('#origins-prev-results-button').removeClass('disabled'); + } else { + $('#origins-prev-results-button').addClass('disabled'); + } + } + + $(document).ready(function() { + if (typeof(Storage) !== "undefined") { + origin_patterns = sessionStorage.getItem("last-swh-origin-url-patterns"); + var data = sessionStorage.getItem("last-swh-origin-search-results"); + offset = sessionStorage.getItem("last-swh-origin-search-offset"); + if (data) { + $("#origins-url-patterns").val(origin_patterns); + offset = parseInt(offset); + populateOriginSearchResultsTable(JSON.parse(data), per_page, offset); + } + } + }); + + // http://dsernst.com/2014/12/14/heaps-permutation-algorithm-in-javascript/ + function swap(array, pos1, pos2) { + var temp = array[pos1]; + array[pos1] = array[pos2]; + array[pos2] = temp; + } + + function heapsPermute(array, output, n) { + n = n || array.length; // set n default to array.length + if (n === 1) { + output(array); + } else { + for (var i = 1; i <= n; i += 1) { + heapsPermute(array, output, n - 1); + if (n % 2) { + var j = 1; + } else { + var j = i; + } + swap(array, j - 1, n - 1); // -1 to account for javascript zero-indexing + } + } + }; + + function searchOrigins(patterns, limit, offset) { + origin_patterns = patterns; + var patterns_array = patterns.trim().replace(/\s+/g,' ').split(' '); + var patterns_permut = [] + heapsPermute(patterns_array, (p) => {patterns_permut.push(p.join('.*'));}) + var regex = patterns_permut.join('|'); + var search_url = origins_search_url.replace('url_regexp', regex) + .replace('limit_val', limit) + .replace('offset_val', offset); + if (search_request) { + search_request.abort(); + } + $(".swh-loading").addClass('show'); + search_request = $.ajax({ + url: search_url, + dataType: 'json', + error: function() { + search_request = null; + $(".swh-loading").removeClass('show'); + }, + success: function (data) { + search_request = null; + if (typeof(Storage) !== "undefined") { + sessionStorage.setItem("last-swh-origin-url-patterns", patterns); + sessionStorage.setItem("last-swh-origin-search-results", JSON.stringify(data)); + sessionStorage.setItem("last-swh-origin-search-offset", offset); + } + populateOriginSearchResultsTable(data, per_page, offset); + $(".swh-loading").removeClass('show'); + + } + }); + } + + $("#search_origins").submit(function (event) { + var patterns = $("#origins-url-patterns").val(); + offset = 0; + searchOrigins(patterns, per_page, offset); + event.preventDefault(); + }); + + $("#origins-next-results-button").click(function (event) { + offset += per_page; + searchOrigins(origin_patterns, per_page, offset); + event.preventDefault(); + }); + + $("#origins-prev-results-button").click(function (event) { + offset -= per_page; + searchOrigins(origin_patterns, per_page, offset); + event.preventDefault(); + }); + + </script> \ No newline at end of file -- GitLab