Files
Phraseanet/resources/www/prod/js/components/publication.js
2016-02-17 11:22:28 +01:00

361 lines
10 KiB
JavaScript

var publicationModule = (function () {
var ajaxState = {
query: null,
isRunning: false
};
var curPage;
var $answers = $('#answers');
// refresh current view
$answers.on('click', '.feed_reload', function (event) {
event.preventDefault();
fetchPublications(curPage)
});
// navigate to a specific feed
$answers.on('click', '.ajax_answers', function (event) {
event.preventDefault();
var $this = $(this);
var append = $this.hasClass('append');
var noScroll = $this.hasClass('no_scroll');
_fetchRemote($(event.currentTarget).attr('href'), {})
.then(function (data) {
if (!append) {
$answers.empty();
if (!noScroll) {
$answers.scrollTop(0);
}
$answers.append(data);
$answers.find("img.lazyload").lazyload({
container: $answers
});
}
else {
$('.see_more.loading', $answers).remove();
$answers.append(data);
$answers.find("img.lazyload").lazyload({
container: $answers
});
if (!noScroll) {
$answers.animate({
'scrollTop': ($answers.scrollTop() + $answers.innerHeight() - 80)
});
}
}
afterSearch();
});
});
// subscribe_rss
$answers.on('click', '.subscribe_rss', function (event) {
event.preventDefault();
var $this = $(this);
if (typeof(renew) === 'undefined')
renew = 'false';
else
renew = renew ? 'true' : 'false';
var buttons = {};
buttons[language.renewRss] = function () {
$this.trigger({
type: 'click',
renew: true
});
};
buttons[language.fermer] = function () {
$('#DIALOG').empty().dialog('destroy');
};
event.stopPropagation();
$.ajax({
type: "GET",
url: $this.attr('href') + (event.renew === true ? '?renew=true' : ''),
dataType: 'json',
success: function (data) {
if (data.texte !== false && data.titre !== false) {
if ($("#DIALOG").data("ui-dialog")) {
$("#DIALOG").dialog('destroy');
}
$("#DIALOG").attr('title', data.titre)
.empty()
.append(data.texte)
.dialog({
autoOpen: false,
closeOnEscape: true,
resizable: false,
draggable: false,
modal: true,
buttons: buttons,
width: 650,
height: 250,
overlay: {
backgroundColor: '#000',
opacity: 0.7
}
}).dialog('open');
}
}
});
});
// edit a feed
$answers.on('click', '.feed .entry a.feed_edit', function () {
var $this = $(this);
$.ajax({
type: "GET",
url: $this.attr('href'),
dataType: 'html',
success: function (data) {
return _createPublicationModal(data);
}
});
return false;
});
// remove a feed
$answers.on('click', '.feed .entry a.feed_delete', function () {
if (!confirm('etes vous sur de vouloir supprimer cette entree ?'))
return false;
var $this = $(this);
$.ajax({
type: "POST",
url: $this.attr('href'),
dataType: 'json',
success: function (data) {
if (data.error === false) {
var $entry = $this.closest('.entry');
$entry.animate({
height: 0,
opacity: 0
}, function () {
$entry.remove();
});
}
else
alert(data.message);
}
});
return false;
});
$answers.on('mouseover', '.feed .entry', function () {
$(this).addClass('hover');
});
$answers.on('mouseout', '.feed .entry', function () {
$(this).removeClass('hover');
});
$answers.on('click', '.see_more a', function (event) {
$see_more = $(this).closest('.see_more');
$see_more.addClass('loading');
});
var _fetchRemote = function (url, data) {
var page = 0;
if (data.page === undefined) {
page = data.page;
}
return ajaxState.query = $.ajax({
type: "GET",
url: url,
dataType: 'html',
data: data,
beforeSend: function () {
if (ajaxState.isRunning && ajaxState.query.abort)
answAjax.abort();
if (page === 0)
clearAnswers();
ajaxState.isRunning = true;
$answers.addClass('loading');
},
error: function () {
ajaxState.isRunning = false;
$answers.removeClass('loading');
},
timeout: function () {
ajaxState.isRunning = false;
$answers.removeClass('loading');
},
success: function (data) {
ajaxState.isRunning = false;
}
});
};
var _createPublicationModal = function (data) {
var buttons = {};
buttons[language.valider] = function () {
var dialog = p4.Dialog.get(1);
var error = false;
var $form = $('form.main_form', dialog.getDomElement());
$('.required_text', $form).each(function (i, el) {
if ($.trim($(el).val()) === '') {
$(el).addClass('error');
error = true;
}
});
if (error) {
alert(language.feed_require_fields);
}
if ($('input[name="feed_id"]', $form).val() === '') {
alert(language.feed_require_feed);
error = true;
}
if (error) {
return false;
}
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: $form.serializeArray(),
dataType: 'json',
beforeSend: function () {
$('button', dialog.getDomElement()).prop('disabled', true);
},
error: function () {
$('button', dialog.getDomElement()).prop('disabled', false);
},
timeout: function () {
$('button', dialog.getDomElement()).prop('disabled', false);
},
success: function (data) {
$('button', dialog.getDomElement()).prop('disabled', false);
if (data.error === true) {
alert(data.message);
return;
}
if ($('form.main_form', dialog.getDomElement()).hasClass('entry_update')) {
var id = $('form input[name="entry_id"]', dialog.getDomElement()).val();
var container = $('#entry_' + id);
container.replaceWith(data.datas);
container.hide().fadeIn();
$answers.find("img.lazyload").lazyload({
container: $answers
});
}
p4.Dialog.Close(1);
}
});
p4.Dialog.Close(1);
};
var dialog = p4.Dialog.Create({
size: 'Full',
closeOnEscape: true,
closeButton: true,
buttons: buttons
});
dialog.setContent(data);
var $feeds_item = $('.feeds .feed', dialog.getDomElement());
var $form = $('form.main_form', dialog.getDomElement());
$feeds_item.bind('click', function () {
$feeds_item.removeClass('selected');
$(this).addClass('selected');
$('input[name="feed_id"]', $form).val($('input', this).val());
}).hover(function () {
$(this).addClass('hover');
}, function () {
$(this).removeClass('hover');
});
$form.bind('submit', function () {
return false;
});
return;
};
var fetchPublications = function (page) {
curPage = page;
return _fetchRemote('../prod/feeds/', {
page: page
})
.then(function (data) {
$('.next_publi_link', $answers).remove();
$answers.append(data);
$answers.find("img.lazyload").lazyload({
container: $answers
});
afterSearch();
if (page > 0) {
$answers.stop().animate({
scrollTop: $answers.scrollTop() + $answers.height()
}, 700);
}
return;
});
};
var publishRecords = function (type, value) {
var options = {
lst: '',
ssel: '',
act: ''
};
switch (type) {
case "IMGT":
case "CHIM":
options.lst = value;
break;
case "STORY":
options.story = value;
break;
case "SSTT":
options.ssel = value;
break;
}
$.post("../prod/feeds/requestavailable/"
, options
, function (data) {
return _createPublicationModal(data);
});
return;
};
return {
fetchPublications: function (page) {
return fetchPublications(page);
},
publishRecords: function (type, value) {
return publishRecords(type, value)
}
};
})();