PluginProbe
Booking Calendar / 11.4.2
Booking Calendar v11.4.2
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / __js / client / front_end_messages / wpbc_fe_messages.js

wpbc_fe_messages.js in Booking Calendar 11.4.2, at includes/__js/client/front_end_messages/wpbc_fe_messages.js

422 lines 16.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * =====================================================================================================================
3 * includes/__js/front_end_messages/wpbc_fe_messages.js
4 * =====================================================================================================================
5 */
6
7 // ---------------------------------------------------------------------------------------------------------------------
8 // Show Messages at Front-Edn side
9 // ---------------------------------------------------------------------------------------------------------------------
10
11 /**
12 * Show message in content
13 *
14 * @param message Message HTML
15 * @param params = {
16 * 'type' : 'warning', // 'error' | 'warning' | 'info' | 'success'
17 * 'show_here' : {
18 * 'jq_node' : '', // any jQuery node definition
19 * 'where' : 'inside' // 'inside' | 'before' | 'after' | 'right' | 'left'
20 * },
21 * 'is_append': true, // Apply only if 'where' : 'inside'
22 * 'style' : 'text-align:left;', // styles, if needed
23 * 'css_class': '', // For example can be: 'wpbc_fe_message_alt'
24 * 'delay' : 0, // how many microsecond to show, if 0 then show forever
25 * 'if_visible_not_show': false // if true, then do not show message, if previos message was not hided (not apply if 'where' : 'inside' )
26 * };
27 * Examples:
28 * var html_id = wpbc_front_end__show_message( 'You can test days selection in calendar', {} );
29 *
30 * var notice_message_id = wpbc_front_end__show_message( _wpbc.get_message( 'message_check_required' ), { 'type': 'warning', 'delay': 10000, 'if_visible_not_show': true,
31 * 'show_here': {'where': 'right', 'jq_node': el,} } );
32 *
33 * wpbc_front_end__show_message( response_data[ 'ajx_data' ][ 'ajx_after_action_message' ].replace( /\n/g, "<br />" ),
34 * { 'type' : ( 'undefined' !== typeof( response_data[ 'ajx_data' ][ 'ajx_after_action_message_status' ] ) )
35 * ? response_data[ 'ajx_data' ][ 'ajx_after_action_message_status' ] : 'info',
36 * 'show_here': {'jq_node': jq_node, 'where': 'after'},
37 * 'css_class':'wpbc_fe_message_alt',
38 * 'delay' : 10000
39 * } );
40 *
41 *
42 * @returns string - HTML ID or 0 if not showing during this time.
43 */
44 function wpbc_front_end__show_message( message, params = {} ){
45
46 var params_default = {
47 'type' : 'warning', // 'error' | 'warning' | 'info' | 'success'
48 'show_here' : {
49 'jq_node' : '', // any jQuery node definition
50 'where' : 'inside' // 'inside' | 'before' | 'after' | 'right' | 'left'
51 },
52 'is_append': true, // Apply only if 'where' : 'inside'
53 'style' : 'text-align:left;', // styles, if needed
54 'css_class': '', // For example can be: 'wpbc_fe_message_alt'
55 'delay' : 0, // how many microsecond to show, if 0 then show forever
56 'if_visible_not_show': false, // if true, then do not show message, if previos message was not hided (not apply if 'where' : 'inside' )
57 'is_scroll': true, // is scroll to this element
58 'content_mode': 'html' // 'html' for trusted legacy content | 'text' for editable/user content
59 };
60 for ( var p_key in params ){
61 params_default[ p_key ] = params[ p_key ];
62 }
63 params = params_default;
64
65 if ( 'text' === params[ 'content_mode' ] ) {
66 message = jQuery( '<div>' ).text( null === message || 'undefined' === typeof message ? '' : String( message ) ).html().replace( /\n/g, '<br />' );
67 }
68
69 var unique_div_id = new Date();
70 unique_div_id = 'wpbc_notice_' + unique_div_id.getTime();
71
72 params['css_class'] += ' wpbc_fe_message';
73 if ( params['type'] == 'error' ){
74 params['css_class'] += ' wpbc_fe_message_error';
75 message = '<i class="menu_icon icon-1x wpbc_icn_report_gmailerrorred"></i>' + message;
76 }
77 if ( params['type'] == 'warning' ){
78 params['css_class'] += ' wpbc_fe_message_warning';
79 message = '<i class="menu_icon icon-1x wpbc_icn_warning"></i>' + message;
80 }
81 if ( params['type'] == 'info' ){
82 params['css_class'] += ' wpbc_fe_message_info';
83 }
84 if ( params['type'] == 'success' ){
85 params['css_class'] += ' wpbc_fe_message_success';
86 message = '<i class="menu_icon icon-1x wpbc_icn_done_outline"></i>' + message;
87 }
88
89 var scroll_to_element = '<div id="' + unique_div_id + '_scroll" style="display:none;"></div>';
90 message = '<div id="' + unique_div_id + '" class="wpbc_front_end__message ' + params['css_class'] + '" style="' + params[ 'style' ] + '">' + message + '</div>';
91
92
93 var jq_el_message = false;
94 var is_show_message = true;
95
96 if ( 'inside' === params[ 'show_here' ][ 'where' ] ){
97
98 if ( params[ 'is_append' ] ){
99 jQuery( params[ 'show_here' ][ 'jq_node' ] ).append( scroll_to_element );
100 jQuery( params[ 'show_here' ][ 'jq_node' ] ).append( message );
101 } else {
102 jQuery( params[ 'show_here' ][ 'jq_node' ] ).html( scroll_to_element + message );
103 }
104
105 } else if ( 'before' === params[ 'show_here' ][ 'where' ] ){
106
107 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).siblings( '[id^="wpbc_notice_"]' );
108 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
109 is_show_message = false;
110 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
111 }
112 if ( is_show_message ){
113 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element );
114 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( message );
115 }
116
117 } else if ( 'after' === params[ 'show_here' ][ 'where' ] ){
118
119 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).nextAll( '[id^="wpbc_notice_"]' );
120 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
121 is_show_message = false;
122 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
123 }
124 if ( is_show_message ){
125 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element ); // We need to set here before(for handy scroll)
126 jQuery( params[ 'show_here' ][ 'jq_node' ] ).after( message );
127 }
128
129 } else if ( 'right' === params[ 'show_here' ][ 'where' ] ){
130
131 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).nextAll( '.wpbc_front_end__message_container_right' ).find( '[id^="wpbc_notice_"]' );
132 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
133 is_show_message = false;
134 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
135 }
136 if ( is_show_message ){
137 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element ); // We need to set here before(for handy scroll)
138 jQuery( params[ 'show_here' ][ 'jq_node' ] ).after( '<div class="wpbc_front_end__message_container_right">' + message + '</div>' );
139 }
140 } else if ( 'left' === params[ 'show_here' ][ 'where' ] ){
141
142 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).siblings( '.wpbc_front_end__message_container_left' ).find( '[id^="wpbc_notice_"]' );
143 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
144 is_show_message = false;
145 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
146 }
147 if ( is_show_message ){
148 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element ); // We need to set here before(for handy scroll)
149 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( '<div class="wpbc_front_end__message_container_left">' + message + '</div>' );
150 }
151 }
152
153 if ( ( is_show_message ) && ( parseInt( params[ 'delay' ] ) > 0 ) ){
154 var closed_timer = setTimeout( function (){
155 jQuery( '#' + unique_div_id ).fadeOut( 1500 );
156 } , parseInt( params[ 'delay' ] ) );
157
158 var closed_timer2 = setTimeout( function (){
159 jQuery( '#' + unique_div_id ).trigger( 'hide' );
160 }, ( parseInt( params[ 'delay' ] ) + 1501 ) );
161 }
162
163 // Check if showed message in some hidden parent section and show it. But it must be lower than '.wpbc_container'
164 var parent_els = jQuery( '#' + unique_div_id ).parents().map( function (){
165 if ( (!jQuery( this ).is( 'visible' )) && (jQuery( '.wpbc_container' ).has( this )) ){
166 jQuery( this ).show();
167 }
168 } );
169
170 if ( params[ 'is_scroll' ] ){
171 wpbc_do_scroll( '#' + unique_div_id + '_scroll' );
172 }
173
174 return unique_div_id;
175 }
176
177
178 /**
179 * Error message. Preset of parameters for real message function.
180 *
181 * @param el - any jQuery node definition
182 * @param message - Message HTML
183 * @returns string - HTML ID or 0 if not showing during this time.
184 */
185 function wpbc_front_end__show_message__error( jq_node, message, content_mode ){
186
187 content_mode = ( 'undefined' === typeof content_mode ) ? 'html' : content_mode;
188
189 var notice_message_id = wpbc_front_end__show_message(
190 message,
191 {
192 'type' : 'error',
193 'delay' : 10000,
194 'if_visible_not_show': true,
195 'content_mode' : content_mode,
196 'show_here' : {
197 'where' : 'right',
198 'jq_node': jq_node
199 }
200 }
201 );
202 return notice_message_id;
203 }
204
205
206 /**
207 * Error message UNDER element. Preset of parameters for real message function.
208 *
209 * @param el - any jQuery node definition
210 * @param message - Message HTML
211 * @returns string - HTML ID or 0 if not showing during this time.
212 */
213 function wpbc_front_end__show_message__error_under_element( jq_node, message, message_delay, content_mode ){
214
215 if ( 'undefined' === typeof (message_delay) ){
216 message_delay = 0
217 }
218 content_mode = ( 'undefined' === typeof content_mode ) ? 'html' : content_mode;
219
220 var notice_message_id = wpbc_front_end__show_message(
221 message,
222 {
223 'type' : 'error',
224 'delay' : message_delay,
225 'if_visible_not_show': true,
226 'content_mode' : content_mode,
227 'show_here' : {
228 'where' : 'after',
229 'jq_node': jq_node
230 }
231 }
232 );
233 return notice_message_id;
234 }
235
236
237 /**
238 * Error message UNDER element. Preset of parameters for real message function.
239 *
240 * @param el - any jQuery node definition
241 * @param message - Message HTML
242 * @returns string - HTML ID or 0 if not showing during this time.
243 */
244 function wpbc_front_end__show_message__error_above_element( jq_node, message, message_delay, content_mode ){
245
246 if ( 'undefined' === typeof (message_delay) ){
247 message_delay = 10000
248 }
249 content_mode = ( 'undefined' === typeof content_mode ) ? 'html' : content_mode;
250
251 var notice_message_id = wpbc_front_end__show_message(
252 message,
253 {
254 'type' : 'error',
255 'delay' : message_delay,
256 'if_visible_not_show': true,
257 'content_mode' : content_mode,
258 'show_here' : {
259 'where' : 'before',
260 'jq_node': jq_node
261 }
262 }
263 );
264 return notice_message_id;
265 }
266
267
268 /**
269 * Warning message. Preset of parameters for real message function.
270 *
271 * @param el - any jQuery node definition
272 * @param message - Message HTML
273 * @returns string - HTML ID or 0 if not showing during this time.
274 */
275 function wpbc_front_end__show_message__warning( jq_node, message, content_mode ){
276
277 content_mode = ( 'undefined' === typeof content_mode ) ? 'html' : content_mode;
278
279 var notice_message_id = wpbc_front_end__show_message(
280 message,
281 {
282 'type' : 'warning',
283 'delay' : 10000,
284 'if_visible_not_show': true,
285 'content_mode' : content_mode,
286 'show_here' : {
287 'where' : 'right',
288 'jq_node': jq_node
289 }
290 }
291 );
292 wpbc_highlight_error_on_form_field( jq_node );
293 return notice_message_id;
294 }
295
296
297 /**
298 * Warning message UNDER element. Preset of parameters for real message function.
299 *
300 * @param el - any jQuery node definition
301 * @param message - Message HTML
302 * @returns string - HTML ID or 0 if not showing during this time.
303 */
304 function wpbc_front_end__show_message__warning_under_element( jq_node, message, content_mode ){
305
306 content_mode = ( 'undefined' === typeof content_mode ) ? 'html' : content_mode;
307
308 var notice_message_id = wpbc_front_end__show_message(
309 message,
310 {
311 'type' : 'warning',
312 'delay' : 10000,
313 'if_visible_not_show': true,
314 'content_mode' : content_mode,
315 'show_here' : {
316 'where' : 'after',
317 'jq_node': jq_node
318 }
319 }
320 );
321 return notice_message_id;
322 }
323
324
325 /**
326 * Warning message ABOVE element. Preset of parameters for real message function.
327 *
328 * @param el - any jQuery node definition
329 * @param message - Message HTML
330 * @returns string - HTML ID or 0 if not showing during this time.
331 */
332 function wpbc_front_end__show_message__warning_above_element( jq_node, message, content_mode ){
333
334 content_mode = ( 'undefined' === typeof content_mode ) ? 'html' : content_mode;
335
336 var notice_message_id = wpbc_front_end__show_message(
337 message,
338 {
339 'type' : 'warning',
340 'delay' : 10000,
341 'if_visible_not_show': true,
342 'content_mode' : content_mode,
343 'show_here' : {
344 'where' : 'before',
345 'jq_node': jq_node
346 }
347 }
348 );
349 return notice_message_id;
350 }
351
352 /**
353 * Highlight Error in specific field
354 *
355 * @param jq_node string or jQuery element, where scroll to
356 */
357 function wpbc_highlight_error_on_form_field( jq_node ){
358
359 if ( !jQuery( jq_node ).length ){
360 return;
361 }
362 if ( ! jQuery( jq_node ).is( ':input' ) ){
363 // Situation with checkboxes or radio buttons
364 var jq_node_arr = jQuery( jq_node ).find( ':input' );
365 if ( !jq_node_arr.length ){
366 return
367 }
368 jq_node = jq_node_arr.get( 0 );
369 }
370 var params = {};
371 params[ 'delay' ] = 10000;
372
373 if ( !jQuery( jq_node ).hasClass( 'wpbc_form_field_error' ) ){
374
375 jQuery( jq_node ).addClass( 'wpbc_form_field_error' )
376
377 if ( parseInt( params[ 'delay' ] ) > 0 ){
378 var closed_timer = setTimeout( function (){
379 jQuery( jq_node ).removeClass( 'wpbc_form_field_error' );
380 }
381 , parseInt( params[ 'delay' ] )
382 );
383
384 }
385 }
386 }
387
388 /**
389 * Scroll to specific element
390 *
391 * @param jq_node string or jQuery element, where scroll to
392 * @param extra_shift_offset int shift offset from jq_node
393 */
394 function wpbc_do_scroll( jq_node , extra_shift_offset = 0 ){
395
396 if ( !jQuery( jq_node ).length ){
397 return;
398 }
399 var targetOffset = jQuery( jq_node ).offset().top;
400
401 if ( targetOffset <= 0 ){
402 if ( 0 != jQuery( jq_node ).nextAll( ':visible' ).length ){
403 targetOffset = jQuery( jq_node ).nextAll( ':visible' ).first().offset().top;
404 } else if ( 0 != jQuery( jq_node ).parent().nextAll( ':visible' ).length ){
405 targetOffset = jQuery( jq_node ).parent().nextAll( ':visible' ).first().offset().top;
406 }
407 }
408
409 if ( jQuery( '#wpadminbar' ).length > 0 ){
410 targetOffset = targetOffset - 50 - 50;
411 } else {
412 targetOffset = targetOffset - 20 - 50;
413 }
414 targetOffset += extra_shift_offset;
415
416 // Scroll only if we did not scroll before
417 if ( ! jQuery( 'html,body' ).is( ':animated' ) ){
418 jQuery( 'html,body' ).animate( {scrollTop: targetOffset}, 500 );
419 }
420 }
421
422