123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- IMAGE_CHOOSER_MODAL_ONLOAD_HANDLERS = {
- 'chooser': function(modal, jsonData) {
- var searchUrl = $('form.image-search', modal.body).attr('action');
- /* currentTag stores the tag currently being filtered on, so that we can
- preserve this when paginating */
- var currentTag;
- function ajaxifyLinks (context) {
- $('.listing a', context).on('click', function() {
- modal.loadUrl(this.href);
- return false;
- });
- $('.pagination a', context).on('click', function() {
- var page = this.getAttribute("data-page");
- setPage(page);
- return false;
- });
- }
- function fetchResults(requestData) {
- $.ajax({
- url: searchUrl,
- data: requestData,
- success: function(data, status) {
- $('#image-results').html(data);
- ajaxifyLinks($('#image-results'));
- }
- });
- }
- function search() {
- /* Searching causes currentTag to be cleared - otherwise there's
- no way to de-select a tag */
- currentTag = null;
- fetchResults({
- q: $('#id_q').val(),
- collection_id: $('#collection_chooser_collection_id').val()
- });
- return false;
- }
- function setPage(page) {
- params = {p: page};
- if ($('#id_q').val().length){
- params['q'] = $('#id_q').val();
- }
- if (currentTag) {
- params['tag'] = currentTag;
- }
- params['collection_id'] = $('#collection_chooser_collection_id').val();
- fetchResults(params);
- return false;
- }
- ajaxifyLinks(modal.body);
- $('form.image-upload', modal.body).on('submit', function() {
- var formdata = new FormData(this);
- if ($('#id_title', modal.body).val() == '') {
- var li = $('#id_title', modal.body).closest('li');
- if (!li.hasClass('error')) {
- li.addClass('error');
- $('#id_title', modal.body).closest('.field-content').append('<p class="error-message"><span>This field is required.</span></p>')
- }
- setTimeout(cancelSpinner, 500);
- } else {
- $.ajax({
- url: this.action,
- data: formdata,
- processData: false,
- contentType: false,
- type: 'POST',
- dataType: 'text',
- success: function(response){
- modal.loadResponseText(response);
- },
- error: function(response, textStatus, errorThrown) {
- message = jsonData['error_message'] + '<br />' + errorThrown + ' - ' + response.status;
- $('#upload').append(
- '<div class="help-block help-critical">' +
- '<strong>' + jsonData['error_label'] + ': </strong>' + message + '</div>');
- }
- });
- }
- return false;
- });
- $('form.image-search', modal.body).on('submit', search);
- $('#id_q').on('input', function() {
- clearTimeout($.data(this, 'timer'));
- var wait = setTimeout(search, 200);
- $(this).data('timer', wait);
- });
- $('#collection_chooser_collection_id').on('change', search);
- $('a.suggested-tag').on('click', function() {
- currentTag = $(this).text();
- $('#id_q').val('');
- fetchResults({
- 'tag': currentTag,
- collection_id: $('#collection_chooser_collection_id').val()
- });
- return false;
- });
- function populateTitle(context) {
- // Note: There are two inputs with `#id_title` on the page.
- // The page title and image title. Select the input inside the modal body.
- var fileWidget = $('#id_file', context);
- fileWidget.on('change', function () {
- var titleWidget = $('#id_title', context);
- var title = titleWidget.val();
- if (title === '') {
- // The file widget value example: `C:\fakepath\image.jpg`
- var parts = fileWidget.val().split('\\');
- var fileName = parts[parts.length - 1];
- titleWidget.val(fileName);
- }
- });
- }
- populateTitle(modal.body);
- /* Add tag entry interface (with autocompletion) to the tag field of the image upload form */
- $('#id_tags', modal.body).tagit({
- autocomplete: {source: jsonData['tag_autocomplete_url']}
- });
- },
- 'image_chosen': function(modal, jsonData) {
- modal.respond('imageChosen', jsonData['result']);
- modal.close();
- },
- 'select_format': function(modal) {
- $('form', modal.body).on('submit', function() {
- var formdata = new FormData(this);
- $.post(this.action, $(this).serialize(), function(response){
- modal.loadResponseText(response);
- }, 'text');
- return false;
- });
- }
- };
|