diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-09-12 12:26:37 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-24 12:06:08 +0200 |
commit | ef120a060b2eee4d67df7a065c3dd4b67b93f7ba (patch) | |
tree | 639bb5dd031bf78c54b1b41ef31ffcd1197d5ddd /ishtar_common | |
parent | dd3a897326fca68c15d86872062b1fcaccb8c683 (diff) | |
download | Ishtar-ef120a060b2eee4d67df7a065c3dd4b67b93f7ba.tar.bz2 Ishtar-ef120a060b2eee4d67df7a065c3dd4b67b93f7ba.zip |
Action to remove bookmarks (refs #4230)
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/static/js/ishtar.js | 21 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables.html | 2 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/forms/bookmark_delete.html | 7 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/forms/qa_base.html | 4 | ||||
-rw-r--r-- | ishtar_common/urls.py | 2 | ||||
-rw-r--r-- | ishtar_common/views.py | 40 |
6 files changed, 67 insertions, 9 deletions
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index 9eae1b04d..326a4cb85 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -330,6 +330,7 @@ $(document).on("click", '#to_top_arrow', function(){ }); var bookmark_url = ""; +var bookmark_delete_url = "/bookmark/delete/"; var load_bookmark_list = function(){ if (!bookmark_url) return; @@ -337,9 +338,13 @@ var load_bookmark_list = function(){ var bookmark_list = ""; for (idx in data['bookmarks']){ var bookmark = data['bookmarks'][idx]; - bookmark_list += '<span class="dropdown-item input-link" ' + - 'data-query="' + bookmark['query'].replace(/"/g, "''") + - '" href="#">' + bookmark['label'] + '</span>'; + bookmark_list += '<span class="dropdown-item d-flex">' + + '<a data-query="' + bookmark['query'].replace(/"/g, "''") + + '" href="#" class="flex-grow-1 input-link">' + bookmark['label'] + + '</a>' + + '<a class="close" href="#" data-id="' + bookmark['id'] + '">' + + '<i class="fa fa-times text-danger" aria-hidden="true"></i>' + + '</a></span>'; } $('#bookmark-list').html(bookmark_list); if (!bookmark_list){ @@ -347,11 +352,17 @@ var load_bookmark_list = function(){ } else { $('#load-bookmark').removeClass('disabled'); } - $("#bookmark-list span").click(function(){ + $("#bookmark-list span a.input-link").click(function(){ $("#id_search_vector").val( $(this).attr('data-query').replace(/''/g, '"')); enable_save(); $(".search_button").click(); + return false; + }); + $("#bookmark-list span a.close").click(function(){ + var id = $(this).attr('data-id'); + dt_qa_open(bookmark_delete_url + id + '/'); + return false; }); }, 'json'); } @@ -811,6 +822,7 @@ var dt_qa_open = function (url){ close_wait(); } }); + return false; }; var ajax_post = function(url, data, target, callback){ @@ -835,6 +847,7 @@ var ajax_post = function(url, data, target, callback){ }; var qa_action_register = function(url) { + $('#qa-action').on('submit', function(event){ event.preventDefault(); $('#modal-dynamic-form').modal("hide"); diff --git a/ishtar_common/templates/blocks/DataTables.html b/ishtar_common/templates/blocks/DataTables.html index 7fad1f121..309bb0b09 100644 --- a/ishtar_common/templates/blocks/DataTables.html +++ b/ishtar_common/templates/blocks/DataTables.html @@ -140,8 +140,6 @@ datatable_submit_search = function(){ return false; }; - - jQuery(document).ready(function(){ jQuery("#search_{{name}}").click(datatable_submit_search); diff --git a/ishtar_common/templates/ishtar/forms/bookmark_delete.html b/ishtar_common/templates/ishtar/forms/bookmark_delete.html new file mode 100644 index 000000000..23d7cc172 --- /dev/null +++ b/ishtar_common/templates/ishtar/forms/bookmark_delete.html @@ -0,0 +1,7 @@ +{% extends "ishtar/forms/qa_base.html" %} +{% load i18n inline_formset table_form %} + +{% block main_form %} + <p>{% trans "Are you sure you want to delete: "%} {{item}}</p> +{% endblock %} + diff --git a/ishtar_common/templates/ishtar/forms/qa_base.html b/ishtar_common/templates/ishtar/forms/qa_base.html index ee4c242b7..70fe70e65 100644 --- a/ishtar_common/templates/ishtar/forms/qa_base.html +++ b/ishtar_common/templates/ishtar/forms/qa_base.html @@ -51,8 +51,8 @@ {% block footer %} <button type="submit" id="submit_form" name='validate' value="validate" class="btn btn-success"> - {% if confirm %} - {% trans "Confirm" %} + {% if action_name %} + {{ action_name }} {% else %} {% trans "Modify" %} {% endif %} diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index ee1b3805e..91b527959 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -131,6 +131,8 @@ urlpatterns = [ views.BookmarkList.as_view(), name='bookmark-list'), url(r'^bookmark/(?P<pk>[0-9]+)/$', views.get_bookmark, name='bookmark'), + url(r'^bookmark/delete/(?P<pk>[0-9]+)/$', + views.SearchQueryDelete.as_view(), name='bookmark-delete'), url(r'^alerts/$', views.AlertList.as_view(), name='alert-list'), url(r'^success(?:/(?P<context>[a-z-]+))?/$', TemplateView.as_view(template_name="ishtar/forms/success.html"), diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 9946a9dee..8214f22d7 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1757,10 +1757,47 @@ class BookmarkList(SearchQueryMixin, JSONResponseMixin, LoginRequiredMixin, ) return { 'bookmarks': [ - {'label': sq.label, 'query': sq.query} for sq in q.all()] + {'label': sq.label, 'query': sq.query, + 'id': sq.id} for sq in q.all()] } +class SearchQueryDelete(LoginRequiredMixin, DeleteView): + model = models.SearchQuery + template_name = 'ishtar/forms/bookmark_delete.html' + page_name = _(u"Delete bookmark") + + def dispatch(self, request, *args, **kwargs): + if not request.user.pk: + raise Http404() + try: + self.profile = models.UserProfile.objects.get( + current=True, person__ishtaruser__user_ptr=request.user) + except models.UserProfile.DoesNotExist: + # no current profile + raise Http404() + try: + self.search_query = models.SearchQuery.objects.get( + profile=self.profile, + pk=kwargs['pk'] + ) + except models.SearchQuery.DoesNotExist: + raise Http404() + return super(SearchQueryDelete, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + data = super(SearchQueryDelete, self).get_context_data(**kwargs) + data['modal_size'] = "small" + data['page_name'] = _(u"Bookmark - Delete") + data['action_name'] = _(u"Delete") + data['item'] = self.search_query.label + data['url'] = reverse('bookmark-delete', args=[self.search_query.pk]) + return data + + def get_success_url(self): + return reverse('success', args=['bookmark']) + + class AlertList(JSONResponseMixin, LoginRequiredMixin, TemplateView): def dispatch(self, request, *args, **kwargs): @@ -1873,6 +1910,7 @@ class QAItemEditForm(QAItemForm): if 'confirm' not in self.url: data['url'] = self.url.split('?')[0] + "confirm/" data['confirm'] = True + data['action_name'] = _(u"Confirm") return data def form_valid(self, form): |