Преглед изворни кода

Merge pull request #1714 from kevinpapst/hook-readingmodes

Added extension hook for reading modes
Alexandre Alapetite пре 8 година
родитељ
комит
a756878219
3 измењених фајлова са 153 додато и 14 уклоњено
  1. 136 0
      app/Models/ReadingMode.php
  2. 13 14
      app/layout/nav_menu.phtml
  3. 4 0
      lib/Minz/ExtensionManager.php

+ 136 - 0
app/Models/ReadingMode.php

@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * Manage the reading modes in FreshRSS.
+ */
+class FreshRSS_ReadingMode {
+
+	/**
+	 * @var string
+	 */
+	protected $name;
+	/**
+	 * @var string
+	 */
+	protected $title;
+	/**
+	 * @var string[]
+	 */
+	protected $urlParams;
+	/**
+	 * @var bool
+	 */
+	protected $isActive = false;
+
+	/**
+	 * ReadingMode constructor.
+	 * @param string $name
+	 * @param string $title
+	 * @param string[] $urlParams
+	 * @param bool $active
+	 */
+	public function __construct($name, $title, $urlParams, $active) {
+		$this->name = $name;
+		$this->title = $title;
+		$this->urlParams = $urlParams;
+		$this->isActive = $active;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getName() {
+		return $this->name;
+	}
+
+	/**
+	 * @param string $name
+	 * @return FreshRSS_ReadingMode
+	 */
+	public function setName($name) {
+		$this->name = $name;
+		return $this;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getTitle() {
+		return $this->title;
+	}
+
+	/**
+	 * @param string $title
+	 * @return FreshRSS_ReadingMode
+	 */
+	public function setTitle($title) {
+		$this->title = $title;
+		return $this;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getUrlParams() {
+		return $this->urlParams;
+	}
+
+	/**
+	 * @param string $urlParams
+	 * @return FreshRSS_ReadingMode
+	 */
+	public function setUrlParams($urlParams) {
+		$this->urlParams = $urlParams;
+		return $this;
+	}
+
+	/**
+	 * @return bool
+	 */
+	public function isActive() {
+		return $this->isActive;
+	}
+
+	/**
+	 * @param bool $isActive
+	 * @return FreshRSS_ReadingMode
+	 */
+	public function setIsActive($isActive) {
+		$this->isActive = $isActive;
+		return $this;
+	}
+
+	/**
+	 * Returns the built-in reading modes.
+	 * return ReadingMode[]
+	 */
+	public static function getReadingModes() {
+		$actualView = Minz_Request::actionName();
+		$defaultCtrl = Minz_Request::defaultControllerName();
+		$isDefaultCtrl = Minz_Request::controllerName() === $defaultCtrl;
+		$urlOutput = Minz_Request::currentRequest();
+
+		$readingModes = array(
+			new FreshRSS_ReadingMode(
+				_i("view-normal"),
+				_t('index.menu.normal_view'),
+				array_merge($urlOutput, array('c' => $defaultCtrl, 'a' => 'normal')),
+				($isDefaultCtrl && $actualView === 'normal')
+			),
+			new FreshRSS_ReadingMode(
+				_i("view-global"),
+				_t('index.menu.global_view'),
+				array_merge($urlOutput, array('c' => $defaultCtrl, 'a' => 'global')),
+				($isDefaultCtrl && $actualView === 'global')
+			),
+			new FreshRSS_ReadingMode(
+				_i("view-reader"),
+				_t('index.menu.reader_view'),
+				array_merge($urlOutput, array('c' => $defaultCtrl, 'a' => 'reader')),
+				($isDefaultCtrl && $actualView === 'reader')
+			),
+		);
+
+		return $readingModes;
+	}
+}

+ 13 - 14
app/layout/nav_menu.phtml

@@ -131,20 +131,19 @@
 
 	<?php $url_output = Minz_Request::currentRequest(); ?>
 	<div class="stick" id="nav_menu_views">
-		<?php $url_output['a'] = 'normal'; ?>
-		<a class="view_normal btn <?php echo $actual_view == 'normal'? 'active' : ''; ?>" title="<?php echo _t('index.menu.normal_view'); ?>" href="<?php echo Minz_Url::display($url_output); ?>">
-			<?php echo _i("view-normal"); ?>
-		</a>
-
-		<?php $url_output['a'] = 'global'; ?>
-		<a class="view_global btn <?php echo $actual_view == 'global'? 'active' : ''; ?>" title="<?php echo _t('index.menu.global_view'); ?>" href="<?php echo Minz_Url::display($url_output); ?>">
-			<?php echo _i("view-global"); ?>
-		</a>
-
-		<?php $url_output['a'] = 'reader'; ?>
-		<a class="view_reader btn <?php echo $actual_view == 'reader'? 'active' : ''; ?>" title="<?php echo _t('index.menu.reader_view'); ?>" href="<?php echo Minz_Url::display($url_output); ?>">
-			<?php echo _i("view-reader"); ?>
-		</a>
+		<?php
+		$readingModes = FreshRSS_ReadingMode::getReadingModes();
+		$readingModes = Minz_ExtensionManager::callHook('nav_reading_modes', $readingModes);
+
+		/** @var FreshRSS_ReadingMode $mode */
+		foreach ($readingModes as $mode) {
+			?>
+			<a class="view_normal btn <?php if ($mode->isActive()) { echo 'active'; } ?>" title="<?php echo $mode->getTitle(); ?>" href="<?php echo Minz_Url::display($mode->getUrlParams()); ?>">
+				<?php echo $mode->getName(); ?>
+			</a>
+			<?php
+		}
+		?>
 
 		<?php
 			$url_output['a'] = 'rss';

+ 4 - 0
lib/Minz/ExtensionManager.php

@@ -31,6 +31,10 @@ class Minz_ExtensionManager {
 			'list' => array(),
 			'signature' => 'NoneToNone',
 		),
+		'nav_reading_modes' => array(  // function($readingModes = array) -> array | null
+			'list' => array(),
+			'signature' => 'OneToOne',
+		),
 	);
 	private static $ext_to_hooks = array();