"; return $html; } public function get_source_editor_html(Image $image): HTMLElement { global $user; return SHM_POST_INFO( "Source Link", DIV( ["style" => "overflow: hidden; white-space: nowrap; max-width: 350px; text-overflow: ellipsis;"], $this->format_source($image->get_source()) ), $user->can(Permissions::EDIT_IMAGE_SOURCE) ? INPUT(["type" => "text", "name" => "source", "value" => $image->get_source()]) : null, link: Extension::is_enabled(SourceHistoryInfo::KEY) ? make_link("source_history/{$image->id}") : null, ); } protected function format_source(?string $source = null): HTMLElement { if (!empty($source)) { if (!str_contains($source, "://")) { $source = "https://" . $source; } $proto_domain = explode("://", $source); $h_source = $proto_domain[1]; if (str_ends_with($h_source, "/")) { $h_source = substr($h_source, 0, -1); } return A(["href" => $source], $h_source); } return rawHTML("Unknown"); } public function get_upload_common_html(): HTMLElement { return TR( TH(["width" => "20"], "Common Source"), TD(["colspan" => "6"], INPUT(["name" => "source", "type" => "text", "placeholder" => "https://..."])) ); } public function get_upload_specific_html(string $suffix): HTMLElement { return TD( INPUT([ "type" => "text", "name" => "source{$suffix}", "value" => ($suffix == 0) ? @$_GET['source'] : null, ]) ); } }