var App = (function ($) { "use strict"; var _tabs; var _filter; var _filter_toggle; var _filter_fields; var _tickets_container; var _statistics_container; var ajax_loader = _.template($("script.ajax-loader-mask").html()); var _bind_events = function () { $(document).on("click", ".close-tab", _close_tab); $(document).on("click", "#filter-toggle", _toggle_filter); $(document).on("click", "#show-filters", _toggle_filter_display); $(document).on("click", "#refresh-tickets", load_tickets); $(document).on("click", ".registration-toggle", _toggle_registration); $(document).on("click", ".page", _page); $(document).on("keyup", "#search", _search); $(document).on("submit", "#registration-form", _register_user); $(document).on("change", ".filter-field", _filter_off); $(document).on("show.bs.modal", "#create-modal", _init_media_dropzone); $(document).on("hidden.bs.modal", "#create-modal", _reset_media_dropzone); $(document).on('shown.bs.tab', '.editor-tab', _preview_comment); $(document).on('click', '#reset-password', _reset_password); }; var _reset_password = function (e) { e.preventDefault(); var form = $(e.target).parents('form'); var alert = _.template('
([\s\S]*?)<\/code>/g);
if(html != null) {
html.forEach(function (block) {
block = block.replace(/]*>/gi, '').replace(/<\/code>/gi, '');
content = content.replace(block, _.escape(block).trim());
});
}
pane.find('.rendered').html(content);
}
};
var _reset_media_dropzone = function(e) {
var attachments = $(e.target).find("input.attachments");
Dropzone.forElement("#ticket-media-upload").destroy();
attachments.val(JSON.stringify(attachments.data("default")));
};
var _init_media_dropzone = function (e) {
var submit_button = $('#create-ticket');
$(e.target).find('#ticket-media-upload').dropzone({
addRemoveLinks: true,
url: Globals.ajax_url + "?action=support_upload_media",
init: function() {
this.on('processing', function() {
submit_button.prop('disabled', true);
});
this.on('complete', function() {
submit_button.prop('disabled', false);
});
this.on("success", function(file, res) {
var media = $(e.target).find("input.attachments");
var uploads = JSON.parse(media.val());
file.id = res.data.id;
uploads.push(res.data.id);
media.val(JSON.stringify(uploads));
});
this.doingReset = false;
this.on("removedfile", function(file) {
if(!this.doingReset) {
$.ajax({
url: Globals.ajax_url,
dataType: "json",
data: {
action: "support_delete_media",
_ajax_nonce: Globals.ajax_nonce,
attachment_id: file.id
}
});
}
});
this.reset = function() {
this.doingReset = true;
this.removeAllFiles();
this.doingReset = false;
};
}
});
};
var _search = _.debounce(function () {
load_tickets();
}, 250);
var _page = function (e) {
sessionStorage.setItem("page", $(e.target).data("id"));
load_tickets();
};
var _close_tab = function (e) {
var tab = $(e.target).closest("li");
var prev = tab.prev().find("a");
var next = tab.next();
$("#" + tab.data("id")).remove();
tab.remove();
if (next.length === 0) {
prev.tab("show");
}
$(".nav-tabs").scrollingTabs('refresh');
};
var new_tab = function (data) {
var li = $("" +
"" +
"" + data.title + "" +
"×" +
"" +
" ");
var panel = $("" + data.content + "");
_tabs.find(".ticket-nav-tabs").append(li);
_tabs.find(".ticket-tab-panels").append(panel);
$(".nav-tabs").scrollingTabs('refresh');
li.find("a").tab("show");
};
var open_tab = function (id) {
var tab = _find_tab(id);
if (tab.length > 0) {
tab.find("a").tab("show");
}
return tab.length > 0;
};
var _find_tab = function (id) {
return $("li.tab").filter(function () {
return $(this).data("id") === id;
});
};
var load_statistics = function () {
var request = {
url : Globals.ajax_url + "?action=support_display_statistics",
dataType : "json",
data: [{
name : "_ajax_nonce",
value : Globals.ajax_nonce
}],
success: function( response ) {
_statistics_container.html( response.content )
},
complete: function( response ) {},
error: function( response ) {}
}
$.ajax(request);
}
var load_tickets = function () {
/**
* @summary Add a way to pause refreshing
* @todo Replace the entire ticket list
* @since 1.6.0
*/
if (!$('#the-tickets').hasClass('no-replace')) {
var refresh = $("#refresh-tickets").find(".refresh");
var filter_controls = $("#filter-controls");
var page = sessionStorage.getItem("page");
var request = {
url: Globals.ajax_url + "?action=support_list_tickets",
dataType: "json",
data: [{
name: "_ajax_nonce",
value: Globals.ajax_nonce
}, {
name: "page",
value: page === undefined ? "1" : page
}, {
name: "search",
value: $("#search").val()
}],
success: function (response) {
_tickets_container.html(response.data);
if (filter_controls.css("display") === "none") {
filter_controls.slideToggle();
_tickets_container.hide().fadeToggle();
}
},
complete: function () {
refresh.removeClass("rotate");
}
};
if (_filter_toggle.hasClass("active")) {
request.data = $.merge(request.data, _filter.serializeArray());
}
refresh.addClass("rotate");
$.ajax(request);
}
};
var adjust_login = function( e ) {
return;
$('#support-login-page').css({
width: $('body').width(),
height: $('body').height(),
});
}
var _register_user = function (e) {
e.preventDefault();
var form = $(e.target);
var submit = $("#registration-submit");
var initialText = submit.html()
submit.html( '' )
submit.prop("disabled", true);
form.submit({
url: Globals.ajax_url,
action: "support_register_user",
method: "post",
extras: {
_ajax_nonce: Globals.ajax_nonce
},
success: function (response) {
window.location.reload();
submit.html( initialText )
},
complete: function () {
submit.prop("disabled", false);
}
});
};
var _filter_off = function () {
_filter_toggle.removeClass("active");
sessionStorage.removeItem("page");
};
var _toggle_filter = function () {
_filter_toggle.toggleClass("active");
load_tickets();
};
var _toggle_filter_display = function (e) {
$("#filters").slideToggle();
};
var _toggle_registration = function () {
$("#login").toggle();
$("#register").toggle();
};
var _time = function () {
var clock = $("#sys-time");
var date = $("#sys-date");
setInterval(function () {
var time = moment();
clock.text(time.format("hh:mm:ss a"));
date.text(time.format("MMMM, Do YYYY"));
}, 1000);
};
var initialize = function () {
_tabs = $("#tabs");
_filter = $("#ticket_filter");
_filter_toggle = $("#filter-toggle");
_filter_fields = _filter.find(".filter-field");
_tickets_container = $("#tickets-container");
_statistics_container = $("#statistics-container");
ajax_loader = _.template($("script.ajax-loader-mask").html());
_tickets_container.html(ajax_loader(Globals.strings.loading_tickets));
$(".nav-tabs").scrollingTabs();
Dropzone.prototype.defaultOptions.maxFilesize = Globals.max_attachment_size;
Dropzone.autoDiscover = false;
_time();
_bind_events();
load_tickets();
load_statistics();
adjust_login();
setInterval(load_tickets, 1000 * Globals.refresh_interval);
setInterval(load_statistics, 1000 * Globals.refresh_interval);
};
return {
load_tickets: load_tickets,
initialize: initialize,
new_tab: new_tab,
open_tab: open_tab,
close_preview: close_preview,
load_statistics: load_statistics,
ajax_loader: ajax_loader
};
})(jQuery);
jQuery(document).ready(function () {
App.initialize();
});