diff --git a/ext/upload/theme.php b/ext/upload/theme.php index 82deb489..6d0c6eff 100644 --- a/ext/upload/theme.php +++ b/ext/upload/theme.php @@ -2,23 +2,38 @@ declare(strict_types=1); +use MicroHTML\HTMLElement; +use function MicroHTML\TABLE; +use function MicroHTML\TR; +use function MicroHTML\TD; +use function MicroHTML\SMALL; +use function MicroHTML\rawHTML; +use function MicroHTML\INPUT; +use function MicroHTML\emptyHTML; +use function MicroHTML\NOSCRIPT; +use function MicroHTML\DIV; +use function MicroHTML\BR; +use function MicroHTML\A; + +use function MicroHTML\P; + class UploadTheme extends Themelet { protected bool $has_errors = false; - public function display_block(Page $page) + public function display_block(Page $page): void { - $b = new Block("Upload", $this->build_upload_block(), "left", 20); + $b = new Block("Upload", (string)$this->build_upload_block(), "left", 20); $b->is_content = false; $page->add_block($b); } - public function display_full(Page $page) + public function display_full(Page $page): void { $page->add_block(new Block("Upload", "Disk nearly full, uploads disabled", "left", 20)); } - public function display_page(Page $page) + public function display_page(Page $page): void { global $config, $page; @@ -26,75 +41,69 @@ class UploadTheme extends Themelet $max_size = $config->get_int(UploadConfig::SIZE); $max_kb = to_shorthand_int($max_size); $upload_list = $this->h_upload_list_1(); - $html = " - ".make_form(make_link("upload"), "POST", $multipart=true, 'file_upload')." - - - - $upload_list - -
Common Tags
Common Source
- - (Max file size is $max_kb) - "; + + $form = SHM_FORM(make_link("upload"), "POST", true, "file_upload"); + $form->appendChild( + TABLE( + ["id"=>"large_upload_form", "class"=>"vert"], + TR( + TD(["width"=>"20"], rawHTML("Common Tags")), + TD(["colspan"=>"5"], INPUT(["name"=>"tags", "type"=>"text", "placeholder"=>"tagme", "class"=>"autocomplete_tags", "autocomplete"=>"off"])) + ), + TR( + TD(["width"=>"20"], rawHTML("Common Source")), + TD(["colspan"=>"5"], INPUT(["name"=>"source", "type"=>"text"])) + ), + $upload_list, + TR( + TD(["colspan"=>"6"], INPUT(["id"=>"uploadbutton", "type"=>"submit", "value"=>"Post"])) + ), + ) + ); + $html = emptyHTML( + $form, + SMALL("(Max file size is $max_kb)") + ); $page->set_title("Upload"); $page->set_heading("Upload"); $page->add_block(new NavBlock()); - $page->add_block(new Block("Upload", $html, "main", 20)); + $page->add_block(new Block("Upload", (string)$html, "main", 20)); if ($tl_enabled) { - $page->add_block(new Block("Bookmarklets", $this->h_bookmarklets(), "left", 20)); + $page->add_block(new Block("Bookmarklets", (string)$this->h_bookmarklets(), "left", 20)); } } - protected function h_upload_list_1(): string + protected function h_upload_list_1(): HTMLElement { global $config; - $upload_list = ""; + $upload_list = emptyHTML(); $upload_count = $config->get_int(UploadConfig::COUNT); $tl_enabled = ($config->get_string(UploadConfig::TRANSLOAD_ENGINE, "none") != "none"); $accept = $this->get_accept(); - if ($tl_enabled) { - $upload_list .= " - - Files - URLs - Post-Specific Tags - - "; + $upload_list->appendChild( + TR( + TD(["colspan"=>$tl_enabled ? 2 : 4], "Files"), + $tl_enabled ? TD(["colspan"=>"2"], "URLs") : emptyHTML(), + TD(["colspan"=>"2"], "Post-Specific Tags"), + ) + ); - for ($i=0; $i<$upload_count; $i++) { - $upload_list .= " - - - - - - "; - } - } else { - $upload_list .= " - - Files - Post-Specific Tags - - "; - - for ($i=0; $i<$upload_count; $i++) { - $upload_list .= " - - - - - "; - } + for ($i=0; $i<$upload_count; $i++) { + $upload_list->appendChild( + TR( + TD(["colspan"=>$tl_enabled ? 2 : 4], INPUT(["type"=>"file", "name"=>"data${i}[]", "accept"=>$accept, "multiple"=>true])), + $tl_enabled ? TD(["colspan"=>"2"], INPUT(["type"=>"text", "name"=>"url${i}"])) : emptyHTML(), + TD(["colspan"=>"2"], INPUT(["type"=>"text", "name"=>"tags${i}", "class"=>"autocomplete_tags", "autocomplete"=>"off"])), + ) + ); } return $upload_list; } - protected function h_bookmarklets(): string + protected function h_bookmarklets(): HTMLElement { global $config; $link = make_http(make_link("upload")); @@ -103,45 +112,51 @@ class UploadTheme extends Themelet $max_size = $config->get_int(UploadConfig::SIZE); $max_kb = to_shorthand_int($max_size); $delimiter = $config->get_bool('nice_urls') ? '?' : '&'; - $html = ''; $js='javascript:( - function() { - if(typeof window=="undefined" || !window.location || window.location.href=="about:blank") { - window.location = "'. $main_page .'"; - } - else if(typeof document=="undefined" || !document.body) { - window.location = "'. $main_page .'?url="+encodeURIComponent(window.location.href); - } - else if(window.location.href.match("\/\/'. $_SERVER["HTTP_HOST"] .'.*")) { - alert("You are already at '. $title .'!"); - } - else { - var tags = prompt("Please enter tags", "tagme"); - if(tags != "" && tags != null) { - var link = "'. $link . $delimiter .'url="+location.href+"&tags="+tags; - var w = window.open(link, "_blank"); - } - } - } - )();'; - $html .= 'Upload to '.$title.''; - $html .= ' (Drag & drop onto your bookmarks toolbar, then click when looking at a post)'; + function() { + if(typeof window=="undefined" || !window.location || window.location.href=="about:blank") { + window.location = "'. $main_page .'"; + } + else if(typeof document=="undefined" || !document.body) { + window.location = "'. $main_page .'?url="+encodeURIComponent(window.location.href); + } + else if(window.location.href.match("\/\/'. $_SERVER["HTTP_HOST"] .'.*")) { + alert("You are already at '. $title .'!"); + } + else { + var tags = prompt("Please enter tags", "tagme"); + if(tags != "" && tags != null) { + var link = "'. $link . $delimiter .'url="+location.href+"&tags="+tags; + var w = window.open(link, "_blank"); + } + } + } + )();'; + $html1 = P( + A(["href"=>$js], "Upload to $title"), + rawHTML(' (Drag & drop onto your bookmarks toolbar, then click when looking at a post)') + ); // Bookmarklet checks if shimmie supports ext. If not, won't upload to site/shows alert saying not supported. $supported_ext = join(" ", DataHandlerExtension::get_all_supported_exts()); $title = "Booru to " . $config->get_string(SetupConfig::TITLE); // CA=0: Ask to use current or new tags | CA=1: Always use current tags | CA=2: Always use new tags - $html .= '

'. $title . ' (Click when looking at a post page. Works on sites running Shimmie / Danbooru / Gelbooru. (This also grabs the tags / rating / source!))'; + $js = ' + javascript: + var ste="'. $link . $delimiter .'url="; + var supext="'.$supported_ext.'"; + var maxsize="'.$max_kb.'"; + var CA=0; + void(document.body.appendChild(document.createElement("script")).src="'.make_http(get_base_href())."/ext/upload/bookmarklet.js".'") + '; + $html2 = P( + A(["href"=>$js], $title), + rawHTML("(Click when looking at a post page. Works on sites running Shimmie / Danbooru / Gelbooru. (This also grabs the tags / rating / source!))"), + ); - return $html; + return emptyHTML($html1, $html2); } /** @@ -153,19 +168,19 @@ class UploadTheme extends Themelet $tl_enabled = ($config->get_string(UploadConfig::TRANSLOAD_ENGINE, "none") != "none"); $accept = $this->get_accept(); - $upload_list = " - - File - - - "; + $upload_list = emptyHTML( + TR( + TD("File"), + TD(INPUT(["name"=>"data[]", "type"=>"file", "accept"=>$accept])) + ) + ); if ($tl_enabled) { - $upload_list .=" - - or URL - - - "; + $upload_list->appendChild( + TR( + TD("or URL"), + TD(INPUT(["name"=>"url", "type"=>"text"])) + ) + ); } $max_size = $config->get_int(UploadConfig::SIZE); @@ -174,27 +189,36 @@ class UploadTheme extends Themelet $image = Image::by_id($image_id); $thumbnail = $this->build_thumb_html($image); - $html = " -

Replacing Post ID ".$image_id."
Please note: You will have to refresh the post page, or empty your browser cache.

" - .$thumbnail."
" - .make_form(make_link("upload/replace/".$image_id), "POST", $multipart=true)." - - - $upload_list - - -
Source
- - (Max file size is $max_kb) - "; + $form = SHM_FORM(make_link("upload/replace/".$image_id), "POST", true); + $form->appendChild(emptyHTML( + INPUT(["type"=>"hidden", "name"=>"image_id", "value"=>$image_id]), + TABLE( + ["id"=>"large_upload_form", "class"=>"vert"], + $upload_list, + TR(TD("Source"), TD(["colspan"=>3], INPUT(["name"=>"source", "type"=>"text"]))), + TR(TD(["colspan"=>4], INPUT(["id"=>"uploadbutton", "type"=>"submit", "value"=>"Post"]))), + ) + )); + + $html = emptyHTML( + P( + "Replacing Post ID $image_id", + BR(), + "Please note: You will have to refresh the post page, or empty your browser cache." + ), + $thumbnail, + BR(), + $form, + SMALL("(Max file size is $max_kb)"), + ); $page->set_title("Replace Post"); $page->set_heading("Replace Post"); $page->add_block(new NavBlock()); - $page->add_block(new Block("Upload Replacement Post", $html, "main", 20)); + $page->add_block(new Block("Upload Replacement Post", (string)$html, "main", 20)); } - public function display_upload_status(Page $page, array $image_ids) + public function display_upload_status(Page $page, array $image_ids): void { global $user; @@ -217,7 +241,7 @@ class UploadTheme extends Themelet } } - public function display_upload_error(Page $page, string $title, string $message) + public function display_upload_error(Page $page, string $title, string $message): void { // this message has intentional HTML in it... $message = str_contains($message, "already has hash") ? $message : html_escape($message); @@ -225,7 +249,7 @@ class UploadTheme extends Themelet $this->has_errors = true; } - protected function build_upload_block(): string + protected function build_upload_block(): HTMLElement { global $config; @@ -235,17 +259,21 @@ class UploadTheme extends Themelet $max_kb = to_shorthand_int($max_size); // - return " -
- ".make_form(make_link("upload"), "POST", $multipart=true)." - - - - - (Max file size is $max_kb) - -
- "; + $form = SHM_FORM(make_link("upload"), "POST", true); + $form->appendChild( + emptyHTML( + INPUT(["id"=>"data[]", "name"=>"data[]", "size"=>"16", "type"=>"file", "accept"=>$accept, "multiple"=>true]), + INPUT(["name"=>"tags", "type"=>"text", "placeholder"=>"tagme", "class"=>"autocomplete_tags", "required"=>true, "autocomplete"=>"off"]), + INPUT(["type"=>"submit", "value"=>"Post"]), + ) + ); + + return DIV( + ["class"=>'mini_upload'], + $form, + SMALL("(Max file size is $max_kb)"), + NOSCRIPT(BR(), A(["href"=>make_link("upload")], "Larger Form")) + ); } protected function get_accept(): string diff --git a/themes/danbooru/upload.theme.php b/themes/danbooru/upload.theme.php index 8a42bdf6..dc40c6b3 100644 --- a/themes/danbooru/upload.theme.php +++ b/themes/danbooru/upload.theme.php @@ -4,13 +4,13 @@ declare(strict_types=1); class CustomUploadTheme extends UploadTheme { - public function display_block(Page $page) + public function display_block(Page $page): void { // this theme links to /upload // $page->add_block(new Block("Upload", $this->build_upload_block(), "left", 20)); } - public function display_page(Page $page) + public function display_page(Page $page): void { $page->disable_left(); parent::display_page($page); diff --git a/themes/danbooru2/upload.theme.php b/themes/danbooru2/upload.theme.php index 8a42bdf6..dc40c6b3 100644 --- a/themes/danbooru2/upload.theme.php +++ b/themes/danbooru2/upload.theme.php @@ -4,13 +4,13 @@ declare(strict_types=1); class CustomUploadTheme extends UploadTheme { - public function display_block(Page $page) + public function display_block(Page $page): void { // this theme links to /upload // $page->add_block(new Block("Upload", $this->build_upload_block(), "left", 20)); } - public function display_page(Page $page) + public function display_page(Page $page): void { $page->disable_left(); parent::display_page($page); diff --git a/themes/rule34v2/upload.theme.php b/themes/rule34v2/upload.theme.php index 766ac422..42b2e903 100644 --- a/themes/rule34v2/upload.theme.php +++ b/themes/rule34v2/upload.theme.php @@ -1,19 +1,22 @@ add_block(new Block("Upload", $this->build_upload_block(), "head", 20)); $page->add_block(new Block("Upload", $this->build_upload_block(), "left", 20)); } - public function display_full(Page $page) + public function display_full(Page $page): void { $page->add_block(new Block("Upload", "Disk nearly full, uploads disabled", "head", 20)); } - public function display_page(Page $page) + public function display_page(Page $page): void { parent::display_page($page); $html = " @@ -22,9 +25,8 @@ class CustomUploadTheme extends UploadTheme $page->add_block(new Block(null, $html, "main", 19)); } - protected function build_upload_block(): string + protected function build_upload_block(): HTMLElement { - $url = make_link("upload"); - return "Upload"; + return A(["href"=>make_link("upload"), "style"=>'font-size: 2em; display: block;'], "Upload"); } }