101 lines
4.6 KiB
JavaScript
101 lines
4.6 KiB
JavaScript
// main shariff function
|
|
function shariff_share_counts() {
|
|
// enabled strict mode
|
|
"use strict";
|
|
// get all shariff containers
|
|
var containers = document.getElementsByClassName("shariff");
|
|
// init request object
|
|
var requests = {};
|
|
// loop through all containers, create each request url and add all to request array
|
|
for ( var c = 0; containers[c]; c++ ) {
|
|
var share_url = containers[c].dataset.url;
|
|
var services = containers[c].dataset.services;
|
|
var timestamp = containers[c].dataset.timestamp;
|
|
// check if an external share count api is set
|
|
var api = containers[c].dataset.backendurl;
|
|
if ( typeof api === "undefined" ) {
|
|
api = '/wp-json/shariff/v1/share_counts?';
|
|
}
|
|
// build request url
|
|
var request_url = api + 'url=' + share_url + '&services=' + services + '×tamp=' + timestamp;
|
|
// check if we have backend services at all
|
|
if ( typeof services !== "undefined" ) {
|
|
// check if the url is already in requests to avoid duplicated requests
|
|
if ( requests[ share_url ] ) {
|
|
// add additional services to services
|
|
services = requests[ share_url ][ 1 ] + '|' + services;
|
|
// remove duplicates
|
|
var service_array = services.split("|");
|
|
service_array = service_array.filter( function( elem, pos, arr ) {
|
|
return arr.indexOf( elem ) === pos;
|
|
});
|
|
services = service_array.join('|');
|
|
// update request url
|
|
request_url = api + 'url=' + share_url + '&services=' + services + '×tamp=' + timestamp;
|
|
// add to requests
|
|
requests[ share_url ] = [ share_url, services, timestamp, request_url ];
|
|
}
|
|
else {
|
|
requests[ share_url ] = [ share_url, services, timestamp, request_url ];
|
|
}
|
|
}
|
|
}
|
|
// get share counts
|
|
for ( var request in requests ) {
|
|
if ( requests.hasOwnProperty( request ) ) {
|
|
shariff_get_share_counts( requests[ request ][ 0 ], requests[ request ][ 3 ], containers );
|
|
}
|
|
}
|
|
}
|
|
// get share counts
|
|
function shariff_get_share_counts( share_url, request_url, containers ) {
|
|
// new XMLHttpRequest
|
|
var request = new XMLHttpRequest();
|
|
// load asynchronously
|
|
request.open( 'GET', request_url, true );
|
|
// actions after answer
|
|
request.onload = function() {
|
|
// check if successful
|
|
if ( request.status >= 200 && request.status < 400 ) {
|
|
// add to buttons
|
|
shariff_add_share_counts( share_url, JSON.parse( request.responseText ), containers );
|
|
}
|
|
};
|
|
// start request
|
|
request.send();
|
|
}
|
|
// add share counts
|
|
function shariff_add_share_counts( share_url, data, containers ) {
|
|
// add share counts to buttons
|
|
for ( var d = 0; containers[d]; d++ ) {
|
|
// check if it is the corresponding button set
|
|
if ( containers[d].dataset.url === share_url ) {
|
|
// update total in total number spans
|
|
var shariff_totalnumber = containers[d].getElementsByClassName("shariff-totalnumber");
|
|
for ( var n = 0; shariff_totalnumber[n]; n++ ) {
|
|
if ( data !== null && typeof data.total !== 'undefined' ) {
|
|
shariff_totalnumber[n].innerHTML = data.total;
|
|
}
|
|
}
|
|
// update total in shariff headline
|
|
var shariff_total = containers[d].getElementsByClassName("shariff-total");
|
|
for ( var t = 0; shariff_total[t]; t++ ) {
|
|
if ( data !== null && typeof data.total !== 'undefined' ) {
|
|
shariff_total[t].innerHTML = data.total;
|
|
}
|
|
}
|
|
// loop through all button in this container
|
|
var shariff_count = containers[d].getElementsByClassName("shariff-count");
|
|
for ( var s = 0; shariff_count[s]; s++ ) {
|
|
// add share count, if we have one, and make it visible
|
|
if ( data !== null && typeof data[shariff_count[s].dataset.service] !== 'undefined' && ( typeof containers[d].dataset.hidezero === 'undefined' || ( containers[d].dataset.hidezero === '1' && data[shariff_count[s].dataset.service] > 0 ) ) ) {
|
|
shariff_count[s].innerHTML = data[shariff_count[s].dataset.service];
|
|
shariff_count[s].style.opacity = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// add event listener to call main shariff function after DOM
|
|
document.addEventListener( 'DOMContentLoaded', shariff_share_counts, false );
|