/**
* SteamWidgets - Steam Widgets for your website
*
* Module: Steam Group Widget
*
* Visit: https://github.com/danielbrendel
*/
const STEAMWIDGETS_GROUP_ENDPOINT = 'http://localhost:8000';
const STEAMWIDGETS_GROUP_VERSION = 'v1';
/**
* Class SteamGroupElem
*
* Handle custom HTML element to render Steam group widgets
*/
class SteamGroupElem extends HTMLElement
{
HEADLINE_MAX_LEN = 30;
DESCRIPTION_MAX_LEN = 40;
storedData = {};
oldHeader = '';
connectedCallback()
{
var group = (typeof this.attributes.group !== 'undefined') ? this.attributes.group.value : null;
var online = (typeof this.attributes.online !== 'undefined') ? this.attributes.online.value : 'Online';
var ingame = (typeof this.attributes.ingame !== 'undefined') ? this.attributes.ingame.value : 'In-Game';
var members = (typeof this.attributes.members !== 'undefined') ? this.attributes.members.value : 'Members';
var viewtext = (typeof this.attributes.viewtext !== 'undefined') ? this.attributes.viewtext.value : 'View group';
var showImage = (typeof this.attributes['show-image'] !== 'undefined') ? parseInt(this.attributes['show-image'].value) : 1;
var styleBorder = (typeof this.attributes['style-border'] !== 'undefined') ? this.attributes['style-border'].value : null;
var styleShadow = (typeof this.attributes['style-shadow'] !== 'undefined') ? parseInt(this.attributes['style-shadow'].value) : 1;
var styleColorBackground = (typeof this.attributes['style-color-background'] !== 'undefined') ? this.attributes['style-color-background'].value : null;
var styleColorTitle = (typeof this.attributes['style-color-title'] !== 'undefined') ? this.attributes['style-color-title'].value : null;
var styleColorDescription = (typeof this.attributes['style-color-description'] !== 'undefined') ? this.attributes['style-color-description'].value : null;
var styleColorStatsCount = (typeof this.attributes['style-color-stats-count'] !== 'undefined') ? this.attributes['style-color-stats-count'].value : null;
var styleColorStatsLabel = (typeof this.attributes['style-color-stats-label'] !== 'undefined') ? this.attributes['style-color-stats-label'].value : null;
if (group !== null) {
this.storedData = {
group: group,
online: online,
ingame: ingame,
members: members,
viewtext: viewtext,
showImage: showImage,
styleBorder: styleBorder,
styleShadow: styleShadow,
styleColorBackground: styleColorBackground,
styleColorTitle: styleColorTitle,
styleColorDescription: styleColorDescription,
styleColorStatsCount: styleColorStatsCount,
styleCOlorStatsLabel: styleColorStatsLabel
};
this.setupWidget(
group,
online,
ingame,
members,
viewtext,
showImage,
styleBorder,
styleShadow,
styleColorBackground,
styleColorTitle,
styleColorDescription,
styleColorStatsCount,
styleColorStatsLabel
);
}
}
setupWidget(group, online, ingame, members, viewtext, showImage, styleBorder, styleShadow, styleColorBackground, styleColorTitle, styleColorDescription, styleColorStatsCount, styleColorStatsLabel)
{
var req = new XMLHttpRequest();
var self = this;
req.onreadystatechange = function() {
if (req.readyState == XMLHttpRequest.DONE) {
let json = JSON.parse(req.responseText);
if (!document.getElementById('steamwidgets-group-styles')) {
let link = document.createElement('link');
link.id = 'steamwidgets-group-styles';
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = STEAMWIDGETS_GROUP_ENDPOINT + '/api/resource/query?type=css&module=group&version=' + STEAMWIDGETS_GROUP_VERSION;
document.getElementsByTagName('head')[0].appendChild(link);
}
let borderCodeGroup = '';
let borderCodeGroupPreview = '';
if (styleBorder !== null) {
if (styleBorder === 'max') {
borderCodeGroup = '';
borderCodeGroupPreview = '';
} else if (styleBorder === 'small') {
borderCodeGroup = 'border-radius: 4px;';
borderCodeGroupPreview = 'steam-group-preview-small';
} else if (styleBorder === 'none') {
borderCodeGroup = 'border-radius: unset;';
borderCodeGroupPreview = 'steam-group-preview-none';
}
}
let groupBaseStyle = '';
if (!styleShadow) {
groupBaseStyle += 'box-shadow: unset;';
}
if (borderCodeGroup.length > 0) {
groupBaseStyle += borderCodeGroup;
}
if (styleColorBackground !== null) {
groupBaseStyle += 'background-color: ' + styleColorBackground + ';';
}
let headline = json.data.groupHeadline;
if (headline.length >= self.HEADLINE_MAX_LEN) {
headline = headline.substr(0, self.HEADLINE_MAX_LEN - 3) + '...';
}
let description = json.data.groupSummary;
if (description.length >= self.DESCRIPTION_MAX_LEN) {
description = description.substr(0, self.DESCRIPTION_MAX_LEN - 3) + '...';
}
let html = `
0) ? 'style="' + groupBaseStyle + '"' : '') + `>
` + headline + `
` + description + `
` + self.readableCount(json.data.members.count) + `
` + members + `
` + self.readableCount(json.data.members.online) + `
`+ online + `
` + self.readableCount(json.data.members.in_game) + `
`+ ingame + `
`;
self.innerHTML = html;
}
};
req.open('GET', STEAMWIDGETS_GROUP_ENDPOINT + '/api/query/group?group=' + group, true);
req.send();
}
updateWidget()
{
this.setupWidget(
this.storedData.group,
this.storedData.online,
this.storedData.ingame,
this.storedData.members,
this.storedData.viewtext,
this.storedData.showImage,
this.storedData.styleBorder,
this.storedData.styleShadow,
this.storedData.styleColorBackground,
this.storedData.styleColorTitle,
this.storedData.styleColorDescription,
this.storedData.styleColorStatsCount,
this.storedData.styleColorStatsLabel
);
}
changeLang(online, ingame, members, viewtext)
{
this.storedData.online = online;
this.storedData.ingame = ingame;
this.storedData.members = members;
this.storedData.viewtext = viewtext;
this.setupWidget(
this.storedData.group,
this.storedData.online,
this.storedData.ingame,
this.storedData.members,
this.storedData.viewtext,
this.storedData.showImage,
this.storedData.styleBorder,
this.storedData.styleShadow,
this.storedData.styleColorBackground,
this.storedData.styleColorTitle,
this.storedData.styleColorDescription,
this.storedData.styleColorStatsCount,
this.storedData.styleColorStatsLabel
);
}
setImageVisibility(visibility)
{
this.storedData.showImage = visibility;
this.setupWidget(
this.storedData.group,
this.storedData.online,
this.storedData.ingame,
this.storedData.members,
this.storedData.viewtext,
this.storedData.showImage,
this.storedData.styleBorder,
this.storedData.styleShadow,
this.storedData.styleColorBackground,
this.storedData.styleColorTitle,
this.storedData.styleColorDescription,
this.storedData.styleColorStatsCount,
this.storedData.styleColorStatsLabel
);
}
readableCount(count)
{
const COUNT_MILLION = 1000000;
const COUNT_HUNDREDTHOUSAND = 100000;
const COUNT_TENTHOUSAND = 10000;
const COUNT_THOUSAND = 1000;
if (count >= COUNT_MILLION) {
return (Math.round(count / COUNT_MILLION, 1)).toString() + 'M';
} else if ((count < COUNT_MILLION) && (count >= COUNT_HUNDREDTHOUSAND)) {
return (Math.round(count / COUNT_THOUSAND, 1)).toString() + 'K';
} else if ((count < COUNT_HUNDREDTHOUSAND) && (count >= COUNT_TENTHOUSAND)) {
return (Math.round(count / COUNT_THOUSAND, 1)).toString() + 'K';
} else if ((count < COUNT_TENTHOUSAND) && (count >= COUNT_THOUSAND)) {
return (Math.round(count / COUNT_THOUSAND, 1)).toString() + 'K';
} else {
return count.toString();
}
}
}
window.customElements.define('steam-group', SteamGroupElem);
/**
* Class SteamGroup
*
* Dynamically create a Steam group widget via JavaScript
*/
class SteamGroup
{
elem = null;
selident = null;
cfg = {};
constructor(selector, config = {})
{
this.selident = selector;
this.cfg = config;
var group = (typeof config.group !== 'undefined') ? config.group : null;
var members = (typeof config.members !== 'undefined') ? config.members : 'Members';
var online = (typeof config.online !== 'undefined') ? config.online : 'Online';
var ingame = (typeof config.ingame !== 'undefined') ? config.ingame : 'In-Game';
var viewtext = (typeof config.viewtext !== 'undefined') ? config.viewtext : 'View group';
var showImage = (typeof config.showImage !== 'undefined') ? config.showImage : true;
if (typeof showImage === 'boolean') {
showImage = (showImage) ? 1 : 0;
}
var styleBorder = null;
var styleShadow = 1;
var styleColorBackground = null;
var styleColorTitle = null;
var styleColorDescription = null;
var styleColorStatsCount = null;
var styleColorStatsLabel = null;
if (typeof config.style !== 'undefined') {
styleBorder = (typeof config.style.border !== 'undefined') ? config.style.border : null;
styleShadow = (typeof config.style.shadow !== 'undefined') ? config.style.shadow : 1;
styleColorBackground = (typeof config.style.colorBackground !== 'undefined') ? config.style.colorBackground : null;
styleColorTitle = (typeof config.style.colorTitle !== 'undefined') ? config.style.colorTitle : null;
styleColorDescription = (typeof config.style.colorDescription !== 'undefined') ? config.style.colorDescription : null;
styleColorStatsCount = (typeof config.style.colorStatsCount !== 'undefined') ? config.style.colorStatsCount : null;
styleColorStatsLabel = (typeof config.style.colorStatsLabel !== 'undefined') ? config.style.colorStatsLabel : null;
}
if (typeof styleShadow === 'boolean') {
styleShadow = (styleShadow) ? 1 : 0;
}
this.elem = document.createElement('steam-group');
this.elem.setAttribute('group', group);
this.elem.setAttribute('online', online);
this.elem.setAttribute('members', members);
this.elem.setAttribute('ingame', ingame);
this.elem.setAttribute('viewtext', viewtext);
this.elem.setAttribute('show-image', showImage);
this.elem.setAttribute('style-border', styleBorder);
this.elem.setAttribute('style-shadow', styleShadow);
this.elem.setAttribute('style-color-background', styleColorBackground);
this.elem.setAttribute('style-color-title', styleColorTitle);
this.elem.setAttribute('style-color-description', styleColorDescription);
this.elem.setAttribute('style-color-stats-count', styleColorStatsCount);
this.elem.setAttribute('style-color-stats-label', styleColorStatsLabel);
let sel = document.querySelector(selector);
if (sel) {
sel.appendChild(this.elem);
}
}
updateWidget()
{
this.elem.updateWidget();
}
changeLang(online, ingame, members, viewtext)
{
this.elem.changeLang(online, ingame, members, viewtext);
}
setImageVisibility(visibility)
{
this.elem.setImageVisibility(visibility);
}
remove()
{
this.elem.remove();
}
}