2022-01-03 01:16:27 +01:00
// USAGE:
// place this file somewhere in the webroot and then
// python3 -m copyparty --js-browser /memes/meadup.js
//
// FEATURES:
// * adds an onscreen keyboard for operating a media center remotely,
2022-01-14 22:25:06 +01:00
// relies on https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/very-bad-idea.py
2022-01-03 01:16:27 +01:00
// * adds an interactive anime girl (if you can find the dependencies)
var hambagas = [
"https://www.youtube.com/watch?v=pFA3KGp4GuU"
] ;
// keybaord,
// onscreen keyboard by @steinuil
function initKeybaord ( BASE _URL , HAMBAGA , consoleLog , consoleError ) {
document . querySelector ( '.keybaord-container' ) . innerHTML = `
< div class = "keybaord-body" >
< div class = "keybaord-row keybaord-row-1" >
< div class = "keybaord-key" data - keybaord - key = "Escape" >
esc
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F1" >
F1
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F2" >
F2
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F3" >
F3
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F4" >
F4
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F5" >
F5
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F6" >
F6
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F7" >
F7
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F8" >
F8
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F9" >
F9
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F10" >
F10
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F11" >
F11
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "F12" >
F12
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Insert" >
ins
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Delete" >
del
< / d i v >
< / d i v >
< div class = "keybaord-row keybaord-row-2" >
< div class = "keybaord-key" data - keybaord - key = "\`" >
\ `
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "1" >
1
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "2" >
2
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "3" >
3
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "4" >
4
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "5" >
5
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "6" >
6
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "7" >
7
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "8" >
8
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "9" >
9
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "0" >
0
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "-" >
-
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "=" >
=
< / d i v >
< div class = "keybaord-key keybaord-backspace" data - keybaord - key = "BackSpace" >
backspace
< / d i v >
< / d i v >
< div class = "keybaord-row keybaord-row-3" >
< div class = "keybaord-key keybaord-tab" data - keybaord - key = "Tab" >
tab
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "q" >
q
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "w" >
w
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "e" >
e
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "r" >
r
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "t" >
t
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "y" >
y
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "u" >
u
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "i" >
i
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "o" >
o
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "p" >
p
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "[" >
[
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "]" >
]
< / d i v >
< div class = "keybaord-key keybaord-enter" data - keybaord - key = "Return" >
enter
< / d i v >
< / d i v >
< div class = "keybaord-row keybaord-row-4" >
< div class = "keybaord-key keybaord-capslock" data - keybaord - key = "HAMBAGA" >
🍔
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "a" >
a
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "s" >
s
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "d" >
d
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "f" >
f
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "g" >
g
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "h" >
h
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "j" >
j
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "k" >
k
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "l" >
l
< / d i v >
< div class = "keybaord-key" data - keybaord - key = ";" >
;
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "'" >
'
< / d i v >
< div class = "keybaord-key keybaord-backslash" data - keybaord - key = "\\" >
\ \
< / d i v >
< / d i v >
< div class = "keybaord-row keybaord-row-5" >
< div class = "keybaord-key keybaord-lshift" data - keybaord - key = "Shift_L" >
shift
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "\\" >
\ \
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "z" >
z
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "x" >
x
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "c" >
c
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "v" >
v
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "b" >
b
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "n" >
n
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "m" >
m
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "," >
,
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "." >
.
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "/" >
/
< / d i v >
< div class = "keybaord-key keybaord-rshift" data - keybaord - key = "Shift_R" >
shift
< / d i v >
< / d i v >
< div class = "keybaord-row keybaord-row-6" >
< div class = "keybaord-key keybaord-lctrl" data - keybaord - key = "Control_L" >
ctrl
< / d i v >
< div class = "keybaord-key keybaord-super" data - keybaord - key = "Meta_L" >
win
< / d i v >
< div class = "keybaord-key keybaord-alt" data - keybaord - key = "Alt_L" >
alt
< / d i v >
< div class = "keybaord-key keybaord-spacebar" data - keybaord - key = "space" >
space
< / d i v >
< div class = "keybaord-key keybaord-altgr" data - keybaord - key = "Alt_R" >
altgr
< / d i v >
< div class = "keybaord-key keybaord-what" data - keybaord - key = "Menu" >
menu
< / d i v >
< div class = "keybaord-key keybaord-rctrl" data - keybaord - key = "Control_R" >
ctrl
< / d i v >
< / d i v >
< div class = "keybaord-row" >
< div class = "keybaord-key" data - keybaord - key = "XF86AudioLowerVolume" >
🔉
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "XF86AudioRaiseVolume" >
🔊
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Left" >
⬅ ️
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Down" >
⬇ ️
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Up" >
⬆ ️
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Right" >
➡ ️
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Page_Up" >
PgUp
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Page_Down" >
PgDn
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "Home" >
🏠
< / d i v >
< div class = "keybaord-key" data - keybaord - key = "End" >
End
< / d i v >
< / d i v >
< div >
` ;
function arraySample ( array ) {
return array [ Math . floor ( Math . random ( ) * array . length ) ] ;
}
function sendMessage ( msg ) {
return fetch ( BASE _URL , {
method : "POST" ,
headers : {
"Content-Type" : "application/x-www-form-urlencoded;charset=UTF-8" ,
} ,
body : "msg=" + encodeURIComponent ( msg ) ,
} ) . then (
( r ) => r . text ( ) , // so the response body shows up in network tab
( err ) => consoleError ( err )
) ;
}
const MODIFIER _ON _CLASS = "keybaord-modifier-on" ;
const KEY _DATASET = "data-keybaord-key" ;
const KEY _CLASS = "keybaord-key" ;
const modifiers = new Set ( )
function toggleModifier ( button , key ) {
button . classList . toggle ( MODIFIER _ON _CLASS ) ;
if ( modifiers . has ( key ) ) {
modifiers . delete ( key ) ;
} else {
modifiers . add ( key ) ;
}
}
function popModifiers ( ) {
let modifierString = "" ;
modifiers . forEach ( ( mod ) => {
document . querySelector ( "[" + KEY _DATASET + "='" + mod + "']" )
. classList . remove ( MODIFIER _ON _CLASS ) ;
modifierString += mod + "+" ;
} ) ;
modifiers . clear ( ) ;
return modifierString ;
}
Array . from ( document . querySelectorAll ( "." + KEY _CLASS ) ) . forEach ( ( button ) => {
const key = button . dataset . keybaordKey ;
button . addEventListener ( "click" , ( ev ) => {
switch ( key ) {
case "HAMBAGA" :
sendMessage ( arraySample ( HAMBAGA ) ) ;
break ;
case "Shift_L" :
case "Shift_R" :
case "Control_L" :
case "Control_R" :
case "Meta_L" :
case "Alt_L" :
case "Alt_R" :
toggleModifier ( button , key ) ;
break ;
default : {
const keyWithModifiers = popModifiers ( ) + key ;
consoleLog ( keyWithModifiers ) ;
sendMessage ( "key " + keyWithModifiers )
. then ( ( ) => consoleLog ( keyWithModifiers + " OK" ) ) ;
}
}
} ) ;
} ) ;
}
// keybaord integration
( function ( ) {
var o = mknod ( 'div' ) ;
clmod ( o , 'keybaord-container' , 1 ) ;
ebi ( 'op_msg' ) . appendChild ( o ) ;
o = mknod ( 'style' ) ;
o . innerHTML = `
. keybaord - body {
display : flex ;
flex - flow : column nowrap ;
margin : . 6 em 0 ;
}
. keybaord - row {
display : flex ;
}
. keybaord - key {
border : 1 px solid rgba ( 128 , 128 , 128 , 0.2 ) ;
width : 41 px ;
height : 40 px ;
display : flex ;
justify - content : center ;
align - items : center ;
}
. keybaord - key : active {
background - color : lightgrey ;
}
. keybaord - key . keybaord - modifier - on {
background - color : lightblue ;
}
. keybaord - key . keybaord - backspace {
width : 82 px ;
}
. keybaord - key . keybaord - tab {
width : 55 px ;
}
. keybaord - key . keybaord - enter {
width : 69 px ;
}
. keybaord - key . keybaord - capslock {
width : 80 px ;
}
. keybaord - key . keybaord - backslash {
width : 88 px ;
}
. keybaord - key . keybaord - lshift {
width : 65 px ;
}
. keybaord - key . keybaord - rshift {
width : 103 px ;
}
. keybaord - key . keybaord - lctrl {
width : 55 px ;
}
. keybaord - key . keybaord - super {
width : 55 px ;
}
. keybaord - key . keybaord - alt {
width : 55 px ;
}
. keybaord - key . keybaord - altgr {
width : 55 px ;
}
. keybaord - key . keybaord - what {
width : 55 px ;
}
. keybaord - key . keybaord - rctrl {
width : 55 px ;
}
. keybaord - key . keybaord - spacebar {
width : 302 px ;
}
` ;
document . head . appendChild ( o ) ;
initKeybaord ( '/' , hambagas ,
( msg ) => { toast . inf ( 2 , msg . toString ( ) ) } ,
( msg ) => { toast . err ( 30 , msg . toString ( ) ) } ) ;
} ) ( ) ;
// live2d (dumb pointless meme)
// dependencies for this part are not tracked in git
// so delete this section if you wanna use this file
// (or supply your own l2d model and js)
( function ( ) {
var o = mknod ( 'link' ) ;
o . setAttribute ( 'rel' , 'stylesheet' ) ;
o . setAttribute ( 'href' , "/bad-memes/pio.css" ) ;
document . head . appendChild ( o ) ;
o = mknod ( 'style' ) ;
o . innerHTML = '.pio-container{text-shadow:none;z-index:1}' ;
document . head . appendChild ( o ) ;
o = mknod ( 'div' ) ;
clmod ( o , 'pio-container' , 1 ) ;
o . innerHTML = '<div class="pio-action"></div><canvas id="pio" width="280" height="500"></canvas>' ;
document . body . appendChild ( o ) ;
var remaining = 3 ;
for ( var a of [ 'pio' , 'l2d' , 'fireworks' ] ) {
import _js ( ` /bad-memes/ ${ a } .js ` , function ( ) {
2022-01-14 22:25:06 +01:00
if ( remaining -- > 1 )
2022-01-03 01:16:27 +01:00
return ;
o = mknod ( 'script' ) ;
o . innerHTML = 'var pio = new Paul_Pio({"selector":[],"mode":"fixed","hidden":false,"content":{"close":"ok bye"},"model":["/bad-memes/sagiri/model.json"]});' ;
document . body . appendChild ( o ) ;
} ) ;
}
} ) ( ) ;