diff --git a/class/init.php b/class/init.php index 1fcf579..1fb7c75 100644 --- a/class/init.php +++ b/class/init.php @@ -10,8 +10,9 @@ * * Edited for v2.0.0: Added jQueryUI from CDN 2020-10-26T1907+0100 * Edited for v2.0.3: Added style sheet versioning 2020-10-29T1413+0100 - * Edited for v2.0.4: Enqueuing settings.css 2020-11-01T0317+0100 * Edited for v2.0.4: Added jQuery UI from WordPress 2020-11-01T1902+0100 + * + * Last modified: 2020-11-05T0239+0100 */ @@ -64,6 +65,14 @@ class MCI_Footnotes { * * @author Stefan Herndler * @since 1.5.0 + * + * Edited for 1.6.5: replaced deprecated function create_function() + * + * Contributed by Felipe Lavín Z. Thankfully acknowledged. + * + * create_function() was deprecated in PHP 7.2: + * + * See also: */ public function initializeWidgets() { register_widget("MCI_Footnotes_Widget_ReferenceContainer"); @@ -97,28 +106,26 @@ class MCI_Footnotes { * @since 1.5.0 * * Updated for v2.0.4 by adding jQueryUI from WordPress following @check2020de: - * + * * See * * jQueryUI re-enables the tooltip infobox disabled when WPv5.5 was released. */ public function registerPublic() { - - // add the jQuery plugin (already registered by WordPress) - wp_enqueue_script('jquery'); - - // Add jQueryUI: 'no need to enqueue -core, because dependancies are set' - wp_enqueue_script( 'jquery-ui-widget' ); - wp_enqueue_script( 'jquery-ui-mouse' ); - wp_enqueue_script( 'jquery-ui-accordion' ); - wp_enqueue_script( 'jquery-ui-autocomplete' ); - wp_enqueue_script( 'jquery-ui-slider' ); + + // add the jQuery plugin (already registered by WordPress) + wp_enqueue_script( 'jquery' ); + // Add jQueryUI: 'no need to enqueue -core, because dependencies are set' + wp_enqueue_script( 'jquery-ui-widget' ); + wp_enqueue_script( 'jquery-ui-mouse' ); + wp_enqueue_script( 'jquery-ui-accordion' ); + wp_enqueue_script( 'jquery-ui-autocomplete' ); + wp_enqueue_script( 'jquery-ui-slider' ); // Add jQuery tools: wp_enqueue_script('mci-footnotes-js-jquery-tools', plugins_url('../js/jquery.tools.min.js', __FILE__)); // IMPORTANT: up-to-date plugin version number for cache busting. - wp_enqueue_style('mci-footnotes-css-public', plugins_url('../css/public.css', __FILE__), '', '2.0.4'); - wp_enqueue_style('mci-footnotes-css-settings', plugins_url('../css/settings.css', __FILE__), '', '2.0.4'); + wp_enqueue_style('mci-footnotes-css-public', plugins_url('../css/public.css', __FILE__), '', '2.0.5rc0'); } } diff --git a/class/settings.php b/class/settings.php index 5305237..ec2e764 100644 --- a/class/settings.php +++ b/class/settings.php @@ -6,7 +6,7 @@ * @author Stefan Herndler * @since 1.5.0 14.09.14 10:43 * - * Edited for v2.0.4 2020-11-01T0333+0100 + * Edited for v2.0.4 2020-11-02T2115+0100 */ @@ -20,104 +20,104 @@ */ class MCI_Footnotes_Settings { - /** - * Settings Container Key for the label of the reference container. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_REFERENCE_CONTAINER_NAME = "footnote_inputfield_references_label"; + /** + * Settings Container Key for the label of the reference container. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_REFERENCE_CONTAINER_NAME = "footnote_inputfield_references_label"; - /** - * Settings Container Key to collapse the reference container by default. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var bool - */ - const C_BOOL_REFERENCE_CONTAINER_COLLAPSE = "footnote_inputfield_collapse_references"; + /** + * Settings Container Key to collapse the reference container by default. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var bool + */ + const C_BOOL_REFERENCE_CONTAINER_COLLAPSE = "footnote_inputfield_collapse_references"; - /** - * Settings Container Key for the positioning of the reference container. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_REFERENCE_CONTAINER_POSITION = "footnote_inputfield_reference_container_place"; + /** + * Settings Container Key for the positioning of the reference container. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_REFERENCE_CONTAINER_POSITION = "footnote_inputfield_reference_container_place"; - /** - * Settings Container Key to combine identical footnotes. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var bool - */ - const C_BOOL_COMBINE_IDENTICAL_FOOTNOTES = "footnote_inputfield_combine_identical"; + /** + * Settings Container Key to combine identical footnotes. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var bool + */ + const C_BOOL_COMBINE_IDENTICAL_FOOTNOTES = "footnote_inputfield_combine_identical"; - /** - * Settings Container Key for the start of the footnotes short code. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_SHORT_CODE_START = "footnote_inputfield_placeholder_start"; + /** + * Settings Container Key for the start of the footnotes short code. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_SHORT_CODE_START = "footnote_inputfield_placeholder_start"; - /** - * Settings Container Key for the end of the footnotes short code. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_SHORT_CODE_END = "footnote_inputfield_placeholder_end"; + /** + * Settings Container Key for the end of the footnotes short code. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_SHORT_CODE_END = "footnote_inputfield_placeholder_end"; - /** - * Settings Container Key for the user defined start of the footnotes short code. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED = "footnote_inputfield_placeholder_start_user_defined"; + /** + * Settings Container Key for the user defined start of the footnotes short code. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED = "footnote_inputfield_placeholder_start_user_defined"; - /** - * Settings Container Key for the user defined end of the footnotes short code. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED = "footnote_inputfield_placeholder_end_user_defined"; + /** + * Settings Container Key for the user defined end of the footnotes short code. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED = "footnote_inputfield_placeholder_end_user_defined"; - /** - * Settings Container Key for the counter style of the footnotes. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_COUNTER_STYLE = "footnote_inputfield_counter_style"; + /** + * Settings Container Key for the counter style of the footnotes. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_COUNTER_STYLE = "footnote_inputfield_counter_style"; - /** - * Settings Container Key for the 'I love footnotes' text. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_LOVE = "footnote_inputfield_love"; + /** + * Settings Container Key for the 'I love footnotes' text. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_LOVE = "footnote_inputfield_love"; - /** - * Settings Container Key to look for footnotes in post excerpts. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_BOOL_FOOTNOTES_IN_EXCERPT = "footnote_inputfield_search_in_excerpt"; + /** + * Settings Container Key to look for footnotes in post excerpts. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_BOOL_FOOTNOTES_IN_EXCERPT = "footnote_inputfield_search_in_excerpt"; /** * Settings Container Key for the Expert mode. @@ -128,32 +128,32 @@ class MCI_Footnotes_Settings { */ const C_BOOL_FOOTNOTES_EXPERT_MODE = "footnote_inputfield_enable_expert_mode"; - /** - * Settings Container Key for the styling before the footnotes index. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_STYLING_BEFORE = "footnote_inputfield_custom_styling_before"; + /** + * Settings Container Key for the styling before the footnotes index. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_STYLING_BEFORE = "footnote_inputfield_custom_styling_before"; - /** - * Settings Container Key for the styling after the footnotes index. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_FOOTNOTES_STYLING_AFTER = "footnote_inputfield_custom_styling_after"; + /** + * Settings Container Key for the styling after the footnotes index. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_FOOTNOTES_STYLING_AFTER = "footnote_inputfield_custom_styling_after"; - /** - * Settings Container Key for the mouse-over box to be enabled. - * - * @author Stefan Herndler - * @since 1.5.2 - * @var string - */ - const C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED = "footnote_inputfield_custom_mouse_over_box_enabled"; + /** + * Settings Container Key for the mouse-over box to be enabled. + * + * @author Stefan Herndler + * @since 1.5.2 + * @var string + */ + const C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED = "footnote_inputfield_custom_mouse_over_box_enabled"; /** * Settings Container Key for the mouse-over box to display only an excerpt. @@ -173,32 +173,32 @@ class MCI_Footnotes_Settings { */ const C_INT_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_LENGTH = "footnote_inputfield_custom_mouse_over_box_excerpt_length"; - /** - * Settings Container Key for the mouse-over box to define the positioning. - * - * @author Stefan Herndler - * @since 1.5.7 - * @var string - */ - const C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION = "footnote_inputfield_custom_mouse_over_box_position"; + /** + * Settings Container Key for the mouse-over box to define the positioning. + * + * @author Stefan Herndler + * @since 1.5.7 + * @var string + */ + const C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION = "footnote_inputfield_custom_mouse_over_box_position"; - /** - * Settings Container Key for the mouse-over box to define the offset (x). - * - * @author Stefan Herndler - * @since 1.5.7 - * @var string - */ - const C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X = "footnote_inputfield_custom_mouse_over_box_offset_x"; + /** + * Settings Container Key for the mouse-over box to define the offset (x). + * + * @author Stefan Herndler + * @since 1.5.7 + * @var string + */ + const C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X = "footnote_inputfield_custom_mouse_over_box_offset_x"; - /** - * Settings Container Key for the mouse-over box to define the offset (y). - * - * @author Stefan Herndler - * @since 1.5.7 - * @var string - */ - const C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y = "footnote_inputfield_custom_mouse_over_box_offset_y"; + /** + * Settings Container Key for the mouse-over box to define the offset (y). + * + * @author Stefan Herndler + * @since 1.5.7 + * @var string + */ + const C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y = "footnote_inputfield_custom_mouse_over_box_offset_y"; /** * Settings Container Key for the mouse-over box to define the color. @@ -254,41 +254,41 @@ class MCI_Footnotes_Settings { */ const C_INT_FOOTNOTES_MOUSE_OVER_BOX_MAX_WIDTH = "footnote_inputfield_custom_mouse_over_box_max_width"; - /** - * Settings Container Key for the mouse-over box to define the box-shadow color. - * - * @author Stefan Herndler - * @since 1.5.8 - * @var string - */ - const C_STR_FOOTNOTES_MOUSE_OVER_BOX_SHADOW_COLOR = "footnote_inputfield_custom_mouse_over_box_shadow_color"; + /** + * Settings Container Key for the mouse-over box to define the box-shadow color. + * + * @author Stefan Herndler + * @since 1.5.8 + * @var string + */ + const C_STR_FOOTNOTES_MOUSE_OVER_BOX_SHADOW_COLOR = "footnote_inputfield_custom_mouse_over_box_shadow_color"; - /** - * Settings Container Key for the Hyperlink arrow. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_HYPERLINK_ARROW = "footnote_inputfield_custom_hyperlink_symbol"; + /** + * Settings Container Key for the Hyperlink arrow. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_HYPERLINK_ARROW = "footnote_inputfield_custom_hyperlink_symbol"; - /** - * Settings Container Key for the user defined Hyperlink arrow. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_HYPERLINK_ARROW_USER_DEFINED = "footnote_inputfield_custom_hyperlink_symbol_user"; + /** + * Settings Container Key for the user defined Hyperlink arrow. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_HYPERLINK_ARROW_USER_DEFINED = "footnote_inputfield_custom_hyperlink_symbol_user"; - /** - * Settings Container Key for the user defined styling. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var string - */ - const C_STR_CUSTOM_CSS = "footnote_inputfield_custom_css"; + /** + * Settings Container Key for the user defined styling. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var string + */ + const C_STR_CUSTOM_CSS = "footnote_inputfield_custom_css"; /** * Settings Container Key the activation of the_title hook. @@ -344,125 +344,127 @@ class MCI_Footnotes_Settings { */ const C_BOOL_EXPERT_LOOKUP_THE_POST = "footnote_inputfield_expert_lookup_the_post"; - /** - * Stores a singleton reference of this class. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var MCI_Footnotes_Settings - */ - private static $a_obj_Instance = null; + /** + * Stores a singleton reference of this class. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var MCI_Footnotes_Settings + */ + private static $a_obj_Instance = null; - /** - * Contains all Settings Container names. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var array - */ - private $a_arr_Container = array("footnotes_storage", "footnotes_storage_custom", "footnotes_storage_expert"); + /** + * Contains all Settings Container names. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var array + */ + private $a_arr_Container = array("footnotes_storage", "footnotes_storage_custom", "footnotes_storage_expert"); - /** - * Contains all Default Settings for each Settings Container. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var array - */ - private $a_arr_Default = array( - "footnotes_storage" => array( - self::C_STR_REFERENCE_CONTAINER_NAME => 'References', - self::C_BOOL_REFERENCE_CONTAINER_COLLAPSE => '', - self::C_STR_REFERENCE_CONTAINER_POSITION => 'post_end', - // Identical footnotes should not be combined by default - // as long as the feature raises criticism for malfunctioning: - // - self::C_BOOL_COMBINE_IDENTICAL_FOOTNOTES => '', - self::C_STR_FOOTNOTES_SHORT_CODE_START => '((', - self::C_STR_FOOTNOTES_SHORT_CODE_END => '))', - self::C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED => '', - self::C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED => '', - self::C_STR_FOOTNOTES_COUNTER_STYLE => 'arabic_plain', - self::C_STR_FOOTNOTES_LOVE => 'no', - self::C_BOOL_FOOTNOTES_IN_EXCERPT => 'yes', + /** + * Contains all Default Settings for each Settings Container. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var array + */ + private $a_arr_Default = array( + "footnotes_storage" => array( + self::C_STR_REFERENCE_CONTAINER_NAME => 'References', + self::C_BOOL_REFERENCE_CONTAINER_COLLAPSE => '', + self::C_STR_REFERENCE_CONTAINER_POSITION => 'post_end', + // Identical footnotes should not be combined by default + // as long as the feature raises criticism for malfunctioning: + // + self::C_BOOL_COMBINE_IDENTICAL_FOOTNOTES => '', + self::C_STR_FOOTNOTES_SHORT_CODE_START => '((', + self::C_STR_FOOTNOTES_SHORT_CODE_END => '))', + self::C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED => '', + self::C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED => '', + self::C_STR_FOOTNOTES_COUNTER_STYLE => 'arabic_plain', + self::C_STR_FOOTNOTES_LOVE => 'no', + self::C_BOOL_FOOTNOTES_IN_EXCERPT => 'yes', self::C_BOOL_FOOTNOTES_EXPERT_MODE => 'no' - ), - "footnotes_storage_custom" => array( - self::C_STR_FOOTNOTES_STYLING_BEFORE => '', - self::C_STR_FOOTNOTES_STYLING_AFTER => ')', - self::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED => 'yes', + ), + "footnotes_storage_custom" => array( + self::C_STR_FOOTNOTES_STYLING_BEFORE => '', + self::C_STR_FOOTNOTES_STYLING_AFTER => ')', + self::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED => 'yes', self::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_ENABLED => 'no', self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_LENGTH => 150, - self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION => 'top right', - self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X => 10, - self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y => 10, + self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION => 'top right', + self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X => 10, + self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y => 10, self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_COLOR => '', self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_BACKGROUND => '#fff7a7', self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_BORDER_WIDTH => 1, self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_BORDER_COLOR => '#cccc99', self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_BORDER_RADIUS => 3, self::C_INT_FOOTNOTES_MOUSE_OVER_BOX_MAX_WIDTH => 0, - self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_SHADOW_COLOR => '#666666', - self::C_STR_HYPERLINK_ARROW => '↑', - self::C_STR_HYPERLINK_ARROW_USER_DEFINED => '', - self::C_STR_CUSTOM_CSS => '' - ), + self::C_STR_FOOTNOTES_MOUSE_OVER_BOX_SHADOW_COLOR => '#666666', + self::C_STR_HYPERLINK_ARROW => '↑', + self::C_STR_HYPERLINK_ARROW_USER_DEFINED => '', + self::C_STR_CUSTOM_CSS => '' + ), + // These should all be enabled by default. + // See "footnotes_storage_expert" => array( - self::C_BOOL_EXPERT_LOOKUP_THE_TITLE => '', + self::C_BOOL_EXPERT_LOOKUP_THE_TITLE => 'yes', self::C_BOOL_EXPERT_LOOKUP_THE_CONTENT => 'yes', self::C_BOOL_EXPERT_LOOKUP_THE_EXCERPT => 'yes', - self::C_BOOL_EXPERT_LOOKUP_WIDGET_TITLE => '', + self::C_BOOL_EXPERT_LOOKUP_WIDGET_TITLE => 'yes', self::C_BOOL_EXPERT_LOOKUP_WIDGET_TEXT => 'yes', - self::C_BOOL_EXPERT_LOOKUP_THE_POST => '' + self::C_BOOL_EXPERT_LOOKUP_THE_POST => 'yes' ) - ); + ); - /** - * Contains all Settings from each Settings container as soon as this class is initialized. - * - * @author Stefan Herndler - * @since 1.5.0 - * @var array - */ - private $a_arr_Settings = array(); + /** + * Contains all Settings from each Settings container as soon as this class is initialized. + * + * @author Stefan Herndler + * @since 1.5.0 + * @var array + */ + private $a_arr_Settings = array(); - /** - * Class Constructor. Loads all Settings from each WordPress Settings container. - * - * @author Stefan Herndler - * @since 1.5.0 - */ - private function __construct() { - $this->loadAll(); - } + /** + * Class Constructor. Loads all Settings from each WordPress Settings container. + * + * @author Stefan Herndler + * @since 1.5.0 + */ + private function __construct() { + $this->loadAll(); + } - /** - * Returns a singleton of this class. - * - * @author Stefan Herndler - * @since 1.5.0 - * @return MCI_Footnotes_Settings - */ - public static function instance() { - // no instance defined yet, load it - if (self::$a_obj_Instance === null) { - self::$a_obj_Instance = new self(); - } - // return a singleton of this class - return self::$a_obj_Instance; - } + /** + * Returns a singleton of this class. + * + * @author Stefan Herndler + * @since 1.5.0 + * @return MCI_Footnotes_Settings + */ + public static function instance() { + // no instance defined yet, load it + if (self::$a_obj_Instance === null) { + self::$a_obj_Instance = new self(); + } + // return a singleton of this class + return self::$a_obj_Instance; + } - /** - * Returns the name of a specified Settings Container. - * - * @author Stefan Herndler - * @since 1.5.0 - * @param int $p_int_Index Settings Container Array Key Index. - * @return string Settings Container name. - */ - public function getContainer($p_int_Index) { - return $this->a_arr_Container[$p_int_Index]; - } + /** + * Returns the name of a specified Settings Container. + * + * @author Stefan Herndler + * @since 1.5.0 + * @param int $p_int_Index Settings Container Array Key Index. + * @return string Settings Container name. + */ + public function getContainer($p_int_Index) { + return $this->a_arr_Container[$p_int_Index]; + } /** * Returns the default values of a specific Settings Container. @@ -476,114 +478,114 @@ class MCI_Footnotes_Settings { return $this->a_arr_Default[$this->a_arr_Container[$p_int_Index]]; } - /** - * Loads all Settings from each Settings container. - * - * @author Stefan Herndler - * @since 1.5.0 - */ - private function loadAll() { - // clear current settings - $this->a_arr_Settings = array(); - for ($i = 0; $i < count($this->a_arr_Container); $i++) { - // load settings - $this->a_arr_Settings = array_merge($this->a_arr_Settings, $this->Load($i)); - } - } + /** + * Loads all Settings from each Settings container. + * + * @author Stefan Herndler + * @since 1.5.0 + */ + private function loadAll() { + // clear current settings + $this->a_arr_Settings = array(); + for ($i = 0; $i < count($this->a_arr_Container); $i++) { + // load settings + $this->a_arr_Settings = array_merge($this->a_arr_Settings, $this->Load($i)); + } + } - /** - * Loads all Settings from specified Settings Container. - * - * @author Stefan Herndler - * @since 1.5.0 - * @param int $p_int_Index Settings Container Array Key Index. - * @return array Settings loaded from Container of Default Settings if Settings Container is empty (first usage). - */ - private function Load($p_int_Index) { - // load all settings from container - $l_arr_Options = get_option($this->getContainer($p_int_Index)); - // load all default settings - $l_arr_Default = $this->a_arr_Default[$this->getContainer($p_int_Index)]; + /** + * Loads all Settings from specified Settings Container. + * + * @author Stefan Herndler + * @since 1.5.0 + * @param int $p_int_Index Settings Container Array Key Index. + * @return array Settings loaded from Container of Default Settings if Settings Container is empty (first usage). + */ + private function Load($p_int_Index) { + // load all settings from container + $l_arr_Options = get_option($this->getContainer($p_int_Index)); + // load all default settings + $l_arr_Default = $this->a_arr_Default[$this->getContainer($p_int_Index)]; - // no settings found, set them to their default value - if (empty($l_arr_Options)) { - return $l_arr_Default; - } - // iterate through all available settings ( = default values) - foreach($l_arr_Default as $l_str_Key => $l_str_Value) { - // available setting not found in the container - if (!array_key_exists($l_str_Key, $l_arr_Options)) { - // define the setting with its default value - $l_arr_Options[$l_str_Key] = $l_str_Value; - } - } - // iterate through each setting in the container - foreach($l_arr_Options as $l_str_Key => $l_str_Value) { - // remove all whitespace at the beginning and end of a setting - //$l_str_Value = trim($l_str_Value); - // write the sanitized value back to the setting container - $l_arr_Options[$l_str_Key] = $l_str_Value; - } - // return settings loaded from Container - return $l_arr_Options; - } + // no settings found, set them to their default value + if (empty($l_arr_Options)) { + return $l_arr_Default; + } + // iterate through all available settings ( = default values) + foreach($l_arr_Default as $l_str_Key => $l_str_Value) { + // available setting not found in the container + if (!array_key_exists($l_str_Key, $l_arr_Options)) { + // define the setting with its default value + $l_arr_Options[$l_str_Key] = $l_str_Value; + } + } + // iterate through each setting in the container + foreach($l_arr_Options as $l_str_Key => $l_str_Value) { + // remove all whitespace at the beginning and end of a setting + //$l_str_Value = trim($l_str_Value); + // write the sanitized value back to the setting container + $l_arr_Options[$l_str_Key] = $l_str_Value; + } + // return settings loaded from Container + return $l_arr_Options; + } - /** - * Updates a whole Settings container. - * - * @author Stefan Herndler - * @since 1.5.0 - * @param int $p_int_Index Index of the Settings container. - * @param array $p_arr_newValues new Settings. - * @return bool - */ - public function saveOptions($p_int_Index, $p_arr_newValues) { - if (update_option($this->getContainer($p_int_Index), $p_arr_newValues)) { - $this->loadAll(); - return true; - } - return false; - } + /** + * Updates a whole Settings container. + * + * @author Stefan Herndler + * @since 1.5.0 + * @param int $p_int_Index Index of the Settings container. + * @param array $p_arr_newValues new Settings. + * @return bool + */ + public function saveOptions($p_int_Index, $p_arr_newValues) { + if (update_option($this->getContainer($p_int_Index), $p_arr_newValues)) { + $this->loadAll(); + return true; + } + return false; + } - /** - * Returns the value of specified Settings name. - * - * @author Stefan Herndler - * @since 1.5.0 - * @param string $p_str_Key Settings Array Key name. - * @return mixed Value of the Setting on Success or Null in Settings name is invalid. - */ - public function get($p_str_Key) { - return array_key_exists($p_str_Key, $this->a_arr_Settings) ? $this->a_arr_Settings[$p_str_Key] : null; - } + /** + * Returns the value of specified Settings name. + * + * @author Stefan Herndler + * @since 1.5.0 + * @param string $p_str_Key Settings Array Key name. + * @return mixed Value of the Setting on Success or Null in Settings name is invalid. + */ + public function get($p_str_Key) { + return array_key_exists($p_str_Key, $this->a_arr_Settings) ? $this->a_arr_Settings[$p_str_Key] : null; + } - /** - * Deletes each Settings Container and loads the default values for each Settings Container. - * - * @author Stefan Herndler - * @since 1.5.0 - */ - public function ClearAll() { - // iterate through each Settings Container - for ($i = 0; $i < count($this->a_arr_Container); $i++) { - // delete the settings container - delete_option($this->getContainer($i)); - } - // set settings back to the default values - $this->a_arr_Settings = $this->a_arr_Default; - } + /** + * Deletes each Settings Container and loads the default values for each Settings Container. + * + * @author Stefan Herndler + * @since 1.5.0 + */ + public function ClearAll() { + // iterate through each Settings Container + for ($i = 0; $i < count($this->a_arr_Container); $i++) { + // delete the settings container + delete_option($this->getContainer($i)); + } + // set settings back to the default values + $this->a_arr_Settings = $this->a_arr_Default; + } - /** - * Register all Settings Container for the Plugin Settings Page in the Dashboard. - * Settings Container Label will be the same as the Settings Container Name. - * - * @author Stefan Herndler - * @since 1.5.0 - */ - public function RegisterSettings() { - // register all settings - for ($i = 0; $i < count($this->a_arr_Container); $i++) { - register_setting($this->getContainer($i), $this->getContainer($i)); - } - } + /** + * Register all Settings Container for the Plugin Settings Page in the Dashboard. + * Settings Container Label will be the same as the Settings Container Name. + * + * @author Stefan Herndler + * @since 1.5.0 + */ + public function RegisterSettings() { + // register all settings + for ($i = 0; $i < count($this->a_arr_Container); $i++) { + register_setting($this->getContainer($i), $this->getContainer($i)); + } + } } diff --git a/class/task.php b/class/task.php index 4629814..990fcf4 100644 --- a/class/task.php +++ b/class/task.php @@ -7,7 +7,11 @@ * @since 1.5.0 * * Edited for v2.0.0 and following. - * Last modified 2020-11-01T0342+0100 + * + * Edited for v2.0.5: Autoload / infinite scroll support added thanks to code from + * @docteurfitness + * + * Last modified 2020-11-05T0232+0100 */ // If called directly, abort: @@ -53,6 +57,18 @@ class MCI_Footnotes_Task { * * @author Stefan Herndler * @since 1.5.0 + * + * Edited for v2.0.5 2020-11-02T0330+0100 2020-11-04T2006+0100 + * + * Explicitly setting all priority to (default) "10" instead of lowest "PHP_INT_MAX", + * especially for the_content, makes the footnotes reference container display + * beneath the content and above other features added by other plugins. + * Requested by users: + * Documentation: + * + * But then, the blog engine calls this plugin in the editor, as reported in: + * + * */ public function registerHooks() { // append custom css to the header @@ -309,8 +325,9 @@ class MCI_Footnotes_Task { * @return string */ public function search($p_str_Content, $p_bool_ConvertHtmlChars, $p_bool_HideFootnotesText) { - // prepare prepending post ID to make footnote IDs unique wrt archive view: - self::$a_str_Prefix = get_the_id() . '_'; + // post ID to make everything unique wrt archive view and infinite scroll + global $l_int_PostID; + $l_int_PostID = get_the_id(); // contains the index for the next footnote on this page $l_int_FootnoteIndex = count(self::$a_arr_Footnotes) + 1; // contains the starting position for the lookup of a footnote @@ -376,29 +393,35 @@ class MCI_Footnotes_Task { if (is_int($l_int_MaxLength) && strlen($l_str_DummyText) > $l_int_MaxLength) { $l_str_ExcerptText = substr($l_str_DummyText, 0, $l_int_MaxLength); $l_str_ExcerptText = substr($l_str_ExcerptText, 0, strrpos($l_str_ExcerptText, ' ')); - $l_str_ExcerptText .= ' … ' . sprintf(__("%scontinue%s", MCI_Footnotes_Config::C_STR_PLUGIN_NAME), '', ''); + // Removed hyperlink navigation on user request, but left element for style. + $l_str_ExcerptText .= ' … ' . sprintf(__("%scontinue%s", MCI_Footnotes_Config::C_STR_PLUGIN_NAME), '', ''); } } - // fill the footnotes template + // fill the footnotes template templates/public/footnote.html $l_obj_Template->replace( array( - "id" => self::$a_str_Prefix . $l_str_Index, - "index" => $l_str_Index, - "text" => MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED)) ? $l_str_ExcerptText : "", - "before" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_STYLING_BEFORE), - "after" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_STYLING_AFTER) + "post_id" => $l_int_PostID, + "id" => $l_str_Index, + "before" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_STYLING_BEFORE), + "index" => $l_str_Index, + "after" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_STYLING_AFTER), + "text" => MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED)) ? $l_str_ExcerptText : "", ) ); $l_str_FootnoteReplaceText = $l_obj_Template->getContent(); + // reset the template $l_obj_Template->reload(); if (MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED))) { $l_int_OffsetY = intval(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y)); $l_int_OffsetX = intval(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X)); + + // fill in the tooltip template templates/public/tooltip.html $l_obj_TemplateTooltip->replace( array( - "id" => self::$a_str_Prefix . $l_str_Index, + "post_id" => $l_int_PostID, + "id" => $l_str_Index, "position" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION), "offset-y" => !empty($l_int_OffsetY) ? $l_int_OffsetY : 0, "offset-x" => !empty($l_int_OffsetX) ? $l_int_OffsetX : 0 @@ -479,13 +502,14 @@ class MCI_Footnotes_Task { } } } - // replace all placeholders in the template + // replace all placeholders in the template templates/public/reference-container-body.html $l_obj_Template->replace( array( - "index" => $l_str_FootnoteIndex, - "id" => self::$a_str_Prefix . MCI_Footnotes_Convert::Index($l_str_FirstFootnoteIndex, MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_COUNTER_STYLE)), - "arrow" => $l_str_Arrow, - "text" => $l_str_FootnoteText + "post_id" => $l_int_PostID, + "id" => MCI_Footnotes_Convert::Index($l_str_FirstFootnoteIndex, MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_COUNTER_STYLE)), + "arrow" => $l_str_Arrow, + "index" => $l_str_FootnoteIndex, + "text" => $l_str_FootnoteText ) ); // extra line breaks for page source legibility: @@ -495,15 +519,15 @@ class MCI_Footnotes_Task { $l_obj_Template->reload(); } - // load template file + // load template file templates/public/reference-container.html $l_obj_TemplateContainer = new MCI_Footnotes_Template(MCI_Footnotes_Template::C_STR_PUBLIC, "reference-container"); $l_obj_TemplateContainer->replace( array( - "label" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_REFERENCE_CONTAINER_NAME), + "post_id" => $l_int_PostID, + "label" => MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_REFERENCE_CONTAINER_NAME), "button-style" => !MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_REFERENCE_CONTAINER_COLLAPSE)) ? 'display: none;' : '', - "id" => "footnote_references_container", - "style" => MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_REFERENCE_CONTAINER_COLLAPSE)) ? 'display: none;' : '', - "content" => $l_str_Body + "style" => MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_REFERENCE_CONTAINER_COLLAPSE)) ? 'display: none;' : '', + "content" => $l_str_Body ) ); diff --git a/css/public.css b/css/public.css index 427f06d..64c0ff8 100755 --- a/css/public.css +++ b/css/public.css @@ -4,8 +4,9 @@ * Created-Date: 15.05.14 * Created-Time: 16:21 * Since: 1.0 - * Version: 2.0.4 - * Last modified: 2020-11-01T0536+0100 + * Version: 2.0.6 + * + * Last modified: 2020-11-04T2131+0100 */ @@ -37,9 +38,6 @@ */ .footnote_plugin_tooltip_text { - vertical-align: top !important; - position: relative !important; - top: 0.6em !important; cursor: pointer; z-index: 1; } @@ -63,6 +61,7 @@ span.footnote_tooltip { font-style: italic; color: green; text-decoration: none !important; + cursor: pointer; } .continue:hover { color: blue; @@ -72,11 +71,6 @@ span.footnote_tooltip { /* Footnotes reference container */ -.footnote-reference-container { - width: 100%; - border: none; -} - /* label */ .footnote_container_prepare { display: block !important; @@ -105,30 +99,41 @@ span.footnote_tooltip { } /* collapse button */ -#footnote_reference_container_collapse_button { +/* fully clickable, not sign only */ +.footnote_reference_container_collapse_button { cursor: pointer; } .footnote_container_prepare > p > span:last-child a { - text-decoration: none; + text-decoration: none !important; } .footnote_container_prepare > p > span:last-child a:hover { text-decoration: underline; color: #008800; } -/* footnotes */ +/* Table starts here */ +.footnote-reference-container { + width: 100%; + border: none; +} + +/* footnotes + * class footnote_plugin_link is for backcompat. + * Used in reference-container-body.html + * See +.footnote_plugin_link, */ .footnote_plugin_index, .footnote_plugin_text { border:none !important; - text-align: left; - vertical-align: top; - padding: 10px 3px 5px 0; + text-align: left !important; + vertical-align: top !important; + padding: 10px 5px 5px 0 !important; } .footnote_plugin_index a, .footnote_plugin_text a { - text-decoration: none; + text-decoration: none !important; } -.footnote_plugin_index a:hover, +.footnote_plugin_index:hover, .footnote_plugin_text a:hover { text-decoration: underline !important; } @@ -139,10 +144,16 @@ span.footnote_tooltip { word-wrap: normal !important; word-break: unset; word-break: keep-all !important; - white-space: nowrap; max-width: 140px; + width: 1px; /*auto-extending column to fit widest*/ + white-space: nowrap; overflow: hidden; } +.footnote_plugin_text { + width: unset; /*unset width of text column to fix site issues*/ +} + +/* Responsive*/ @media only screen and (max-width: 768px) { .footnote_plugin_index { max-width: 100px; @@ -152,28 +163,18 @@ span.footnote_tooltip { /* Footnotes printing style rules * * Printing a table, browsers tend to avoid page breaks, - * but it takes a wrapper to avoid a page break before the table + * but it takes a wrapper to avoid a page break before the table. + * + * UI elements (button, arrows) and link styling are removed. */ .footnote_container_overall_wrapper { page-break-inside: avoid; } -.footnote_container_prepare { - page-break-after: avoid; -} -table.footnote_reference_container td { - display: block; -} -table.footnote_reference_container { - page-break-before: avoid; - page-break-inside: auto; -} -table.footnote_reference_container tr { - page-break-before: auto; -} + @media print { .footnote_tooltip, - .footnote_reference_container_collapse_button_outfit, + .footnote_reference_container_collapse_button, .footnote_plugin_index_arrow { display: none; } @@ -184,7 +185,7 @@ table.footnote_reference_container tr { color: inherit; text-decoration: none !important; } - div.post-meta-edit-link-wrapper { /*hides the Edit button in WP2020*/ + div.post-meta-edit-link-wrapper { /* Edit button in WP2020*/ display: none; /*(added as a service)*/ } } diff --git a/footnotes.php b/footnotes.php index d527fa8..a3f4c54 100755 --- a/footnotes.php +++ b/footnotes.php @@ -1,29 +1,29 @@ \n" "Language: en_GB\n" @@ -348,7 +348,7 @@ msgstr "Vertical offset downwards" #: class/dashboard/subpage-main.php:335 msgid "Offset (Y axis) in px (may be negative)" -msgstr "pixels; negative value for a upwards offset" +msgstr "pixels; negative value for an upwards offset" #: class/dashboard/subpage-main.php:337 msgid "Color" diff --git a/languages/en_US.mo b/languages/en_US.mo index a1ad81a..bdadec4 100644 Binary files a/languages/en_US.mo and b/languages/en_US.mo differ diff --git a/languages/en_US.po b/languages/en_US.po index 6f745ba..8c26f64 100755 --- a/languages/en_US.po +++ b/languages/en_US.po @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: footnotes\n" "Report-Msgid-Bugs-To: http://wordpress.org/tag/footnotes\n" "POT-Creation-Date: 2014-10-18 20:59+0100\n" -"PO-Revision-Date: 2020-11-01T1641+0100\n" +"PO-Revision-Date: 2020-11-04T2153+0100\n" "Last-Translator: @pewgeuges\n" "Language-Team: SHE \n" "Language: en_US\n" @@ -348,7 +348,7 @@ msgstr "Vertical offset downwards" #: class/dashboard/subpage-main.php:335 msgid "Offset (Y axis) in px (may be negative)" -msgstr "pixels; negative value for a upwards offset" +msgstr "pixels; negative value for an upwards offset" #: class/dashboard/subpage-main.php:337 msgid "Color" diff --git a/readme.txt b/readme.txt index 321088e..7db09fc 100755 --- a/readme.txt +++ b/readme.txt @@ -80,11 +80,28 @@ Visit this swift write-up from a **footnotes** user by the name of **Southwest** == Changelog == += 2.0.5rc0 = +- Update: Autoload / infinite scroll support added thanks to @docteurfitness +- Bugfix: Settings style sheet unenqueued to fix input boxes on public pages (enqueued for 2.0.4) +- Bugfix: Public style sheet: Footnote referrers: deleted vertical align tweaks for cross-theme and user agent compatibility +- Bugfix: Public style sheet: Reference container: auto-extending column to fit widest, to fix display with short note texts +- Bugfix: Public style sheet: Reference container: IDs: slightly increased left padding +- Bugfix: Public style sheet: Reference container: unset width of text column to fix site issues +- Update: Enable all hooks by default to prevent footnotes from seeming broken in post titles +- Bugfix: Restore cursor shape pointer over 'Continue reading' button after hyperlink removal +- Update: Tooltip infobox: set display predelay to 0 for responsiveness (was 800 since 2.0.0, 400 before) +- Bugfix: Reference container: collapse button fully clickable, not sign only +- Bugfix: Reference container: collapse button 'collapse' with minus sign not hyphen-minus +- Bugfix: Translations: Spelling error in en_GB and en_US + = 2.0.4 = - Update: Restored arrow settings to customize or disable the now prepended arrow symbol +- Update: GDPR: Added jQuery UI from WordPress instead of third party +- Bugfix: UX: Removed hyperlink addresses from referrers and backlinks wrt browsing history - Bugfix: Reference container: layout: removed inconvenient left/right cellpadding - Bugfix: Tooltip infobox: improved layout with inherited font size by lower line height - Bugfix: Tooltip infobox: 'Continue reading' button: disabled default underline +- Bugfix: Translations: reviewed all locales (en, de, es, fr), synced ref line # with edited code - Bugfix: Fixed display of 2 dashboard headings = 2.0.3 = diff --git a/templates/public/footnote.html b/templates/public/footnote.html index 2e7669a..6b55a17 100755 --- a/templates/public/footnote.html +++ b/templates/public/footnote.html @@ -1,2 +1,13 @@ -[[before]][[index]][[after]] -[[text]] +[[before]][[index]][[after]] +[[text]] diff --git a/templates/public/reference-container-body.html b/templates/public/reference-container-body.html index c48be48..b47e714 100755 --- a/templates/public/reference-container-body.html +++ b/templates/public/reference-container-body.html @@ -1,4 +1,15 @@ - [[arrow]] [[index]]. - [[text]] + [[arrow]] [[index]]. + [[text]] diff --git a/templates/public/reference-container.html b/templates/public/reference-container.html index d0f21b0..d0910fd 100644 --- a/templates/public/reference-container.html +++ b/templates/public/reference-container.html @@ -1,47 +1,51 @@
-
-

[[label]]   [ + ]

-
-
- - - [[content]] - -
-
+
+

[[label]]   [ + ]

+
+
+ + + [[content]] + +
+
diff --git a/templates/public/tooltip.html b/templates/public/tooltip.html index 9a7d10d..da2e4db 100644 --- a/templates/public/tooltip.html +++ b/templates/public/tooltip.html @@ -1 +1,13 @@ - +