Browse Source

implement window/tab title update

main
yggverse 2 months ago
parent
commit
88ab363b4a
  1. 18
      config.json
  2. 75
      src/Entity/App.php
  3. 71
      src/Entity/Tab/Page.php

18
config.json

@ -1,11 +1,19 @@ @@ -1,11 +1,19 @@
{
"app":
{
"title":"Yoda",
"theme":"Default",
"header":
{
"enabled":true,
"title":
{
"default":"Yoda",
"postfix":" - Yoda",
"length":
{
"max":32
}
},
"button":
{
"close":true
@ -17,6 +25,14 @@ @@ -17,6 +25,14 @@
{
"page":
{
"title":
{
"default":"New page",
"length":
{
"max":32
}
},
"redirect":
{
"follow":

75
src/Entity/App.php

@ -7,7 +7,8 @@ namespace Yggverse\Yoda\Entity; @@ -7,7 +7,8 @@ namespace Yggverse\Yoda\Entity;
class App
{
public \GtkWindow $window;
public \GtkNotebook $tab;
public \GtkHeaderBar $header;
public \GtkNotebook $tabs;
public object $config;
@ -24,18 +25,18 @@ class App @@ -24,18 +25,18 @@ class App
if ($this->config->header->enabled)
{
$header = new \GtkHeaderBar();
$this->header = new \GtkHeaderBar();
$header->set_title(
$this->config->title
$this->header->set_title(
$this->config->header->title->default
);
$header->set_show_close_button(
$this->header->set_show_close_button(
$this->config->header->button->close
);
$this->window->set_titlebar(
$header
$this->header
);
}
@ -47,43 +48,67 @@ class App @@ -47,43 +48,67 @@ class App
}
);
$page = new \Yggverse\Yoda\Entity\Tab\Page(
$this
);
$this->tabs = new \GtkNotebook();
$page->open(
$this->config->tab->page->header->button->home->url
$this->tabs->set_scrollable(
true
);
$this->tab = new \GtkNotebook();
$this->window->add(
$this->tabs
);
$this->tab->set_scrollable(
true
$this->openPage(
$this->config->tab->page->header->button->home->url // @TODO
);
$this->tab->append_page(
$page->box,
new \GtkLabel(
'New page' // @TODO
)
$this->window->show_all();
}
public function openPage(
string $url
): void
{
$page = new \Yggverse\Yoda\Entity\Tab\Page(
$this
);
$this->tab->set_menu_label(
$this->tabs->append_page(
$page->box,
new \GtkLabel(
'2' // @TODO
$this->config->tab->page->title->default
)
);
$this->tab->set_tab_reorderable(
$this->tabs->set_tab_reorderable(
$page->box,
true
);
$this->window->add(
$this->tab
$page->open(
$url
);
}
$this->window->show_all();
public function setTitle(
?string $value = null
): void
{
if ($value)
{
$title = urldecode(
strlen($value) > $this->config->header->title->length->max ? substr($value, 0, $this->config->header->title->length->max) . '...'
: $value
);
}
else
{
$title = $this->config->header->title->default;
}
$this->header->set_title(
$title
);
}
}

71
src/Entity/Tab/Page.php

@ -350,7 +350,7 @@ class Page @@ -350,7 +350,7 @@ class Page
{
case str_starts_with($url, 'gemini://'):
$this->_gemini(
$this->_openGemini(
$url,
$code
);
@ -359,18 +359,23 @@ class Page @@ -359,18 +359,23 @@ class Page
default:
$this->_yoda(
$this->_openYoda(
$url
);
}
}
private function _gemini(
private function _openGemini(
string $url,
int $code = 0,
int $redirects = 0
): void
{
// Init base URL
$origin = new \Yggverse\Net\Address(
$url
);
// Track response time
$start = microtime(true);
@ -430,7 +435,7 @@ class Page @@ -430,7 +435,7 @@ class Page
{
if ($redirects > $this->config->redirect->follow->max)
{
$this->_yoda(
$this->_openYoda(
'yoda://redirect'
);
@ -457,7 +462,7 @@ class Page @@ -457,7 +462,7 @@ class Page
else
{
$this->_yoda(
$this->_openYoda(
'yoda://redirect'
);
@ -468,7 +473,7 @@ class Page @@ -468,7 +473,7 @@ class Page
// Process error codes
if (20 != $response->getCode()) // not found
{
$this->_yoda(
$this->_openYoda(
'yoda://nothing'
);
@ -487,17 +492,24 @@ class Page @@ -487,17 +492,24 @@ class Page
if ($h1 = $body->getH1())
{
$this->app->window->set_title(
sprintf(
'%s - %s',
empty($h1[0]) ? $address->getHost() : $h1[0],
$this->app->config->title
)
);
$title = $h1[0] .
$this->app->config->header->title->postfix;
}
// @TODO update tab title
else
{
$title = $origin->getHost() .
$this->app->config->header->title->postfix;
}
$this->app->setTitle(
$title
);
$this->setTitle(
$title
);
$this->status->set_markup(
str_replace( // Custom macros mask from config.json
[
@ -533,7 +545,7 @@ class Page @@ -533,7 +545,7 @@ class Page
);
}
private function _yoda(
private function _openYoda(
string $url
): void
{
@ -556,11 +568,36 @@ class Page @@ -556,11 +568,36 @@ class Page
if ($h1 = $body->getH1())
{
$this->app->window->set_title(
$this->app->setTitle(
$h1[0]
);
$this->setTitle(
$h1[0]
);
}
}
public function setTitle(
?string $value = null
): void
{
if ($value)
{
$title = urldecode(
strlen($value) > $this->config->title->length->max ? substr($value, 0, $this->config->title->length->max) . '...'
: $value
);
}
// @TODO update tab title
else
{
$title = $this->config->title->default;
}
$this->app->tabs->set_tab_label_text(
$this->box,
$title
);
}
}
Loading…
Cancel
Save