PluginProbe
Orderable – Restaurant & Food Ordering System / 0.2.0
Orderable – Restaurant & Food Ordering System v0.2.0
0.1.4 0.1.5 0.2.0 1.0.0 1.1.0 1.1.1 1.10.0 1.10.1 1.11.0 1.12.0 1.12.1 1.12.2 1.13.0 1.14.0 1.15.0 1.16.0 1.17.0 1.17.1 1.18.0 1.19.0 1.19.1 1.19.2 1.2.0 1.20.0 1.20.1 All 44 releases
orderable / assets / admin / js / main.js

main.js in Orderable – Restaurant & Food Ordering System 0.2.0, at assets/admin/js/main.js

543 lines 15.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1
2 (function( $, document ) {
3 "use strict";
4
5 var orderable_layouts = {
6 /**
7 * On doc ready.
8 */
9 on_ready: function() {
10 /**
11 * On change layout setting.
12 */
13 $( document.body ).on( 'change', '.orderable-table--product-lists input, .orderable-table--product-lists select', function( e ) {
14 var $field = $( this ),
15 $parent = $field.closest( '.orderable-table__row--repeatable' ),
16 $shortcode = $parent.find( '.orderable-field--product-list-shortcode' );
17
18 var default_shortcode_parameters = {
19 categories: '',
20 layout: 'grid',
21 images: 'true'
22 };
23
24 var shortcode_parameters = {
25 categories: $parent.find( '.orderable-select--categories' ).val().toString(),
26 layout: $parent.find( '.orderable-select--layout' ).val().toString(),
27 images: $parent.find( '.orderable-checkbox--images' ).is(':checked').toString()
28 };
29
30 var shortcode = '[orderable';
31
32 $.each( shortcode_parameters, function( key, value ) {
33 if ( value === default_shortcode_parameters[ key ] ) {
34 return;
35 }
36
37 shortcode += ' ' + key + '="' + value + '"';
38 } );
39
40 shortcode += ']';
41
42 $shortcode.val( shortcode );
43 } );
44 }
45 };
46
47 $( document ).ready( orderable_layouts.on_ready );
48 }( jQuery, document ));
49 (function( $, document ) {
50 "use strict";
51
52 var orderable_multiselects = {
53 /**
54 * On doc ready.
55 */
56 on_ready: function() {
57 orderable_multiselects.init( $( '.orderable-select--multi-select' ) );
58
59 /**
60 * Init multiselects trigger.
61 */
62 $( document ).on( 'orderable-init-multiselects', function( e, data ) {
63 if ( typeof data.selects === 'undefined' ) {
64 return;
65 }
66
67 orderable_multiselects.init( data.selects );
68 } );
69
70 /**
71 * Destroy mutliselects trigger.
72 */
73 $( document ).on( 'orderable-destroy-multiselects', function( e, data ) {
74 if ( typeof data.selects === 'undefined' ) {
75 return;
76 }
77
78 orderable_multiselects.destroy( data.selects );
79 } );
80 },
81
82 /**
83 * Init multiselects.
84 *
85 * @param $selects
86 */
87 init: function( $selects ) {
88 $selects.multiSelect();
89
90 $selects.each( function( index, select ) {
91 var $select = $( select ),
92 $multi_select = $select.siblings( '.multi-select-container' ),
93 $none_option = $multi_select.find( '.multi-select-menuitem--none' ),
94 none_label = $select.data( 'orderable-select-none-option' );
95
96 $none_option.remove();
97
98 var $labels = $multi_select.find( '.multi-select-menuitem' ),
99 $disabled_labels = $multi_select.find( '.multi-select-menuitems input:disabled' ).parent();
100
101 $labels.show();
102 $disabled_labels.hide();
103
104 if ( $labels.length === $disabled_labels.length && none_label ) {
105 $multi_select.find( '.multi-select-menuitems' ).append( '<span class="multi-select-menuitem multi-select-menuitem--none">' + none_label + '</span>' );
106 }
107 } );
108 },
109
110 /**
111 * Destroy multiselects.
112 *
113 * @param $selects
114 */
115 destroy: function( $selects ) {
116 var $multi_selects = $selects.siblings( '.multi-select-container' );
117
118 $multi_selects.remove();
119 $selects.data( 'plugin_multiSelect', false );
120 }
121 };
122
123 $( document ).ready( orderable_multiselects.on_ready );
124 }( jQuery, document ));
125 (function( $, document ) {
126 "use strict";
127
128 var orderable_onboard = {
129 /**
130 * On doc ready.
131 */
132 on_ready: function() {
133 $( document.body ).on( 'iconic_onboard_wait_complete', orderable_onboard.init.woo_installed );
134 },
135
136 /**
137 * Onboard methods.
138 */
139 init: {
140 /**
141 * After woo installed.
142 */
143 woo_installed: function( event, data ) {
144 if ( typeof data === 'undefined' ) {
145 return;
146 }
147
148 if ( 'install_plugin' !== data.wait_event ) {
149 return;
150 }
151
152 if ( 'woocommerce' !== data.json.plugin_data['repo-slug'] ) {
153 return;
154 }
155
156 orderable_onboard.populate_woo_fields();
157 }
158 },
159
160 /**
161 * Populate woo fields.
162 */
163 populate_woo_fields: function() {
164 var fields = {
165 'default_country': {
166 type: 'select',
167 selector: 'select#iconic_onboard_default_country'
168 },
169 'business_name': {
170 type: 'text',
171 selector: 'input#iconic_onboard_business_name'
172 },
173 'business_address': {
174 type: 'text',
175 selector: 'input#iconic_onboard_business_address'
176 },
177 'business_address_2': {
178 type: 'text',
179 selector: 'input#iconic_onboard_business_address_2'
180 },
181 'business_city': {
182 type: 'text',
183 selector: 'input#iconic_onboard_business_city'
184 },
185 'business_postcode': {
186 type: 'text',
187 selector: 'input#iconic_onboard_business_postcode'
188 },
189 };
190
191 var data = {
192 action: 'orderable_get_onboard_woo_fields',
193 fields: fields
194 };
195
196 $.post( ajaxurl, data )
197 .done( function( response ) {
198 try {
199 if ( response.success ) {
200 $.each( fields, function( index, field ) {
201 var $field = $( field.selector );
202
203 if ( $field.length <= 0 || typeof response.data[ index ] === 'undefined' ) {
204 return;
205 }
206
207 if ( 'select' === field.type ) {
208 $field.html( response.data[ index ] );
209 } else {
210 $field.val( response.data[ index ] );
211 }
212 } );
213 }
214 } catch ( ex ) {
215 console.log( response );
216 console.log( ex );
217 alert( "Couldn't save." );
218 }
219 } )
220 .fail( function() {
221 alert( "Couldn't save. Are you connected to the internet? " );
222 } )
223 .always( function() {
224
225 } );
226 }
227 };
228
229 $( document ).ready( orderable_onboard.on_ready );
230 }( jQuery, document ));
231 (function( $, document ) {
232 "use strict";
233
234 var orderable_pro = {
235 /**
236 * On ready.
237 */
238 on_ready: function() {
239 $( document.body ).on( 'orderable-pro-modal', orderable_pro.trigger_pro_modal );
240 },
241
242 /**
243 * Trigger pro modal.
244 */
245 trigger_pro_modal: function() {
246 console.log( 'Pro only.' );
247 tb_show( 'Pro Feature', '#TB_inline?inlineId=orderable-pro-modal' );
248 }
249 };
250
251 $( document ).ready( orderable_pro.on_ready );
252 }( jQuery, document ));
253 (function( $, document ) {
254 "use strict";
255
256 var orderable_timings = {
257 /**
258 * On doc ready.
259 */
260 on_ready: function() {
261 /**
262 * On enable day.
263 */
264 $( document.body ).on( 'change', '.orderable-enable-day', function( e ) {
265 var $checkbox = $( this ),
266 day = $checkbox.data( 'orderable-day' ),
267 checked = $checkbox.is( ':checked' ),
268 $day_selects = $( '.orderable-select--days' );
269
270 $day_selects.find( 'option[value="' + day + '"]' ).attr( 'disabled', !checked ).attr( 'selected', false );
271
272 $( document ).trigger( 'orderable-destroy-multiselects', { selects: $day_selects } );
273 $( document ).trigger( 'orderable-init-multiselects', { selects: $day_selects } );
274 } );
275
276 /**
277 * Toggle delivery/pickup service hours.
278 */
279 $( document.body ).on( 'change', '[name*="\\[store_general_services\\]"]', function( e ) {
280 var $checkbox = $( this ),
281 service = $checkbox.val(),
282 checked = $checkbox.is( ':checked' ),
283 $elements = $( '.orderable-toggle-wrapper--' + service + ', button[data-orderable-wrapper="' + service + '"]' ),
284 visibility_class = 'orderable-ui-hide',
285 $select_services_notice = $( '.orderable-notice--select-service' );
286
287 // Toggle visibility of service hours.
288 if ( checked ) {
289 $elements.removeClass( visibility_class );
290 } else {
291 $elements.addClass( visibility_class );
292 }
293
294 var $selected_services = $( '[name*="\\[store_general_services\\]"]:checked' );
295
296 // If no services selected, show message.
297 if ( $selected_services.length <= 0 ) {
298 $select_services_notice.removeClass( visibility_class );
299 } else {
300 $select_services_notice.addClass( visibility_class );
301
302 // Toggle first enabled service.
303 var active_service = $selected_services.eq( 0 ).val(),
304 $active_service_button = $( 'button[data-orderable-wrapper="' + active_service + '"]' );
305
306 $active_service_button.click();
307 }
308
309 // If only pickup selected, toggle "same as delivery" checkbox.
310 var $same_as_delivery_checkbox = $( '#orderable_settings_store_general_service_hours_pickup_same' ),
311 default_state = $same_as_delivery_checkbox.data( 'default-state' );
312
313 if ( typeof default_state === 'undefined' ) {
314 default_state = $same_as_delivery_checkbox.is( ':checked' );
315 $same_as_delivery_checkbox.data( 'default-state', default_state );
316 }
317
318 if ( 1 === $selected_services.length && 'pickup' === $selected_services.val() ) {
319 $same_as_delivery_checkbox.prop( 'checked', false ).parent().addClass( visibility_class );
320 $( document.body ).trigger( 'orderable-toggle-element', {
321 trigger_element: $same_as_delivery_checkbox[0],
322 add_class: false
323 } );
324 } else {
325 $same_as_delivery_checkbox.prop( 'checked', default_state ).parent().removeClass( visibility_class );
326 $( document.body ).trigger( 'orderable-toggle-element', {
327 trigger_element: $same_as_delivery_checkbox[0],
328 add_class: default_state
329 } );
330 }
331
332 $( document ).trigger( 'orderable-add-last-row-class' );
333 } );
334
335 /**
336 * Set default state of "Same as delivery service hours" checkbox.
337 */
338 $( document.body ).on( 'change', '#orderable_settings_store_general_service_hours_pickup_same', function( e ) {
339 $( this ).data( 'default-state', $( this ).is( ':checked' ) );
340 } );
341
342 /**
343 * Toggle open hours day.
344 */
345 $( '.orderable-enable-day' ).on( 'change', function() {
346 var $row = jQuery( this ).closest( 'tr' ),
347 hidden_class = 'orderable-table__row--hidden';
348
349 $row.toggleClass( hidden_class, !this.checked );
350 } );
351 }
352 };
353
354 $( document ).ready( orderable_timings.on_ready );
355 }( jQuery, document ));
356 (function( $, document ) {
357 "use strict";
358
359 var orderable_triggers = {
360 /**
361 * On doc ready.
362 */
363 on_ready: function() {
364 /**
365 * On trigger click or change.
366 */
367 $( document.body ).on( 'click change', '[data-orderable-trigger]', function( e ) {
368 var $trigger_element = $( this ),
369 trigger = $trigger_element.data( 'orderable-trigger' );
370
371 if ( 'click' === e.type && ( $trigger_element.is( 'select' ) || $trigger_element.is( 'input' ) || $trigger_element.is( 'label' ) ) ) {
372 return;
373 }
374
375 if ( $trigger_element.is( 'button' ) || $trigger_element.is( 'a' ) ) {
376 e.preventDefault();
377 }
378
379 $( document.body ).trigger( 'orderable-' + trigger, { trigger_element: $trigger_element } );
380 } );
381
382 /**
383 * On new row.
384 */
385 $( document.body ).on( 'orderable-new-row', function( e, data ) {
386 var $button = $( data.trigger_element ),
387 $target = $( $button.data( 'orderable-target' ) ),
388 $body = $target.find( '.orderable-table__body' ),
389 $row = $body.find( '.orderable-table__row--repeatable:last-child' ),
390 index = parseInt( $row.data( 'orderable-index' ) ),
391 new_index = index + 1,
392 row_html = $row[ 0 ].outerHTML.replace( /\[\d+\]/gm, '[' + new_index + ']' ).replace( /data-orderable-index="\d+"/gm, 'data-orderable-index="' + new_index + '"' );
393
394 $body.append( row_html );
395
396 var $new_row = $body.find( '.orderable-table__row--repeatable:last-child' );
397
398 // Reset inputs.
399 $new_row.find( 'input' ).not( 'input[type="checkbox"]' ).val( '' );
400
401 // Reset datepickers.
402 var $datepickers = $new_row.find( '.hasDatepicker' );
403
404 $datepickers.each( function( index, datepicker ) {
405 var $datepicker = $( datepicker );
406
407 // Remove datepicker class and datepicker generated ID.
408 $datepicker.removeClass( 'hasDatepicker' ).attr( 'id', '' );
409 } );
410
411 // Reset selects.
412 var $selects = $new_row.find( 'select' );
413
414 $selects.each( function( index, select ) {
415 var $select = $( select ),
416 $blank_option = $select.find( 'option[value=""]' ),
417 is_multi_select = $select.hasClass( 'orderable-select--multi-select' ),
418 value = $blank_option.length || is_multi_select ? '' : $select.find( 'option:first-child' ).val();
419
420 $select.val( value );
421
422 if ( is_multi_select ) {
423 $select.change();
424 }
425 } );
426
427 // Checkboxes.
428 $new_row.find( 'input[type="checkbox"]' ).prop( 'checked', false );
429
430 // Remove multi select container and reinit.
431 $new_row.find( '.multi-select-container' ).remove();
432 $( document ).trigger( 'orderable-init-multiselects', { selects: $body.find( '.orderable-select--multi-select' ) } );
433
434 // Trigger select toggles.
435 $body.find( '[data-orderable-trigger="toggle-element-select"]' ).change();
436
437 $( document ).trigger( 'orderable-add-last-row-class' );
438 } );
439
440 /**
441 * On remove row.
442 */
443 $( document.body ).on( 'orderable-remove-row', function( e, data ) {
444 var $button = $( data.trigger_element ),
445 $row = $button.closest( 'tr' );
446
447 $row.remove();
448
449 $( document ).trigger( 'orderable-add-last-row-class' );
450 } );
451
452 /**
453 * On toggle element.
454 */
455 $( document.body ).on( 'orderable-toggle-element', function( e, data ) {
456 data.add_class = typeof data.add_class !== 'undefined' ? data.add_class : null;
457
458 var $trigger_element = $( data.trigger_element ),
459 $target = $( $trigger_element.data( 'orderable-target' ) ),
460 toggle_class = $trigger_element.data( 'orderable-toggle-class' );
461
462 if ( null === data.add_class ) {
463 $target.toggleClass( toggle_class );
464 } else if ( true === data.add_class ) {
465 $target.addClass( toggle_class );
466 } else if ( false === data.add_class ) {
467 $target.removeClass( toggle_class );
468 }
469
470 $( document ).trigger( 'orderable-add-last-row-class' );
471 } );
472
473 /**
474 * On toggle element select.
475 */
476 $( document.body ).on( 'orderable-toggle-element-select', function( e, data ) {
477 var $trigger_element = $( data.trigger_element ),
478 $parent = $trigger_element.closest( $trigger_element.data( 'orderable-parent' ) ),
479 targets = $trigger_element.data( 'orderable-target' ),
480 selected = $trigger_element.val();
481
482 if ( $parent.length <= 0 || typeof targets[ selected ] === 'undefined' ) {
483 return;
484 }
485
486 $.each( targets[ selected ], function( index, target ) {
487 var $target = $parent.find( target );
488
489 if ( 'show' === index ) {
490 $target.show();
491 } else if ( 'hide' === index ) {
492 $target.hide();
493 }
494 } );
495
496 $( document ).trigger( 'orderable-add-last-row-class' );
497 } );
498
499 /**
500 * On toggle wrapper.
501 */
502 $( document.body ).on( 'orderable-toggle-wrapper', function( e, data ) {
503 var $trigger_element = $( data.trigger_element ),
504 wrapper = $trigger_element.data( 'orderable-wrapper' ),
505 group = $trigger_element.data( 'orderable-wrapper-group' ),
506 $target = $( '.orderable-toggle-wrapper--' + wrapper + '[data-orderable-wrapper-group="' + group + '"]' );
507
508 $( '.orderable-toggle-wrapper[data-orderable-wrapper-group="' + group + '"]' ).removeClass( 'orderable-toggle-wrapper--active' );
509 $target.addClass( 'orderable-toggle-wrapper--active' );
510
511 $( '[data-orderable-wrapper-group="' + group + '"]' ).removeClass( 'orderable-trigger-element--active' );
512 $( '[data-orderable-wrapper="' + wrapper + '"]' ).addClass( 'orderable-trigger-element--active' );
513
514 $( document ).trigger( 'orderable-add-last-row-class' );
515 } );
516
517 /**
518 * Add last row class trigger.
519 */
520 $( document ).on( 'orderable-add-last-row-class', orderable_triggers.add_last_row_class );
521
522 /**
523 * On ready triggers.
524 */
525 $( document ).trigger( 'orderable-add-last-row-class' );
526 },
527
528 /**
529 * Add last row class.
530 */
531 add_last_row_class: function() {
532 var $tables = $( '.orderable-table' ),
533 last_row_class = 'orderable-table__row--last',
534 $last_rows = $tables.find( '.' + last_row_class ),
535 $last_row = $tables.find( 'tbody > tr:visible:last' );
536
537 $last_rows.removeClass( last_row_class );
538 $last_row.addClass( last_row_class );
539 }
540 };
541
542 $( document ).ready( orderable_triggers.on_ready );
543 }( jQuery, document ));