[v2,1/3] webinterface: Add links to the configuration wiki

Message ID 20210928110906.1089-1-hofmann@leo-andres.de
State New
Headers show
Series [v2,1/3] webinterface: Add links to the configuration wiki | expand

Commit Message

Leo-Andres Hofmann Sept. 28, 2021, 11:09 a.m. UTC
This patch adds a little "help" icon to the page header.
If a manual entry exists for a configuration page, the icon
appears and offers a quick way to access the wiki.
Wiki pages can be configured in the "manualpages" file.

Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
---
 config/cfgroot/header.pl                      | 20 +++++++++++++++++++
 config/cfgroot/manualpages                    |  7 +++++++
 html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
 html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
 4 files changed, 56 insertions(+), 1 deletion(-)
 create mode 100644 config/cfgroot/manualpages

Comments

Bernhard Bitsch Sept. 28, 2021, 12:55 p.m. UTC | #1
Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>

Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
> This patch adds a little "help" icon to the page header.
> If a manual entry exists for a configuration page, the icon
> appears and offers a quick way to access the wiki.
> Wiki pages can be configured in the "manualpages" file.
> 
> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
> ---
>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>   config/cfgroot/manualpages                    |  7 +++++++
>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>   4 files changed, 56 insertions(+), 1 deletion(-)
>   create mode 100644 config/cfgroot/manualpages
> 
> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
> index 79accbe8a..e97f90d67 100644
> --- a/config/cfgroot/header.pl
> +++ b/config/cfgroot/header.pl
> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>       };
>   };
>   
> +### Initialize user manual
> +my %manualpages = ();
> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>   
> +### Load selected language and theme functions
>   require "${swroot}/langs/en.pl";
>   require "${swroot}/langs/${language}.pl";
>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
> @@ -553,3 +557,19 @@ sub colorize {
>   		return $string;
>   	}
>   }
> +
> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
> +sub get_manualpage_url() {
> +	my ($cgi_page) = @_;
> +
> +	# Ensure base url is configured
> +	return unless($manualpages{'BASE_URL'});
> +
> +	# Return URL
> +	if($cgi_page && defined($manualpages{$cgi_page})) {
> +		return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
> +	}
> +
> +	# No manual page configured, return nothing
> +	return;
> +}
> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
> new file mode 100644
> index 000000000..e5ab1a13c
> --- /dev/null
> +++ b/config/cfgroot/manualpages
> @@ -0,0 +1,7 @@
> +# User manual base URL (without trailing slash)
> +BASE_URL=https://wiki.ipfire.org
> +
> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
> +index=configuration/system/startpage
> +pppsetup=configuration/system/dial
> +qos=configuration/services/qos
> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
> index b92f476c4..661773675 100644
> --- a/html/html/themes/ipfire/include/css/style.css
> +++ b/html/html/themes/ipfire/include/css/style.css
> @@ -169,6 +169,19 @@ iframe {
>   	margin-bottom: 1em;
>   }
>   
> +#main_header > * {
> +	display: inline-block;
> +	vertical-align: baseline;
> +}
> +
> +#main_header > span {
> +	margin-left: 0.8em;
> +}
> +
> +#main_header img {
> +	padding: 0;
> +}
> +
>   #footer {
>   	height: 2.5em;
>   	margin-bottom: 1em;
> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
> index 9f12bbe59..18931428e 100644
> --- a/html/html/themes/ipfire/include/functions.pl
> +++ b/html/html/themes/ipfire/include/functions.pl
> @@ -170,7 +170,22 @@ END
>   print <<END
>   	<div class="bigbox fixed">
>   		<div id="main_inner" class="fixed">
> -			<h1>$title</h1>
> +			<div id="main_header">
> +				<h1>$title</h1>
> +END
> +;
> +
> +# Print user manual link
> +my $manual_url = &Header::get_manualpage_url($scriptName);
> +if($manual_url) {
> +	print <<END
> +				<span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
> +END
> +;
> +}
> +
> +print <<END
> +			</div>
>   END
>   ;
>   }
>
Leo-Andres Hofmann Oct. 4, 2021, 5:42 p.m. UTC | #2
Hi all,

@Bernhard, Thank you again for testing this patch!

@Jon, This is the file format of the manualpages configuration:

[cgi basename]=[path/to/page]

For example:

 > BASE_URL=https://wiki.ipfire.org
 > index=configuration/system/startpage

Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.

Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
So I would suggest we wait until this has been approved and integrated.

Regards,
Leo

Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>
> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>> This patch adds a little "help" icon to the page header.
>> If a manual entry exists for a configuration page, the icon
>> appears and offers a quick way to access the wiki.
>> Wiki pages can be configured in the "manualpages" file.
>>
>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>> ---
>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>   config/cfgroot/manualpages                    |  7 +++++++
>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>   create mode 100644 config/cfgroot/manualpages
>>
>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>> index 79accbe8a..e97f90d67 100644
>> --- a/config/cfgroot/header.pl
>> +++ b/config/cfgroot/header.pl
>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>       };
>>   };
>>   +### Initialize user manual
>> +my %manualpages = ();
>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>   +### Load selected language and theme functions
>>   require "${swroot}/langs/en.pl";
>>   require "${swroot}/langs/${language}.pl";
>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>> @@ -553,3 +557,19 @@ sub colorize {
>>           return $string;
>>       }
>>   }
>> +
>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>> +sub get_manualpage_url() {
>> +    my ($cgi_page) = @_;
>> +
>> +    # Ensure base url is configured
>> +    return unless($manualpages{'BASE_URL'});
>> +
>> +    # Return URL
>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>> +    }
>> +
>> +    # No manual page configured, return nothing
>> +    return;
>> +}
>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>> new file mode 100644
>> index 000000000..e5ab1a13c
>> --- /dev/null
>> +++ b/config/cfgroot/manualpages
>> @@ -0,0 +1,7 @@
>> +# User manual base URL (without trailing slash)
>> +BASE_URL=https://wiki.ipfire.org
>> +
>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>> +index=configuration/system/startpage
>> +pppsetup=configuration/system/dial
>> +qos=configuration/services/qos
>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>> index b92f476c4..661773675 100644
>> --- a/html/html/themes/ipfire/include/css/style.css
>> +++ b/html/html/themes/ipfire/include/css/style.css
>> @@ -169,6 +169,19 @@ iframe {
>>       margin-bottom: 1em;
>>   }
>>   +#main_header > * {
>> +    display: inline-block;
>> +    vertical-align: baseline;
>> +}
>> +
>> +#main_header > span {
>> +    margin-left: 0.8em;
>> +}
>> +
>> +#main_header img {
>> +    padding: 0;
>> +}
>> +
>>   #footer {
>>       height: 2.5em;
>>       margin-bottom: 1em;
>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>> index 9f12bbe59..18931428e 100644
>> --- a/html/html/themes/ipfire/include/functions.pl
>> +++ b/html/html/themes/ipfire/include/functions.pl
>> @@ -170,7 +170,22 @@ END
>>   print <<END
>>       <div class="bigbox fixed">
>>           <div id="main_inner" class="fixed">
>> -            <h1>$title</h1>
>> +            <div id="main_header">
>> +                <h1>$title</h1>
>> +END
>> +;
>> +
>> +# Print user manual link
>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>> +if($manual_url) {
>> +    print <<END
>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>> +END
>> +;
>> +}
>> +
>> +print <<END
>> +            </div>
>>   END
>>   ;
>>   }
>>
Bernhard Bitsch Oct. 4, 2021, 8:34 p.m. UTC | #3
Hi all,

Am 04.10.2021 um 19:42 schrieb Leo Hofmann:
> Hi all,
> 
> @Bernhard, Thank you again for testing this patch!
> 
> @Jon, This is the file format of the manualpages configuration:
> 
> [cgi basename]=[path/to/page]
> 
> For example:
> 
>  > BASE_URL=https://wiki.ipfire.org
>  > index=configuration/system/startpage
> 
> Results in "index.cgi" linking to 
> "https://wiki.ipfire.org/configuration/system/startpage".
> Please note that the path does not start with a slash, because the 
> get_manualpage_url function always adds one between the base url and the 
> path.
> 
> Unfortunately, I couldn't figure out how to include all this in the 
> installer and I need help with that.

Another part is the sampling of all help pages.
Should this be done in several patches for different pages or by 
collecting the contributions by one person ( Leo? ), which submit one patch?
( I've applied the mechanism to other pages, yet. And are very satisfied 
with it! Great idea! )

Regards,
Bernhard

> So I would suggest we wait until this has been approved and integrated.
> 
> Regards,
> Leo
> 
> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>
>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>> This patch adds a little "help" icon to the page header.
>>> If a manual entry exists for a configuration page, the icon
>>> appears and offers a quick way to access the wiki.
>>> Wiki pages can be configured in the "manualpages" file.
>>>
>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>> ---
>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>   create mode 100644 config/cfgroot/manualpages
>>>
>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>> index 79accbe8a..e97f90d67 100644
>>> --- a/config/cfgroot/header.pl
>>> +++ b/config/cfgroot/header.pl
>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>       };
>>>   };
>>>   +### Initialize user manual
>>> +my %manualpages = ();
>>> +&General::readhash("${General::swroot}/main/manualpages", 
>>> \%manualpages);
>>>   +### Load selected language and theme functions
>>>   require "${swroot}/langs/en.pl";
>>>   require "${swroot}/langs/${language}.pl";
>>>   eval `/bin/cat 
>>> /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>> @@ -553,3 +557,19 @@ sub colorize {
>>>           return $string;
>>>       }
>>>   }
>>> +
>>> +# Get user manual URL for the specified configuration page, returns 
>>> empty if no entry is configured
>>> +sub get_manualpage_url() {
>>> +    my ($cgi_page) = @_;
>>> +
>>> +    # Ensure base url is configured
>>> +    return unless($manualpages{'BASE_URL'});
>>> +
>>> +    # Return URL
>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>> +    }
>>> +
>>> +    # No manual page configured, return nothing
>>> +    return;
>>> +}
>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>> new file mode 100644
>>> index 000000000..e5ab1a13c
>>> --- /dev/null
>>> +++ b/config/cfgroot/manualpages
>>> @@ -0,0 +1,7 @@
>>> +# User manual base URL (without trailing slash)
>>> +BASE_URL=https://wiki.ipfire.org
>>> +
>>> +# Assign manual page URL path to CGI file ([cgi 
>>> basename]=[path/to/page])
>>> +index=configuration/system/startpage
>>> +pppsetup=configuration/system/dial
>>> +qos=configuration/services/qos
>>> diff --git a/html/html/themes/ipfire/include/css/style.css 
>>> b/html/html/themes/ipfire/include/css/style.css
>>> index b92f476c4..661773675 100644
>>> --- a/html/html/themes/ipfire/include/css/style.css
>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>> @@ -169,6 +169,19 @@ iframe {
>>>       margin-bottom: 1em;
>>>   }
>>>   +#main_header > * {
>>> +    display: inline-block;
>>> +    vertical-align: baseline;
>>> +}
>>> +
>>> +#main_header > span {
>>> +    margin-left: 0.8em;
>>> +}
>>> +
>>> +#main_header img {
>>> +    padding: 0;
>>> +}
>>> +
>>>   #footer {
>>>       height: 2.5em;
>>>       margin-bottom: 1em;
>>> diff --git a/html/html/themes/ipfire/include/functions.pl 
>>> b/html/html/themes/ipfire/include/functions.pl
>>> index 9f12bbe59..18931428e 100644
>>> --- a/html/html/themes/ipfire/include/functions.pl
>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>> @@ -170,7 +170,22 @@ END
>>>   print <<END
>>>       <div class="bigbox fixed">
>>>           <div id="main_inner" class="fixed">
>>> -            <h1>$title</h1>
>>> +            <div id="main_header">
>>> +                <h1>$title</h1>
>>> +END
>>> +;
>>> +
>>> +# Print user manual link
>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>> +if($manual_url) {
>>> +    print <<END
>>> +                <span><a href="$manual_url" title="$Lang::tr{'online 
>>> help en'}" target="_blank"><img src="/images/help-browser.png" 
>>> alt="$Lang::tr{'online help en'}"></a></span>
>>> +END
>>> +;
>>> +}
>>> +
>>> +print <<END
>>> +            </div>
>>>   END
>>>   ;
>>>   }
>>>
Jon Murphy Oct. 5, 2021, 3:40 a.m. UTC | #4
Here is a quick template to get started:
I'll keep going tomorrow.


Jon



> On Oct 4, 2021, at 12:42 PM, Leo Hofmann <hofmann@leo-andres.de> wrote:
> 
> Hi all,
> 
> @Bernhard, Thank you again for testing this patch!
> 
> @Jon, This is the file format of the manualpages configuration:
> 
> [cgi basename]=[path/to/page]
> 
> For example:
> 
> > BASE_URL=https://wiki.ipfire.org
> > index=configuration/system/startpage
> 
> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
> 
> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
> So I would suggest we wait until this has been approved and integrated.
> 
> Regards,
> Leo
> 
> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>> 
>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>> This patch adds a little "help" icon to the page header.
>>> If a manual entry exists for a configuration page, the icon
>>> appears and offers a quick way to access the wiki.
>>> Wiki pages can be configured in the "manualpages" file.
>>> 
>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>> ---
>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>   create mode 100644 config/cfgroot/manualpages
>>> 
>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>> index 79accbe8a..e97f90d67 100644
>>> --- a/config/cfgroot/header.pl
>>> +++ b/config/cfgroot/header.pl
>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>       };
>>>   };
>>>   +### Initialize user manual
>>> +my %manualpages = ();
>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>   +### Load selected language and theme functions
>>>   require "${swroot}/langs/en.pl";
>>>   require "${swroot}/langs/${language}.pl";
>>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>> @@ -553,3 +557,19 @@ sub colorize {
>>>           return $string;
>>>       }
>>>   }
>>> +
>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>> +sub get_manualpage_url() {
>>> +    my ($cgi_page) = @_;
>>> +
>>> +    # Ensure base url is configured
>>> +    return unless($manualpages{'BASE_URL'});
>>> +
>>> +    # Return URL
>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>> +    }
>>> +
>>> +    # No manual page configured, return nothing
>>> +    return;
>>> +}
>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>> new file mode 100644
>>> index 000000000..e5ab1a13c
>>> --- /dev/null
>>> +++ b/config/cfgroot/manualpages
>>> @@ -0,0 +1,7 @@
>>> +# User manual base URL (without trailing slash)
>>> +BASE_URL=https://wiki.ipfire.org
>>> +
>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>> +index=configuration/system/startpage
>>> +pppsetup=configuration/system/dial
>>> +qos=configuration/services/qos
>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>> index b92f476c4..661773675 100644
>>> --- a/html/html/themes/ipfire/include/css/style.css
>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>> @@ -169,6 +169,19 @@ iframe {
>>>       margin-bottom: 1em;
>>>   }
>>>   +#main_header > * {
>>> +    display: inline-block;
>>> +    vertical-align: baseline;
>>> +}
>>> +
>>> +#main_header > span {
>>> +    margin-left: 0.8em;
>>> +}
>>> +
>>> +#main_header img {
>>> +    padding: 0;
>>> +}
>>> +
>>>   #footer {
>>>       height: 2.5em;
>>>       margin-bottom: 1em;
>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>> index 9f12bbe59..18931428e 100644
>>> --- a/html/html/themes/ipfire/include/functions.pl
>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>> @@ -170,7 +170,22 @@ END
>>>   print <<END
>>>       <div class="bigbox fixed">
>>>           <div id="main_inner" class="fixed">
>>> -            <h1>$title</h1>
>>> +            <div id="main_header">
>>> +                <h1>$title</h1>
>>> +END
>>> +;
>>> +
>>> +# Print user manual link
>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>> +if($manual_url) {
>>> +    print <<END
>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>> +END
>>> +;
>>> +}
>>> +
>>> +print <<END
>>> +            </div>
>>>   END
>>>   ;
>>>   }
>>>
Leo-Andres Hofmann Oct. 5, 2021, 7:57 a.m. UTC | #5
Hi,

Am 04.10.2021 um 22:34 schrieb Bernhard Bitsch:
> Hi all,
>
> Am 04.10.2021 um 19:42 schrieb Leo Hofmann:
>> Hi all,
>>
>> @Bernhard, Thank you again for testing this patch!
>>
>> @Jon, This is the file format of the manualpages configuration:
>>
>> [cgi basename]=[path/to/page]
>>
>> For example:
>>
>>  > BASE_URL=https://wiki.ipfire.org
>>  > index=configuration/system/startpage
>>
>> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
>> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
>>
>> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
>
> Another part is the sampling of all help pages.
> Should this be done in several patches for different pages or by collecting the contributions by one person ( Leo? ), which submit one patch?
I suggest everyone sends their contribution as a patch so that git shows the correct author later on. But if that doesn't work, of course I'm happy to collect everything!
> ( I've applied the mechanism to other pages, yet. And are very satisfied with it! Great idea! )
:)
>
> Regards,
> Bernhard

Regards,
Leo

>
>> So I would suggest we wait until this has been approved and integrated.
>>
>> Regards,
>> Leo
>>
>> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>
>>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>>> This patch adds a little "help" icon to the page header.
>>>> If a manual entry exists for a configuration page, the icon
>>>> appears and offers a quick way to access the wiki.
>>>> Wiki pages can be configured in the "manualpages" file.
>>>>
>>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>>> ---
>>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>>   create mode 100644 config/cfgroot/manualpages
>>>>
>>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>>> index 79accbe8a..e97f90d67 100644
>>>> --- a/config/cfgroot/header.pl
>>>> +++ b/config/cfgroot/header.pl
>>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>>       };
>>>>   };
>>>>   +### Initialize user manual
>>>> +my %manualpages = ();
>>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>>   +### Load selected language and theme functions
>>>>   require "${swroot}/langs/en.pl";
>>>>   require "${swroot}/langs/${language}.pl";
>>>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>>> @@ -553,3 +557,19 @@ sub colorize {
>>>>           return $string;
>>>>       }
>>>>   }
>>>> +
>>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>>> +sub get_manualpage_url() {
>>>> +    my ($cgi_page) = @_;
>>>> +
>>>> +    # Ensure base url is configured
>>>> +    return unless($manualpages{'BASE_URL'});
>>>> +
>>>> +    # Return URL
>>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>>> +    }
>>>> +
>>>> +    # No manual page configured, return nothing
>>>> +    return;
>>>> +}
>>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>>> new file mode 100644
>>>> index 000000000..e5ab1a13c
>>>> --- /dev/null
>>>> +++ b/config/cfgroot/manualpages
>>>> @@ -0,0 +1,7 @@
>>>> +# User manual base URL (without trailing slash)
>>>> +BASE_URL=https://wiki.ipfire.org
>>>> +
>>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>>> +index=configuration/system/startpage
>>>> +pppsetup=configuration/system/dial
>>>> +qos=configuration/services/qos
>>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>>> index b92f476c4..661773675 100644
>>>> --- a/html/html/themes/ipfire/include/css/style.css
>>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>>> @@ -169,6 +169,19 @@ iframe {
>>>>       margin-bottom: 1em;
>>>>   }
>>>>   +#main_header > * {
>>>> +    display: inline-block;
>>>> +    vertical-align: baseline;
>>>> +}
>>>> +
>>>> +#main_header > span {
>>>> +    margin-left: 0.8em;
>>>> +}
>>>> +
>>>> +#main_header img {
>>>> +    padding: 0;
>>>> +}
>>>> +
>>>>   #footer {
>>>>       height: 2.5em;
>>>>       margin-bottom: 1em;
>>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>>> index 9f12bbe59..18931428e 100644
>>>> --- a/html/html/themes/ipfire/include/functions.pl
>>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>>> @@ -170,7 +170,22 @@ END
>>>>   print <<END
>>>>       <div class="bigbox fixed">
>>>>           <div id="main_inner" class="fixed">
>>>> -            <h1>$title</h1>
>>>> +            <div id="main_header">
>>>> +                <h1>$title</h1>
>>>> +END
>>>> +;
>>>> +
>>>> +# Print user manual link
>>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>>> +if($manual_url) {
>>>> +    print <<END
>>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>>> +END
>>>> +;
>>>> +}
>>>> +
>>>> +print <<END
>>>> +            </div>
>>>>   END
>>>>   ;
>>>>   }
>>>>
Jon Murphy Oct. 6, 2021, 3:18 a.m. UTC | #6
Leo,

This should be complete.  But I don't know how to test.

Jon
> On Oct 4, 2021, at 10:40 PM, Jon Murphy <jcmurphy26@gmail.com> wrote:
> 
> Here is a quick template to get started:
> 
> <manualpages>
> 
> 
> 
> I'll keep going tomorrow.
> 
> 
> Jon
> 
> 
> 
>> On Oct 4, 2021, at 12:42 PM, Leo Hofmann <hofmann@leo-andres.de> wrote:
>> 
>> Hi all,
>> 
>> @Bernhard, Thank you again for testing this patch!
>> 
>> @Jon, This is the file format of the manualpages configuration:
>> 
>> [cgi basename]=[path/to/page]
>> 
>> For example:
>> 
>>> BASE_URL=https://wiki.ipfire.org
>>> index=configuration/system/startpage
>> 
>> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
>> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
>> 
>> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
>> So I would suggest we wait until this has been approved and integrated.
>> 
>> Regards,
>> Leo
>> 
>> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>> 
>>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>>> This patch adds a little "help" icon to the page header.
>>>> If a manual entry exists for a configuration page, the icon
>>>> appears and offers a quick way to access the wiki.
>>>> Wiki pages can be configured in the "manualpages" file.
>>>> 
>>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>>> ---
>>>>  config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>>  config/cfgroot/manualpages                    |  7 +++++++
>>>>  html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>>  html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>>  4 files changed, 56 insertions(+), 1 deletion(-)
>>>>  create mode 100644 config/cfgroot/manualpages
>>>> 
>>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>>> index 79accbe8a..e97f90d67 100644
>>>> --- a/config/cfgroot/header.pl
>>>> +++ b/config/cfgroot/header.pl
>>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>>      };
>>>>  };
>>>>  +### Initialize user manual
>>>> +my %manualpages = ();
>>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>>  +### Load selected language and theme functions
>>>>  require "${swroot}/langs/en.pl";
>>>>  require "${swroot}/langs/${language}.pl";
>>>>  eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>>> @@ -553,3 +557,19 @@ sub colorize {
>>>>          return $string;
>>>>      }
>>>>  }
>>>> +
>>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>>> +sub get_manualpage_url() {
>>>> +    my ($cgi_page) = @_;
>>>> +
>>>> +    # Ensure base url is configured
>>>> +    return unless($manualpages{'BASE_URL'});
>>>> +
>>>> +    # Return URL
>>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>>> +    }
>>>> +
>>>> +    # No manual page configured, return nothing
>>>> +    return;
>>>> +}
>>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>>> new file mode 100644
>>>> index 000000000..e5ab1a13c
>>>> --- /dev/null
>>>> +++ b/config/cfgroot/manualpages
>>>> @@ -0,0 +1,7 @@
>>>> +# User manual base URL (without trailing slash)
>>>> +BASE_URL=https://wiki.ipfire.org
>>>> +
>>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>>> +index=configuration/system/startpage
>>>> +pppsetup=configuration/system/dial
>>>> +qos=configuration/services/qos
>>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>>> index b92f476c4..661773675 100644
>>>> --- a/html/html/themes/ipfire/include/css/style.css
>>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>>> @@ -169,6 +169,19 @@ iframe {
>>>>      margin-bottom: 1em;
>>>>  }
>>>>  +#main_header > * {
>>>> +    display: inline-block;
>>>> +    vertical-align: baseline;
>>>> +}
>>>> +
>>>> +#main_header > span {
>>>> +    margin-left: 0.8em;
>>>> +}
>>>> +
>>>> +#main_header img {
>>>> +    padding: 0;
>>>> +}
>>>> +
>>>>  #footer {
>>>>      height: 2.5em;
>>>>      margin-bottom: 1em;
>>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>>> index 9f12bbe59..18931428e 100644
>>>> --- a/html/html/themes/ipfire/include/functions.pl
>>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>>> @@ -170,7 +170,22 @@ END
>>>>  print <<END
>>>>      <div class="bigbox fixed">
>>>>          <div id="main_inner" class="fixed">
>>>> -            <h1>$title</h1>
>>>> +            <div id="main_header">
>>>> +                <h1>$title</h1>
>>>> +END
>>>> +;
>>>> +
>>>> +# Print user manual link
>>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>>> +if($manual_url) {
>>>> +    print <<END
>>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>>> +END
>>>> +;
>>>> +}
>>>> +
>>>> +print <<END
>>>> +            </div>
>>>>  END
>>>>  ;
>>>>  }
>>>> 
>
Bernhard Bitsch Oct. 6, 2021, 9:23 a.m. UTC | #7
Hi,

I've just included the file into my system.
There are no problems.
So a new patch with this file can start the formal verification and test 
process.

The original patch has some flaws ( function name, location in source ) 
I will comment in an extra answer.

Regards,
Bernhard

Am 06.10.2021 um 05:18 schrieb Jon Murphy:
> Leo,
> 
> This should be complete.  But I don't know how to test.
> 
> Jon
> 
> 
> 
> 
> 
>> On Oct 4, 2021, at 10:40 PM, Jon Murphy <jcmurphy26@gmail.com> wrote:
>>
>> Here is a quick template to get started:
>>
>> <manualpages>
>>
>>
>>
>> I'll keep going tomorrow.
>>
>>
>> Jon
>>
>>
>>
>>> On Oct 4, 2021, at 12:42 PM, Leo Hofmann <hofmann@leo-andres.de> wrote:
>>>
>>> Hi all,
>>>
>>> @Bernhard, Thank you again for testing this patch!
>>>
>>> @Jon, This is the file format of the manualpages configuration:
>>>
>>> [cgi basename]=[path/to/page]
>>>
>>> For example:
>>>
>>>> BASE_URL=https://wiki.ipfire.org
>>>> index=configuration/system/startpage
>>>
>>> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
>>> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
>>>
>>> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
>>> So I would suggest we wait until this has been approved and integrated.
>>>
>>> Regards,
>>> Leo
>>>
>>> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>>>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>>
>>>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>>>> This patch adds a little "help" icon to the page header.
>>>>> If a manual entry exists for a configuration page, the icon
>>>>> appears and offers a quick way to access the wiki.
>>>>> Wiki pages can be configured in the "manualpages" file.
>>>>>
>>>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>>>> ---
>>>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>>>   create mode 100644 config/cfgroot/manualpages
>>>>>
>>>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>>>> index 79accbe8a..e97f90d67 100644
>>>>> --- a/config/cfgroot/header.pl
>>>>> +++ b/config/cfgroot/header.pl
>>>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>>>       };
>>>>>   };
>>>>>   +### Initialize user manual
>>>>> +my %manualpages = ();
>>>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>>>   +### Load selected language and theme functions
>>>>>   require "${swroot}/langs/en.pl";
>>>>>   require "${swroot}/langs/${language}.pl";
>>>>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>>>> @@ -553,3 +557,19 @@ sub colorize {
>>>>>           return $string;
>>>>>       }
>>>>>   }
>>>>> +
>>>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>>>> +sub get_manualpage_url() {
>>>>> +    my ($cgi_page) = @_;
>>>>> +
>>>>> +    # Ensure base url is configured
>>>>> +    return unless($manualpages{'BASE_URL'});
>>>>> +
>>>>> +    # Return URL
>>>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>>>> +    }
>>>>> +
>>>>> +    # No manual page configured, return nothing
>>>>> +    return;
>>>>> +}
>>>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>>>> new file mode 100644
>>>>> index 000000000..e5ab1a13c
>>>>> --- /dev/null
>>>>> +++ b/config/cfgroot/manualpages
>>>>> @@ -0,0 +1,7 @@
>>>>> +# User manual base URL (without trailing slash)
>>>>> +BASE_URL=https://wiki.ipfire.org
>>>>> +
>>>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>>>> +index=configuration/system/startpage
>>>>> +pppsetup=configuration/system/dial
>>>>> +qos=configuration/services/qos
>>>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>>>> index b92f476c4..661773675 100644
>>>>> --- a/html/html/themes/ipfire/include/css/style.css
>>>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>>>> @@ -169,6 +169,19 @@ iframe {
>>>>>       margin-bottom: 1em;
>>>>>   }
>>>>>   +#main_header > * {
>>>>> +    display: inline-block;
>>>>> +    vertical-align: baseline;
>>>>> +}
>>>>> +
>>>>> +#main_header > span {
>>>>> +    margin-left: 0.8em;
>>>>> +}
>>>>> +
>>>>> +#main_header img {
>>>>> +    padding: 0;
>>>>> +}
>>>>> +
>>>>>   #footer {
>>>>>       height: 2.5em;
>>>>>       margin-bottom: 1em;
>>>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>>>> index 9f12bbe59..18931428e 100644
>>>>> --- a/html/html/themes/ipfire/include/functions.pl
>>>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>>>> @@ -170,7 +170,22 @@ END
>>>>>   print <<END
>>>>>       <div class="bigbox fixed">
>>>>>           <div id="main_inner" class="fixed">
>>>>> -            <h1>$title</h1>
>>>>> +            <div id="main_header">
>>>>> +                <h1>$title</h1>
>>>>> +END
>>>>> +;
>>>>> +
>>>>> +# Print user manual link
>>>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>>>> +if($manual_url) {
>>>>> +    print <<END
>>>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>>>> +END
>>>>> +;
>>>>> +}
>>>>> +
>>>>> +print <<END
>>>>> +            </div>
>>>>>   END
>>>>>   ;
>>>>>   }
>>>>>
>>
>
Leo-Andres Hofmann Oct. 6, 2021, 10:18 a.m. UTC | #8
Hi Jon,

I have just tested the file. Great job, it works flawlessly!
Now I'm looking forward to more feedback and hope this will be integrated soon :)

Best regards,
Leo

Am 06.10.2021 um 05:18 schrieb Jon Murphy:
> Leo,
>
> This should be complete.  But I don't know how to test.
>
> Jon
>
>
>
>
>> On Oct 4, 2021, at 10:40 PM, Jon Murphy <jcmurphy26@gmail.com> wrote:
>>
>> Here is a quick template to get started:
>>
>> <manualpages>
>>
>>
>>
>> I'll keep going tomorrow.
>>
>>
>> Jon
>>
>>
>>
>>> On Oct 4, 2021, at 12:42 PM, Leo Hofmann <hofmann@leo-andres.de> wrote:
>>>
>>> Hi all,
>>>
>>> @Bernhard, Thank you again for testing this patch!
>>>
>>> @Jon, This is the file format of the manualpages configuration:
>>>
>>> [cgi basename]=[path/to/page]
>>>
>>> For example:
>>>
>>>> BASE_URL=https://wiki.ipfire.org
>>>> index=configuration/system/startpage
>>> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
>>> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
>>>
>>> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
>>> So I would suggest we wait until this has been approved and integrated.
>>>
>>> Regards,
>>> Leo
>>>
>>> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>>>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>>
>>>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>>>> This patch adds a little "help" icon to the page header.
>>>>> If a manual entry exists for a configuration page, the icon
>>>>> appears and offers a quick way to access the wiki.
>>>>> Wiki pages can be configured in the "manualpages" file.
>>>>>
>>>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>>>> ---
>>>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>>>   create mode 100644 config/cfgroot/manualpages
>>>>>
>>>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>>>> index 79accbe8a..e97f90d67 100644
>>>>> --- a/config/cfgroot/header.pl
>>>>> +++ b/config/cfgroot/header.pl
>>>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>>>       };
>>>>>   };
>>>>>   +### Initialize user manual
>>>>> +my %manualpages = ();
>>>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>>>   +### Load selected language and theme functions
>>>>>   require "${swroot}/langs/en.pl";
>>>>>   require "${swroot}/langs/${language}.pl";
>>>>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>>>> @@ -553,3 +557,19 @@ sub colorize {
>>>>>           return $string;
>>>>>       }
>>>>>   }
>>>>> +
>>>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>>>> +sub get_manualpage_url() {
>>>>> +    my ($cgi_page) = @_;
>>>>> +
>>>>> +    # Ensure base url is configured
>>>>> +    return unless($manualpages{'BASE_URL'});
>>>>> +
>>>>> +    # Return URL
>>>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>>>> +    }
>>>>> +
>>>>> +    # No manual page configured, return nothing
>>>>> +    return;
>>>>> +}
>>>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>>>> new file mode 100644
>>>>> index 000000000..e5ab1a13c
>>>>> --- /dev/null
>>>>> +++ b/config/cfgroot/manualpages
>>>>> @@ -0,0 +1,7 @@
>>>>> +# User manual base URL (without trailing slash)
>>>>> +BASE_URL=https://wiki.ipfire.org
>>>>> +
>>>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>>>> +index=configuration/system/startpage
>>>>> +pppsetup=configuration/system/dial
>>>>> +qos=configuration/services/qos
>>>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>>>> index b92f476c4..661773675 100644
>>>>> --- a/html/html/themes/ipfire/include/css/style.css
>>>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>>>> @@ -169,6 +169,19 @@ iframe {
>>>>>       margin-bottom: 1em;
>>>>>   }
>>>>>   +#main_header > * {
>>>>> +    display: inline-block;
>>>>> +    vertical-align: baseline;
>>>>> +}
>>>>> +
>>>>> +#main_header > span {
>>>>> +    margin-left: 0.8em;
>>>>> +}
>>>>> +
>>>>> +#main_header img {
>>>>> +    padding: 0;
>>>>> +}
>>>>> +
>>>>>   #footer {
>>>>>       height: 2.5em;
>>>>>       margin-bottom: 1em;
>>>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>>>> index 9f12bbe59..18931428e 100644
>>>>> --- a/html/html/themes/ipfire/include/functions.pl
>>>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>>>> @@ -170,7 +170,22 @@ END
>>>>>   print <<END
>>>>>       <div class="bigbox fixed">
>>>>>           <div id="main_inner" class="fixed">
>>>>> -            <h1>$title</h1>
>>>>> +            <div id="main_header">
>>>>> +                <h1>$title</h1>
>>>>> +END
>>>>> +;
>>>>> +
>>>>> +# Print user manual link
>>>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>>>> +if($manual_url) {
>>>>> +    print <<END
>>>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>>>> +END
>>>>> +;
>>>>> +}
>>>>> +
>>>>> +print <<END
>>>>> +            </div>
>>>>>   END
>>>>>   ;
>>>>>   }
>>>>>
Leo-Andres Hofmann Oct. 19, 2021, 8:27 p.m. UTC | #9
Hi Bernhard,

Am 06.10.2021 um 11:23 schrieb Bernhard Bitsch:
> Hi,
>
> I've just included the file into my system.
> There are no problems.
> So a new patch with this file can start the formal verification and test process.
>
> The original patch has some flaws ( function name, location in source ) I will comment in an extra answer.

Have you had time to collect the issues yet? I'd like to continue working on them.

Best regards,
Leo

>
> Regards,
> Bernhard
>
> Am 06.10.2021 um 05:18 schrieb Jon Murphy:
>> Leo,
>>
>> This should be complete.  But I don't know how to test.
>>
>> Jon
>>
>>
>>
>>
>>
>>> On Oct 4, 2021, at 10:40 PM, Jon Murphy <jcmurphy26@gmail.com> wrote:
>>>
>>> Here is a quick template to get started:
>>>
>>> <manualpages>
>>>
>>>
>>>
>>> I'll keep going tomorrow.
>>>
>>>
>>> Jon
>>>
>>>
>>>
>>>> On Oct 4, 2021, at 12:42 PM, Leo Hofmann <hofmann@leo-andres.de> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> @Bernhard, Thank you again for testing this patch!
>>>>
>>>> @Jon, This is the file format of the manualpages configuration:
>>>>
>>>> [cgi basename]=[path/to/page]
>>>>
>>>> For example:
>>>>
>>>>> BASE_URL=https://wiki.ipfire.org
>>>>> index=configuration/system/startpage
>>>>
>>>> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
>>>> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
>>>>
>>>> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
>>>> So I would suggest we wait until this has been approved and integrated.
>>>>
>>>> Regards,
>>>> Leo
>>>>
>>>> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>>>>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>>>
>>>>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>>>>> This patch adds a little "help" icon to the page header.
>>>>>> If a manual entry exists for a configuration page, the icon
>>>>>> appears and offers a quick way to access the wiki.
>>>>>> Wiki pages can be configured in the "manualpages" file.
>>>>>>
>>>>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>>>>> ---
>>>>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>>>>   create mode 100644 config/cfgroot/manualpages
>>>>>>
>>>>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>>>>> index 79accbe8a..e97f90d67 100644
>>>>>> --- a/config/cfgroot/header.pl
>>>>>> +++ b/config/cfgroot/header.pl
>>>>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>>>>       };
>>>>>>   };
>>>>>>   +### Initialize user manual
>>>>>> +my %manualpages = ();
>>>>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>>>>   +### Load selected language and theme functions
>>>>>>   require "${swroot}/langs/en.pl";
>>>>>>   require "${swroot}/langs/${language}.pl";
>>>>>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>>>>> @@ -553,3 +557,19 @@ sub colorize {
>>>>>>           return $string;
>>>>>>       }
>>>>>>   }
>>>>>> +
>>>>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>>>>> +sub get_manualpage_url() {
>>>>>> +    my ($cgi_page) = @_;
>>>>>> +
>>>>>> +    # Ensure base url is configured
>>>>>> +    return unless($manualpages{'BASE_URL'});
>>>>>> +
>>>>>> +    # Return URL
>>>>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>>>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>>>>> +    }
>>>>>> +
>>>>>> +    # No manual page configured, return nothing
>>>>>> +    return;
>>>>>> +}
>>>>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>>>>> new file mode 100644
>>>>>> index 000000000..e5ab1a13c
>>>>>> --- /dev/null
>>>>>> +++ b/config/cfgroot/manualpages
>>>>>> @@ -0,0 +1,7 @@
>>>>>> +# User manual base URL (without trailing slash)
>>>>>> +BASE_URL=https://wiki.ipfire.org
>>>>>> +
>>>>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>>>>> +index=configuration/system/startpage
>>>>>> +pppsetup=configuration/system/dial
>>>>>> +qos=configuration/services/qos
>>>>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>>>>> index b92f476c4..661773675 100644
>>>>>> --- a/html/html/themes/ipfire/include/css/style.css
>>>>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>>>>> @@ -169,6 +169,19 @@ iframe {
>>>>>>       margin-bottom: 1em;
>>>>>>   }
>>>>>>   +#main_header > * {
>>>>>> +    display: inline-block;
>>>>>> +    vertical-align: baseline;
>>>>>> +}
>>>>>> +
>>>>>> +#main_header > span {
>>>>>> +    margin-left: 0.8em;
>>>>>> +}
>>>>>> +
>>>>>> +#main_header img {
>>>>>> +    padding: 0;
>>>>>> +}
>>>>>> +
>>>>>>   #footer {
>>>>>>       height: 2.5em;
>>>>>>       margin-bottom: 1em;
>>>>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>>>>> index 9f12bbe59..18931428e 100644
>>>>>> --- a/html/html/themes/ipfire/include/functions.pl
>>>>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>>>>> @@ -170,7 +170,22 @@ END
>>>>>>   print <<END
>>>>>>       <div class="bigbox fixed">
>>>>>>           <div id="main_inner" class="fixed">
>>>>>> -            <h1>$title</h1>
>>>>>> +            <div id="main_header">
>>>>>> +                <h1>$title</h1>
>>>>>> +END
>>>>>> +;
>>>>>> +
>>>>>> +# Print user manual link
>>>>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>>>>> +if($manual_url) {
>>>>>> +    print <<END
>>>>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>>>>> +END
>>>>>> +;
>>>>>> +}
>>>>>> +
>>>>>> +print <<END
>>>>>> +            </div>
>>>>>>   END
>>>>>>   ;
>>>>>>   }
>>>>>>
>>>
>>
Michael Tremer Oct. 20, 2021, 2:29 p.m. UTC | #10
Hello,

I think the function is the place where it should be.

Reviewed-by: Michael Tremer <michael.tremer@ipfire.org>

-Michael

> On 19 Oct 2021, at 21:27, Leo Hofmann <hofmann@leo-andres.de> wrote:
> 
> Hi Bernhard,
> 
> Am 06.10.2021 um 11:23 schrieb Bernhard Bitsch:
>> Hi,
>> 
>> I've just included the file into my system.
>> There are no problems.
>> So a new patch with this file can start the formal verification and test process.
>> 
>> The original patch has some flaws ( function name, location in source ) I will comment in an extra answer.
> 
> Have you had time to collect the issues yet? I'd like to continue working on them.
> 
> Best regards,
> Leo
> 
>> 
>> Regards,
>> Bernhard
>> 
>> Am 06.10.2021 um 05:18 schrieb Jon Murphy:
>>> Leo,
>>> 
>>> This should be complete.  But I don't know how to test.
>>> 
>>> Jon
>>> 
>>> 
>>> 
>>> 
>>> 
>>>> On Oct 4, 2021, at 10:40 PM, Jon Murphy <jcmurphy26@gmail.com> wrote:
>>>> 
>>>> Here is a quick template to get started:
>>>> 
>>>> <manualpages>
>>>> 
>>>> 
>>>> 
>>>> I'll keep going tomorrow.
>>>> 
>>>> 
>>>> Jon
>>>> 
>>>> 
>>>> 
>>>>> On Oct 4, 2021, at 12:42 PM, Leo Hofmann <hofmann@leo-andres.de> wrote:
>>>>> 
>>>>> Hi all,
>>>>> 
>>>>> @Bernhard, Thank you again for testing this patch!
>>>>> 
>>>>> @Jon, This is the file format of the manualpages configuration:
>>>>> 
>>>>> [cgi basename]=[path/to/page]
>>>>> 
>>>>> For example:
>>>>> 
>>>>>> BASE_URL=https://wiki.ipfire.org
>>>>>> index=configuration/system/startpage
>>>>> 
>>>>> Results in "index.cgi" linking to "https://wiki.ipfire.org/configuration/system/startpage".
>>>>> Please note that the path does not start with a slash, because the get_manualpage_url function always adds one between the base url and the path.
>>>>> 
>>>>> Unfortunately, I couldn't figure out how to include all this in the installer and I need help with that.
>>>>> So I would suggest we wait until this has been approved and integrated.
>>>>> 
>>>>> Regards,
>>>>> Leo
>>>>> 
>>>>> Am 28.09.2021 um 14:55 schrieb Bernhard Bitsch:
>>>>>> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>>>> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
>>>>>> 
>>>>>> Am 28.09.2021 um 13:09 schrieb Leo-Andres Hofmann:
>>>>>>> This patch adds a little "help" icon to the page header.
>>>>>>> If a manual entry exists for a configuration page, the icon
>>>>>>> appears and offers a quick way to access the wiki.
>>>>>>> Wiki pages can be configured in the "manualpages" file.
>>>>>>> 
>>>>>>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>>>>>>> ---
>>>>>>>   config/cfgroot/header.pl                      | 20 +++++++++++++++++++
>>>>>>>   config/cfgroot/manualpages                    |  7 +++++++
>>>>>>>   html/html/themes/ipfire/include/css/style.css | 13 ++++++++++++
>>>>>>>   html/html/themes/ipfire/include/functions.pl  | 17 +++++++++++++++-
>>>>>>>   4 files changed, 56 insertions(+), 1 deletion(-)
>>>>>>>   create mode 100644 config/cfgroot/manualpages
>>>>>>> 
>>>>>>> diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
>>>>>>> index 79accbe8a..e97f90d67 100644
>>>>>>> --- a/config/cfgroot/header.pl
>>>>>>> +++ b/config/cfgroot/header.pl
>>>>>>> @@ -91,7 +91,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
>>>>>>>       };
>>>>>>>   };
>>>>>>>   +### Initialize user manual
>>>>>>> +my %manualpages = ();
>>>>>>> +&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
>>>>>>>   +### Load selected language and theme functions
>>>>>>>   require "${swroot}/langs/en.pl";
>>>>>>>   require "${swroot}/langs/${language}.pl";
>>>>>>>   eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
>>>>>>> @@ -553,3 +557,19 @@ sub colorize {
>>>>>>>           return $string;
>>>>>>>       }
>>>>>>>   }
>>>>>>> +
>>>>>>> +# Get user manual URL for the specified configuration page, returns empty if no entry is configured
>>>>>>> +sub get_manualpage_url() {
>>>>>>> +    my ($cgi_page) = @_;
>>>>>>> +
>>>>>>> +    # Ensure base url is configured
>>>>>>> +    return unless($manualpages{'BASE_URL'});
>>>>>>> +
>>>>>>> +    # Return URL
>>>>>>> +    if($cgi_page && defined($manualpages{$cgi_page})) {
>>>>>>> +        return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    # No manual page configured, return nothing
>>>>>>> +    return;
>>>>>>> +}
>>>>>>> diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
>>>>>>> new file mode 100644
>>>>>>> index 000000000..e5ab1a13c
>>>>>>> --- /dev/null
>>>>>>> +++ b/config/cfgroot/manualpages
>>>>>>> @@ -0,0 +1,7 @@
>>>>>>> +# User manual base URL (without trailing slash)
>>>>>>> +BASE_URL=https://wiki.ipfire.org
>>>>>>> +
>>>>>>> +# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
>>>>>>> +index=configuration/system/startpage
>>>>>>> +pppsetup=configuration/system/dial
>>>>>>> +qos=configuration/services/qos
>>>>>>> diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
>>>>>>> index b92f476c4..661773675 100644
>>>>>>> --- a/html/html/themes/ipfire/include/css/style.css
>>>>>>> +++ b/html/html/themes/ipfire/include/css/style.css
>>>>>>> @@ -169,6 +169,19 @@ iframe {
>>>>>>>       margin-bottom: 1em;
>>>>>>>   }
>>>>>>>   +#main_header > * {
>>>>>>> +    display: inline-block;
>>>>>>> +    vertical-align: baseline;
>>>>>>> +}
>>>>>>> +
>>>>>>> +#main_header > span {
>>>>>>> +    margin-left: 0.8em;
>>>>>>> +}
>>>>>>> +
>>>>>>> +#main_header img {
>>>>>>> +    padding: 0;
>>>>>>> +}
>>>>>>> +
>>>>>>>   #footer {
>>>>>>>       height: 2.5em;
>>>>>>>       margin-bottom: 1em;
>>>>>>> diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
>>>>>>> index 9f12bbe59..18931428e 100644
>>>>>>> --- a/html/html/themes/ipfire/include/functions.pl
>>>>>>> +++ b/html/html/themes/ipfire/include/functions.pl
>>>>>>> @@ -170,7 +170,22 @@ END
>>>>>>>   print <<END
>>>>>>>       <div class="bigbox fixed">
>>>>>>>           <div id="main_inner" class="fixed">
>>>>>>> -            <h1>$title</h1>
>>>>>>> +            <div id="main_header">
>>>>>>> +                <h1>$title</h1>
>>>>>>> +END
>>>>>>> +;
>>>>>>> +
>>>>>>> +# Print user manual link
>>>>>>> +my $manual_url = &Header::get_manualpage_url($scriptName);
>>>>>>> +if($manual_url) {
>>>>>>> +    print <<END
>>>>>>> +                <span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
>>>>>>> +END
>>>>>>> +;
>>>>>>> +}
>>>>>>> +
>>>>>>> +print <<END
>>>>>>> +            </div>
>>>>>>>   END
>>>>>>>   ;
>>>>>>>   }
>>>>>>> 
>>>> 
>>>

Patch

diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl
index 79accbe8a..e97f90d67 100644
--- a/config/cfgroot/header.pl
+++ b/config/cfgroot/header.pl
@@ -91,7 +91,11 @@  if ( -d "/var/ipfire/langs/${language}/" ) {
     };
 };
 
+### Initialize user manual
+my %manualpages = ();
+&General::readhash("${General::swroot}/main/manualpages", \%manualpages);
 
+### Load selected language and theme functions
 require "${swroot}/langs/en.pl";
 require "${swroot}/langs/${language}.pl";
 eval `/bin/cat /srv/web/ipfire/html/themes/ipfire/include/functions.pl`;
@@ -553,3 +557,19 @@  sub colorize {
 		return $string;
 	}
 }
+
+# Get user manual URL for the specified configuration page, returns empty if no entry is configured
+sub get_manualpage_url() {
+	my ($cgi_page) = @_;
+
+	# Ensure base url is configured
+	return unless($manualpages{'BASE_URL'});
+
+	# Return URL
+	if($cgi_page && defined($manualpages{$cgi_page})) {
+		return "$manualpages{'BASE_URL'}/$manualpages{$cgi_page}";
+	}
+
+	# No manual page configured, return nothing
+	return;
+}
diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
new file mode 100644
index 000000000..e5ab1a13c
--- /dev/null
+++ b/config/cfgroot/manualpages
@@ -0,0 +1,7 @@ 
+# User manual base URL (without trailing slash)
+BASE_URL=https://wiki.ipfire.org
+
+# Assign manual page URL path to CGI file ([cgi basename]=[path/to/page])
+index=configuration/system/startpage
+pppsetup=configuration/system/dial
+qos=configuration/services/qos
diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
index b92f476c4..661773675 100644
--- a/html/html/themes/ipfire/include/css/style.css
+++ b/html/html/themes/ipfire/include/css/style.css
@@ -169,6 +169,19 @@  iframe {
 	margin-bottom: 1em;
 }
 
+#main_header > * {
+	display: inline-block;
+	vertical-align: baseline;
+}
+
+#main_header > span {
+	margin-left: 0.8em;
+}
+
+#main_header img {
+	padding: 0;
+}
+
 #footer {
 	height: 2.5em;
 	margin-bottom: 1em;
diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
index 9f12bbe59..18931428e 100644
--- a/html/html/themes/ipfire/include/functions.pl
+++ b/html/html/themes/ipfire/include/functions.pl
@@ -170,7 +170,22 @@  END
 print <<END
 	<div class="bigbox fixed">
 		<div id="main_inner" class="fixed">
-			<h1>$title</h1>
+			<div id="main_header">
+				<h1>$title</h1>
+END
+;
+
+# Print user manual link
+my $manual_url = &Header::get_manualpage_url($scriptName);
+if($manual_url) {
+	print <<END
+				<span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
+END
+;
+}
+
+print <<END
+			</div>
 END
 ;
 }