Browse Source

indicate external links

CPP-GTK4
yggverse 2 months ago
parent
commit
76e85617bd
  1. 59
      src/app/browser/main/tab/page/content/text/gemini/reader.cpp
  2. 2
      src/app/browser/main/tab/page/content/text/gemini/reader.hpp

59
src/app/browser/main/tab/page/content/text/gemini/reader.cpp

@ -48,9 +48,7 @@ Reader::Reader(
{ {
markup.append( markup.append(
Make::link( Make::link(
g_uri_to_string( // @TODO validate NULL base,
base
),
address, address,
date, date,
alt alt
@ -249,36 +247,49 @@ Glib::ustring Reader::Make::header(
} }
Glib::ustring Reader::Make::link( Glib::ustring Reader::Make::link(
const Glib::ustring & BASE, GUri * base,
const Glib::ustring & ADDRESS, const Glib::ustring & ADDRESS,
const Glib::ustring & DATE, const Glib::ustring & DATE,
const Glib::ustring & ALT const Glib::ustring & ALT
) { ) {
// Compose link description using optional date/alt values // Make relative links absolute
Glib::ustring description;
if (!DATE.empty())
{
description.append(
DATE
);
}
if (!ALT.empty())
{
description.append(
description.empty() ? ALT : description + " " + ALT
);
}
// Make relative links absolute using base given
const auto ABSOLUTE = g_uri_resolve_relative( const auto ABSOLUTE = g_uri_resolve_relative(
BASE.c_str(), g_uri_to_string(
base
),
ADDRESS.c_str(), ADDRESS.c_str(),
G_URI_FLAGS_NONE, G_URI_FLAGS_NONE,
NULL // GError * @TODO NULL // GError * @TODO
); );
// Build link text
Glib::ustring alt;
// Indicate external links
if (strcmp(g_uri_get_host(base), g_uri_get_host(g_uri_parse(ABSOLUTE, G_URI_FLAGS_NONE, NULL))))
{
alt.append(
""
);
}
// Append date on available
if (!DATE.empty())
{
alt.append(
alt.empty() ? DATE : " " + DATE
);
}
// Append alt text
if (!ALT.empty())
{
alt.append(
alt.empty() ? ALT : " " + ALT
);
}
// Build markup and get result
return Glib::ustring::sprintf( return Glib::ustring::sprintf(
"<a href=\"%s\" title=\"%s\">%s</a>\n", "<a href=\"%s\" title=\"%s\">%s</a>\n",
Glib::Markup::escape_text( Glib::Markup::escape_text(
@ -288,7 +299,7 @@ Glib::ustring Reader::Make::link(
ADDRESS ADDRESS
), ),
Glib::Markup::escape_text( Glib::Markup::escape_text(
description alt
) )
); );
} }

2
src/app/browser/main/tab/page/content/text/gemini/reader.hpp

@ -48,7 +48,7 @@ namespace app::browser::main::tab::page::content::text::gemini
); );
static Glib::ustring link( static Glib::ustring link(
const Glib::ustring & BASE, GUri * base,
const Glib::ustring & ADDRESS, const Glib::ustring & ADDRESS,
const Glib::ustring & DATE, const Glib::ustring & DATE,
const Glib::ustring & ALT const Glib::ustring & ALT

Loading…
Cancel
Save