Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentformpro/src/Components/ColorPicker.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + namespace FluentFormPro\Components;
3 +
4 + if ( ! defined( 'ABSPATH' ) ) {
5 + exit; // Exit if accessed directly.
6 + }
7 +
8 + use FluentForm\App\Helpers\Helper;
9 + use FluentForm\App\Services\FormBuilder\BaseFieldManager;
10 + use FluentForm\Framework\Helpers\ArrayHelper;
11 +
12 + class ColorPicker extends BaseFieldManager
13 + {
14 + public function __construct()
15 + {
16 + parent::__construct(
17 + 'color_picker',
18 + 'Color Picker',
19 + ['color', 'picker'],
20 + 'advanced'
21 + );
22 + }
23 +
24 + function getComponent()
25 + {
26 + return [
27 + 'index' => 15,
28 + 'element' => $this->key,
29 + 'attributes' => [
30 + 'name' => $this->key,
31 + 'class' => '',
32 + 'value' => '',
33 + 'type' => 'text',
34 + 'placeholder' => __('Choose Color', 'fluentformpro')
35 + ],
36 + 'settings' => [
37 + 'container_class' => '',
38 + 'placeholder' => '',
39 + 'label' => $this->title,
40 + 'label_placement' => '',
41 + 'help_message' => '',
42 + 'admin_field_label' => '',
43 + 'validation_rules' => [
44 + 'required' => [
45 + 'value' => false,
46 + 'global' => true,
47 + 'message' => Helper::getGlobalDefaultMessage('required'),
48 + 'global_message' => Helper::getGlobalDefaultMessage('required'),
49 + ]
50 + ],
51 + 'conditional_logics' => []
52 + ],
53 + 'editor_options' => [
54 + 'title' => $this->title,
55 + 'icon_class' => 'ff-edit-tint',
56 + 'template' => 'inputText'
57 + ],
58 + ];
59 + }
60 +
61 + public function getGeneralEditorElements()
62 + {
63 + return [
64 + 'label',
65 + 'admin_field_label',
66 + 'placeholder',
67 + 'value',
68 + 'label_placement',
69 + 'validation_rules',
70 + ];
71 + }
72 +
73 +
74 + public function render($data, $form)
75 + {
76 + $elementName = $data['element'];
77 +
78 + $data = apply_filters_deprecated(
79 + 'fluentform_rendering_field_data_' . $elementName,
80 + [
81 + $data,
82 + $form
83 + ],
84 + FLUENTFORM_FRAMEWORK_UPGRADE,
85 + 'fluentform/rendering_field_data_' . $elementName,
86 + 'Use fluentform/rendering_field_data_' . $elementName . ' instead of fluentform_rendering_field_data_' . $elementName
87 + );
88 +
89 + $data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form);
90 +
91 + $data['attributes']['class'] = @trim('ff-el-form-control ff-el-color ' . $data['attributes']['class']);
92 + $data['attributes']['id'] = $this->makeElementId($data, $form);
93 + $data['attributes']['readonly'] = 'true';
94 + if ($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
95 + $data['attributes']['tabindex'] = $tabIndex;
96 + }
97 +
98 + $ariaRequired = 'false';
99 + if (ArrayHelper::get($data, 'settings.validation_rules.required.value')) {
100 + $ariaRequired = 'true';
101 + }
102 +
103 + $elMarkup = "<input " . $this->buildAttributes($data['attributes'], $form) . " aria-invalid='false' aria-required={$ariaRequired}>";
104 +
105 + $html = $this->buildElementMarkup($elMarkup, $data, $form);
106 + $this->pushScripts($data, $form);
107 +
108 + $html = apply_filters_deprecated(
109 + 'fluentform_rendering_field_html_' . $elementName,
110 + [
111 + $html,
112 + $data,
113 + $form
114 + ],
115 + FLUENTFORM_FRAMEWORK_UPGRADE,
116 + 'fluentform/rendering_field_html_' . $elementName,
117 + 'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform_rendering_field_html_' . $elementName
118 + );
119 +
120 + echo apply_filters('fluentform/rendering_field_html_' . $elementName, $html, $data, $form);
121 + }
122 +
123 + private function pushScripts($data, $form)
124 + {
125 +
126 + // We can add assets for this field
127 + wp_enqueue_style('pickr');
128 + wp_enqueue_script('pickr');
129 +
130 + add_action('wp_footer', function () use ($data, $form) {
131 + ?>
132 + <script type="text/javascript">
133 + jQuery(document).ready(function ($) {
134 + function initColorPicker() {
135 + var pickr = Pickr.create({
136 + el: '#<?php echo $data['attributes']['id']; ?>',
137 + theme: 'monolith', // or 'monolith', or 'nano'
138 + useAsButton: true,
139 + swatches: null,
140 + default: '<?php echo ($data['attributes']['value']) ? $data['attributes']['value'] : '#693030'; ?>',
141 + comparison: false,
142 + lockOpacity: true,
143 + autoReposition: false,
144 + position: 'bottom-end',
145 +
146 + components: {
147 + // Main components
148 + palette: true,
149 + preview: true,
150 + opacity: true,
151 + hue: true,
152 +
153 + // Input / output Options
154 + interaction: {
155 + hex: false,
156 + rgba: false,
157 + hsla: false,
158 + hsva: false,
159 + cmyk: false,
160 + input: true,
161 + clear: true,
162 + save: true
163 + }
164 + },
165 + strings: {
166 + save: '<?php _e('Save', 'fluentformpro');?>', // Default for save button
167 + clear: '<?php _e('Clear', 'fluentformpro');?>', // Default for clear button
168 + cancel: '<?php _e('Cancel', 'fluentformpro');?>' // Default for cancel button
169 + }
170 + });
171 +
172 + pickr.on('save', function (color, instance) {
173 + if(!color) {
174 + jQuery(instance._root.button).val('');
175 + } else {
176 + jQuery(instance._root.button).val(color.toHEXA().toString());
177 + }
178 + pickr.hide();
179 + });
180 + }
181 +
182 +
183 + initColorPicker();
184 + $(document).on('reInitExtras', '.<?php echo $form->instance_css_class; ?>', function () {
185 + initColorPicker();
186 + });
187 + });
188 + </script>
189 + <?php
190 + }, 9999);
191 + }
192 + }
193 +