Re-standardise codebase to WP Coding Standards (this time without the line ending changes)

git-svn-id: https://plugins.svn.wordpress.org/footnotes/trunk@2483354 b8457f37-d9ea-0310-8a92-e5e31aec5664
This commit is contained in:
Ben Goldsworthy 2021-03-01 07:57:12 +00:00
parent 05d316ae15
commit 8a859b61f7
30 changed files with 1974 additions and 1979 deletions

View file

@ -1,39 +1,32 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
/** /**
* Includes the Plugin Constants class to load all Plugin constant vars like Plugin name, etc. * Includes the Plugin Constants class to load all Plugin constant vars like Plugin name, etc.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 12.09.14 10:56 * @since 1.5.0
* @date 12.09.14 10:56
* *
* Edited for: * @since 2.0.4 add Public Plugin name for dashboard heading 2020-11-01T0452+0100
* 2.0.4 add Public Plugin name for dashboard heading 2020-11-01T0452+0100
*
* Last modified: 2021-02-18T2027+0100
*/ */
/** /**
* Contains all Plugin Constants. Contains no Method or Property. * Contains all Plugin Constants. Contains no Method or Property.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_Config { class MCI_Footnotes_Config {
/** /**
* Internal Plugin name. * Internal Plugin name.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */
const C_STR_PLUGIN_NAME = "footnotes"; const C_STR_PLUGIN_NAME = 'footnotes';
/** /**
* Public Plugin name. * Public Plugin name.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
* *
@ -58,7 +51,6 @@ class MCI_Footnotes_Config {
/** /**
* Html tag for the LOVE symbol. * Html tag for the LOVE symbol.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */
@ -75,7 +67,6 @@ class MCI_Footnotes_Config {
/** /**
* Short code to DON'T display the 'LOVE ME' slug on certain pages. * Short code to DON'T display the 'LOVE ME' slug on certain pages.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */

View file

@ -3,20 +3,16 @@
* Includes the Convert Class. * Includes the Convert Class.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 12.09.14 10:56 * @since 1.5.0
* @date 12.09.14 10:56
* *
* Edited:
* @since 2.2.0 add lowercase Roman 2020-12-12T1540+0100 * @since 2.2.0 add lowercase Roman 2020-12-12T1540+0100
*
* Last modified: 2020-12-12T1541+0100
*/ */
/** /**
* Converts data types and Footnotes specific values. * Converts data types and Footnotes specific values.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_Convert { class MCI_Footnotes_Convert {
@ -24,30 +20,29 @@ class MCI_Footnotes_Convert {
/** /**
* Converts a integer into the user-defined counter style for the footnotes. * Converts a integer into the user-defined counter style for the footnotes.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param int $p_int_Index Index to be converted. * @param int $p_int_index Index to be converted.
* @param string $p_str_ConvertStyle Style of the new/converted Index. * @param string $p_str_convert_style Style of the new/converted Index.
* @return string Converted Index as string in the defined counter style. * @return string Converted Index as string in the defined counter style.
* *
* Edited: * Edited:
* @since 2.2.0 lowercase Roman numerals supported * @since 2.2.0 lowercase Roman numerals supported
*/ */
public static function Index($p_int_Index, $p_str_ConvertStyle = "arabic_plain") { public static function index( $p_int_index, $p_str_convert_style = 'arabic_plain' ) {
switch ($p_str_ConvertStyle) { switch ( $p_str_convert_style ) {
case "romanic": case 'romanic':
return self::toRomanic($p_int_Index, true); return self::to_romanic( $p_int_index, true );
case "roman_low": case 'roman_low':
return self::toRomanic($p_int_Index, false); return self::to_romanic( $p_int_index, false );
case "latin_high": case 'latin_high':
return self::toLatin($p_int_Index, true); return self::to_latin( $p_int_index, true );
case "latin_low": case 'latin_low':
return self::toLatin($p_int_Index, false); return self::to_latin( $p_int_index, false );
case "arabic_leading": case 'arabic_leading':
return self::toArabicLeading($p_int_Index); return self::to_arabic_leading( $p_int_index );
case "arabic_plain": case 'arabic_plain':
default: default:
return $p_int_Index; return $p_int_index;
} }
} }
@ -55,65 +50,63 @@ class MCI_Footnotes_Convert {
* Converts an integer into latin ascii characters, either lower or upper-case. * Converts an integer into latin ascii characters, either lower or upper-case.
* Function available from A to ZZ ( means 676 footnotes at 1 page possible). * Function available from A to ZZ ( means 676 footnotes at 1 page possible).
* *
* @author Stefan Herndler
* @since 1.0-gamma * @since 1.0-gamma
* @param int $p_int_Value Value/Index to be converted. * @param int $p_int_value Value/Index to be converted.
* @param bool $p_bool_UpperCase True to convert the value to upper case letter, otherwise to lower case. * @param bool $p_bool_upper_case True to convert the value to upper case letter, otherwise to lower case.
* @return string * @return string
*/ */
private static function toLatin($p_int_Value, $p_bool_UpperCase) { private static function to_latin( $p_int_value, $p_bool_upper_case ) {
// output string // Output string.
$l_str_Return = ""; $l_str_return = '';
$l_int_Offset = 0; $l_int_offset = 0;
// check if the value is higher then 26 = Z // Check if the value is higher then 26 = Z.
while ($p_int_Value > 26) { while ( $p_int_value > 26 ) {
// increase offset and reduce counter // Increase offset and reduce counter.
$l_int_Offset++; $l_int_offset++;
$p_int_Value -= 26; $p_int_value -= 26;
} }
// if offset set (more then Z), then add a new letter in front // If offset set (more then Z), then add a new letter in front.
if ($l_int_Offset > 0) { if ( $l_int_offset > 0 ) {
$l_str_Return = chr($l_int_Offset + 64); $l_str_return = chr( $l_int_offset + 64 );
} }
// add the origin letter // Add the origin letter.
$l_str_Return .= chr($p_int_Value + 64); $l_str_return .= chr( $p_int_value + 64 );
// return the latin character representing the integer // Return the latin character representing the integer.
if ($p_bool_UpperCase) { if ( $p_bool_upper_case ) {
return strtoupper($l_str_Return); return strtoupper( $l_str_return );
} }
return strtolower($l_str_Return); return strtolower( $l_str_return );
} }
/** /**
* Converts an integer to a leading-0 integer. * Converts an integer to a leading-0 integer.
* *
* @author Stefan Herndler
* @since 1.0-gamma * @since 1.0-gamma
* @param int $p_int_Value Value/Index to be converted. * @param int $p_int_value Value/Index to be converted.
* @return string Value with a leading zero. * @return string Value with a leading zero.
*/ */
private static function toArabicLeading($p_int_Value) { private static function to_arabic_leading( $p_int_value ) {
// add a leading 0 if number lower then 10 // Add a leading 0 if number lower then 10.
if ($p_int_Value < 10) { if ( $p_int_value < 10 ) {
return "0" . $p_int_Value; return '0' . $p_int_value;
} }
return $p_int_Value; return $p_int_value;
} }
/** /**
* Converts an integer to a romanic letter. * Converts an integer to a romanic letter.
* *
* @author Stefan Herndler
* @since 1.0-gamma * @since 1.0-gamma
* @param int $p_int_Value Value/Index to be converted. * @param int $p_int_value Value/Index to be converted.
* @param bool $p_bool_upper_case Whether to uppercase.
* @return string * @return string
* *
* Edited: * Edited:
* @since 2.2.0 optionally lowercase (code from Latin) 2020-12-12T1538+0100 * @since 2.2.0 optionally lowercase (code from Latin) 2020-12-12T1538+0100
*/ */
private static function toRomanic($p_int_Value, $p_bool_UpperCase) { private static function to_romanic( $p_int_value, $p_bool_upper_case ) {
// table containing all necessary romanic letters // Table containing all necessary romanic letters.
$l_arr_RomanicLetters = array( $l_arr_romanic_letters = array(
'M' => 1000, 'M' => 1000,
'CM' => 900, 'CM' => 900,
'D' => 500, 'D' => 500,
@ -126,104 +119,105 @@ class MCI_Footnotes_Convert {
'IX' => 9, 'IX' => 9,
'V' => 5, 'V' => 5,
'IV' => 4, 'IV' => 4,
'I' => 1 'I' => 1,
); );
// return value // Return value.
$l_str_Return = ''; $l_str_return = '';
// iterate through integer value until it is reduced to 0 // Iterate through integer value until it is reduced to 0.
while ($p_int_Value > 0) { while ( $p_int_value > 0 ) {
foreach ($l_arr_RomanicLetters as $l_str_Romanic => $l_int_Arabic) { foreach ( $l_arr_romanic_letters as $l_str_romanic => $l_int_arabic ) {
if ($p_int_Value >= $l_int_Arabic) { if ( $p_int_value >= $l_int_arabic ) {
$p_int_Value -= $l_int_Arabic; $p_int_value -= $l_int_arabic;
$l_str_Return .= $l_str_Romanic; $l_str_return .= $l_str_romanic;
break; break;
} }
} }
} }
// return romanic letters as string // Return romanic letters as string.
if ($p_bool_UpperCase) { if ( $p_bool_upper_case ) {
return strtoupper($l_str_Return); return strtoupper( $l_str_return );
} }
return strtolower($l_str_Return); return strtolower( $l_str_return );
} }
/** /**
* Converts a string depending on its value to a boolean. * Converts a string depending on its value to a boolean.
* *
* @author Stefan Herndler
* @since 1.0-beta * @since 1.0-beta
* @param string $p_str_Value String to be converted to boolean. * @param string $p_str_value String to be converted to boolean.
* @return bool Boolean representing the string. * @return bool Boolean representing the string.
*/ */
public static function toBool($p_str_Value) { public static function to_bool( $p_str_value ) {
// convert string to lower-case to make it easier // Convert string to lower-case to make it easier.
$p_str_Value = strtolower($p_str_Value); $p_str_value = strtolower( $p_str_value );
// check if string seems to contain a "true" value // Check if string seems to contain a "true" value.
switch ($p_str_Value) { switch ( $p_str_value ) {
case "checked": case 'checked':
case "yes": case 'yes':
case "true": case 'true':
case "on": case 'on':
case "1": case '1':
return true; return true;
} }
// nothing found that says "true", so we return false // Nothing found that says "true", so we return false.
return false; return false;
} }
/** /**
* Get a html Array short code depending on Arrow-Array key index. * Get a html Array short code depending on Arrow-Array key index.
* *
* @author Stefan Herndler
* @since 1.3.2 * @since 1.3.2
* @param int $p_int_Index Index representing the Arrow. If empty all Arrows are specified. * @param int $p_int_index Index representing the Arrow. If empty all Arrows are specified.
* @return array|string Array of all Arrows if Index is empty otherwise html tag of a specific arrow. * @return array|string Array of all Arrows if Index is empty otherwise html tag of a specific arrow.
*/ */
public static function getArrow($p_int_Index = -1) { public static function get_arrow( $p_int_index = -1 ) {
// define all possible arrows // Define all possible arrows.
$l_arr_Arrows = array("&#8593;", "&#8613;", "&#8607;", "&#8617;", "&#8626;", "&#8629;", "&#8657;", "&#8673;", "&#8679;", "&#65514;"); $l_arr_arrows = array( '&#8593;', '&#8613;', '&#8607;', '&#8617;', '&#8626;', '&#8629;', '&#8657;', '&#8673;', '&#8679;', '&#65514;' );
// convert index to an integer // Convert index to an integer.
if (!is_int($p_int_Index)) { if ( ! is_int( $p_int_index ) ) {
$p_int_Index = intval($p_int_Index); $p_int_index = intval( $p_int_index );
} }
// return the whole arrow array // Return the whole arrow array.
if ($p_int_Index < 0 || $p_int_Index > count($l_arr_Arrows)) { if ( $p_int_index < 0 || $p_int_index > count( $l_arr_arrows ) ) {
return $l_arr_Arrows; return $l_arr_arrows;
} }
// return a single arrow // Return a single arrow.
return $l_arr_Arrows[$p_int_Index]; return $l_arr_arrows[ $p_int_index ];
} }
// phpcs:disable WordPress.PHP.DevelopmentFunctions.error_log_var_dump
// phpcs:disable WordPress.PHP.DevelopmentFunctions.error_log_print_r
/** /**
* Displays a Variable. * Displays a Variable.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param mixed $p_mixed_Value * @param mixed $p_mixed_value The variable to display.
* @return void
*/ */
public static function debug($p_mixed_Value) { public static function debug( $p_mixed_value ) {
if (empty($p_mixed_Value)) { if ( empty( $p_mixed_value ) ) {
var_dump($p_mixed_Value); var_dump( $p_mixed_value );
} else if (is_array($p_mixed_Value)) { } elseif ( is_array( $p_mixed_value ) ) {
printf("<pre>"); printf( '<pre>' );
print_r($p_mixed_Value); print_r( $p_mixed_value );
printf("</pre>"); printf( '</pre>' );
} else if (is_object($p_mixed_Value)) { } elseif ( is_object( $p_mixed_value ) ) {
printf("<pre>"); printf( '<pre>' );
print_r($p_mixed_Value); print_r( $p_mixed_value );
printf("</pre>"); printf( '</pre>' );
} else if (is_numeric($p_mixed_Value) || is_int($p_mixed_Value)) { } elseif ( is_numeric( $p_mixed_value ) || is_int( $p_mixed_value ) ) {
var_dump($p_mixed_Value); var_dump( $p_mixed_value );
} else if (is_date($p_mixed_Value)) { } elseif ( is_date( $p_mixed_value ) ) {
var_dump($p_mixed_Value); var_dump( $p_mixed_value );
} else { } else {
var_dump($p_mixed_Value); var_dump( $p_mixed_value );
} }
echo "<br/>"; echo '<br/>';
} }
// phpcs:disable
} }

View file

@ -1,19 +1,18 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName, WordPress.Security.EscapeOutput.OutputNotEscaped
/** /**
* Handles all WordPress hooks of this Plugin. * Handles all WordPress hooks of this Plugin.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 12.09.14 10:56 * @since 1.5.0
* @date 12.09.14 10:56
* *
* Edited: * @since 2.2.0 (TBD) 2020-12-12T1223+0100
* @since 2.2.0 2020-12-12T1223+0100
*/ */
/** /**
* Registers all WordPress Hooks and executes them on demand. * Registers all WordPress Hooks and executes them on demand.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_Hooks { class MCI_Footnotes_Hooks {
@ -21,74 +20,68 @@ class MCI_Footnotes_Hooks {
/** /**
* Registers all WordPress hooks. * Registers all WordPress hooks.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public static function registerHooks() { public static function register_hooks() {
register_activation_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "activatePlugin")); register_activation_hook( dirname( __FILE__ ) . '/../footnotes.php', array( 'MCI_Footnotes_Hooks', 'activate_plugin' ) );
register_deactivation_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "deactivatePlugin")); register_deactivation_hook( dirname( __FILE__ ) . '/../footnotes.php', array( 'MCI_Footnotes_Hooks', 'deactivate_plugin' ) );
register_uninstall_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "uninstallPlugin")); register_uninstall_hook( dirname( __FILE__ ) . '/../footnotes.php', array( 'MCI_Footnotes_Hooks', 'uninstall_plugin' ) );
} }
/** /**
* Executed when the Plugin gets activated. * Executed when the Plugin gets activated.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public static function activatePlugin() { public static function activate_plugin() {
// currently unused // Currently unused.
} }
/** /**
* Executed when the Plugin gets deactivated. * Executed when the Plugin gets deactivated.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public static function deactivatePlugin() { public static function deactivate_plugin() {
// currently unused // Currently unused.
} }
/** /**
* Executed when the Plugin gets uninstalled. * Executed when the Plugin gets uninstalled.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* *
* Edit: ClearAll didnt actually work. * @since 2.2.0 this function is not called any longer when deleting the plugin.
* @since 2.2.0 this function is not called any longer when deleting the plugin * Note: clear_all() didnt actually work.
* @see class/settings.php
*/ */
public static function uninstallPlugin() { public static function uninstall_plugin() {
// WordPress User has to be logged in // WordPress User has to be logged in.
if ( ! is_user_logged_in() ) { if ( ! is_user_logged_in() ) {
wp_die(__('You must be logged in to run this script.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME)); wp_die( __( 'You must be logged in to run this script.', 'footnotes' ) );
} }
// WordPress User needs the permission to (un)install plugins // WordPress User needs the permission to (un)install plugins.
if ( ! current_user_can( 'install_plugins' ) ) { if ( ! current_user_can( 'install_plugins' ) ) {
wp_die(__('You do not have permission to run this script.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME)); wp_die( __( 'You do not have permission to run this script.', 'footnotes' ) );
} }
// deletes all settings and restore the default values
// MCI_Footnotes_Settings::instance()->ClearAll();
} }
/** /**
* Add Links to the Plugin in the "installed Plugins" page. * Add Links to the Plugin in the "installed Plugins" page.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param array $p_arr_Links Current Links. * @param array $p_arr_links Current Links.
* @param string $p_str_PluginFileName Plugins init file name. * @param string $p_str_plugin_file_name Plugins init file name.
* @return array * @return array
*/ */
public static function PluginLinks($p_arr_Links, $p_str_PluginFileName) { public static function plugin_links( $p_arr_links, $p_str_plugin_file_name ) {
// append link to the WordPress Plugin page // Append link to the WordPress Plugin page.
$p_arr_Links[] = sprintf('<a href="http://wordpress.org/support/plugin/footnotes" target="_blank">%s</a>', __('Support', MCI_Footnotes_Config::C_STR_PLUGIN_NAME)); $p_arr_links[] = sprintf( '<a href="http://wordpress.org/support/plugin/footnotes" target="_blank">%s</a>', __( 'Support', 'footnotes' ) );
// append link to the Settings page // Append link to the settings page.
$p_arr_Links[] = sprintf('<a href="%s">%s</a>', admin_url('admin.php?page=mfmmf-footnotes'), __('Settings', MCI_Footnotes_Config::C_STR_PLUGIN_NAME)); $p_arr_links[] = sprintf( '<a href="%s">%s</a>', admin_url( 'admin.php?page=mfmmf-footnotes' ), __( 'Settings', 'footnotes' ) );
// append link to the PlayPal Donate function // Append link to the PayPal donate function.
$p_arr_Links[] = sprintf('<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6Z6CZDW8PPBBJ" target="_blank">%s</a>', __('Donate', MCI_Footnotes_Config::C_STR_PLUGIN_NAME)); $p_arr_links[] = sprintf( '<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6Z6CZDW8PPBBJ" target="_blank">%s</a>', __( 'Donate', 'footnotes' ) );
// return new links // Return new links.
return $p_arr_Links; return $p_arr_links;
} }
} }

View file

@ -1,13 +1,11 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
/** /**
* Includes the main Class of the Plugin. * Includes the main Class of the Plugin.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 12.09.14 10:56 * @since 1.5.0
* * @date 12.09.14 10:56
*
* @lastmodified 2021-02-19T2031+0100
* *
* @since 1.6.5 Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution. * @since 1.6.5 Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution.
* @since 1.6.5 Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution. * @since 1.6.5 Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution.
@ -27,7 +25,6 @@
/** /**
* Entry point of the Plugin. Loads the Dashboard and executes the Task. * Entry point of the Plugin. Loads the Dashboard and executes the Task.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes { class MCI_Footnotes {
@ -35,79 +32,77 @@ class MCI_Footnotes {
/** /**
* Reference to the Plugin Task object. * Reference to the Plugin Task object.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var null|MCI_Footnotes_Task * @var null|MCI_Footnotes_Task
*/ */
public $a_obj_Task = null; public $a_obj_task = null;
/** /**
* Template process and script / stylesheet load optimization. * Idenfifies whether tooltips are enabled. Actual value depends on settings.
*
* - Bugfix: Templates: optimize template load and processing based on settings, thanks to @misfist code contribution.
*
* @since 2.4.0
* @date 2021-01-04T1355+0100
*
* @author Patrizia Lutz @misfist
*
* @link https://wordpress.org/support/topic/template-override-filter/#post-13864301
* @link https://github.com/misfist/footnotes/releases/tag/2.4.0d3 repository
* @link https://github.com/misfist/footnotes/compare/2.4.0%E2%80%A62.4.0d3 diff
* *
* @contributor Patrizia Lutz @misfist
* @var bool * @var bool
* *
* Streamline process depending on tooltip enabled status. * @todo Refactor to have defines and assignments only in this class,
* Load tooltip inline script only if jQuery tooltips are enabled. * then re-use these properties also in class/task.php (and elsewhere).
* Actual value depends on settings. * Account for priority level issues. These properties must be assigned before
* the hooks—whose priority level may be configured to 0—are called in class/task.php.
*/ */
public static $a_bool_TooltipsEnabled = false; public static $a_bool_tooltips_enabled = false;
public static $a_bool_AlternativeTooltipsEnabled = false;
/**
* Idenfifies whether alternative tooltips are enabled. Actual value depends
* on settings.
*
* @contributor Patrizia Lutz @misfist
* @var bool
*
* @todo Refactor to have defines only here, and use assignments also in class/task.php.
*/
public static $a_bool_alternative_tooltips_enabled = false;
/** /**
* Executes the Plugin. * Executes the Plugin.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* *
*
* - Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution. * - Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution.
* *
* @since 1.6.5 * @since 1.6.5
* *
* @contributor @felipelavinz * @contributor @felipelavinz
* @link https://github.com/benleyjyc/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793
* @date 2020-02-25
* @link https://github.com/media-competence-institute/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793 * @link https://github.com/media-competence-institute/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793
* *
* @see self::initializeWidgets() * @see self::initialize_widgets()
*/ */
public function run() { public function run() {
// register language // Register language.
MCI_Footnotes_Language::registerHooks(); MCI_Footnotes_Language::register_hooks();
// register Button hooks // Register Button hooks.
MCI_Footnotes_WYSIWYG::registerHooks(); MCI_Footnotes_WYSIWYG::register_hooks();
// register general hooks // Register general hooks.
MCI_Footnotes_Hooks::registerHooks(); MCI_Footnotes_Hooks::register_hooks();
// initialize the Plugin Dashboard // Initialize the Plugin Dashboard.
$this->initializeDashboard(); $this->initialize_dashboard();
// initialize the Plugin Task // Initialize the Plugin Task.
$this->initializeTask(); $this->initialize_task();
// Register all Public Stylesheets and Scripts // Register all Public Stylesheets and Scripts.
add_action('init', array($this, 'registerPublic')); add_action( 'init', array( $this, 'register_public' ) );
// Enqueue all Public Stylesheets and Scripts // Enqueue all Public Stylesheets and Scripts.
add_action('wp_enqueue_scripts', array($this, 'registerPublic')); add_action( 'wp_enqueue_scripts', array( $this, 'register_public' ) );
// Register all Widgets of the Plugin. // Register all Widgets of the Plugin..
add_action('widgets_init', array($this, 'initializeWidgets')); add_action( 'widgets_init', array( $this, 'initialize_widgets' ) );
} }
/** /**
* Initializes all Widgets of the Plugin. * Initializes all Widgets of the Plugin.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* *
*
* - Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution * - Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution
* *
* @since 1.6.5 * @since 1.6.5
@ -129,37 +124,34 @@ class MCI_Footnotes {
* and use the bare register_widget() here. * and use the bare register_widget() here.
* @see self::run() * @see self::run()
* *
* Also, the visibility of initializeWidgets() is not private any longer. * Also, the visibility of initialize_widgets() is not private any longer.
*/ */
public function initializeWidgets() { public function initialize_widgets() {
register_widget( "MCI_Footnotes_Widget_ReferenceContainer" ); register_widget( 'MCI_Footnotes_Widget_Reference_container' );
} }
/** /**
* Initializes the Dashboard of the Plugin and loads them. * Initializes the Dashboard of the Plugin and loads them.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
private function initializeDashboard() { private function initialize_dashboard() {
new MCI_Footnotes_Layout_Init(); new MCI_Footnotes_Layout_Init();
} }
/** /**
* Initializes the Plugin Task and registers the Task hooks. * Initializes the Plugin Task and registers the Task hooks.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
private function initializeTask() { private function initialize_task() {
$this->a_obj_Task = new MCI_Footnotes_Task(); $this->a_obj_task = new MCI_Footnotes_Task();
$this->a_obj_Task->registerHooks(); $this->a_obj_task->register_hooks();
} }
/** /**
* Registers and enqueues scripts and stylesheets to the public pages. * Registers and enqueues scripts and stylesheets to the public pages.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* *
* @since 2.0.0 Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution. * @since 2.0.0 Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
@ -168,7 +160,7 @@ class MCI_Footnotes {
* @since 2.1.4 automate passing version number for cache busting 2020-11-30T0646+0100 * @since 2.1.4 automate passing version number for cache busting 2020-11-30T0646+0100
* @since 2.1.4 optionally enqueue an extra stylesheet 2020-12-04T2231+0100 * @since 2.1.4 optionally enqueue an extra stylesheet 2020-12-04T2231+0100
*/ */
public function registerPublic() { public function register_public() {
/** /**
* Enqueues external scripts. * Enqueues external scripts.
@ -181,10 +173,10 @@ class MCI_Footnotes {
* *
* The condition about tooltips was missing, only the not-alternative-tooltips part was present. * The condition about tooltips was missing, only the not-alternative-tooltips part was present.
*/ */
// set conditions re-used for stylesheet enqueuing: // Set conditions re-used for stylesheet enqueuing.
self::$a_bool_TooltipsEnabled = MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED ) ); self::$a_bool_tooltips_enabled = MCI_Footnotes_Convert::to_bool( MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_MOUSE_OVER_BOX_ENABLED ) );
self::$a_bool_AlternativeTooltipsEnabled = MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ALTERNATIVE ) ); self::$a_bool_alternative_tooltips_enabled = MCI_Footnotes_Convert::to_bool( MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_MOUSE_OVER_BOX_ALTERNATIVE ) );
$l_str_ScriptMode = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE); $l_str_script_mode = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE );
/** /**
* Enqueues the jQuery library registered by WordPress. * Enqueues the jQuery library registered by WordPress.
@ -201,62 +193,73 @@ class MCI_Footnotes {
* After adding the alternative reference container, jQuery has become optional, * After adding the alternative reference container, jQuery has become optional,
* but still enabled by default. * but still enabled by default.
*/ */
if ( $l_str_ScriptMode == 'jquery' || ( self::$a_bool_TooltipsEnabled && ! self::$a_bool_AlternativeTooltipsEnabled ) ) { if ( 'jquery' === $l_str_script_mode || ( self::$a_bool_tooltips_enabled && ! self::$a_bool_alternative_tooltips_enabled ) ) {
wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery' );
} }
if ( self::$a_bool_TooltipsEnabled && ! self::$a_bool_AlternativeTooltipsEnabled ) { if ( self::$a_bool_tooltips_enabled && ! self::$a_bool_alternative_tooltips_enabled ) {
/** /**
* Enqueues the jQuery Tools library shipped with the plugin. * Enqueues the jQuery Tools library shipped with the plugin.
* *
* redacted jQuery.browser, completed minification; * Redacted jQuery.browser, completed minification;
* see full header in js/jquery.tools.js * see full header in js/jquery.tools.js.
* added versioning 2020-11-18T2150+0100 *
* not use '-js' in the handle, is appended automatically * Add versioning.
*
* @since 2.1.2
* @date 2020-11-18T2150+0100
*
* No '-js' in the handle, is appended automatically.
*
* Deferring to the footer breaks jQuery tooltip display.
* @date 2021-02-23T1105+0100
*/ */
wp_enqueue_script( wp_enqueue_script(
'mci-footnotes-jquery-tools', 'mci-footnotes-jquery-tools',
plugins_url( 'footnotes/js/jquery.tools.min.js' ), plugins_url( 'footnotes/js/jquery.tools.min.js' ),
array(), array(),
'1.2.7.redacted.2' '1.2.7.redacted.2',
false
); );
/**
* Registers jQuery UI from the JavaScript Content Delivery Network.
*
* - Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
*
* @since 2.0.0
* Alternatively, fetch jQuery UI from cdnjs.cloudflare.com:
* @since 2.0.0 add jQueryUI from Cloudflare 2020-10-26T1907+0100
* Used to add jQuery UI following @vonpiernik:
* <https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13456762>:
*
*
* jQueryUI re-enables the tooltip infobox disabled when WPv5.5 was released.
*
* Updated for v2.0.4 by adding jQuery UI from WordPress following @check2020de:
* <https://wordpress.org/support/topic/gdpr-issue-with-jquery/>
* See <https://wordpress.stackexchange.com/questions/273986/correct-way-to-enqueue-jquery-ui>
*
* This was enabled in Footnotes v2.0.0 through v2.0.3.
* Re-added for 2.0.9d1 / 2.1.1d0 to look whether it can fix a broken tooltip display. 2020-11-07T1601+0100/2020-11-08T2246+0100
*/
//wp_register_script( 'jQueryUI', 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js', null, null, false ); // in header 2020-11-09T2003+0100
//wp_enqueue_script( 'jQueryUI' );
/**
* This is then needed instead of the above first instance:
* Add jQuery Tools and finish adding jQueryUI: 2020-11-08T1638+0100/2020-11-08T2246+0100
*/
//wp_enqueue_script('mci-footnotes-js-jquery-tools', plugins_url('../js/jquery.tools.min.js', __FILE__), ['jQueryUI']);
/** /**
* Enqueues some jQuery UI libraries registered by WordPress. * Enqueues some jQuery UI libraries registered by WordPress.
* *
* @since 2.0.4 add jQuery UI from WordPress 2020-11-01T1902+0100 * - Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
*
* @since 2.0.0
*
* @reporter @rajinderverma
* @link https://wordpress.org/support/topic/tooltip-hover-not-showing/
*
* @reporter @ericcorbett2
* @link https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13324142
*
* @reporter @honlapdavid
* @link https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13355421
*
* @reporter @mmallett
* @link https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13445437
*
* Fetch jQuery UI from cdnjs.cloudflare.com.
* @since 2.0.0
* @date 2020-10-26T1907+0100
* @contributor @vonpiernik
* @link https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13456762
*
* jQueryUI re-enables the tooltip infobox disabled when WPv5.5 was released. * @since 2.1.2
*
* - Update: Libraries: Load jQuery UI from WordPress, thanks to @check2020de issue report.
*
* @since 2.0.4
* @date 2020-11-01T1902+0100
* @reporter @check2020de
* @link https://wordpress.org/support/topic/gdpr-issue-with-jquery/
* @link https://wordpress.stackexchange.com/questions/273986/correct-way-to-enqueue-jquery-ui
*
* If alternative tooltips are enabled, these libraries are not needed. * If alternative tooltips are enabled, these libraries are not needed.
*/ */
wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-core' );
@ -308,34 +311,43 @@ class MCI_Footnotes {
* The media scope argument 'all' is the default. * The media scope argument 'all' is the default.
* No need to use '-css' in the handle, as this is appended automatically. * No need to use '-css' in the handle, as this is appended automatically.
*/ */
// set tooltip mode for use in stylesheet name: // Set tooltip mode for use in stylesheet name.
if ( self::$a_bool_TooltipsEnabled ) { if ( self::$a_bool_tooltips_enabled ) {
if ( self::$a_bool_AlternativeTooltipsEnabled ) { if ( self::$a_bool_alternative_tooltips_enabled ) {
$l_str_TooltipMode = 'al'; $l_str_tooltip_mode_short = 'al';
$l_str_TComplement = 'ternative-tooltips'; $l_str_tooltip_mode_rest = 'ternative-tooltips';
} else { } else {
$l_str_TooltipMode = 'jq'; $l_str_tooltip_mode_short = 'jq';
$l_str_TComplement = 'uery-tooltips'; $l_str_tooltip_mode_rest = 'uery-tooltips';
} }
} else { } else {
$l_str_TooltipMode = 'no'; $l_str_tooltip_mode_short = 'no';
$l_str_TComplement = '-tooltips'; $l_str_tooltip_mode_rest = '-tooltips';
} }
// set basic responsive page layout mode for use in stylesheet name: // Set basic responsive page layout mode for use in stylesheet name.
$l_str_PageLayoutOption = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT); $l_str_page_layout_option = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT );
switch ( $l_str_PageLayoutOption ) { switch ( $l_str_page_layout_option ) {
case "reference-container": $l_str_LayoutMode = '1'; break; case 'reference-container':
case "entry-content" : $l_str_LayoutMode = '2'; break; $l_str_layout_mode = '1';
case "main-content" : $l_str_LayoutMode = '3'; break; break;
case "none": default: $l_str_LayoutMode = '0'; break; case 'entry-content':
$l_str_layout_mode = '2';
break;
case 'main-content':
$l_str_layout_mode = '3';
break;
case 'none':
default:
$l_str_layout_mode = '0';
break;
} }
// enqueue the tailored united minified stylesheet: // Enqueue the tailored united minified stylesheet.
wp_enqueue_style( wp_enqueue_style(
'mci-footnotes-' . $l_str_TooltipMode . $l_str_TComplement . '-pagelayout-' . $l_str_PageLayoutOption, 'mci-footnotes-' . $l_str_tooltip_mode_short . $l_str_tooltip_mode_rest . '-pagelayout-' . $l_str_page_layout_option,
plugins_url( plugins_url(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/footnotes-' . $l_str_TooltipMode . 'ttbrpl' . $l_str_LayoutMode . '.min.css' MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/footnotes-' . $l_str_tooltip_mode_short . 'ttbrpl' . $l_str_layout_mode . '.min.css'
), ),
array(), array(),
C_STR_FOOTNOTES_VERSION, C_STR_FOOTNOTES_VERSION,
@ -356,12 +368,12 @@ class MCI_Footnotes {
wp_enqueue_style( 'mci-footnotes-tooltips', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips.css' ), array(), C_STR_FOOTNOTES_VERSION ); wp_enqueue_style( 'mci-footnotes-tooltips', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips.css' ), array(), C_STR_FOOTNOTES_VERSION );
wp_enqueue_style( 'mci-footnotes-alternative', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips-alternative.css' ), array(), C_STR_FOOTNOTES_VERSION ); wp_enqueue_style( 'mci-footnotes-alternative', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips-alternative.css' ), array(), C_STR_FOOTNOTES_VERSION );
$l_str_PageLayoutOption = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT); $l_str_page_layout_option = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT );
if ($l_str_PageLayoutOption != 'none') { if ( 'none' !== $l_str_page_layout_option ) {
wp_enqueue_style( wp_enqueue_style(
'mci-footnotes-layout-' . $l_str_PageLayoutOption, 'mci-footnotes-layout-' . $l_str_page_layout_option,
plugins_url( plugins_url(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-layout-' . $l_str_PageLayoutOption . '.css' MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-layout-' . $l_str_page_layout_option . '.css'
), ),
array(), array(),
C_STR_FOOTNOTES_VERSION, C_STR_FOOTNOTES_VERSION,

View file

@ -1,13 +1,11 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
/** /**
* Loads text domain of current or default language for localization. * Loads text domain of current or default language for localization.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 14.09.14 17:47 * @since 1.5.0
* * @date 14.09.14 17:47
*
* @lastmodified 2021-02-18T2028+0100
* *
* @since 2.0.0 Bugfix: Localization: correct function call apply_filters() with all required arguments after PHP 7.1 promoted warning to error, thanks to @matkus2 bug report and code contribution. * @since 2.0.0 Bugfix: Localization: correct function call apply_filters() with all required arguments after PHP 7.1 promoted warning to error, thanks to @matkus2 bug report and code contribution.
* @since 2.1.6 Bugfix: Localization: conform to WordPress plugin language file name scheme, thanks to @nikelaos bug report. * @since 2.1.6 Bugfix: Localization: conform to WordPress plugin language file name scheme, thanks to @nikelaos bug report.
@ -16,7 +14,6 @@
/** /**
* Loads text domain of current or default language for localization. * Loads text domain of current or default language for localization.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_Language { class MCI_Footnotes_Language {
@ -24,18 +21,16 @@ class MCI_Footnotes_Language {
/** /**
* Register WordPress Hook. * Register WordPress Hook.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public static function registerHooks() { public static function register_hooks() {
add_action('plugins_loaded', array("MCI_Footnotes_Language", "loadTextDomain")); add_action( 'plugins_loaded', array( 'MCI_Footnotes_Language', 'load_text_domain' ) );
} }
/** /**
* Loads the text domain for current WordPress language if exists. * Loads the text domain for current WordPress language if exists.
* Otherwise fallback "en_GB" will be loaded. * Otherwise fallback "en_GB" will be loaded.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* *
* *
@ -47,7 +42,7 @@ class MCI_Footnotes_Language {
* @contributor @matkus2 * @contributor @matkus2
* @link https://wordpress.org/support/topic/error-missing-parameter-if-using-php-7-1-or-later/ * @link https://wordpress.org/support/topic/error-missing-parameter-if-using-php-7-1-or-later/
* *
* Add 3rd (empty) argument in apply_filters() to prevent PHP from throwing an error: * Add 3rd (empty) argument in apply_filters() to prevent PHP from throwing an error.
* “Fatal error: Uncaught ArgumentCountError: Too few arguments to function apply_filters() * “Fatal error: Uncaught ArgumentCountError: Too few arguments to function apply_filters()
* *
* Yet get_locale() is defined w/o parameters in wp-includes/l10n.php:30, and * Yet get_locale() is defined w/o parameters in wp-includes/l10n.php:30, and
@ -57,7 +52,7 @@ class MCI_Footnotes_Language {
* But apply_filters() is defined with a 3rd parameter (and w/o the first one) in * But apply_filters() is defined with a 3rd parameter (and w/o the first one) in
* wp-includes/class-wp-hook.php:264, as public function apply_filters( $value, $args ). * wp-includes/class-wp-hook.php:264, as public function apply_filters( $value, $args ).
* *
* Taking it all together, probably the full function definition would be: * Taking it all together, probably the full function definition would be
* public function apply_filters( $tag, $value, $args ). * public function apply_filters( $tag, $value, $args ).
* In the case of get_locale(), $args is empty. * In the case of get_locale(), $args is empty.
* *
@ -65,22 +60,21 @@ class MCI_Footnotes_Language {
* @link https://www.php.net/manual/en/migration71.incompatible.php * @link https://www.php.net/manual/en/migration71.incompatible.php
* @link https://www.php.net/manual/en/migration71.incompatible.php#migration71.incompatible.too-few-arguments-exception * @link https://www.php.net/manual/en/migration71.incompatible.php#migration71.incompatible.too-few-arguments-exception
*/ */
public static function loadTextDomain() { public static function load_text_domain() {
// if language file with localization exists: // If language file with localization exists.
if ( self::load( apply_filters( 'plugin_locale', get_locale(), '' ) ) ) { if ( self::load( apply_filters( 'plugin_locale', get_locale(), '' ) ) ) {
return; return;
} }
// else fall back to British English: // Else fall back to British English.
self::load( "en_GB" ); self::load( 'en_GB' );
} }
/** /**
* Loads a specific text domain. * Loads a specific text domain.
* *
* @author Stefan Herndler
* @since 1.5.1 * @since 1.5.1
* @param string $p_str_LanguageCode Language Code to load a specific text domain. * @param string $p_str_language_code Language Code to load a specific text domain.
* @return bool * @return bool
* *
* *
@ -92,16 +86,14 @@ class MCI_Footnotes_Language {
* @reporter @nikelaos * @reporter @nikelaos
* @link https://wordpress.org/support/topic/more-feature-ideas/ * @link https://wordpress.org/support/topic/more-feature-ideas/
* *
* That is done by using load_plugin_textdomain(): * That is done by using load_plugin_textdomain().
* “The .mo file should be named based on the text domain with a dash, and then the locale exactly. * “The .mo file should be named based on the text domain with a dash, and then the locale exactly.
* @see wp-includes/l10n.php:857 * @see wp-includes/l10n.php:857
*/ */
private static function load($p_str_LanguageCode) { private static function load( $p_str_language_code ) {
return load_plugin_textdomain( return load_plugin_textdomain(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME, MCI_Footnotes_Config::C_STR_PLUGIN_NAME,
// This argument only fills the gap left by a deprecated argument (since WP2.7):
false, false,
// The plugin basedir is provided; trailing slash would be clipped:
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/languages' MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/languages'
); );
} }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,39 +1,20 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
/** /**
* Includes the Template Engine to load and handle all Template files of the Plugin. * Includes the Template Engine to load and handle all Template files of the Plugin.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 14.09.14 10:58 * @since 1.5.0
* @date 14.09.14 10:58
* *
* * @since 2.2.6 Adding: Templates: support for custom templates in sibling folder, thanks to @misfist issue report.
* @lastmodified 2021-02-18T2024+0100 * @since 2.5.0 Adding: Templates: Enable template location stack, thanks to @misfist code contribution.
*
* @since 2.0.3 prettify reference container template
* @since 2.0.3 replace tab with a space
* @since 2.0.3 replace 2 spaces with 1
* @since 2.0.4 collapse multiple spaces
* @since 2.0.6 prettify other templates (footnote, tooltip script, ref container row)
* @since 2.2.6 delete a space before a closing pointy bracket
*
* @since 2.2.6 support for custom templates in fixed location, while failing to add filter thanks to @misfist 2020-12-19T0606+0100
* @link https://wordpress.org/support/topic/template-override-filter/
*
* @since 2.4.0 templates may be in active theme, thanks to @misfist
* @link https://wordpress.org/support/topic/template-override-filter/#post-13846598
*
* @since 2.5.0 Enable template location stack, contributed by @misfist
* @link https://wordpress.org/support/topic/template-override-filter/#post-13864301
*
* @since 2.5.4 collapse HTML comments and PHP/JS docblocks (only)
*/ */
/** /**
* Handles each Template file for the Plugin Frontend (e.g. Settings Dashboard, Public pages, ...). * Handles each Template file for the Plugin Frontend (e.g. Settings Dashboard, Public pages, ...).
* Loads a template file, replaces all Placeholders and returns the replaced file content. * Loads a template file, replaces all Placeholders and returns the replaced file content.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_Template { class MCI_Footnotes_Template {
@ -41,43 +22,38 @@ class MCI_Footnotes_Template {
/** /**
* Directory name for dashboard templates. * Directory name for dashboard templates.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */
const C_STR_DASHBOARD = "dashboard"; const C_STR_DASHBOARD = 'dashboard';
/** /**
* Directory name for public templates. * Directory name for public templates.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */
const C_STR_PUBLIC = "public"; const C_STR_PUBLIC = 'public';
/** /**
* Contains the content of the template after initialize. * Contains the content of the template after initialize.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */
private $a_str_OriginalContent = ""; private $a_str_original_content = '';
/** /**
* Contains the content of the template after initialize with replaced place holders. * Contains the content of the template after initialize with replaced place holders.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @var string * @var string
*/ */
private $a_str_ReplacedContent = ""; private $a_str_replaced_content = '';
/** /**
* Plugin Directory * Plugin Directory
* *
* @author Patrizia Lutz @misfist
* @since 2.4.0d3 * @since 2.4.0d3
* *
* @var string * @var string
@ -87,42 +63,39 @@ class MCI_Footnotes_Template {
/** /**
* Class Constructor. Reads and loads the template file without replace any placeholder. * Class Constructor. Reads and loads the template file without replace any placeholder.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param string $p_str_FileType Template file type (take a look on the Class constants). * @param string $p_str_file_type Template file type (take a look on the Class constants).
* @param string $p_str_FileName Template file name inside the Template directory without the file extension. * @param string $p_str_file_name Template file name inside the Template directory without the file extension.
* @param string $p_str_Extension Optional Template file extension (default: html) * @param string $p_str_extension Optional Template file extension (default: html).
* *
* - Adding: Templates: support for custom templates in sibling folder, thanks to @misfist issue report.
* *
* @since 2.2.6 support for custom templates 2020-12-19T0606+0100 * @since 2.2.6
* @date 2020-12-19T0606+0100
*
* @reporter @misfist
* @link https://wordpress.org/support/topic/template-override-filter/ * @link https://wordpress.org/support/topic/template-override-filter/
*
* @since 2.4.0 look for custom template in the active theme first, thanks to @misfist
* @link https://wordpress.org/support/topic/template-override-filter/#post-13846598
*/ */
public function __construct($p_str_FileType, $p_str_FileName, $p_str_Extension = "html") { public function __construct( $p_str_file_type, $p_str_file_name, $p_str_extension = 'html' ) {
// no template file type and/or file name set // No template file type and/or file name set.
if (empty($p_str_FileType) || empty($p_str_FileName)) { if ( empty( $p_str_file_type ) || empty( $p_str_file_name ) ) {
return; return;
} }
/** /**
* Define plugin root path * Define plugin root path.
* *
* @since 2.4.0d3 * @since 2.4.0d3
*
* @author Patrizia Lutz @misfist
*/ */
$this->plugin_directory = plugin_dir_path( dirname( __FILE__ ) ); $this->plugin_directory = plugin_dir_path( dirname( __FILE__ ) );
/** /**
* Modularize functions * Modularize functions.
* *
* @since 2.4.0d3 * @since 2.4.0d3
*
* @author Patrizia Lutz @misfist
*/ */
if( $template = $this->get_template( $p_str_FileType, $p_str_FileName, $p_str_Extension ) ) { $template = $this->get_template( $p_str_file_type, $p_str_file_name, $p_str_extension );
if ( $template ) {
$this->process_template( $template ); $this->process_template( $template );
} else { } else {
return; return;
@ -133,123 +106,124 @@ class MCI_Footnotes_Template {
/** /**
* Replace all placeholders specified in array. * Replace all placeholders specified in array.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param array $p_arr_Placeholders Placeholders (key = placeholder, value = value). * @param array $p_arr_placeholders Placeholders (key = placeholder, value = value).
* @return bool True on Success, False if Placeholders invalid. * @return bool True on Success, False if Placeholders invalid.
*/ */
public function replace($p_arr_Placeholders) { public function replace( $p_arr_placeholders ) {
// no placeholders set // No placeholders set.
if (empty($p_arr_Placeholders)) { if ( empty( $p_arr_placeholders ) ) {
return false; return false;
} }
// template content is empty // Template content is empty.
if (empty($this->a_str_ReplacedContent)) { if ( empty( $this->a_str_replaced_content ) ) {
return false; return false;
} }
// iterate through each placeholder and replace it with its value // Iterate through each placeholder and replace it with its value.
foreach($p_arr_Placeholders as $l_str_Placeholder => $l_str_Value) { foreach ( $p_arr_placeholders as $l_str_placeholder => $l_str_value ) {
$this->a_str_ReplacedContent = str_replace("[[" . $l_str_Placeholder . "]]", $l_str_Value, $this->a_str_ReplacedContent); $this->a_str_replaced_content = str_replace( '[[' . $l_str_placeholder . ']]', $l_str_value, $this->a_str_replaced_content );
} }
// success // Success.
return true; return true;
} }
/** /**
* Reloads the original content of the template file. * Reloads the original content of the template file.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public function reload() { public function reload() {
$this->a_str_ReplacedContent = $this->a_str_OriginalContent; $this->a_str_replaced_content = $this->a_str_original_content;
} }
/** /**
* Returns the content of the template file with replaced placeholders. * Returns the content of the template file with replaced placeholders.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string Template content with replaced placeholders. * @return string Template content with replaced placeholders.
*/ */
public function getContent() { public function get_content() {
return $this->a_str_ReplacedContent; return $this->a_str_replaced_content;
} }
/** /**
* Process template file * Process template file.
*
* @author Patrizia Lutz @misfist
* *
* @since 2.4.0d3 * @since 2.4.0d3
* *
* @param string $template * @param string $template The template to be processed.
* @return void * @return void
* *
* * @since 2.0.3 Replace tab with a space.
* @since 2.0.3 replace tab with a space * @since 2.0.3 Replace 2 spaces with 1.
* @since 2.0.3 replace 2 spaces with 1 * @since 2.0.4 Collapse multiple spaces.
* @since 2.0.4 collapse multiple spaces * @since 2.2.6 Delete a space before a closing pointy bracket.
* @since 2.2.6 delete a space before a closing pointy bracket * @since 2.5.4 Collapse HTML comments and PHP/JS docblocks (only).
* @since 2.5.4 collapse HTML comments and PHP/JS docblocks (only)
*/ */
public function process_template( $template ) { public function process_template( $template ) {
$this->a_str_OriginalContent = preg_replace( '#<!--.+?-->#s', "", file_get_contents( $template ) ); // phpcs:disable WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
$this->a_str_OriginalContent = preg_replace( '#/\*\*.+?\*/#s', "", $this->a_str_OriginalContent ); $this->a_str_original_content = preg_replace( '#<!--.+?-->#s', '', file_get_contents( $template ) );
$this->a_str_OriginalContent = str_replace( "\n", "", $this->a_str_OriginalContent ); // phpcs:enable
$this->a_str_OriginalContent = str_replace( "\r", "", $this->a_str_OriginalContent ); $this->a_str_original_content = preg_replace( '#/\*\*.+?\*/#s', '', $this->a_str_original_content );
$this->a_str_OriginalContent = str_replace( "\t", " ", $this->a_str_OriginalContent ); $this->a_str_original_content = str_replace( "\n", '', $this->a_str_original_content );
$this->a_str_OriginalContent = preg_replace( '# +#', " ", $this->a_str_OriginalContent ); $this->a_str_original_content = str_replace( "\r", '', $this->a_str_original_content );
$this->a_str_OriginalContent = str_replace( " >", ">", $this->a_str_OriginalContent ); $this->a_str_original_content = str_replace( "\t", ' ', $this->a_str_original_content );
$this->a_str_original_content = preg_replace( '# +#', ' ', $this->a_str_original_content );
$this->a_str_original_content = str_replace( ' >', '>', $this->a_str_original_content );
$this->reload(); $this->reload();
} }
/** /**
* Get the template * Get the template.
* *
* @author Patrizia Lutz @misfist * - Adding: Templates: Enable template location stack, thanks to @misfist code contribution.
* *
* @since 2.4.0d3 * @since 2.4.0d3 Contribution.
* @since 2.5.0 Release.
* *
* @param string $p_str_FileType * @contributor @misfist
* @param string $p_str_FileName * @link https://wordpress.org/support/topic/template-override-filter/#post-13864301
* @param string $p_str_Extension *
* @param string $p_str_file_type The file type of the template.
* @param string $p_str_file_name The file name of the template.
* @param string $p_str_extension The file extension of the template.
* @return mixed false | template path * @return mixed false | template path
*/ */
public function get_template( $p_str_FileType, $p_str_FileName, $p_str_Extension = "html" ) { public function get_template( $p_str_file_type, $p_str_file_name, $p_str_extension = 'html' ) {
$located = false; $located = false;
/** /**
* The directory change be modified * The directory can be changed.
* @usage to change location of templates to `template_parts/footnotes/': *
* @usage to change location of templates to 'template_parts/footnotes/':
* add_filter( 'mci_footnotes_template_directory', function( $directory ) { * add_filter( 'mci_footnotes_template_directory', function( $directory ) {
* return 'template_parts/footnotes/; * return 'template_parts/footnotes/';
* } ); * } );
*/ */
$template_directory = apply_filters( 'mci_footnotes_template_directory', 'footnotes/templates/' ); $template_directory = apply_filters( 'mci_footnotes_template_directory', 'footnotes/templates/' );
$custom_directory = apply_filters( 'mci_footnotes_custom_template_directory', 'footnotes-custom/' ); $custom_directory = apply_filters( 'mci_footnotes_custom_template_directory', 'footnotes-custom/' );
$template_name = $p_str_FileType . '/' . $p_str_FileName . '.' . $p_str_Extension; $template_name = $p_str_file_type . '/' . $p_str_file_name . '.' . $p_str_extension;
/** /**
* Look in active (child) theme * Look in active theme.
*/ */
if ( file_exists( trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name ) ) { if ( file_exists( trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name ) ) {
$located = trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name; $located = trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name;
/** /**
* Look in parent theme * Look in parent theme in case active is child.
*/ */
} elseif ( file_exists( trailingslashit( get_template_directory() ) . $template_directory . $template_name ) ) { } elseif ( file_exists( trailingslashit( get_template_directory() ) . $template_directory . $template_name ) ) {
$located = trailingslashit( get_template_directory() ) . $template_directory . $template_name; $located = trailingslashit( get_template_directory() ) . $template_directory . $template_name;
/** /**
* Look in custom directory * Look in custom plugin directory.
*/ */
} elseif ( file_exists( trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name ) ) { } elseif ( file_exists( trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name ) ) {
$located = trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name; $located = trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name;
/** /**
* Look in plugin * Fall back to the templates shipped with the plugin.
*/ */
} elseif ( file_exists( $this->plugin_directory . 'templates/' . $template_name ) ) { } elseif ( file_exists( $this->plugin_directory . 'templates/' . $template_name ) ) {
$located = $this->plugin_directory . 'templates/' . $template_name; $located = $this->plugin_directory . 'templates/' . $template_name;
@ -258,4 +232,4 @@ class MCI_Footnotes_Template {
return $located; return $located;
} }
} // end of class }

View file

@ -1,14 +1,12 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
/** /**
* Widget base. * Widget base.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 * @since 1.5.0
* @date 14.09.14 14:30 * @date 14.09.14 14:30
* *
* @lastmodified 2021-02-18T0306+0100
* @date 2021-02-18T0240+0100
* @since 1.6.4 Update: replace deprecated function WP_Widget() with recommended __construct(), thanks to @dartiss code contribution. * @since 1.6.4 Update: replace deprecated function WP_Widget() with recommended __construct(), thanks to @dartiss code contribution.
*/ */
@ -21,50 +19,45 @@
* @author Stefan Herndler * @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
abstract class MCI_Footnotes_WidgetBase extends WP_Widget { abstract class MCI_Footnotes_Widget_Base extends WP_Widget {
/** /**
* Returns an unique ID as string used for the Widget Base ID. * Returns an unique ID as string used for the Widget Base ID.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string * @return string
*/ */
abstract protected function getID(); abstract protected function get_id();
/** /**
* Returns the Public name of child Widget to be displayed in the Configuration page. * Returns the Public name of child Widget to be displayed in the Configuration page.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string * @return string
*/ */
abstract protected function getName(); abstract protected function get_name();
/** /**
* Returns the Description of the child widget. * Returns the Description of the child widget.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string * @return string
*/ */
abstract protected function getDescription(); abstract protected function get_description();
/** /**
* Returns the width of the Widget. Default width is 250 pixel. * Returns the width of the Widget. Default width is 250 pixel.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return int * @return int
*/ */
protected function getWidgetWidth() { protected function get_widget_width() {
return 250; return 250;
} }
/** /**
* Class Constructor. Registers the child Widget to WordPress. * Class Constructor. Registers the child Widget to WordPress.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* *
* - Update: replace deprecated function WP_Widget() with recommended __construct(), thanks to @dartiss code contribution. * - Update: replace deprecated function WP_Widget() with recommended __construct(), thanks to @dartiss code contribution.
@ -75,14 +68,20 @@ abstract class MCI_Footnotes_WidgetBase extends WP_Widget {
* “The called constructor method for WP_Widget in MCI_Footnotes_Widget_ReferenceContainer is deprecated since version 4.3.0! Use __construct() instead. * “The called constructor method for WP_Widget in MCI_Footnotes_Widget_ReferenceContainer is deprecated since version 4.3.0! Use __construct() instead.
*/ */
public function __construct() { public function __construct() {
$l_arr_WidgetOptions = array("classname" => __CLASS__, "description" => $this->getDescription()); $l_arr_widget_options = array(
$l_arr_ControlOptions = array("id_base" => strtolower($this->getID()), "width" => $this->getWidgetWidth()); 'classname' => __CLASS__,
// registers the Widget 'description' => $this->get_description(),
);
$l_arr_control_options = array(
'id_base' => strtolower( $this->get_id() ),
'width' => $this->get_widget_width(),
);
// Registers the Widget.
parent::__construct( parent::__construct(
strtolower($this->getID()), // unique ID for the widget, has to be lowercase strtolower( $this->get_id() ), // Unique ID for the widget, has to be lowercase.
$this->getName(), // Plugin name to be displayed $this->get_name(), // Plugin name to be displayed.
$l_arr_WidgetOptions, // Optional Widget Options $l_arr_widget_options, // Optional Widget Options.
$l_arr_ControlOptions // Optional Widget Control Options $l_arr_control_options // Optional Widget Control Options.
); );
} }
} }

View file

@ -1,85 +1,81 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName, WordPress.Security.EscapeOutput.OutputNotEscaped
/** /**
* Includes the Plugin Widget to put the Reference Container to the Widget area. * Includes the Plugin Widget to put the Reference Container to the Widget area.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 14.09.14 14:26 * @since 1.5.0
* @date 14.09.14 14:26
* *
* Edited 2.2.0 2020-12-12T2131+0100 * @since 2.2.0 (TBD) 2020-12-12T2131+0100
*/ */
/** /**
* Registers a Widget to put the Reference Container to the widget area. * Registers a Widget to put the Reference Container to the widget area.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_Widget_ReferenceContainer extends MCI_Footnotes_WidgetBase { class MCI_Footnotes_Widget_Reference_Container extends MCI_Footnotes_Widget_Base {
/** /**
* Returns an unique ID as string used for the Widget Base ID. * Returns an unique ID as string used for the Widget Base ID.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string * @return string
*/ */
protected function getID() { protected function get_id() {
return "footnotes_widget"; return 'footnotes_widget';
} }
/** /**
* Returns the Public name of the Widget to be displayed in the Configuration page. * Returns the Public name of the Widget to be displayed in the Configuration page.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string * @return string
*/ */
protected function getName() { protected function get_name() {
return MCI_Footnotes_Config::C_STR_PLUGIN_NAME; return MCI_Footnotes_Config::C_STR_PLUGIN_NAME;
} }
/** /**
* Returns the Description of the child widget. * Returns the Description of the child widget.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @return string * @return string
* *
* Edit: curly quotes 2.2.0 2020-12-12T2130+0100 * Edit: curly quotes 2.2.0 2020-12-12T2130+0100
*/ */
protected function getDescription() { protected function get_description() {
return __('The widget defines the position of the reference container if set to “widget area”.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME); return __( 'The widget defines the position of the reference container if set to “widget area”.', 'footnotes' );
} }
/** /**
* Outputs the Settings of the Widget. * Outputs the Settings of the Widget.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param mixed $instance * @param mixed $instance The instance of the widget.
* @return void * @return void
* *
* Edit: curly quotes 2.2.0 2020-12-12T2130+0100 * Edit: curly quotes 2.2.0 2020-12-12T2130+0100
*/ */
public function form( $instance ) { public function form( $instance ) {
echo __('The widget defines the position of the reference container if set to “widget area”.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME); echo __( 'The widget defines the position of the reference container if set to “widget area”.', 'footnotes' );
} }
/** /**
* Outputs the Content of the Widget. * Outputs the Content of the Widget.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param mixed $args * @param mixed $args The widget's arguments.
* @param mixed $instance * @param mixed $instance The instance of the widget.
*/ */
public function widget( $args, $instance ) { public function widget( $args, $instance ) {
global $g_obj_MCI_Footnotes; global $g_obj_mci_footnotes;
// reference container positioning is set to "widget area" // Reference container positioning is set to "widget area".
if (MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_REFERENCE_CONTAINER_POSITION) == "widget") { if ( 'widget' === MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_REFERENCE_CONTAINER_POSITION ) ) {
echo $g_obj_MCI_Footnotes->a_obj_Task->ReferenceContainer(); // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
echo $g_obj_mci_footnotes->a_obj_task->Reference_Container();
// phpcs:enable
} }
} }
} }

View file

@ -1,83 +1,92 @@
<?php <?php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
/** /**
* Includes the Class to handle the WYSIWYG-Buttons. * Includes the Class to handle the WYSIWYG-Buttons.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 14.09.14 17:30 * @since 1.5.0
* @date 14.09.14 17:30
*/ */
/** /**
* Handles the WSYIWYG-Buttons.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
class MCI_Footnotes_WYSIWYG { class MCI_Footnotes_WYSIWYG {
public static function registerHooks() { /**
add_filter("mce_buttons", array("MCI_Footnotes_WYSIWYG", "newVisualEditorButton")); * Registers Button hooks.
add_action("admin_print_footer_scripts", array("MCI_Footnotes_WYSIWYG", "newPlainTextEditorButton")); *
* @return void
*/
public static function register_hooks() {
add_filter( 'mce_buttons', array( 'MCI_Footnotes_WYSIWYG', 'new_visual_editor_button' ) );
add_action( 'admin_print_footer_scripts', array( 'MCI_Footnotes_WYSIWYG', 'new_plain_text_editor_button' ) );
add_filter("mce_external_plugins", array("MCI_Footnotes_WYSIWYG", "includeScripts")); add_filter( 'mce_external_plugins', array( 'MCI_Footnotes_WYSIWYG', 'include_scripts' ) );
add_action("wp_ajax_nopriv_footnotes_getTags", array("MCI_Footnotes_WYSIWYG", "ajaxCallback")); add_action( 'wp_ajax_nopriv_footnotes_get_tags', array( 'MCI_Footnotes_WYSIWYG', 'ajax_callback' ) );
add_action("wp_ajax_footnotes_getTags", array("MCI_Footnotes_WYSIWYG", "ajaxCallback")); add_action( 'wp_ajax_footnotes_get_tags', array( 'MCI_Footnotes_WYSIWYG', 'ajax_callback' ) );
} }
/** /**
* Append a new Button to the WYSIWYG editor of Posts and Pages. * Append a new Button to the WYSIWYG editor of Posts and Pages.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param array $p_arr_Buttons pre defined Buttons from WordPress. * @param array $p_arr_buttons pre defined Buttons from WordPress.
* @return array * @return array
*/ */
public static function newVisualEditorButton($p_arr_Buttons) { public static function new_visual_editor_button( $p_arr_buttons ) {
array_push($p_arr_Buttons, MCI_Footnotes_Config::C_STR_PLUGIN_NAME); array_push( $p_arr_buttons, MCI_Footnotes_Config::C_STR_PLUGIN_NAME );
return $p_arr_Buttons; return $p_arr_buttons;
} }
/** /**
* Add a new button to the plain text editor. * Add a new button to the plain text editor.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public static function newPlainTextEditorButton() { public static function new_plain_text_editor_button() {
$l_obj_Template = new MCI_Footnotes_Template(MCI_Footnotes_Template::C_STR_DASHBOARD, "editor-button"); $l_obj_template = new MCI_Footnotes_Template( MCI_Footnotes_Template::C_STR_DASHBOARD, 'editor-button' );
echo $l_obj_Template->getContent(); // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
echo $l_obj_template->get_content();
// phpcs:enable
} }
/** /**
* Includes the Plugins WYSIWYG editor script. * Includes the Plugins WYSIWYG editor script.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param array $p_arr_Plugins Scripts to be included to the editor. * @param array $p_arr_plugins Scripts to be included to the editor.
* @return array * @return array
*/ */
public static function includeScripts($p_arr_Plugins) { public static function include_scripts( $p_arr_plugins ) {
$p_arr_Plugins[MCI_Footnotes_Config::C_STR_PLUGIN_NAME] = plugins_url('/../js/wysiwyg-editor.js', __FILE__); $p_arr_plugins[ MCI_Footnotes_Config::C_STR_PLUGIN_NAME ] = plugins_url( '/../js/wysiwyg-editor.js', __FILE__ );
return $p_arr_Plugins; return $p_arr_plugins;
} }
/** /**
* AJAX Callback function when the Footnotes Button is clicked. Either in the Plain text or Visual editor. * AJAX Callback function when the Footnotes Button is clicked. Either in the Plain text or Visual editor.
* Returns an JSON encoded array with the Footnotes start and end short code. * Returns an JSON encoded array with the Footnotes start and end short code.
* *
* @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
*/ */
public static function ajaxCallback() { public static function ajax_callback() {
// get start and end tag for the footnotes short code // Get start and end tag for the footnotes short code.
$l_str_StartingTag = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_START); $l_str_starting_tag = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_START );
$l_str_EndingTag = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_END); $l_str_ending_tag = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_END );
if ($l_str_StartingTag == "userdefined" || $l_str_EndingTag == "userdefined") { if ( 'userdefined' === $l_str_starting_tag || 'userdefined' === $l_str_ending_tag ) {
$l_str_StartingTag = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED); $l_str_starting_tag = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED );
$l_str_EndingTag = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED); $l_str_ending_tag = MCI_Footnotes_Settings::instance()->get( MCI_Footnotes_Settings::C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED );
} }
echo json_encode(array("start" => htmlspecialchars($l_str_StartingTag), "end" => htmlspecialchars($l_str_EndingTag))); echo wp_json_encode(
array(
'start' => htmlspecialchars( $l_str_starting_tag ),
'end' => htmlspecialchars( $l_str_ending_tag ),
)
);
exit; exit;
} }
} }

View file

@ -6,12 +6,14 @@
* Created-Time: 16:21 * Created-Time: 16:21
* Since: 1.0 * Since: 1.0
* *
* @version 2.5.6 * @version 2.5.8
* @lastmodified 2021-02-19T1523+0100 * @lastmodified 2021-02-28T1320+0100
* *
* Classes recommended for Custom CSS: * Classes recommended for Custom CSS:
* @see templates/dashboard/customize-css-new.html * @see templates/dashboard/customize-css-new.html
* */
/**
* System of unified minified style sheets tailored to the needs of the instance. * System of unified minified style sheets tailored to the needs of the instance.
* *
* - Update: Stylesheets: increase speed and energy efficiency by tailoring stylesheets to the needs of the instance, thanks to @docteurfitness design contribution. * - Update: Stylesheets: increase speed and energy efficiency by tailoring stylesheets to the needs of the instance, thanks to @docteurfitness design contribution.
@ -230,94 +232,6 @@
cursor: pointer; cursor: pointer;
} }
/**
* Tooltips
*
* - Bugfix: Tooltips: set z-index to maximum 2147483647 to address display issues with overlay content, thanks to @russianicons bug report.
*
* @since 2.1.6
* @reporter @russianicons
* @link https://wordpress.org/support/topic/counter-styles-not-working/#post-13767299
*/
.footnote_tooltip {
display: none;
z-index: 2147483647 !important;
cursor: auto;
text-align: left;
padding: 12px;
line-height: 1.2;
font-weight: normal;
font-style: normal;
}
/**
* Alternative tooltips
*
* These default position values may be overridden by internal CSS.
*/
.footnote_referrer.relative {
position: relative;
}
.footnote_tooltip.position {
display: unset;
position: absolute;
bottom: 24px;
left: -50px;
width: 400px;
}
/*
fade-in parameters
*/
.footnote_tooltip.shown {
visibility: visible;
opacity: 1;
transition-property: visibility opacity;
transition-timing-function: linear;
/*
property values of settings are inline CSS
transition-delay: 0ms;
transition-duration: 200ms;
*/
}
/*
fade-out parameters
*/
.footnote_tooltip.hidden {
visibility: hidden;
opacity: 0;
transition-property: visibility opacity;
transition-timing-function: linear;
/*
property values of settings are inline CSS
transition-delay: 400ms;
transition-duration: 200ms;
*/
}
/*
Read-on button
*/
.footnote_tooltip_continue {
font-style: italic;
color: green;
text-decoration: none !important;
cursor: pointer;
white-space: nowrap;
}
.footnote_tooltip_continue:hover {
color: blue;
text-decoration: underline !important;
}
/***************************************************** /*****************************************************
Footnote reference container Footnote reference container
@ -359,8 +273,14 @@ Classes:
box-sizing: border-box; box-sizing: border-box;
} }
/* /**
label * Reference container label.
*
* - Bugfix: Layout: support right-to-left writing direction by replacing remaining CSS values 'left' with 'start', thanks to @arahmanshaalan bug report.
*
* @since 2.5.8
* @reporter @arahmanshaalan
* @link https://wordpress.org/support/topic/right-to-left-text-problem/
*/ */
.footnote_container_prepare { .footnote_container_prepare {
@ -380,7 +300,7 @@ label
-webkit-margin-after: 0.83em !important; -webkit-margin-after: 0.83em !important;
-webkit-margin-start: 0px !important; -webkit-margin-start: 0px !important;
-webkit-margin-end: 0px !important; -webkit-margin-end: 0px !important;
text-align: left !important; text-align: start !important;
vertical-align: middle; vertical-align: middle;
} }
@ -426,13 +346,27 @@ table
border: none; border: none;
} }
/* /**
footnotes * Footnotes list.
*
@since 2.0.0 borderless table cells, thanks to @ragonesi bug report * - Bugfix: Reference container: no borders around footnotes, thanks to @ragonesi bug report.
@see <https://wordpress.org/support/topic/thin-box-around-notes-in-reference-container/> *
@since 2.0.1 enforce borderless text cells through !important property, thanks to @ragonesi bug report * @since 2.0.0
@see <https://wordpress.org/support/topic/box-around-c-references-container/> * @reporter @ragonesi
* @link https://wordpress.org/support/topic/thin-box-around-notes-in-reference-container/
*
* - Bugfix: Reference container: enforce borderless table cells, thanks to @ragonesi bug report.
*
* @since 2.0.1
* @reporter @ragonesi
* @link https://wordpress.org/support/topic/box-around-c-references-container/
*
* - Bugfix: Layout: support right-to-left writing direction by replacing remaining CSS values 'left' with 'start', thanks to @arahmanshaalan bug report.
* - Bugfix: Layout: support right-to-left writing direction by enabling mirrored paddings on HTML dir="rtl" pages, thanks to @arahmanshaalan bug report.
*
* @since 2.5.8
* @reporter @arahmanshaalan
* @link https://wordpress.org/support/topic/right-to-left-text-problem/
*/ */
.footnote_plugin_index, .footnote_plugin_index,
@ -440,11 +374,18 @@ footnotes
.footnote_plugin_symbol, .footnote_plugin_symbol,
.footnote_plugin_text { .footnote_plugin_text {
border: none !important; border: none !important;
text-align: left !important; text-align: start !important;
vertical-align: top !important; vertical-align: top !important;
padding: 5px 6px 10px 0 !important; padding: 5px 6px 10px 0 !important;
} }
html[dir="rtl"] .footnote_plugin_index,
html[dir="rtl"] .footnote_plugin_index_combi,
html[dir="rtl"] .footnote_plugin_symbol,
html[dir="rtl"] .footnote_plugin_text {
padding: 5px 0 10px 6px !important;
}
.footnote_backlink, .footnote_backlink,
.footnote_backlink:link, .footnote_backlink:link,
.footnote_plugin_link, .footnote_plugin_link,

View file

@ -6,34 +6,37 @@
* Created-Time: 16:21 * Created-Time: 16:21
* Since: 1.0 * Since: 1.0
* *
* Additional stylesheet needed when tooltips are enabled. * Additional stylesheet needed when tooltips (jQuery or alternative) are enabled.
* *
* It doesnt matter if the tooltips are jQuery based or alternative. * @version 2.5.8
* @since 2.5.5 * @lastmodified 2021-02-28T1302+0100
* @version 2.5.5
* @lastmodified 2021-02-18T2030+0100
* *
* System of unified minified style sheets tailored to the instance. * System of unified minified style sheets tailored to the instance.
* * @since 2.5.5
* @see full header in dev-common.css. * @see full header in dev-common.css.
*/ */
/** /**
* Tooltips * Tooltips.
* *
* - Bugfix: Tooltips: set z-index to maximum 2147483647 to address display issues with overlay content, thanks to @russianicons bug report. * - Bugfix: Tooltips: set z-index to maximum 2147483647 to address display issues with overlay content, thanks to @russianicons bug report.
* *
* @since 2.1.6 * @since 2.1.6
* @reporter @russianicons * @reporter @russianicons
* @link https://wordpress.org/support/topic/counter-styles-not-working/#post-13767299 * @link https://wordpress.org/support/topic/counter-styles-not-working/#post-13767299
*
* - Bugfix: Layout: support right-to-left writing direction by replacing remaining CSS values 'left' with 'start', thanks to @arahmanshaalan bug report.
*
* @since 2.5.8
* @reporter @arahmanshaalan
* @link https://wordpress.org/support/topic/right-to-left-text-problem/
*/ */
.footnote_tooltip { .footnote_tooltip {
display: none; display: none;
z-index: 2147483647 !important; z-index: 2147483647 !important;
cursor: auto; cursor: auto;
text-align: left; text-align: start !important;
padding: 12px; padding: 12px;
line-height: 1.2; line-height: 1.2;
font-weight: normal; font-weight: normal;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
.footnotes_validation_error{border:4px solid red;padding:20px 40px;margin:20px 0;background:#ff000055;text-align:start}.footnotes_validation_error p:first-child{font-size:20px;font-weight:700;text-align:center}.footnotes_validation_error p:nth-child(2){font-size:16px;font-style:italic}.footnotes_validation_error p:nth-child(3){font-size:14px;font-weight:700}.footnotes_validation_error p:last-child{font-size:12px}.footnote_url_wrap{word-wrap:anywhere;overflow-wrap:anywhere;word-break:break-all}.footnote_item_base,.footnote_referrer_base{position:absolute}.footnote_item_anchor,.footnote_referrer_anchor{position:relative}.footnote_plugin_tooltip_text,.footnote_plugin_tooltip_text:hover,.footnote_referrer,.footnote_referrer:hover,.footnote_referrer:link,.footnote_referrer>a,.footnote_referrer>a:hover,.footnote_referrer>a:link,.main-content .footnote_plugin_tooltip_text,.main-content .footnote_plugin_tooltip_text:hover,.main-content .footnote_referrer,.main-content .footnote_referrer:hover,.main-content .footnote_referrer:link,.main-content .footnote_referrer>a,.main-content .footnote_referrer>a:hover,.main-content .footnote_referrer>a:link{text-decoration:none!important;border-bottom:none!important;box-shadow:none!important}.footnote_plugin_tooltip_text{line-height:0;position:relative!important;cursor:pointer}.footnote_tooltip{display:none;z-index:2147483647!important;cursor:auto;text-align:left;padding:12px;line-height:1.2;font-weight:400;font-style:normal}.footnote_referrer.relative{position:relative}.footnote_tooltip.position{display:unset;position:absolute;bottom:24px;left:-50px;width:400px}.footnote_tooltip.shown{visibility:visible;opacity:1;transition-property:visibility opacity;transition-timing-function:linear}.footnote_tooltip.hidden{visibility:hidden;opacity:0;transition-property:visibility opacity;transition-timing-function:linear}.footnote_tooltip_continue{font-style:italic;color:green;text-decoration:none!important;cursor:pointer;white-space:nowrap}.footnote_tooltip_continue:hover{color:#00f;text-decoration:underline!important}.footnotes_reference_container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.footnote_container_prepare{display:block!important;padding-top:24px!important}.footnote_container_prepare>p{line-height:1.3!important;margin-top:1em!important;margin-bottom:.25em!important;padding:0!important;font-weight:400!important;display:block!important;-webkit-margin-before:.83em!important;-webkit-margin-after:.83em!important;-webkit-margin-start:0!important;-webkit-margin-end:0!important;text-align:left!important;vertical-align:middle}.footnote_container_prepare>p>span:first-child,.footnote_container_prepare>p>span:nth-child(3){text-align:start!important;font-size:1.5em!important}.footnote_reference_container_collapse_button{cursor:pointer;padding:0 .5em;font-size:1.3em!important;vertical-align:2px;text-decoration:none!important}h2>.footnote_reference_container_collapse_button,h3>.footnote_reference_container_collapse_button,h4>.footnote_reference_container_collapse_button,h5>.footnote_reference_container_collapse_button,h6>.footnote_reference_container_collapse_button{font-size:inherit!important}.footnote_container_prepare>p>span:last-child a,.footnote_reference_container_collapse_button a{text-decoration:none!important}.footnote-reference-container,.footnotes_table{width:100%;border:none}.footnote_plugin_index,.footnote_plugin_index_combi,.footnote_plugin_symbol,.footnote_plugin_text{border:none!important;text-align:left!important;vertical-align:top!important;padding:5px 6px 10px 0!important}.footnote_backlink,.footnote_backlink:link,.footnote_plugin_link,.footnote_plugin_link:link,.main-content .footnote_backlink,.main-content .footnote_backlink:link,.main-content .footnote_plugin_link,.main-content .footnote_plugin_link:link{text-decoration:none!important;border-bottom:none!important}.footnote_backlink,.footnote_plugin_link{white-space:nowrap}.footnote_backlink,.footnote_index,.pointer{cursor:pointer}.footnote_backlink:hover,.footnote_plugin_link:hover,.footnote_plugin_text a:hover{text-decoration:unset;text-decoration:underline}.footnote_plugin_text{width:unset}.footnote_plugin_index,.footnote_plugin_index_combi{max-width:100px;width:2.5em}@media only screen and (max-width:768px){.footnote_plugin_index,.footnote_plugin_index_combi{max-width:80px}}.footnotes_reference_container{page-break-inside:avoid}@media print{.footnote_index_arrow,.footnote_reference_container_collapse_button,.footnote_tooltip{display:none}.footnote_plugin_tooltip_text{color:inherit}.footnote_plugin_index a,.footnote_plugin_index_combi a{color:inherit;text-decoration:none!important}div.post-meta-edit-link-wrapper{display:none}}.footnotes_logo,.footnotes_logo:hover{text-decoration:none;font-weight:400}.footnotes_logo_part1{color:#2bb975}.footnotes_logo_part2{color:#545f5a} .footnotes_validation_error{border:4px solid red;padding:20px 40px;margin:20px 0;background:#ff000055;text-align:start}.footnotes_validation_error p:first-child{font-size:20px;font-weight:700;text-align:center}.footnotes_validation_error p:nth-child(2){font-size:16px;font-style:italic}.footnotes_validation_error p:nth-child(3){font-size:14px;font-weight:700}.footnotes_validation_error p:last-child{font-size:12px}.footnote_url_wrap{word-wrap:anywhere;overflow-wrap:anywhere;word-break:break-all}.footnote_item_base,.footnote_referrer_base{position:absolute}.footnote_item_anchor,.footnote_referrer_anchor{position:relative}.footnote_plugin_tooltip_text,.footnote_plugin_tooltip_text:hover,.footnote_referrer,.footnote_referrer:hover,.footnote_referrer:link,.footnote_referrer>a,.footnote_referrer>a:hover,.footnote_referrer>a:link,.main-content .footnote_plugin_tooltip_text,.main-content .footnote_plugin_tooltip_text:hover,.main-content .footnote_referrer,.main-content .footnote_referrer:hover,.main-content .footnote_referrer:link,.main-content .footnote_referrer>a,.main-content .footnote_referrer>a:hover,.main-content .footnote_referrer>a:link{text-decoration:none!important;border-bottom:none!important;box-shadow:none!important}.footnote_plugin_tooltip_text{line-height:0;position:relative!important;cursor:pointer}.footnotes_reference_container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.footnote_container_prepare{display:block!important;padding-top:24px!important}.footnote_container_prepare>p{line-height:1.3!important;margin-top:1em!important;margin-bottom:.25em!important;padding:0!important;font-weight:400!important;display:block!important;-webkit-margin-before:.83em!important;-webkit-margin-after:.83em!important;-webkit-margin-start:0!important;-webkit-margin-end:0!important;text-align:start!important;vertical-align:middle}.footnote_container_prepare>p>span:first-child,.footnote_container_prepare>p>span:nth-child(3){text-align:start!important;font-size:1.5em!important}.footnote_reference_container_collapse_button{cursor:pointer;padding:0 .5em;font-size:1.3em!important;vertical-align:2px;text-decoration:none!important}h2>.footnote_reference_container_collapse_button,h3>.footnote_reference_container_collapse_button,h4>.footnote_reference_container_collapse_button,h5>.footnote_reference_container_collapse_button,h6>.footnote_reference_container_collapse_button{font-size:inherit!important}.footnote_container_prepare>p>span:last-child a,.footnote_reference_container_collapse_button a{text-decoration:none!important}.footnote-reference-container,.footnotes_table{width:100%;border:none}.footnote_plugin_index,.footnote_plugin_index_combi,.footnote_plugin_symbol,.footnote_plugin_text{border:none!important;text-align:start!important;vertical-align:top!important;padding:5px 6px 10px 0!important}html[dir=rtl] .footnote_plugin_index,html[dir=rtl] .footnote_plugin_index_combi,html[dir=rtl] .footnote_plugin_symbol,html[dir=rtl] .footnote_plugin_text{padding:5px 0 10px 6px!important}.footnote_backlink,.footnote_backlink:link,.footnote_plugin_link,.footnote_plugin_link:link,.main-content .footnote_backlink,.main-content .footnote_backlink:link,.main-content .footnote_plugin_link,.main-content .footnote_plugin_link:link{text-decoration:none!important;border-bottom:none!important}.footnote_backlink,.footnote_plugin_link{white-space:nowrap}.footnote_backlink,.footnote_index,.pointer{cursor:pointer}.footnote_backlink:hover,.footnote_plugin_link:hover,.footnote_plugin_text a:hover{text-decoration:unset;text-decoration:underline}.footnote_plugin_text{width:unset}.footnote_plugin_index,.footnote_plugin_index_combi{max-width:100px;width:2.5em}@media only screen and (max-width:768px){.footnote_plugin_index,.footnote_plugin_index_combi{max-width:80px}}.footnotes_reference_container{page-break-inside:avoid}@media print{.footnote_index_arrow,.footnote_reference_container_collapse_button,.footnote_tooltip{display:none}.footnote_plugin_tooltip_text{color:inherit}.footnote_plugin_index a,.footnote_plugin_index_combi a{color:inherit;text-decoration:none!important}div.post-meta-edit-link-wrapper{display:none}}.footnotes_logo,.footnotes_logo:hover{text-decoration:none;font-weight:400}.footnotes_logo_part1{color:#2bb975}.footnotes_logo_part2{color:#545f5a}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,27 +1,27 @@
<?php <?php
/* /**
Plugin Name: footnotes * Plugin Name: footnotes
Plugin URI: https://wordpress.org/plugins/footnotes/ * Plugin URI: https://wordpress.org/plugins/footnotes/
Description: time to bring footnotes to your website! footnotes are known from offline publishing and everybody takes them for granted when reading a magazine. * Description: time to bring footnotes to your website! footnotes are known from offline publishing and everybody takes them for granted when reading a magazine.
Author: Mark Cheret * Author: Mark Cheret
Version: 2.5.6d4 * Version: 2.5.9d1
Author URI: http://cheret.de/plugins/footnotes-2/ * Author URI: http://cheret.de/plugins/footnotes-2/
Text Domain: footnotes * Text Domain: footnotes
Domain Path: /languages * Domain Path: /languages
*/ *
/* * @package footnotes
* Copyright 2021 Mark Cheret (email: mark@cheret.de) * @copyright 2021 Mark Cheret (email: mark@cheret.de)
*/ */
/** /**
* Version number for stylesheet cache busting. * Version number for stylesheet cache busting.
* *
* @since 2.1.4 * @since 2.1.4
* @since 2.5.3 (Hungarian) * @since 2.5.3 (Hungarian)
* @var str * @var str
* @lastmodified 2021-02-20T0438+0100 * @lastmodified 2021-02-28T1345+0100
* @committer @pewgeuges
*/ */
define( 'C_STR_FOOTNOTES_VERSION', '2.5.6d4' ); define( 'C_STR_FOOTNOTES_VERSION', '2.5.9d1' );
/* /*
LICENSE NOTICE LICENSE NOTICE
@ -44,21 +44,21 @@ define( 'C_STR_FOOTNOTES_VERSION', '2.5.6d4' );
* Plugins main PHP file. * Plugins main PHP file.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 0.0.1 * @since 0.0.1
*/ */
// Get all common classes and functions // Get all common classes and functions.
require_once(dirname(__FILE__) . "/includes.php"); require_once dirname( __FILE__ ) . '/includes.php';
// add Plugin Links to the "installed plugins" page // Add Plugin Links to the "installed plugins" page.
$l_str_plugin_file = 'footnotes/footnotes.php'; $l_str_plugin_file = 'footnotes/footnotes.php';
add_filter("plugin_action_links_{$l_str_plugin_file}", array("MCI_Footnotes_Hooks", "PluginLinks"), 10, 2); add_filter( "plugin_action_links_{$l_str_plugin_file}", array( 'MCI_Footnotes_Hooks', 'plugin_links' ), 10, 2 );
// initialize the Plugin // Initialize the Plugin.
$g_obj_MCI_Footnotes = new MCI_Footnotes(); $g_obj_mci_footnotes = new MCI_Footnotes();
// run the Plugin // Run the Plugin.
$g_obj_MCI_Footnotes->run(); $g_obj_mci_footnotes->run();
/** /**
* Sets the stylesheet enqueuing mode for production. * Sets the stylesheet enqueuing mode for production.

View file

@ -3,36 +3,37 @@
* Includes all common files. * Includes all common files.
* *
* @filesource * @filesource
* @author Stefan Herndler * @package footnotes
* @since 1.5.0 14.09.14 13:40 * @since 1.5.0 14.09.14 13:40
*/ */
/** /**
* Requires (require_once) all *.php files inside a specific Directory. * Requires (`require_once`) all `*.php` files inside a specific Directory.
* *
* @author Stefan Herndler * @author Stefan Herndler
* @since 1.5.0 * @since 1.5.0
* @param string $p_str_Directory Absolute Directory path to lookup for *.php files * @param string $p_str_directory Absolute Directory path to lookup for `*.php` files.
*/ */
function MCI_Footnotes_requirePhpFiles($p_str_Directory) { function mci_footnotes_require_php_files( $p_str_directory ) {
// append slash at the end of the Directory if not exist // Append slash at the end of the Directory if not exist.
if (substr($p_str_Directory, -1) != "/") { if ( '/' !== substr( $p_str_directory, -1 ) ) {
$p_str_Directory .= "/"; $p_str_directory .= '/';
} }
// get all PHP files inside Directory // Get all PHP files inside Directory.
$l_arr_Files = scandir($p_str_Directory); $l_arr_files = scandir( $p_str_directory );
// iterate through each class // Iterate through each class.
foreach ($l_arr_Files as $l_str_FileName) { foreach ( $l_arr_files as $l_str_file_name ) {
// skip all non *.php files // Skip all non-PHP files.
if (strtolower(substr($l_str_FileName, -4)) != ".php") { if ( '.php' !== strtolower( substr( $l_str_file_name, -4 ) ) ) {
continue; continue;
} }
// phpcs:disable Generic.Commenting.DocComment.MissingShort
/** @noinspection PhpIncludeInspection */ /** @noinspection PhpIncludeInspection */
require_once($p_str_Directory . $l_str_FileName); require_once $p_str_directory . $l_str_file_name;
// phpcs:enable
} }
} }
MCI_Footnotes_requirePhpFiles(dirname(__FILE__) . "/class"); mci_footnotes_require_php_files( dirname( __FILE__ ) . '/class' );
MCI_Footnotes_requirePhpFiles(dirname(__FILE__) . "/class/dashboard"); mci_footnotes_require_php_files( dirname( __FILE__ ) . '/class/layout' );
MCI_Footnotes_requirePhpFiles(dirname(__FILE__) . "/class/widgets"); mci_footnotes_require_php_files( dirname( __FILE__ ) . '/class/widgets' );

View file

@ -1,10 +1,10 @@
=== footnotes === === footnotes ===
Contributors: mark.cheret, lolzim, dartiss, docteurfitness, felipelavinz, martinneumannat, matkus2, meglio, misfist, rumperuu, spaceling, vonpiernik, pewgeuges Contributors: mark.cheret, lolzim, rumperuu, aricura, misfist, ericakfranz, dartiss, docteurfitness, felipelavinz, martinneumannat, matkus2, meglio, spaceling, vonpiernik, pewgeuges
Tags: footnote, footnotes, bibliography, formatting, notes, Post, posts, reference, referencing Tags: footnote, footnotes, bibliography, formatting, notes, Post, posts, reference, referencing
Requires at least: 3.9 Requires at least: 3.9
Tested up to: 5.6.1 Tested up to: 5.6.1
Requires PHP: 5.6 Requires PHP: 5.6
Stable Tag: 2.5.5 Stable Tag: 2.5.9d1
License: GPLv3 or later License: GPLv3 or later
License URI: http://www.gnu.org/licenses/gpl-3.0.html License URI: http://www.gnu.org/licenses/gpl-3.0.html
@ -77,10 +77,24 @@ Visit this swift write-up from a **footnotes** user by the name of **Southwest**
== Changelog == == Changelog ==
= 2.5.9 =
- Bugfix: Dashboard: unescape quotation marks in Custom CSS text area and input boxes, thanks to @rumperuu code contribution.
- Update: Codebase: compliance to WordPress coding standards, thanks to @rumperuu code contribution.
- Adding: Documentation: additional readme in markdown format for use with GitHub, thanks to @rumperuu code contribution.
- Adding: Documentation: help and support for individual contributors through Contributing Guidelines, thanks to @rumperuu code contribution.
- Adding: Development: pre-commit hook for WordPress projects, modified from @bjornjohansen, thanks to @rumperuu code contribution.
= 2.5.8 =
- Bugfix: Layout: support right-to-left writing direction by replacing remaining CSS values 'left' with 'start', thanks to @arahmanshaalan bug report.
- Bugfix: Layout: support right-to-left writing direction by enabling mirrored paddings on HTML dir="rtl" pages, thanks to @arahmanshaalan bug report.
= 2.5.7 =
- Bugfix: Process: fix footnote duplication by emptying the footnotes list every time the search algorithm is run on the content, thanks to @inoruhana bug report.
= 2.5.6 = = 2.5.6 =
- Bugfix: Reference container: optional alternative expanding and collapsing without jQuery for use with hard links, thanks to @hopper87it @pkverma99 issue reports. - Bugfix: Reference container: optional alternative expanding and collapsing without jQuery for use with hard links, thanks to @hopper87it @pkverma99 issue reports.
- Bugfix: Alternative tooltips: shrink width to short content. - Bugfix: Alternative tooltips: shrink width to short content.
- Update: Documentation: slightly revise / update the plugins welcome page on WordPress.org. - Update: Documentation: slightly revise or update the plugins welcome page on WordPress.org.
= 2.5.5 = = 2.5.5 =
- Update: Stylesheets: increase speed and energy efficiency by tailoring stylesheets to the needs of the instance, thanks to @docteurfitness design contribution. - Update: Stylesheets: increase speed and energy efficiency by tailoring stylesheets to the needs of the instance, thanks to @docteurfitness design contribution.
@ -326,7 +340,7 @@ Visit this swift write-up from a **footnotes** user by the name of **Southwest**
= 2.0.4 = = 2.0.4 =
- Update: Restore arrow settings to customize or disable the now prepended arrow symbol. - Update: Restore arrow settings to customize or disable the now prepended arrow symbol.
- Update: GDPR: Add jQuery UI from WordPress instead of third party. - Update: Libraries: Load jQuery UI from WordPress, thanks to @check2020de issue report.
- Bugfix: Referrers and backlinks: remove hard links to streamline browsing history, thanks to @theroninjedi47 bug report. - Bugfix: Referrers and backlinks: remove hard links to streamline browsing history, thanks to @theroninjedi47 bug report.
- Bugfix: Reference container: remove inconvenient left/right cellpadding. - Bugfix: Reference container: remove inconvenient left/right cellpadding.
- Bugfix: Tooltips: improve layout with inherited font size by lower line height. - Bugfix: Tooltips: improve layout with inherited font size by lower line height.
@ -366,7 +380,7 @@ Visit this swift write-up from a **footnotes** user by the name of **Southwest**
- Bugfix: Debug printed posts and pages - Bugfix: Debug printed posts and pages
- Bugfix: Display of combined identical notes - Bugfix: Display of combined identical notes
- Update: Adjusted scrolling time and offset - Update: Adjusted scrolling time and offset
- Bugfix: No borders around footnotes in the container - Bugfix: Reference container: no borders around footnotes, thanks to @ragonesi bug report.
- Bugfix: Mouse-over box display timing - Bugfix: Mouse-over box display timing
- Update: Translations: revised de_AT, de_DE, en_GB, en_US, es_ES - Update: Translations: revised de_AT, de_DE, en_GB, en_US, es_ES

View file

@ -54,7 +54,7 @@
type: 'POST', type: 'POST',
url: '/wp-admin/admin-ajax.php', url: '/wp-admin/admin-ajax.php',
data: { data: {
action: 'footnotes_getPluginInfo', action: 'footnotes_get_plugin_info',
plugin: '[[plugin-name]]' plugin: '[[plugin-name]]'
}, },
dataType: 'json', dataType: 'json',

View file

@ -4,8 +4,8 @@
--> -->
<span <span
class="footnote_referrer relative" class="footnote_referrer relative"
onmouseover="footnoteTooltipShow('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')" onmouseover="footnote_tooltip_show('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
onmouseout="footnoteTooltipHide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')" onmouseout="footnote_tooltip_hide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
><[[link-span]] ><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]');" onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]] [[hard-link]]
@ -17,7 +17,7 @@
>[[anchor-element]]<span >[[anchor-element]]<span
id="footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]" id="footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_tooltip position hidden" class="footnote_tooltip position hidden"
onmouseout="footnoteTooltipHide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')" onmouseout="footnote_tooltip_hide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
[[style]] [[style]]
>[[text]]</span >[[text]]</span
></span ></span