var PODLOVE = PODLOVE || {};
/**
* Handles all logic in Create/Edit Episode screen.
*/
(function($){
PODLOVE.Episode = function (container) {
var o = {};
var ajax_requests = [];
// private
function enable_all_media_files_by_default() {
if (o.slug_field.val().length === 0) {
o.slug_field.on('slugHasChanged', function() {
if (o.slug_field.val().length > 0) {
// by default, tick all
$container.find('input[type="checkbox"][name*="episode_assets"]')
.attr("checked", true)
.change();
}
});
}
}
function maybe_update_media_files() {
var current_slug = o.slug_field.val(),
prev_slug = o.slug_field.data('prev-slug');
if (current_slug !== prev_slug) {
// then trigger new requests
update_all_media_files();
}
o.slug_field.data('prev-slug', current_slug);
};
function generate_live_preview() {
o.update_preview();
$('input[name*="episode_assets"]', container).on('change', function(){
o.update_preview_row($(this).closest(".media_file_row"));
});
};
function create_file(args) {
var data = {
action: 'podlove-file-create',
episode_id: args.episode_id,
episode_asset_id: args.episode_asset_id,
slug: $("#_podlove_meta_slug").val()
};
$.ajax({
url: ajaxurl,
data: data,
dataType: 'json',
success: function(result) {
args.checkbox.data({
id: result.file_id,
size: result.file_size,
'fileUrl': result.file_url
});
o.update_preview_row(args.container_row);
}
});
};
function maybe_update_episode_slug(title) {
if (o.slug_field.data("auto-update")) {
update_episode_slug(title);
}
};
// current ajax object to ensure only the latest one is active
var update_episode_slug_xhr;
function update_episode_slug(title) {
if (update_episode_slug_xhr)
update_episode_slug_xhr.abort();
update_episode_slug_xhr = $.ajax({
url: ajaxurl,
data: {
action: 'podlove-episode-slug',
title: title,
},
context: o.slug_field
}).done(function(slug) {
$(this)
.val(slug)
.blur();
});
};
o.update_preview_row = function(container) {
$container = container.closest('.inside');
$checkbox = container.find("input");
if ($($checkbox).is(":checked")) {
var file_id = $checkbox.data('id');
if (!file_id) {
// create file
create_file({
episode_id: $checkbox.data('episode-id'),
episode_asset_id: $checkbox.data('episode-asset-id'),
checkbox: $checkbox,
container_row: container
});
} else {
var url = $checkbox.data('fileUrl');
var media_file_base_uri = PODLOVE.trailingslashit($container.find('input[name="show-media-file-base-uri"]').val());
var size = $checkbox.data('size');
var size_bytes_human = $checkbox.data('size-bytes-human');
var readable_size = human_readable_size( size );
var filename = url.replace(media_file_base_uri, "");
var $row = $checkbox.closest(".media_file_row");
var isNumber = function (obj) { return !isNaN(parseFloat(obj)) };
if (readable_size === "???") {
size_html = 'File not found!';
$row.find(".status").html('');
} else {
if (isNumber(size)) {
size_html = '' + (size_bytes_human ? size_bytes_human : size) + ' Bytes';
} else {
size_html = '' + size + '';
}
$row.find(".status").html('');
}
$row.find(".size").html(size_html);
$row.find(".url").html('' + filename + '');
$row.find(".update").html('verify');
o.slug_field.trigger('mediaFileHasUpdated', [url]);
}
} else {
$checkbox.data('id', null);
$checkbox.closest(".media_file_row").find(".size, .url, .update, .status").html('');
}
};
o.update_preview = function() {
$(".media_file_row", o.container).each(function() {
o.update_preview_row($(this));
});
}
o.slug_field = container.find("[name*=slug]");
enable_all_media_files_by_default();
generate_live_preview();
$("#_podlove_meta_subtitle").count_characters( { limit: 255, title: 'recommended maximum length: 255' } );
$("#_podlove_meta_summary").count_characters( { limit: 4000, title: 'recommended maximum length: 4000' } );
$(document).on("click", ".subtitle_warning .close", function() {
$(this).closest(".subtitle_warning").remove();
});
$("#_podlove_meta_subtitle").keydown(function(e) {
// forbid return key
if (e.keyCode == 13) {
e.preventDefault();
if (!$(".subtitle_warning").length) {
$(this).after('The subtitle has to be a single line. (hide)');
}
return false;
}
});
$(".media_file_row").each(function() {
$(".enable", this).html($(".asset input", this));
});
var update_all_media_files = function(e) {
if (e) {
e.preventDefault();
}
// abort all current requests if any are running
$.each(
ajax_requests,
function(index, request) {
if (request) {
request.abort();
}
}
);
$(".update_media_file").click();
};
$.subscribe("/auphonic/production/status/done", update_all_media_files);
$.subscribe("/auphonic/production/status/results_imported", update_all_media_files);
$(document).on("click", "#update_all_media_files", update_all_media_files);
$(document).on("click", ".update_media_file", function(e) {
e.preventDefault();
var container = $(this).closest(".media_file_row");
var file = container.find("input").data();
var data = {
action: 'podlove-file-update',
file_id: file.id,
slug: $("#_podlove_meta_slug").val()
};
container.find('.update').html('');
container.find(".size, .url, .status").html('');
var request = $.ajax({
url: ajaxurl,
data: data,
dataType: 'json',
success: function(result) {
var input = container.find("input");
if (result && result.file_size > 0 && result.reachable) {
if (result.file_size === 1) {
input.data('size' , 'unknown');
} else {
input.data('size' , result.file_size);
input.data('size-bytes-human' , result.file_size_human);
}
} else {
input.data('size', -1);
}
input.data('fileUrl', result.file_url);
},
error: function(xhr, status, error) {
var input = container.find("input");
input.data('size' , -1);
input.data('fileUrl', "");
},
complete: function(xhr, status) {
ajax_requests.pop();
o.update_preview_row(container);
// after revalidating, auto-detect duration
if (ajax_requests.length === 0) {
window.setTimeout(() => {
document.querySelector("#podlove_detect_duration").click();
}, 250);
}
}
});
ajax_requests.push(request);
return false;
});
o.slug_field
.on('slugHasChanged', function() {
maybe_update_media_files();
})
.data("auto-update", !Boolean(o.slug_field.val())) // only auto-update if it is empty
.on("keyup", function() {
o.slug_field.data("auto-update", false); // stop autoupdate on manual change
})
;
$(document).ready(function() {
// check all media files on page load
// wait a while because it shouldn't slow down loading the rest of the page
if (o.slug_field.val().length > 0) {
setTimeout(function() { update_all_media_files(); }, 2000);
}
});
var typewatch = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
}
})();
$.subscribe("/auphonic/production/status/results_imported", function(e, production) {
o.slug_field.trigger('slugHasChanged').data("auto-update", false);
});
var title_input = $("#titlewrap input");
title_input
.on('blur', function() {
title_input.trigger('titleHasChanged');
})
.on('keyup', function() {
typewatch(
function() {
title_input.trigger('titleHasChanged');
},
500
);
})
.on('titleHasChanged', function () {
var title = $(this).val();
// update episode title
$("#_podlove_meta_title").attr("placeholder", title);
// maybe update episode slug
maybe_update_episode_slug(title);
}).trigger('titleHasChanged');
o.slug_field
.on('blur', function() {
o.slug_field.trigger('slugHasChanged');
})
.on('keyup', function() {
typewatch(
function() {
o.slug_field.trigger('slugHasChanged');
},
500
);
});
return o;
}
}(jQuery));