diff options
author | Julius Härtl <jus@bitgrid.net> | 2018-01-25 18:56:15 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2018-02-27 12:25:52 +0100 |
commit | 4f78980fadfbdd31da5f37000dfd36760e48189a (patch) | |
tree | 20eea40080a9660bc5d04bb01350be8b5743e31e /lib | |
parent | b89827d76197c4dbb18bcbbee7cc35c2f78f88c4 (diff) | |
download | nextcloud-server-4f78980fadfbdd31da5f37000dfd36760e48189a.tar.gz nextcloud-server-4f78980fadfbdd31da5f37000dfd36760e48189a.zip |
Add menu item abstraction
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'lib')
3 files changed, 265 insertions, 0 deletions
diff --git a/lib/public/AppFramework/Http/Template/IMenuAction.php b/lib/public/AppFramework/Http/Template/IMenuAction.php new file mode 100644 index 00000000000..e42d2057981 --- /dev/null +++ b/lib/public/AppFramework/Http/Template/IMenuAction.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; + +}
\ No newline at end of file diff --git a/lib/public/AppFramework/Http/Template/PublicTemplateResponse.php b/lib/public/AppFramework/Http/Template/PublicTemplateResponse.php new file mode 100644 index 00000000000..2a209c88b9f --- /dev/null +++ b/lib/public/AppFramework/Http/Template/PublicTemplateResponse.php @@ -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(); + } + +}
\ No newline at end of file diff --git a/lib/public/AppFramework/Http/Template/SimpleMenuAction.php b/lib/public/AppFramework/Http/Template/SimpleMenuAction.php new file mode 100644 index 00000000000..c5cbd9a032c --- /dev/null +++ b/lib/public/AppFramework/Http/Template/SimpleMenuAction.php @@ -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); + } + +}
\ No newline at end of file |