123 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php declare(strict_types=1);
 | |
| 
 | |
| use function MicroHTML\LABEL;
 | |
| use function MicroHTML\A;
 | |
| use function MicroHTML\B;
 | |
| use function MicroHTML\IMG;
 | |
| use function MicroHTML\TABLE;
 | |
| use function MicroHTML\THEAD;
 | |
| use function MicroHTML\TFOOT;
 | |
| use function MicroHTML\TBODY;
 | |
| use function MicroHTML\TH;
 | |
| use function MicroHTML\TR;
 | |
| use function MicroHTML\TD;
 | |
| use function MicroHTML\INPUT;
 | |
| use function MicroHTML\DIV;
 | |
| use function MicroHTML\P;
 | |
| use function MicroHTML\BR;
 | |
| use function MicroHTML\emptyHTML;
 | |
| use function MicroHTML\rawHTML;
 | |
| 
 | |
| class ExtManagerTheme extends Themelet
 | |
| {
 | |
|     /**
 | |
|      * #param ExtensionInfo[] $extensions
 | |
|      */
 | |
|     public function display_table(Page $page, array $extensions, bool $editable)
 | |
|     {
 | |
|         $tbody = TBODY();
 | |
| 
 | |
|         $form = SHM_SIMPLE_FORM(
 | |
|             "ext_manager/set",
 | |
|             TABLE(
 | |
|                 ["id"=>'extensions', "class"=>'zebra'],
 | |
|                 THEAD(TR(
 | |
|                     $editable ? TH("Enabled") : null,
 | |
|                     TH("Name"),
 | |
|                     TH("Docs"),
 | |
|                     TH("Description")
 | |
|                 )),
 | |
|                 $tbody,
 | |
|                 $editable ? TFOOT(TR(TD(["colspan"=>'5'], INPUT(["type"=>'submit', "value"=>'Set Extensions'])))) : null
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         foreach ($extensions as $extension) {
 | |
|             if ((!$editable && $extension->visibility === ExtensionInfo::VISIBLE_ADMIN)
 | |
|                     || $extension->visibility === ExtensionInfo::VISIBLE_HIDDEN) {
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             $tbody->appendChild(TR(
 | |
|                 ["data-ext"=>$extension->name],
 | |
|                 $editable ? TD(INPUT([
 | |
|                     "type"=>'checkbox',
 | |
|                     "name"=>"ext_{$extension->key}",
 | |
|                     "id"=>"ext_{$extension->key}",
 | |
|                     "checked"=>($extension->is_enabled() === true),
 | |
|                     "disabled"=>($extension->is_supported()===false || $extension->core===true)
 | |
|                 ])) : null,
 | |
|                 TD(LABEL(
 | |
|                     ["for"=>"ext_{$extension->key}"],
 | |
|                     (
 | |
|                         ($extension->beta===true ? "[BETA] ":"").
 | |
|                         (empty($extension->name) ? $extension->key : $extension->name)
 | |
|                     )
 | |
|                 )),
 | |
|                 TD(
 | |
|                     // TODO: A proper "docs" symbol would be preferred here.
 | |
|                     $extension->documentation ?
 | |
|                         A(
 | |
|                             ["href"=>make_link("ext_doc/" . url_escape($extension->key))],
 | |
|                             IMG(["src"=>'ext/ext_manager/baseline_open_in_new_black_18dp.png'])
 | |
|                         ) :
 | |
|                         null
 | |
|                 ),
 | |
|                 TD(
 | |
|                     ["style"=>'text-align: left;'],
 | |
|                     $extension->description,
 | |
|                     " ",
 | |
|                     B(["style"=>'color:red'], $extension->get_support_info())
 | |
|                 ),
 | |
|             ));
 | |
|         }
 | |
| 
 | |
|         $page->set_title("Extensions");
 | |
|         $page->set_heading("Extensions");
 | |
|         $page->add_block(new NavBlock());
 | |
|         $page->add_block(new Block("Extension Manager", (string)$form));
 | |
|     }
 | |
| 
 | |
|     public function display_doc(Page $page, ExtensionInfo $info)
 | |
|     {
 | |
|         $author = emptyHTML();
 | |
|         if (count($info->authors) > 0) {
 | |
|             $author->appendChild(BR());
 | |
|             $author->appendChild(B(count($info->authors) > 1 ? "Authors: " : "Author: "));
 | |
|             foreach ($info->authors as $auth=>$email) {
 | |
|                 if (!empty($email)) {
 | |
|                     $author->appendChild(A(["href"=>"mailto:$email"], $auth));
 | |
|                 } else {
 | |
|                     $author->appendChild($auth);
 | |
|                 }
 | |
|                 $author->appendChild(BR());
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $html = DIV(
 | |
|             ["style"=>'margin: auto; text-align: left; width: 512px;'],
 | |
|             $author,
 | |
|             ($info->version ? emptyHTML(BR(), B("Version"), $info->version) : null),
 | |
|             ($info->link ? emptyHTML(BR(), B("Home Page"), A(["href"=>$info->link], "Link")) : null),
 | |
|             P(rawHTML($info->documentation ?? "(This extension has no documentation)")),
 | |
|             // <hr>,
 | |
|             P(A(["href"=>make_link("ext_manager")], "Back to the list"))
 | |
|         );
 | |
| 
 | |
|         $page->set_title("Documentation for " . html_escape($info->name));
 | |
|         $page->set_heading(html_escape($info->name));
 | |
|         $page->add_block(new NavBlock());
 | |
|         $page->add_block(new Block("Documentation", (string)$html));
 | |
|     }
 | |
| }
 |