-
Notifications
You must be signed in to change notification settings - Fork 2
/
generate.php
48 lines (48 loc) · 1.53 KB
/
generate.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
// I think that's all for today. See you guys later!
if(isset($_GET['name']) and isset($_GET['selector'])){
header("Content-Type", "text/txt");
$name = $_GET['name'];
$selector = urldecode($_GET['selector']);
echo "function ToUpperCase(text){
return text.toUpperCase();
}
function GenerateLetterImageArray(remains,start=[]){
if(!(remains instanceof Array)) throw new Error('Invalid argument {1}: Expected array');
const char = remains.splice(0,1)[0];
return typeof char === 'undefined' ? start : fetch('letters/'+char+'.png')
.then(res=>res.blob())
.then(blob=>{
const image = new Image();
image.src = URL.createObjectURL(blob);
return Promise.resolve(image);
})
.then(a=>{
start.push(a);
return typeof char === 'undefined' ? Promise.resolve(start) : GenerateLetterImageArray(remains,start);
});
}
async function GenerateCanvas(str){
const canvas = document.createElement('canvas');
canvas.setAttribute('width', (str.length * 43) + 'px');
canvas.setAttribute('height', '43px');
const ctx = canvas.getContext('2d');
const letters = await Promise.all(str.split(''))
.then(GenerateLetterImageArray)
.then(a=>Promise.all([canvas, ctx, a]))
.then(([a, b, c])=>{
c.forEach((d,e)=>{
b.drawImage(d, 43 * e, 0); //image,x,y,w,h
});
return a;
});
return Promise.resolve(canvas);
}
(()=>{
Promise.resolve('$name')
.then(ToUpperCase)
.then(GenerateCanvas)
.then(canvas=>document.querySelector('$selector').append(canvas));
})();";
}
?>