You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
4.0 KiB
JavaScript
176 lines
4.0 KiB
JavaScript
"use strict";
|
|
/*global define, socket, app, utils, bootbox, ajaxify*/
|
|
|
|
define('admin/manage/flags', [
|
|
'autocomplete',
|
|
'Chart',
|
|
'components',
|
|
'translator'
|
|
], function (autocomplete, Chart, components, translator) {
|
|
|
|
var Flags = {};
|
|
|
|
Flags.init = function () {
|
|
$('.post-container .content img:not(.not-responsive)').addClass('img-responsive');
|
|
|
|
autocomplete.user($('#byUsername'));
|
|
|
|
handleDismiss();
|
|
handleDismissAll();
|
|
handleDelete();
|
|
handleGraphs();
|
|
|
|
updateFlagDetails(ajaxify.data.posts);
|
|
|
|
components.get('posts/flags').on('click', '[component="posts/flag/update"]', updateFlag);
|
|
|
|
// Open flag as indicated in location bar
|
|
if (window.location.hash.startsWith('#flag-pid-')) {
|
|
$(window.location.hash).collapse('toggle');
|
|
}
|
|
};
|
|
|
|
function handleDismiss() {
|
|
$('.flags').on('click', '.dismiss', function () {
|
|
var btn = $(this);
|
|
var pid = btn.parents('[data-pid]').attr('data-pid');
|
|
|
|
socket.emit('posts.dismissFlag', pid, function (err) {
|
|
done(err, btn);
|
|
});
|
|
});
|
|
}
|
|
|
|
function handleDismissAll() {
|
|
$('#dismissAll').on('click', function () {
|
|
socket.emit('posts.dismissAllFlags', function (err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
|
|
ajaxify.refresh();
|
|
});
|
|
return false;
|
|
});
|
|
}
|
|
|
|
function handleDelete() {
|
|
$('.flags').on('click', '.delete', function () {
|
|
var btn = $(this);
|
|
bootbox.confirm('[[admin/manage/flags:alerts.confirm-delete-post]]', function (confirm) {
|
|
if (!confirm) {
|
|
return;
|
|
}
|
|
var pid = btn.parents('[data-pid]').attr('data-pid');
|
|
var tid = btn.parents('[data-pid]').attr('data-tid');
|
|
socket.emit('posts.delete', {pid: pid, tid: tid}, function (err) {
|
|
done(err, btn);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function done(err, btn) {
|
|
if (err) {
|
|
return app.alertError(err.messaage);
|
|
}
|
|
btn.parents('[data-pid]').fadeOut(function () {
|
|
$(this).remove();
|
|
if (!$('.flags [data-pid]').length) {
|
|
translator.translate('[[admin/manage/flags:none-flagged]]', function (text) {
|
|
$('.post-container').text(text);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function handleGraphs() {
|
|
var dailyCanvas = document.getElementById('flags:daily');
|
|
var dailyLabels = utils.getDaysArray().map(function (text, idx) {
|
|
return idx % 3 ? '' : text;
|
|
});
|
|
|
|
if (utils.isMobile()) {
|
|
Chart.defaults.global.tooltips.enabled = false;
|
|
}
|
|
var data = {
|
|
'flags:daily': {
|
|
labels: dailyLabels,
|
|
datasets: [
|
|
{
|
|
label: "",
|
|
backgroundColor: "rgba(151,187,205,0.2)",
|
|
borderColor: "rgba(151,187,205,1)",
|
|
pointBackgroundColor: "rgba(151,187,205,1)",
|
|
pointHoverBackgroundColor: "#fff",
|
|
pointBorderColor: "#fff",
|
|
pointHoverBorderColor: "rgba(151,187,205,1)",
|
|
data: ajaxify.data.analytics
|
|
}
|
|
]
|
|
}
|
|
};
|
|
|
|
dailyCanvas.width = $(dailyCanvas).parent().width();
|
|
new Chart(dailyCanvas.getContext('2d'), {
|
|
type: 'line',
|
|
data: data['flags:daily'],
|
|
options: {
|
|
responsive: true,
|
|
animation: false,
|
|
legend: {
|
|
display: false
|
|
},
|
|
scales: {
|
|
yAxes: [{
|
|
ticks: {
|
|
beginAtZero: true
|
|
}
|
|
}]
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function updateFlagDetails(source) {
|
|
// As the flag details are returned in the API,
|
|
// update the form controls to show the correct data
|
|
|
|
// Create reference hash for use in this method
|
|
source = source.reduce(function (memo, cur) {
|
|
memo[cur.pid] = cur.flagData;
|
|
return memo;
|
|
}, {});
|
|
|
|
components.get('posts/flag').each(function (idx, el) {
|
|
var pid = el.getAttribute('data-pid');
|
|
el = $(el);
|
|
|
|
if (source[pid]) {
|
|
for(var prop in source[pid]) {
|
|
if (source[pid].hasOwnProperty(prop)) {
|
|
el.find('[name="' + prop + '"]').val(source[pid][prop]);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function updateFlag() {
|
|
var pid = $(this).parents('[component="posts/flag"]').attr('data-pid');
|
|
var formData = $($(this).parents('form').get(0)).serializeArray();
|
|
|
|
socket.emit('posts.updateFlag', {
|
|
pid: pid,
|
|
data: formData
|
|
}, function (err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
} else {
|
|
app.alertSuccess('[[topic:flag_manage_saved]]');
|
|
}
|
|
});
|
|
}
|
|
|
|
return Flags;
|
|
}); |