From 751fa9d614eb088324d74909d44bb6f0a419aa98 Mon Sep 17 00:00:00 2001 From: Rumperuu Date: Thu, 5 Aug 2021 15:58:18 +0100 Subject: [PATCH] refactor: add scrolling and shortcode settings groups --- settings.ods | Bin 41383 -> 39992 bytes .../settings/class-TEMP-settings-group.php | 64 +++ .../class-general-settings-section.php | 36 +- ...ass-reference-container-settings-group.php | 517 ++++++++---------- .../class-scrolling-settings-group.php | 189 +++++++ .../class-shortcode-settings-group.php | 156 ++++++ 6 files changed, 654 insertions(+), 308 deletions(-) create mode 100644 src/includes/settings/class-TEMP-settings-group.php create mode 100644 src/includes/settings/general/class-scrolling-settings-group.php create mode 100644 src/includes/settings/general/class-shortcode-settings-group.php diff --git a/settings.ods b/settings.ods index 265f1a81897cdc68734d8d3a4de2945ffd632687..4a98b91c37cfbb3d926d7bc77272072cdc055ed2 100644 GIT binary patch delta 38238 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

}26luCI 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≀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 A8UO$Q delta 39609 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 'TEMP_SETTING_KEY', + 'name' => 'TEMP_SETTING_LABEL', + 'description' => 'TEMP_SETTING_DESC', + 'default_value' => TEMP_DEFAULT_VALUE, + 'type' => 'integer', + 'input_type' => 'number', + ['input_max' => TEMP_MAX,] + ['input_min' => TEMP_MIN,] + ['enabled_by' => self::TEMP_ENABLED_BY_SETTING_NAME] + ); + + protected function add_settings(array|false $options): void { + $this->settings = array( + self::TEMP_SETTING_NAME['key'] => $this->add_setting(self::TEMP_SETTING_NAME), + ); + + $this->load_values( $options ); + } +} diff --git a/src/includes/settings/general/class-general-settings-section.php b/src/includes/settings/general/class-general-settings-section.php index 7e9158b..6efd62e 100644 --- a/src/includes/settings/general/class-general-settings-section.php +++ b/src/includes/settings/general/class-general-settings-section.php @@ -10,9 +10,12 @@ declare(strict_types=1); namespace footnotes\includes\settings\general; -require_once plugin_dir_path( __DIR__ ) . 'settings/class-settings-section.php'; +require_once plugin_dir_path( __DIR__ ) . 'class-settings-section.php'; +use footnotes\includes\settings\SettingsSection; use footnotes\includes\settings\general\ReferenceContainerSettingsGroup; +use footnotes\includes\settings\general\ScrollingSettingsGroup; +use footnotes\includes\settings\general\ShortcodeSettingsGroup; /** * Class defining general plugin settings. @@ -20,7 +23,7 @@ use footnotes\includes\settings\general\ReferenceContainerSettingsGroup; * @package footnotes * @since 2.8.0 */ -class GeneralSettingsSection extends SettingsSection { +class GeneralSettingsSection extends SettingsSection { /** * The groups of settings within this section. * @@ -29,31 +32,36 @@ class GeneralSettingsSection extends SettingsSection { * @since 2.8.0 */ protected array $settings_groups; - + public function __construct( $options_group_slug, $section_slug, $title ) { $this->options_group_slug = $options_group_slug; - $this->section_slug = $section_slug; - $this->title = $title; - + $this->section_slug = $section_slug; + $this->title = $title; + $this->load_dependencies(); - - $this->add_settings_groups(get_option( $this->options_group_slug )); + + $this->add_settings_groups( get_option( $this->options_group_slug ) ); $this->load_options_group(); } - + protected function load_dependencies(): void { - require_once plugin_dir_path( __DIR__ ) . 'settings/class-setting.php'; - require_once plugin_dir_path( __DIR__ ) . 'settings/general/class-reference-container-settings-group.php'; + parent::load_dependencies(); + + require_once plugin_dir_path( __DIR__ ) . 'general/class-reference-container-settings-group.php'; + require_once plugin_dir_path( __DIR__ ) . 'general/class-scrolling-settings-group.php'; + require_once plugin_dir_path( __DIR__ ) . 'general/class-shortcode-settings-group.php'; } - + protected function add_settings_groups(): void { - $this->settings_groups = array ( - ReferenceContainerSettingsGroup::GROUP_ID => new ReferenceContainerSettingsGroup($this->options_group_slug, $this->section_slug), + $this->settings_groups = array( + ReferenceContainerSettingsGroup::GROUP_ID => new ReferenceContainerSettingsGroup( $this->options_group_slug, $this->section_slug ), + ScrollingSettingsGroup::GROUP_ID => new ScrollingSettingsGroup( $this->options_group_slug, $this->section_slug ), + ShortcodeSettingsGroup::GROUP_ID => new ShortcodeSettingsGroup( $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 3c96770..7962164 100644 --- a/src/includes/settings/general/class-reference-container-settings-group.php +++ b/src/includes/settings/general/class-reference-container-settings-group.php @@ -22,7 +22,7 @@ use footnotes\includes\settings\SettingsGroup; * @package footnotes * @since 2.8.0 */ -class ReferenceContainerSettingsGroup extends SettingsGroup { +class ReferenceContainerSettingsGroup extends SettingsGroup { /** * Setting group ID. * @@ -31,7 +31,7 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * @since 2.8.0 */ const GROUP_ID = 'reference-container'; - + /** * Settings container key for combining identical footnotes. * @@ -43,13 +43,13 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const COMBINE_IDENTICAL_FOOTNOTES = array( - 'key' => 'footnote_inputfield_combine_identical', - 'name' => 'Combine Identical Footnotes', + 'key' => 'footnote_inputfield_combine_identical', + 'name' => 'Combine Identical Footnotes', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); - + /** * Settings container key for the label of the reference container. * @@ -60,13 +60,13 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const REFERENCE_CONTAINER_NAME = array( - 'key' => 'footnote_inputfield_references_label', - 'name' => 'Reference Container Title', + 'key' => 'footnote_inputfield_references_label', + 'name' => 'Reference Container Title', 'default_value' => 'References', - 'type' => 'string', - 'input_type' => 'text' + 'type' => 'string', + 'input_type' => 'text', ); - + /** * Settings container key for the reference container label element. * @@ -76,12 +76,12 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * @since 2.8.0 Move from `Settings` to `ReferenceContainerSettingsGroup`. * Convert from `string` to `array`. */ - const REFERENCE_CONTAINER_LABEL_ELEMENT =array( - 'key' => 'footnote_inputfield_references_label', - 'name' => 'Heading\'s HTML Element', + const REFERENCE_CONTAINER_LABEL_ELEMENT = array( + 'key' => 'footnote_inputfield_references_label', + 'name' => 'Heading\'s HTML Element', 'default_value' => 'p', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => array( 'p' => 'paragraph', 'h2' => 'heading 2', @@ -89,9 +89,9 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { 'h4' => 'heading 4', 'h5' => 'heading 5', 'h6' => 'heading 6', - ) + ), ); - + /** * Settings container key to enable the reference container label bottom border. * @@ -103,13 +103,13 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER = array( - 'key' => 'footnotes_inputfield_reference_container_label_bottom_border', - 'name' => 'Border Under the Heading', + 'key' => 'footnotes_inputfield_reference_container_label_bottom_border', + 'name' => 'Border Under the Heading', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); - + /** * Settings container key to collapse the reference container by default. * @@ -121,13 +121,13 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_COLLAPSE = array( - 'key' => 'footnote_inputfield_collapse_references', - 'name' => 'Collapse by Default', + 'key' => 'footnote_inputfield_collapse_references', + 'name' => 'Collapse by Default', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); - + /** * Settings container key to select the script mode for the reference container. * @@ -138,16 +138,16 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE = array( - 'key' => 'footnotes_inputfield_reference_container_script_mode', - 'name' => 'Script Mode', - 'description' => 'The plain JavaScript mode will enable hard links with configurable scroll offset.', + 'key' => 'footnotes_inputfield_reference_container_script_mode', + 'name' => 'Script Mode', + 'description' => 'The plain JavaScript mode will enable hard links with configurable scroll offset.', 'default_value' => 'jquery', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => array( 'jquery' => 'jQuery', - 'js' => 'plain JavaScript' - ) + 'js' => 'plain JavaScript', + ), ); /** @@ -160,17 +160,17 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const REFERENCE_CONTAINER_POSITION = array( - 'key' => 'footnote_inputfield_reference_container_place', - 'name' => 'Container Position', - 'description' => 'Where the container should be placed on the page. To use the position or section shortcode, please set the position to: at the end of the post', + 'key' => 'footnote_inputfield_reference_container_place', + 'name' => 'Container Position', + 'description' => 'Where the container should be placed on the page. To use the position or section shortcode, please set the position to: at the end of the post', 'default_value' => 'post_end', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => array( 'post_end' => 'at the end of the post', 'widget' => 'in the widget area', 'footer' => 'in the footer', - ) + ), ); /** @@ -183,14 +183,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const REFERENCE_CONTAINER_POSITION_SHORTCODE = array( - 'key' => 'footnote_inputfield_reference_container_position_shortcode', - 'name' => 'Position Shortcode', - 'description' => 'If present in the content, any shortcode in this text box will be replaced with the reference container.', + 'key' => 'footnote_inputfield_reference_container_position_shortcode', + 'name' => 'Position Shortcode', + 'description' => 'If present in the content, any shortcode in this text box will be replaced with the reference container.', 'default_value' => '[[references]]', - 'type' => 'string', - 'input_type' => 'text' + 'type' => 'string', + 'input_type' => 'text', ); - + /** * Settings container key for the footnote section shortcode. * @@ -201,12 +201,12 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const FOOTNOTE_SECTION_SHORTCODE = array( - 'key' => 'footnotes_inputfield_section_shortcode', - 'name' => 'Footnote Section Shortcode', - 'description' => 'If present in the content, any shortcode in this text box will delimit a section terminated by a reference container.', + 'key' => 'footnotes_inputfield_section_shortcode', + 'name' => 'Footnote Section Shortcode', + 'description' => 'If present in the content, any shortcode in this text box will delimit a section terminated by a reference container.', 'default_value' => '[[/footnotesection]]', - 'type' => 'string', - 'input_type' => 'text' + 'type' => 'string', + 'input_type' => 'text', ); /** @@ -220,11 +220,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_START_PAGE_ENABLE = array( - 'key' => 'footnotes_inputfield_reference_container_start_page_enable', - 'name' => 'Display on Start Page Too', + 'key' => 'footnotes_inputfield_reference_container_start_page_enable', + 'name' => 'Display on Start Page Too', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -237,16 +237,16 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `int` to `array`. */ const REFERENCE_CONTAINER_TOP_MARGIN = array( - 'key' => 'footnotes_inputfield_reference_container_top_margin', - 'name' => 'Top Margin', - 'description' => 'pixels; may be negative', + 'key' => 'footnotes_inputfield_reference_container_top_margin', + 'name' => 'Top Margin', + 'description' => 'pixels; may be negative', 'default_value' => 24, - 'type' => 'integer', - 'input_type' => 'number', - 'input_max' => 500, - 'input_min' => -500 + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 500, + 'input_min' => -500, ); - + /** * Settings container key for reference container bottom margin. * @@ -257,14 +257,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `int` to `array`. */ const REFERENCE_CONTAINER_BOTTOM_MARGIN = array( - 'key' => 'footnotes_inputfield_reference_container_bottom_margin', - 'name' => 'Bottom Margin', - 'description' => 'pixels; may be negative', + 'key' => 'footnotes_inputfield_reference_container_bottom_margin', + 'name' => 'Bottom Margin', + 'description' => 'pixels; may be negative', 'default_value' => 0, - 'type' => 'integer', - 'input_type' => 'number', - 'input_max' => 500, - 'input_min' => -500 + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 500, + 'input_min' => -500, ); /** @@ -279,18 +279,18 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const FOOTNOTES_PAGE_LAYOUT_SUPPORT = array( - 'key' => 'footnotes_inputfield_page_layout_support', - 'name' => 'Apply Basic Responsive Page Layout', - 'description' => 'Most themes don\'t need this fix.', + 'key' => 'footnotes_inputfield_page_layout_support', + 'name' => 'Apply Basic Responsive Page Layout', + 'description' => 'Most themes don\'t need this fix.', 'default_value' => 'none', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => array( 'none' => 'No', 'reference-container' => 'to the reference container exclusively', 'entry-content' => 'to the div element starting below the post title', 'main-content' => 'to the main element including the post title', - ) + ), ); /** @@ -307,12 +307,12 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const FOOTNOTE_URL_WRAP_ENABLED = array( - 'key' => 'footnote_inputfield_url_wrap_enabled', - 'name' => 'Allow URLs to Line-Wrap Anywhere', - 'description' => 'Unicode-conformant browsers don\'t need this fix.', + 'key' => 'footnote_inputfield_url_wrap_enabled', + 'name' => 'Allow URLs to Line-Wrap Anywhere', + 'description' => 'Unicode-conformant browsers don\'t need this fix.', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -326,12 +326,12 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE = array( - 'key' => 'footnotes_inputfield_reference_container_backlink_symbol_enable', - 'name' => 'Display a Backlink Symbol', - 'description' => 'Please choose or input the symbol at the top of the next dashboard tab.', + 'key' => 'footnotes_inputfield_reference_container_backlink_symbol_enable', + 'name' => 'Display a Backlink Symbol', + 'description' => 'Please choose or input the symbol at the top of the next dashboard tab.', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -345,11 +345,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH = array( - 'key' => 'footnotes_inputfield_reference_container_backlink_symbol_switch', - 'name' => 'Append Instead of Prepend Symbol', + 'key' => 'footnotes_inputfield_reference_container_backlink_symbol_switch', + 'name' => 'Append Instead of Prepend Symbol', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -363,12 +363,12 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE = array( - 'key' => 'footnotes_inputfield_reference_container_3column_layout_enable', - 'name' => 'Backlink Symbol in an Extra Column', - 'description' => 'This legacy layout is available if identical footnotes are not combined.', + 'key' => 'footnotes_inputfield_reference_container_3column_layout_enable', + 'name' => 'Backlink Symbol in an Extra Column', + 'description' => 'This legacy layout is available if identical footnotes are not combined.', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -382,11 +382,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const REFERENCE_CONTAINER_ROW_BORDERS_ENABLE = array( - 'key' => 'footnotes_inputfield_reference_container_row_borders_enable', - 'name' => 'Borders Around the Table Rows', + 'key' => 'footnotes_inputfield_reference_container_row_borders_enable', + 'name' => 'Borders Around the Table Rows', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -406,11 +406,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const BACKLINKS_SEPARATOR_ENABLED = array( - 'key' => 'footnotes_inputfield_backlinks_separator_enabled', - 'name' => 'Add a Separator When Enumerating Backlinks', + 'key' => 'footnotes_inputfield_backlinks_separator_enabled', + 'name' => 'Add a Separator When Enumerating Backlinks', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -426,19 +426,19 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_SEPARATOR_OPTION = array( - 'key' => 'footnotes_inputfield_backlinks_separator_option', - 'name' => 'Backlink Separator Symbol', + 'key' => 'footnotes_inputfield_backlinks_separator_option', + 'name' => 'Backlink Separator Symbol', 'default_value' => 'comma', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => array( // Unicode character names are conventionally uppercase. 'comma' => ',', 'semicolon' => ';', 'en_dash' => '–', ), - 'enabled_by' => self::BACKLINKS_SEPARATOR_ENABLED, - 'overridden_by' => self::BACKLINKS_SEPARATOR_CUSTOM + 'enabled_by' => self::BACKLINKS_SEPARATOR_ENABLED, + 'overridden_by' => self::BACKLINKS_SEPARATOR_CUSTOM, ); /** @@ -454,15 +454,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_SEPARATOR_CUSTOM = array( - 'key' => 'footnotes_inputfield_backlinks_separator_custom', - 'name' => 'Custom Backlink Separator Symbol', + 'key' => 'footnotes_inputfield_backlinks_separator_custom', + 'name' => 'Custom Backlink Separator Symbol', 'description' => 'Your input overrides the selection.', - 'default_value' => null, - 'type' => 'string', - 'input_type' => 'text', - 'enabled_by' => self::BACKLINKS_SEPARATOR_ENABLED + 'type' => 'string', + 'input_type' => 'text', + 'enabled_by' => self::BACKLINKS_SEPARATOR_ENABLED, ); - + /** * Settings container key to enable the presence of a backlink terminator. * @@ -477,11 +476,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const BACKLINKS_TERMINATOR_ENABLED = array( - 'key' => 'footnotes_inputfield_backlinks_terminator_enabled', - 'name' => 'Add a Terminal Punctuation to Backlinks', + 'key' => 'footnotes_inputfield_backlinks_terminator_enabled', + 'name' => 'Add a Terminal Punctuation to Backlinks', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -497,19 +496,19 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_TERMINATOR_OPTION = array( - 'key' => 'footnotes_inputfield_backlinks_terminator_option', - 'name' => 'Backlink Terminator Symbol', + 'key' => 'footnotes_inputfield_backlinks_terminator_option', + 'name' => 'Backlink Terminator Symbol', 'default_value' => 'period', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => array( 'period' => '.', // Unicode 1.0 name of RIGHT PARENTHESIS (represented as a left parenthesis in right-to-left scripts). 'parenthesis' => ')', 'colon' => ':', ), - 'enabled_by' => self::BACKLINKS_TERMINATOR_ENABLED, - 'overridden_by' => self::BACKLINKS_TERMINATOR_CUSTOM + 'enabled_by' => self::BACKLINKS_TERMINATOR_ENABLED, + 'overridden_by' => self::BACKLINKS_TERMINATOR_CUSTOM, ); /** @@ -525,15 +524,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_TERMINATOR_CUSTOM = array( - 'key' => 'footnotes_inputfield_backlinks_terminator_custom', - 'name' => 'Custom Backlink Terminator Symbol', + 'key' => 'footnotes_inputfield_backlinks_terminator_custom', + 'name' => 'Custom Backlink Terminator Symbol', 'description' => 'Your input overrides the selection.', - 'default_value' => null, - 'type' => 'string', - 'input_type' => 'text', - 'enabled_by' => self::BACKLINKS_TERMINATOR_ENABLED + 'type' => 'string', + 'input_type' => 'text', + 'enabled_by' => self::BACKLINKS_TERMINATOR_ENABLED, ); - + /** * Settings container key to enable the backlinks column width. * @@ -548,11 +546,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const BACKLINKS_COLUMN_WIDTH_ENABLED = array( - 'key' => 'footnotes_inputfield_backlinks_column_width_enabled', - 'name' => 'Set Backlinks Column Width', + 'key' => 'footnotes_inputfield_backlinks_column_width_enabled', + 'name' => 'Set Backlinks Column Width', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -568,14 +566,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_COLUMN_WIDTH_SCALAR = array( - 'key' => 'footnotes_inputfield_backlinks_column_width_scalar', - 'name' => 'Backlinks Column Width', + 'key' => 'footnotes_inputfield_backlinks_column_width_scalar', + 'name' => 'Backlinks Column Width', 'default_value' => 50, - 'type' => 'number', - 'input_type' => 'number', - 'input_max' => 500, - 'input_min' => 0, - 'enabled_by' => self::BACKLINKS_COLUMN_WIDTH_ENABLED + 'type' => 'number', + 'input_type' => 'number', + 'input_max' => 500, + 'input_min' => 0, + 'enabled_by' => self::BACKLINKS_COLUMN_WIDTH_ENABLED, ); /** @@ -591,16 +589,16 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_COLUMN_WIDTH_UNIT = array( - 'key' => 'footnotes_inputfield_backlinks_column_width_unit', - 'name' => 'Backlinks Column Width Unit', - 'description' => 'Absolute width in pixels doesn\'t need to be accurate to the tenth, but relative width in `rem` or `em` may.', + 'key' => 'footnotes_inputfield_backlinks_column_width_unit', + 'name' => 'Backlinks Column Width Unit', + 'description' => 'Absolute width in pixels doesn\'t need to be accurate to the tenth, but relative width in `rem` or `em` may.', 'default_value' => 'px', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => Settings::WIDTH_UNIT_OPTIONS, - 'enabled_by' => self::BACKLINKS_COLUMN_WIDTH_ENABLED + 'enabled_by' => self::BACKLINKS_COLUMN_WIDTH_ENABLED, ); - + /** * Settings container key to enable a max width for the backlinks column. * @@ -615,11 +613,11 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const BACKLINKS_COLUMN_MAX_WIDTH_ENABLED = array( - 'key' => 'footnotes_inputfield_backlinks_column_max_width_enabled', - 'name' => 'Set Backlinks Column Max. Width', + 'key' => 'footnotes_inputfield_backlinks_column_max_width_enabled', + 'name' => 'Set Backlinks Column Max. Width', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -635,14 +633,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_COLUMN_MAX_WIDTH_SCALAR = array( - 'key' => 'footnotes_inputfield_backlinks_column_max_width_scalar', - 'name' => 'Backlinks Column Width', + 'key' => 'footnotes_inputfield_backlinks_column_max_width_scalar', + 'name' => 'Backlinks Column Width', 'default_value' => 140, - 'type' => 'number', - 'input_type' => 'number', - 'input_max' => 500, - 'input_min' => 0, - 'enabled_by' => self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED + 'type' => 'number', + 'input_type' => 'number', + 'input_max' => 500, + 'input_min' => 0, + 'enabled_by' => self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED, ); /** @@ -658,16 +656,16 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert from `string` to `array`. */ const BACKLINKS_COLUMN_MAX_WIDTH_UNIT = array( - 'key' => 'footnotes_inputfield_backlinks_column_max_width_unit', - 'name' => 'Backlinks Column Width Unit', - 'description' => 'Absolute width in pixels doesn\'t need to be accurate to the tenth, but relative width in `rem` or `em` may.', + 'key' => 'footnotes_inputfield_backlinks_column_max_width_unit', + 'name' => 'Backlinks Column Width Unit', + 'description' => 'Absolute width in pixels doesn\'t need to be accurate to the tenth, but relative width in `rem` or `em` may.', 'default_value' => 'px', - 'type' => 'string', - 'input_type' => 'select', + 'type' => 'string', + 'input_type' => 'select', 'input_options' => Settings::WIDTH_UNIT_OPTIONS, - 'enabled_by' => self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED + 'enabled_by' => self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED, ); - + /** * Settings container key to enable line breaks between backlinks. * @@ -681,14 +679,14 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const BACKLINKS_LINE_BREAKS_ENABLED = array( - 'key' => 'footnotes_inputfield_backlinks_line_breaks_enabled', - 'name' => 'Stack Backlinks When Enumerating', - 'description' => 'This option adds a line break before each added backlink when identical footnotes are combined.', + 'key' => 'footnotes_inputfield_backlinks_line_breaks_enabled', + 'name' => 'Stack Backlinks When Enumerating', + 'description' => 'This option adds a line break before each added backlink when identical footnotes are combined.', 'default_value' => false, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); - + /** * Settings container key for the link element option. * @@ -700,12 +698,12 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * Convert setting data type from `string` to `boolean`. */ const LINK_ELEMENT_ENABLED = array( - 'key' => 'footnote_inputfield_link_element_enabled', - 'name' => 'Use the Link Element for Referrers and Backlinks', - 'description' => 'The link element is needed to apply the theme\'s link color. If the link element is not desired for styling, a simple span is used instead when the above is unchecked.', + 'key' => 'footnote_inputfield_link_element_enabled', + 'name' => 'Use the Link Element for Referrers and Backlinks', + 'description' => 'The link element is needed to apply the theme\'s link color. If the link element is not desired for styling, a simple span is used instead when the above is unchecked.', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); /** @@ -722,121 +720,52 @@ class ReferenceContainerSettingsGroup extends SettingsGroup { * @todo Un-deprecate or delete. */ const FOOTNOTES_EXPERT_MODE = array( - 'key' => 'footnote_inputfield_enable_expert_mode', - 'name' => 'Expert Mode', - 'description' => 'DEPRECATED', + 'key' => 'footnote_inputfield_enable_expert_mode', + 'name' => 'Expert Mode', + 'description' => 'DEPRECATED', 'default_value' => true, - 'type' => 'boolean', - 'input_type' => 'checkbox' + 'type' => 'boolean', + 'input_type' => 'checkbox', ); - - /** - * The general settings. - * - * @var Setting[] - * - * @since 2.8.0 - */ - protected array $settings; - - public function __construct( - /** - * Setting options group slug. - * - * @var string - * - * @since 2.8.0 - */ - protected string $options_group_slug, - - /** - * Setting section slug. - * - * @var string - * - * @since 2.8.0 - */ - protected string $section_slug - ) { - $this->load_dependencies(); - - $this->add_settings(get_option( $this->options_group_slug )); - } - - protected function load_dependencies(): void { - require_once plugin_dir_path( __DIR__ ) . 'class-setting.php'; - } - - protected function add_settings(array $options): void { + + protected function add_settings( array|false $options ): void { $this->settings = array( - self::REFERENCE_CONTAINER_NAME['key'] => $this->add_setting(self::REFERENCE_CONTAINER_NAME), - self::COMBINE_IDENTICAL_FOOTNOTES['key'] => $this->add_setting(self::COMBINE_IDENTICAL_FOOTNOTES), - self::REFERENCE_CONTAINER_NAME['key'] => $this->add_setting(self::REFERENCE_CONTAINER_NAME), - self::REFERENCE_CONTAINER_LABEL_ELEMENT['key'] => $this->add_setting(self::REFERENCE_CONTAINER_LABEL_ELEMENT), - self::REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER['key'] => $this->add_setting(self::REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER), - self::REFERENCE_CONTAINER_COLLAPSE['key'] => $this->add_setting(self::REFERENCE_CONTAINER_COLLAPSE), - self::FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE['key'] => $this->add_setting(self::FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE), - self::REFERENCE_CONTAINER_POSITION['key'] => $this->add_setting(self::REFERENCE_CONTAINER_POSITION), - self::REFERENCE_CONTAINER_POSITION_SHORTCODE['key'] => $this->add_setting(self::REFERENCE_CONTAINER_POSITION_SHORTCODE), - self::FOOTNOTE_SECTION_SHORTCODE['key'] => $this->add_setting(self::FOOTNOTE_SECTION_SHORTCODE), - self::REFERENCE_CONTAINER_START_PAGE_ENABLE['key'] => $this->add_setting(self::REFERENCE_CONTAINER_START_PAGE_ENABLE), - self::REFERENCE_CONTAINER_TOP_MARGIN['key'] => $this->add_setting(self::REFERENCE_CONTAINER_TOP_MARGIN), - self::REFERENCE_CONTAINER_BOTTOM_MARGIN['key'] => $this->add_setting(self::REFERENCE_CONTAINER_BOTTOM_MARGIN), - self::FOOTNOTES_PAGE_LAYOUT_SUPPORT['key'] => $this->add_setting(self::FOOTNOTES_PAGE_LAYOUT_SUPPORT), - self::FOOTNOTE_URL_WRAP_ENABLED['key'] => $this->add_setting(self::FOOTNOTE_URL_WRAP_ENABLED), - self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE['key'] => $this->add_setting(self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE), - self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH['key'] => $this->add_setting(self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH), - self::REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE['key'] => $this->add_setting(self::REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE), - self::REFERENCE_CONTAINER_ROW_BORDERS_ENABLE['key'] => $this->add_setting(self::REFERENCE_CONTAINER_ROW_BORDERS_ENABLE), - self::BACKLINKS_SEPARATOR_ENABLED['key'] => $this->add_setting(self::BACKLINKS_SEPARATOR_ENABLED), - self::BACKLINKS_SEPARATOR_OPTION['key'] => $this->add_setting(self::BACKLINKS_SEPARATOR_OPTION), - self::BACKLINKS_SEPARATOR_CUSTOM['key'] => $this->add_setting(self::BACKLINKS_SEPARATOR_CUSTOM), - self::BACKLINKS_TERMINATOR_ENABLED['key'] => $this->add_setting(self::BACKLINKS_TERMINATOR_ENABLED), - self::BACKLINKS_TERMINATOR_OPTION['key'] => $this->add_setting(self::BACKLINKS_TERMINATOR_OPTION), - self::BACKLINKS_TERMINATOR_CUSTOM['key'] => $this->add_setting(self::BACKLINKS_TERMINATOR_CUSTOM), - self::BACKLINKS_COLUMN_WIDTH_ENABLED['key'] => $this->add_setting(self::BACKLINKS_COLUMN_WIDTH_ENABLED), - self::BACKLINKS_COLUMN_WIDTH_SCALAR['key'] => $this->add_setting(self::BACKLINKS_COLUMN_WIDTH_SCALAR), - self::BACKLINKS_COLUMN_WIDTH_UNIT['key'] => $this->add_setting(self::BACKLINKS_COLUMN_WIDTH_UNIT), - self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED['key'] => $this->add_setting(self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED), - self::BACKLINKS_COLUMN_MAX_WIDTH_SCALAR['key'] => $this->add_setting(self::BACKLINKS_COLUMN_MAX_WIDTH_SCALAR), - 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) + self::REFERENCE_CONTAINER_NAME['key'] => $this->add_setting( self::REFERENCE_CONTAINER_NAME ), + self::COMBINE_IDENTICAL_FOOTNOTES['key'] => $this->add_setting( self::COMBINE_IDENTICAL_FOOTNOTES ), + self::REFERENCE_CONTAINER_NAME['key'] => $this->add_setting( self::REFERENCE_CONTAINER_NAME ), + self::REFERENCE_CONTAINER_LABEL_ELEMENT['key'] => $this->add_setting( self::REFERENCE_CONTAINER_LABEL_ELEMENT ), + self::REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER['key'] => $this->add_setting( self::REFERENCE_CONTAINER_LABEL_BOTTOM_BORDER ), + self::REFERENCE_CONTAINER_COLLAPSE['key'] => $this->add_setting( self::REFERENCE_CONTAINER_COLLAPSE ), + self::FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE['key'] => $this->add_setting( self::FOOTNOTES_REFERENCE_CONTAINER_SCRIPT_MODE ), + self::REFERENCE_CONTAINER_POSITION['key'] => $this->add_setting( self::REFERENCE_CONTAINER_POSITION ), + self::REFERENCE_CONTAINER_POSITION_SHORTCODE['key'] => $this->add_setting( self::REFERENCE_CONTAINER_POSITION_SHORTCODE ), + self::FOOTNOTE_SECTION_SHORTCODE['key'] => $this->add_setting( self::FOOTNOTE_SECTION_SHORTCODE ), + self::REFERENCE_CONTAINER_START_PAGE_ENABLE['key'] => $this->add_setting( self::REFERENCE_CONTAINER_START_PAGE_ENABLE ), + self::REFERENCE_CONTAINER_TOP_MARGIN['key'] => $this->add_setting( self::REFERENCE_CONTAINER_TOP_MARGIN ), + self::REFERENCE_CONTAINER_BOTTOM_MARGIN['key'] => $this->add_setting( self::REFERENCE_CONTAINER_BOTTOM_MARGIN ), + self::FOOTNOTES_PAGE_LAYOUT_SUPPORT['key'] => $this->add_setting( self::FOOTNOTES_PAGE_LAYOUT_SUPPORT ), + self::FOOTNOTE_URL_WRAP_ENABLED['key'] => $this->add_setting( self::FOOTNOTE_URL_WRAP_ENABLED ), + self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE['key'] => $this->add_setting( self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_ENABLE ), + self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH['key'] => $this->add_setting( self::REFERENCE_CONTAINER_BACKLINK_SYMBOL_SWITCH ), + self::REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE['key'] => $this->add_setting( self::REFERENCE_CONTAINER_3COLUMN_LAYOUT_ENABLE ), + self::REFERENCE_CONTAINER_ROW_BORDERS_ENABLE['key'] => $this->add_setting( self::REFERENCE_CONTAINER_ROW_BORDERS_ENABLE ), + self::BACKLINKS_SEPARATOR_ENABLED['key'] => $this->add_setting( self::BACKLINKS_SEPARATOR_ENABLED ), + self::BACKLINKS_SEPARATOR_OPTION['key'] => $this->add_setting( self::BACKLINKS_SEPARATOR_OPTION ), + self::BACKLINKS_SEPARATOR_CUSTOM['key'] => $this->add_setting( self::BACKLINKS_SEPARATOR_CUSTOM ), + self::BACKLINKS_TERMINATOR_ENABLED['key'] => $this->add_setting( self::BACKLINKS_TERMINATOR_ENABLED ), + self::BACKLINKS_TERMINATOR_OPTION['key'] => $this->add_setting( self::BACKLINKS_TERMINATOR_OPTION ), + self::BACKLINKS_TERMINATOR_CUSTOM['key'] => $this->add_setting( self::BACKLINKS_TERMINATOR_CUSTOM ), + self::BACKLINKS_COLUMN_WIDTH_ENABLED['key'] => $this->add_setting( self::BACKLINKS_COLUMN_WIDTH_ENABLED ), + self::BACKLINKS_COLUMN_WIDTH_SCALAR['key'] => $this->add_setting( self::BACKLINKS_COLUMN_WIDTH_SCALAR ), + self::BACKLINKS_COLUMN_WIDTH_UNIT['key'] => $this->add_setting( self::BACKLINKS_COLUMN_WIDTH_UNIT ), + self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED['key'] => $this->add_setting( self::BACKLINKS_COLUMN_MAX_WIDTH_ENABLED ), + self::BACKLINKS_COLUMN_MAX_WIDTH_SCALAR['key'] => $this->add_setting( self::BACKLINKS_COLUMN_MAX_WIDTH_SCALAR ), + 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 ), ); - } - - private function add_setting(array $setting): Setting { - extract( $setting ); - - return new Setting( - self::GROUP_ID, - $this->options_group_slug, - $this->section_slug, - $key, - $name, - $description ?? null, - $default_value, - $type, - $input_type, - $input_options ?? null, - $input_max ?? null, - $input_min ?? null, - $enabled_by['key'] ?? null, - $overridden_by['key'] ?? null - ); - } - - public function add_settings_fields($component): void { - foreach ($this->settings as $setting) { - add_settings_field( - $setting->key, - __( $setting->name, 'footnotes' ), - array ($component, 'setting_field_callback'), - 'footnotes', - $setting->get_section_slug(), - $setting->get_setting_field_args() - ); - } + + $this->load_values( $options ); } } diff --git a/src/includes/settings/general/class-scrolling-settings-group.php b/src/includes/settings/general/class-scrolling-settings-group.php new file mode 100644 index 0000000..04dd4c3 --- /dev/null +++ b/src/includes/settings/general/class-scrolling-settings-group.php @@ -0,0 +1,189 @@ + 'footnotes_inputfield_css_smooth_scrolling', + 'name' => 'CSS-based Smooth Scrolling', + 'description' => 'May slightly disturb jQuery scrolling and is therefore disabled by default. Works in recent browsers.', + 'default_value' => false, + 'type' => 'boolean', + 'input_type' => 'checkbox', + ); + + /** + * Settings container key for scroll-up delay. + * + * @var array + * + * @since 2.5.11 + * @since 2.8.0 Move from `Settings` to `ScrollingSettingsGroup`. + * Convert from `int` to `array`. + */ + const FOOTNOTES_SCROLL_UP_DELAY = array( + 'key' => 'footnotes_inputfield_scroll_up_delay', + 'name' => 'Scroll-up Delay', + 'description' => 'milliseconds. Less useful than the scroll-down delay.', + 'default_value' => 0, + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 0, + 'input_min' => 20000, + ); + + /** + * Settings container key for scroll-down delay. + * + * @var array + * + * @since 2.5.11 + * @since 2.8.0 Move from `Settings` to `ScrollingSettingsGroup`. + * Convert from `int` to `array`. + */ + const FOOTNOTES_SCROLL_DOWN_DELAY = array( + 'key' => 'footnotes_inputfield_scroll_down_delay', + 'name' => 'Scroll-down Delay', + 'description' => 'milliseconds. Useful to see the effect on input elements when referrers without hard links are clicked in form labels.', + 'default_value' => 0, + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 0, + 'input_min' => 20000, + ); + + /** + * Settings container key for scroll offset. + * + * @var array + * + * @since 2.1.4 + * @since 2.8.0 Move from `Settings` to `ScrollingSettingsGroup`. + * Convert from `int` to `array`. + */ + const FOOTNOTES_SCROLL_OFFSET = array( + 'key' => 'footnotes_inputfield_scroll_offset', + 'name' => 'Scroll Offset', + 'description' => 'per cent viewport height from the upper edge', + 'default_value' => 20, + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 0, + 'input_min' => 100, + ); + + /** + * Settings container key for scroll duration. + * + * @var array + * + * @since 2.1.4 + * @since 2.8.0 Move from `Settings` to `ScrollingSettingsGroup`. + * Convert from `int` to `array`. + */ + const FOOTNOTES_SCROLL_DURATION = array( + 'key' => 'footnotes_inputfield_scroll_duration', + 'name' => 'Scroll Duration', + 'description' => 'milliseconds. If asymmetric scroll durations are enabled, this is the scroll-up duration.', + 'default_value' => 380, + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 0, + 'input_min' => 20000, + ); + + /** + * Settings container key for scroll duration asymmetricity + * + * @var array + * + * @since 2.5.11 + * @since 2.8.0 Move from `Settings` to `ScrollingSettingsGroup`. + * Convert from `int` to `array`. + * Convert setting data type from `string` to `boolean`. + */ + const FOOTNOTES_SCROLL_DURATION_ASYMMETRICITY = array( + 'key' => 'footnotes_inputfield_scroll_duration_asymmetricity', + 'name' => 'Enable Asymmetric Scroll Durations', + 'description' => 'With this option enabled, scrolling up may take longer than down, or conversely.', + 'default_value' => false, + 'type' => 'boolean', + 'input_type' => 'checkbox', + ); + + /** + * Settings container key for scroll duration. + * + * @var array + * + * @since 2.1.11 + * @since 2.8.0 Move from `Settings` to `ScrollingSettingsGroup`. + * Convert from `int` to `array`. + */ + const FOOTNOTES_SCROLL_DOWN_DURATION = array( + 'key' => 'footnotes_inputfield_scroll_down_duration', + 'name' => 'Scroll-down Duration', + 'description' => 'milliseconds', + 'default_value' => 150, + 'type' => 'integer', + 'input_type' => 'number', + 'input_max' => 0, + 'input_min' => 20000, + 'enabled_by' => self::FOOTNOTES_SCROLL_DURATION_ASYMMETRICITY, + ); + + protected function add_settings( array|false $options ): void { + $this->settings = array( + self::FOOTNOTES_CSS_SMOOTH_SCROLLING['key'] => $this->add_setting( self::FOOTNOTES_CSS_SMOOTH_SCROLLING ), + self::FOOTNOTES_SCROLL_UP_DELAY['key'] => $this->add_setting( self::FOOTNOTES_SCROLL_UP_DELAY ), + self::FOOTNOTES_SCROLL_DOWN_DELAY['key'] => $this->add_setting( self::FOOTNOTES_SCROLL_DOWN_DELAY ), + self::FOOTNOTES_SCROLL_OFFSET['key'] => $this->add_setting( self::FOOTNOTES_SCROLL_OFFSET ), + self::FOOTNOTES_SCROLL_DURATION['key'] => $this->add_setting( self::FOOTNOTES_SCROLL_DURATION ), + self::FOOTNOTES_SCROLL_DURATION_ASYMMETRICITY['key'] => $this->add_setting( self::FOOTNOTES_SCROLL_DURATION_ASYMMETRICITY ), + self::FOOTNOTES_SCROLL_DOWN_DURATION['key'] => $this->add_setting( self::FOOTNOTES_SCROLL_DOWN_DURATION ), + ); + + $this->load_values( $options ); + } +} diff --git a/src/includes/settings/general/class-shortcode-settings-group.php b/src/includes/settings/general/class-shortcode-settings-group.php new file mode 100644 index 0000000..345a998 --- /dev/null +++ b/src/includes/settings/general/class-shortcode-settings-group.php @@ -0,0 +1,156 @@ + 'footnotes_inputfield_shortcode_syntax_validation_enable', + 'name' => 'Check for Balanced Shortcodes', + 'description' => 'In the presence of a lone start tag shortcode, a warning displays below the post title. If the start tag short code is (( or (((, it will not be reported as unbalanced if the following string contains braces hinting that it is a script.', + 'default_value' => true, + 'type' => 'boolean', + 'input_type' => 'checkbox', + ); + + /** + * Settings container key for the short code of the footnote's start. + * + * @var array + * + * @since 1.5.0 + * @since 2.8.0 Move from `Settings` to `ShortcodeSettingsGroup`. + * Convert from `string` to `array`. + */ + const FOOTNOTES_SHORT_CODE_START = array( + 'key' => 'footnote_inputfield_placeholder_start', + 'name' => 'Footnote Start Tag Short Code', + 'description' => 'When delimiters with pointy brackets are used, the diverging escapement schemas will be unified before footnotes are processed. WARNING: Although widespread industry standard, the double parentheses are problematic because they may occur in scripts embedded in the content and be mistaken as a short code.', + 'default_value' => '((', + 'type' => 'string', + 'input_type' => 'select', + 'input_options' => array( + '((' => '((', + '(((' => '(((', + '{{' => '{{', + '{{{' => '{{{', + '[n]' => '[n]', + '[fn]' => '[fn]', + '' => '<fn>', + '' => '<ref>', + 'userdefined' => 'custom short code', + ), + ); + + /** + * Settings container key for the user-defined short code of the footnotes start. + * + * @var array + * + * @since 1.5.0 + * @since 2.8.0 Move from `Settings` to `ShortcodeSettingsGroup`. + * Convert from `string` to `array`. + */ + const FOOTNOTES_SHORT_CODE_START_USER_DEFINED = array( + 'key' => 'footnote_inputfield_placeholder_start_user_defined', + 'name' => 'User-defined Start Shortcode', + 'type' => 'string', + 'input_type' => 'text', + 'enabled_by' => self::FOOTNOTES_SHORT_CODE_START, + ); + + /** + * Settings container key for the short code of the footnote's end. + * + * @var array + * + * @since 1.5.0 + * @since 2.8.0 Move from `Settings` to `ShortcodeSettingsGroup`. + * Convert from `string` to `array`. + */ + const FOOTNOTES_SHORT_CODE_END = array( + 'key' => 'footnote_inputfield_placeholder_end', + 'name' => 'Footnote End Tag Short Code', + 'default_value' => '))', + 'type' => 'string', + 'input_type' => 'select', + 'input_options' => array( + '))' => '))', + ')))' => ')))', + '}}' => '}}', + '}}}' => '}}}', + '[/n]' => '[/n]', + '[/fn]' => '[/fn]', + '' => '</fn>', + '' => '</ref>', + 'userdefined' => 'custom short code', + ), + ); + + /** + * Settings container key for the user-defined short code of the footnotes end. + * + * @var array + * + * @since 1.5.0 + * @since 2.8.0 Move from `Settings` to `ShortcodeSettingsGroup`. + * Convert from `string` to `array`. + */ + const FOOTNOTES_SHORT_CODE_END_USER_DEFINED = array( + 'key' => 'footnote_inputfield_placeholder_end_user_defined', + 'name' => 'User-defined End Shortcode', + 'type' => 'string', + 'input_type' => 'text', + 'enabled_by' => self::FOOTNOTES_SHORT_CODE_END, + ); + + protected function add_settings( array|false $options ): void { + $this->settings = array( + self::FOOTNOTE_SHORTCODE_SYNTAX_VALIDATION_ENABLE['key'] => $this->add_setting( self::FOOTNOTE_SHORTCODE_SYNTAX_VALIDATION_ENABLE ), + self::FOOTNOTES_SHORT_CODE_START['key'] => $this->add_setting( self::FOOTNOTES_SHORT_CODE_START ), + self::FOOTNOTES_SHORT_CODE_START_USER_DEFINED['key'] => $this->add_setting( self::FOOTNOTES_SHORT_CODE_START_USER_DEFINED ), + self::FOOTNOTES_SHORT_CODE_END['key'] => $this->add_setting( self::FOOTNOTES_SHORT_CODE_END ), + self::FOOTNOTES_SHORT_CODE_END_USER_DEFINED['key'] => $this->add_setting( self::FOOTNOTES_SHORT_CODE_END_USER_DEFINED ), + ); + + $this->load_values( $options ); + } +}