kopia lustrzana https://github.com/wagtail/wagtail
				
				
				
			Convert the search query chooser to use static onload handlers
							rodzic
							
								
									074d9ce3f4
								
							
						
					
					
						commit
						8ea95c5841
					
				| 
						 | 
					@ -11,12 +11,12 @@ wagtail/admin/static
 | 
				
			||||||
wagtail/documents/static
 | 
					wagtail/documents/static
 | 
				
			||||||
wagtail/images/static
 | 
					wagtail/images/static
 | 
				
			||||||
wagtail/embeds/static
 | 
					wagtail/embeds/static
 | 
				
			||||||
 | 
					wagtail/search/static
 | 
				
			||||||
wagtail/snippets/static
 | 
					wagtail/snippets/static
 | 
				
			||||||
wagtail/users/static
 | 
					wagtail/users/static
 | 
				
			||||||
wagtail/admin/templates/wagtailadmin/edit_handlers/inline_panel.js
 | 
					wagtail/admin/templates/wagtailadmin/edit_handlers/inline_panel.js
 | 
				
			||||||
wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/includes/searchpromotions_formset.js
 | 
					wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/includes/searchpromotions_formset.js
 | 
				
			||||||
wagtail/users/templates/wagtailusers/groups/includes/page_permissions_formset.js
 | 
					wagtail/users/templates/wagtailusers/groups/includes/page_permissions_formset.js
 | 
				
			||||||
wagtail/search/templates/wagtailsearch/queries/chooser/chooser.js
 | 
					 | 
				
			||||||
wagtail/embeds/templates/wagtailembeds/chooser/embed_chosen.js
 | 
					wagtail/embeds/templates/wagtailembeds/chooser/embed_chosen.js
 | 
				
			||||||
wagtail/embeds/templates/wagtailembeds/chooser/chooser.js
 | 
					wagtail/embeds/templates/wagtailembeds/chooser/chooser.js
 | 
				
			||||||
wagtail/documents/templates/wagtaildocs/chooser/chooser.js
 | 
					wagtail/documents/templates/wagtaildocs/chooser/chooser.js
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ var apps = [
 | 
				
			||||||
    new App('wagtail/documents', {'appName': 'wagtaildocs'}),
 | 
					    new App('wagtail/documents', {'appName': 'wagtaildocs'}),
 | 
				
			||||||
    new App('wagtail/embeds', {'appName': 'wagtailembeds'}),
 | 
					    new App('wagtail/embeds', {'appName': 'wagtailembeds'}),
 | 
				
			||||||
    new App('wagtail/images', {'appName': 'wagtailimages'}),
 | 
					    new App('wagtail/images', {'appName': 'wagtailimages'}),
 | 
				
			||||||
 | 
					    new App('wagtail/search', {'appName': 'wagtailsearch'}),
 | 
				
			||||||
    new App('wagtail/snippets', {'appName': 'wagtailsnippets'}),
 | 
					    new App('wagtail/snippets', {'appName': 'wagtailsnippets'}),
 | 
				
			||||||
    new App('wagtail/users', {'appName': 'wagtailusers'}),
 | 
					    new App('wagtail/users', {'appName': 'wagtailusers'}),
 | 
				
			||||||
    new App('wagtail/contrib/styleguide', {'appName': 'wagtailstyleguide'}),
 | 
					    new App('wagtail/contrib/styleguide', {'appName': 'wagtailstyleguide'}),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
{% extends "wagtailadmin/base.html" %}
 | 
					{% extends "wagtailadmin/base.html" %}
 | 
				
			||||||
{% load i18n %}
 | 
					{% load i18n staticfiles %}
 | 
				
			||||||
{% block titletag %}{% trans "Add search promotion" %}{% endblock %}
 | 
					{% block titletag %}{% trans "Add search promotion" %}{% endblock %}
 | 
				
			||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
    {% trans "Add search pick" as add_str %}
 | 
					    {% trans "Add search pick" as add_str %}
 | 
				
			||||||
| 
						 | 
					@ -39,6 +39,7 @@
 | 
				
			||||||
{% block extra_js %}
 | 
					{% block extra_js %}
 | 
				
			||||||
    {{ block.super }}
 | 
					    {{ block.super }}
 | 
				
			||||||
    {% include "wagtailadmin/pages/_editor_js.html" %}
 | 
					    {% include "wagtailadmin/pages/_editor_js.html" %}
 | 
				
			||||||
 | 
					    <script src="{% static 'wagtailsearch/js/query-chooser-modal.js' %}"></script>
 | 
				
			||||||
    {{ form_media.js }}
 | 
					    {{ form_media.js }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script type="text/javascript">
 | 
					    <script type="text/javascript">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
{% extends "wagtailadmin/base.html" %}
 | 
					{% extends "wagtailadmin/base.html" %}
 | 
				
			||||||
{% load i18n %}
 | 
					{% load i18n staticfiles %}
 | 
				
			||||||
{% block titletag %}{% blocktrans with query=query.query_string %}Editing {{ query }}{% endblocktrans %}{% endblock %}
 | 
					{% block titletag %}{% blocktrans with query=query.query_string %}Editing {{ query }}{% endblocktrans %}{% endblock %}
 | 
				
			||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
    {% trans "Editing" as editing_str %}
 | 
					    {% trans "Editing" as editing_str %}
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@
 | 
				
			||||||
{% block extra_js %}
 | 
					{% block extra_js %}
 | 
				
			||||||
    {{ block.super }}
 | 
					    {{ block.super }}
 | 
				
			||||||
    {% include "wagtailadmin/pages/_editor_js.html" %}
 | 
					    {% include "wagtailadmin/pages/_editor_js.html" %}
 | 
				
			||||||
 | 
					    <script src="{% static 'wagtailsearch/js/query-chooser-modal.js' %}"></script>
 | 
				
			||||||
    {{ form_media.js }}
 | 
					    {{ form_media.js }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script type="text/javascript">
 | 
					    <script type="text/javascript">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					static
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					QUERY_CHOOSER_MODAL_ONLOAD_HANDLERS = {
 | 
				
			||||||
 | 
					    'chooser': function(modal, jsonData) {
 | 
				
			||||||
 | 
					        function ajaxifyLinks (context) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $('.listing a.choose-query', context).on('click', chooseQuery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $('.pagination a', context).on('click', function() {
 | 
				
			||||||
 | 
					                var page = this.getAttribute("data-page");
 | 
				
			||||||
 | 
					                setPage(page);
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var searchUrl = $('form.query-search', modal.body).attr('action');
 | 
				
			||||||
 | 
					        function search() {
 | 
				
			||||||
 | 
					            $.ajax({
 | 
				
			||||||
 | 
					                url: searchUrl,
 | 
				
			||||||
 | 
					                data: {q: $('#id_q').val()},
 | 
				
			||||||
 | 
					                success: function(data, status) {
 | 
				
			||||||
 | 
					                    $('#query-results').html(data);
 | 
				
			||||||
 | 
					                    ajaxifyLinks($('#query-results'));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        function setPage(page) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if($('#id_q').val().length){
 | 
				
			||||||
 | 
					                dataObj = {q: $('#id_q').val(), p: page};
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                dataObj = {p: page};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $.ajax({
 | 
				
			||||||
 | 
					                url: searchUrl,
 | 
				
			||||||
 | 
					                data: dataObj,
 | 
				
			||||||
 | 
					                success: function(data, status) {
 | 
				
			||||||
 | 
					                    $('#query-results').html(data);
 | 
				
			||||||
 | 
					                    ajaxifyLinks($('#query-results'));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        function chooseQuery() {
 | 
				
			||||||
 | 
					            modal.respond('queryChosen', $(this).data());
 | 
				
			||||||
 | 
					            modal.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ajaxifyLinks(modal.body);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $('form.query-search', modal.body).on('submit', search);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $('#id_q').on('input', function() {
 | 
				
			||||||
 | 
					            clearTimeout($.data(this, 'timer'));
 | 
				
			||||||
 | 
					            var wait = setTimeout(search, 200);
 | 
				
			||||||
 | 
					            $(this).data('timer', wait);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -1,59 +0,0 @@
 | 
				
			||||||
function(modal) {
 | 
					 | 
				
			||||||
    function ajaxifyLinks (context) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $('.listing a.choose-query', context).on('click', chooseQuery);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $('.pagination a', context).on('click', function() {
 | 
					 | 
				
			||||||
            var page = this.getAttribute("data-page");
 | 
					 | 
				
			||||||
            setPage(page);
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var searchUrl = $('form.query-search', modal.body).attr('action');
 | 
					 | 
				
			||||||
    function search() {
 | 
					 | 
				
			||||||
        $.ajax({
 | 
					 | 
				
			||||||
            url: searchUrl,
 | 
					 | 
				
			||||||
            data: {q: $('#id_q').val()},
 | 
					 | 
				
			||||||
            success: function(data, status) {
 | 
					 | 
				
			||||||
                $('#query-results').html(data);
 | 
					 | 
				
			||||||
                ajaxifyLinks($('#query-results'));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    function setPage(page) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if($('#id_q').val().length){
 | 
					 | 
				
			||||||
            dataObj = {q: $('#id_q').val(), p: page};
 | 
					 | 
				
			||||||
        }else{
 | 
					 | 
				
			||||||
            dataObj = {p: page};
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $.ajax({
 | 
					 | 
				
			||||||
            url: searchUrl,
 | 
					 | 
				
			||||||
            data: dataObj,
 | 
					 | 
				
			||||||
            success: function(data, status) {
 | 
					 | 
				
			||||||
                $('#query-results').html(data);
 | 
					 | 
				
			||||||
                ajaxifyLinks($('#query-results'));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    function chooseQuery() {
 | 
					 | 
				
			||||||
        modal.respond('queryChosen', $(this).data());
 | 
					 | 
				
			||||||
        modal.close();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ajaxifyLinks(modal.body);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $('form.query-search', modal.body).on('submit', search);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $('#id_q').on('input', function() {
 | 
					 | 
				
			||||||
        clearTimeout($.data(this, 'timer'));
 | 
					 | 
				
			||||||
        var wait = setTimeout(search, 200);
 | 
					 | 
				
			||||||
        $(this).data('timer', wait);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ function createQueryChooser(id) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ModalWorkflow({
 | 
					        ModalWorkflow({
 | 
				
			||||||
            url: initialUrl,
 | 
					            url: initialUrl,
 | 
				
			||||||
 | 
					            onload: QUERY_CHOOSER_MODAL_ONLOAD_HANDLERS,
 | 
				
			||||||
            responses: {
 | 
					            responses: {
 | 
				
			||||||
                queryChosen: function(queryData) {
 | 
					                queryChosen: function(queryData) {
 | 
				
			||||||
                    input.val(queryData.querystring);
 | 
					                    input.val(queryData.querystring);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
from io import StringIO
 | 
					from io import StringIO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.core import management
 | 
					from django.core import management
 | 
				
			||||||
| 
						 | 
					@ -163,7 +164,8 @@ class TestQueryChooserView(TestCase, WagtailTestUtils):
 | 
				
			||||||
        response = self.get()
 | 
					        response = self.get()
 | 
				
			||||||
        self.assertEqual(response.status_code, 200)
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
        self.assertTemplateUsed(response, 'wagtailsearch/queries/chooser/chooser.html')
 | 
					        self.assertTemplateUsed(response, 'wagtailsearch/queries/chooser/chooser.html')
 | 
				
			||||||
        self.assertTemplateUsed(response, 'wagtailsearch/queries/chooser/chooser.js')
 | 
					        response_json = json.loads(response.content.decode())
 | 
				
			||||||
 | 
					        self.assertEqual(response_json['step'], 'chooser')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_search(self):
 | 
					    def test_search(self):
 | 
				
			||||||
        response = self.get({'q': "Hello"})
 | 
					        response = self.get({'q': "Hello"})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,10 +30,10 @@ def chooser(request, get_results=False):
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return render_modal_workflow(
 | 
					        return render_modal_workflow(
 | 
				
			||||||
            request, 'wagtailsearch/queries/chooser/chooser.html', 'wagtailsearch/queries/chooser/chooser.js', {
 | 
					            request, 'wagtailsearch/queries/chooser/chooser.html', None, {
 | 
				
			||||||
                'queries': queries,
 | 
					                'queries': queries,
 | 
				
			||||||
                'searchform': searchform,
 | 
					                'searchform': searchform,
 | 
				
			||||||
            }
 | 
					            }, json_data={'step': 'chooser'}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Ładowanie…
	
		Reference in New Issue