diff --git a/inc/config.php b/inc/config.php
index 25031bfb..71b0fbf4 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -943,10 +943,6 @@
// Location of thumbnail to use for deleted images.
$config['image_deleted'] = 'static/deleted.png';
- // When a thumbnailed image is going to be the same (in dimension), just copy the entire file and use
- // that as a thumbnail instead of resizing/redrawing.
- $config['minimum_copy_resize'] = false;
-
// Maximum image upload size in bytes.
$config['max_filesize'] = 10 * 1024 * 1024; // 10MB
// Maximum image dimensions.
@@ -985,15 +981,6 @@
// Set this to true if you're using Linux and you can execute `md5sum` binary.
$config['gnu_md5'] = false;
- // Use Tesseract OCR to retrieve text from images, so you can use it as a spamfilter.
- $config['tesseract_ocr'] = false;
-
- // Tesseract parameters
- $config['tesseract_params'] = '';
-
- // Tesseract preprocess command
- $config['tesseract_preprocess_command'] = 'convert -monochrome %s -';
-
// Number of posts in a "View Last X Posts" page
$config['noko50_count'] = 50;
// Number of posts a thread needs before it gets a "View Last X Posts" page.
diff --git a/inc/error.php b/inc/error.php
index fed211ac..4c8eb19e 100644
--- a/inc/error.php
+++ b/inc/error.php
@@ -1,222 +1,9 @@
0);
- }
-
- private static function errnoToLogLevel(int $errno): int {
- switch ($errno) {
- default:
- case \E_ERROR:
- case \E_PARSE:
- case \E_CORE_ERROR:
- case \E_COMPILE_ERROR:
- case \E_RECOVERABLE_ERROR:
- return \LOG_EMERG;
- case \E_USER_ERROR:
- return \LOG_ERR;
- case \E_WARNING:
- case \E_CORE_WARNING:
- case \E_COMPILE_WARNING:
- case \E_USER_WARNING:
- return \LOG_WARNING;
- case \E_NOTICE:
- case \E_DEPRECATED:
- case \E_USER_NOTICE:
- case \E_USER_DEPRECATED:
- return \LOG_NOTICE;
- }
- }
-
- public static function handle_error(
- int $level,
- string $message,
- callable $logger,
- bool $display_details,
- string $file,
- int $line,
- string $trace_str,
- array $trace
- ): void {
- global $board, $mod, $config, $db_error;
-
- $newline = self::isCli() ? '\n' : '
';
-
- if (self::$error_recursion !== false) {
- list($o_message, $o_file, $o_line, $o_trace) = self::$error_recursion;
- if ($display_details) {
- echo("Error recursion detected with $message at $file:$line. Backtrace:$newline$trace_str{$newline}Original error: $o_message at $o_file:$o_line. Original backtrace:$newline$o_trace");
- } else {
- echo("Error recursion detected with $message{$newline}Original error: $o_message");
- }
- exit;
- }
-
- self::$error_recursion = [ $message, $file, $line, $trace_str ];
-
- // Message for the system, be it cli or error logging facility.
- $sys_msg = "Error: $message at $file:$line.\nBacktrace: $trace_str\n";
-
- if (self::isCli()) {
- // Running from CLI. Always display the details.
- echo($sys_msg);
- exit;
- }
-
- // Log the error if we aren't running from cli.
- $logger($level, $sys_msg);
-
- // Recycled code.
- $debug_stuff = [];
- if ($config['debug']) {
- if (isset($db_error)) {
- $debug_stuff = \array_combine([ 'SQLSTATE', 'Error code', 'Error message' ], $db_error);
- }
- $debug_stuff['backtrace'] = $trace;
-
- // Remove the password from SQL errors.
- $pw = $config['db']['password'];
- $debug_callback = function($item) use (&$debug_callback, $pw) {
- if (\is_array($item)) {
- $item = \array_filter($item, $debug_callback);
- }
- return $item !== $pw || !$pw;
- };
- $debug_stuff = \array_map($debug_callback, $debug_stuff);
- }
-
- \header("{$_SERVER['SERVER_PROTOCOL']} 500 Internal Server Error");
-
- // Error via json.
- if (isset($_POST['json_response'])) {
- \header('Content-Type: text/json; charset=utf-8');
- $data = [ 'error' => $message ];
- if (!empty($config) && $config['debug'] && !empty($debug_stuff)) {
- $data['debug'] = $debug_stuff;
- }
- echo(\json_encode($data));
- exit;
- }
-
- // Pretty print.
- die(Element('page.html', [
- 'config' => $config,
- 'title' => _('Error'),
- 'subtitle' => _('An error has occured.'),
- 'body' => Element('error.html', [
- 'config' => $config,
- 'message' => $message,
- 'mod' => $mod,
- 'board' => isset($board) ? $board : false,
- 'debug' => \str_replace("\n", '
', utf8tohtml(print_r($debug_stuff, true)))
- ])
- ]));
- }
-
- private function default_logger(int $level, string $message) {
- global $config;
-
- if (isset($config['syslog']) && $config['syslog']) {
- _syslog($level, $message);
- } else {
- \error_log($message);
- }
- }
-
- public function __construct() {
- $this->include_details = self::isCli();
- $this->logger_fn = [ __CLASS__, 'default_logger' ];
- }
-
- public function setIncludeDetails(bool $include_details) {
- $this->include_details = $include_details;
- }
-
- public function setLogger(?callable $logger_fn) {
- $this->logger_fn = $logger_fn !== null ? $logger_fn : [ __CLASS__, 'default_logger' ];
- }
-
- public function installGlobally() {
- $logger_fn = $this->logger_fn;
- $include_details = $this->include_details || self::isCli();
-
- \set_error_handler(function($errno, $errstr, $errfile, $errline) use ($logger_fn, $include_details) {
- $errno = \error_reporting() & $errno;
- if ($errno !== 0) {
- $level = self::errnoToLogLevel($errno);
-
- // https://stackoverflow.com/a/35930682
- $e = new \Exception();
- $trace_str = $e->getTraceAsString();
- $trace = $e->getTrace();
- self::handle_error($level, $errstr, $logger_fn, $include_details, $errfile, $errline, $trace_str, $trace);
- }
- return false;
- });
-
- \set_exception_handler(function($exception) use ($logger_fn, $include_details) {
- $message = $exception->getMessage();
- $file = $exception->getFile();
- $line = $exception->getLine();
- $trace_str = $exception->getTraceAsString();
- $trace = $exception->getTrace();
-
- self::handle_error(\LOG_EMERG, $message, $logger_fn, $include_details, $file, $line, $trace_str, $trace);
- });
-
- \register_shutdown_function(function() use ($logger_fn, $include_details) {
- $error = \error_get_last();
- if ($error !== null) {
- $level = self::errnoToLogLevel($error['type']);
- $message = $error['message'];
- $file = $error['file'];
- $line = $error['line'];
-
- self::handle_error($level, $message, $logger_fn, $include_details, $file, $line, '', []);
- }
- });
- }
-}
-
-/**
- * Install a fancy error handler with the given logger.
- *
- * @param ?callable $logger Called when there is to log something. Use null to use the minimal default implementation.
- * The callable is invoke with two parameters, the first being the log level (integer), as
- * listed by the syslog constants, the second is the log message (string).
- * Consider that $config may not have been initialized yet.
- */
-function install_error_handler(bool $basic, ?callable $logger_fn): void {
- global $config;
-
- $logger_fn ??= function($level, $message) use ($config) {
- if (isset($config['syslog']) && $config['syslog']) {
- _syslog($level, $message);
- } else {
- \error_log($message);
- }
- };
-
- if (!$basic) {
- \set_error_handler(function($errno, $errstr, $errfile, $errline) use ($config) {
- if (\error_reporting() & $errno) {
- $config['debug'] = true;
- \error("$errstr in $errfile at line $errline");
- }
- return false;
- });
+function error_handler($errno, $errstr, $errfile, $errline) {
+ if (error_reporting() & $errno) {
+ $config['debug'] = true;
+ error("$errstr in $errfile at line $errline");
}
return false;
}
@@ -300,7 +87,7 @@ function error($message, $priority = true, $debug_stuff = false) {
'message' => $message,
'mod' => $mod,
'board' => isset($board) ? $board : false,
- 'debug' => \str_replace("\n", '
', utf8tohtml(\print_r($debug_stuff, true)))
+ 'debug' => str_replace("\n", '
', utf8tohtml(print_r($debug_stuff, true)))
))
]));
}
diff --git a/js/post-menu.js b/js/post-menu.js
index 79cfd868..c2155c00 100644
--- a/js/post-menu.js
+++ b/js/post-menu.js
@@ -104,8 +104,10 @@ function buildMenu(e) {
function addButton(post) {
var $ele = $(post);
+ // Use unicode code with ascii variant selector
+ // https://stackoverflow.com/questions/37906969/how-to-prevent-ios-from-converting-ascii-into-emoji
$ele.find('input.delete').after(
- $('', {href: '#', class: 'post-btn', title: 'Post menu'}).text('►')
+ $('', {href: '#', class: 'post-btn', title: 'Post menu'}).text('\u{25B6}\u{fe0e}')
);
}
diff --git a/post.php b/post.php
index 27a45413..5483600d 100644
--- a/post.php
+++ b/post.php
@@ -1402,13 +1402,13 @@ function handle_post(Context $ctx)
$file['thumbwidth'] = $size[0];
$file['thumbheight'] = $size[1];
} elseif (
- $config['minimum_copy_resize'] &&
+ (($config['strip_exif'] && isset($file['exif_stripped']) && $file['exif_stripped']) || !$config['strip_exif']) &&
$image->size->width <= $config['thumb_width'] &&
$image->size->height <= $config['thumb_height'] &&
$file['extension'] == ($config['thumb_ext'] ? $config['thumb_ext'] : $file['extension'])
) {
// Copy, because there's nothing to resize
- coopy($file['tmp_name'], $file['thumb']);
+ copy($file['tmp_name'], $file['thumb']);
$file['thumbwidth'] = $image->size->width;
$file['thumbheight'] = $image->size->height;
@@ -1551,35 +1551,6 @@ function handle_post(Context $ctx)
}
}
- if ($config['tesseract_ocr'] && $file['thumb'] != 'file') {
- // Let's OCR it!
- $fname = $file['tmp_name'];
-
- if ($file['height'] > 500 || $file['width'] > 500) {
- $fname = $file['thumb'];
- }
-
- if ($fname == 'spoiler') {
- // We don't have that much CPU time, do we?
- } else {
- $tmpname = __DIR__ . "/tmp/tesseract/" . rand(0, 10000000);
-
- // Preprocess command is an ImageMagick b/w quantization
- $error = shell_exec_error(sprintf($config['tesseract_preprocess_command'], escapeshellarg($fname)) . " | " .
- 'tesseract stdin ' . escapeshellarg($tmpname) . ' ' . $config['tesseract_params']);
- $tmpname .= ".txt";
-
- $value = @file_get_contents($tmpname);
- @unlink($tmpname);
-
- if ($value && trim($value)) {
- // This one has an effect, that the body is appended to a post body. So you can write a correct
- // spamfilter.
- $post['body_nomarkup'] .= "" . htmlspecialchars($value) . "";
- }
- }
- }
-
if (!isset($dont_copy_file) || !$dont_copy_file) {
if (isset($file['file_tmp'])) {
if (!@rename($file['tmp_name'], $file['file'])) {
@@ -1627,11 +1598,6 @@ function handle_post(Context $ctx)
}
}
- // Do filters again if OCRing
- if ($config['tesseract_ocr'] && !hasPermission($config['mod']['bypass_filters'], $board['uri']) && !$dropped_post) {
- do_filters($ctx, $post);
- }
-
if (!hasPermission($config['mod']['postunoriginal'], $board['uri']) && $config['robot_enable'] && checkRobot($post['body_nomarkup']) && !$dropped_post) {
undoImage($post);
if ($config['robot_mute']) {
diff --git a/static/banners/just-monika-opt.webp b/static/banners/just-monika-opt.webp
deleted file mode 100644
index 731f985a..00000000
Binary files a/static/banners/just-monika-opt.webp and /dev/null differ
diff --git a/stylesheets/style.css b/stylesheets/style.css
index 815e1853..4a090f33 100644
--- a/stylesheets/style.css
+++ b/stylesheets/style.css
@@ -380,6 +380,7 @@ form table tr td div.center {
.file {
float: left;
+ min-width: 100px;
}
.file:not(.multifile) .post-image {
@@ -390,6 +391,10 @@ form table tr td div.center {
float: none;
}
+.file.multifile {
+ margin: 0 10px 0 0;
+}
+
.file.multifile > p {
width: 0px;
min-width: 100%;
diff --git a/templates/themes/categories/frames.html b/templates/themes/categories/frames.html
index 6b2fac38..1c4673cc 100644
--- a/templates/themes/categories/frames.html
+++ b/templates/themes/categories/frames.html
@@ -16,13 +16,13 @@
border-width: 2px;
margin-right: 15px;
}
-
+
.introduction {
grid-column: 2 / 9;
grid-row: 1;
width: 100%;
}
-
+
.content {
grid-column: 2 / 9;
grid-row: 2;
@@ -35,7 +35,7 @@
gap: 20px;
height: 100vh;
}
-
+
.modlog {
width: 50%;
text-align: left;
@@ -69,7 +69,7 @@
li a.system {
font-weight: bold;
}
-
+
@media (max-width:768px) {
body{
display: grid;
@@ -78,7 +78,7 @@
height: 100vh;
width: 100%;
}
-
+
.introduction {
grid-column: 1;
grid-row: 1;
@@ -96,17 +96,18 @@
grid-column: 1;
grid-row: 3;
width: 100%;
+ word-break: break-all;
}
-
+
.modlog {
width: 100%;
text-align: center;
}
-
+
table {
table-layout: fixed;
}
-
+
table.modlog tr th {
white-space: normal;
word-wrap: break-word;
diff --git a/templates/themes/categories/news.html b/templates/themes/categories/news.html
index 484c4eb0..76722e41 100644
--- a/templates/themes/categories/news.html
+++ b/templates/themes/categories/news.html
@@ -11,7 +11,7 @@
.home-description {
margin: 20px auto 0 auto;
text-align: center;
- max-width: 700px;"
+ max-width: 700px;
}
{{ boardlist.top }}
diff --git a/tmp/tesseract/.gitkeep b/tmp/tesseract/.gitkeep
deleted file mode 100644
index e69de29b..00000000