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&regexp=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