kopia lustrzana https://github.com/wagtail/wagtail
Convert the embed chooser modal to use static onload handlers
rodzic
bbffeca771
commit
630a887d58
|
@ -17,7 +17,5 @@ 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/embeds/templates/wagtailembeds/chooser/embed_chosen.js
|
|
||||||
wagtail/embeds/templates/wagtailembeds/chooser/chooser.js
|
|
||||||
wagtail/documents/templates/wagtaildocs/chooser/chooser.js
|
wagtail/documents/templates/wagtaildocs/chooser/chooser.js
|
||||||
wagtail/documents/templates/wagtaildocs/chooser/document_chosen.js
|
wagtail/documents/templates/wagtaildocs/chooser/document_chosen.js
|
||||||
|
|
|
@ -33,7 +33,7 @@ export const getChooserConfig = (entityType, entity, selectedText) => {
|
||||||
return {
|
return {
|
||||||
url: global.chooserUrls.embedsChooser,
|
url: global.chooserUrls.embedsChooser,
|
||||||
urlParams: {},
|
urlParams: {},
|
||||||
onload: {},
|
onload: global.EMBED_CHOOSER_MODAL_ONLOAD_HANDLERS,
|
||||||
};
|
};
|
||||||
|
|
||||||
case ENTITY_TYPE.LINK:
|
case ENTITY_TYPE.LINK:
|
||||||
|
|
|
@ -42,7 +42,7 @@ describe('ModalWorkflowSource', () => {
|
||||||
expect(getChooserConfig({ type: 'EMBED' }, null, '')).toEqual({
|
expect(getChooserConfig({ type: 'EMBED' }, null, '')).toEqual({
|
||||||
url: '/admin/embeds/chooser/',
|
url: '/admin/embeds/chooser/',
|
||||||
urlParams: {},
|
urlParams: {},
|
||||||
onload: {},
|
onload: global.EMBED_CHOOSER_MODAL_ONLOAD_HANDLERS,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ global.chooserUrls = {
|
||||||
/* use dummy content for onload handlers just so that we can verify that we've chosen the right one */
|
/* use dummy content for onload handlers just so that we can verify that we've chosen the right one */
|
||||||
global.IMAGE_CHOOSER_MODAL_ONLOAD_HANDLERS = { type: 'image' };
|
global.IMAGE_CHOOSER_MODAL_ONLOAD_HANDLERS = { type: 'image' };
|
||||||
global.PAGE_CHOOSER_MODAL_ONLOAD_HANDLERS = { type: 'page' };
|
global.PAGE_CHOOSER_MODAL_ONLOAD_HANDLERS = { type: 'page' };
|
||||||
|
global.EMBED_CHOOSER_MODAL_ONLOAD_HANDLERS = { type: 'embed' };
|
||||||
|
|
||||||
const jQueryObj = {
|
const jQueryObj = {
|
||||||
on: jest.fn(),
|
on: jest.fn(),
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
EMBED_CHOOSER_MODAL_ONLOAD_HANDLERS = {
|
||||||
|
'chooser': function(modal, jsonData) {
|
||||||
|
$('form.embed-form', modal.body).on('submit', function() {
|
||||||
|
var formdata = new FormData(this);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: this.action,
|
||||||
|
data: formdata,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
type: 'POST',
|
||||||
|
dataType: 'text',
|
||||||
|
success: modal.loadResponseText
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
'embed_chosen': function(modal, jsonData) {
|
||||||
|
modal.respond('embedChosen', jsonData['embed_html'], jsonData['embed_data']);
|
||||||
|
modal.close();
|
||||||
|
}
|
||||||
|
};
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
return ModalWorkflow({
|
return ModalWorkflow({
|
||||||
url: window.chooserUrls.embedsChooser,
|
url: window.chooserUrls.embedsChooser,
|
||||||
|
onload: global.EMBED_CHOOSER_MODAL_ONLOAD_HANDLERS,
|
||||||
responses: {
|
responses: {
|
||||||
embedChosen: function(embedData) {
|
embedChosen: function(embedData) {
|
||||||
var elem;
|
var elem;
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
function(modal) {
|
|
||||||
$('form.embed-form', modal.body).on('submit', function() {
|
|
||||||
var formdata = new FormData(this);
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: this.action,
|
|
||||||
data: formdata,
|
|
||||||
processData: false,
|
|
||||||
contentType: false,
|
|
||||||
type: 'POST',
|
|
||||||
dataType: 'text',
|
|
||||||
success: modal.loadResponseText
|
|
||||||
});
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
function(modal, jsonData) {
|
|
||||||
modal.respond('embedChosen', jsonData['embed_html'], jsonData['embed_data']);
|
|
||||||
modal.close();
|
|
||||||
}
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import json
|
||||||
import unittest
|
import unittest
|
||||||
import urllib.request
|
import urllib.request
|
||||||
from urllib.error import URLError
|
from urllib.error import URLError
|
||||||
|
@ -172,7 +173,9 @@ class TestChooser(TestCase, WagtailTestUtils):
|
||||||
def test_chooser_with_edit_params(self):
|
def test_chooser_with_edit_params(self):
|
||||||
r = self.client.get('/admin/embeds/chooser/?url=http://example2.com')
|
r = self.client.get('/admin/embeds/chooser/?url=http://example2.com')
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
self.assertContains(r, 'value=\\"http://example2.com\\"')
|
response_json = json.loads(r.content.decode())
|
||||||
|
self.assertEqual(response_json['step'], 'chooser')
|
||||||
|
self.assertIn('value="http://example2.com"', response_json['html'])
|
||||||
|
|
||||||
@patch('wagtail.embeds.embeds.get_embed')
|
@patch('wagtail.embeds.embeds.get_embed')
|
||||||
def test_submit_valid_embed(self, get_embed):
|
def test_submit_valid_embed(self, get_embed):
|
||||||
|
@ -182,8 +185,9 @@ class TestChooser(TestCase, WagtailTestUtils):
|
||||||
'url': 'http://www.example.com/'
|
'url': 'http://www.example.com/'
|
||||||
})
|
})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertContains(response, """modal.respond('embedChosen'""")
|
response_json = json.loads(response.content.decode())
|
||||||
self.assertContains(response, """An example embed""")
|
self.assertEqual(response_json['step'], 'embed_chosen')
|
||||||
|
self.assertEqual(response_json['embed_data']['title'], "An example embed")
|
||||||
|
|
||||||
@patch('wagtail.embeds.embeds.get_embed')
|
@patch('wagtail.embeds.embeds.get_embed')
|
||||||
def test_submit_unrecognised_embed(self, get_embed):
|
def test_submit_unrecognised_embed(self, get_embed):
|
||||||
|
@ -193,8 +197,10 @@ class TestChooser(TestCase, WagtailTestUtils):
|
||||||
'url': 'http://www.example.com/'
|
'url': 'http://www.example.com/'
|
||||||
})
|
})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertNotContains(response, """modal.respond('embedChosen'""")
|
|
||||||
self.assertContains(response, """Cannot find an embed for this URL.""")
|
response_json = json.loads(response.content.decode())
|
||||||
|
self.assertEqual(response_json['step'], 'chooser')
|
||||||
|
self.assertIn("Cannot find an embed for this URL.", response_json['html'])
|
||||||
|
|
||||||
|
|
||||||
class TestEmbedly(TestCase):
|
class TestEmbedly(TestCase):
|
||||||
|
|
|
@ -12,9 +12,11 @@ from wagtail.embeds.forms import EmbedForm
|
||||||
def chooser(request):
|
def chooser(request):
|
||||||
form = EmbedForm(initial=request.GET.dict())
|
form = EmbedForm(initial=request.GET.dict())
|
||||||
|
|
||||||
return render_modal_workflow(request, 'wagtailembeds/chooser/chooser.html', 'wagtailembeds/chooser/chooser.js', {
|
return render_modal_workflow(
|
||||||
'form': form,
|
request, 'wagtailembeds/chooser/chooser.html', None,
|
||||||
})
|
{'form': form},
|
||||||
|
json_data={'step': 'chooser'}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def chooser_upload(request):
|
def chooser_upload(request):
|
||||||
|
@ -35,8 +37,8 @@ def chooser_upload(request):
|
||||||
'title': embed_obj.title,
|
'title': embed_obj.title,
|
||||||
}
|
}
|
||||||
return render_modal_workflow(
|
return render_modal_workflow(
|
||||||
request, None, 'wagtailembeds/chooser/embed_chosen.js',
|
request, None, None,
|
||||||
None, json_data={'embed_html': embed_html, 'embed_data': embed_data}
|
None, json_data={'step': 'embed_chosen', 'embed_html': embed_html, 'embed_data': embed_data}
|
||||||
)
|
)
|
||||||
except AccessDeniedEmbedlyException:
|
except AccessDeniedEmbedlyException:
|
||||||
error = _("There seems to be a problem with your embedly API key. Please check your settings.")
|
error = _("There seems to be a problem with your embedly API key. Please check your settings.")
|
||||||
|
@ -52,16 +54,15 @@ def chooser_upload(request):
|
||||||
errors = form._errors.setdefault('url', ErrorList())
|
errors = form._errors.setdefault('url', ErrorList())
|
||||||
errors.append(error)
|
errors.append(error)
|
||||||
return render_modal_workflow(
|
return render_modal_workflow(
|
||||||
request,
|
request, 'wagtailembeds/chooser/chooser.html', None,
|
||||||
'wagtailembeds/chooser/chooser.html',
|
{'form': form},
|
||||||
'wagtailembeds/chooser/chooser.js',
|
json_data={'step': 'chooser'}
|
||||||
{
|
|
||||||
'form': form,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
form = EmbedForm()
|
form = EmbedForm()
|
||||||
|
|
||||||
return render_modal_workflow(request, 'wagtailembeds/chooser/chooser.html', 'wagtailembeds/chooser/chooser.js', {
|
return render_modal_workflow(
|
||||||
'form': form,
|
request, 'wagtailembeds/chooser/chooser.html', None,
|
||||||
})
|
{'form': form},
|
||||||
|
json_data={'step': 'chooser'}
|
||||||
|
)
|
||||||
|
|
|
@ -40,7 +40,10 @@ def register_embed_feature(features):
|
||||||
'hallo', 'embed',
|
'hallo', 'embed',
|
||||||
HalloPlugin(
|
HalloPlugin(
|
||||||
name='hallowagtailembeds',
|
name='hallowagtailembeds',
|
||||||
js=['wagtailembeds/js/hallo-plugins/hallo-wagtailembeds.js'],
|
js=[
|
||||||
|
'wagtailembeds/js/embed-chooser-modal.js',
|
||||||
|
'wagtailembeds/js/hallo-plugins/hallo-wagtailembeds.js',
|
||||||
|
],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -54,7 +57,7 @@ def register_embed_feature(features):
|
||||||
'type': 'EMBED',
|
'type': 'EMBED',
|
||||||
'icon': 'media',
|
'icon': 'media',
|
||||||
'description': _('Embed'),
|
'description': _('Embed'),
|
||||||
})
|
}, js=['wagtailembeds/js/embed-chooser-modal.js'])
|
||||||
)
|
)
|
||||||
|
|
||||||
# define how to convert between contentstate's representation of embeds and
|
# define how to convert between contentstate's representation of embeds and
|
||||||
|
|
Ładowanie…
Reference in New Issue