. /** * Base class for UI widgets * * @category Widget * @package GNUsocial * @author Evan Prodromou * @author Sarven Capadisli * @copyright 2009-2019 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ defined('GNUSOCIAL') || die(); /** * Base class for UI widgets * * A widget is a cluster of HTML elements that provide some functionality * that's used on different parts of the site. Examples would be profile * lists, notice lists, navigation menus (tabsets) and common forms. * * @category Widget * @package GNUsocial * @author Evan Prodromou * @author Sarven Capadisli * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * * @see HTMLOutputter */ class Widget { protected $avatarSize = AVATAR_STREAM_SIZE; /** * Action (HTMLOutputter) to use for output */ public $out = null; /** * Prepare the widget for use * * @param Action $out output helper, defaults to null * @param array $widgetOpts */ public function __construct(?Action $out = null, array $widgetOpts = []) { $this->out = $out; if (!array_key_exists('scoped', $widgetOpts)) { $this->widgetOpts['scoped'] = Profile::current(); } $this->scoped = $this->widgetOpts['scoped']; } /** * Show the widget * * Emit the HTML for the widget, using the configured outputter. * * @return void */ public function show() { } /** * Get HTMLOutputter * * Return the HTMLOutputter for the widget. * * @return HTMLOutputter the output helper */ public function getOut() { return $this->out; } /** * Delegate output methods to the outputter attribute. * * @param string $name Name of the method * @param array $arguments Arguments called * * @return mixed Return value of the method. */ public function __call($name, $arguments) { return call_user_func_array(array($this->out, $name), $arguments); } /** * Default avatar size for this widget. */ public function avatarSize() { return $this->avatarSize; } protected function showAvatar(Profile $profile, $size=null) { $avatar_url = $profile->avatarUrl($size ?: $this->avatarSize()); $this->out->element('img', array('src' => $avatar_url, 'class' => 'avatar u-photo', 'width' => $this->avatarSize(), 'height' => $this->avatarSize(), 'alt' => $profile->getBestName())); } }