dynamic/js/script.js
2018-01-02 22:22:01 +03:00

478 lines
17 KiB
JavaScript

// Copyright 2016-2017 Sudnitsyna Anna lessmore.pw
// Copyright 2017 Denis Zheleztsov lessmore.pw
// Licensed under GPLv3
var html = '';
var options = '';
var checks = '';
var echo = '';
var author = '';
var this_page = 1;
var show_rows = 5;
var from = 0;
var thread = '';
//var date = new Date(new Date().getTime() + 60 * 1000);
var date = new Date;
date.setDate(date.getDate() + 7);
var echo = Cookies.get('echo');
console.log(echo);
hash = parseLocationHash();
if (hash.matched) {
console.log("We are here");
requestMessage(hash.hash);
}
// Add checker to menu
function makeMenu() {
if (checkViewMode()) {
$("#dropdown-content").html(
`<a style="text-decoration:none !important;" href="javascript:void(0)">Threads mode <label class="switch">
<input id="threadsCheckbox" type="checkbox" onclick="toggleViewMode()" checked>
<span class="slider round"></span>
</label>
</a>
<a href="filter.html">Настроить фильтр</a>
<a href="" onclick="clearFilter()">Сбросить фильтр</a>
<a href="lessmorefaq.html">FAQ</a>
<a href="stats.html">Статистика</a>`);
} else {
$("#dropdown-content").html(
`<a style="text-decoration:none !important;" href="javascript:void(0)">Threads mode <label class="switch">
<input id="threadsCheckbox" type="checkbox" onclick="toggleViewMode()">
<span class="slider round"></span>
</label>
</a>
<a href="filter.html">Настроить фильтр</a>
<a href="" onclick="clearFilter()">Сбросить фильтр</a>
<a href="lessmorefaq.html">FAQ</a>
<a href="stats.html">Статистика</a>`);
}
}
$(function() {
makeMenu();
//extentions
$.ajax({
url:"https://dynamic.lessmore.pw/idec/x/features",
success:function(data) {
$("#extentions").html("<b>" + data.replace("\n","<br>") + "</b>");
}
})
//initial load
if (echo != '') {
requestEcho();
} else {
requestEmptyEcho();
}
//create echoes list
$.ajax({
url: "https://dynamic.lessmore.pw/search",
type: "POST",
data: '{"sort": [{ "date": { "order": "desc" }}, { "_score": { "order": "desc" }}],"aggs": {"my_fields": { "terms": { "field": "echo","size": 1000}}}}}',
contentType: "application/json",
success: function(messages) {
var select = '';
for (i in messages['aggregations']['my_fields']['buckets']) {
var msg = messages['aggregations']['my_fields']['buckets'][i]['key'];
var doc_count = messages['aggregations']['my_fields']['buckets'][i]['doc_count'];
select += '<option value="' + msg + '">' + msg + " (<b>" + doc_count + "</b>)</option>";
msg_test = msg + " ";
echo_test = echo + " ";
if((echo_test).indexOf(msg_test) > -1 && echo != '') {
options += '<option value="' + msg + '" selected>' + msg + " (<b>" + doc_count + "</b>)</option>";
checks += '<span class="row"><input type="checkbox" class="echoes" name="ec" value="' + msg + '" checked><label>'
+ msg
+ '</label> <span style="color:#838784">('+ doc_count
+ ')</span><br></span>';
} else {
options += '<option value="' + msg + '" >' + msg + " (<b>" + doc_count + "</b>)</option>";
checks += '<span class="row"><input type="checkbox" class="echoes" name="ec" value="' + msg + '"><label>'
+ msg
+ '</label> <span style="color:#838784">('+ doc_count
+ ')</span><br></span>';
}
}
$('#echoSelected').html("Выбранные эхи: " + Cookies.get("echo"));
$('#echoSelector').html(options);
$('#echoCheckBox').html(checks);
// $('#echoSelect').html(select);
$('select').multipleSelect();
}
})
$('.echoes:checked').each(function() {
echo = '';
echo += $(this).val()[i] + " ";
});
var boxes = $("input[type=checkbox]");
$("#echoCheckBox").on('change', function() {
echo = '';
for (var i=0; i<$("input[type=checkbox]:checked").length; i++) {
echo += $("input[type=checkbox]:checked")[i]["defaultValue"] + " ";}
Cookies.set("echo", echo, {expires: 7});
$('#echoSelected').html("Выбранные эхи: " + echo);
});
$('#echoSelector').on('change', function() {
if (!hash.matched) {
echo = '';
html = '';
for (i in $(this).val()) {
echo += $(this).val()[i] + " ";
console.log($(this).val()[i]);
}
Cookies.set("echo", echo, {expires: 7});
requestEcho();
$('#echoSelected').html("Выбранные эхи: " + echo)
if (echo == "") requestEmptyEcho();
}
});
$('#searchInput').on('change', function() {
text = $(this).val();
simpleTextSearch(text);
})
//scroll to show more messages
$(window).scroll(function() {
hash = parseLocationHash();
// console.log($(document).height() - $(window).height()-$(window).scrollTop());
if ($(document).height() - $(window).height() - $(window).scrollTop() < 1.5 && !hash.matched) {
showMore();
//console.log($(document).height() - $(window).height() - $(window).scrollTop());
}
});
}) //end of .ready() method
// Main AJAX function
function ajaxRequest(data) {
$.ajax({
url:"https://dynamic.lessmore.pw/search",
type:"POST",
data: data,
contentType: "application/json",
success:function(messages){
callback(messages);
$("#mes").html(html);
}
})
}
function requestEmptyEcho() {
var data = '{"sort": [{"date": {"order": "desc"}}, {"_score": {"order": "desc" }}], "size": 5}';
ajaxRequest(data);
}
function requestEcho() {
var data = '';
if (checkViewMode()) {
data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"bool": { "must": [ { "query_string" : {"fields": ["echo", "repto"], "query": "' + echo +' AND repto.keyword:\\"\\""}}]}}, "size":5}';
} else {
data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"query_string" : {"fields": ["echo"], "query": "' + echo + '"}}, "size":' + 5 + '}';
}
ajaxRequest(data);
}
function requestTmpEcho(e) {
echo = e;
html = '';
var data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"query_string" : {"fields": ["echo"], "query": "' + echo + '"}}, "size":' + 5 + '}';
ajaxRequest(data);
}
function requestEmptyEchoOffset() {
var data = '';
if (checkViewMode()) {
data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": { "query_string" : {"fields": ["repto"], "query": "repto.keyword:\\"\\""}}, "size":' + show_rows + ', "from":' + from + '}';
} else {
data = '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}],"size":'+ show_rows + ', "from":'+ from + '}';
}
ajaxRequest(data);
}
function requestEchoOffset() {
var data = '';
if (checkViewMode()) {
data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"bool": { "must": [ { "query_string" : {"fields": ["echo", "repto"], "query": "' + echo +' AND repto.keyword:\\"\\""}}]}}, "size":' + show_rows + ', "from":' + from + '}';
} else {
data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"query_string" : {"fields": ["echo"], "query": "' + echo + '"}}, "size":' + show_rows + ', "from":' + from + '}';
}
ajaxRequest(data);
}
function requestAuthorOffset() {
var data = '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}], "query": {"query_string" : {"fields" : ["author"], "query" :"' + author + '"}}, "size":'+ show_rows + ', "from":'+ from + '}';
echo = '';
console.log("Author offset");
ajaxRequest(data);
}
function requestAuthorMessages(_author) {
author = _author;
var data = '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}], "query": {"query_string" : {"fields" : ["author"], "query" :"' + author + '"}}, "size": 5 }';
html = '';
echo = '';
console.log(author);
console.log(data);
ajaxRequest(data);
}
function requestMessage(msgid) {
var data = '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}], "query": {"query_string" : {"fields" : ["msgid"], "query" :"' + msgid + '"}}, "size": 5 }';
console.log("Link to message: " + msgid);
html = '';
echo = '';
author = '';
ajaxRequest(data);
}
// Search functions
// ----------------
function simpleTextSearch(text) {
var data = '{"sort": [{"date": {"order": "desc"}},{"_score": {"order": "desc"}}],"query": {"query_string": {"query": "' + text + '"}},"size": 25,"highlight" : {"fields" : {"message": { "fragment_size" : 150, "number_of_fragments" : 3, "pre_tags" : ["<font color=\\"red\\">"], "post_tags" : ["</font>"], "highlight_query": { "bool": { "must": { "match": { "message": {"query": "' + text + '"} } } } } }}} }';
console.log(data);
html = '';
echo = '';
author = '';
searchRequest(data);
}
function searchRequest(data) {
$.ajax({
url:"https://dynamic.lessmore.pw/search",
type:"POST",
data: data,
contentType: "application/json",
success:function(messages){
callbackHS(messages);
$("#mes").html(html);
}
})
}
//show messages
function callbackHS(messages) {
var msgArray = messages["hits"]["hits"];
// console.log(msgArray);
for (hit in msgArray) {
hash = parseLocationHash();
var msgItem = msgArray[hit]['_source'];
var t = new Date(msgItem['date'] * 1000);
var msg = '';
if (hash.matched && msgItem['msgid'] == hash.hash) {
// // commentnsole.log(msgArray.length);
html += '<div class="hsMessage">';
}
// console.log(msgItem['date']);
// console.log(t);
var t_formatted = t.getFullYear() + "/" + (t.getMonth() + 1) + "/" + t.getDate() + " " + t.getHours() + ":" + t.getMinutes() + ":" + t.getSeconds();
// msg = msgItem['message'].replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(new RegExp("\n",'g'), "<br>\n");
if ('highlight' in msgArray[hit]) {
msg = msgArray[hit]['highlight']['message'][0].replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(new RegExp("\n",'g'), "<br>\n") + '...';
} else {
msg = msgItem['message'].replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(new RegExp("\n",'g'), "<br>\n");
}
console.log(msg);
var to =
html += '<div class="msg">'
+ '<p align="left"><i class="fa fa-hourglass-half"></i> ' + t_formatted + '<i class="fa fa-angle-right"></i> <!--/p-->'
// Author to receiver
+ '<a style="text-decoration:underline; text-decoration-style:dotted;" title="' + msgItem["address"] + '" "href="javascript:void(0)" onclick="requestAuthorMessages(\'' + msgItem['author'] + '\');">' + msgItem['author'] + '</a>'
+ ' <i class="fa fa-mail-forward"></i> ';
if (msgItem['repto'] != "" ) {
html += '<a href="/?' + msgItem['repto'] + '">' + msgItem['to'] + '</a></p>';
} else {
html += msgItem['to'] + '</p>';
}
// Header
html += ' <p style="color:#0099cc;font: 1.5em Open Sans, sans-serif;">'
+ '<a class="headerLink" href="/?j=' + msgItem['msgid'] + '">'
+ msgItem['subg'] + '</a>'
+ ' <i class="fa fa-at"></i> <i><a class="headerLink" href="javascript:void(0)" onclick="requestTmpEcho(\'' + msgItem['echo'] + '\')">' + msgItem['echo']
+ '</a></i></p></p>'
+ '<p>' + msg.autoLink()
+ '</p><p align="right">'
// Msgid
+ '<a href="?' + msgItem['msgid'] +'" onclick="requestMessage(\'' + msgItem['msgid'] + '\');"><i class="fa fa-link"></i>' + msgItem['msgid'] + '</a></p></div>';
if (hash.matched && msgItem['msgid'] == hash.hash) {
html += '</div>';
}
}
}
//show messages
function callback(messages) {
var msgArray = messages["hits"]["hits"];
// console.log(msgArray);
for (hit in msgArray) {
hash = parseLocationHash();
var msgItem = msgArray[hit]['_source'];
var t = new Date(msgItem['date'] * 1000);
// console.log(msgItem['date']);
// console.log(t);
var t_formatted = t.getFullYear() + "/" + (t.getMonth() + 1) + "/" + t.getDate() + " " + t.getHours() + ":" + t.getMinutes() + ":" + t.getSeconds();
if (hash.matched && msgItem['msgid'] == hash.hash) {
html += '<div class="hsMessage">';
}
msg = msgItem['message'].replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(new RegExp("\n",'g'), "<br>\n");
var to =
html += '<div class="msg">'
+ '<p align="left"><i class="fa fa-hourglass-half"></i> ' + t_formatted + '<i class="fa fa-angle-right"></i> <!--/p-->'
// Author to receiver
+ '<a style="text-decoration:underline; text-decoration-style:dotted;" title="' + msgItem["address"] + '" "href="javascript:void(0)" onclick="requestAuthorMessages(\'' + msgItem['author'] + '\');">' + msgItem['author'] + '</a>'
+ ' <i class="fa fa-mail-forward"></i> ';
if (msgItem['repto'] != "" ) {
html += '<a href="/?' + msgItem['repto'] + '">' + msgItem['to'] + '</a></p>';
} else {
html += msgItem['to'] + '</p>';
}
// Header
html += ' <p style="color:#0099cc;font: 1.5em Open Sans, sans-serif;">'
+ '<a class="headerLink" href="/?j=' + msgItem['msgid'] + '">'
+ msgItem['subg'] + '</a>'
+ ' <i class="fa fa-at"></i> <i><a class="headerLink" href="javascript:void(0)" onclick="requestTmpEcho(\'' + msgItem['echo'] + '\')">' + msgItem['echo']
+ '</a></i></p></p>'
+ '<p>' + msg.autoLink()
+ '</p><p align="right">'
// Msgid
+ '<a href="?' + msgItem['msgid'] +'" onclick="requestMessage(\'' + msgItem['msgid'] + '\');"><i class="fa fa-link"></i>' + msgItem['msgid'] + '</a>';
// End message <div> block
html += '</p></div>';
if (hash.matched && msgItem['msgid'] == hash.hash) {
html += '</div>';
}
}
}
//show more messages
function showMore() {
if (!parseLocationHash().matched && !parseLocation().matched) {
console.log("Show more messages, please.");
console.log("Selected echo: " + echo);
console.log("Selected author: " + author);
this_page += 1;
from += show_rows;
if (author != '') {
requestAuthorOffset();
} else if (echo != '') {
requestEchoOffset();
} else {
requestEmptyEchoOffset();
}
}
}
function searchEcho() {
var input, filter, box, row;
input = $("#myInput").val();
input = input.toLowerCase();
box = $("label");
row = $(".row");
for (i = 0; i<box.length; i++) {
if (box[i].innerHTML.indexOf(input) > -1) {
row[i].style.display = "";
} else {
row[i].style.display = "none";
}
}
}
// Thread building
function ajaxThreadRequest(data) {
$.ajax({
url:"https://dynamic.lessmore.pw/search",
type:"POST",
data: data,
contentType: "application/json",
success: function(messages) {
requestBuildThread(messages, false);
$("#mes").html(html);
}
})
}
function requestBuildThread(msg, init) {
var data = ''
if (init) {
console.log("We are here;");
html = '';
thread = [];
var data = '{"query": {"query_string" : {"fields" : ["msgid"], "query" :"' + msg + '"}}';
} else {
var data = messages["hits"]["hits"][0]["_source"]["msgid"];
}
}
function clearFilter() {
Cookies.remove('echo');
Cookies.remove('threads');
}
function showMenu() {
if ($("#dropdown-content").css("display") == "none") {
$("#dropdown-content").css("display","block");
} else {
$("#dropdown-content").css("display","none");
}
}
function showSearch() {
if ($("#searchInput").css("display") == "none") {
$("#searchInput").css("display","block");
} else {
$("#searchInput").css("display","none");
}
}
// Parsing functions
function parseLocationHash() {
var hash = window.location.search.replace(/\?/, "");
if (hash) {
if (hash.match(/(.{20})/) && !hash.match(/.*=.*/)) {
console.log("Matched! " + hash);
return {matched: true, hash: hash};
} else {
return {matched: false};
}
} else {
return {matched: false};
}
}