/**
* SteamWidgets - Steam Widgets for your website
*
* Module: Steam Game/App Widget
*
* Visit: https://github.com/danielbrendel
*/
const STEAMWIDGETS_APP_ENDPOINT = 'http://localhost:8000';
const STEAMWIDGETS_APP_VERSION = 'v1';
/**
* Class SteamAppElem
*
* Handle custom HTML element to render Steam app/game widgets
*/
class SteamAppElem extends HTMLElement
{
storedData = {};
connectedCallback()
{
var appid = (typeof this.attributes.appid !== 'undefined') ? this.attributes.appid.value : null;
var lang = (typeof this.attributes.lang !== 'undefined') ? this.attributes.lang.value : 'english';
var playtext = (typeof this.attributes.playtext !== 'undefined') ? this.attributes.playtext.value : 'Play on Steam';
var author = (typeof this.attributes.author !== 'undefined') ? this.attributes.author.value : 'By :developer';
var onlinecount = (typeof this.attributes.onlinecount !== 'undefined') ? this.attributes.onlinecount.value : null;
var rating = (typeof this.attributes.rating !== 'undefined') ? parseInt(this.attributes.rating.value) : 0;
var width = (typeof this.attributes.width !== 'undefined') ? this.attributes.width.value : null;
var height = (typeof this.attributes.height !== 'undefined') ? this.attributes.height.value : null;
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 styleColorAuthor = (typeof this.attributes['style-color-author'] !== 'undefined') ? this.attributes['style-color-author'].value : null;
var styleColorOnlinecount = (typeof this.attributes['style-color-onlinecount'] !== 'undefined') ? this.attributes['style-color-onlinecount'].value : null;
var styleHideImage = (typeof this.attributes['style-hideimage'] !== 'undefined') ? parseInt(this.attributes['style-hideimage'].value) : 0;
if (appid !== null) {
this.storedData = {
appid: appid,
lang: lang,
playtext: playtext,
author: author,
onlinecount: onlinecount,
rating: rating,
width: width,
height: height,
styleBorder: styleBorder,
styleShadow: styleShadow,
styleColorBackground: styleColorBackground,
styleColorTitle: styleColorTitle,
styleColorDescription: styleColorDescription,
styleColorAuthor: styleColorAuthor,
styleColorOnlinecount: styleColorOnlinecount,
styleHideImage: styleHideImage
};
this.setupWidget(
appid,
lang,
playtext,
author,
onlinecount,
rating,
width,
height,
styleBorder,
styleShadow,
styleColorBackground,
styleColorTitle,
styleColorDescription,
styleColorAuthor,
styleColorOnlinecount,
styleHideImage
);
}
}
setupWidget(appid, lang, playtext, author, onlinecount, rating, width, height, styleBorder, styleShadow, styleColorBackground, styleColorTitle, styleColorDescription, styleColorAuthor, styleColorOnlinecount, styleHideImage)
{
var req = new XMLHttpRequest();
var self = this;
req.onreadystatechange = function() {
if (req.readyState == XMLHttpRequest.DONE) {
let json = JSON.parse(req.responseText);
if (author.indexOf(':developer') !== false) {
let developers = '';
json.data.developers.forEach(function(elem, index) {
developers += elem;
if (index < json.data.developers.length - 1) {
developers += ', ';
}
});
author = author.replace(':developer', developers);
}
if (author.indexOf(':publisher') !== false) {
let publishers = '';
json.data.publishers.forEach(function(elem, index) {
publishers += elem;
if (index < json.data.publishers.length - 1) {
publishers += ', ';
}
});
author = author.replace(':publisher', publishers);
}
if (!document.getElementById('steamwidgets-app-styles')) {
let link = document.createElement('link');
link.id = 'steamwidgets-app-styles';
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = STEAMWIDGETS_APP_ENDPOINT + '/api/resource/query?type=css&module=app&version=' + STEAMWIDGETS_APP_VERSION;
document.getElementsByTagName('head')[0].appendChild(link);
}
let onlineCountText = '';
if ((onlinecount !== null) && (json.data.online_count > 0)) {
onlineCountText = onlinecount;
onlineCountText = onlineCountText.replace(':count', self.readableCount(json.data.online_count));
}
let widgetImageStyle = '';
let widgetStyle = '';
if ((width !== null) || (styleBorder !== null) || (styleShadow !== true) || (styleColorBackground !== null)) {
let widthCode = '';
if (width !== null) {
widthCode = 'max-width: ' + width + 'px;';
}
let borderCode = '';
if (styleBorder !== null) {
if (styleBorder === 'max') {
borderCode = 'border-radius: 25px;';
widgetImageStyle = 'border-top-left-radius: 25px; border-top-right-radius: 25px;';
} else if (styleBorder === 'small') {
borderCode = 'border-radius: 4px;';
widgetImageStyle = 'border-top-left-radius: 4px; border-top-right-radius: 4px;';
} else if (styleBorder === 'none') {
borderCode = 'border-radius: unset;';
widgetImageStyle = 'border-top-left-radius: unset; border-top-right-radius: unset;';
}
}
let shadowCode = '';
if (!styleShadow) {
shadowCode = 'box-shadow: unset;';
}
let bgColor = '';
if (styleColorBackground !== null) {
bgColor = 'background-color: ' + styleColorBackground + ';';
}
widgetStyle = 'style="' + widthCode + borderCode + shadowCode + bgColor + '"';
}
let ratingCode = '';
if (rating) {
ratingCode = '
';
for (let i = 0; i < Math.round(json.data.rating_count / 2); i++) {
ratingCode += '⭐';
}
for (let i = Math.round(json.data.rating_count / 2); i < 5; i++) {
ratingCode += ' ';
}
}
let html = `