-
Notifications
You must be signed in to change notification settings - Fork 608
/
product.js
85 lines (68 loc) · 2.75 KB
/
product.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
Import all product specific js
*/
import PageManager from './page-manager';
import Review from './product/reviews';
import collapsibleFactory from './common/collapsible';
import ProductDetails from './common/product-details';
import videoGallery from './product/video-gallery';
import { classifyForm } from './common/utils/form-utils';
import modalFactory, { modalTypes } from './global/modal';
const { WRITE_REVIEW } = modalTypes;
export default class Product extends PageManager {
constructor(context) {
super(context);
this.url = window.location.href;
this.$reviewLink = $('[data-reveal-id="modal-review-form"]');
this.$bulkPricingLink = $('[data-reveal-id="modal-bulk-pricing"]');
this.reviewModal = modalFactory('#modal-review-form')[0];
}
onReady() {
// Listen for foundation modal close events to sanitize URL after review.
$(document).on('close.fndtn.reveal', () => {
if (this.url.indexOf('#write_review') !== -1 && typeof window.history.replaceState === 'function') {
window.history.replaceState(null, document.title, window.location.pathname);
}
});
$(document).on('opened.fndtn.reveal', () => this.reviewModal.setupFocusableElements(WRITE_REVIEW));
let validator;
// Init collapsible
collapsibleFactory();
this.productDetails = new ProductDetails($('.productView'), this.context, window.BCData.product_attributes);
this.productDetails.setProductVariant();
videoGallery();
const $reviewForm = classifyForm('.writeReview-form');
const review = new Review($reviewForm);
$('body').on('click', '[data-reveal-id="modal-review-form"]', () => {
validator = review.registerValidation(this.context);
this.ariaDescribeReviewInputs($reviewForm);
});
$reviewForm.on('submit', () => {
if (validator) {
validator.performCheck();
return validator.areAll('valid');
}
return false;
});
this.productReviewHandler();
this.bulkPricingHandler();
}
ariaDescribeReviewInputs($form) {
$form.find('[data-input]').each((_, input) => {
const $input = $(input);
const msgSpanId = `${$input.attr('name')}-msg`;
$input.siblings('span').attr('id', msgSpanId);
$input.attr('aria-describedby', msgSpanId);
});
}
productReviewHandler() {
if (this.url.indexOf('#write_review') !== -1) {
this.$reviewLink.trigger('click');
}
}
bulkPricingHandler() {
if (this.url.indexOf('#bulk_pricing') !== -1) {
this.$bulkPricingLink.trigger('click');
}
}
}