2021-02-23 16:44:18 +00:00
< ? php // phpcs:disable WordPress.Files.FileName.InvalidClassFileName
2021-02-23 16:00:59 +00:00
/**
* Includes the Settings class to handle all Plugin settings .
*
* @ filesource
2021-02-23 16:44:18 +00:00
* @ package footnotes
2021-02-24 23:53:22 +01:00
* @ since 1.5 . 0
* @ date 14.09 . 14 10 : 43
2021-02-23 16:00:59 +00:00
*
* @ since 2.0 . 4 restore arrow settings 2020 - 11 - 02 T2115 + 0100
* @ since 2.0 . 7 remove hook the_post 2020 - 11 - 06 T1342 + 0100
* @ since 2.1 . 0 add read - on button label customization 2020 - 11 - 08 T2149 + 0100
* @ since 2.1 . 1 fix tooltips on site by alternative 2020 - 11 - 11 T1819 + 0100
* @ since 2.1 . 1 fix disabling backlink symbol 2020 - 11 - 16 T2021 + 0100
* @ since 2.1 . 1 fix superscript by making it optional
* @ since 2.1 . 1 fix start pages by option to hide ref container , thanks to @ dragon013
* @ since 2.1 . 1 fix ref container by option restoring 3 - column layout
* @ since 2.1 . 1 fix ref container by option to switch index / symbol 2020 - 11 - 16 T2022 + 0100
*
* @ since 2.1 . 3 excerpt hook : disable by default , thanks to @ nikelaos
* @ link https :// wordpress . org / support / topic / doesnt - work - any - more - 11 / #post-13687068
*
* @ since 2.1 . 3 fix ref container positioning by priority level 2020 - 11 - 17 T0205 + 0100
*
* @ since 2.1 . 4 more settings container keys 2020 - 12 - 03 T0955 + 0100
*
* @ since 2.1 . 6 option to disable URL line wrapping 2020 - 12 - 09 T1606 + 0100
*
* @ since 2.1 . 6 set default priority level of the_content to 98 to prevent plugin conflict , thanks to @ marthalindeman 2020 - 12 - 10 T0447 + 0100
*
* @ since 2.2 . 0 reference container custom position shortcode , thanks to @ hamshe 2020 - 12 - 13 T2056 + 0100
* @ link https :// wordpress . org / support / topic / reference - container - in - elementor /
*
* @ since 2.2 . 2 Custom CSS settings container migration 2020 - 12 - 15 T0709 + 0100
*
* @ since 2.2 . 4 move backlink symbol selection under previous tab 2020 - 12 - 16 T1256 + 0100
*
* @ since 2.2 . 5 alternative tooltip position settings 2020 - 12 - 17 T0907 + 0100
*
* @ since 2.2 . 5 options for reference container label element and bottom border , thanks to @ markhillyer 2020 - 12 - 18 T1455 + 0100
* @ link https :// wordpress . org / support / topic / how - do - i - eliminate - the - horizontal - line - beneath - the - reference - container - heading /
*
* @ since 2.2 . 9 set default priority level of widget_text to 98 like for the_content ( since 2.1 . 6 ), thanks to @ marthalindeman 2020 - 12 - 25 T1646 + 0100
*
* @ since 2.2 . 10 reference container row border option , thanks to @ noobishh 2020 - 12 - 25 T2316 + 0100
* @ link https :// wordpress . org / support / topic / borders - 25 /
*
* @ since 2.3 . 0 reference container : settings for top ( and bottom ) margin , thanks to @ hamshe
* @ link https :// wordpress . org / support / topic / reference - container - in - elementor / #post-13786635
*
* @ since 2.3 . 0 Bugfix : Dashboard : Custom CSS : swap migration Boolean , meaning 'show legacy' instead of 'migration complete' , due to storage data structure constraints .
* @ date 2020 - 12 - 27 T1243 + 0100
* @ since 2.3 . 0 referrers , reference container : settings for anchor slugs 2020 - 12 - 31 T1429 + 0100
*
* @ since 2.4 . 0 footnote shortcode syntax validation 2021 - 01 - 01 T0624 + 0100
*/
/**
* Loads the settings values , sets to default values if undefined .
*
* @ since 1.5 . 0
*/
class MCI_Footnotes_Settings {
/**
* Settings Container Key for the label of the reference container .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_NAME = 'footnote_inputfield_references_label' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to collapse the reference container by default .
*
* @ since 1.5 . 0
* @ var str
* The string is converted to Boolean false if 'no' , true if 'yes' .
2021-02-23 16:44:18 +00:00
* @ see MCI_Footnotes_Convert :: to_bool ()
2021-02-23 16:00:59 +00:00
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_COLLAPSE = 'footnote_inputfield_collapse_references' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the position of the reference container .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_POSITION = 'footnote_inputfield_reference_container_place' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for combining identical footnotes .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_COMBINE_IDENTICAL_FOOTNOTES = 'footnote_inputfield_combine_identical' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the short code of the footnote’ s start .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_SHORT_CODE_START = 'footnote_inputfield_placeholder_start' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the short code of the footnote’ s end .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_SHORT_CODE_END = 'footnote_inputfield_placeholder_end' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the user - defined short code of the footnotes start .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_SHORT_CODE_START_USER_DEFINED = 'footnote_inputfield_placeholder_start_user_defined' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the user - defined short code of the footnotes end .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_SHORT_CODE_END_USER_DEFINED = 'footnote_inputfield_placeholder_end_user_defined' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the counter style of the footnotes .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_COUNTER_STYLE = 'footnote_inputfield_counter_style' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the 'I love footnotes' text .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_LOVE = 'footnote_inputfield_love' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to look for footnotes in post excerpts .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_IN_EXCERPT = 'footnote_inputfield_search_in_excerpt' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the Expert mode .
*
* @ since 1.5 . 5
* @ var str
*
* @ since 2.1 . 6 This setting removed as irrelevant since priority level settings need permanent visibility .
* @ date 2020 - 12 - 09 T2107 + 0100
*
* Since the removal of the the_post hook , the tab is no danger zone any longer .
* All users , not experts only , need to be able to control relative positioning .
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_EXPERT_MODE = 'footnote_inputfield_enable_expert_mode' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the string before the footnote referrer .
*
* @ since 1.5 . 0
* @ var str
*
2021-02-23 16:44:18 +00:00
* The default footnote referrer surroundings should be square brackets .
2021-02-23 16:00:59 +00:00
*
* - with respect to baseline footnote referrers new option ;
* - as in English or US American typesetting ;
* - for better UX thanks to a more button - like appearance ;
* - for stylistic consistency with the expand - collapse button .
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_STYLING_BEFORE = 'footnote_inputfield_custom_styling_before' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the string after the footnote referrer .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_STYLING_AFTER = 'footnote_inputfield_custom_styling_after' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the mouse - over box .
*
* @ since 1.5 . 2
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_ENABLED = 'footnote_inputfield_custom_mouse_over_box_enabled' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the alternative tooltips .
*
* - Bugfix : Tooltips : optional alternative JS implementation with CSS transitions to fix configuration - related outage , thanks to @ andreasra feedback .
*
* @ since 2.1 . 1
* @ date 2020 - 11 - 11 T1817 + 0100
*
* @ reporter @ andreasra
* @ link https :// wordpress . org / support / topic / footnotes - appearing - in - header / page / 2 / #post-13632566
*
* @ var str
*
* These alternative tooltips work around a website related jQuery UI
* outage . They are low - script but use the AMP incompatible onmouseover
* and onmouseout arguments , along with CSS transitions for fade - in / out .
* The very small script is inserted after Footnotes’ internal stylesheet .
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_ALTERNATIVE = 'footnote_inputfield_custom_mouse_over_box_alternative' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable tooltip truncation .
*
* @ since 1.5 . 4
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_ENABLED = 'footnote_inputfield_custom_mouse_over_box_excerpt_enabled' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the max . length of the enabled excerpt .
*
* @ since 1.5 . 4
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_LENGTH = 'footnote_inputfield_custom_mouse_over_box_excerpt_length' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the position .
*
* @ since 1.5 . 7
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION = 'footnote_inputfield_custom_mouse_over_box_position' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the offset ( x ) .
*
* @ since 1.5 . 7
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X = 'footnote_inputfield_custom_mouse_over_box_offset_x' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the offset ( y ) .
*
* @ since 1.5 . 7
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y = 'footnote_inputfield_custom_mouse_over_box_offset_y' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the color .
*
* @ since 1.5 . 6
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_COLOR = 'footnote_inputfield_custom_mouse_over_box_color' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the background color .
*
* @ since 1.5 . 6
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_BACKGROUND = 'footnote_inputfield_custom_mouse_over_box_background' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the border width .
*
* @ since 1.5 . 6
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_FOOTNOTES_MOUSE_OVER_BOX_BORDER_WIDTH = 'footnote_inputfield_custom_mouse_over_box_border_width' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the border color .
*
* @ since 1.5 . 6
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_BORDER_COLOR = 'footnote_inputfield_custom_mouse_over_box_border_color' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the border radius .
*
* @ since 1.5 . 6
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_FOOTNOTES_MOUSE_OVER_BOX_BORDER_RADIUS = 'footnote_inputfield_custom_mouse_over_box_border_radius' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the max . width .
*
* @ since 1.5 . 6
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_FOOTNOTES_MOUSE_OVER_BOX_MAX_WIDTH = 'footnote_inputfield_custom_mouse_over_box_max_width' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the mouse - over box to define the box - shadow color .
*
* @ since 1.5 . 8
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_MOUSE_OVER_BOX_SHADOW_COLOR = 'footnote_inputfield_custom_mouse_over_box_shadow_color' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the backlink symbol selection .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_HYPERLINK_ARROW = 'footnote_inputfield_custom_hyperlink_symbol' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the user - defined backlink symbol .
*
* @ since 1.5 . 0
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_HYPERLINK_ARROW_USER_DEFINED = 'footnote_inputfield_custom_hyperlink_symbol_user' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the Custom CSS .
*
* @ since 1.5 . 0
* @ var str
*
* @ since 1.3 . 0 Adding : new settings tab for custom CSS settings .
*/
2021-02-23 16:44:18 +00:00
const C_STR_CUSTOM_CSS = 'footnote_inputfield_custom_css' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the Custom CSS migrated to a dedicated tab .
*
* @ since 2.2 . 2 Bugfix : Dashboard : Custom CSS : unearth text area and migrate to dedicated tab as designed .
* @ date 2020 - 12 - 15 T0520 + 0100
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_CUSTOM_CSS_NEW = 'footnote_inputfield_custom_css_new' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable display of legacy Custom CSS metaboxes .
*
* @ since 2.2 . 2
* @ date 2020 - 12 - 15 T0520 + 0100
* @ var str
*
* @ since 2.3 . 0 swap Boolean from 'migration complete' to 'show legacy'
* @ date 2020 - 12 - 27 T1233 + 0100
*
* The Boolean must be false if its setting is contained in the container to be hidden ,
2021-02-23 16:44:18 +00:00
* because when saving , all missing constants are emptied , and to_bool () converts empty to false .
2021-02-23 16:00:59 +00:00
*/
2021-02-23 16:44:18 +00:00
const C_STR_CUSTOM_CSS_LEGACY_ENABLE = 'footnote_inputfield_custom_css_legacy_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the 'the_title' hook .
*
* @ since 1.5 . 5
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_EXPERT_LOOKUP_THE_TITLE = 'footnote_inputfield_expert_lookup_the_title' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the 'the_content' hook .
*
* @ since 1.5 . 5
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_EXPERT_LOOKUP_THE_CONTENT = 'footnote_inputfield_expert_lookup_the_content' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the 'the_excerpt' hook .
*
* @ since 1.5 . 5
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_EXPERT_LOOKUP_THE_EXCERPT = 'footnote_inputfield_expert_lookup_the_excerpt' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the 'widget_title' hook .
*
* @ since 1.5 . 5
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_EXPERT_LOOKUP_WIDGET_TITLE = 'footnote_inputfield_expert_lookup_widget_title' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the 'widget_text' hook .
*
* @ since 1.5 . 5
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_EXPERT_LOOKUP_WIDGET_TEXT = 'footnote_inputfield_expert_lookup_widget_text' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the label of the Read - on button in truncated tooltips .
*
* - Adding : Tooltips : Read - on button : Label : configurable instead of localizable , thanks to @ rovanov example provision .
*
* @ since 2.1 . 0
* @ date 2020 - 11 - 08 T2106 + 0100
*
* @ reporter @ rovanov
* @ link https :// wordpress . org / support / topic / offset - x - axis - and - offset - y - axis - does - not - working /
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_TOOLTIP_READON_LABEL = 'footnote_inputfield_readon_label' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for the referrer element .
*
* - Bugfix : Referrers : new setting for vertical align : superscript ( default ) or baseline ( optional ), thanks to @ cwbayer bug report .
*
* @ since 2.1 . 1
* @ date 2020 - 11 - 16 T0859 + 0100
*
* @ reporter @ cwbayer
* @ link https :// wordpress . org / support / topic / footnote - number - in - text - superscript - disrupts - leading /
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_REFERRER_SUPERSCRIPT_TAGS = 'footnotes_inputfield_referrer_superscript_tags' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the display of a backlink symbol .
*
* - Bugfix : Reference container : Backlink symbol : make optional , not suggest configuring it to invisible , thanks to @ spaceling feedback .
*
* @ since 2.1 . 1
*
* @ reporter @ spaceling
* @ link https :// wordpress . org / support / topic / change - the - position - 5 / page / 2 / #post-13671138
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE = 'footnotes_inputfield_reference_container_backlink_symbol_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to not display the reference container on the homepage .
*
* - Bugfix : Reference container : fix start pages by making its display optional , thanks to @ dragon013 bug report .
*
* @ since 2.1 . 1
*
* @ reporter @ dragon013
* @ link https :// wordpress . org / support / topic / possible - to - hide - it - from - start - page /
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_START_PAGE_ENABLE = 'footnotes_inputfield_reference_container_start_page_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to enable the legacy layout of the reference container .
*
* - Bugfix : Reference container : option to restore pre - 2.0 . 0 layout with the backlink symbol in an extra column .
*
* @ since 2.1 . 1
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE = 'footnotes_inputfield_reference_container_3column_layout_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key to get the backlink symbol switch side .
*
* - Bugfix : Reference container : option to append symbol ( prepended by default ), thanks to @ spaceling code contribution .
*
* @ since 2.1 . 1
* @ date 2020 - 11 - 16 T2024 + 0100
*
* @ contributor @ spaceling
* @ link https :// wordpress . org / support / topic / change - the - position - 5 / #post-13615994
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH = 'footnotes_inputfield_reference_container_backlink_symbol_switch' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for 'the_content' hook priority level .
*
* @ since 2.1 . 1
* @ date 2020 - 11 - 16 T0859 + 0100
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_the_content_priority_level' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for '' hook priority level
*
* @ since 2.1 . 2
* @ date 2020 - 11 - 20 T0620 + 0100
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_INT_EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_the_title_priority_level' ;
const C_INT_EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_widget_title_priority_level' ;
const C_INT_EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_widget_text_priority_level' ;
const C_INT_EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_the_excerpt_priority_level' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Keys for the link element option
* Settings Container Keys for backlink typography and layout
* Settings Container Keys for tooltip font size
* Settings Container Keys for page layout support
* Settings Container Keys for scroll offset and duration
* Settings Container Keys for tooltip display durations
*
* @ since 2.1 . 4
* @ var str | bool | int | flo
*
* 2020 - 11 - 26 T1002 + 0100
* 2020 - 11 - 30 T0427 + 0100
* 2020 - 12 - 03 T0501 + 0100
* 2020 - 12 - 05 T0425 + 0100
*/
2021-02-23 16:44:18 +00:00
// Link element option.
const C_STR_LINK_ELEMENT_ENABLED = 'footnote_inputfield_link_element_enabled' ;
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Backlink typography.
const C_STR_BACKLINKS_SEPARATOR_ENABLED = 'footnotes_inputfield_backlinks_separator_enabled' ;
2021-02-23 17:59:52 +00:00
const C_STR_BACKLINKS_SEPARATOR_OPTION = 'footnotes_inputfield_backlinks_separator_option' ;
const C_STR_BACKLINKS_SEPARATOR_CUSTOM = 'footnotes_inputfield_backlinks_separator_custom' ;
2021-02-23 16:44:18 +00:00
const C_STR_BACKLINKS_TERMINATOR_ENABLED = 'footnotes_inputfield_backlinks_terminator_enabled' ;
2021-02-23 17:59:52 +00:00
const C_STR_BACKLINKS_TERMINATOR_OPTION = 'footnotes_inputfield_backlinks_terminator_option' ;
const C_STR_BACKLINKS_TERMINATOR_CUSTOM = 'footnotes_inputfield_backlinks_terminator_custom' ;
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Backlink layout.
const C_STR_BACKLINKS_COLUMN_WIDTH_ENABLED = 'footnotes_inputfield_backlinks_column_width_enabled' ;
2021-02-23 17:59:52 +00:00
const C_INT_BACKLINKS_COLUMN_WIDTH_SCALAR = 'footnotes_inputfield_backlinks_column_width_scalar' ;
const C_STR_BACKLINKS_COLUMN_WIDTH_UNIT = 'footnotes_inputfield_backlinks_column_width_unit' ;
2021-02-23 16:44:18 +00:00
const C_STR_BACKLINKS_COLUMN_MAX_WIDTH_ENABLED = 'footnotes_inputfield_backlinks_column_max_width_enabled' ;
2021-02-23 17:59:52 +00:00
const C_INT_BACKLINKS_COLUMN_MAX_WIDTH_SCALAR = 'footnotes_inputfield_backlinks_column_max_width_scalar' ;
const C_STR_BACKLINKS_COLUMN_MAX_WIDTH_UNIT = 'footnotes_inputfield_backlinks_column_max_width_unit' ;
2021-02-23 16:44:18 +00:00
const C_STR_BACKLINKS_LINE_BREAKS_ENABLED = 'footnotes_inputfield_backlinks_line_breaks_enabled' ;
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Tooltip font size.
// Called mouse over box not tooltip for consistency.
const C_STR_MOUSE_OVER_BOX_FONT_SIZE_ENABLED = 'footnotes_inputfield_mouse_over_box_font_size_enabled' ;
2021-02-23 17:59:52 +00:00
const C_FLO_MOUSE_OVER_BOX_FONT_SIZE_SCALAR = 'footnotes_inputfield_mouse_over_box_font_size_scalar' ;
const C_STR_MOUSE_OVER_BOX_FONT_SIZE_UNIT = 'footnotes_inputfield_mouse_over_box_font_size_unit' ;
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Page layout support.
const C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT = 'footnotes_inputfield_page_layout_support' ;
2021-02-23 16:00:59 +00:00
/**
* Scroll offset and duration
*
* - Bugfix : Scroll offset : make configurable to fix site - dependent issues related to fixed headers .
* - Bugfix : Scroll duration : make configurable to conform to website content and style requirements .
*
* @ since 2.1 . 4
* @ date 2020 - 12 - 05 T0538 + 0100
*/
2021-02-23 16:44:18 +00:00
// Scroll offset and duration.
const C_INT_FOOTNOTES_SCROLL_OFFSET = 'footnotes_inputfield_scroll_offset' ;
const C_INT_FOOTNOTES_SCROLL_DURATION = 'footnotes_inputfield_scroll_duration' ;
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Tooltip display durations.
// Called mouse over box not tooltip for consistency.
const C_INT_MOUSE_OVER_BOX_FADE_IN_DELAY = 'footnotes_inputfield_mouse_over_box_fade_in_delay' ;
const C_INT_MOUSE_OVER_BOX_FADE_IN_DURATION = 'footnotes_inputfield_mouse_over_box_fade_in_duration' ;
const C_INT_MOUSE_OVER_BOX_FADE_OUT_DELAY = 'footnotes_inputfield_mouse_over_box_fade_out_delay' ;
const C_INT_MOUSE_OVER_BOX_FADE_OUT_DURATION = 'footnotes_inputfield_mouse_over_box_fade_out_duration' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for URL wrap option
*
* This is made optional because it causes weird line breaks .
* Unicode - compliant browsers break URLs at slashes .
*
* @ since 2.1 . 6
* @ var str
*
* 2020 - 12 - 09 T1554 + 0100. . 2020 - 12 - 13 T1313 + 0100
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTE_URL_WRAP_ENABLED = 'footnote_inputfield_url_wrap_enabled' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for reference container position shortcode
*
* @ since 2.2 . 0
* @ var str
*
* 2020 - 12 - 13 T2056 + 0100
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_POSITION_SHORTCODE = 'footnote_inputfield_reference_container_position_shortcode' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Keys for alternative tooltip position
* Settings Container Keys for reference container label element , thanks to @ markhillyer
2021-02-23 16:44:18 +00:00
*
2021-02-23 16:00:59 +00:00
* @ link https :// wordpress . org / support / topic / how - do - i - eliminate - the - horizontal - line - beneath - the - reference - container - heading /
*
* @ since 2.2 . 5
* @ var int
*
* 2020 - 12 - 17 T0746 + 0100
* 2020 - 12 - 18 T1509 + 0100
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_POSITION = 'footnotes_inputfield_alternative_mouse_over_box_position' ;
const C_INT_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_OFFSET_X = 'footnotes_inputfield_alternative_mouse_over_box_offset_x' ;
const C_INT_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_OFFSET_Y = 'footnotes_inputfield_alternative_mouse_over_box_offset_y' ;
const C_INT_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_WIDTH = 'footnotes_inputfield_alternative_mouse_over_box_width' ;
2021-02-23 16:00:59 +00:00
2021-02-23 17:59:52 +00:00
const C_STR_REFERENCE_CONTAINER_LABEL_ELEMENT = 'footnotes_inputfield_reference_container_label_element' ;
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER = 'footnotes_inputfield_reference_container_label_bottom_border' ;
2021-02-23 16:00:59 +00:00
/**
* Settings Container Key for table cell borders , thanks to @ noobishh
2021-02-23 16:44:18 +00:00
*
2021-02-23 16:00:59 +00:00
* @ link https :// wordpress . org / support / topic / borders - 25 /
*
* @ since 2.2 . 10
* @ var str
*
* 2020 - 12 - 25 T2311 + 0100
*/
2021-02-23 16:44:18 +00:00
const C_STR_REFERENCE_CONTAINER_ROW_BORDERS_ENABLE = 'footnotes_inputfield_reference_container_row_borders_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container keys for reference container top and bottom margins
* Settings container keys for hard link enabling
* Settings container keys for hard link anchors in referrers and footnotes
*
* @ since 2.3 . 0
* @ var int | bool | str
*
* 2020 - 12 - 29 T0914 + 0100
*/
2021-02-23 16:44:18 +00:00
const C_INT_REFERENCE_CONTAINER_TOP_MARGIN = 'footnotes_inputfield_reference_container_top_margin' ;
const C_INT_REFERENCE_CONTAINER_BOTTOM_MARGIN = 'footnotes_inputfield_reference_container_bottom_margin' ;
2021-02-23 17:59:52 +00:00
const C_STR_FOOTNOTES_HARD_LINKS_ENABLE = 'footnotes_inputfield_hard_links_enable' ;
2021-02-23 16:44:18 +00:00
const C_STR_REFERRER_FRAGMENT_ID_SLUG = 'footnotes_inputfield_referrer_fragment_id_slug' ;
const C_STR_FOOTNOTE_FRAGMENT_ID_SLUG = 'footnotes_inputfield_footnote_fragment_id_slug' ;
const C_STR_HARD_LINK_IDS_SEPARATOR = 'footnotes_inputfield_hard_link_ids_separator' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key for shortcode syntax validation .
*
* @ since 2.4 . 0
* @ date 2021 - 01 - 01 T0616 + 0100
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTE_SHORTCODE_SYNTAX_VALIDATION_ENABLE = 'footnotes_inputfield_shortcode_syntax_validation_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to enable backlink tooltips .
*
* - Update : Reference container : Hard backlinks ( optional ) : optional configurable tooltip hinting to use the backbutton instead , thanks to @ theroninjedi47 bug report .
*
* @ since 2.5 . 4
*
* @ reporter @ theroninjedi47
* @ link https :// wordpress . org / support / topic / hyperlinked - footnotes - creating - excessive - back - history /
*
* When hard links are enabled , clicks on the backlinks are logged in the browsing history ,
* along with clicks on the referrers .
* This tooltip hints to use the backbutton instead , so the history gets streamlined again .
* @ link https :// wordpress . org / support / topic / making - it - amp - compatible / #post-13837359
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_BACKLINK_TOOLTIP_ENABLE = 'footnotes_inputfield_backlink_tooltip_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to configure the backlink tooltip .
*
* - Update : Reference container : Hard backlinks ( optional ) : optional configurable tooltip hinting to use the backbutton instead , thanks to @ theroninjedi47 bug report .
*
* @ since 2.5 . 4
*
* @ reporter @ theroninjedi47
* @ link https :// wordpress . org / support / topic / hyperlinked - footnotes - creating - excessive - back - history /
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_BACKLINK_TOOLTIP_TEXT = 'footnotes_inputfield_backlink_tooltip_text' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to configure the tooltip excerpt delimiter .
*
* - Update : Tooltips : ability to display dedicated content before `[[/tooltip]]` , thanks to @ jbj2199 issue report .
*
* The first implementation used a fixed shortcode provided in the changelog .
* But Footnotes’ UI design policy is to make shortcodes freely configurable .
2021-02-23 16:44:18 +00:00
*
2021-02-23 16:00:59 +00:00
* @ since 2.5 . 4
*
* @ reporter @ jbj2199
* @ link https :// wordpress . org / support / topic / change - tooltip - text /
*
* Tooltips can display another content than the footnote entry
* in the reference container . The trigger is a shortcode in
* the footnote text separating the tooltip text from the note .
* That is consistent with what WordPress does for excerpts .
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_TOOLTIP_EXCERPT_DELIMITER = 'footnotes_inputfield_tooltip_excerpt_delimiter' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to enable mirroring the tooltip excerpt in the reference container .
*
* @ since 2.5 . 4
* @ var str
*
* Tooltips , even jQuery - driven , may be hard to consult on mobiles .
* This option allows to read the tooltip content in the reference container too .
* @ link https :// wordpress . org / support / topic / change - tooltip - text / #post-13935050
* But this must not be the default behavior .
* @ link https :// wordpress . org / support / topic / change - tooltip - text / #post-13935488
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_TOOLTIP_EXCERPT_MIRROR_ENABLE = 'footnotes_inputfield_tooltip_excerpt_mirror_enable' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to configure the tooltip excerpt separator in the reference container .
*
* @ since 2.5 . 4
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_TOOLTIP_EXCERPT_MIRROR_SEPARATOR = 'footnotes_inputfield_tooltip_excerpt_mirror_separator' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to enable superscript style normalization .
*
* - Bugfix : Referrers : optional fixes to vertical alignment , font size and position ( static ) for in - theme consistency and cross - theme stability , thanks to @ tomturowski bug report .
*
* @ since 2.5 . 4
*
* @ reporter @ tomturowski
* @ link https :// wordpress . org / support / topic / in - line - superscript - ref - rides - to - high /
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTE_REFERRERS_NORMAL_SUPERSCRIPT = 'footnotes_inputfield_referrers_normal_superscript' ;
2021-02-23 16:00:59 +00:00
/**
* Settings container key to select the script mode for the reference container .
*
* - Bugfix : Reference container : optional alternative expanding and collapsing without jQuery for use with hard links , thanks to @ hopper87it @ pkverma99 issue reports .
*
* @ since 2.5 . 6
*
* @ reporter @ hopper87it
* @ link https :// wordpress . org / support / topic / footnotes - wp - rocket /
*
* @ var str
*/
2021-02-23 16:44:18 +00:00
const C_STR_FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE = 'footnotes_inputfield_reference_container_script_mode' ;
2021-02-23 16:00:59 +00:00
/**
* SETTINGS STORAGE
*/
/**
* Stores a singleton reference of this class .
*
* @ since 1.5 . 0
* @ var MCI_Footnotes_Settings
*/
2021-02-23 16:44:18 +00:00
private static $a_obj_instance = null ;
2021-02-23 16:00:59 +00:00
/**
* Contains all Settings Container names .
*
* @ since 1.5 . 0
* @ var array
*
2021-02-23 16:44:18 +00:00
* Edited .
2021-02-23 16:00:59 +00:00
* 2.2 . 2 added tab for Custom CSS 2020 - 12 - 15 T0740 + 0100
*
* These are the storage container names , one per dashboard tab .
*/
2021-02-23 16:44:18 +00:00
private $a_arr_container = array (
'footnotes_storage' ,
'footnotes_storage_custom' ,
'footnotes_storage_expert' ,
'footnotes_storage_custom_css' ,
2021-02-23 16:00:59 +00:00
);
/**
* Contains all Default Settings for each Settings Container .
*
* @ since 1.5 . 0
* @ var array
*
* Edited multiple times .
*
* @ since 2.1 . 3 excerpt hook : disable by default , thanks to @ nikelaos
* @ link https :// wordpress . org / support / topic / doesnt - work - any - more - 11 / #post-13687068
*/
2021-02-23 16:44:18 +00:00
private $a_arr_default = array (
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
'footnotes_storage' => array (
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
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 => '' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTE_SHORTCODE_SYNTAX_VALIDATION_ENABLE => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_COUNTER_STYLE => 'arabic_plain' ,
2021-02-23 17:59:52 +00:00
self :: C_STR_COMBINE_IDENTICAL_FOOTNOTES => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 17:59:52 +00:00
self :: C_STR_FOOTNOTES_HARD_LINKS_ENABLE => 'no' ,
2021-02-23 16:44:18 +00:00
self :: C_STR_REFERRER_FRAGMENT_ID_SLUG => 'r' ,
self :: C_STR_FOOTNOTE_FRAGMENT_ID_SLUG => 'f' ,
self :: C_STR_HARD_LINK_IDS_SEPARATOR => '+' ,
self :: C_INT_FOOTNOTES_SCROLL_OFFSET => 20 ,
self :: C_INT_FOOTNOTES_SCROLL_DURATION => 380 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// 2.5.4 fast-tracked.
2021-02-23 17:59:52 +00:00
self :: C_STR_FOOTNOTES_BACKLINK_TOOLTIP_ENABLE => 'yes' ,
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_BACKLINK_TOOLTIP_TEXT => 'Alt+ ←' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_REFERENCE_CONTAINER_NAME => 'References' ,
self :: C_STR_REFERENCE_CONTAINER_LABEL_ELEMENT => 'p' ,
self :: C_STR_REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER => 'yes' ,
2021-02-23 17:59:52 +00:00
self :: C_STR_REFERENCE_CONTAINER_COLLAPSE => 'no' ,
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE => 'jquery' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_REFERENCE_CONTAINER_POSITION => 'post_end' ,
self :: C_STR_REFERENCE_CONTAINER_POSITION_SHORTCODE => '[[references]]' ,
self :: C_STR_REFERENCE_CONTAINER_START_PAGE_ENABLE => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Whether to enqueue additional stylesheet.
self :: C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT => 'none' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Top and bottom margins.
self :: C_INT_REFERENCE_CONTAINER_TOP_MARGIN => 24 ,
self :: C_INT_REFERENCE_CONTAINER_BOTTOM_MARGIN => 0 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Table cell borders.
self :: C_STR_REFERENCE_CONTAINER_ROW_BORDERS_ENABLE => 'no' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Backlink symbol.
self :: C_STR_REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE => 'no' ,
self :: C_STR_REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE => 'yes' ,
self :: C_STR_REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH => 'no' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Backlink separators and terminators are often not preferred..
// But a choice must be provided along with the ability to customize.
2021-02-23 17:59:52 +00:00
self :: C_STR_BACKLINKS_SEPARATOR_ENABLED => 'yes' ,
2021-02-23 16:44:18 +00:00
self :: C_STR_BACKLINKS_SEPARATOR_OPTION => 'comma' ,
self :: C_STR_BACKLINKS_SEPARATOR_CUSTOM => '' ,
2021-02-23 17:59:52 +00:00
self :: C_STR_BACKLINKS_TERMINATOR_ENABLED => 'no' ,
2021-02-23 16:44:18 +00:00
self :: C_STR_BACKLINKS_TERMINATOR_OPTION => 'full_stop' ,
self :: C_STR_BACKLINKS_TERMINATOR_CUSTOM => '' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Set backlinks column width.
2021-02-23 17:59:52 +00:00
self :: C_STR_BACKLINKS_COLUMN_WIDTH_ENABLED => 'no' ,
2021-02-23 16:44:18 +00:00
self :: C_INT_BACKLINKS_COLUMN_WIDTH_SCALAR => '50' ,
self :: C_STR_BACKLINKS_COLUMN_WIDTH_UNIT => 'px' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Set backlinks column max. width.
self :: C_STR_BACKLINKS_COLUMN_MAX_WIDTH_ENABLED => 'no' ,
self :: C_INT_BACKLINKS_COLUMN_MAX_WIDTH_SCALAR => '140' ,
self :: C_STR_BACKLINKS_COLUMN_MAX_WIDTH_UNIT => 'px' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Whether a <br /> tag is inserted.
2021-02-23 17:59:52 +00:00
self :: C_STR_BACKLINKS_LINE_BREAKS_ENABLED => 'no' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Whether to enable URL line wrapping.
2021-02-23 17:59:52 +00:00
self :: C_STR_FOOTNOTE_URL_WRAP_ENABLED => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Whether to use link elements.
2021-02-23 17:59:52 +00:00
self :: C_STR_LINK_ELEMENT_ENABLED => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Excerpt should be disabled.
2021-02-23 17:59:52 +00:00
self :: C_STR_FOOTNOTES_IN_EXCERPT => 'no' ,
2021-02-23 16:00:59 +00:00
2021-02-23 17:59:52 +00:00
self :: C_STR_FOOTNOTES_EXPERT_MODE => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_LOVE => 'no' ,
2021-02-23 16:00:59 +00:00
),
2021-02-23 16:44:18 +00:00
'footnotes_storage_custom' => array (
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_HYPERLINK_ARROW => '↑' ,
self :: C_STR_HYPERLINK_ARROW_USER_DEFINED => '' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_TOOLTIP_READON_LABEL => 'Continue reading' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_REFERRER_SUPERSCRIPT_TAGS => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_STYLING_BEFORE => '[' ,
self :: C_STR_FOOTNOTES_STYLING_AFTER => ']' ,
2021-02-23 16:00:59 +00:00
2021-02-23 17:59:52 +00:00
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_ENABLED => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_ALTERNATIVE => 'no' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// The mouse over content truncation should be enabled by default.
// To raise awareness of the functionality and to prevent the screen.
// From being filled at mouse-over, and to allow the Continue reading.
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_ENABLED => 'yes' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// The truncation length is raised from 150 to 200 chars.
self :: C_INT_FOOTNOTES_MOUSE_OVER_BOX_EXCERPT_LENGTH => 200 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// 2.5.4 fast-tracked.
self :: C_STR_FOOTNOTES_TOOLTIP_EXCERPT_DELIMITER => '[[/tooltip]]' ,
self :: C_STR_FOOTNOTES_TOOLTIP_EXCERPT_MIRROR_ENABLE => 'no' ,
self :: C_STR_FOOTNOTES_TOOLTIP_EXCERPT_MIRROR_SEPARATOR => ' — ' ,
self :: C_STR_FOOTNOTE_REFERRERS_NORMAL_SUPERSCRIPT => 'no' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// The default position should not be lateral because of the risk.
// The box gets squeezed between note anchor at line end and window edge,.
// And top because reading at the bottom of the window is more likely.
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_POSITION => 'top center' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X => 0 ,
// The vertical offset must be negative for the box not to cover.
// The current line of text (web coordinates origin is top left).
self :: C_INT_FOOTNOTES_MOUSE_OVER_BOX_OFFSET_Y => - 7 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// The width should be limited to start with, for the box to have shape.
self :: C_INT_FOOTNOTES_MOUSE_OVER_BOX_MAX_WIDTH => 450 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Fixed width is for alternative tooltips, cannot reuse max-width nor offsets.
2021-02-23 16:00:59 +00:00
self :: C_STR_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_POSITION => 'top right' ,
self :: C_INT_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_OFFSET_X => - 50 ,
2021-02-23 16:44:18 +00:00
self :: C_INT_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_OFFSET_Y => 24 ,
self :: C_INT_FOOTNOTES_ALTERNATIVE_MOUSE_OVER_BOX_WIDTH => 400 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Tooltip display durations.
// Called mouse over box not tooltip for consistency.
self :: C_INT_MOUSE_OVER_BOX_FADE_IN_DELAY => 0 ,
self :: C_INT_MOUSE_OVER_BOX_FADE_IN_DURATION => 200 ,
self :: C_INT_MOUSE_OVER_BOX_FADE_OUT_DELAY => 400 ,
self :: C_INT_MOUSE_OVER_BOX_FADE_OUT_DURATION => 200 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Tooltip font size reset to legacy by default since 2.1.4;.
// Was set to inherit since 2.1.1 as it overrode custom CSS,.
// Is moved to settings since 2.1.4 2020-12-04T1023+0100.
2021-02-23 17:59:52 +00:00
self :: C_STR_MOUSE_OVER_BOX_FONT_SIZE_ENABLED => 'yes' ,
2021-02-23 16:44:18 +00:00
self :: C_FLO_MOUSE_OVER_BOX_FONT_SIZE_SCALAR => 13 ,
self :: C_STR_MOUSE_OVER_BOX_FONT_SIZE_UNIT => 'px' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_COLOR => '' ,
// The mouse over box shouldn’ t feature a colored background.
// By default, due to diverging user preferences. White is neutral.
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_BACKGROUND => '#ffffff' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_INT_FOOTNOTES_MOUSE_OVER_BOX_BORDER_WIDTH => 1 ,
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_BORDER_COLOR => '#cccc99' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// The mouse over box corners mustn’ t be rounded as that is outdated.
self :: C_INT_FOOTNOTES_MOUSE_OVER_BOX_BORDER_RADIUS => 0 ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_FOOTNOTES_MOUSE_OVER_BOX_SHADOW_COLOR => '#666666' ,
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// Custom CSS migrates to a dedicated tab.
self :: C_STR_CUSTOM_CSS => '' ,
2021-02-23 16:00:59 +00:00
),
2021-02-23 16:44:18 +00:00
'footnotes_storage_expert' => array (
// These are checkboxes; keyword 'checked' is converted to Boolean true,.
// Empty string to false (default).
// Titles should all be enabled by default to prevent users from.
// Thinking at first that the feature is broken in post titles..
// See <https://wordpress.org/support/topic/more-feature-ideas/>.
// Yet in titles, footnotes are still buggy, because WordPress.
// Uses the title string in menus and in the title element..
self :: C_STR_EXPERT_LOOKUP_THE_TITLE => '' ,
self :: C_STR_EXPERT_LOOKUP_THE_CONTENT => 'checked' ,
// And the_excerpt is disabled by default following @nikelaos in.
// <https://wordpress.org/support/topic/jquery-comes-up-in-feed-content/#post-13110879>.
// <https://wordpress.org/support/topic/doesnt-work-any-more-11/#post-13687068>.
self :: C_STR_EXPERT_LOOKUP_THE_EXCERPT => '' ,
self :: C_STR_EXPERT_LOOKUP_WIDGET_TITLE => '' ,
// The widget_text hook must be disabled by default, because it causes.
// Multiple reference containers to appear in Elementor accordions, but.
// It must be enabled if multiple reference containers are desired, as.
// In Elementor toggles..
self :: C_STR_EXPERT_LOOKUP_WIDGET_TEXT => '' ,
// Initially hard-coded default.
// Shows "9223372036854780000" instead of 9223372036854775807 in the numbox.
// Empty should be interpreted as PHP_INT_MAX, but a numbox cannot be set to empty.
// <https://github.com/Modernizr/Modernizr/issues/171>.
// Interpret -1 as PHP_INT_MAX instead.
self :: C_INT_EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL => PHP_INT_MAX ,
// Priority level of the_content and of widget_text as the only relevant.
// Hooks must be less than 99 because social buttons may yield scripts.
// That contain the strings '((' and '))', i.e. the default footnote.
// Start and end short codes, causing issues with fake footnotes..
self :: C_INT_EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL => 98 ,
self :: C_INT_EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL => PHP_INT_MAX ,
self :: C_INT_EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL => PHP_INT_MAX ,
self :: C_INT_EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL => 98 ,
2021-02-23 16:00:59 +00:00
),
2021-02-23 16:44:18 +00:00
'footnotes_storage_custom_css' => array (
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
self :: C_STR_CUSTOM_CSS_LEGACY_ENABLE => 'yes' ,
2021-02-23 17:59:52 +00:00
self :: C_STR_CUSTOM_CSS_NEW => '' ,
2021-02-23 16:00:59 +00:00
),
);
/**
* Contains all Settings from each Settings container as soon as this class is initialized .
*
* @ since 1.5 . 0
* @ var array
*/
2021-02-23 16:44:18 +00:00
private $a_arr_settings = array ();
2021-02-23 16:00:59 +00:00
/**
* Class Constructor . Loads all Settings from each WordPress Settings container .
*
* @ since 1.5 . 0
*/
private function __construct () {
2021-02-23 16:44:18 +00:00
$this -> load_all ();
2021-02-23 16:00:59 +00:00
}
/**
* Returns a singleton of this class .
*
* @ since 1.5 . 0
* @ return MCI_Footnotes_Settings
*/
public static function instance () {
2021-02-23 16:44:18 +00:00
// No instance defined yet, load it.
if ( ! self :: $a_obj_instance ) {
self :: $a_obj_instance = new self ();
2021-02-23 16:00:59 +00:00
}
2021-02-23 16:44:18 +00:00
// Return a singleton of this class.
return self :: $a_obj_instance ;
2021-02-23 16:00:59 +00:00
}
/**
* Returns the name of a specified Settings Container .
*
* @ since 1.5 . 0
2021-02-23 16:44:18 +00:00
* @ param int $p_int_index Settings Container Array Key Index .
2021-02-23 16:00:59 +00:00
* @ return str Settings Container name .
*/
2021-02-23 16:44:18 +00:00
public function get_container ( $p_int_index ) {
return $this -> a_arr_container [ $p_int_index ];
2021-02-23 16:00:59 +00:00
}
/**
* Returns the default values of a specific Settings Container .
*
* @ since 1.5 . 6
2021-02-23 16:44:18 +00:00
* @ param int $p_int_index Settings Container Aray Key Index .
2021-02-23 16:00:59 +00:00
* @ return array
*/
2021-02-23 16:44:18 +00:00
public function get_defaults ( $p_int_index ) {
return $this -> a_arr_default [ $this -> a_arr_container [ $p_int_index ] ];
2021-02-23 16:00:59 +00:00
}
/**
* Loads all Settings from each Settings container .
*
* @ since 1.5 . 0
*/
2021-02-23 16:44:18 +00:00
private function load_all () {
// Clear current settings.
$this -> a_arr_settings = array ();
$num_settings = count ( $this -> a_arr_container );
for ( $i = 0 ; $i < $num_settings ; $i ++ ) {
// Load settings.
$this -> a_arr_settings = array_merge ( $this -> a_arr_settings , $this -> load ( $i ) );
2021-02-23 16:00:59 +00:00
}
}
/**
* Loads all Settings from specified Settings Container .
*
* @ since 1.5 . 0
2021-02-23 16:44:18 +00:00
* @ param int $p_int_index Settings Container Array Key Index .
2021-02-23 16:00:59 +00:00
* @ return array Settings loaded from Container of Default Settings if Settings Container is empty ( first usage ) .
*
* @ since ditched trimming whitespace from text box content in response to user request .
* @ link https :// wordpress . org / support / topic / leading - space - in - footnotes - tag / #post-5347966
*/
2021-02-23 16:44:18 +00:00
private function load ( $p_int_index ) {
// Load all settings from container.
$l_arr_options = get_option ( $this -> get_container ( $p_int_index ) );
// Load all default settings.
$l_arr_default = $this -> a_arr_default [ $this -> get_container ( $p_int_index ) ];
2021-02-23 16:00:59 +00:00
2021-02-23 16:44:18 +00:00
// No settings found, set them to their default value.
if ( empty ( $l_arr_options ) ) {
return $l_arr_default ;
2021-02-23 16:00:59 +00:00
}
2021-02-23 16:44:18 +00:00
// 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 ;
2021-02-23 16:00:59 +00:00
}
}
2021-02-23 16:44:18 +00:00
// 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.
// Trimming whitespace is ditched.
// $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 ;
2021-02-23 16:00:59 +00:00
}
2021-02-23 16:44:18 +00:00
// Return settings loaded from Container.
return $l_arr_options ;
2021-02-23 16:00:59 +00:00
}
/**
* Updates a whole Settings container .
*
* @ since 1.5 . 0
2021-02-23 16:44:18 +00:00
* @ param int $p_int_index Index of the Settings container .
* @ param array $p_arr_new_values new Settings .
2021-02-23 16:00:59 +00:00
* @ return bool
*/
2021-02-23 16:44:18 +00:00
public function save_options ( $p_int_index , $p_arr_new_values ) {
if ( update_option ( $this -> get_container ( $p_int_index ), $p_arr_new_values ) ) {
$this -> load_all ();
2021-02-23 16:00:59 +00:00
return true ;
}
return false ;
}
/**
* Returns the value of specified Settings name .
*
* @ since 1.5 . 0
2021-02-23 16:44:18 +00:00
* @ param string $p_str_key Settings Array Key name .
2021-02-23 16:00:59 +00:00
* @ return mixed Value of the Setting on Success or Null in Settings name is invalid .
*/
2021-02-23 16:44:18 +00:00
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 ;
2021-02-23 16:00:59 +00:00
}
/**
* Deletes each Settings Container and loads the default values for each Settings Container .
*
* @ since 1.5 . 0
*
* Edit : This didn’ t actually work .
* @ since 2.2 . 0 this function is not called any longer when deleting the plugin ,
* to protect user data against loss , since manually updating a plugin is safer
* done by deleting and reinstalling ( see the warning about database backup ) .
* 2020 - 12 - 13 T1353 + 0100
*/
2021-02-23 16:44:18 +00:00
public function clear_all () {
// Iterate through each Settings Container.
$num_settings = count ( $this -> a_arr_container );
for ( $i = 0 ; $i < $num_settings ; $i ++ ) {
// Delete the settings container.
delete_option ( $this -> get_container ( $i ) );
2021-02-23 16:00:59 +00:00
}
2021-02-23 16:44:18 +00:00
// Set settings back to the default values.
$this -> a_arr_settings = $this -> a_arr_default ;
2021-02-23 16:00:59 +00:00
}
/**
* Register all Settings Container for the Plugin Settings Page in the Dashboard .
* Settings Container Label will be the same as the Settings Container Name .
*
* @ since 1.5 . 0
*/
2021-02-23 16:44:18 +00:00
public function register_settings () {
// Register all settings.
$num_settings = count ( $this -> a_arr_container );
for ( $i = 0 ; $i < $num_settings ; $i ++ ) {
register_setting ( $this -> get_container ( $i ), $this -> get_container ( $i ) );
2021-02-23 16:00:59 +00:00
}
}
}