Browse Source
Add menu item abstraction
Add menu item abstraction
Signed-off-by: Julius Härtl <jus@bitgrid.net>pull/8051/head
committed by
Roeland Jago Douma
No known key found for this signature in database
GPG Key ID: F941078878347C0C
3 changed files with 265 additions and 0 deletions
-
64lib/public/AppFramework/Http/Template/IMenuAction.php
-
105lib/public/AppFramework/Http/Template/PublicTemplateResponse.php
-
96lib/public/AppFramework/Http/Template/SimpleMenuAction.php
@ -0,0 +1,64 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\AppFramework\Http\Template; |
|||
|
|||
/** |
|||
* Interface IMenuAction |
|||
* |
|||
* @package OCP\AppFramework\Http\Template |
|||
* @since 14.0 |
|||
*/ |
|||
interface IMenuAction { |
|||
|
|||
/** |
|||
* @since 14.0.0 |
|||
* @return string |
|||
*/ |
|||
public function getId(): string; |
|||
|
|||
/** |
|||
* @since 14.0.0 |
|||
* @return string |
|||
*/ |
|||
public function getLabel(): string; |
|||
|
|||
/** |
|||
* @since 14.0.0 |
|||
* @return string |
|||
*/ |
|||
public function getLink(): string; |
|||
|
|||
/** |
|||
* @since 14.0.0 |
|||
* @return int |
|||
*/ |
|||
public function getPriority(): int; |
|||
|
|||
/** |
|||
* @since 14.0.0 |
|||
* @return string |
|||
*/ |
|||
public function render(): string; |
|||
|
|||
} |
|||
@ -0,0 +1,105 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\AppFramework\Http\Template; |
|||
|
|||
use OCP\AppFramework\Http\TemplateResponse; |
|||
|
|||
class PublicTemplateResponse extends TemplateResponse { |
|||
|
|||
private $headerTitle = ''; |
|||
private $headerDetails = ''; |
|||
private $headerActions = []; |
|||
|
|||
public function __construct(string $appName, string $templateName, array $params = array()) { |
|||
parent::__construct($appName, $templateName, $params, 'public'); |
|||
\OC_Util::addScript('core', 'public/publicpage'); |
|||
} |
|||
|
|||
public function setHeaderTitle(string $title) { |
|||
$this->headerTitle = $title; |
|||
} |
|||
|
|||
public function getHeaderTitle(): string { |
|||
return $this->headerTitle; |
|||
} |
|||
|
|||
public function setHeaderDetails(string $details) { |
|||
$this->headerDetails = $details; |
|||
} |
|||
|
|||
public function getHeaderDetails(): string { |
|||
return $this->headerDetails; |
|||
} |
|||
|
|||
public function setHeaderActions(array $actions) { |
|||
foreach ($actions as $action) { |
|||
if ($actions instanceof IMenuAction) { |
|||
throw new \InvalidArgumentException('Actions must be of type IMenuAction'); |
|||
} |
|||
$this->headerActions[] = $action; |
|||
} |
|||
} |
|||
|
|||
public function addAction(IMenuAction $action) { |
|||
$this->headerActions[] = $action; |
|||
} |
|||
|
|||
public function getPrimaryAction(): IMenuAction { |
|||
$lowest = null; |
|||
foreach ($this->headerActions as $action) { |
|||
if($lowest === null || $action->getPriority() < $lowest->getPriority()) { |
|||
$lowest = $action; |
|||
} |
|||
} |
|||
return $lowest; |
|||
} |
|||
|
|||
public function getActionCount(): int { |
|||
return count($this->headerActions); |
|||
} |
|||
|
|||
/** |
|||
* @return IMenuAction[] |
|||
*/ |
|||
public function getOtherActions(): array { |
|||
$list = []; |
|||
$primary = $this->getPrimaryAction(); |
|||
foreach ($this->headerActions as $action) { |
|||
if($primary !== $action) { |
|||
$list[] = $action; |
|||
} |
|||
} |
|||
return $list; |
|||
} |
|||
|
|||
|
|||
public function render() { |
|||
$params = array_merge($this->getParams(), [ |
|||
'template' => $this, |
|||
]); |
|||
$this->setParams($params); |
|||
return parent::render(); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,96 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @author Julius Härtl <jus@bitgrid.net> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OCP\AppFramework\Http\Template; |
|||
|
|||
use OCP\AppFramework\Http\Template\IMenuAction; |
|||
use Twig_Environment; |
|||
|
|||
class SimpleMenuAction implements IMenuAction { |
|||
|
|||
private $id; |
|||
private $label; |
|||
private $icon; |
|||
private $link; |
|||
private $priority = 100; |
|||
private $detail; |
|||
|
|||
public function __construct(string $id, string $label, string $icon, string $link = '', int $priority = 100, string $detail = '') { |
|||
$this->id = $id; |
|||
$this->label = $label; |
|||
$this->icon = $icon; |
|||
$this->link = $link; |
|||
$this->priority = $priority; |
|||
$this->detail = $detail; |
|||
} |
|||
|
|||
public function setId(string $id) { |
|||
$this->id = $id; |
|||
} |
|||
|
|||
public function setLabel(string $label) { |
|||
$this->label = $label; |
|||
} |
|||
|
|||
public function setDetail(string $detail) { |
|||
$this->detail = $detail; |
|||
} |
|||
|
|||
public function setIcon(string $icon) { |
|||
$this->icon = $icon; |
|||
} |
|||
|
|||
public function setLink(string $link) { |
|||
$this->link = $link; |
|||
} |
|||
|
|||
public function setPriority(int $priority) { |
|||
$this->priority = $priority; |
|||
} |
|||
|
|||
public function getId(): string { |
|||
return $this->id; |
|||
} |
|||
|
|||
public function getLabel(): string { |
|||
return $this->label; |
|||
} |
|||
|
|||
public function getIcon(): string { |
|||
return $this->icon; |
|||
} |
|||
|
|||
public function getLink(): string { |
|||
return $this->link; |
|||
} |
|||
|
|||
public function getPriority(): int { |
|||
return $this->priority; |
|||
} |
|||
|
|||
public function render(): string { |
|||
$detailContent = ($this->detail !== '') ? ' <span class="download-size">(' . $this->detail . ')</span>' : ''; |
|||
return sprintf('<li><a href="%s"><span class="icon %s"></span>%s %s</a></li>', $this->link, $this->icon, $this->label, $detailContent); |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue