// 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( `Threads mode Настроить фильтр Сбросить фильтр FAQ Статистика`); } else { $("#dropdown-content").html( `Threads mode Настроить фильтр Сбросить фильтр FAQ Статистика`); } } $(function() { makeMenu(); //extentions $.ajax({ url:"https://dynamic.lessmore.pw/idec/x/features", success:function(data) { $("#extentions").html("" + data.replace("\n","
") + "
"); } }) //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 += '"; msg_test = msg + " "; echo_test = echo + " "; if((echo_test).indexOf(msg_test) > -1 && echo != '') { options += '"; checks += ' ('+ doc_count + ')
'; } else { options += '"; checks += ' ('+ doc_count + ')
'; } } $('#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()) { var echoes = '('; for (e in echo.split(" ")) { if (echo.split(" ")[e] != "") { echoes += "echo:" + echo.split(" ")[e]; } if (e < echo.split(" ").length - 2) { echoes += " OR "; } } echoes += ')'; data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"bool": { "must": [ { "query_string" : {"fields": ["echo", "repto"], "query": "' + echoes +' 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()) { var echoes = '('; for (e in echo.split(" ")) { if (echo.split(" ")[e] != "") { echoes += "echo:" + echo.split(" ")[e]; } if (e < echo.split(" ").length - 2) { echoes += " OR "; } } echoes += ')'; data = '{"sort": [{"date": {"order": "desc"}}, {"_score": { "order": "desc" }}], "query": {"bool": { "must": [ { "query_string" : {"fields": ["echo", "repto"], "query": "' + echoes +' 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" : [""], "post_tags" : [""], "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); } }) } function answersRequest(msgid) { $.ajax({ url:"https://dynamic.lessmore.pw/search", type:"POST", data: '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}], "query": {"query_string" : {"fields" : ["msgid"], "query" :"' + msgid + '"}}, "size": 0 }', contentType: "application/json", success: function(messages){ answers[msgid] = messages["hits"]["total"]; } }) } //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 += '
'; } // 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, '&').replace(//g, '>').replace(/"/g, '"').replace(new RegExp("\n",'g'), "
\n"); if ('highlight' in msgArray[hit]) { msg = msgArray[hit]['highlight']['message'][0].replace(/&/g, '&').replace(/"/g, '"').replace(new RegExp("\n",'g'), "
\n") + '...'; } else { msg = msgItem['message'].replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(new RegExp("\n",'g'), "
\n"); } console.log(msg); var to = html += '
' + '

' + t_formatted + ' ' // Author to receiver + '' + msgItem['author'] + '' + ' '; if (msgItem['repto'] != "" ) { html += '' + msgItem['to'] + '

'; } else { html += msgItem['to'] + '

'; } // Header html += '

' + '' + msgItem['subg'] + '' + ' ' + msgItem['echo'] + '

' + '

' + msg.autoLink() + '

' // Msgid + '' + msgItem['msgid'] + '

'; if (hash.matched && msgItem['msgid'] == hash.hash) { html += '
'; } } } function threadMessage(msgItem) { $.ajax({ url:"https://dynamic.lessmore.pw/search", type:"POST", data: '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}], "query": {"query_string" : {"fields" : ["repto"], "query": "' + msgItem["_source"]["msgid"] + '"}}, "size": 0 }', contentType: "application/json", success: function(answer) { total = 0; total = answer["hits"]["total"]; msgItem["total"] = total; threadsCallback(false, msgItem); $("#mes").html(html); } }) } //show messages function threadsCallback(messages) { var getAnswers = function(msgItem, callback) { $.when( $.ajax({ url:"https://dynamic.lessmore.pw/search", type:"POST", data: '{"sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }}], "query": {"query_string" : {"fields" : ["repto"], "query": "' + msgItem["_source"]["msgid"] + '"}}, "size": 0 }', contentType: "application/json", success: function(answer) { callback(answer, msgItem); } })).then(function(data) { console.log(data); }) }; var getTotal = function(answer, msgItem) { var total = answer["hits"]["total"]; msg = makeThreadMessage(msgItem["_source"], total); console.log(msgItem["_source"]["msgid"]) Cookies.set(msgItem["_source"]["msgid"], total); }; var msgArray = messages["hits"]["hits"]; for (hit in msgArray) { getAnswers(msgArray[hit], getTotal); } for (hit in msgArray) { count = Cookies.get(msgArray[hit]["_source"]["msgid"]); msg = makeThreadMessage(msgArray[hit]["_source"], count); html += msg; } } //show messages function callback(messages) { var msgArray = messages["hits"]["hits"]; // if (checkViewMode() && !parseLocation().matched) { // threadsCallback(messages); // return; // } 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 += '
'; } msg = msgItem['message'].replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(new RegExp("\n",'g'), "
\n"); var to = html += '
' + '

' + t_formatted + ' ' // Author to receiver + '' + msgItem['author'] + '' + ' '; if (msgItem['repto'] != "" ) { html += '' + msgItem['to'] + '

'; } else { html += msgItem['to'] + '

'; } // Header html += '

' + '' + msgItem['subg'] + '' + ' ' + msgItem['echo'] + '

' + '

' + msg.autoLink() + '

'; // Msgid html += '' + msgItem['msgid'] + ''; // End message

block html += '

'; if (hash.matched && msgItem['msgid'] == hash.hash) { html += '
'; } } } //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 -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}; } }