PluginProbe
Booking Calendar / 10.11
Booking Calendar v10.11
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 10.11 All 204 releases
booking / includes / __js / client / front_end_messages / wpbc_fe_messages.js

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

401 lines 15.0 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 };
59 for ( var p_key in params ){
60 params_default[ p_key ] = params[ p_key ];
61 }
62 params = params_default;
63
64 var unique_div_id = new Date();
65 unique_div_id = 'wpbc_notice_' + unique_div_id.getTime();
66
67 params['css_class'] += ' wpbc_fe_message';
68 if ( params['type'] == 'error' ){
69 params['css_class'] += ' wpbc_fe_message_error';
70 message = '<i class="menu_icon icon-1x wpbc_icn_report_gmailerrorred"></i>' + message;
71 }
72 if ( params['type'] == 'warning' ){
73 params['css_class'] += ' wpbc_fe_message_warning';
74 message = '<i class="menu_icon icon-1x wpbc_icn_warning"></i>' + message;
75 }
76 if ( params['type'] == 'info' ){
77 params['css_class'] += ' wpbc_fe_message_info';
78 }
79 if ( params['type'] == 'success' ){
80 params['css_class'] += ' wpbc_fe_message_success';
81 message = '<i class="menu_icon icon-1x wpbc_icn_done_outline"></i>' + message;
82 }
83
84 var scroll_to_element = '<div id="' + unique_div_id + '_scroll" style="display:none;"></div>';
85 message = '<div id="' + unique_div_id + '" class="wpbc_front_end__message ' + params['css_class'] + '" style="' + params[ 'style' ] + '">' + message + '</div>';
86
87
88 var jq_el_message = false;
89 var is_show_message = true;
90
91 if ( 'inside' === params[ 'show_here' ][ 'where' ] ){
92
93 if ( params[ 'is_append' ] ){
94 jQuery( params[ 'show_here' ][ 'jq_node' ] ).append( scroll_to_element );
95 jQuery( params[ 'show_here' ][ 'jq_node' ] ).append( message );
96 } else {
97 jQuery( params[ 'show_here' ][ 'jq_node' ] ).html( scroll_to_element + message );
98 }
99
100 } else if ( 'before' === params[ 'show_here' ][ 'where' ] ){
101
102 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).siblings( '[id^="wpbc_notice_"]' );
103 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
104 is_show_message = false;
105 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
106 }
107 if ( is_show_message ){
108 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element );
109 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( message );
110 }
111
112 } else if ( 'after' === params[ 'show_here' ][ 'where' ] ){
113
114 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).nextAll( '[id^="wpbc_notice_"]' );
115 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
116 is_show_message = false;
117 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
118 }
119 if ( is_show_message ){
120 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element ); // We need to set here before(for handy scroll)
121 jQuery( params[ 'show_here' ][ 'jq_node' ] ).after( message );
122 }
123
124 } else if ( 'right' === params[ 'show_here' ][ 'where' ] ){
125
126 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).nextAll( '.wpbc_front_end__message_container_right' ).find( '[id^="wpbc_notice_"]' );
127 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
128 is_show_message = false;
129 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
130 }
131 if ( is_show_message ){
132 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element ); // We need to set here before(for handy scroll)
133 jQuery( params[ 'show_here' ][ 'jq_node' ] ).after( '<div class="wpbc_front_end__message_container_right">' + message + '</div>' );
134 }
135 } else if ( 'left' === params[ 'show_here' ][ 'where' ] ){
136
137 jq_el_message = jQuery( params[ 'show_here' ][ 'jq_node' ] ).siblings( '.wpbc_front_end__message_container_left' ).find( '[id^="wpbc_notice_"]' );
138 if ( (params[ 'if_visible_not_show' ]) && (jq_el_message.is( ':visible' )) ){
139 is_show_message = false;
140 unique_div_id = jQuery( jq_el_message.get( 0 ) ).attr( 'id' );
141 }
142 if ( is_show_message ){
143 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( scroll_to_element ); // We need to set here before(for handy scroll)
144 jQuery( params[ 'show_here' ][ 'jq_node' ] ).before( '<div class="wpbc_front_end__message_container_left">' + message + '</div>' );
145 }
146 }
147
148 if ( ( is_show_message ) && ( parseInt( params[ 'delay' ] ) > 0 ) ){
149 var closed_timer = setTimeout( function (){
150 jQuery( '#' + unique_div_id ).fadeOut( 1500 );
151 } , parseInt( params[ 'delay' ] ) );
152
153 var closed_timer2 = setTimeout( function (){
154 jQuery( '#' + unique_div_id ).trigger( 'hide' );
155 }, ( parseInt( params[ 'delay' ] ) + 1501 ) );
156 }
157
158 // Check if showed message in some hidden parent section and show it. But it must be lower than '.wpbc_container'
159 var parent_els = jQuery( '#' + unique_div_id ).parents().map( function (){
160 if ( (!jQuery( this ).is( 'visible' )) && (jQuery( '.wpbc_container' ).has( this )) ){
161 jQuery( this ).show();
162 }
163 } );
164
165 if ( params[ 'is_scroll' ] ){
166 wpbc_do_scroll( '#' + unique_div_id + '_scroll' );
167 }
168
169 return unique_div_id;
170 }
171
172
173 /**
174 * Error message. Preset of parameters for real message function.
175 *
176 * @param el - any jQuery node definition
177 * @param message - Message HTML
178 * @returns string - HTML ID or 0 if not showing during this time.
179 */
180 function wpbc_front_end__show_message__error( jq_node, message ){
181
182 var notice_message_id = wpbc_front_end__show_message(
183 message,
184 {
185 'type' : 'error',
186 'delay' : 10000,
187 'if_visible_not_show': true,
188 'show_here' : {
189 'where' : 'right',
190 'jq_node': jq_node
191 }
192 }
193 );
194 return notice_message_id;
195 }
196
197
198 /**
199 * Error message UNDER element. Preset of parameters for real message function.
200 *
201 * @param el - any jQuery node definition
202 * @param message - Message HTML
203 * @returns string - HTML ID or 0 if not showing during this time.
204 */
205 function wpbc_front_end__show_message__error_under_element( jq_node, message, message_delay ){
206
207 if ( 'undefined' === typeof (message_delay) ){
208 message_delay = 0
209 }
210
211 var notice_message_id = wpbc_front_end__show_message(
212 message,
213 {
214 'type' : 'error',
215 'delay' : message_delay,
216 'if_visible_not_show': true,
217 'show_here' : {
218 'where' : 'after',
219 'jq_node': jq_node
220 }
221 }
222 );
223 return notice_message_id;
224 }
225
226
227 /**
228 * Error message UNDER element. Preset of parameters for real message function.
229 *
230 * @param el - any jQuery node definition
231 * @param message - Message HTML
232 * @returns string - HTML ID or 0 if not showing during this time.
233 */
234 function wpbc_front_end__show_message__error_above_element( jq_node, message, message_delay ){
235
236 if ( 'undefined' === typeof (message_delay) ){
237 message_delay = 10000
238 }
239
240 var notice_message_id = wpbc_front_end__show_message(
241 message,
242 {
243 'type' : 'error',
244 'delay' : message_delay,
245 'if_visible_not_show': true,
246 'show_here' : {
247 'where' : 'before',
248 'jq_node': jq_node
249 }
250 }
251 );
252 return notice_message_id;
253 }
254
255
256 /**
257 * Warning message. Preset of parameters for real message function.
258 *
259 * @param el - any jQuery node definition
260 * @param message - Message HTML
261 * @returns string - HTML ID or 0 if not showing during this time.
262 */
263 function wpbc_front_end__show_message__warning( jq_node, message ){
264
265 var notice_message_id = wpbc_front_end__show_message(
266 message,
267 {
268 'type' : 'warning',
269 'delay' : 10000,
270 'if_visible_not_show': true,
271 'show_here' : {
272 'where' : 'right',
273 'jq_node': jq_node
274 }
275 }
276 );
277 wpbc_highlight_error_on_form_field( jq_node );
278 return notice_message_id;
279 }
280
281
282 /**
283 * Warning message UNDER element. Preset of parameters for real message function.
284 *
285 * @param el - any jQuery node definition
286 * @param message - Message HTML
287 * @returns string - HTML ID or 0 if not showing during this time.
288 */
289 function wpbc_front_end__show_message__warning_under_element( jq_node, message ){
290
291 var notice_message_id = wpbc_front_end__show_message(
292 message,
293 {
294 'type' : 'warning',
295 'delay' : 10000,
296 'if_visible_not_show': true,
297 'show_here' : {
298 'where' : 'after',
299 'jq_node': jq_node
300 }
301 }
302 );
303 return notice_message_id;
304 }
305
306
307 /**
308 * Warning message ABOVE element. Preset of parameters for real message function.
309 *
310 * @param el - any jQuery node definition
311 * @param message - Message HTML
312 * @returns string - HTML ID or 0 if not showing during this time.
313 */
314 function wpbc_front_end__show_message__warning_above_element( jq_node, message ){
315
316 var notice_message_id = wpbc_front_end__show_message(
317 message,
318 {
319 'type' : 'warning',
320 'delay' : 10000,
321 'if_visible_not_show': true,
322 'show_here' : {
323 'where' : 'before',
324 'jq_node': jq_node
325 }
326 }
327 );
328 return notice_message_id;
329 }
330
331 /**
332 * Highlight Error in specific field
333 *
334 * @param jq_node string or jQuery element, where scroll to
335 */
336 function wpbc_highlight_error_on_form_field( jq_node ){
337
338 if ( !jQuery( jq_node ).length ){
339 return;
340 }
341 if ( ! jQuery( jq_node ).is( ':input' ) ){
342 // Situation with checkboxes or radio buttons
343 var jq_node_arr = jQuery( jq_node ).find( ':input' );
344 if ( !jq_node_arr.length ){
345 return
346 }
347 jq_node = jq_node_arr.get( 0 );
348 }
349 var params = {};
350 params[ 'delay' ] = 10000;
351
352 if ( !jQuery( jq_node ).hasClass( 'wpbc_form_field_error' ) ){
353
354 jQuery( jq_node ).addClass( 'wpbc_form_field_error' )
355
356 if ( parseInt( params[ 'delay' ] ) > 0 ){
357 var closed_timer = setTimeout( function (){
358 jQuery( jq_node ).removeClass( 'wpbc_form_field_error' );
359 }
360 , parseInt( params[ 'delay' ] )
361 );
362
363 }
364 }
365 }
366
367 /**
368 * Scroll to specific element
369 *
370 * @param jq_node string or jQuery element, where scroll to
371 * @param extra_shift_offset int shift offset from jq_node
372 */
373 function wpbc_do_scroll( jq_node , extra_shift_offset = 0 ){
374
375 if ( !jQuery( jq_node ).length ){
376 return;
377 }
378 var targetOffset = jQuery( jq_node ).offset().top;
379
380 if ( targetOffset <= 0 ){
381 if ( 0 != jQuery( jq_node ).nextAll( ':visible' ).length ){
382 targetOffset = jQuery( jq_node ).nextAll( ':visible' ).first().offset().top;
383 } else if ( 0 != jQuery( jq_node ).parent().nextAll( ':visible' ).length ){
384 targetOffset = jQuery( jq_node ).parent().nextAll( ':visible' ).first().offset().top;
385 }
386 }
387
388 if ( jQuery( '#wpadminbar' ).length > 0 ){
389 targetOffset = targetOffset - 50 - 50;
390 } else {
391 targetOffset = targetOffset - 20 - 50;
392 }
393 targetOffset += extra_shift_offset;
394
395 // Scroll only if we did not scroll before
396 if ( ! jQuery( 'html,body' ).is( ':animated' ) ){
397 jQuery( 'html,body' ).animate( {scrollTop: targetOffset}, 500 );
398 }
399 }
400
401