Commit 4f107daf authored by Seb's avatar Seb
Browse files

Video chooser changes, got rid of dud files

parent 3471dc23
...@@ -30,9 +30,11 @@ In template ...@@ -30,9 +30,11 @@ In template
How to transcode using ffmpeg How to transcode using ffmpeg
//TODO //TODO
Future features Future features
=============== ===============
- Richtext embed - Richtext embed
- Streamfield block - Streamfield block
- Transcoding via amazon service rather than ffmpeg - Transcoding via amazon service rather than ffmpeg
- Wagtail homescreen video count
...@@ -61,11 +61,6 @@ class VideoTranscodeAdminForm(forms.Form): ...@@ -61,11 +61,6 @@ class VideoTranscodeAdminForm(forms.Form):
self.video.do_transcode(media_format) self.video.do_transcode(media_format)
class VideoInsertionForm(forms.Form):
pass
GroupImagePermissionFormSet = collection_member_permission_formset_factory( GroupImagePermissionFormSet = collection_member_permission_formset_factory(
Video, Video,
[ [
......
function createVideoChooser(id) { function createVideoChooser(id) {
var chooserElement = $('#' + id + '-chooser'); var chooserElement = $('#' + id + '-chooser');
var previewVideo = chooserElement.find('.preview-video img'); var previewVideo = chooserElement.find('.video-thumb img');
var input = $('#' + id); var input = $('#' + id);
var editLink = chooserElement.find('.edit-link'); var editLink = chooserElement.find('.edit-link');
...@@ -9,11 +9,10 @@ function createVideoChooser(id) { ...@@ -9,11 +9,10 @@ function createVideoChooser(id) {
url: window.chooserUrls.videoChooser, url: window.chooserUrls.videoChooser,
responses: { responses: {
videoChosen: function(videoData) { videoChosen: function(videoData) {
debugger;
input.val(videoData.id); input.val(videoData.id);
previewVideo.attr({ previewVideo.attr({
src: videoData.preview.url, src: videoData.preview.url,
width: videoData.preview.width,
height: videoData.preview.height,
alt: videoData.title alt: videoData.title
}); });
chooserElement.removeClass('blank'); chooserElement.removeClass('blank');
......
{% load wagtailimages_tags %} {% load wagtailimages_tags %}
{% load i18n %} {% load i18n %}
{% trans "Choose a video" as choose_str %} {% trans "Choose a video" as choose_str %}
{% include "wagtailadmin/shared/header.html" with title=choose_str merged=1 tabbed=1 icon="image" %} {% include "wagtailadmin/shared/header.html" with title=choose_str merged=1 tabbed=1 icon="media" %}
{% if uploadform %} {% if uploadform %}
<ul class="tab-nav merged"> <ul class="tab-nav merged">
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<div class="tab-content"> <div class="tab-content">
<section id="search" class="{% if not uploadform.errors %}active{% endif %} nice-padding"> <section id="search" class="{% if not uploadform.errors %}active{% endif %} nice-padding">
<form class="image-search search-bar" action="{% url 'wagtailimages:chooser' %}{% if will_select_format %}?select_format=true{% endif %}" method="GET" autocomplete="off"> <form class="video-search search-bar" action="{% url 'wagtailvideos:chooser' %}" method="GET" autocomplete="off">
<ul class="fields"> <ul class="fields">
{% for field in searchform %} {% for field in searchform %}
{% include "wagtailadmin/shared/field_as_li.html" with field=field %} {% include "wagtailadmin/shared/field_as_li.html" with field=field %}
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<li class="taglist"> <li class="taglist">
<h3>{% trans 'Popular tags' %}</h3> <h3>{% trans 'Popular tags' %}</h3>
{% for tag in popular_tags %} {% for tag in popular_tags %}
<a class="suggested-tag tag" href="{% url 'wagtailimages:index' %}?tag={{ tag.name|urlencode }}">{{ tag.name }}</a> <a class="suggested-tag tag" href="{% url 'wagtailvideos:index' %}?tag={{ tag.name|urlencode }}">{{ tag.name }}</a>
{% endfor %} {% endfor %}
</li> </li>
{% endif %} {% endif %}
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</section> </section>
{% if uploadform %} {% if uploadform %}
<section id="upload" class="{% if uploadform.errors %}active{% endif %} nice-padding"> <section id="upload" class="{% if uploadform.errors %}active{% endif %} nice-padding">
<form class="image-upload" action="{% url 'wagtailimages:chooser_upload' %}{% if will_select_format %}?select_format=true{% endif %}" method="POST" enctype="multipart/form-data"> <form class="image-upload" action="{% url 'wagtailvideos:chooser_upload' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
<ul class="fields"> <ul class="fields">
{% for field in uploadform %} {% for field in uploadform %}
......
{% load i18n %} {% load i18n %}
function(modal) { function(modal) {
var searchUrl = $('form.image-search', modal.body).attr('action'); var searchUrl = $('form.video-search', modal.body).attr('action');
/* currentTag stores the tag currently being filtered on, so that we can /* currentTag stores the tag currently being filtered on, so that we can
preserve this when paginating */ preserve this when paginating */
...@@ -82,7 +82,7 @@ function(modal) { ...@@ -82,7 +82,7 @@ function(modal) {
return false; return false;
}); });
$('form.image-search', modal.body).submit(search); $('form.video-search', modal.body).submit(search);
$('#id_q').on('input', function() { $('#id_q').on('input', function() {
clearTimeout($.data(this, 'timer')); clearTimeout($.data(this, 'timer'));
......
{% load wagtailimages_tags %}
{% load i18n %}
{% trans "Choose a format" as choose_str %}
{% include "wagtailadmin/shared/header.html" with title=choose_str %}
<div class="row row-flush nice-padding">
<div class="col6">
{% image image max-800x600 %}
</div>
<div class="col6">
<form action="{% url 'wagtailimages:chooser_select_format' image.id %}" method="POST">
{% csrf_token %}
<ul class="fields">
{% for field in form %}
{% include "wagtailadmin/shared/field_as_li.html" with field=field %}
{% endfor %}
<li><input type="submit" value="{% trans 'Insert image' %}" /></li>
</ul>
</form>
</div>
</div>
function(modal) {
$('form', modal.body).submit(function() {
var formdata = new FormData(this);
$.post(this.action, $(this).serialize(), function(response){
modal.loadResponseText(response);
}, 'text');
return false;
});
}
{% load i18n wagtailadmin_tags %}
<li class="icon icon-image">
<a href="{% url 'wagtailimages:index' %}">
{% blocktrans count counter=total_images with total_images|intcomma as total %}
<span>{{ total }}</span> Image
{% plural %}
<span>{{ total }}</span> Images
{% endblocktrans %}
</a>
</li>
...@@ -9,13 +9,13 @@ ...@@ -9,13 +9,13 @@
<div class="row row-flush nice-padding"> <div class="row row-flush nice-padding">
<div class="col6"> <div class="col6">
{% video video controls %} {% video video controls style=max-width:100% %}
</div> </div>
<div class="col6"> <div class="col6">
<p>{% trans "Are you sure you want to delete this video?" %}</p> <p>{% trans "Are you sure you want to delete this video?" %}</p>
<form action="{% url 'wagtailvideos:delete' video.id %}" method="POST"> <form action="{% url 'wagtailvideos:delete' video.id %}" method="POST">
{% csrf_token %} {% csrf_token %}
<input type="submit" value="{% trans 'Yes, delete' %}" class="serious" /> <input type="submit" class='button serious' value="{% trans 'Yes, delete' %}" />
</form> </form>
</div> </div>
</div> </div>
......
...@@ -65,11 +65,7 @@ ...@@ -65,11 +65,7 @@
<form action="{% url 'wagtailvideos:create_transcode' video.id %}" method="POST"> <form action="{% url 'wagtailvideos:create_transcode' video.id %}" method="POST">
<ul class="fields"> <ul class="fields">
{% csrf_token %} {% csrf_token %}
<li> {% include "wagtailadmin/shared/field_as_li.html" with field=transcode_form.media_format %}
<div class='input'>
{{ transcode_form.media_format }}
</div>
</li>
<li> <li>
<input class="button" type='submit' value="Start" /> <input class="button" type='submit' value="Start" />
</li> </li>
......
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
{% for video in videos %} {% for video in videos %}
<li> <li>
<a class="image-choice" href="{% url 'wagtailvideos:edit' video.id %}"> <a class="image-choice" href="{% url 'wagtailvideos:edit' video.id %}">
{% include "wagtailvideos/videos/results_image.html" %} <div class="image">
<img src='{{video.thumbnail.url}}' height=165 width=165 class="show-transparency" /></img>
</div>
<h3>{{ video.title|ellipsistrim:60 }}</h3> <h3>{{ video.title|ellipsistrim:60 }}</h3>
</a> </a>
</li> </li>
......
{% comment %}
Separated out of results.html to prevent invalid images from crashing the entire
images listing. (issue #1805)
If an error is raised inside a template include, the error is caught by the
calling {% include %} tag and the contents blanked out.
This behaviour caused a confusing error on the images listing view where it
would go blank if one of the images was invalid.
Separating the image rendering code into this file allows us to limit Django's
crash/blanking behaviour to a single image so the listing can still be used when
the issue occurs.
{% endcomment %}
<div class="image"><img src='{{video.thumbnail.url}}' height=165 width=165 class="show-transparency" /></img></div>
{% extends "wagtailadmin/base.html" %}
{% load wagtailimages_tags staticfiles i18n %}
{% block titletag %}{% blocktrans with title=image.title %}Editing image {{ title }}{% endblocktrans %}{% endblock %}
{% block content %}
{% trans "Generating URL" as title_str %}
{% include "wagtailadmin/shared/header.html" with title=title_str subtitle=image.title icon="image" %}
<div class="image-url-generator nice-padding" data-generator-url="{% url 'wagtailimages:generate_url' image.id '__filterspec__' %}">
<form>
<ul class="fields">
{% include "wagtailadmin/shared/field_as_li.html" with field=form.filter_method %}
<li>
<ul class="field-row">
{% include "wagtailadmin/shared/field_as_li.html" with field=form.width li_classes="field-col col4" %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.height li_classes="field-col col4" %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.closeness li_classes="field-col col4" %}
</ul>
</li>
</ul>
</form>
<h2 class="icon icon-link">{% trans "URL" %}</h2>
<textarea id="result-url" rows="1"></textarea>
<h2 class="icon icon-view">{% trans "Preview" %}</h2>
<div>
<div class="loading-mask inline-block">
<img class="preview" src="" alt="Preview" />
</div>
</div>
<p id="note-size" class="help-block help-warning">{% trans "Note that images generated larger than the screen will appear smaller when previewed here, so they fit the screen." %}</p>
</div>
{% endblock %}
{% block extra_js %}
{{ block.super }}
<script src="{% static 'wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js' %}"></script>
<script src="{% static 'wagtailimages/js/image-url-generator.js' %}"></script>
{% endblock %}
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
{% block chooser_class %}image-chooser{% endblock %} {% block chooser_class %}image-chooser{% endblock %}
{% block chosen_state_view %} {% block chosen_state_view %}
<div class="preview-image"> <div class="video-thumb">
{% if video %} {% if video %}
<img src='{{video.thumbnail.url}}' width="165" height="165" class="show-transparency"> <img src='{{video.thumbnail.url}}' width="165" height="165" class="show-transparency">
{% else %} {% else %}
<img> <img width="165" height="165" class="show-transparency">
{% endif %} {% endif %}
</div> </div>
{% endblock %} {% endblock %}
......
...@@ -18,5 +18,4 @@ urlpatterns = [ ...@@ -18,5 +18,4 @@ urlpatterns = [
url(r'^chooser/$', chooser.chooser, name='chooser'), url(r'^chooser/$', chooser.chooser, name='chooser'),
url(r'^chooser/(\d+)/$', chooser.video_chosen, name='video_chosen'), url(r'^chooser/(\d+)/$', chooser.video_chosen, name='video_chosen'),
url(r'^chooser/upload/$', chooser.chooser_upload, name='chooser_upload'), url(r'^chooser/upload/$', chooser.chooser_upload, name='chooser_upload'),
url(r'^chooser/(\d+)/select_format/$', chooser.chooser_select_format, name='chooser_select_format'),
] ]
...@@ -8,7 +8,7 @@ from wagtail.wagtailadmin.modal_workflow import render_modal_workflow ...@@ -8,7 +8,7 @@ from wagtail.wagtailadmin.modal_workflow import render_modal_workflow
from wagtail.wagtailcore.models import Collection from wagtail.wagtailcore.models import Collection
from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtailsearch.backends import get_search_backends
from wagtailvideos.forms import VideoInsertionForm, get_video_form from wagtailvideos.forms import get_video_form
from wagtailvideos.models import Video from wagtailvideos.models import Video
...@@ -65,7 +65,6 @@ def chooser(request): ...@@ -65,7 +65,6 @@ def chooser(request):
'videos': videos, 'videos': videos,
'is_searching': is_searching, 'is_searching': is_searching,
'query_string': q, 'query_string': q,
'will_select_format': request.GET.get('select_format')
}) })
else: else:
searchform = SearchForm() searchform = SearchForm()
...@@ -82,7 +81,6 @@ def chooser(request): ...@@ -82,7 +81,6 @@ def chooser(request):
'searchform': searchform, 'searchform': searchform,
'is_searching': False, 'is_searching': False,
'query_string': q, 'query_string': q,
'will_select_format': request.GET.get('select_format'),
'popular_tags': Video.popular_tags(), 'popular_tags': Video.popular_tags(),
'collections': collections, 'collections': collections,
}) })
...@@ -107,22 +105,19 @@ def chooser_upload(request): ...@@ -107,22 +105,19 @@ def chooser_upload(request):
form = VideoForm(request.POST, request.FILES, instance=video) form = VideoForm(request.POST, request.FILES, instance=video)
if form.is_valid(): if form.is_valid():
form.save() video.uploaded_by_user = request.user
video.file_size = video.file.size
video.save()
# Double save because the video file needs to *really* exists to generate thumbnail
video.thumbnail = video.get_thumbnail()
video.save(update_fields=['thumbnail'])
# Reindex the video to make sure all tags are indexed # Reindex the video to make sure all tags are indexed
for backend in get_search_backends(): for backend in get_search_backends():
backend.add(video) backend.add(video)
if request.GET.get('select_format'): print("RETURN!!!!")
form = VideoInsertionForm(initial={'alt_text': video.default_alt_text})
return render_modal_workflow(
request, 'wagtailvideos/chooser/select_format.html', 'wagtailvideos/chooser/select_format.js',
{'video': video, 'form': form}
)
else:
# not specifying a format; return the video details now
return render_modal_workflow( return render_modal_workflow(
request, None, 'wagtailvideos/chooser/videos_chosen.js', request, None, 'wagtailvideos/chooser/video_chosen.js',
{'video_json': get_video_json(video)} {'video_json': get_video_json(video)}
) )
else: else:
...@@ -134,38 +129,3 @@ def chooser_upload(request): ...@@ -134,38 +129,3 @@ def chooser_upload(request):
request, 'wagtailvideos/chooser/chooser.html', 'wagtailvideos/chooser/chooser.js', request, 'wagtailvideos/chooser/chooser.html', 'wagtailvideos/chooser/chooser.js',
{'videos': videos, 'uploadform': form, 'searchform': searchform} {'videos': videos, 'uploadform': form, 'searchform': searchform}
) )
def chooser_select_format(request, video_id):
video = get_object_or_404(Video, id=video_id)
if request.POST:
form = VideoInsertionForm(request.POST, initial={'alt_text': video.default_alt_text})
if form.is_valid():
preview_video = video.get_rendition(format.filter_spec)
video_json = json.dumps({
'id': image.id,
'title': image.title,
'class': format.classnames,
'edit_link': reverse('wagtailvideos:edit', args=(video.id,)),
'preview': {
'url': preview_image.url,
'width': preview_image.width,
'height': preview_image.height,
},
'html': format.image_to_editor_html(image, form.cleaned_data['alt_text']),
})
return render_modal_workflow(
request, None, 'wagtailimages/chooser/image_chosen.js',
{'image_json': image_json}
)
else:
form = ImageInsertionForm(initial={'alt_text': image.default_alt_text})
return render_modal_workflow(
request, 'wagtailimages/chooser/select_format.html', 'wagtailimages/chooser/select_format.js',
{'image': image, 'form': form}
)
...@@ -133,6 +133,7 @@ def create_transcode(request, video_id): ...@@ -133,6 +133,7 @@ def create_transcode(request, video_id):
transcode_form.save() transcode_form.save()
return redirect('wagtailvideos:edit', video_id) return redirect('wagtailvideos:edit', video_id)
@permission_checker.require('delete') @permission_checker.require('delete')
def delete(request, video_id): def delete(request, video_id):
video = get_object_or_404(Video, id=video_id) video = get_object_or_404(Video, id=video_id)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment