diff --git a/settings.ods b/settings.ods
index 64556c3..c9a15e6 100644
Binary files a/settings.ods and b/settings.ods differ
diff --git a/src/admin/layout/class-engine.php b/src/admin/layout/class-engine.php
index 3b8fcd6..68abfc6 100644
--- a/src/admin/layout/class-engine.php
+++ b/src/admin/layout/class-engine.php
@@ -416,6 +416,20 @@ abstract class Engine {
isset($readonly) ? ' readonly="readonly"' : '',
$disabled ? ' disabled': ''
) );
+ }
+
+ protected function add_input_textarea( array $args ): void {
+ extract( $args );
+
+ echo ( sprintf(
+ '',
+ $name,
+ $name,
+ $style ?? '',
+ isset($readonly) ? ' readonly="readonly"' : '',
+ $disabled ? ' disabled': '',
+ $value,
+ ) );
}
protected function add_input_number( array $args ): void {
@@ -484,7 +498,6 @@ abstract class Engine {
);
}
-
/**************************************************************************
* NEW METHODS END
**************************************************************************/
diff --git a/src/admin/layout/class-init.php b/src/admin/layout/class-init.php
index 41f972b..bdaf216 100644
--- a/src/admin/layout/class-init.php
+++ b/src/admin/layout/class-init.php
@@ -91,9 +91,7 @@ class Init {
*
* @since 1.5.0
*/
- public function initialize_settings(): void {
- Settings::instance()->register_settings();
-
+ public function initialize_settings(): void {
Settings::instance()->settings_sections['general']->add_settings_section();
Settings::instance()->settings_sections['referrers_and_tooltips']->add_settings_section();
Settings::instance()->settings_sections['scope_and_priority']->add_settings_section();
diff --git a/src/admin/layout/class-settings-page.php b/src/admin/layout/class-settings-page.php
index 943308c..8073e98 100644
--- a/src/admin/layout/class-settings-page.php
+++ b/src/admin/layout/class-settings-page.php
@@ -97,6 +97,9 @@ class SettingsPage extends Engine {
case 'text':
$this->add_input_text($args);
return;
+ case 'textarea':
+ $this->add_input_textarea($args);
+ return;
case 'number':
$this->add_input_number($args);
return;
@@ -117,169 +120,7 @@ class SettingsPage extends Engine {
/**************************************************************************
* NEW METHODS END
**************************************************************************/
-
- /**
- * Displays the Custom CSS box.
- *
- * @since 1.5.0
- */
- public function custom_css() {
- // Load template file.
- $template = new Template( Template::DASHBOARD, 'customize-css' );
- // Replace all placeholders.
- $template->replace(
- array(
- 'label-css' => $this->add_label( Settings::CUSTOM_CSS, __( 'Your existing Custom CSS code:', 'footnotes' ) ),
- 'css' => $this->add_textarea( Settings::CUSTOM_CSS ),
- 'description-css' => __( 'Custom CSS migrates to a dedicated tab. This text area is intended to keep your data safe, and the code remains valid while visible. Please copy-paste the content into the new text area under the new tab.', 'footnotes' ),
-
- // phpcs:disable Squiz.PHP.CommentedOutCode.Found
- // CSS classes are listed in the template.
- // Localized notices are dropped to ease translators' task.
-
- // "label-class-1" => ".footnote_plugin_tooltip_text",.
- // "class-1" => $this->add_text(__("superscript, Footnotes index", $this->plugin_name)),.
-
- // "label-class-2" => ".footnote_tooltip",.
- // "class-2" => $this->add_text(__("mouse-over box, tooltip for each superscript", $this->plugin_name)),.
-
- // "label-class-3" => ".footnote_plugin_index",.
- // "class-3" => $this->add_text(__("1st column of the Reference Container, Footnotes index", $this->plugin_name)),.
-
- // "label-class-4" => ".footnote_plugin_text",.
- // "class-4" => $this->add_text(__("2nd column of the Reference Container, Footnote text", $this->plugin_name)).
- // phpcs:enable
- )
- );
- // Display template with replaced placeholders.
- // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
- echo $template->get_content();
- // phpcs:enable
- }
-
- /**
- * Displays transitional legacy Custom CSS box.
- *
- * @since 2.2.2
- * @deprecated
- */
- public function custom_css_migration(): void {
-
- // Options for Yes/No select box.
- $enabled = array(
- 'yes' => __( 'Yes', 'footnotes' ),
- 'no' => __( 'No', 'footnotes' ),
- );
-
- // Load template file.
- $template = new Template( Template::DASHBOARD, 'customize-css-migration' );
- // Replace all placeholders.
- $template->replace(
- array(
- 'label-css' => $this->add_label( Settings::CUSTOM_CSS, __( 'Your existing Custom CSS code:', 'footnotes' ) ),
- 'css' => $this->add_textarea( Settings::CUSTOM_CSS ),
- 'description-css' => __( 'Custom CSS migrates to a dedicated tab. This text area is intended to keep your data safe, and the code remains valid while visible. Please copy-paste the content into the new text area below. Set Show legacy to No. Save twice.', 'footnotes' ),
-
- 'label-show-legacy' => $this->add_label( Settings::CUSTOM_CSS_LEGACY_ENABLE, 'Show legacy Custom CSS settings containers:' ),
- 'show-legacy' => $this->add_select_box( Settings::CUSTOM_CSS_LEGACY_ENABLE, $enabled ),
- 'notice-show-legacy' => __( 'Please set to No when you are done migrating, for the legacy Custom CSS containers to disappear.', 'footnotes' ),
- // Translators: %s: Referres and tooltips.
- 'description-show-legacy' => sprintf( __( 'The legacy Custom CSS under the %s tab and its mirror here are emptied, and the select box saved as No, when the settings tab is saved while the settings container is not displayed.', 'footnotes' ), __( 'Referrers and tooltips', 'footnotes' ) ),
-
- )
- );
- // Display template with replaced placeholders.
- // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
- echo $template->get_content();
- // phpcs:enable
- }
-
- /**
- * Displays the new Custom CSS box.
- *
- * @since 2.2.2
- */
- public function custom_css_new(): void {
- // Load template file.
- $template = new Template( Template::DASHBOARD, 'customize-css-new' );
- // Replace all placeholders.
- $template->replace(
- array(
- 'css' => $this->add_textarea( Settings::CUSTOM_CSS_NEW ),
-
- 'headline' => $this->add_text( __( 'Recommended CSS classes:', 'footnotes' ) ),
-
- )
- );
- // Display template with replaced placeholders.
- // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
- echo $template->get_content();
- // phpcs:enable
- }
-
- /**
- * Displays available Hooks to look for Footnote short codes.
- *
- * Priority level was initially a hard-coded default
- * shows ‘9223372036854775807’ in the numbox
- * empty should be interpreted as `PHP_INT_MAX`,
- * but a numbox cannot be set to empty, see {@link https://github.com/Modernizr/Modernizr/issues/171
- * here}
- * define -1 as `PHP_INT_MAX` instead
- *
- * @since 1.5.5
- */
- public function lookup_hooks(): void {
- // Load template file.
- $template = new Template( Template::DASHBOARD, 'expert-lookup' );
-
- // Replace all placeholders.
- $template->replace(
- array(
- 'description-1' => __( 'The priority level determines whether Footnotes is executed timely before other plugins, and how the reference container is positioned relative to other features.', 'footnotes' ),
- // Translators: 1: 99; 2: 1200.
- 'description-2' => sprintf( __( 'For the_content, this figure must be lower than %1$d so that certain strings added by a plugin running at %1$d may not be mistaken as a footnote. This makes also sure that the reference container displays above a feature inserted by a plugin running at %2$d.', 'footnotes' ), 99, 1200 ),
- // Translators: 1: PHP_INT_MAX; 2: 0; 3: -1; 4: 'PHP_INT_MAX'.
- 'description-3' => sprintf( __( '%1$d is lowest priority, %2$d is highest. To set priority level to lowest, set it to %3$d, interpreted as %1$d, the constant %4$s.', 'footnotes' ), PHP_INT_MAX, 0, -1, 'PHP_INT_MAX' ),
- 'description-4' => __( 'The widget_text hook must be enabled either when footnotes are present in theme text widgets, or when Elementor accordions or toggles shall have a reference container per section. If they should not, this hook must be disabled.', 'footnotes' ),
-
- 'head-hook' => __( 'WordPress hook function name', 'footnotes' ),
- 'head-checkbox' => __( 'Activate', 'footnotes' ),
- 'head-numbox' => __( 'Priority level', 'footnotes' ),
- 'head-url' => __( 'WordPress documentation', 'footnotes' ),
-
- 'label-the-title' => $this->add_label( Settings::EXPERT_LOOKUP_THE_TITLE, 'the_title' ),
- 'the-title' => $this->add_checkbox( Settings::EXPERT_LOOKUP_THE_TITLE ),
- 'priority-the-title' => $this->add_num_box( Settings::EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL, -1, PHP_INT_MAX ),
- 'url-the-title' => 'https://developer.wordpress.org/reference/hooks/the_title/',
-
- 'label-the-content' => $this->add_label( Settings::EXPERT_LOOKUP_THE_CONTENT, 'the_content' ),
- 'the-content' => $this->add_checkbox( Settings::EXPERT_LOOKUP_THE_CONTENT ),
- 'priority-the-content' => $this->add_num_box( Settings::EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL, -1, PHP_INT_MAX ),
- 'url-the-content' => 'https://developer.wordpress.org/reference/hooks/the_content/',
-
- 'label-the-excerpt' => $this->add_label( Settings::EXPERT_LOOKUP_THE_EXCERPT, 'the_excerpt' ),
- 'the-excerpt' => $this->add_checkbox( Settings::EXPERT_LOOKUP_THE_EXCERPT ),
- 'priority-the-excerpt' => $this->add_num_box( Settings::EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL, -1, PHP_INT_MAX ),
- 'url-the-excerpt' => 'https://developer.wordpress.org/reference/functions/the_excerpt/',
-
- 'label-widget-title' => $this->add_label( Settings::EXPERT_LOOKUP_WIDGET_TITLE, 'widget_title' ),
- 'widget-title' => $this->add_checkbox( Settings::EXPERT_LOOKUP_WIDGET_TITLE ),
- 'priority-widget-title' => $this->add_num_box( Settings::EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL, -1, PHP_INT_MAX ),
- 'url-widget-title' => 'https://codex.wordpress.org/Plugin_API/Filter_Reference/widget_title',
-
- 'label-widget-text' => $this->add_label( Settings::EXPERT_LOOKUP_WIDGET_TEXT, 'widget_text' ),
- 'widget-text' => $this->add_checkbox( Settings::EXPERT_LOOKUP_WIDGET_TEXT ),
- 'priority-widget-text' => $this->add_num_box( Settings::EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL, -1, PHP_INT_MAX ),
- 'url-widget-text' => 'https://codex.wordpress.org/Plugin_API/Filter_Reference/widget_text',
- )
- );
- // Display template with replaced placeholders.
- // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
- echo $template->get_content();
- // phpcs:enable
- }
-
+
/**
* Displays a short introduction to the plugin.
*
@@ -420,34 +261,6 @@ class SettingsPage extends Engine {
protected function get_meta_boxes(): array {
$meta_boxes = array();
- $meta_boxes[] = $this->add_meta_box( 'settings', 'amp-compat', __( 'AMP compatibility', 'footnotes' ), 'amp_compat' );
- $meta_boxes[] = $this->add_meta_box( 'settings', 'numbering', __( 'Footnotes numbering', 'footnotes' ), 'numbering' );
- $meta_boxes[] = $this->add_meta_box( 'settings', 'scrolling', __( 'Scrolling behavior', 'footnotes' ), 'scrolling' );
- $meta_boxes[] = $this->add_meta_box( 'settings', 'hard-links', __( 'URL fragment ID configuration', 'footnotes' ), 'hard_links' );
- $meta_boxes[] = $this->add_meta_box( 'settings', 'reference-container', __( 'Reference container', 'footnotes' ), 'reference_container' );
- $meta_boxes[] = $this->add_meta_box( 'settings', 'excerpts', __( 'Footnotes in excerpts', 'footnotes' ), 'excerpts' );
- $meta_boxes[] = $this->add_meta_box( 'settings', 'love', Config::PLUGIN_HEADING_NAME . ' ' . Config::LOVE_SYMBOL_HEADING, 'love' );
-
- $meta_boxes[] = $this->add_meta_box( 'customize', 'superscript', __( 'Referrers', 'footnotes' ), 'superscript' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'label-solution', __( 'Referrers in labels', 'footnotes' ), 'label_solution' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box', __( 'Tooltips', 'footnotes' ), 'mouseover_box' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box-position', __( 'Tooltip position', 'footnotes' ), 'mouseover_box_position' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box-dimensions', __( 'Tooltip dimensions', 'footnotes' ), 'mouseover_box_dimensions' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box-timing', __( 'Tooltip timing', 'footnotes' ), 'mouseover_box_timing' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box-truncation', __( 'Tooltip truncation', 'footnotes' ), 'mouseover_box_truncation' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box-text', __( 'Tooltip text', 'footnotes' ), 'mouseover_box_text' );
- $meta_boxes[] = $this->add_meta_box( 'customize', 'mouse-over-box-appearance', __( 'Tooltip appearance', 'footnotes' ), 'mouseover_box_appearance' );
- if ( Convert::to_bool( Settings::instance()->get( Settings::CUSTOM_CSS_LEGACY_ENABLE ) ) ) {
- $meta_boxes[] = $this->add_meta_box( 'customize', 'custom-css', __( 'Your existing Custom CSS code', 'footnotes' ), 'custom_css' );
- }
-
- $meta_boxes[] = $this->add_meta_box( 'expert', 'lookup', __( 'WordPress hooks with priority level', 'footnotes' ), 'lookup_hooks' );
-
- if ( Convert::to_bool( Settings::instance()->get( Settings::CUSTOM_CSS_LEGACY_ENABLE ) ) ) {
- $meta_boxes[] = $this->add_meta_box( 'customcss', 'custom-css-migration', __( 'Your existing Custom CSS code', 'footnotes' ), 'custom_css_migration' );
- }
- $meta_boxes[] = $this->add_meta_box( 'customcss', 'custom-css-new', __( 'Custom CSS', 'footnotes' ), 'custom_css_new' );
-
$meta_boxes[] = $this->add_meta_box( 'how-to', 'help', __( 'Brief introduction: How to use the plugin', 'footnotes' ), 'help' );
$meta_boxes[] = $this->add_meta_box( 'how-to', 'donate', __( 'Help us to improve our Plugin', 'footnotes' ), 'donate' );
diff --git a/src/includes/class-core.php b/src/includes/class-core.php
index 18a1e74..f1dcc04 100644
--- a/src/includes/class-core.php
+++ b/src/includes/class-core.php
@@ -192,7 +192,6 @@ class Core {
require_once plugin_dir_path( __DIR__ ) . 'public/class-general.php';
$this->loader = new Loader();
-
}
/**
* Define the locale for this plugin for internationalization.
diff --git a/src/includes/class-settings.php b/src/includes/class-settings.php
index deb883e..cefa64c 100644
--- a/src/includes/class-settings.php
+++ b/src/includes/class-settings.php
@@ -35,226 +35,6 @@ use footnotes\includes\settings\customcss\CustomCSSSettingsSection;
* Moved under `footnotes\includes` namespace.
*/
class Settings {
- /**
- * Options for the custom width units (per cent is a ratio, not a unit).
- *
- * @var array
- *
- * @since 2.8.0
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const WIDTH_UNIT_OPTIONS = array(
- '%' => 'per cent',
- 'px' => 'pixels',
- 'rem' => 'root em',
- 'em' => 'em',
- 'vw' => 'viewport width',
- );
-
- /**
- * Settings container key for the Custom CSS.
- *
- * @var string
- *
- * @since 1.5.0
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const CUSTOM_CSS = 'footnote_inputfield_custom_css';
-
- /**
- * Settings container key to enable the `the_title` hook.
- *
- * These are checkboxes; the keyword `checked` is converted to `true`, whilst
- * an empty string (the default) is converted to `false`.
- *
- * Hooks should all be enabled by default to prevent users from thinking at
- * first that the feature is broken in post titles (see {@link
- * https://wordpress.org/support/topic/more-feature-ideas/ here} for more
- * information).
- *
- * @var string
- *
- * @since 1.5.5
- * @todo In titles, footnotes are still buggy, because WordPress uses the
- * title string in menus and in the title element, but Footnotes doesn't
- * delete footnotes in them.
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_THE_TITLE = 'footnote_inputfield_expert_lookup_the_title';
-
- /**
- * Settings container key to enable the `the_content` hook.
- *
- * @var string
- *
- * @since 1.5.5
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_THE_CONTENT = 'footnote_inputfield_expert_lookup_the_content';
-
- /**
- * Settings container key to enable the `the_excerpt` hook.
- *
- * @var string
- *
- * @see FOOTNOTES_IN_EXCERPT
- *
- * @since 1.5.5
- * @since 2.6.3 Enable by default.
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_THE_EXCERPT = 'footnote_inputfield_expert_lookup_the_excerpt';
-
- /**
- * Settings container key to enable the `widget_title` hook.
- *
- * @var string
- *
- * @since 1.5.5
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_WIDGET_TITLE = 'footnote_inputfield_expert_lookup_widget_title';
-
- /**
- * Settings container key to enable the `widget_text` hook.
- *
- * 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.
- *
- * @var string
- *
- * @since 1.5.5
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_WIDGET_TEXT = 'footnote_inputfield_expert_lookup_widget_text';
-
- /**
- * Settings container key for the mouse-over box to define the max. width.
- *
- * The width should be limited to start with, for the box to have shape.
- *
- * The default width is 450.
- *
- * @var int
- *
- * @since 1.5.6
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const FOOTNOTES_MOUSE_OVER_BOX_MAX_WIDTH = 'footnote_inputfield_custom_mouse_over_box_max_width';
-
- /**
- * Settings container key to get the backlink symbol switch side.
- *
- * @var string
- *
- * @since 2.1.1
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH = 'footnotes_inputfield_reference_container_backlink_symbol_switch';
-
- /**
- * Settings container key for `the_content` hook priority level.
- *
- * 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 shortcodes), which causes issues with fake footnotes.
- *
- * Setting `the_content` priority to 10 instead of `PHP_INT_MAX` makes the
- * footnotes reference container display beneath the post and above other
- * features added by other plugins, e.g. related post lists and social buttons.
- *
- * For the {@link https://wordpress.org/plugins/yet-another-related-posts-plugin/
- * YARPP} plugin to display related posts below the Footnotes reference container,
- * priority needs to be at least 1,200.
- *
- * `PHP_INT_MAX` cannot be reset by leaving the number box empty, because
- * WebKit browsers don't allow it, so we must resort to -1.
- *
- * @var int
- *
- * @since 2.0.5
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_the_content_priority_level';
-
- /**
- * Settings container key for `the_title` hook priority level.
- *
- * @var int
- *
- * @since 2.1.2
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_the_title_priority_level';
-
- /**
- * Settings container key for `widget_title` hook priority level.
- *
- * @var int
- *
- * @since 2.1.2
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_widget_title_priority_level';
-
- /**
- * Settings container key for `widget_text` hook priority level.
- *
- * @var int
- *
- * @since 2.1.2
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_widget_text_priority_level';
-
- /**
- * Settings container key for `the_excerpt` hook priority level.
- *
- * @var int
- *
- * @since 2.1.2
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL = 'footnote_inputfield_expert_lookup_the_excerpt_priority_level';
-
- /**
- * Settings container key for reference container position shortcode.
- *
- * @var string
- *
- * @since 2.2.0
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const REFERENCE_CONTAINER_POSITION_SHORTCODE = 'footnote_inputfield_reference_container_position_shortcode';
-
- /**
- * Settings container key for the Custom CSS migrated to a dedicated tab.
- *
- * @var string
- *
- * @since 2.2.2
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const CUSTOM_CSS_NEW = 'footnote_inputfield_custom_css_new';
-
- /**
- * Settings container key to enable display of legacy Custom CSS metaboxes.
- *
- * This must be `false` if its setting is contained in the container to be hidden
- * because when saving, all missing constants are emptied, and {@see
- * Footnotes_Convert::to_bool()} converts empty to `false`.
- *
- * @var string
- *
- * @since 2.2.2
- * @since 2.3.0 Swap migration Boolean, meaning ‘show legacy’ instead of
- * ‘migration complete’, due to storage data structure constraints.
- * @todo Move to `SettingsSection`/`SettingsGroup`.
- */
- const CUSTOM_CSS_LEGACY_ENABLE = 'footnote_inputfield_custom_css_legacy_enable';
/**
* Contains all Settings option group slugs.
@@ -272,73 +52,6 @@ class Settings {
'footnotes_storage_expert',
'footnotes_storage_custom_css',
);
-
- /**
- * Contains all default values for each Settings Container.
- *
- * @var (string|int)[]
- *
- * @since 1.5.0
- * @since 2.8.0 Rename from `default` to `default_settings`.
- * @deprecated
- *
- * @todo Delete once moved to `SettingsSection`/`SettingsGroup`s.
- */
- private array $default_settings = array(
-
- // Referrers and tooltips.
- 'footnotes_storage_custom' => array(
-
- // Your existing Custom CSS code.
- self::CUSTOM_CSS => '',
-
- ),
-
- // Scope and priority.
- 'footnotes_storage_expert' => array(
-
- // WordPress hooks with priority level.
- self::EXPERT_LOOKUP_THE_TITLE => "",
- self::EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL => PHP_INT_MAX,
-
- self::EXPERT_LOOKUP_THE_CONTENT => 'checked',
- self::EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL => 98,
-
- self::EXPERT_LOOKUP_THE_EXCERPT => '',
- self::EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL => PHP_INT_MAX,
-
- self::EXPERT_LOOKUP_WIDGET_TITLE => '',
- self::EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL => PHP_INT_MAX,
-
- self::EXPERT_LOOKUP_WIDGET_TEXT => '',
- self::EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL => 98,
-
- ),
-
- // Custom CSS.
- 'footnotes_storage_custom_css' => array(
-
- // Your existing Custom CSS code.
- self::CUSTOM_CSS_LEGACY_ENABLE => 'yes',
-
- // Custom CSS.
- self::CUSTOM_CSS_NEW => '',
-
- ),
-
- );
-
- /**
- * Contains all Settings from each Settings Container.
- *
- * @var (string|int)[]
- *
- * @since 1.5.0
- * @deprecated
- *
- * @todo Delete once all `SettingsSection`/`SettingsGroup`s set up.
- */
- public array $settings = array();
/**
* Contains each section of settings.
@@ -491,27 +204,6 @@ class Settings {
return $this->settings[ $key ] ?? null;
}
- /**
- * Register all Settings Containers for the plugin Settings Page in the Dashboard.
- *
- * The Settings Container label will be the same as the Settings Container name.
- *
- * @since 1.5.0
- * @todo Only register current tab?
- */
- public function register_settings(): void {
- // Register all settings.
- foreach ($this->default_settings as $options_groups_name => $options_groups_values) {
- foreach ($options_groups_values as $setting_name => $setting_value) {
- if (!is_array($setting_value)) {
- register_setting( $options_groups_name, $setting_name );
- } else {
- register_setting( $options_groups_name, $setting_name, $setting_value['setting_args']);
- }
- }
- }
- }
-
/**
* Returns a singleton of this class.
*
diff --git a/src/includes/settings/class-setting.php b/src/includes/settings/class-setting.php
index 6ab4a9e..17a5f5e 100644
--- a/src/includes/settings/class-setting.php
+++ b/src/includes/settings/class-setting.php
@@ -18,7 +18,55 @@ use footnotes\includes\Settings;
* @package footnotes
* @since 2.8.0
*/
-class Setting {
+class Setting {
+ /**
+ * Options for the custom width units (per cent is a ratio, not a unit).
+ *
+ * @var array
+ *
+ * @since 2.8.0
+ */
+ const WIDTH_UNIT_OPTIONS = array(
+ '%' => 'per cent',
+ 'px' => 'pixels',
+ 'rem' => 'root em',
+ 'em' => 'em',
+ 'vw' => 'viewport width',
+ );
+
+ /**
+ * Options for the custom font size units (per cent is a ratio, not a unit).
+ *
+ * @var array
+ *
+ * @since 2.8.0
+ */
+ const FONT_SIZE_UNIT_OPTIONS = array(
+ 'em' => 'em',
+ 'rem' => 'rem',
+ 'px' => 'pixels',
+ 'pt' => 'points',
+ 'pc' => 'picas',
+ 'mm' => 'millimeters',
+ '%' => 'per cent',
+ );
+
+ /**
+ * Options for the HTML text elements.
+ *
+ * @var array
+ *
+ * @since 2.8.0
+ */
+ const TEXT_ELEMENT_OPTIONS = array(
+ 'p' => 'paragraph',
+ 'h2' => 'heading 2',
+ 'h3' => 'heading 3',
+ 'h4' => 'heading 4',
+ 'h5' => 'heading 5',
+ 'h6' => 'heading 6',
+ );
+
/**
* Setting value.
*
diff --git a/src/includes/settings/class-settings-group.php b/src/includes/settings/class-settings-group.php
index 9a2865b..dc7b7f8 100644
--- a/src/includes/settings/class-settings-group.php
+++ b/src/includes/settings/class-settings-group.php
@@ -109,9 +109,12 @@ abstract class SettingsGroup {
protected function load_values(array|false $options): void {
if ( ! $options ) return;
+ // TODO remove unfound settings from option
foreach ( $options as $setting_key => $setting_value ) {
- $this->settings[$setting_key]->set_value( $setting_value );
- }
+ $setting = $this->settings[$setting_key];
+ if ($setting) $setting->set_value( $setting_value );
+ else trigger_error("Setting with key {$setting_key} not found, skipping...", E_USER_WARNING);
+ }
}
public function add_settings_fields(Layout\SettingsPage $component): void {
diff --git a/src/includes/settings/custom-css/class-custom-css-settings-group.php b/src/includes/settings/custom-css/class-custom-css-settings-group.php
new file mode 100644
index 0000000..06e9b4b
--- /dev/null
+++ b/src/includes/settings/custom-css/class-custom-css-settings-group.php
@@ -0,0 +1,58 @@
+ 'footnote_inputfield_custom_css_new',
+ 'name' => 'Your Existing Custom CSS Code',
+ 'type' => 'string',
+ 'input_type' => 'textarea',
+ );
+
+ protected function add_settings( array|false $options ): void {
+ $this->settings = array(
+ self::CUSTOM_CSS['key'] => $this->add_setting( self::CUSTOM_CSS ),
+ );
+
+ $this->load_values( $options );
+ }
+}
diff --git a/src/includes/settings/custom-css/class-custom-css-settings-section.php b/src/includes/settings/custom-css/class-custom-css-settings-section.php
index b654e66..219abb6 100644
--- a/src/includes/settings/custom-css/class-custom-css-settings-section.php
+++ b/src/includes/settings/custom-css/class-custom-css-settings-section.php
@@ -15,7 +15,7 @@ require_once plugin_dir_path( __DIR__ ) . 'class-settings-section.php';
use footnotes\includes\settings\SettingsSection;
// Import settings groups.
-//use footnotes\includes\settings\custom-css\...;
+use footnotes\includes\settings\customcss\CustomCSSSettingsGroup;
/**
* Class defining plugin referrer and tooltips settings.
@@ -52,13 +52,12 @@ class CustomCSSSettingsSection extends SettingsSection {
protected function load_dependencies(): void {
parent::load_dependencies();
- //require_once plugin_dir_path( __DIR__ ) . 'general/class-reference-container-settings-group.php';
+ require_once plugin_dir_path( __DIR__ ) . 'custom-css/class-custom-css-settings-group.php';
}
protected function add_settings_groups(): void {
$this->settings_groups = array (
- // Add settings groups.
- //...::GROUP_ID => new ...($this->options_group_slug, $this->section_slug),
+ CustomCSSSettingsGroup::GROUP_ID => new CustomCSSSettingsGroup($this->options_group_slug, $this->section_slug),
);
}
}
diff --git a/src/includes/settings/general/class-reference-container-settings-group.php b/src/includes/settings/general/class-reference-container-settings-group.php
index 7c0a867..0c8b827 100644
--- a/src/includes/settings/general/class-reference-container-settings-group.php
+++ b/src/includes/settings/general/class-reference-container-settings-group.php
@@ -64,14 +64,7 @@ class ReferenceContainerSettingsGroup extends SettingsGroup {
'default_value' => 'p',
'type' => 'string',
'input_type' => 'select',
- 'input_options' => array(
- 'p' => 'paragraph',
- 'h2' => 'heading 2',
- 'h3' => 'heading 3',
- 'h4' => 'heading 4',
- 'h5' => 'heading 5',
- 'h6' => 'heading 6',
- ),
+ 'input_options' => Setting::TEXT_ELEMENT_OPTIONS
);
/**
@@ -577,7 +570,7 @@ class ReferenceContainerSettingsGroup extends SettingsGroup {
'default_value' => 'px',
'type' => 'string',
'input_type' => 'select',
- 'input_options' => Settings::WIDTH_UNIT_OPTIONS,
+ 'input_options' => Setting::WIDTH_UNIT_OPTIONS,
'enabled_by' => self::BACKLINKS_COLUMN_WIDTH_ENABLED,
);
@@ -644,7 +637,7 @@ class ReferenceContainerSettingsGroup extends SettingsGroup {
'default_value' => 'px',
'type' => 'string',
'input_type' => 'select',
- 'input_options' => Settings::WIDTH_UNIT_OPTIONS,
+ 'input_options' => Setting::WIDTH_UNIT_OPTIONS,
'enabled_by' => self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED,
);
@@ -688,28 +681,6 @@ class ReferenceContainerSettingsGroup extends SettingsGroup {
'input_type' => 'checkbox',
);
- /**
- * Settings container key for the Expert mode.
- *
- * 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.
- *
- * @var string
- *
- * @since 1.5.5
- * @since 2.1.6 Setting deprecated.
- * @deprecated
- * @todo Un-deprecate or delete.
- */
- const FOOTNOTES_EXPERT_MODE = array(
- 'key' => 'footnote_inputfield_enable_expert_mode',
- 'name' => 'Expert Mode',
- 'description' => 'DEPRECATED',
- 'default_value' => true,
- 'type' => 'boolean',
- 'input_type' => 'checkbox',
- );
-
protected function add_settings( array|false $options ): void {
$this->settings = array(
self::REFERENCE_CONTAINER_NAME['key'] => $this->add_setting( self::REFERENCE_CONTAINER_NAME ),
@@ -744,7 +715,6 @@ class ReferenceContainerSettingsGroup extends SettingsGroup {
self::BACKLINKS_COLUMN_MAX_WIDTH_UNIT['key'] => $this->add_setting( self::BACKLINKS_COLUMN_MAX_WIDTH_UNIT ),
self::BACKLINKS_LINE_BREAKS_ENABLED['key'] => $this->add_setting( self::BACKLINKS_LINE_BREAKS_ENABLED ),
self::LINK_ELEMENT_ENABLED['key'] => $this->add_setting( self::LINK_ELEMENT_ENABLED ),
- self::FOOTNOTES_EXPERT_MODE['key'] => $this->add_setting( self::FOOTNOTES_EXPERT_MODE ),
);
$this->load_values( $options );
diff --git a/src/includes/settings/referrers-and-tooltips/class-tooltip-appearance-settings-group.php b/src/includes/settings/referrers-and-tooltips/class-tooltip-appearance-settings-group.php
index b981160..1063ef9 100644
--- a/src/includes/settings/referrers-and-tooltips/class-tooltip-appearance-settings-group.php
+++ b/src/includes/settings/referrers-and-tooltips/class-tooltip-appearance-settings-group.php
@@ -90,15 +90,7 @@ class TooltipAppearanceSettingsGroup extends SettingsGroup {
'default_value' => 'px',
'type' => 'string',
'input_type' => 'select',
- 'input_options' => array(
- 'em' => 'em',
- 'rem' => 'rem',
- 'px' => 'pixels',
- 'pt' => 'points',
- 'pc' => 'picas',
- 'mm' => 'millimeters',
- '%' => 'per cent',
- ),
+ 'input_options' => Setting::FONT_SIZE_UNIT_OPTIONS
);
/**
diff --git a/src/includes/settings/referrers-and-tooltips/class-tooltip-dimensions-settings-group.php b/src/includes/settings/referrers-and-tooltips/class-tooltip-dimensions-settings-group.php
index 34d5528..f3c9101 100644
--- a/src/includes/settings/referrers-and-tooltips/class-tooltip-dimensions-settings-group.php
+++ b/src/includes/settings/referrers-and-tooltips/class-tooltip-dimensions-settings-group.php
@@ -35,6 +35,8 @@ class TooltipDimensionsSettingsGroup extends SettingsGroup {
/**
* Settings container key for the mouse-over box to define the max. width.
*
+ * The width should be limited to start with, for the box to have shape.
+ *
* @var array
*
* @since 1.5.6
diff --git a/src/includes/settings/scope-and-priority/class-scope-and-priority-settings-section.php b/src/includes/settings/scope-and-priority/class-scope-and-priority-settings-section.php
index 9de0e5b..896f384 100644
--- a/src/includes/settings/scope-and-priority/class-scope-and-priority-settings-section.php
+++ b/src/includes/settings/scope-and-priority/class-scope-and-priority-settings-section.php
@@ -13,11 +13,11 @@ namespace footnotes\includes\settings\scopeandpriority;
require_once plugin_dir_path( __DIR__ ) . 'class-settings-section.php';
use footnotes\includes\settings\SettingsSection;
-// Import settings groups.
-//use footnotes\includes\settings\scope-and-priority\...;
+
+use footnotes\includes\settings\scopeandpriority\WordPressHooksSettingsGroup;
/**
- * Class defining plugin referrer and tooltips settings.
+ * Class defining plugin hook priority settings.
*
* @package footnotes
* @since 2.8.0
@@ -51,13 +51,12 @@ class ScopeAndPrioritySettingsSection extends SettingsSection {
protected function load_dependencies(): void {
parent::load_dependencies();
- //require_once plugin_dir_path( __DIR__ ) . 'general/class-reference-container-settings-group.php';
+ require_once plugin_dir_path( __DIR__ ) . 'scope-and-priority/class-wordpress-hooks-settings-group.php';
}
protected function add_settings_groups(): void {
$this->settings_groups = array (
- // Add settings groups.
- //...::GROUP_ID => new ...($this->options_group_slug, $this->section_slug),
+ WordPressHooksSettingsGroup::GROUP_ID => new WordPressHooksSettingsGroup($this->options_group_slug, $this->section_slug),
);
}
}
diff --git a/src/includes/settings/scope-and-priority/class-wordpress-hooks-settings-group.php b/src/includes/settings/scope-and-priority/class-wordpress-hooks-settings-group.php
new file mode 100644
index 0000000..51360a7
--- /dev/null
+++ b/src/includes/settings/scope-and-priority/class-wordpress-hooks-settings-group.php
@@ -0,0 +1,279 @@
+ 'footnote_inputfield_expert_lookup_the_title',
+ 'name' => 'the_title()
',
+ 'description' => 'https://developer.wordpress.org/reference/hooks/the_title/',
+ 'default_value' => false,
+ 'type' => 'boolean',
+ 'input_type' => 'checkbox',
+ );
+
+ /**
+ * Settings container key for `the_title` hook priority level.
+ *
+ * @var array
+ *
+ * @since 2.1.2
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `int` to `array`.
+ */
+ const EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL = array(
+ 'key' => 'footnote_inputfield_expert_lookup_the_title_priority_level',
+ 'name' => 'the_title()
Priority Level',
+ 'description' => 'The priority level determines whether Footnotes is executed timely before other plugins, and how the reference container is positioned relative to other features. 9223372036854775807 is lowest priority, 0 is highest. To set priority level to lowest, set it to -1, interpreted as 9223372036854775807, the constant PHP_INT_MAX
.',
+ 'default_value' => PHP_INT_MAX,
+ 'type' => 'number',
+ 'input_type' => 'number',
+ 'input_max' => PHP_INT_MAX,
+ 'input_min' => -1,
+ );
+
+ /**
+ * Settings container key to enable the `the_content` hook.
+ *
+ * @var array
+ *
+ * @since 1.5.5
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `string` to `array`.
+ * Convert setting data type from `string` to `boolean`.
+ */
+ const EXPERT_LOOKUP_THE_CONTENT = array(
+ 'key' => 'footnote_inputfield_expert_lookup_the_content',
+ 'name' => 'the_content()
',
+ 'description' => 'https://developer.wordpress.org/reference/hooks/the_content/',
+ 'default_value' => true,
+ 'type' => 'boolean',
+ 'input_type' => 'checkbox',
+ );
+
+ /**
+ * Settings container key for `the_content` hook priority level.
+ *
+ * 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 shortcodes), which causes issues with fake footnotes.
+ *
+ * Setting `the_content` priority to 10 instead of `PHP_INT_MAX` makes the
+ * footnotes reference container display beneath the post and above other
+ * features added by other plugins, e.g. related post lists and social buttons.
+ *
+ * For the {@link https://wordpress.org/plugins/yet-another-related-posts-plugin/
+ * YARPP} plugin to display related posts below the Footnotes reference container,
+ * priority needs to be at least 1,200.
+ *
+ * `PHP_INT_MAX` cannot be reset by leaving the number box empty, because
+ * WebKit browsers don't allow it, so we must resort to -1.
+ *
+ * @var array
+ *
+ * @since 2.0.5
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `int` to `array`.
+ */
+ const EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL = array(
+ 'key' => 'footnote_inputfield_expert_lookup_the_content_priority_level',
+ 'name' => 'the_content()
Priority Level',
+ 'description' => 'The priority level determines whether Footnotes is executed timely before other plugins, and how the reference container is positioned relative to other features. 9223372036854775807 is lowest priority, 0 is highest. To set priority level to lowest, set it to -1, interpreted as 9223372036854775807, the constant PHP_INT_MAX
. For the_content
, this figure must be lower than 99 so that certain strings added by a plugin running at 99 may not be mistaken as a footnote. This makes also sure that the reference container displays above a feature inserted by a plugin running at 1200.',
+ 'default_value' => 98,
+ 'type' => 'number',
+ 'input_type' => 'number',
+ 'input_max' => PHP_INT_MAX,
+ 'input_min' => -1,
+ );
+
+
+ /**
+ * Settings container key to enable the `the_excerpt` hook.
+ *
+ * @var array
+ *
+ * @since 1.5.5
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `string` to `array`.
+ * Convert setting data type from `string` to `boolean`.
+ */
+ const EXPERT_LOOKUP_THE_EXCERPT = array(
+ 'key' => 'footnote_inputfield_expert_lookup_the_excerpt',
+ 'name' => 'the_excerpt()
',
+ 'description' => 'https://developer.wordpress.org/reference/hooks/the_excerpt/',
+ 'default_value' => false,
+ 'type' => 'boolean',
+ 'input_type' => 'checkbox',
+ );
+
+ /**
+ * Settings container key for `the_excerpt` hook priority level.
+ *
+ * @var array
+ *
+ * @since 2.1.2
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `int` to `array`.
+ */
+ const EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL = array(
+ 'key' => 'footnote_inputfield_expert_lookup_the_excerpt_priority_level',
+ 'name' => 'the_excerpt()
Priority Level',
+ 'description' => 'The priority level determines whether Footnotes is executed timely before other plugins, and how the reference container is positioned relative to other features. 9223372036854775807 is lowest priority, 0 is highest. To set priority level to lowest, set it to -1, interpreted as 9223372036854775807, the constant PHP_INT_MAX
.',
+ 'default_value' => PHP_INT_MAX,
+ 'type' => 'number',
+ 'input_type' => 'number',
+ 'input_max' => PHP_INT_MAX,
+ 'input_min' => -1,
+ );
+
+ /**
+ * Settings container key to enable the `widget_title` hook.
+ *
+ * @var array
+ *
+ * @since 1.5.5
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `string` to `array`.
+ * Convert setting data type from `string` to `boolean`.
+ */
+ const EXPERT_LOOKUP_WIDGET_TITLE = array(
+ 'key' => 'footnote_inputfield_expert_lookup_widget_title',
+ 'name' => 'widget_title()
',
+ 'description' => 'https://codex.wordpress.org/Plugin_API/Filter_Reference/widget_title',
+ 'default_value' => false,
+ 'type' => 'boolean',
+ 'input_type' => 'checkbox',
+ );
+
+ /**
+ * Settings container key for `widget_title` hook priority level.
+ *
+ * @var array
+ *
+ * @since 2.1.2
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `int` to `array`.
+ */
+ const EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL = array(
+ 'key' => 'footnote_inputfield_expert_lookup_widget_title_priority_level',
+ 'name' => 'widget_title()
Priority Level',
+ 'description' => 'The priority level determines whether Footnotes is executed timely before other plugins, and how the reference container is positioned relative to other features. 9223372036854775807 is lowest priority, 0 is highest. To set priority level to lowest, set it to -1, interpreted as 9223372036854775807, the constant PHP_INT_MAX
.',
+ 'default_value' => PHP_INT_MAX,
+ 'type' => 'number',
+ 'input_type' => 'number',
+ 'input_max' => PHP_INT_MAX,
+ 'input_min' => -1,
+ );
+
+ /**
+ * Settings container key to enable the `widget_text` hook.
+ *
+ * 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.
+ *
+ * @var array
+ *
+ * @since 1.5.5
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `string` to `array`.
+ * Convert setting data type from `string` to `boolean`.
+ */
+ const EXPERT_LOOKUP_WIDGET_TEXT = array(
+ 'key' => 'footnote_inputfield_expert_lookup_widget_text',
+ 'name' => 'widget_text()
',
+ 'description' => 'https://codex.wordpress.org/Plugin_API/Filter_Reference/widget_text. The widget_text()
hook must be enabled either when footnotes are present in theme text widgets, or when Elementor accordions or toggles shall have a reference container per section. If they should not, this hook must be disabled.',
+ 'default_value' => false,
+ 'type' => 'boolean',
+ 'input_type' => 'checkbox',
+ );
+
+ /**
+ * Settings container key for `widget_text` hook priority level.
+ *
+ * @var array
+ *
+ * @since 2.1.2
+ * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`.
+ * Convert from `int` to `array`.
+ */
+ const EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL = array(
+ 'key' => 'footnote_inputfield_expert_lookup_widget_text_priority_level',
+ 'name' => 'widget_text()
Priority Level',
+ 'description' => 'The priority level determines whether Footnotes is executed timely before other plugins, and how the reference container is positioned relative to other features. 9223372036854775807 is lowest priority, 0 is highest. To set priority level to lowest, set it to -1, interpreted as 9223372036854775807, the constant PHP_INT_MAX
.',
+ 'default_value' => 98,
+ 'type' => 'number',
+ 'input_type' => 'number',
+ 'input_max' => PHP_INT_MAX,
+ 'input_min' => -1,
+ );
+
+ protected function add_settings( array|false $options ): void {
+ $this->settings = array(
+ self::EXPERT_LOOKUP_THE_TITLE['key'] => $this->add_setting( self::EXPERT_LOOKUP_THE_TITLE ),
+ self::EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL['key'] => $this->add_setting( self::EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL ),
+ self::EXPERT_LOOKUP_THE_CONTENT['key'] => $this->add_setting( self::EXPERT_LOOKUP_THE_CONTENT ),
+ self::EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL['key'] => $this->add_setting( self::EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL ),
+ self::EXPERT_LOOKUP_THE_EXCERPT['key'] => $this->add_setting( self::EXPERT_LOOKUP_THE_EXCERPT ),
+ self::EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL['key'] => $this->add_setting( self::EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL ),
+ self::EXPERT_LOOKUP_WIDGET_TITLE['key'] => $this->add_setting( self::EXPERT_LOOKUP_WIDGET_TITLE ),
+ self::EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL['key'] => $this->add_setting( self::EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL ),
+ self::EXPERT_LOOKUP_WIDGET_TEXT['key'] => $this->add_setting( self::EXPERT_LOOKUP_WIDGET_TEXT ),
+ self::EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL['key'] => $this->add_setting( self::EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL ),
+ );
+
+ $this->load_values( $options );
+ }
+}
diff --git a/src/public/class-parser.php b/src/public/class-parser.php
index b6c64f8..e30d2d3 100644
--- a/src/public/class-parser.php
+++ b/src/public/class-parser.php
@@ -13,7 +13,7 @@ declare(strict_types=1);
namespace footnotes\general;
-use footnotes\includes\{Settings, Convert, Template};
+use footnotes\includes\{Settings, Config, Convert, Template};
/**
* @todo Replace with constant imports.
@@ -39,6 +39,8 @@ use footnotes\includes\settings\referrersandtooltips\{
TooltipTimingSettingsGroup,
TooltipTruncationSettingsGroup
};
+use footnotes\includes\settings\scopeandpriority\WordPressHooksSettingsGroup;
+use footnotes\includes\settings\customcss\CustomCSSSettingsGroup;
/**
* Searches and replaces the footnotes and generates the reference container.
@@ -297,11 +299,11 @@ class Parser {
*/
public function register_hooks(): void {
// Get values from settings.
- $the_title_priority = (int) Settings::instance()->get( Settings::EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL );
- $the_content_priority = (int) Settings::instance()->get( Settings::EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL );
- $the_excerpt_priority = (int) Settings::instance()->get( Settings::EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL );
- $widget_title_priority = (int) Settings::instance()->get( Settings::EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL );
- $widget_text_priority = (int) Settings::instance()->get( Settings::EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL );
+ $the_title_priority = Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_THE_TITLE_PRIORITY_LEVEL['key'] )->get_value();
+ $the_content_priority = Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_THE_CONTENT_PRIORITY_LEVEL['key'] )->get_value();
+ $the_excerpt_priority = Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_THE_EXCERPT_PRIORITY_LEVEL['key'] )->get_value();
+ $widget_title_priority = Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_WIDGET_TITLE_PRIORITY_LEVEL['key'] )->get_value();
+ $widget_text_priority = Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_WIDGET_TEXT_PRIORITY_LEVEL['key'] )->get_value();
// PHP_INT_MAX can be set by -1.
$the_title_priority = ( -1 === $the_title_priority ) ? PHP_INT_MAX : $the_title_priority;
@@ -324,7 +326,7 @@ class Parser {
PHP_INT_MAX
);
- if ( Convert::to_bool( Settings::instance()->get( Settings::EXPERT_LOOKUP_THE_TITLE ) ) ) {
+ if ( Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_THE_TITLE['key'] )->get_value() ) {
add_filter(
'the_title',
fn( string $content): string => $this->footnotes_in_title( $content ),
@@ -333,7 +335,7 @@ class Parser {
}
// Configurable priority level for reference container relative positioning; default 98.
- if ( Convert::to_bool( Settings::instance()->get( Settings::EXPERT_LOOKUP_THE_CONTENT ) ) ) {
+ if ( Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_THE_CONTENT['key'] )->get_value() ) {
add_filter(
'the_content',
fn( string $content): string => $this->footnotes_in_content( $content ),
@@ -375,7 +377,7 @@ class Parser {
);
}
- if ( Convert::to_bool( Settings::instance()->get( Settings::EXPERT_LOOKUP_THE_EXCERPT ) ) ) {
+ if ( Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_THE_EXCERPT['key'] )->get_value() ) {
/**
* Adds a filter to the excerpt hook.
*
@@ -391,7 +393,7 @@ class Parser {
);
}
- if ( Convert::to_bool( Settings::instance()->get( Settings::EXPERT_LOOKUP_WIDGET_TITLE ) ) ) {
+ if ( Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_WIDGET_TITLE['key'] )->get_value() ) {
/**
* TODO
*/
@@ -402,7 +404,7 @@ class Parser {
);
}
- if ( Convert::to_bool( Settings::instance()->get( Settings::EXPERT_LOOKUP_WIDGET_TEXT ) ) ) {
+ if ( Settings::instance()->get_setting( WordPressHooksSettingsGroup::EXPERT_LOOKUP_WIDGET_TEXT['key'] )->get_value() ) {
/**
* TODO
*/
@@ -699,11 +701,7 @@ class Parser {
* Set custom CSS to override settings, not conversely.
* Legacy Custom CSS is used until it’s set to disappear after dashboard tab migration.
*/
- if ( Convert::to_bool( Settings::instance()->get( Settings::CUSTOM_CSS_LEGACY_ENABLE ) ) ) {
- echo Settings::instance()->get( Settings::CUSTOM_CSS );
- echo "\r\n";
- }
- echo Settings::instance()->get( Settings::CUSTOM_CSS_NEW );
+ echo Settings::instance()->get_setting( CustomCSSSettingsGroup::CUSTOM_CSS['key'] )->get_value();
// Insert end tag without switching out of PHP.
echo "\r\n\r\n";
@@ -1116,11 +1114,11 @@ class Parser {
public function unify_delimiters( string $content ): string {
// Get footnotes start and end tag short codes.
- $starting_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_START )->get_value();
- $ending_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_END )->get_value();
+ $starting_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_START['key'] )->get_value();
+ $ending_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_END['key'] )->get_value();
if ( 'userdefined' === $starting_tag || 'userdefined' === $ending_tag ) {
- $starting_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_START_USER_DEFINED )->get_value();
- $ending_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_END_USER_DEFINED )->get_value();
+ $starting_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_START_USER_DEFINED['key'] )->get_value();
+ $ending_tag = Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTES_SHORT_CODE_END_USER_DEFINED['key'] )->get_value();
}
// If any footnotes short code is empty, return the content without changes.
@@ -1184,8 +1182,6 @@ class Parser {
// Get footnote delimiter shortcodes and unify them.
$content = self::unify_delimiters( $content );
- print_r('FOO');
- print_r($content);
/*
* Checks for balanced footnote delimiters; delimiter syntax validation.
@@ -1195,7 +1191,7 @@ class Parser {
*/
// If enabled.
- if ( Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTE_SHORTCODE_SYNTAX_VALIDATION_ENABLE['key'] ->get_value()) ) {
+ if ( Settings::instance()->get_setting( ShortcodeSettingsGroup::FOOTNOTE_SHORTCODE_SYNTAX_VALIDATION_ENABLE['key']) ->get_value() ) {
// Apply different regex depending on whether start shortcode is double/triple opening parenthesis.
if ( '((' === self::$start_tag || '(((' === self::$start_tag ) {
@@ -1623,7 +1619,7 @@ class Parser {
$offset_x = Settings::instance()->get_setting( TooltipPositionSettingsGroup::FOOTNOTES_MOUSE_OVER_BOX_OFFSET_X['key'] )->get_value();
$fade_in_delay = Settings::instance()->get_setting( TooltipTimingSettingsGroup::MOUSE_OVER_BOX_FADE_IN_DELAY['key'] )->get_value();
$fade_in_duration = Settings::instance()->get_setting( TooltipTimingSettingsGroup::MOUSE_OVER_BOX_FADE_IN_DURATION['key'] )->get_value();
- $fade_out_delay = Settings::instance()->get_settingget( TooltipTimingSettingsGroup::MOUSE_OVER_BOX_FADE_OUT_DELAY['key'] )->get_value();
+ $fade_out_delay = Settings::instance()->get_setting( TooltipTimingSettingsGroup::MOUSE_OVER_BOX_FADE_OUT_DELAY['key'] )->get_value();
$fade_out_duration = Settings::instance()->get_setting( TooltipTimingSettingsGroup::MOUSE_OVER_BOX_FADE_OUT_DURATION['key'] )->get_value();
// Fill in 'public/partials/tooltip.html'.
@@ -2206,7 +2202,7 @@ class Parser {
array(
'post_id' => self::$post_id,
'container_id' => self::$reference_container_id,
- 'element' => Settings::instance()->get_setting( ReferenceContainerSettingsGroup::REFERENCE_CONTAINER_LABEL_ELEMENT ),
+ 'element' => Settings::instance()->get_setting( ReferenceContainerSettingsGroup::REFERENCE_CONTAINER_LABEL_ELEMENT['key'] )->get_value(),
'name' => empty( $reference_container_label ) ? ' ' : $reference_container_label,
'button-style' => $collapse_default ? '' : 'display: none;',
'style' => $collapse_default ? 'display: none;' : '',