-
Notifications
You must be signed in to change notification settings - Fork 4
/
EmbedScratch.php
89 lines (79 loc) · 2.37 KB
/
EmbedScratch.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/*
Copyright (C) 2018 Apple502j All rights reversed.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Embedding Scratch in MediaWiki
<scratch> Tag
Some parts are from ScratchSig
https://github.com/LLK/mw-ScratchSig2/blob/master/ScratchSig2.php
*/
use MediaWiki\Hook\ParserFirstCallInitHook;
if (!defined('MEDIAWIKI')) {
die();
}
class EmbedScratch implements ParserFirstCallInitHook {
public function onParserFirstCallInit($parser) {
$parser->setHook('scratch', array(__CLASS__, 'renderEmbedScratch'));
}
public static function renderEmbedScratch($input, $argv, $parser) {
$project = '';
$width = $width_max = 485;
$height = $height_max = 402;
if (!empty($argv['project'])) {
$project = $argv['project'];
} elseif (!empty($input)) {
$project = $input;
}
if (
!empty($argv['width']) &&
ctype_digit($argv['width']) &&
($width_max >= (int)$argv['width'])
) {
$width = (int)$argv['width'];
}
if (
!empty($argv['height']) &&
ctype_digit($argv['height']) &&
($height_max >= (int)$argv['height'])
) {
$height = (int)$argv['height'];
}
if (empty($project)) {
return '';
}
$paddingTop = (int)($height / $width * 100);
return Html::rawElement(
'div',
[
'style' => "max-width:{$width}px",
'class' => 'mw-embed-scratch'
],
Html::rawElement(
'div',
['style' => "position:relative;padding-top:{$paddingTop}%"],
Html::element(
'iframe',
[
'allowtransparency' => 'true',
'width' => '100%',
'height' => '100%',
'src' => "https://scratch.mit.edu/projects/{$project}/embed/",
'framborder' => '0',
'allowfullscreen' => '',
'scrolling' => 'no',
'style' => 'overflow:hidden;position:absolute;top:0;left:0;border:none;'
]
)
)
);
}
}