JFIF $ d d 7 * Z qn )ZP 0 !1 A "#a$2Qr D8 a Ri [f \m I ykI w0 c u F c Rı?lO7 к _f˓ [C $殷WF< _W ԣ s Kc ëI zyQy /_LK ℂ ;C",p F A : /] =H ~ , l s / 9 ć: [=/#f ; ) x { ٛE Q )~ = 𘙲r*2~ a _V = ' ku m F D } KYYC )( { * g& f `툪 r y ` = ^ c J. I ]( * `wq 1dđ #̩ ͑ 0 ; H ] u 搂 @:~ ו K L N s h } O I R* 8 :2 ! lD JV o ( 3 = M ( z Ȱ+i *N A r6K n S l ) ! J J Ӂ* % ݉?|D } d5: eP0 R; {$X' x F @ .ÊB {,WJ uQ ɲRI ;9 Q E琯 6 2fT .DU J ;*c P A\IL Nj! J ۱+ O\ ͔ ] ޒ S J ȧ c%A N ol ՎprU L Zԛe r E2= X D Xg VQeӓ k y P7 U* o m Q I s ,K `) 6\G3t?pgjr m ۛجw luGt f h 9uyP 0D;Uڽ"OXl i f $ ) &|ML 0 Z rm1 [ H XP l P R0 'G=i 2N +0 e 2 ]] 9 VT P O 7 h(F * 癈 ' = Q VZD F,d ߬ ~ T X G[ `le 69C R(!S2! P < 0 x < !1AQ "Raq 02Br #S CTb ? Ζ "]mH5WR 7 k.ۛ ! } Q~ + yԏ z |@ T20 S~ K e k *zF f^2X *( @ 8 r ? C I uI|֓>^Ex LgNU Y+{.R Ѫ τV YT D I 6 2 '8Y2 7'\T P.6 d &˦ @V q i |8 -O Ε ] ʔ U= T L 8= ;6c | !qfF3 a ů& ~$ l} 'NW U s$U k^S V : U#6w + +s &r+n ڐ { @ 29gL u " T Ù M=6 (^ "7 r}=6Yݾ lC u hquymp Ǧ G jhs ǜNl ɻ} o 7 #S6 a w 4 ! OS r D 5 7 % | ?x> L | / nD 6?/8 w # [ ) L 7 +6〼T A T g ! %5 Mm Z /c -{1_Je "| ^$ 'O & ޱմ < H vNqϡQ$ < 6 &Nݛ ֨tǻN (9 n ru~'όN sMG& ,uH Kw *Ī 5@ u6 BԒ i YN * f 0 _ GhKW u lT <nj- 0{ M L~ | /a v\ E = ?1 \ɟuq Ђ Y O a K ޡP q $ H8o Q˼EV ~ k 0 h' L Pp M -M" m^ !6l nմ 쮝C U T . ! :vMǨb h ډ Vc r @~p # !1QAa q ? AL0L x LU 4 d ; x " 16ad0 7.\ߋ 0 = P l v/ " c A Ay A|2pO8"d MV #1] = \ " ˡ ] k v I9 d ۓ & q ) ǐq E ꞅ v "P )q X &Q З non]я u ג./ ; gZ$ M QР 2M ]h ni 0 P $ێ 3CɏGjώy : m c # S_ l@ '_ \m|C 2`K _ 1 cIvGc $? PCQ S+D ? K aײ k Fr b 8 ύ NEدg ĝ U 3 6 #Ik+ v { v i ( ވ ? a e) X xy/*@Q Ǽ Ծ ) $ IWO l c G; !i k{ gOŀ L ('x T rb $ w) R $ & N1E td U3Uȉ1p M"N* (DNy d96.(jQ) X 5 c QɎMy W ? Q *!R > 6=7)Xj 5`J ] e 8%t ! + ' ! 1Q 5 !1 AQaq ё #2 "0BRb ? G t^ ## .l lQ T $ v , ,m 㵜5u bV =sY+ @d { N ! dn O < .- B; _w J t 6;Q Jd. Q c%p{ 1 ,sND dF H I0 Гo X ш e黅X ۢ F :)[ F G X ƹ / w _c MeD ,ʡc c . W D tA $ j@ : ) - #u c1< @ۗ9F ) KJ- hpP] _ x [ q B lb p ʖ w q " LFGd ƶ * s +ډ_Zc " ? % t[I P 6 J ]# =ɺ V v v CGs Gh1 > )6 |e y ? L ӣ m,4 G W Ui ` ] uJVo VDG< SB 6ϏQ @ TiU l y O U 0 kfV ~ ~}S Z @ *WU Ui ## ; s /[ = ! 7}" W N ] ' (L ! ~ y5 g9T̅J kbM' +s :S +B) v @ M j e C f j E 0 Y\Qn z G 1 д~ W o{T 9?` Rm yhsy3 !HAD ] m c1 ~ 2 L S u7x T ;j$ `} 4-> L# vzŏ I L S ֭ T { r jGK C ; b pU= - ` Bs K. S F w4 M q] Z dH S 0 ) tLg
<?php
namespace Code_Snippets\Settings;
use function Code_Snippets\code_snippets;
/**
* Plugin settings fields definitions.
*
* This class defines the settings fields and their default values for the Code Snippets plugin.
* It provides methods to retrieve the settings fields and default values.
*
* @package Code_Snippets\Settings
*/
class Settings_Fields {
/**
* Instance of this class.
*
* @var Settings_Fields
*/
private static Settings_Fields $instance;
/**
* The settings fields definitions.
*
* @var array<string, array<string, array>>
*/
private array $fields;
/**
* The default settings values.
*
* @var array<string, array<string, mixed>>
*/
private array $defaults;
/**
* Constructor.
*
* Initializes the settings fields and default values.
*/
public function __construct() {
$this->init_fields();
$this->init_defaults();
}
/**
* Retrieve the instance of this class.
*
* @return Settings_Fields
*/
private static function get_instance(): Settings_Fields {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Retrieve the default setting values
*
* @return array<string, array<string, mixed>>
*/
public static function get_default_values(): array {
return self::get_instance()->defaults;
}
/**
* Retrieve the settings fields.
*
* @return array<string, array<string, array>>
*/
public static function get_field_definitions(): array {
return self::get_instance()->fields;
}
/**
* Initialise default settings values.
*
* @return void
*/
private function init_defaults() {
$this->defaults = [
'general' => [
'activate_by_default' => true,
'enable_tags' => true,
'enable_description' => true,
'visual_editor_rows' => 5,
'list_order' => 'priority-asc',
'disable_prism' => false,
'hide_upgrade_menu' => false,
'complete_uninstall' => false,
'enable_flat_files' => false,
'enable_admin_bar' => true,
'admin_bar_snippet_limit' => 20,
],
'editor' => [
'indent_with_tabs' => true,
'tab_size' => 4,
'indent_unit' => 4,
'font_size' => 14,
'wrap_lines' => true,
'code_folding' => true,
'line_numbers' => true,
'auto_close_brackets' => true,
'highlight_selection_matches' => true,
'highlight_active_line' => true,
'keymap' => 'default',
'theme' => 'default',
],
'version-switch' => [
'selected_version' => '',
],
'debug' => [
'enable_version_change' => false,
],
];
$this->defaults = apply_filters( 'code_snippets_settings_defaults', $this->defaults );
}
/**
* Initialise the settings fields values.
*
* @return void
*/
private function init_fields() {
$this->fields = [];
$this->fields['debug'] = [
'database_update' => [
'name' => __( 'Database Table Upgrade', 'code-snippets' ),
'type' => 'action',
'label' => __( 'Upgrade Database Table', 'code-snippets' ),
'desc' => __( 'Use this button to manually upgrade the Code Snippets database table. This action will only affect the snippets table and should be used only when necessary.', 'code-snippets' ),
],
'reset_caches' => [
'name' => __( 'Reset Caches', 'code-snippets' ),
'type' => 'action',
'desc' => __( 'Use this button to manually clear snippets caches. Worth doing before switching to an older version of the plugin, if your site uses a persistent object cache.', 'code-snippets' ),
],
'enable_version_change' => [
'name' => __( 'Version Change', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Enable the ability to switch or rollback versions of the Code Snippets core plugin.', 'code-snippets' ),
],
];
$this->fields['version-switch'] = [
'version_switcher' => [
'name' => __( 'Switch Version', 'code-snippets' ),
'type' => 'callback',
'render_callback' => [ '\\Code_Snippets\\Settings\\Version_Switch', 'render_version_switch_field' ],
],
'refresh_versions' => [
'name' => __( 'Refresh Versions', 'code-snippets' ),
'type' => 'callback',
'render_callback' => [ '\\Code_Snippets\\Settings\\Version_Switch', 'render_refresh_versions_field' ],
],
'version_warning' => [
'name' => '',
'type' => 'callback',
'render_callback' => [ '\\Code_Snippets\\Settings\\Version_Switch', 'render_version_switch_warning' ],
],
];
$this->fields['general'] = [
'activate_by_default' => [
'name' => __( 'Activate by Default', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( "Make the 'Save and Activate' button the default action when saving a snippet.", 'code-snippets' ),
],
'enable_tags' => [
'name' => __( 'Enable Snippet Tags', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Show snippet tags on admin pages.', 'code-snippets' ),
],
'enable_description' => [
'name' => __( 'Enable Snippet Descriptions', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Show snippet descriptions on admin pages.', 'code-snippets' ),
],
'visual_editor_rows' => [
'name' => __( 'Description Editor Height', 'code-snippets' ),
'type' => 'number',
'label' => _x( 'rows', 'unit', 'code-snippets' ),
'min' => 0,
],
'list_order' => [
'name' => __( 'Snippets List Order', 'code-snippets' ),
'type' => 'select',
'desc' => __( 'Default way to order snippets on the All Snippets admin menu.', 'code-snippets' ),
'options' => [
'priority-asc' => __( 'Priority', 'code-snippets' ),
'name-asc' => __( 'Name (A-Z)', 'code-snippets' ),
'name-desc' => __( 'Name (Z-A)', 'code-snippets' ),
'modified-desc' => __( 'Modified (latest first)', 'code-snippets' ),
'modified-asc' => __( 'Modified (oldest first)', 'code-snippets' ),
],
],
'disable_prism' => [
'name' => __( 'Disable Syntax Highlighter', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Disable syntax highlighting when displaying snippet code on the front-end.', 'code-snippets' ),
],
];
if ( ! code_snippets()->licensing->is_licensed() ) {
$this->fields['general']['hide_upgrade_menu'] = [
'name' => __( 'Hide Upgrade Notices', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Hide notices inviting you to upgrade to Code Snippets Pro.', 'code-snippets' ),
];
}
if ( ! is_multisite() || is_main_site() ) {
$this->fields['general']['complete_uninstall'] = [
'name' => __( 'Complete Uninstall', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'When the plugin is deleted from the Plugins menu, also delete all snippets and plugin settings.', 'code-snippets' ),
];
}
$this->fields['general']['enable_admin_bar'] = [
'name' => __( 'Enable Admin Bar Menu', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Show a Snippets menu in the admin bar for quick access to snippets.', 'code-snippets' ),
];
$this->fields['general']['admin_bar_snippet_limit'] = [
'name' => __( 'Admin Bar Snippets Per Page', 'code-snippets' ),
'type' => 'number',
'desc' => __( 'Number of snippets to show in the admin bar Active/Inactive menus before paginating.', 'code-snippets' ),
'label' => __( 'snippets', 'code-snippets' ),
'min' => 1,
'max' => 100,
'show_if' => [
'section' => 'general',
'field' => 'enable_admin_bar',
'value' => true,
],
];
$this->fields['editor'] = [
'indent_with_tabs' => [
'name' => __( 'Indent With Tabs', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Use hard tabs instead of spaces for indentation.', 'code-snippets' ),
'codemirror' => 'indentWithTabs',
],
'tab_size' => [
'name' => __( 'Tab Size', 'code-snippets' ),
'type' => 'number',
'desc' => __( 'The width of a tab character.', 'code-snippets' ),
'label' => _x( 'spaces', 'unit', 'code-snippets' ),
'codemirror' => 'tabSize',
'min' => 0,
],
'indent_unit' => [
'name' => __( 'Indent Unit', 'code-snippets' ),
'type' => 'number',
'desc' => __( 'The number of spaces to indent a block.', 'code-snippets' ),
'label' => _x( 'spaces', 'unit', 'code-snippets' ),
'codemirror' => 'indentUnit',
'min' => 0,
],
'font_size' => [
'name' => __( 'Font Size', 'code-snippets' ),
'type' => 'number',
'label' => _x( 'px', 'unit', 'code-snippets' ),
'codemirror' => 'fontSize',
'min' => 8,
'max' => 28,
],
'wrap_lines' => [
'name' => __( 'Wrap Lines', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Soft-wrap long lines of code instead of horizontally scrolling.', 'code-snippets' ),
'codemirror' => 'lineWrapping',
],
'code_folding' => [
'name' => __( 'Code Folding', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Allow folding functions or other blocks into a single line.', 'code-snippets' ),
'codemirror' => 'foldGutter',
],
'line_numbers' => [
'name' => __( 'Line Numbers', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Show line numbers to the left of the editor.', 'code-snippets' ),
'codemirror' => 'lineNumbers',
],
'auto_close_brackets' => [
'name' => __( 'Auto Close Brackets', 'code-snippets' ),
'type' => 'checkbox',
'label' => __( 'Auto-close brackets and quotes when typed.', 'code-snippets' ),
'codemirror' => 'autoCloseBrackets',
],
'highlight_selection_matches' => [
'name' => __( 'Highlight Selection Matches', 'code-snippets' ),
'label' => __( 'Highlight all instances of a currently selected word.', 'code-snippets' ),
'type' => 'checkbox',
'codemirror' => 'highlightSelectionMatches',
],
'highlight_active_line' => [
'name' => __( 'Highlight Active Line', 'code-snippets' ),
'label' => __( 'Highlight the line that is currently being edited.', 'code-snippets' ),
'type' => 'checkbox',
'codemirror' => 'styleActiveLine',
],
'keymap' => [
'name' => __( 'Keymap', 'code-snippets' ),
'type' => 'select',
'desc' => __( 'The set of keyboard shortcuts to use in the code editor.', 'code-snippets' ),
'options' => [
'default' => __( 'Default', 'code-snippets' ),
'vim' => __( 'Vim', 'code-snippets' ),
'emacs' => __( 'Emacs', 'code-snippets' ),
'sublime' => __( 'Sublime Text', 'code-snippets' ),
],
'codemirror' => 'keyMap',
],
'theme' => [
'name' => __( 'Theme', 'code-snippets' ),
'type' => 'select',
'options' => Editor_Preview::get_editor_theme_list(),
'codemirror' => 'theme',
],
];
$this->fields = apply_filters( 'code_snippets_settings_fields', $this->fields );
}
}