Make crawlers generate page previews
This commit is contained in:
parent
274124c32f
commit
fdda3af826
3 changed files with 94 additions and 0 deletions
44
src/api/save-preview.php
Normal file
44
src/api/save-preview.php
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save preview
|
||||||
|
*
|
||||||
|
* @category API
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace wishthis;
|
||||||
|
|
||||||
|
global $page;
|
||||||
|
|
||||||
|
if (!isset($page)) {
|
||||||
|
http_response_code(403);
|
||||||
|
die('Direct access to this location is not allowed.');
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($_SERVER['REQUEST_METHOD']) {
|
||||||
|
case 'POST':
|
||||||
|
if (isset($_POST['preview'], $_POST['page'])) {
|
||||||
|
$preview = substr($_POST['preview'], 22); // data:image/png;base64,
|
||||||
|
$preview = base64_decode($preview);
|
||||||
|
$preview_filepath = ROOT . '/src/assets/img/screenshots/' . $_POST['page'] . '.png';
|
||||||
|
$preview_create = false;
|
||||||
|
|
||||||
|
$page_filepath = ROOT . 'src/pages/' . $_POST['page'] . '.php';
|
||||||
|
$page = new Page($page_filepath);
|
||||||
|
|
||||||
|
if (file_exists($preview_filepath)) {
|
||||||
|
$preview_age = time() - filemtime($preview_filepath);
|
||||||
|
|
||||||
|
if ($preview_age > Duration::MONTH) {
|
||||||
|
$preview_create = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$preview_create = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($preview_create && $_SESSION['user']->power >= $page->power) {
|
||||||
|
file_put_contents($preview_filepath, $preview);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
33
src/assets/js/html2canvas.js
Normal file
33
src/assets/js/html2canvas.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
window.addEventListener("load", (event) => {
|
||||||
|
/**
|
||||||
|
* Generate page preview
|
||||||
|
*/
|
||||||
|
html2canvas(
|
||||||
|
document.querySelector('body'),
|
||||||
|
{
|
||||||
|
'logging' : false,
|
||||||
|
'x' : window.scrollX,
|
||||||
|
'y' : window.scrollY,
|
||||||
|
'width' : window.innerWidth,
|
||||||
|
'height' : window.innerHeight,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(canvas => {
|
||||||
|
var data = new URLSearchParams();
|
||||||
|
data.append('preview', canvas.toDataURL());
|
||||||
|
data.append('api_token', api.token);
|
||||||
|
data.append('page', $_GET.page);
|
||||||
|
|
||||||
|
/** Save page preview */
|
||||||
|
fetch('/?page=api&module=save-preview', {
|
||||||
|
method : 'POST',
|
||||||
|
body : data
|
||||||
|
})
|
||||||
|
.then(handleFetchError)
|
||||||
|
.then(handleFetchResponse)
|
||||||
|
.then(function(response) {})
|
||||||
|
.finally(function() {});
|
||||||
|
});
|
||||||
|
});
|
|
@ -440,6 +440,23 @@ class Page
|
||||||
<script defer src="/<?= $scriptFomantic ?>?m=<?= $scriptFomanticModified ?>"></script>
|
<script defer src="/<?= $scriptFomantic ?>?m=<?= $scriptFomanticModified ?>"></script>
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/** html2canvas */
|
||||||
|
$CrawlerDetect = new \Jaybizzle\CrawlerDetect\CrawlerDetect();
|
||||||
|
|
||||||
|
if ($CrawlerDetect->isCrawler()) {
|
||||||
|
$scripthtml2canvas1 = 'node_modules/html2canvas/dist/html2canvas.min.js';
|
||||||
|
$scripthtml2canvas1Modified = filemtime($scripthtml2canvas1);
|
||||||
|
?>
|
||||||
|
<script defer src="/<?= $scripthtml2canvas1 ?>?m=<?= $scripthtml2canvas1Modified ?>"></script>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$scripthtml2canvas2 = 'src/assets/js/html2canvas.js';
|
||||||
|
$scripthtml2canvas2Modified = filemtime($scripthtml2canvas2);
|
||||||
|
?>
|
||||||
|
<script defer src="/<?= $scripthtml2canvas2 ?>?m=<?= $scripthtml2canvas2Modified ?>"></script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
/** Default */
|
/** Default */
|
||||||
$scriptDefault = 'src/assets/js/default.js';
|
$scriptDefault = 'src/assets/js/default.js';
|
||||||
$scriptDefaultModified = filemtime($scriptDefault);
|
$scriptDefaultModified = filemtime($scriptDefault);
|
||||||
|
|
Loading…
Reference in a new issue