PluginProbe
Elementor Website Builder – more than just a page builder / 3.32.3
Elementor Website Builder – more than just a page builder v3.32.3
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / includes / controls / icons.php

icons.php in Elementor Website Builder – more than just a page builder 3.32.3, at includes/controls/icons.php

240 lines 7.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor;
3
4 use Elementor\Modules\DynamicTags\Module as TagsModule;
5
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit; // Exit if accessed directly.
8 }
9
10 /**
11 * Elementor Icons control.
12 *
13 * A base control for creating a Icons chooser control.
14 * Used to select an Icon.
15 *
16 * Usage: @see https://developers.elementor.com/elementor-controls/icons-control
17 *
18 * @since 2.6.0
19 */
20 class Control_Icons extends Control_Base_Multiple {
21
22 /**
23 * Get media control type.
24 *
25 * Retrieve the control type, in this case `media`.
26 *
27 * @access public
28 * @since 2.6.0
29 * @return string Control type.
30 */
31 public function get_type() {
32 return 'icons';
33 }
34
35 /**
36 * Get Icons control default values.
37 *
38 * Retrieve the default value of the Icons control. Used to return the default
39 * values while initializing the Icons control.
40 *
41 * @access public
42 * @since 2.6.0
43 * @return array Control default value.
44 */
45 public function get_default_value() {
46 return [
47 'value' => '',
48 'library' => '',
49 ];
50 }
51
52 /**
53 * Render Icons control output in the editor.
54 *
55 * Used to generate the control HTML in the editor using Underscore JS
56 * template. The variables for the class are available using `data` JS
57 * object.
58 *
59 * @since 2.6.0
60 * @access public
61 */
62 public function content_template() {
63 ?>
64 <# if ( 'inline' === data.skin ) { #>
65 <?php $this->render_inline_skin(); ?>
66 <# } else { #>
67 <?php $this->render_media_skin(); ?>
68 <# } #>
69 <?php
70 }
71
72 public function render_media_skin() {
73 ?>
74 <div class="elementor-control-field elementor-control-media">
75 <label class="elementor-control-title">{{{ data.label }}}</label>
76 <div class="elementor-control-input-wrapper">
77 <div class="elementor-control-media__content elementor-control-tag-area elementor-control-preview-area">
78 <div class="elementor-control-media-upload-button elementor-control-media__content__upload-button">
79 <i class="eicon-plus-circle" aria-hidden="true"></i>
80 <span class="elementor-screen-only"><?php echo esc_html__( 'Add', 'elementor' ); ?></span>
81 </div>
82 <div class="elementor-control-media-area">
83 <div class="elementor-control-media__remove elementor-control-media__content__remove" data-tooltip="<?php echo esc_attr__( 'Remove', 'elementor' ); ?>">
84 <i class="eicon-trash-o" aria-hidden="true"></i>
85 <span class="elementor-screen-only"><?php echo esc_html__( 'Remove', 'elementor' ); ?></span>
86 </div>
87 <div class="elementor-control-media__preview"></div>
88 </div>
89 <div class="elementor-control-media__tools elementor-control-dynamic-switcher-wrapper">
90 <div class="elementor-control-icon-picker elementor-control-media__tool"><?php echo esc_html__( 'Icon Library', 'elementor' ); ?></div>
91 <div class="elementor-control-svg-uploader elementor-control-media__tool"><?php echo esc_html__( 'Upload SVG', 'elementor' ); ?></div>
92 </div>
93 </div>
94 </div>
95 <# if ( data.description ) { #>
96 <div class="elementor-control-field-description">{{{ data.description }}}</div>
97 <# } #>
98 <input type="hidden" data-setting="{{ data.name }}"/>
99 </div>
100 <?php
101 }
102
103 public function render_inline_skin() {
104 ?>
105 <#
106 const defaultSkinSettings = {
107 none: {
108 label: '<?php echo esc_html__( 'None', 'elementor' ); ?>',
109 icon: 'eicon-ban',
110 },
111 svg: {
112 label: '<?php echo esc_html__( 'Upload SVG', 'elementor' ); ?>',
113 icon: 'eicon-upload',
114 },
115 icon: {
116 label: '<?php echo esc_html__( 'Icon Library', 'elementor' ); ?>',
117 icon: 'eicon-circle',
118 }
119 };
120
121 const skinSettings = data.skin_settings.inline;
122
123 const get = ( type, key ) => {
124 if ( skinSettings[ type ] ) {
125 return skinSettings[ type ]?.[ key ] || defaultSkinSettings[ type ][ key ];
126 }
127
128 return defaultSkinSettings[ type ][ key ];
129 }
130 #>
131 <div class="elementor-control-field elementor-control-inline-icon">
132 <label class="elementor-control-title">{{{ data.label }}}</label>
133 <div class="elementor-control-input-wrapper">
134 <div class="elementor-choices">
135 <# if ( ! data.exclude_inline_options.includes( 'none' ) ) { #>
136 <input id="<?php $this->print_control_uid(); ?>-none" type="radio" value="none">
137 <label class="elementor-choices-label elementor-control-unit-1 tooltip-target elementor-control-icons--inline__none" for="<?php $this->print_control_uid(); ?>-none" data-tooltip="{{ get( 'none', 'label' ) }}">
138 <i class="{{ get( 'none', 'icon' ) }}" aria-hidden="true"></i>
139 <span class="elementor-screen-only">{{ get( 'none', 'label' ) }}</span>
140 </label>
141 <# }
142 if ( ! data.exclude_inline_options.includes( 'svg' ) ) { #>
143 <input id="<?php $this->print_control_uid(); ?>-svg" type="radio" value="svg">
144 <label class="elementor-choices-label elementor-control-unit-1 tooltip-target elementor-control-icons--inline__svg" for="<?php $this->print_control_uid(); ?>-svg" data-tooltip="{{ get( 'svg', 'label' ) }}">
145 <i class="{{ get( 'svg', 'icon' ) }}" aria-hidden="true"></i>
146 <span class="elementor-screen-only">{{ get( 'svg', 'label' ) }}</span>
147 </label>
148 <# }
149 if ( ! data.exclude_inline_options.includes( 'icon' ) ) { #>
150 <input id="<?php $this->print_control_uid(); ?>-icon" type="radio" value="icon">
151 <label class="elementor-choices-label elementor-control-unit-1 tooltip-target elementor-control-icons--inline__icon" for="<?php $this->print_control_uid(); ?>-icon" data-tooltip="{{ get( 'icon', 'label' ) }}">
152 <span class="elementor-control-icons--inline__displayed-icon">
153 <i class="{{ get( 'icon', 'icon' ) }}" aria-hidden="true"></i>
154 </span>
155 <span class="elementor-screen-only">{{ get( 'icon', 'label' ) }}</span>
156 </label>
157 <# } #>
158 </div>
159 </div>
160 </div>
161
162 <# if ( data.description ) { #>
163 <div class="elementor-control-field-description">{{{ data.description }}}</div>
164 <# } #>
165 <?php
166 }
167
168 /**
169 * Get Icons control default settings.
170 *
171 * Retrieve the default settings of the Icons control. Used to return the default
172 * settings while initializing the Icons control.
173 *
174 * @since 2.6.0
175 * @access protected
176 *
177 * @return array Control default settings.
178 */
179 protected function get_default_settings() {
180 return [
181 'label_block' => true,
182 'dynamic' => [
183 'categories' => [ TagsModule::IMAGE_CATEGORY ],
184 'returnType' => 'object',
185 ],
186 'search_bar' => true,
187 'recommended' => false,
188 'skin' => 'media',
189 'exclude_inline_options' => [],
190 'disable_initial_active_state' => false,
191 'skin_settings' => [
192 'inline' => [
193 'none' => [
194 'label' => esc_html__( 'None', 'elementor' ),
195 'icon' => 'eicon-ban',
196 ],
197 'svg' => [
198 'label' => esc_html__( 'Upload SVG', 'elementor' ),
199 'icon' => 'eicon-upload',
200 ],
201 'icon' => [
202 'label' => esc_html__( 'Icon Library', 'elementor' ),
203 'icon' => 'eicon-circle',
204 ],
205 ],
206 ],
207 ];
208 }
209
210 /**
211 * Support SVG Import
212 *
213 * @param array $mimes
214 * @return array
215 * @deprecated 3.5.0
216 */
217 public function support_svg_import( $mimes ) {
218 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0' );
219
220 $mimes['svg'] = 'image/svg+xml';
221 return $mimes;
222 }
223
224 public function on_import( $settings ) {
225 if ( empty( $settings['library'] ) || 'svg' !== $settings['library'] || empty( $settings['value']['url'] ) ) {
226 return $settings;
227 }
228
229 $imported = Plugin::$instance->templates_manager->get_import_images_instance()->import( $settings['value'] );
230
231 if ( ! $imported ) {
232 $settings['value'] = '';
233 $settings['library'] = '';
234 } else {
235 $settings['value'] = $imported;
236 }
237 return $settings;
238 }
239 }
240