Commit 01e85991 authored by Vadim's avatar Vadim

Add new file

parent bd3680d6
jQuery( document ).ready(function() {
if (bg_counter.ID) {
var request = bg_counter.websocket+bg_counter.project+"/"+bg_counter.type+"/"+bg_counter.ID;
var socket = new WebSocket(request);
socket.onopen = function() {
if (bg_counter.debug) console.log(" Соединение установлено. "+request);
};
SendOnce(bg_counter.type, bg_counter.ID);
}
GetAllCounter();
});
/*********************************************************************************
POST /counters/<path>
Увеличивает счётчик на единицу (и создаёт его, если он не существует).
Тело запроса пустое.
Пример запроса:
POST /counters/project/test/author/1/book/3
Пример ответа:
{
"success":true,
"data":{
"created": false,
"value": 35
}
}
В ответе параметр created говорит, существовал ли счётчик до этого.
**********************************************************************************/
function SendOnce(type, id) {
var request = bg_counter.counterurl+bg_counter.project+"/"+type+"/"+id;
var xhr = new XMLHttpRequest();
xhr.open("POST", request, true);
if (bg_counter.debug) console.log('POST REQUEST: '+request);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.responseText) {
var response = JSON.parse(xhr.responseText);
if (response.success) {
// Здесь надо будет добавить вывод данных на экран
if (bg_counter.debug) console.log(JSON.stringify(response.data));
setViewCount (id, addDelimiter(response.data.value));
} else {
if (bg_counter.debug) console.log('POST REQUEST: '+request+' ERROR: '+response.error);
}
}
}
}
xhr.send();
}
/*********************************************************************************
GET /counters/<path>
Возвращает текущие значения счётчика - общий счётчик и количество
просматривающих в данный момент.
Пример запроса:
GET /counters/project/test/author/1/book/3
Пример ответа:
{
"success":true,
"data":{
"now":3,
"total":34
}
}
Если счётчик не существует, возвращает 404.
**********************************************************************************/
function GetAllCounter() {
jQuery('span.bg-az-counter').each (function () {
var el = jQuery(this);
var type = el.attr('data-type');
var id = el.attr('data-ID');
var request = bg_counter.counterurl+bg_counter.project+"/"+type+"/"+id;
var xhr = new XMLHttpRequest();
xhr.open("GET", request, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.responseText) {
var response = JSON.parse(xhr.responseText);
if (response.success) {
if (bg_counter.debug) console.log('GET REQUEST: '+request);
if (bg_counter.debug) console.log(JSON.stringify(response.data));
el.find('span.bg-az-counter-views').text(addDelimiter(response.data.total));
el.find('span.bg-az-counter-now').text(addDelimiter(response.data.now));
} else {
if (bg_counter.debug) console.log('GET REQUEST: '+request+' ERROR '+xhr.status+': '+response.error);
el.find('span.bg-az-counter-views').text('0');
el.find('span.bg-az-counter-now').text('0');
}
} else {
if (bg_counter.debug) console.warn('GET REQUEST: '+request+' Warning: responseText is empty!');
el.find('span.bg-az-counter-views').text(' - ');
el.find('span.bg-az-counter-now').text(' - ');
}
}
}
xhr.onerror = function(err) {
console.warn(err.type +" "+ err.target.status + ". Check if the server is running!");
el.find('span.bg-az-counter-views').text(' - ');
el.find('span.bg-az-counter-now').text(' - ');
}
xhr.send();
});
}
function GetAllCounter_() {
'use strict';
jQuery('span.bg-az-counter').each (function () {
var el = jQuery(this);
var id = el.attr('data-ID');
var type = el.attr('data-type');
var request = bg_counter.counterurl+bg_counter.project+"/"+type+"/"+id;
fetch(request)
.then(function(response) {
if (response.ok) {
response.json().then(function(resp) {
if (bg_counter.debug) console.log('GET REQUEST: '+request);
if (bg_counter.debug) console.log(JSON.stringify(resp));
el.find('span.bg-az-counter-views').text(addDelimiter(resp.data.total));
el.find('span.bg-az-counter-now').text(addDelimiter(resp.data.now));
});
} else {
throw ('GET REQUEST: '+request+' ERROR '+response.status);
}
})
.catch(function(err) {
console.warn( err);
el.find('span.bg-az-counter-views').text(' - ');
el.find('span.bg-az-counter-now').text(' - ');
});
});
}
/*********************************************************************************
Отображает значения счетчика на странице
**********************************************************************************/
function setViewCount (type, id, total='', now='') {
jQuery('span.bg-az-counter').each (function () {
var el = jQuery(this);
if(id == el.attr('data-ID') && type == el.attr('data-type')) {
if (total) el.find('span.bg-az-counter-views').text(total);
if (now) el.find('span.bg-az-counter-now').text(now);
}
});
}
// Добавляет разделитель тысяч
function addDelimiter(nStr, dlm='\xa0') {
if (!nStr) nStr = '0';
nStr += '';
var x = nStr.split('.');
var x1 = x[0];
var x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + dlm + '$2');
}
return x1 + x2;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment