2012-04-15 22:25:23 +02:00
< ? php
/**
* Name : MathJax
* Description : Addon for Friendika to include MathJax ( LaTeX math syntax )
2018-04-10 19:22:32 +02:00
* Version : 1.1
* Author : Tobias Diekershoff < https :// social . diekershoff . de / profile / tobias >
2012-04-15 22:25:23 +02:00
* License : 3 - clause BSD license
*/
2018-04-10 19:22:32 +02:00
use Friendica\App ;
2018-01-17 01:51:12 +01:00
use Friendica\Core\Addon ;
2017-11-07 00:55:24 +01:00
use Friendica\Core\Config ;
2018-01-22 20:03:11 +01:00
use Friendica\Core\L10n ;
2017-11-07 00:55:24 +01:00
use Friendica\Core\PConfig ;
2012-04-15 22:25:23 +02:00
function mathjax_install () {
2018-01-17 01:51:12 +01:00
Addon :: registerHook ( 'page_header' , 'addon/mathjax/mathjax.php' , 'mathjax_page_header' );
2018-01-20 14:57:41 +01:00
Addon :: registerHook ( 'addon_settings' , 'addon/mathjax/mathjax.php' , 'mathjax_settings' );
Addon :: registerHook ( 'addon_settings_post' , 'addon/mathjax/mathjax.php' , 'mathjax_settings_post' );
2018-06-07 22:37:40 +02:00
Addon :: registerHook ( 'template_vars' , 'addon/mathjax/mathjax.php' , 'mathjax_template_vars' );
2018-01-20 14:57:41 +01:00
logger ( 'installed js_math addon' );
2012-04-15 22:25:23 +02:00
}
2018-06-07 22:37:40 +02:00
function mathjax_template_vars ( $a , & $arr ) {
$arr [ 'vars' ][ 'addon_hooks' ][] = " mathjax " ;
}
2012-04-15 22:25:23 +02:00
function mathjax_uninstall () {
2018-01-17 01:51:12 +01:00
Addon :: unregisterHook ( 'page_header' , 'addon/mathjax/mathjax.php' , 'mathjax_page_header' );
2018-01-20 14:57:41 +01:00
Addon :: unregisterHook ( 'addon_settings' , 'addon/mathjax/mathjax.php' , 'mathjax_settings' );
Addon :: unregisterHook ( 'addon_settings_post' , 'addon/mathjax/mathjax.php' , 'mathjax_settings_post' );
2018-06-07 22:37:40 +02:00
Addon :: unregisterHook ( 'template_vars' , 'addon/mathjax/mathjax.php' , 'mathjax_template_vars' );
2012-04-15 22:25:23 +02:00
}
function mathjax_settings_post ( $a , $post ) {
if ( ! local_user ())
return ;
if ( ! x ( $_POST , 'mathjax-submit' ))
return ;
2017-11-07 00:55:24 +01:00
PConfig :: set ( local_user (), 'mathjax' , 'use' , intval ( $_POST [ 'mathjax_use' ]));
2012-04-15 22:25:23 +02:00
}
function mathjax_settings ( & $a , & $s ) {
if ( ! local_user ())
return ;
2017-11-07 00:55:24 +01:00
$use = PConfig :: get ( local_user (), 'mathjax' , 'use' );
2012-04-15 22:25:23 +02:00
$usetext = (( $use ) ? ' checked="checked" ' : '' );
2013-12-01 11:37:51 +01:00
$s .= '<span id="settings_mathjax_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose(\'settings_mathjax_expanded\'); openClose(\'settings_mathjax_inflated\');">' ;
2018-01-22 20:03:11 +01:00
$s .= '<h3>MathJax ' . L10n :: t ( 'Settings' ) . '</h3>' ;
2013-12-01 11:37:51 +01:00
$s .= '</span>' ;
$s .= '<div id="settings_mathjax_expanded" class="settings-block" style="display: none;">' ;
$s .= '<span class="fakelink" onclick="openClose(\'settings_mathjax_expanded\'); openClose(\'settings_mathjax_inflated\');">' ;
2018-01-22 20:03:11 +01:00
$s .= '<h3>MathJax ' . L10n :: t ( 'Settings' ) . '</h3>' ;
2013-12-01 11:37:51 +01:00
$s .= '</span>' ;
2018-01-22 20:03:11 +01:00
$s .= '<p>' . L10n :: t ( 'The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.' ) . '</p>' ;
$s .= '<label id="mathjax_label" for="mathjax_use">' . L10n :: t ( 'Use the MathJax renderer' ) . '</label>' ;
2012-04-15 22:25:23 +02:00
$s .= '<input id="mathjax_use" type="checkbox" name="mathjax_use" value="1"' . $usetext . ' />' ;
$s .= '<div class="clear"></div>' ;
2018-01-22 20:03:11 +01:00
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="mathjax-submit" name="mathjax-submit" class="settings-submit" value="' . L10n :: t ( 'Save Settings' ) . '" /></div>' ;
2012-04-15 22:25:23 +02:00
$s .= '</div>' ;
}
/* we need to add one JavaScript include command to the html output
* note that you have to check the jsmath / easy / load . js too .
*/
function mathjax_page_header ( $a , & $b ) {
// if the visitor of the page is not a local_user, use MathJax
// otherwise check the users settings.
2017-11-07 00:55:24 +01:00
$url = Config :: get ( 'mathjax' , 'baseurl' );
2018-04-10 19:22:32 +02:00
if ( ! $url ) {
$url = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML' ;
}
2012-04-15 22:25:23 +02:00
if ( ! local_user ()) {
2018-04-10 19:22:32 +02:00
$b .= '<script type="text/javascript" src="' . $url . '" async></script>' ;
2012-04-15 22:25:23 +02:00
} else {
2017-11-07 00:55:24 +01:00
$use = PConfig :: get ( local_user (), 'mathjax' , 'use' );
2018-01-15 14:15:33 +01:00
if ( $use ) {
2018-04-10 19:22:32 +02:00
$b .= '<script type="text/javascript" src="' . $url . '" async></script>' ;
2012-04-15 22:25:23 +02:00
}
}
}
2018-01-20 14:57:41 +01:00
function mathjax_addon_admin_post ( & $a ) {
2018-04-10 19:22:32 +02:00
$baseurl = (( x ( $_POST , 'mjbaseurl' )) ? trim ( $_POST [ 'mjbaseurl' ]) : 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML' );
2017-11-07 00:55:24 +01:00
Config :: set ( 'mathjax' , 'baseurl' , $baseurl );
2018-01-22 20:03:11 +01:00
info ( L10n :: t ( 'Settings updated.' ) . EOL );
2012-04-15 22:25:23 +02:00
}
2018-04-10 19:22:32 +02:00
function mathjax_addon_admin ( App $a , & $o ) {
2012-12-22 21:36:35 +01:00
$t = get_markup_template ( " admin.tpl " , " addon/mathjax/ " );
2018-04-10 19:22:32 +02:00
2017-11-07 00:55:24 +01:00
if ( Config :: get ( 'mathjax' , 'baseurl' , '' ) == '' ) {
2018-04-10 19:22:32 +02:00
Config :: set ( 'mathjax' , 'baseurl' , 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML' );
2012-12-22 21:36:35 +01:00
}
2018-01-15 14:15:33 +01:00
$o = replace_macros ( $t , [
2018-01-22 20:03:11 +01:00
'$submit' => L10n :: t ( 'Save Settings' ),
2018-04-10 19:22:32 +02:00
'$mjbaseurl' => [ 'mjbaseurl' , L10n :: t ( 'MathJax Base URL' ), Config :: get ( 'mathjax' , 'baseurl' ), L10n :: t ( 'The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax.' ), 'required' ]
2018-01-15 14:15:33 +01:00
]);
2012-04-15 22:25:23 +02:00
}