PluginProbe ʕ •ᴥ•ʔ
VikAppointments Services Booking Calendar / trunk
VikAppointments Services Booking Calendar vtrunk
trunk 1.2.17 1.2.18 1.2.19
vikappointments / libraries / adapter / html / classes / behavior.php
vikappointments / libraries / adapter / html / classes Last commit date
access.php 2 years ago behavior.php 5 months ago bootstrap.php 5 months ago contentlanguage.php 2 years ago date.php 1 month ago form.php 2 years ago formbehavior.php 5 months ago grid.php 2 years ago jquery.php 2 years ago list.php 2 years ago number.php 2 years ago select.php 2 years ago user.php 2 years ago
behavior.php
356 lines
1 <?php
2 /**
3 * @package VikWP - Libraries
4 * @subpackage adapter.html
5 * @author E4J s.r.l.
6 * @copyright Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
7 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 /**
15 * Utility class for script behaviors.
16 *
17 * @since 10.0
18 */
19 abstract class JHtmlBehavior
20 {
21 /**
22 * Includes TinyMCE editor assets.
23 *
24 * @return void
25 */
26 public static function tinyMCE()
27 {
28 wp_enqueue_editor();
29 }
30
31 /**
32 * Includes CodeMirror editor assets.
33 *
34 * @param mixed $type An array of argument of the language type string.
35 *
36 * @return void
37 */
38 public static function codeMirror($type = 'php')
39 {
40 if (is_string($type))
41 {
42 $type = array('type' => $type);
43 }
44
45 wp_enqueue_code_editor($type);
46 }
47
48 /**
49 * Loads the datepicker JS plugin.
50 *
51 * @return void
52 */
53 public static function calendar()
54 {
55 static $loaded = 0;
56
57 if ($loaded)
58 {
59 return;
60 }
61
62 $loaded = 1;
63
64 // Labels
65 $done = __('Done');
66 $prev = __('Previous');
67 $next = __('Next');
68 $today = __('Today');
69 $wk = 'Wk';
70
71 // Months
72 $months = array(
73 __('January'),
74 __('February'),
75 __('March'),
76 __('April'),
77 __('May'),
78 __('June'),
79 __('July'),
80 __('August'),
81 __('September'),
82 __('October'),
83 __('November'),
84 __('December'),
85 );
86
87 $months_short = array(
88 _x('Jan', 'January abbreviation'),
89 _x('Feb', 'February abbreviation'),
90 _x('Mar', 'March abbreviation'),
91 _x('Apr', 'April abbreviation'),
92 _x('May', 'May abbreviation'),
93 _x('Jun', 'June abbreviation'),
94 _x('Jul', 'July abbreviation'),
95 _x('Aug', 'August abbreviation'),
96 _x('Sep', 'September abbreviation'),
97 _x('Oct', 'October abbreviation'),
98 _x('Nov', 'November abbreviation'),
99 _x('Dec', 'December abbreviation'),
100 );
101
102 $months = json_encode($months);
103 $months_short = json_encode($months_short);
104
105 // Days
106 $days = array(
107 __('Sunday'),
108 __('Monday'),
109 __('Tuesday'),
110 __('Wednesday'),
111 __('Thursday'),
112 __('Friday'),
113 __('Saturday'),
114 );
115
116 $days_short_3 = array(
117 __('Sun'),
118 __('Mon'),
119 __('Tue'),
120 __('Wed'),
121 __('Thu'),
122 __('Fri'),
123 __('Sat'),
124 );
125
126 $days_short_2 = array();
127 foreach ($days_short_3 as $d)
128 {
129 $days_short_2[] = mb_substr($d, 0, 2, 'UTF-8');
130 }
131
132 // snippet used to make sure the substring of
133 // the week days doesn't return the same value (see Hebrew)
134 // for all the elements
135 $days_short_2 = array_unique($days_short_2);
136
137 if (count($days_short_2) != count($days_short_3))
138 {
139 // the count doesn't match, use the 3 chars days
140 $days_short_2 = $days_short_3;
141 }
142
143 $days = json_encode($days);
144 $days_short_3 = json_encode($days_short_3);
145 $days_short_2 = json_encode($days_short_2);
146
147 // should return a value between 0-6 (1: Monday, 0: Sunday)
148 $start_of_week = (int) get_option('start_of_week', 0);
149
150 JFactory::getDocument()->addScriptDeclaration(
151 <<<JS
152 jQuery(function($){
153 $.datepicker.regional["wp-datepicker"] = {
154 closeText: "$done",
155 prevText: "$prev",
156 nextText: "$next",
157 currentText: "$today",
158 monthNames: $months,
159 monthNamesShort: $months_short,
160 dayNames: $days,
161 dayNamesShort: $days_short_3,
162 dayNamesMin: $days_short_2,
163 weekHeader: "$wk",
164 firstDay: $start_of_week,
165 isRTL: false,
166 showMonthAfterYear: false,
167 yearSuffix: ""
168 };
169
170 $.datepicker.setDefaults($.datepicker.regional["wp-datepicker"]);
171 });
172 JS
173 );
174 }
175
176 /**
177 * Loads a tooltip.
178 *
179 * @return void
180 */
181 public static function tooltip()
182 {
183 // do nothing for the moment
184 }
185
186 /**
187 * Keep session alive, for example, while editing or creating an article.
188 *
189 * @return void
190 */
191 public static function keepalive()
192 {
193 // do nothing for the moment
194 }
195
196 /**
197 * Loads a modal.
198 *
199 * @return void
200 */
201 public static function modal()
202 {
203 static $loaded = 0;
204
205 if ($loaded)
206 {
207 return;
208 }
209
210 $loaded = 1;
211
212 JFactory::getDocument()->addScriptDeclaration(
213 <<<JAVASCRIPT
214 jQuery(function() {
215 jQuery('.wrap a.modal[target="_blank"]').on('click', function(e) {
216 // get link HREF
217 var href = jQuery(this).attr('href');
218
219 // make sure we have an image
220 if (href.match(/\.(png|jpe?g|gif|bmp)$/i)) {
221 // prevent default link action
222 e.preventDefault();
223
224 // open modal containing image preview
225 wpOpenJModal('wpmodal', jQuery(this).attr('href'));
226
227 return false;
228 }
229
230 // otherwise fallback to default browser opening
231 });
232 });
233 JAVASCRIPT
234 );
235
236 // display modal to preview the images
237 echo JHtml::fetch(
238 'bootstrap.renderModal',
239 'jmodal-wpmodal',
240 array(
241 'title' => JText::translate('JMEDIA_PREVIEW_TITLE'),
242 'closeButton' => true,
243 'keyboard' => true,
244 'bodyHeight' => 80,
245 )
246 );
247 }
248
249 /**
250 * Enhance the compatibility with Wordpress via javascript.
251 *
252 * When "tmpl" var is equals to "component", tries to remove the contents
253 * displayed by the theme.
254 *
255 * Provides a script to replace all the "index.php" occurrences into "admin.php".
256 *
257 * @return void
258 */
259 public static function component()
260 {
261 static $loaded = 0;
262
263 if ($loaded)
264 {
265 return;
266 }
267
268 $loaded = 1;
269
270 $app = JFactory::getApplication();
271 $input = $app->input;
272 $document = JFactory::getDocument();
273
274 // check if tmpl component
275 if ($input->get('tmpl') === 'component')
276 {
277 $document->addScriptDeclaration(
278 <<<JS
279 (function($) {
280 'use strict';
281
282 $(function() {
283 // clone DOM wrapper
284 var clone = $('.wrap.plugin-container').detach();
285
286 // remove all body elements and attach the wrapper
287 $('body').children().not('script,style,link,.colorpicker').remove();
288 $('body').append(clone);
289
290 // adjust wrapper margin
291 $('.wrap.plugin-container').css('margin', '10px');
292
293 // remove padding from WP toolbar
294 $('html.wp-toolbar').css('padding', 0);
295 });
296 })(jQuery);
297 JS
298 );
299 }
300
301 // script to change all <form> and <a> tags from "index.php" to "admin.php"
302 if ($app->isAdmin())
303 {
304 $document->addScriptDeclaration(
305 <<<JS
306 (function($) {
307 'use strict';
308
309 $(function() {
310 routePageTargets('.wrap.plugin-container');
311 });
312 })(jQuery);
313 JS
314 );
315 }
316 }
317
318 /**
319 * Loads the core functionalities that need to be used
320 * every time a page is requested.
321 *
322 * @return void
323 *
324 * @since 10.1.14
325 */
326 public static function core()
327 {
328 /**
329 * Core usage shouldn't be cached because
330 * widgets might declare their own options.
331 *
332 * @since 10.1.21
333 */
334
335 $document = JFactory::getDocument();
336
337 /**
338 * Generate scripts options.
339 *
340 * @since 10.1.14
341 */
342 $scriptOptions = $document->getScriptOptions();
343
344 if (!empty($scriptOptions))
345 {
346 // encode options in JSON format (evaluate PRETTY_PRINT usage)
347 $prettyPrint = (WP_DEBUG && defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : false);
348 $jsonOptions = json_encode($scriptOptions, $prettyPrint);
349 $jsonOptions = $jsonOptions ? $jsonOptions : '{}';
350
351 // add application/json declaration to document
352 $document->addScriptDeclaration($jsonOptions, 'application/json');
353 }
354 }
355 }
356