textnavi/static/js/app.js

212 lines
7.3 KiB
JavaScript

var app = function () {
var loader = $("#loader");
var cluster_default_size = 3;
var search_filter = $("#search-filter");
var form_controller = $("#search-controller");
var hidden_dcloud = $("#delta_cloud");
var delta_cloud = $("#delta-could");
var query_hidden_input = $("#query_values");
var clusters_content = $("#clusters_content");
const DOCUMENT_PAGE = "/docs";
var cluster_selector = $("#clusterSize");
var top_items_section = $("#top_products_section");
function getRandomColor(step) {
var letters = '123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
var charsController = function (size, filter) {
jQuery.ajax('/data',
{
data: {
"cluster_size": size,
"filter": filter,
"query": query_hidden_input.val(),
"cluster": query_hidden_input.attr("data-filter"),
"depth": query_hidden_input.attr("data-depth"),
"delta_cloud": hidden_dcloud.val()
},
dataType: 'json',
success: function (data, status, xhr) {
loader.hide();
createCharts(data.result);
},
error: function (jqXhr, textStatus, errorMessage) { // error callback
console.log(errorMessage)
}
});
};
var clusterController = function () {
$("#clusterSize").on("change", function () {
charsController(this.value);
})
};
var searchController = function () {
var choices = new Choices('#search-input',
{
searchEnabled: true,
maxItemCount: 10,
removeItemButton: true,
removeItems: true,
silent: true,
removeItem: function (item) {
console.log(item)
}
});
choices.passedElement.addEventListener('addItem', function (event) {
if (query_hidden_input.val().length > 0) {
query_hidden_input.val(query_hidden_input.val() + "," + event.detail.value);
} else {
query_hidden_input.val(event.detail.value);
}
form_controller.submit()
}, false);
choices.passedElement.addEventListener('removeItem', function (event) {
var values = query_hidden_input.val().split(",");
var query = [];
for (var element in values) {
if (!values.hasOwnProperty(element)) continue;
if (values[element] !== event.detail.value) {
query.push(values[element])
}
}
query_hidden_input.val(query);
form_controller.submit()
}, false);
};
var deltaCloudController = function () {
if ($("#delta_cloud").val() === "true") {
delta_cloud.attr("checked", true)
} else {
delta_cloud.attr("checked", false)
}
delta_cloud.change(function () {
if ($(this).is(":checked")) {
hidden_dcloud.val(true);
} else {
hidden_dcloud.val(false);
}
form_controller.submit();
});
};
var createCharts = function (result) {
var html_content = "";
var clsname = []
var clustersize = cluster_selector.find(":selected").val();
for (var cluster in result) {
if (!result.hasOwnProperty(cluster)) continue;
var display = "none";
var url = DOCUMENT_PAGE + window.location.search + "&name=" + result[cluster]["name"] + "&cluster_size=" + clustersize;
if (parseInt(result[cluster]["total"]) < 2 || result[cluster]["feature"].length === 0) {
display = "block";
}
clsname.push(result[cluster]["name"]);
html_content += "<div class='cluster' ><h5>" + result[cluster]["name"] + "<span class='cluster_sz'>(" + result[cluster]["total"] + " document)</span><span class='show_document' style='display: " + display + "'><a target='_blank' href='" + url + "' class='btn btn-info' ><i class='fas fa-file-invoice'></i></a></span></h5><div id='chart_" + cluster + "' class='chart-area' /></div>";
}
clusters_content.html(html_content);
for (cluster in result) {
if (!result.hasOwnProperty(cluster)) continue;
$('#chart_' + cluster).empty().jQCloud(result[cluster]["feature"], {
height: 300,
steps: 20,
autoResize: true,
delay: 2,
colors: function (step) {
return getRandomColor(step)
},
fontSize: {
from: 0.1,
to: 0.02
}
});
}
tree = "";
for (var cls = 0; cls < clustersize; cls++) {
var ul_subc = "";
if (cls == query_hidden_input.attr("data-filter")) {
var tb = "";
for (var name in clsname) {
tb = tb + "<li>" + clsname[name].split(";")[0].substring(0, 30) + "</li>"
}
ul_subc = "<ul>" + tb + "</ul>"
}
tree = tree + "<li> Cluster " + (cls + 1) + ul_subc + "</li>"
}
$("#tree").html(tree)
};
var topDocumentController = function (filter, main_filter) {
jQuery.ajax('/top_items',
{
data: {
"filter": filter,
"main_filter": main_filter,
"query": query_hidden_input.val(),
"cluster_size": cluster_selector.find(":selected").val()
},
dataType: 'json',
success: function (result) {
var top_items = "";
var titles = [];
for (var resp in result.responses) {
if (!result.responses.hasOwnProperty(resp)) continue;
var tmp = result.responses[resp];
var counter = 0;
for (var doc in tmp['hits']['hits']) {
counter++;
if (counter < 5) {
top_items = top_items + "<div class='top_item'><a target='_blank' class='top_item_link' href='/doc?id=" + tmp['hits']['hits'][doc]["_id"] + "'>" + tmp['hits']['hits'][doc]["_source"]["title"] + "</a></div>"
}
}
}
top_items_section.html(top_items)
},
error: function (jqXhr, textStatus, errorMessage) {
console.log(errorMessage)
}
});
};
return {
run: function () {
charsController(cluster_default_size, search_filter.val());
clusterController();
searchController();
deltaCloudController();
createCharts();
topDocumentController(search_filter.val());
}
};
}();