File: /home/imensosw/demo.imensosoftware.com/matrix/js/admin_common.js
var app = app || {};
/* ================= DOCUMENT STATE ================= */
app.document = {
docId: "",
rowId: "",
assignment_no: "",
searchText: ""
};
/* ================= BASE URL ================= */
app.location = window.location.origin + "/admin/";
if (window.location.hostname === "sh018.hostgator.tempwebhost.net") {
app.location = "http://sh018.hostgator.tempwebhost.net/~a16102wt/matrix/admin/";
}
/* ================= SORT STATE ================= */
app.sortData = {
column_name: "",
order: "",
action: "",
table_id: "",
searchText: ""
};
/* ================= INIT ================= */
$(document).ready(function () {
app.getData();
});
/* ================= CLICK ROW ================= */
$(document).on('click', '#row_link', function () {
// ✅ Safe URL parsing
const params = new URLSearchParams(window.location.search);
app.document.assignment_no = params.get('assignment_no');
if (app.document.assignment_no) {
$('#admin_tabs').hide();
}
app.document.docId = $(this).data('doc_id');
app.document.rowId = $(this).data('row_id');
app.clickToDocId();
});
/* ================= SORTING ================= */
// Generic sort handler (replaces 4 duplicate handlers)
$(document).on('click', '.column_sort_new, .column_sort_assign, .column_sort_complete, .column_sort_delete', function () {
app.sortData.column_name = $(this).attr('id');
app.sortData.order = $(this).data('order');
if ($(this).hasClass('column_sort_new')) {
app.sortData.action = "new_assignment_table_sort";
app.sortData.table_id = "new_assignment_table";
} else if ($(this).hasClass('column_sort_assign')) {
app.sortData.action = "assignment_to_table_sort";
app.sortData.table_id = "assignment_to_table";
} else if ($(this).hasClass('column_sort_complete')) {
app.sortData.action = "assignment_complete_table_sort";
app.sortData.table_id = "assignment_complete_table";
} else if ($(this).hasClass('column_sort_delete')) {
app.sortData.action = "assignment_delete_table_sort";
app.sortData.table_id = "assignment_delete_table";
}
app.getSortTable();
});
/* ================= SEARCH (DEBOUNCED) ================= */
let debounceTimer;
$(document).on('keyup', '#search', function () {
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
app.sortData.searchText = $(this).val();
if ($(this).hasClass('assignment_to')) {
app.sortData.action = "assignment_to_table_sort";
app.sortData.table_id = "assignment_to_table";
} else if ($(this).hasClass('assignment_complete')) {
app.sortData.action = "assignment_complete_table_sort";
app.sortData.table_id = "assignment_complete_table";
} else if ($(this).hasClass('assignment_new')) {
app.sortData.action = "new_assignment_table_sort";
app.sortData.table_id = "new_assignment_table";
} else if ($(this).hasClass('assignment_delete')) {
app.sortData.action = "assignment_delete_table_sort";
app.sortData.table_id = "assignment_delete_table";
}
app.getSortTable();
}, 300); // ✅ debounce delay
});
/* ================= API CALL ================= */
app.getSortTable = function () {
const formData = {
searchText: app.sortData.searchText,
sortorder: app.sortData.order,
sortby: app.sortData.column_name,
action: app.sortData.action
};
$.ajax({
url: app.location + "sort.php",
method: "POST",
dataType: "html",
data: { formData },
success: function (data) {
$('#' + app.sortData.table_id).html(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.error("Sort API Error:", textStatus, errorThrown);
alert("Failed to load sorted data");
}
});
};
/* ================= DEFAULT SELECTION ================= */
app.getData = function () {
const items = $('ul.list-group > li.done');
if (items.length > 0) {
items.first().find('a').trigger('click');
items.first().addClass('active');
}
};
/* ================= DOCUMENT VIEW ================= */
app.clickToDocId = function () {
if (!app.document.assignment_no || !app.document.docId) {
console.warn("Missing document info");
return;
}
$("#row_iframe").attr(
"src",
"../docs/" + app.document.assignment_no + "/" + app.document.docId + ".pdf"
);
$("#rowId").val(app.document.rowId);
$("#docId").val(app.document.docId);
$('ul.list-group > li.active').removeClass('active');
$('ul')
.find('[data-doc_id="' + app.document.docId + '"]')
.closest('li')
.addClass('active');
};