init commit

This commit is contained in:
zino
2021-02-16 23:07:41 +01:00
parent ec3fc78e0f
commit 12b4ef5db4
5000 changed files with 2596132 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<title>Config Page</title>
</head>
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<div id="app"></div>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="config.js" type="text/javascript"></script>
<h2>Configure This</h2>
<p>Just kidding... hello world.</p>
</body>
</html>

View File

@@ -0,0 +1,259 @@
.pp-offcanvas-body {
position: absolute !Important;
top: 50% !important;
-ms-transform: translateY(-50%) !important;
transform: translateY(-50%) !important;
}
.pp-offcanvas-content {
overflow: hidden !important;
width: 10vw !important;
}
.pp-offcanvas-custom-content {
margin-bottom: 2vw;
font-size: 1vw;
}
.pp-offcanvas-custom-content i {
font-size: 2vw;
}
img#sidebarLogo {
width: 6vw;
height: 6vw;
max-width: 512px;
max-height: 512px;
}
.pp-offcanvas-custom-content:hover i,
.pp-offcanvas-custom-content:hover p {
color: #00aedb;
}
.pp-offcanvas-custom-content i {
color: #ffffff;
}
#slideOut {
right: 0;
color: #ffffff;
background: #444;
}
.slideToggle {
width: .8vw;
height: 10vw;
}
.slideToggle i {
font-size: 1.4vw;
}
#slideIn {
left: 0;
width: .8vw;
height: 10vw;
background: black;
color: #ffffff;
}
#slideIn i {
position: relative !important;
}
.center {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.centerBoth {
margin: 0;
position: absolute;
top: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
font-size: 1.4vw;
}
#modal-5fb29d747a583 .pp-modal.layout-standard {
width: 30vw !important;
height: 20vw !important;
}
.fl-node-5fb29d747a583 .pp-modal .pp-modal-title,
#modal-5fb29d747a583 .pp-modal .pp-modal-title {
padding: .5vw .5vw !important;
font-size: 1.2vw !important;
}
.pp-infobox-icon-inner span:before {
font-size: 2vw !important;
}
span.pp-infobox-title-prefix {
font-size: 1vw;
}
.pp-infobox-title {
font-size: 1vw;
}
.pp-infobox-description {
font-size: .8vw;
}
.modalClose {
right: -.5vw;
top: -.5vw;
position: absolute;
}
.pp-modal-close.box-top-right {
top: -.6vw !important;
right: -.6vw !important;
}
.pp-modal-close {
border-radius: 0 !important;
width: 1.2vw !important;
height: 1.2vw !important;
padding: .55vw !important;
}
.pp-modal-close .bar-wrap {
display: contents !important;
}
.pp-modal-close .bar-wrap .bar-1 {
top: .55vw !important;
}
.pp-modal-close .bar-wrap .bar-2 {
top: .55vw !important;
}
.pp-infobox-wrap {
margin-right: .1vw;
margin-left: .2vw;
margin-top: .1vw;
margin-bottom: .1vw;
}
.pp-modal {
margin: 0 !important;
}
.pp-modal-container {
overflow: hidden !important;
}
.pp-modal-wrap {
z-index: 99 !important;
}
.pp-modal-wrap {
overflow: hidden !important;
}
#slideInOverlay i {
color: white;
}
.vertical-center {
margin: 0;
position: absolute;
top: 50%;
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
.pp-accordion-item {
margin-bottom: .2vw !important;
}
.pp-accordion-button {
padding: 0 1vw 0 1vw !important;
}
.pp-accordion-item .pp-accordion-content {
padding: 0 1vw 0 1vw;
}
td.min {
width: 1%;
white-space: nowrap;
}
/*#afTable td {*/
/* width: 33%;*/
/* white-space: nowrap;*/
/* padding: .1vw;*/
/*}*/
/*#afTable td, .pp-modal p {*/
/* font-size: .7vw;*/
/* margin: 0;*/
/*}*/
.streamerInfoTable td {
width: 33%;
white-space: nowrap;
padding: .1vw;
}
.streamerInfoTable td, .pp-modal p {
font-size: .7vw;
margin: 0;
}
.streamerInfoTable {
margin: .5vw 0 0.5vw 0;
}
/*#afTable {*/
/* margin: .5vw 0 0.5vw 0;*/
/*}*/
.pp-accordion-item .pp-accordion-content {
padding: .5vw 1vw .5vw 1vw !important;
}
.pp-accordion-button-label {
font-size: .8vw;
}
.pp-modal .pp-modal-title,
#modal-5fb29d747a583 .pp-modal .pp-modal-title {
font-size: 1vw !important;
}
.pp-modal .pp-modal-content {
width: 30vw !important;
height: 17.5vw !important;
}
.mask {
display: none;
/*This hides the mask*/
}
.ajax {
background-position-x: left;
background-position-y: center;
position: relative;
background-image: url(https://zinomedia.de/wp_hq/pkrstarsbotextension/wp-content/uploads/sites/8/2020/11/ajax-loader-1.gif);
background-size: 1vw 1vw;
z-index: 1000;
background-repeat: no-repeat;
}
.pp-modal-header {
border-top-left-radius: 0;
border-top-right-radius: 0;
}

View File

@@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery load() Demo</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
</head>
<body>
<!--<div id="box">-->
<!-- <h2>Click button to load new content inside DIV box</h2>-->
<!--</div>-->
<!--<button type="button">Load Content</button>-->
<script>
$(document).ready(function() {
// $('html').load("https://zinomedia.de/wp_hq");
$('body').load("https://zinomedia.de/wp_hq/pkrstarsbotextension");
// $("button").click(function() {
// $('body').load('https://zinomedia.de/wp_hq/pkrstarsbot/index.php body');
// $('body').load("https://zinomedia.de/wp_hq/pkrstarsbotextension");
// $.get("https://zinomedia.de/wp_hq/pkrstarsbot body", function(data) {
// $("body").replaceWith(data);
// });
// $.ajax({
// url: "https://zinomedia.de/wp_hq/pkrstarsbot",
// success: function(data) {
// $(data).contents().appendTo("body");
// }
// });
// $.get('https://zinomedia.de/pokerstarsbot/', {}, function(data) {
// var data = data.replace('<body', '<body><div id="body"').replace('</body>', '</div></body>');
// var body = $(data).filter('#body');
// //... do what you want with body ...
// });
// });
});
</script>
</body>
</html>

View File

@@ -0,0 +1,425 @@
"use strict";
var elements = new Object();
var modalActive = 0;
const wpjson = "https://zinomedia.de/wp_hq/pkrstarsbotextension/wp-json";
const production = 0;
document.addEventListener("DOMContentLoaded", function(event) {
defer(function() {
console.log("jQuery is now loaded");
init();
});
});
function init() {
// Append
jQuery(".pp-offcanvas-content").append('<div id="slideOut" class="slideToggle vertical-center pp-offcanvas-5fb1907e2d646-close"><i class="fas fa-caret-left center"></i></div>');
jQuery(".pp-modal-container").append('<div id="slideInOverlay" class="slideToggle vertical-center"><i class="fas fa-caret-right center"></i></div>');
// Draggable
jQuery(".pp-modal").draggable({
containment: "#main",
scroll: false,
});
elements = {
"sidebarLinks": {
"1": { obj: jQuery(".pp-offcanvas-1"), callback: openModalStreamerInfo, extraClass: "modal-5fb29d747a583" },
"2": { obj: jQuery(".pp-offcanvas-2"), callback: emptyCallback },
"3": { obj: jQuery(".pp-offcanvas-3"), callback: emptyCallback },
"4": { obj: jQuery(".pp-offcanvas-4"), callback: emptyCallback },
"5": { obj: jQuery(".pp-offcanvas-5"), callback: emptyCallback },
"6": { obj: jQuery(".pp-offcanvas-6"), callback: emptyCallback },
},
"sidebarToggles": {
"slideIn": { obj: jQuery("#slideIn"), callback: sidebarSlideIn },
"slideOut": { obj: jQuery("#slideOut"), callback: sidebarSlideOut },
"slideInOverlay": { obj: jQuery("#slideInOverlay"), callback: sidebarSlideInOverlay },
},
"buttons": {
"sample": { obj: jQuery("#sampleButton") },
},
"modals": {
"streamerInfo": {
"obj": jQuery("#modal-5fb29d747a583"),
"header": jQuery("#modal-5fb29d747a583 .pp-modal-body"),
"container": jQuery("#modal-5fb29d747a583 .pp-modal"),
"close": jQuery("#modal-5fb29d747a583 .pp-modal-close"),
"enabled": 0,
// "intervalDelay": 60000,
"callback": emptyCallback,
"values": {
"af": {
"header": jQuery("span").filter(function() { return (jQuery(this).text() === 'Aggression Factor AF') })[0],
"text": jQuery("span").filter(function() { return (jQuery(this).text() === 'Aggression Factor AF') }).parent()[0].nextElementSibling.children[0],
"overall": jQuery("#afOverall")[0],
"flop": jQuery("#afFlop")[0],
"turn": jQuery("#afTurn")[0],
"river": jQuery("#afRiver")[0],
"refresh": function() {
// loaderAF();
initLoader("af", ["flop", "turn", "river"]);
apirequest("/extension/v1/af", { "betrounds": ["flop", "turn", "river"] }, setAF, "overall");
apirequest("/extension/v1/af", { "betrounds": ["flop"] }, setAF, "flop");
apirequest("/extension/v1/af", { "betrounds": ["turn"] }, setAF, "turn");
apirequest("/extension/v1/af", { "betrounds": ["river"] }, setAF, "river");
},
"startInterval": function() {
startInterval("af");
},
"stopInterval": function() {
stopInterval("af");
},
"intervalID": 0,
"intervalDelay": 60000,
},
"threebet": {
"header": jQuery("span").filter(function() { return (jQuery(this).text() === '3Bet') })[0],
"text": jQuery("span").filter(function() { return (jQuery(this).text() === '3Bet') }).parent()[0].nextElementSibling.children[0],
"overall": jQuery("#3betOverall")[0],
"refresh": function() {
// loader3Bet();
initLoader("threebet", ["overall"]);
apirequest("/extension/v1/3bet", { "betrounds": ["holecards", "flop", "turn", "river"] }, set3Bet);
},
"startInterval": function() {
startInterval("threebet");
},
"stopInterval": function() {
stopInterval("threebet");
},
"intervalID": 0,
"intervalDelay": 60000,
},
"blinds": {
"header": jQuery("span").filter(function() { return (jQuery(this).text() === 'Cash Game Blinds Spent') })[0],
"text": jQuery("span").filter(function() { return (jQuery(this).text() === 'Cash Game Blinds Spent') }).parent()[0].nextElementSibling.children[0],
"big_blind_play": jQuery("#bigBlindSpentPlay")[0],
"small_blind_play": jQuery("#smallBlindSpentPlay")[0],
"total_blind_play": jQuery("#totalBlindSpentPlay")[0],
"big_blind_real": jQuery("#bigBlindSpentReal")[0],
"small_blind_real": jQuery("#smallBlindSpentReal")[0],
"total_blind_real": jQuery("#totalBlindSpentReal")[0],
"refresh": function() {
initLoader("blinds", ["big_blind_play", "small_blind_play", "total_blind_play", "big_blind_real", "small_blind_real", "total_blind_real"]);
apirequest("/extension/v1/blinds", {}, setBlinds);
},
"startInterval": function() {
startInterval("blinds");
},
"stopInterval": function() {
stopInterval("blinds");
},
"intervalID": 0,
"intervalDelay": 60000,
},
"tournamentwinnings": {
"header": jQuery("span").filter(function() { return (jQuery(this).text() === 'Tournament Winnings') })[0],
"text": jQuery("span").filter(function() { return (jQuery(this).text() === 'Tournament Winnings') }).parent()[0].nextElementSibling.children[0],
"winnings_realmoney": jQuery("#tournamentWinningsRealMoney")[0],
"winnings_playmoney": jQuery("#tournamentWinningsPlayMoney")[0],
"refresh": function() {
initLoader("tournamentwinnings", ["winnings_playmoney", "winnings_realmoney"]);
apirequest("/extension/v1/tournamentwinnings", {}, setTournamentWinnings);
},
"startInterval": function() {
startInterval("tournamentwinnings");
},
"stopInterval": function() {
stopInterval("tournamentwinnings");
},
"intervalID": 0,
"intervalDelay": 60000,
},
"bountywinnings": {
"header": jQuery("span").filter(function() { return (jQuery(this).text() === 'Bounty Winnings') })[0],
"text": jQuery("span").filter(function() { return (jQuery(this).text() === 'Bounty Winnings') }).parent()[0].nextElementSibling.children[0],
"winnings_realmoney": jQuery("#bountyWinningsRealMoney")[0],
"winnings_playmoney": jQuery("#bountyWinningsPlayMoney")[0],
"refresh": function() {
initLoader("bountywinnings", ["winnings_playmoney", "winnings_realmoney"]);
apirequest("/extension/v1/bountywinnings", {}, setBountyWinnings);
},
"startInterval": function() {
startInterval("bountywinnings");
},
"stopInterval": function() {
stopInterval("bountywinnings");
},
"intervalID": 0,
"intervalDelay": 60000,
},
}
},
},
};
// Center
elements.modals.streamerInfo.container.addClass("center");
sidebarClick();
eventListeners();
// Testing / Production
if (!production) {
let auth = {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDU3MDUxNzEsIm9wYXF1ZV91c2VyX2lkIjoiVTE2MzUwMDkwIiwidXNlcl9pZCI6IjE2MzUwMDkwIiwiY2hhbm5lbF9pZCI6IjE2MzUwMDkwIiwicm9sZSI6ImJyb2FkY2FzdGVyIiwiaXNfdW5saW5rZWQiOmZhbHNlLCJwdWJzdWJfcGVybXMiOnsibGlzdGVuIjpbImJyb2FkY2FzdCIsIndoaXNwZXItVTE2MzUwMDkwIiwiZ2xvYmFsIl0sInNlbmQiOlsiYnJvYWRjYXN0Iiwid2hpc3Blci0qIl19fQ.AOmTlG4RoZhfm7YixnrgcTw_lhsOHCd-UwfM4QCBUGU",
"channelId": 16350090,
};
sessionStorage.setItem('auth', JSON.stringify(auth));
var obj = JSON.parse(sessionStorage.auth);
console.log(obj);
}
else {
window.Twitch.ext.onAuthorized(function(auth) {
console.log('The JWT that will be passed to the EBS is', auth.token);
console.log('The channel ID is', auth.channelId);
console.log('The client ID is', auth.clientId);
console.log('The userId ID is', auth.userId);
sessionStorage.setItem('auth', JSON.stringify(auth));
var obj = JSON.parse(sessionStorage.auth);
console.log(obj);
});
}
}
// function loaderAF() {
// let elem = elements.modals.streamerInfo.values.af;
// ["flop", "turn", "river", "overall"].forEach(function(entry) {
// let elem = elements.modals.streamerInfo.values.af[entry];
// elem.textContent = '';
// elem.nextSibling.nextSibling.textContent = '';
// jQuery(elem).addClass("ajax");
// jQuery(elem.nextSibling.nextSibling).addClass("ajax");
// });
// }
function initLoader(name, nodes) {
let elem = elements.modals.streamerInfo.values[name];
nodes.forEach(function(entry) {
let elem = elements.modals.streamerInfo.values[name][entry];
elem.textContent = '';
// if (typeof(elem.nextSibling.nextSibling.textContent) != 'undefined' && elem.nextSibling.nextSibling.textContent != null)
// elem.nextSibling.nextSibling.textContent = '';
if (elem.hasOwnProperty("nextSibling.nextSibling.textContent"))
elem.nextSibling.nextSibling.textContent = '';
jQuery(elem).addClass("ajax");
jQuery(elem.nextSibling.nextSibling).addClass("ajax");
});
}
function removeLoader(name, nodes) {
let elem = elements.modals.streamerInfo.values[name];
nodes.forEach(function(entry) {
let elem = elements.modals.streamerInfo.values[name][entry];
if (elem.hasOwnProperty("nextSibling.nextSibling.textContent"))
jQuery(elem.nextSibling.nextSibling).removeClass("ajax");
jQuery(elem).removeClass("ajax");
});
}
function startInterval(name) {
console.log("Interval " + name + " starting...");
if (!elements.modals.streamerInfo.values[name].intervalID) {
elements.modals.streamerInfo.values[name].intervalID = setInterval(async() => {
elements.modals.streamerInfo.values[name].refresh();
}, elements.modals.streamerInfo.values[name].intervalDelay);
}
}
function stopInterval(name) {
if (elements.modals.streamerInfo.values[name].intervalID) {
clearTimeout(elements.modals.streamerInfo.values[name].intervalID);
elements.modals.streamerInfo.values[name].intervalID = 0;
}
console.log("Interval " + name + " stopped.");
}
function setBountyWinnings(data) {
console.log(data);
let elem = elements.modals.streamerInfo.values.bountywinnings;
elem.header.textContent = "Bounty Winnings " + data.winnings_realmoney + " | " + data.winnings_playmoney; // header
elem.winnings_playmoney.textContent = data.winnings_playmoney;
elem.winnings_realmoney.textContent = data.winnings_realmoney;
removeLoader("bountywinnings", ["winnings_playmoney", "winnings_realmoney"]);
}
function setTournamentWinnings(data) {
console.log(data);
let elem = elements.modals.streamerInfo.values.tournamentwinnings;
elem.header.textContent = "Tournament Winnings " + data.winnings_realmoney + " | " + data.winnings_playmoney; // header
elem.winnings_playmoney.textContent = data.winnings_playmoney;
elem.winnings_realmoney.textContent = data.winnings_realmoney;
removeLoader("tournamentwinnings", ["winnings_playmoney", "winnings_realmoney"]);
}
function setBlinds(data) {
console.log(data);
let elem = elements.modals.streamerInfo.values.blinds;
elem.header.textContent = "Cash Game Blinds Spent " + data.total_real + " | " + data.total_play; // header
elem.big_blind_play.textContent = data.big_blind_play;
elem.small_blind_play.textContent = data.small_blind_play;
elem.total_blind_play.textContent = data.total_play;
elem.big_blind_real.textContent = data.big_blind_real;
elem.small_blind_real.textContent = data.small_blind_real;
elem.total_blind_real.textContent = data.total_real;
removeLoader("blinds", ["big_blind_play", "small_blind_play", "total_blind_play", "big_blind_real", "small_blind_real", "total_blind_real"]);
// ["big_blind", "small_blind", "total"].forEach(function(entry) {
// jQuery(elem.entry).removeClass("ajax");
// });
// jQuery(elem.nextSibling.nextSibling).removeClass("ajax");
}
function set3Bet(data) {
console.log(data);
let elem = elements.modals.streamerInfo.values.threebet.overall;
elem.textContent = data.threebet;
elem.nextSibling.nextSibling.textContent = "Based on " + data.unique_handids + " records"
elements.modals.streamerInfo.values.threebet.header.textContent = "3Bet " + data.threebet;
jQuery(elem).removeClass("ajax");
jQuery(elem.nextSibling.nextSibling).removeClass("ajax");
}
function setAF(data, args) {
console.log(data);
let elem = elements.modals.streamerInfo.values.af[args];
elem.textContent = data.af;
elem.nextSibling.nextSibling.textContent = "Based on " + data.unique_handids + " records"
if (args == "overall")
elements.modals.streamerInfo.values.af.header.textContent = "Aggression Factor (AF) " + data.af;
jQuery(elem).removeClass("ajax");
jQuery(elem.nextSibling.nextSibling).removeClass("ajax");
}
function eventListeners() {
elements.buttons.sample.obj.bind('click', function() {
// console.log("clicked");
// apirequest("/extension/v1/3bet", { "betrounds": ["holecards", "flop", "turn", "river"] }, set3Bet);
apirequest("/extension/v1/tournamentwinnings", {}, setTournamentWinnings);
// apirequest("/extension/v1/af", { "betrounds": ["flop", "turn", "river"] }, setAF, "overall");
// elements.modals.streamerInfo.values.af.refresh();
});
}
function apirequest(route, data, callback, args) {
let auth = JSON.parse(sessionStorage.auth);
// Add authentication
data["token"] = auth.token;
data["channelID"] = auth.channelId;
// console.log(data);
let url = wpjson + route;
jQuery.ajax({
method: 'POST',
url: url,
data: data,
dataType: 'json',
success: function(receivedData) {
callback(receivedData, args);
},
});
}
function sidebarSlideInOverlay() {
elements.sidebarToggles.slideIn.obj.click();
// elements.sidebarToggles.slideInOverlay.obj.hide();
}
function sidebarSlideIn() {
// elements.sidebarToggles["slideIn"].obj.hide();
}
function active_modal() {
// Check if a modal is active
let enabled;
for (const [key, node] of Object.entries(elements["modals"])) {
enabled = node.enabled;
}
console.log("enabled: " + enabled);
return enabled;
}
function sidebarSlideOut() {
// if (!active_modal()) {
// elements.sidebarToggles["slideIn"].obj.delay(450).show(0);
// }
// else {
// elements.sidebarToggles.slideInOverlay.obj.delay(450).show(0);
// }
}
function openModalStreamerInfo() {
elements.modals.streamerInfo.enabled = 1; // caution: never set back to 0, use?
for (const [key, node] of Object.entries(elements["modals"])) {
for (let [key, value] of Object.entries(node.values)) {
value.refresh();
value.startInterval();
}
}
// elements.modals.streamerInfo.values.af.refresh();
// elements.modals.streamerInfo.values.af.startInterval();
}
function modalStreamerInfo() {
console.log("clicked");
}
function emptyCallback() {
console.log("empty callback");
return;
}
function sidebarClick() {
for (const [key, node] of Object.entries(elements["sidebarLinks"])) {
node.obj.addClass(node.extraClass);
node.obj.click(function() {
node.callback(node);
});
}
for (const [key, node] of Object.entries(elements["sidebarToggles"])) {
node.obj.click(function() {
node.callback();
});
}
for (const [key, node] of Object.entries(elements["modals"])) {
node.close.click(function() {
node.enabled = 0;
for (let [key, value] of Object.entries(node.values)) {
value.stopInterval();
}
});
}
}
function defer(method) {
if (window.jQuery) {
method();
}
else {
setTimeout(function() { defer(method) }, 50);
}
}

View File

@@ -0,0 +1,12 @@
let token, userId;
const twitch = window.Twitch.ext;
twitch.onContext((context) => {
twitch.rig.log(context);
});
twitch.onAuthorized((auth) => {
token = auth.token;
userId = auth.userId;
});

View File

@@ -0,0 +1,9 @@
window.addEventListener('message', (event) => {
console.log(event);
});
//debugger;
//const local = window.frameElement.attributes.getNamedItem('helperUrl');
//const online = 'https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js';
//const el = document.createElement('script');
//el.src = local ? local.value : online;
//document.head.appendChild(el);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Live Config (Broadcaster) Page</title>
</head>
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<div id="app" class="full-height"></div>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="viewer.js" type="text/javascript"></script>
<h2>And We're Live!</h2>
<p>Would you care to cycle a color?</p>
<div>
<input type="button" id="cycle" disabled="disabled" value="Yes, I would" />
</div>
<div style="float: left; position: relative; left: 50%">
<div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">
</div>
</div>
<div id="list">
</div>
</body>
</html>

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Viewer Page</title>
</head>
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<div id="app" class="full-height"></div>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="viewer.js" type="text/javascript"></script>
<h2>Hello, World!</h2>
<p>Would you care to cycle a color?</p>
<div>
<input type="button" id="cycle" disabled="disabled" value="Yes, I would" />
</div>
<div style="float: left; position: relative; left: 50%">
<div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">
</div>
</div>
<div id="list">
</div>
</body>
</html>

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Viewer Page</title>
</head>
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<div id="app" class="full-height"></div>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="viewer.js" type="text/javascript"></script>
<h2>Hello, World!</h2>
<p>Would you care to cycle a color?</p>
<div>
<input type="button" id="cycle" disabled="disabled" value="Yes, I would" />
</div>
<div style="float: left; position: relative; left: 50%">
<div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">
</div>
</div>
<div id="list">
</div>
</body>
</html>

View File

@@ -0,0 +1,94 @@
<!DOCTYPE html>
<html>
<head>
<title>Viewer Page</title>
</head>
<body>
<!--<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>-->
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<!--<script src="jquery-3.3.1.min.js" type="text/javascript"></script>-->
<!--<script src="viewer.js" type="text/javascript"></script>-->
<!--<link rel="stylesheet" href="style.css">-->
<div id="playerContainer">
<div id="playerItem1" class="module">
<i class="fas fa-baseball-ball"></i>
<h1>12</h1>
<h5>Aggression Factor (AF)</h5>
</div>
<div id="playerItem2" class="module">
<i class="fas fa-baseball-ball"></i>
<h1>12%</h1>
<h5>Aggression Factor (AF)</h5>
</div>
<div id="playerItem3" class="module">
<i class="fas fa-baseball-ball"></i>
<h1>8</h1>
<h5>Aggression Factor (AF)</h5>
</div>
<div id="playerItem4" class="module">
<i class="fas fa-baseball-ball"></i>
<h1>7</h1>
<h5>Aggression Factor (AF)</h5>
</div>
<div id="playerItem5" class="module">
<i class="fas fa-baseball-ball"></i>
<h1>8</h1>
<h5>Aggression Factor (AF)</h5>
</div>
<div id="playerItem6" class="module">
<i class="fas fa-baseball-ball"></i>
<h1>22</h1>
<h5>Aggression Factor (AF)</h5>
</div>
</div>
<!-- <div class="grid">-->
<!-- <div class="module">1</div>-->
<!-- <div class="module">2</div>-->
<!-- <div class="module">3</div>-->
<!-- <div class="module">4</div>-->
<!-- <div class="module">5</div>-->
<!-- <div class="module">6</div>-->
<!-- <div class="module">7</div>-->
<!-- <div class="module">8</div>-->
<!-- <div class="module">9</div>-->
<!-- <div class="module">10</div>-->
<!-- <div class="module">11</div>-->
<!-- <div class="module">12</div>-->
<!-- <div class="module">13</div>-->
<!-- <div class="module">14</div>-->
<!-- <div class="module">15</div>-->
<!--</div>-->
<!--<h2>Hello, World!</h2>-->
<!--<p>Would you care to cycle a color?</p>-->
<!--<div>-->
<!-- <input type="button" id="cycle" disabled="disabled" value="Yes, I would" />-->
<!--</div>-->
<!--<div style="float: left; position: relative; left: 50%">-->
<!-- <div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">-->
<!-- </div>-->
<!--</div>-->
<!--<div id="list">-->
<!--</div>-->
</body>
</html>

View File

@@ -0,0 +1,145 @@
#container {
display: grid;
grid-template-columns: 500px;
grid-template-rows: 50px 400px 50px;
}
#item1 {
background: red;
}
#main {
background: blue;
}
#item3 {
background: yellow;
}
nav.primary-navigation {
margin: 0 auto;
display: block;
padding: 0;
text-align: center;
font-size: 16px;
}
nav.primary-navigation ul li {
list-style: none;
margin: 0 auto;
border-left: 2px solid #3ca0e7;
display: inline-block;
padding: 0 30px;
position: relative;
text-decoration: none;
text-align: center;
font-family: arvo;
}
nav.primary-navigation li a {
color: black;
}
nav.primary-navigation li a:hover {
color: #3ca0e7;
}
nav.primary-navigation li:hover {
cursor: pointer;
}
nav.primary-navigation ul li ul {
visibility: hidden;
opacity: 0;
position: absolute;
padding-left: 0;
left: 0;
display: none;
background: white;
}
nav.primary-navigation ul li:hover>ul,
nav.primary-navigation ul li ul:hover {
visibility: visible;
opacity: 1;
display: block;
min-width: 250px;
text-align: left;
padding-top: 20px;
box-shadow: 0px 3px 5px -1px #ccc;
}
nav.primary-navigation ul li ul li {
clear: both;
width: 100%;
text-align: left;
margin-bottom: 20px;
border-style: none;
}
nav.primary-navigation ul li ul li a:hover {
padding-left: 10px;
border-left: 2px solid #3ca0e7;
transition: all 0.3s ease;
}
a {
text-decoration: none;
}
a:hover {
color: #3ca0e7;
}
ul li ul li a {
transition: all 0.5s ease;
}
div#playerContainer {
width: 100%;
height: 100%;
display: grid;
grid-template-rows: 1fr 1fr;
grid-template-columns: 1fr 1fr 1fr;
grid-template-areas:
"playerItem1 playerItem2 playerItem3"
"playerItem4 playerItem5 playerItem6"
}
.module {
background: #ccc;
text-align: center;
font-size: 16px;
margin: 10px;
}
.module i {
font-size: 30px;
}
.blurred-box{
position: relative;
width: 250px;
height: 350px;
top: calc(50% - 175px);
left: calc(50% - 125px);
background: inherit;
border-radius: 2px;
overflow: hidden;
}
.blurred-box:after{
content: '';
width: 300px;
height: 300px;
background: inherit;
position: absolute;
left: -25px;
left position
right: 0;
top: -25px;
top position
bottom: 0;
box-shadow: inset 0 0 0 200px rgba(255,255,255,0.05);
filter: blur(10px);
}

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Viewer Page</title>
</head>
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<div id="app" class="full-height"></div>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="viewer.js" type="text/javascript"></script>
<h2>Hello, World!</h2>
<p>Would you care to cycle a color?</p>
<div>
<input type="button" id="cycle" disabled="disabled" value="Yes, I would" />
</div>
<div style="float: left; position: relative; left: 50%">
<div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">
</div>
</div>
<div id="list">
</div>
</body>
</html>

View File

@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html>
<head>
<title>Viewer Page</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="stylesheet" href="style.css">
</head>
<body>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="viewer.js" type="text/javascript"></script>
<div id="container">
<div id="item1">
<nav role="navigation" class="primary-navigation">
<ul>
<li><a href="#" id="player">player</a></li>
<li><a href="#">Work &dtrif;</a>
<ul class="dropdown">
<li><a href="#">Web Development</a></li>
<li><a href="#">Web Design</a></li>
<li><a href="#">Illustration</a></li>
<li><a href="#">Iconography</a></li>
</ul>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</div>
<div id="main">2</div>
<div id="item3">3</div>
</div>
<!--<h2>Hello, World!</h2>-->
<!--<p>Would you care to cycle a color?</p>-->
<!--<div>-->
<!-- <input type="button" id="cycle" disabled="disabled" value="Yes, I would" />-->
<!--</div>-->
<!--<div style="float: left; position: relative; left: 50%">-->
<!-- <div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">-->
<!-- </div>-->
<!--</div>-->
<!--<div id="list">-->
<!--</div>-->
</body>
</html>

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<title>Viewer Page</title>
</head>
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
<div id="app" class="full-height"></div>
<script src="https://extension-files.twitch.tv/helper/v1/twitch-ext.min.js"></script>
<!-- If you use any external libraries, such as jQuery, you must include
them as part of your extension. Twitch does not allow extensions to link
to external libraries. -->
<script src="jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="viewer.js" type="text/javascript"></script>
<h2>Hello, World!</h2>
<p>Would you care to cycle a color?</p>
<div>
<input type="button" id="cycle" disabled="disabled" value="Yes, I would" />
</div>
<div style="float: left; position: relative; left: 50%">
<div id="color" style="border-radius: 50px; transition: background-color 0.5s ease; margin-top: 30px; width: 100px; height: 100px; background-color: #6441A4; float: left; position: relative; left: -50%">
</div>
</div>
<div id="list">
</div>
</body>
</html>

View File

@@ -0,0 +1,76 @@
var token = "";
var tuid = "";
var ebs = "";
// because who wants to type this every time?
var twitch = window.Twitch.ext;
// create the request options for our Twitch API calls
var requests = {
set: createRequest('POST', 'cycle'),
get: createRequest('GET', 'query')
};
function createRequest(type, method) {
return {
type: type,
url: location.protocol + '//localhost:8081/color/' + method,
success: updateBlock,
error: logError
}
}
function setAuth(token) {
Object.keys(requests).forEach((req) => {
twitch.rig.log('Setting auth headers');
requests[req].headers = { 'Authorization': 'Bearer ' + token }
});
}
twitch.onContext(function(context) {
twitch.rig.log(context);
});
twitch.onAuthorized(function(auth) {
// save our credentials
token = auth.token;
tuid = auth.userId;
// enable the button
$('#cycle').removeAttr('disabled');
setAuth(token);
$.ajax(requests.get);
});
function updateBlock(hex) {
twitch.rig.log('Updating block color');
$('#color').css('background-color', hex);
}
function logError(_, error, status) {
twitch.rig.log('EBS request returned '+status+' ('+error+')');
}
function logSuccess(hex, status) {
// we could also use the output to update the block synchronously here,
// but we want all views to get the same broadcast response at the same time.
twitch.rig.log('EBS request returned '+hex+' ('+status+')');
}
$(function() {
// when we click the cycle button
$('#cycle').click(function() {
if(!token) { return twitch.rig.log('Not authorized'); }
twitch.rig.log('Requesting a color cycle');
$.ajax(requests.set);
});
// listen for incoming broadcast message from our EBS
twitch.listen('broadcast', function (target, contentType, color) {
twitch.rig.log('Received broadcast color');
updateBlock(color);
});
});

View File

@@ -0,0 +1,9 @@
$(document).ready(function() {
$("#player").click(function() {
console.log("loading into main");
$("#main").load("player.html");
});
});