Keunggulan kulkas Bespoke Samsung
Designed for you, by you
Desain kulkas impian Anda dengan Samsung BESPOKE. Mix and Match berbagai pilihan modul, warna, dan material yang dapat disesuaikan dengan desain dapur dan style Anda
*Ketersediaan warna dapat berbeda di setiap negara. Info lebih lanjut dapat di check di www.samsung.com/id/refrigerators/bespoke/
Kulkas yang menyesuaikan kebutuhan Anda
Kulkas BESPOKE memberikan pilihan tipe, warna, dan material yang dapat anda custom dan kombinasikan. Dimulai dengan satu modul kulkas, tambahkan modul baru kapanpun sesuai kebutuhan!
*Ketersediaan warna dapat berbeda di setiap negara. Info lebih lanjut dapat di check di www.samsung.com/id/refrigerators/bespoke/
Desain kulkas Bespoke Anda
Desain Kulkas BESPOKE yang menggambarkan diri Anda. Pilih interior dan tipe produk yang Anda inginkan, kemudian pilih warna dan material sesuai dengan preference Anda
floating menu
Interior
popup open
3D PREVIEW
BACK
GET THE DETAIL
select refrigerator and color type menu
SATIN GLASS
about satin glass
GLAM GLASS
about glam glass
Preview
' +
'
' +
'
' +
'
' +
'
' +
'
'+
'
' +
'' +
' ' +
' ' +
'
' +
'{for item in doorItem}' +
''+
'' +
' ' +
' ' +
' ' +
'{/for}' +
' ' +
'
' +
'';
return fridgeTemplateHtml;
},
removeFridge: function (target, $self) {
var _ = this;
var fridgeKey = $self.data('key');
var removedFridgeIndex = _fridgeList[fridgeKey].itemIndex; // 삭제하는 냉장고의 인덱스 구하기
delete _fridgeList[fridgeKey];
var $fridgeAddArea = componentScoper(_.defParam.selector.fridgeAddArea);
var $fridgeAddAreaFocusable = componentScoper(_.defParam.selector.fridgeAddArea).find(defParams.focusableSelector);
var setFunction = function() {
$fridgeAddArea.removeClass('visually-hidden');
$fridgeAddArea.removeAttr('aria-hidden');
$fridgeAddAreaFocusable.removeAttr('tabindex');
};
setTimeout(function() {
if (_.isEnableMoreAdded()) {
setFunction();
}
//첫번째 항목을 지웠을 경우, 스크린 리더기를 위한 focus를 재설정
if ($self.index() == 0) {
// 냉장고가 있을 경우 다음 냉장고의 삭제버튼으로 이동
// 없을 경우 추가버튼으로 이동
if (componentScoper(_.defParam.selector.fridgeRemoveButton).length > 1) {
componentScoper(defParams.fridge.list).children().eq(1).find(_.defParam.selector.fridgeRemoveButton).focus();
} else {
componentScoper(_.defParam.selector.fridgeAddButton).focus();
}
} else {
//첫번째 냉장고의 삭제버튼으로 이동
componentScoper(_.defParam.selector.fridgeRemoveButton)[0].focus();
}
$self.remove();
}, 100);
_currentFridgeAreaSize -= _.getTargetSize(target);
// 삭제한 냉장고의 오른편에 있던 냉장고는 모두 인덱스를 1씩 낮춤
$.each(_fridgeList, function (key, fridge) {
if (fridge.itemIndex > removedFridgeIndex) {
fridge.itemIndex -= 1;
}
});
_.checkMoveToNextStep();
if (0 == Object.keys(_fridgeList).length && STEP_3 == _currentStep) {
var closePanel = componentScoper(defParams.content.wrap).hasClass(defParams.content.cssClass.wrapClose);
if (closePanel) {
componentScoper(defParams.content.wrapButton).trigger('click');
}
_.setCurrentStep(STEP_2);
}
if (0 == Object.keys(_fridgeList).length) {
_$lastFridgeItem = null;
componentScoper('input[name=customType]').prop('checked', false);
_.activeDefaultFridge();
} else {
var fridgeKey = Object.keys(_fridgeList).slice(-1).pop();
_$lastFridgeItem = componentScoper('[data-key="' + fridgeKey + '"]');
if (_.checkFridgeAllColor(fridgeKey)) {
_.activeDefaultFridge();
} else {
_$lastFridgeItem.addClass(getSelectorString(_.defParam.selector.fridgeListItemActive));
}
var currentCheckedType = componentScoper('input[name=customType]:checked').data('typeTarget');
if (currentCheckedType != _fridgeList[fridgeKey].model) {
var checkedTarget = componentScoper('[data-type-target="' + _fridgeList[fridgeKey].model + '"]').eq(0).prop('checked', true);
_.goToCheckedItemForMobile(STEP_2);
}
}
},
removeAllFridge: function () {
var _ = this;
_fridgeList = {};
componentScoper(defParams.fridge.item).not(_.defParam.selector.fridgeAddArea).remove();
_currentFridgeAreaSize = 0;
_.checkMoveToNextStep();
var $fridgeAddArea = componentScoper(_.defParam.selector.fridgeAddArea);
var $fridgeAddAreaFocusable = componentScoper(_.defParam.selector.fridgeAddArea).find(defParams.focusableSelector);
$fridgeAddArea.removeClass('visually-hidden');
$fridgeAddArea.removeAttr('aria-hidden');
$fridgeAddAreaFocusable.removeAttr('tabindex');
},
checkFridgeAllColor: function (fridgeKey) {
var fridgeObj = _fridgeList[fridgeKey];
if (!fridgeObj) {
return false;
}
return FRIDGE_MODELS[fridgeObj.model].door == Object.keys(fridgeObj.doorList).length;
},
activeDefaultFridge: function () {
var _ = this;
componentScoper(defParams.fridge.item).not(controlManager.defParam.selector.fridgeAddArea).each(function () {
var $this = $(this);
var fridgeKey = $this.data('key');
if (false == _.checkFridgeAllColor(fridgeKey)) {
$this.addClass(getSelectorString(_.defParam.selector.fridgeListItemActive));
if (_fridgeList[fridgeKey]) {
componentScoper('input[data-type-target="' + _fridgeList[fridgeKey].model + '"]').eq(0).prop('checked', true);
} else {
setTimeout(function () {
componentScoper('input[name=customType]').prop('checked', false);
}, 0);
}
return false;
}
});
},
addSelectedAttrToActiveDoor: function($activeDoorItem) {
var _ = this;
var isActive = $activeDoorItem && $activeDoorItem.hasClass('pr-g-bespoke-simulator__active-fridge-fridge-door-item--active');
componentScoper(defParams.fridge.door.item).find(defParams.fridge.door.btn).removeAttr('title');
if(!isActive && $activeDoorItem) {
$activeDoorItem.find(defParams.fridge.door.btn).attr('title', 'selected');
}
},
activeDefaultDoor: function () {
var _ = this;
var isOk = false;
$.each(Object.keys(_fridgeList), function (index, fridgeKey) {
var fridgeObj = _fridgeList[fridgeKey];
var doorListKeyArray = Object.keys(fridgeObj.doorList);
if (FRIDGE_MODELS[fridgeObj.model].door != doorListKeyArray.length) {
isOk = true;
for (var i = 0; i < FRIDGE_MODELS[fridgeObj.model].door; i++) {
if (-1 == doorListKeyArray.indexOf('' + i)) {
componentScoper('[data-key="' + fridgeKey + '"] [data-door-index="' + i + '"]').addClass(getSelectorString(_.defParam.selector.firdgeDoorListItemActive));
_.addSelectedAttrToActiveDoor(componentScoper('[data-key="' + fridgeKey + '"] [data-door-index="' + i + '"]'));
return false;
}
}
}
});
if (false == isOk) {
componentScoper(defParams.fridge.door.item).eq(0).trigger('click');
}
},
getTargetSize: function (target) {
return FRIDGE_MODELS[target] ? FRIDGE_MODELS[target].size : 0;
},
isEnableAdded: function (target) {
var _ = this;
var targetSize = _.getTargetSize(target);
if (!targetSize) return false;
if (FRIDGE_AREA_MAX_SIZE < (_currentFridgeAreaSize + targetSize)) return false;
return true;
},
isEnableMoreAdded: function () {
return Object.keys(FRIDGE_MODELS).map(function(i) { return FRIDGE_MODELS[i]; }).map(function (item) {
return item.size;
}).some(function (size) {
return (_currentFridgeAreaSize + size) <= FRIDGE_AREA_MAX_SIZE;
});
},
setCurrentStep: function (step) {
var _ = this;
var intCurrentStep = Number(_currentStep.replace(/[^0-9]/g, "")),
intStep = Number(step.replace(/[^0-9]/g, ""));
// WAI-ARIA 적용
if(step == STEP_4) {
pageBespokeManager.setStepAriaHiddenAttr(false);
} else {
pageBespokeManager.setStepAriaHiddenAttr(true, step);
}
if (intStep < intCurrentStep && intCurrentStep < 4) { // isPrevious, 마지막 스텝에서 뒤로 갈 경우 초기화되지 않음.
interactionManager.changeStep(step, true);
} else {
interactionManager.changeStep(step, false);
}
_prevStep = _currentStep;
_currentStep = step;
_.changeCurrentStep(step);
},
changeCurrentStep: function (step) {
var _ = this;
var isMobile = responsiveManager.getMobileCheck();
if(STEP_3 != step) {
_.addSelectedAttrToActiveDoor(null);
}
componentScoper(defParams.fridge.door.item).removeClass(_.defParam.selector.firdgeDoorListItemActive.substring(1, _.defParam.selector.firdgeDoorListItemActive.length));
componentScoper('input[name^=colorSelect]').prop('checked', false);
var $fridgeArea = componentScoper(defParams.fridge.self);
var $fridgeAddArea = componentScoper(_.defParam.selector.fridgeAddArea);
var $fridgeAddAreaFocusable = componentScoper(_.defParam.selector.fridgeAddArea).find(defParams.focusableSelector);
if (STEP_4 == step) {
$fridgeAddArea.addClass('visually-hidden');
$fridgeAddArea.attr('aria-hidden', 'true');
$fridgeAddAreaFocusable.attr('tabindex', '-1');
componentScoper(defParams.common.tooltipWrap).hide();
//냉장고 영역 focusable 영역 제거
componentScoper(defParams.fridge.door.btn).each(function(index, item) {
var $item = $(item);
var divTag = $item.clone().wrapAll('
').parent().html();
var replaceTag = divTag.replace(/button type="button"/gi, 'div');
$item.replaceWith(replaceTag);
});
$fridgeArea.find('img').attr({
'aria-hidden': 'true',
'tabindex': '-1'
});
//냉장고 영역 focusable 영역 제거-->
componentScoper(defParams.fridge.item).addClass(_.defParam.selector.fridgeListItemDraggable.substring(1, _.defParam.selector.fridgeListItemDraggable.length));
return;
} else {
if (_.isEnableMoreAdded()) {
$fridgeAddArea.removeClass('visually-hidden');
$fridgeAddArea.removeAttr('aria-hidden');
$fridgeAddAreaFocusable.removeAttr('tabindex');
}
if(_prevStep == STEP_4) {
//냉장고 영역 focusable 영역
componentScoper(defParams.fridge.door.btn).each(function(index, item) {
var $item = $(item);
var divTag = $item.clone().wrapAll('
').parent().html();
var replaceTag = divTag.replace(/div/gi, 'button type="button"');
$item.replaceWith(replaceTag);
});
$fridgeArea.find('img').removeAttr('aria-hidden');
$fridgeArea.find('img').removeAttr('tabindex');
//냉장고 영역 focusable 영역 제거-->
}
componentScoper(defParams.common.tooltipWrap).show();
componentScoper(defParams.fridge.item).removeClass(_.defParam.selector.fridgeListItemDraggable.substring(1, _.defParam.selector.fridgeListItemDraggable.length));
}
if (STEP_2 == step) {
if (null == _$lastFridgeItem) {
componentScoper(defParams.fridge.item).eq(0).addClass(getSelectorString(_.defParam.selector.fridgeListItemActive));
} else {
var fridgeKey = _$lastFridgeItem.data('key');
if (_.checkFridgeAllColor(fridgeKey)) {
_.activeDefaultFridge();
} else {
_$lastFridgeItem.addClass(getSelectorString(_.defParam.selector.fridgeListItemActive));
}
}
} else {
componentScoper(defParams.fridge.item).removeClass(getSelectorString(_.defParam.selector.fridgeListItemActive));
}
if (isMobile) {
_.goToCheckedItemForMobile();
}
_.checkMoveToNextStep();
},
checkMoveToNextStep: function (step) {
step = step || _currentStep;
var _ = this;
var $nextStepButton = componentScoper('[data-target-step='+step+']' + ' ' + _.defParam.selector.nextStepButton);
var isActive = false;
function changeButtonStatus(active) {
if (active) { // enable
var nextStepIndex = Number(step.replace(/[^0-9]/g, "")) + 1;
$nextStepButton.addClass(_.defParam.selector.nextStepButtonActive.substring(1, _.defParam.selector.nextStepButtonActive.length));
$nextStepButton.removeAttr('data-cm-layer-id');
$nextStepButton.removeData('cm-layer-id');
$nextStepButton.attr('data-target-id', 'step' + nextStepIndex);
} else {
$nextStepButton.removeClass(_.defParam.selector.nextStepButtonActive.substring(1, _.defParam.selector.nextStepButtonActive.length));
}
return active;
}
// 모든 냉장고 문의 색상 적용이 되었는지 체크
var fridgeList = Object.keys(_fridgeList).map(function(i) { return _fridgeList[i]; });
isActive = (0 < fridgeList.length) && fridgeList.every(function (item) {
return FRIDGE_MODELS[item.model].door == Object.keys(item.doorList).length;
});
switch (step) {
case STEP_2:
// 냉장고 존재 여부 체크
changeButtonStatus(0 < Object.keys(_fridgeList).length);
break;
case STEP_3:
changeButtonStatus(isActive);
break;
default:
break;
}
if (isActive) { // STEP2의 경우, PREVIEW 버튼 활성화를 위해 STEP3까지 함께 체크해야 함
componentScoper(_.defParam.selector.previewBottomButton).addClass(getSelectorString(_.defParam.selector.previewBottomButtonActive));
if (step == STEP_3) {
componentScoper(_.defParam.selector.nextStepButton).addClass(getSelectorString(_.defParam.selector.previewBottomButtonActive));
}
} else {
componentScoper(_.defParam.selector.previewBottomButton).removeClass(getSelectorString(_.defParam.selector.previewBottomButtonActive));
if (step != STEP_3) {
componentScoper(_.defParam.selector.nextStepButton).removeClass(getSelectorString(_.defParam.selector.previewBottomButtonActive));
}
}
},
goToCheckedItemForMobile: function (step) {
step = step || _currentStep;
var _ = this;
var $checkedTarget = componentScoper('[data-target-step='+step+']').find('input.select-item:checked');
if (0 < $checkedTarget.length) {
componentScoper('[data-target-step='+step+']').find('.slick-slider').slick('slickGoTo', $checkedTarget.closest('.slick-slide').data('slick-index'), true);
}
},
showConfirmPopup: function (cfg, confirmCallback, cancelCallback) {
var _ = this;
var $popup = $(_.defParam.selector.confirmPopup);
let isConfirm = false;
if (!cfg) return;
$popup.find(_.defParam.selector.confirmPopupTitle).html(cfg.titleMsg);
$popup.find(_.defParam.selector.confirmPopupCloseBtn).off('click');
var $tmp = $('
', {
type: 'button',
'data-cm-layer-id': _.defParam.selector.confirmPopup.substring(1, _.defParam.selector.confirmPopup.length)
});
$(custom.body).append($tmp);
$tmp.trigger('click').remove();
// apply event.
$popup.find(_.defParam.selector.confirmPopupActionButton).text(cfg.activeButtonMsg).off('click').on('click', function () {
isConfirm = true;
confirmCallback();
//popup close
$popup.find('.js-alert-close').trigger('click');
});
pageBespokeManager.observedAttribute($popup[0]);
if (cancelCallback) {
$popup.find(_.defParam.selector.confirmPopupCloseBtn).on('click', function () {
if (false == isConfirm) {
cancelCallback();
//popup close
$popup.find('.js-alert-close').trigger('click');
if (cfg.lastElement) {
setTimeout(function () {
cfg.lastElement.focus();
}, 100);
}
}
});
}
},
showAlertPopup: function (cfg) {
var _ = this;
var $popup = $(_.defParam.selector.alertPopup);
var dimd = $(".s-layer-dimmed").eq(0);
if (!cfg) return;
$popup.find(_.defParam.selector.alertPopupTitle).html(cfg.titleMsg);
if (cfg.useIcon) {
$popup.find(defParams.popup.alertPopup.wrap).addClass(getSelectorString(defParams.popup.alertPopup.content.exclamation));
} else {
$popup.find(defParams.popup.alertPopup.wrap).removeClass(getSelectorString(defParams.popup.alertPopup.content.exclamation));
}
if (cfg.lastElement) {
$popup.find(defParams.popup.alertPopup.closeBtn).off('click').on('click', function () {
setTimeout(function () {
cfg.lastElement.focus();
}, 100);
});
}
var $tmp = $('', {
type: 'button',
'data-cm-layer-id': _.defParam.selector.alertPopup.substring(1, _.defParam.selector.alertPopup.length)
});
$(custom.body).append($tmp);
$tmp.trigger('click').remove();
pageBespokeManager.observedAttribute($popup[0]);
dimd.show();
},
getTextureType: function (textureName) {
var textureType = textureName;
if (-1 < textureName.lastIndexOf(TEXTURE_TYPE.GLASS)) {
textureType = TEXTURE_TYPE.GLASS;
} else if (-1 < textureName.lastIndexOf(TEXTURE_TYPE.METAL)) {
textureType = TEXTURE_TYPE.METAL
}
return textureType;
},
fridgeMoveNext: function (e) {
var $this = $(this); // clicked button.
var order = dragManager.sortable.toArray();
var currentKey = $this.closest(defParams.fridge.item).data('key');
var currentIndex = _fridgeList[currentKey].itemIndex;
var maxFridgeCount = Object.keys(_fridgeList).length;
var targetIndex = currentIndex + 1;
if (targetIndex == maxFridgeCount) {
targetIndex = 0;
}
if (-1 == targetIndex) {
targetIndex = maxFridgeCount - 1;
}
(function () {
let tmp = order[currentIndex];
order[currentIndex] = order[targetIndex];
order[targetIndex] = tmp;
if (isRTL) {
order.reverse();
targetIndex = (maxFridgeCount + 1) - targetIndex; // for swap _fridgeList
}
dragManager.sortable.sort(order);
}());
dragManager.onEnd({
oldIndex: currentIndex,
newIndex: targetIndex
});
$this.focus();
}
};
var responsiveManager = {
init: function () {
var _ = this;
_.bindEvents();
_.onResponsiveChange();
$(win).trigger('resize');
},
reInit: function () {
var _ = this;
_.onResponsiveChange();
},
initLayout: function () {},
bindEvents: function () {
var _ = this,
$document = $(document);
custom.body.on(CST_EVENT.RESPONSIVE.CHANGE, $.proxy(_.onResponsiveChange, _));
componentScoper(controlManager.defParam.selector.prevStepButton).on('click', $.proxy(_.movePrevStep, _));
$document.on('click.interiorPopup', '[data-cm-layer-id="'+ popupId.interior + '"]', $.proxy(_.setSlickOnPopup, _));
$document.on('click.colorChipPopup', '[data-cm-layer-id="'+ popupId.colorChip + '"]', $.proxy(_.setSlickOnPopup, _));
$document.on('click.closeDimd', '.js-alert-close', function() { $('.s-layer-dimmed').hide(); });
},
getResizeWidth: function () {
var doc = win.document,
resizeWidth = win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;
return resizeWidth;
},
getMobileCheck: function () {
var _ = this,
resizeWidth = _.getResizeWidth(),
mobileCheck = false;
mobileCheck = false;
if (resizeWidth <= V_STATIC.RESPONSIVE.MOBILE.WIDTH) {
mobileCheck = true;
} else if (V_STATIC.RESPONSIVE.MOBILE.WIDTH < resizeWidth) {
mobileCheck = false;
}
return mobileCheck;
},
setAllSlickOnPage: function() {
var _ = this;
var $carouselIntoStep2 = componentScoper(defParams.step2.carousel);
var $carouselIntoStep3 = componentScoper(defParams.step3.carousel);
var $carouselIntoSelectPopup = $(defParams.popup.selectPopup.carousel);
if (true === responsiveManager.getMobileCheck()) {
// interior type popup에서 input radio가 키보드로 옮겨지는 이슈
$carouselIntoSelectPopup.on('init', function (event, slick) {
slick.$slides.siblings().not('.slick-current.slick-active').find('input').attr('disabled', true);
});
$carouselIntoSelectPopup.on('afterChange', function (event, slick) {
slick.$slides.siblings().not('.slick-current.slick-active').find('input').attr('disabled', true);
slick.$slides.siblings().find('.slick-current.slick-active').find('input').removeAttr('disabled');
});
$carouselIntoSelectPopup.on('destroy', function (event, slick) {
slick.$slides.find('input').removeAttr('disabled');
});
_.setSlick($carouselIntoSelectPopup, defParams.popup.selectPopup.slickOpts, 'afterChange', defParams.popup.selectPopup.self);
if( $carouselIntoStep2.find(defParams.step2.carouselItem).length > 3 ) {
_.setSlick($carouselIntoStep2, defParams.step2.slickOpts);
}
if( $carouselIntoStep3.find(defParams.step3.carouselItem).length > 1 ) {
$carouselIntoStep3.on('init', function (event, slick) {
slick.$slides.find(defParams.focusableSelector).attr('tabindex', '-1');
slick.$slides.siblings('.slick-current.slick-active').find(defParams.focusableSelector).removeAttr('tabindex');
});
_.setSlick($carouselIntoStep3, defParams.step3.slickOpts);
$carouselIntoStep3.on('afterChange', function (event, slick, currentSlide, nextSlide) {
var $slideTrackChildren = slick.$slideTrack.children();
$slideTrackChildren.eq(currentSlide).find(defParams.focusableSelector).removeAttr('tabindex');
$slideTrackChildren.not(':eq(' + currentSlide + ')').find(defParams.focusableSelector).attr('tabindex', '-1');
});
}
} else {
_.unSlick($carouselIntoSelectPopup);
_.unSlick($carouselIntoStep2);
_.unSlick($carouselIntoStep3);
}
_.setSlick($(defParams.popup.colorchipPopup.carousel), defParams.popup.colorchipPopup.slickOpts, 'afterChange', defParams.popup.colorchipPopup.self);
},
setSlickOnPopup: function(e, slickType) {
var _ = this,
$target = $(e.target) || e,
innerSlider = null,
initialSlideNumber = 1,
layerId = null,
interiorSlickItemInput = null,
dimd = $(".s-layer-dimmed").eq(0);
layerId = $target.closest('[data-cm-layer-id]').attr('data-cm-layer-id') || $target.closest('[data-cm-layer-id]').data('cm-layer-id');
innerSlider = $('#'+layerId).find(defParams.common.hasSlick);
if(layerId === popupId.colorChip) {
initialSlideNumber = $target.attr('data-slide') || $target.data('slide') || 1;
setTimeout(function () {
_.setSlickGoTo(innerSlider, (parseInt(initialSlideNumber) - 1) );
_.initSlickPosition(innerSlider);
}, 0);
} else {
interiorSlickItemInput = $('#'+layerId).find('[data-style-target='+_interiorType+']');
var tempItem = interiorSlickItemInput.closest(defParams.common.slickItem).not(defParams.common.slickCloned).find('input');
tempItem.prop('checked', true).trigger('change');
if (true === responsiveManager.getMobileCheck()) {
var tempIndex = tempItem.closest(defParams.common.slickItem).attr('data-slick-index') || tempItem.closest(defParams.common.slickItem).data('slick-index');
setTimeout(function () {
_.setSlickGoTo(innerSlider, tempIndex );
_.initSlickPosition(innerSlider);
}, 0);
}
if (layerId === popupId.interior) {
setTimeout(function () {
$('#' + layerId).find('[name="selectedStyle"]:checked').focus();
}, 200);
}
}
dimd.show();
},
setSlickDots: function() {
$('.slick-dots').each(function(index, item) {
var $item = $(item);
!$item.parent().hasClass('s-slick-dots') && $item.wrap('
');
});
},
onResponsiveChange: function () {
var _ = this;
_.interactionSet();
_.setAllSlickOnPage();
_.setSlickDots();
controlManager.goToCheckedItemForMobile();
interactionManager.setStepWrapperHeight();
if(_.getMobileCheck()) {
componentScoper('.pr-g-bespoke-simulator__step-move-btn-wrap').attr('aria-hidden', 'true');
} else {
componentScoper('.pr-g-bespoke-simulator__step-move-btn-wrap').removeAttr('aria-hidden');
}
},
interactionSet: function() {
var selector = defParams.content.active + ' [data-interaction]';
$selector = selector;
if (typeof selector === 'string') {
var $selector = componentScoper(selector);
}
var mobileCheck = responsiveManager.getMobileCheck();
var interaction = 'fade-in-right';
if (mobileCheck) {
interaction = 'fade-in-bottom';
}
$selector.attr('data-interaction', interaction);
},
hasSlick: function ($target) {
return $target.hasClass(getSelectorString(defParams.common.hasSlick));
},
unSlick: function ($carousel) {
var _ = this,
sDotsClass = 's-slick-dots',
hasSlick = this.hasSlick($carousel);
if (hasSlick) {
var slickItemIndex = _.getCurrentActiveItem($carousel).index();
$carousel.find('input[type=radio]').each(function (idx) {
if ('none' == $(this).css('display')) {
$(this).removeAttr('style');
}
});
$carousel.slick('unslick');
}
$('.' + sDotsClass).each(function(index, item) {
var $item = $(item);
!$item.find('.slick-dots').length && $item.remove();
});
},
initSlickPosition: function($carousel) {
var _ = this,
hasSlick = _.hasSlick($carousel);
if(hasSlick) {
$carousel.slick('setPosition');
}
},
setSlick: function ($carousel, slickOpts, slickEventListenerType, className) {
var _ = this,
hasSlick = _.hasSlick($carousel);
if (!hasSlick) {
if (null !== $carousel) {
var slickItemIndex = _.getCurrentActiveItem($carousel).index();
if($carousel.is(componentScoper(defParams.step2.carousel))) {
slickOpts.initialSlide = slickItemIndex !== -1 ? parseInt(slickItemIndex / 3) : 0;
} else {
slickOpts.initialSlide = slickItemIndex !== -1 ? slickItemIndex : 0;
}
if( $carousel.find(defParams.common.slickItem).length <= slickOpts.slidesToScroll ) {
$carousel.addClass(getSelectorString(defParams.common.slickNoDot));
} else {
$carousel.closest(defParams.typeSelect.self).addClass(defParams.cssClass.stepTypeSelectSidePadding)
}
if(slickOpts.infinite != false) {
//클론 영역 포커스 제거
$carousel.on('init', function (event, slick) {
slick.$slideTrack.find('.slick-slide.slick-cloned').each(function(index, item) {
var tempIdValue = Math.random().toString(36).substr(2, 9);
var $itemInput = null;
$itemInput = $(item).find('input');
$(item).find('label').attr('for', tempIdValue);
$itemInput.attr('id', tempIdValue);
$itemInput.css({
'display': 'none'
});
});
slick.$slideTrack.find('.slick-slide.slick-current').find(defParams.focusableSelector).removeAttr('tabindex');
});
$carousel.on('afterChange', function (slick, currentSlide) {
currentSlide.$slideTrack.find('.slick-slide.slick-cloned').each(function(index, item) {
var tempIdValue = Math.random().toString(36).substr(2, 9);
var $itemInput = null;
var $item = $(item);
$itemInput = $item.find('input');
$item.find('label').attr('for', tempIdValue);
$itemInput.attr('id', tempIdValue);
$itemInput.css({
'display': 'none'
});
});
currentSlide.$slideTrack.find('.slick-slide.slick-current').find(defParams.focusableSelector).removeAttr('tabindex');
});
}
$carousel.on('destroy', function (event, slick) {
slick.$slides.find(defParams.focusableSelector).removeAttr('tabindex');
});
$carousel.on('afterChange', function (slick, currentSlide) {
var $slickDots = currentSlide.$dots.children();
$slickDots.find('button').removeAttr('title');
$slickDots.eq(currentSlide.currentSlide).find('button').attr('title', 'selected');
$('.pr-g-bespoke-simulator__popup .slick-dots li').removeAttr('aria-hidden');
$('.pr-g-bespoke-simulator .slick-dots li').removeAttr('aria-hidden');
$('.pr-g-bespoke-simulator .slick-slide').removeAttr('id');
$('.pr-g-bespoke-simulator__popup .slick-slide').removeAttr('id');
});
$carousel.slick(slickOpts);
$('.pr-g-bespoke-simulator .slick-list').removeAttr('aria-live');
$('.pr-g-bespoke-simulator .slick-dots').attr('role', 'list');
$('.pr-g-bespoke-simulator .slick-dots li').attr('role', 'listitem').removeAttr('aria-hidden');
_.initSlickPosition($carousel);
}
if (slickEventListenerType) {
if(className === defParams.popup.selectPopup.self) {
var currentSlide = $carousel.slick('slickCurrentSlide');
$carousel.find('input').prop('checked', false);
$carousel.find('[data-slick-index='+currentSlide+']').find('input').prop('checked', true);
$carousel.on(slickEventListenerType, function (event, slick, currentSlide) {
var $slideTrackChildren = slick.$slides;
var $slickDots = slick.$dots.children();
var $currentInput = $slideTrackChildren.eq(currentSlide).find('input');
$slideTrackChildren.find('input').attr('disabled', true);
$currentInput.removeAttr('disabled');
$slideTrackChildren.find('input').prop('checked', false);
$currentInput.prop('checked', true);
// apply aria-selected.
$slideTrackChildren.find('input[type=radio]').css('display', 'none');
$currentInput.removeAttr('style');
});
}
if(className === defParams.popup.colorchipPopup.self) {
$carousel.on(slickEventListenerType, function (slick, currentSlide) {
var $currentSlide = currentSlide.$slideTrack.find('[data-slick-index='+currentSlide.currentSlide+']');
$currentSlide.find('.pr-g-bespoke-simulator__slick-item-inner-wrap').attr('aria-hidden', 'false');
$currentSlide.siblings().find('.pr-g-bespoke-simulator__slick-item-inner-wrap').attr('aria-hidden', 'true');
});
}
}
}
},
movePrevStep: function (e) {
var _ = this,
target = $(e.target),
currentStepIndex = _currentStep.replace(/[^0-9]/g, ""),
prevStepIndex = currentStepIndex - 1;
var prevStep = 'step' + prevStepIndex;
if (prevStep && !componentScoper('[data-target-step='+prevStep+']' + ', ' + '[data-target-step='+_currentStep+']').hasClass(interactionManager.ANIMATING_CLASS)) {
componentScoper(defParams.content.self).css('display', 'none');
componentScoper('[data-target-step='+prevStep+']').css('display', 'block');
controlManager.setCurrentStep(prevStep);
} else {
return;
}
},
getCurrentActiveItem: function($slickWrap) {
var _ = this,
$activeItemInput = null,
$activeItem = null;
$activeItemInput = $slickWrap.find('input:checked');
$activeItem = $activeItemInput.closest(defParams.common.slickItem);
return $activeItem;
},
setSlickGoTo: function($carousel, index) {
var _ = this;
if(_.hasSlick($carousel)) {
$carousel.slick('slickGoTo', parseInt(index), true);
}
},
};
var dragManager = {
sortable: null,
sortableDisable: null,
init: function () {
var _ = this;
_.setDragItem();
},
setDragItem: function () {
var _ = this,
$sortableWrap = null,
$sortableWrap = document.getElementsByClassName(getSelectorString(defParams.fridge.list))[0];
if($sortableWrap) {
_.sortable = new Sortable($sortableWrap, {
animation: 300,
dataIdAttr: 'data-key',
forceFallback: true, // ignore the HTML5 DnD behaviour and force the fallback to kick in
filter: controlManager.defParam.selector.fridgeAddArea,
handle: controlManager.defParam.selector.fridgeMoveButton,
direction: 'horizontal',
onMove: function (event) {
var moveFlag = false;
moveFlag = !event.related.classList.contains(controlManager.defParam.cssClass.fridgeAddArea) && (STEP_4 != _currentStep);
// 냉장고 2개가 자리가 바뀔 때마다 위치 인덱스도 바꿔 줌
return moveFlag;
},
onStart: function (e) {
if(Object.keys(_fridgeList).length >= 3) {
componentScoper(controlManager.defParam.selector.fridgeAddArea).hide();
}
// start.
if (isRTL) {
controlManager.FridgeListRevers('start');
}
componentScoper(controlManager.defParam.selector.fridgeMoveButton).css('pointer-events', 'none');
},
onChange: function (e) {
// change.
if (isRTL) {
controlManager.FridgeListRevers('change');
}
},
onEnd: _.onEnd
});
}
},
swapIndex: function (fridgeIndex1, fridgeIndex2) {
var fridgeKeys = Object.keys(_fridgeList);
var fridgeKey1, fridgeKey2;
for (var i=0; i < fridgeKeys.length; i++) {
var key = fridgeKeys[i];
if (_fridgeList[key].itemIndex == fridgeIndex1) {
fridgeKey1 = key;
} else if (_fridgeList[key].itemIndex == fridgeIndex2) {
fridgeKey2 = key;
}
}
var tmp = _fridgeList[fridgeKey1].itemIndex;
_fridgeList[fridgeKey1].itemIndex = _fridgeList[fridgeKey2].itemIndex;
_fridgeList[fridgeKey2].itemIndex = tmp;
},
onEnd: function (e) {
// end.
componentScoper(controlManager.defParam.selector.fridgeMoveButton).css('pointer-events', '');
var n = e.newIndex;
var o = e.oldIndex;
if (isRTL) {
var fridgeLength = 0;
fridgeLength = Object.keys(_fridgeList).length + 1;
n = fridgeLength - n;
}
if (o != n) {
dragManager.swapIndex(o, n);
}
if (isRTL) {
controlManager.FridgeListRevers('end');
controlManager.FridgeOrderSet();
}
componentScoper(controlManager.defParam.selector.fridgeAddArea).show();
}
};
var interiorPopupManager = {
init: function () {
var _ = this;
_.bindEvents();
},
bindEvents: function () {
var _ = this,
$document = $(document);
$document.on('change', 'input[name='+'selectedStyle'+']', $.proxy(_.getTaggingAttribute, _));
//Interior Type APPLY 버튼 이벤트
$document.off("click", componentScoper(defParams.popup.selectPopup.button.apply, 'String'), $.proxy(_.setInteriorType, _)).on("click", defParams.popup.selectPopup.button.apply, $.proxy(_.setInteriorType, _));
},
getTaggingAttribute: function(e) {
var _ = this,
$target = $(e.target) || e,
$applyButton = null,
defaultAttrValue = null;
defaultAttrValue = $target.attr('data-omni') || $target.attr('ga-la');
$applyButton = $target.closest(defParams.popup.selectPopup.self).find(defParams.popup.selectPopup.button.apply);
$applyButton.attr('data-omni', defaultAttrValue+':apply');
$applyButton.attr('ga-la', defaultAttrValue+':apply');
},
setInteriorType: function (e) {
var _ = this,
$target = $(e.target) || e;
var $selectPopupWrap = null;
var interiorType = null;
var $bgCanvas = componentScoper(defParams.space.canvas.self);
var dirName = fridgeImagePath;
var imgName = null;
var moImgName = null;
$selectPopupWrap = $target.closest(defParams.popup.selectPopup.wrap);
if($selectPopupWrap) {
interiorType = $selectPopupWrap.find("input[name=selectedStyle]:checked").attr('data-style-target') || data('style-target');
if(interiorType) {
imgName = dirName + interiorType + '.jpg';
moImgName = imgName.replace(interiorType, interiorType + '-mo');
$bgCanvas.find('source').attr('srcset', moImgName);
$bgCanvas.find('img').attr({
'src': responsiveManager.getMobileCheck() ? moImgName : imgName,
'data-src-pc': imgName,
'data-src-mobile': moImgName,
});
$selectPopupWrap.find('.js-alert-close').trigger('click');
_.saveInteriorTypeLocalStorage(interiorType);
if(_currentStep === STEP_4) pageBespokeManager.setCanvasData();
}
}
},
saveInteriorTypeLocalStorage: function (data) {
if (!(data == null || data == "")) {
_interiorType = data;
pageBespokeManager.setCanvasAltAttr();
window.localStorage.setItem("interiorType", data);
}
},
};
var specsPopupManager = {
popupData: {
RF9000: {
mainSpecs: [
{
label: 'Fridge Freezer (Liter)',
value: '112 ℓ',
},
{
label: 'Freezer (Liter)',
value: '112 ℓ',
},
{
label: 'Refrigerator (Liter)',
value: '381 ℓ',
},
{
label: 'Total',
value: '605 ℓ',
},
{
label: 'Width (mm)',
value: '908mm',
},
{
label: 'Height (mm)',
value: '1853mm',
},
{
label: 'Depth (mm)',
value: '697mm',
},
],
detailSpecs: [
{
name: 'Physical specification',
array: [
{
label: 'Dimension (W x H x D)',
value: '908 × 1,853 × 697 mm',
},
],
},
{
name: 'General Feature',
array: [
{
label: 'Refrigerant',
value: 'R-600a',
},
{
label: 'Door Alarm',
value: 'Yes',
},
{
label: 'Lock & Key',
value: 'Yes',
},
{
label: 'Compressor',
value: 'Digital Inverter Compressor',
}
],
},
{
name: 'Cooling Feature',
array: [
{
label: 'Coolig Type',
value: 'Triple Cooling',
},
],
},
{
name: 'Refrigerator Feature',
array: [
{
label: 'Interior LED Light',
value: 'Triple Lighting',
},
{
label: 'Egg Tray',
value: 'Yes',
},
{
label: 'Big Guard',
value: 'Yes',
},
{
label: 'Number of Shelf (Total)',
value: '5',
},
{
label: 'Shelf Material',
value: 'Temperred Glass',
},
{
label: 'Shelf Type',
value: 'Adjustable Shelf',
},
{
label: 'Number of Vegetable Box',
value: '2',
},
{
label: 'Super Plazma Ionizer +',
value: 'Null',
},
{
label: 'UV Deodrizer',
value: 'Null',
},
{
label: 'Deodrizer',
value: 'Deodrizer +',
},
],
},
{
name: 'Built-In Style',
array: [
{
label: 'Kitchen Fit',
value: 'Yes',
},
],
},
{
name: 'Performance',
array: [
{
label: 'Energy Consumption',
value: '26.5 kWh/Month',
},
],
},
{
name: 'Energy',
array: [
{
label: 'Energy Efficiency Class',
value: '3rd Grade',
},
],
},
{
name: 'Bottom Right',
array: [
{
label: 'Interior LED Light',
value: 'Yes',
},
{
label: 'Guard',
value: 'Null',
},
{
label: 'Box',
value: '2',
},
{
label: 'Convertible Room(℃)',
value: 'Freezer: -23℃~-17℃, Thin Ice: -5℃, Kimchi: Power/Normal/Soft, Ffridge: 2℃',
},
{
label: 'Shelf',
value: '1',
}
],
},
{
name: 'Exterior Feature',
array: [
{
label: 'Product Design',
value: 'Bespoke Style',
},
{
label: 'Panel Change',
value: 'Yes',
},
{
label: 'Door Type',
value: 'Flat Design',
},
{
label: 'Door Handle',
value: 'Hidden Handle',
},
{
label: 'Display Type',
value: 'LED Touch (Top Table)',
},
{
label: 'Color',
value: 'Panel Ready',
}
],
},
{
name: 'Bottom Left',
array: [
{
label: 'Interior LED Light',
value: 'Yes',
},
{
label: 'Door Guard',
value: 'Null',
},
{
label: 'Box',
value: '2',
},
{
label: 'Shelf',
value: '1',
},
{
label: 'Ice Maker',
value: 'Twin Ice Maker',
}
],
},
{
name: 'Capacity',
array: [
{
label: 'Fridge Freezer (Liter)',
value: '112 ℓ',
},
{
label: 'Freezer (Liter)',
value: '112 ℓ',
},
{
label: 'Refrigerator (Liter)',
value: '381 ℓ',
},
{
label: 'Total',
value: '605 ℓ',
},
],
},
{
name: 'Smart',
array: [
{
label: 'WiFi Embedded',
value: 'Yes',
},
{
label: 'Bluetooth',
value: 'Null',
},
{
label: 'WiFi Dongle(Separate sale) Support',
value: 'Null',
},
{
label: 'WiFi Kit',
value: 'Null',
}
],
},
{
name: 'App.',
array: [
{
label: 'SmartThings App Support',
value: 'Yes',
},
],
},
],
},
RB3000: {
mainSpecs: [
{
label: 'Freezer (Liter)',
value: '106 ℓ',
},
{
label: 'Refrigerator (Liter)',
value: '227 ℓ',
},
{
label: 'Total',
value: '333 ℓ',
},
{
label: 'Width (mm)',
value: '595mm',
},
{
label: 'Height (mm)',
value: '1853mm',
},
{
label: 'Depth (mm)',
value: '669mm',
},
],
detailSpecs: [
{
name: 'Physical specification',
array: [
{
label: 'Dimension (W x H x D)',
value: '595 x 1,853 x 669 mm',
},
],
},
{
name: 'General Feature',
array: [
{
label: 'Refrigerant',
value: 'R-600a',
},
{
label: 'Reversible Door',
value: 'Yes',
},
{
label: 'Compressor',
value: 'Digital Inverter Compressor',
}
],
},
{
name: 'Cooling Feature',
array: [
{
label: 'Coolig Type',
value: 'Metal Cooling & Multi Flow',
},
],
},
{
name: 'Fridge Freezer',
array: [
{
label: 'Temperature Control',
value: 'Yes',
},
],
},
{
name: 'Refrigerator Feature',
array: [
{
label: 'Interior LED Light',
value: 'Top LED Lighting',
},
{
label: 'Egg Tray',
value: 'Yes',
},
{
label: 'Number of Door Guard',
value: '4',
},
{
label: 'Number of Shelf (Total)',
value: '4',
},
{
label: 'Shelf Material',
value: 'Temperred Glass',
},
{
label: 'Number of Vegetable Box',
value: '1',
},
{
label: 'Dairy Compartment',
value: 'Yes',
},
{
label: 'Door Guard',
value: 'Adjustable Door Guard',
},
],
},
{
name: 'Built-In Style',
array: [
{
label: 'Kitchen Fit',
value: 'Yes',
},
],
},
{
name: 'Performance',
array: [
{
label: 'Energy Efficiency Class',
value: '2nd Grade',
},
{
label: 'Energy Consumption',
value: '18.6 kWh/Month',
},
{
label: 'Rated Voltage',
value: '220V/60Hz',
},
],
},
{
name: 'Exterior Feature',
array: [
{
label: 'Product Design',
value: 'Bespoke Style',
},
{
label: 'Door Panel Change',
value: 'Yes',
},
{
label: 'Door Type',
value: 'Bottom Mount Freezer',
},
{
label: 'Door Handle',
value: 'Recess Handle',
},
{
label: 'Display Type',
value: 'LED Display',
},
{
label: 'Color',
value: 'Panel Ready',
}
],
},
{
name: 'Capacity',
array: [
{
label: 'Freezer (Liter)',
value: '106 ℓ',
},
{
label: 'Refrigerator (Liter)',
value: '227 ℓ',
},
{
label: 'Total',
value: '333 ℓ',
},
],
},
{
name: 'Freezer Feature',
array: [
{
label: 'Power Cool',
value: 'Yes',
},
{
label: 'Number of Drawer',
value: '3',
},
{
label: 'Number of Shelf (Total)',
value: '1',
},
{
label: 'Ice Tray',
value: 'Yes',
},
],
},
],
},
RR7000: {
normal: {
mainSpecs: [
{
label: 'Freezer (Liter)',
value: '318 ℓ',
},
{
label: 'Width (mm)',
value: '595mm',
},
{
label: 'Height (mm)',
value: '1853mm',
},
{
label: 'Depth (mm)',
value: '688mm',
},
],
detailSpecs: [
{
name: 'Physical specification',
array: [
{
label: 'Dimension (W x H x D)',
value: '595 x 1,853 x 688 mm',
},
],
},
{
name: 'Capacity',
array: [
{
label: 'Freezer (Liter)',
value: '318 ℓ',
},
],
},
{
name: 'Cooling Feature',
array: [
{
label: 'Coolig Type',
value: 'Metal Cooling',
},
],
},
{
name: 'General Feature',
array: [
{
label: 'Refrigerant',
value: 'R-600a',
},
{
label: 'Reversible Door',
value: 'Yes',
},
{
label: 'Temperature Control',
value: '-17 ℃ ~ -23 ℃',
},
{
label: 'Compressor',
value: 'Digital Inverter Compressor',
}
],
},
{
name: 'Freezer Feature',
array: [
{
label: 'Interior LED Light',
value: 'LED Lighting (Top)',
},
{
label: 'Power Cool',
value: 'Yes',
},
{
label: 'Number of Door Guard',
value: '2',
},
{
label: 'Number of Drawer',
value: '4',
},
{
label: 'Number of Shelf (Total)',
value: '3',
},
{
label: 'Shelf Material',
value: 'Temperred Glass',
},
{
label: 'Ice Maker',
value: 'Slim Ice Maker',
},
],
},
{
name: 'Built-In Style',
array: [
{
label: 'Kitchen Fit',
value: 'Yes',
},
],
},
{
name: 'Exterior Feature',
array: [
{
label: 'Product Design',
value: 'Bespoke Style',
},
{
label: 'Door Panel Change',
value: 'Yes',
},
{
label: 'Door Handle',
value: 'Slim Easy Bar',
},
{
label: 'Display Type',
value: 'LED Display',
},
{
label: 'Color',
value: 'Panel Ready',
}
],
},
{
name: 'Smart',
array: [
{
label: 'WiFi Embedded',
value: 'Yes',
},
],
},
{
name: 'App.',
array: [
{
label: 'SmartThings App Support',
value: 'Yes',
},
],
},
],
},
},
},
init: function () {
var _ = this;
_.bindEvents();
},
bindEvents: function () {
var _ = this,
$document = $(document);
$document.on('click', componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn, popupId.specs, 'String'), $.proxy(_.detailSpecToggleAction, _));
$document.on('click.specsPopup', '[data-cm-layer-id="'+ popupId.specs + '"]', $.proxy(_.setViewSpecs, _));
},
detailSpecToggleAction: function () {
var $btnStatusSpan = componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn + ' span', popupId.specs);
$btnStatusSpan.toggleClass('unfold');
var $detailSpecWrap = componentScoperUsingId(defParams.popup.specsPopup.detailSpec, popupId.specs);
if($btnStatusSpan.hasClass('unfold')) {
var SpecBtnText = componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn, popupId.specs).html(),
SpecBtnTextHide = SpecBtnText.replace(defParams.popup.specsPopup.buttonText.show, defParams.popup.specsPopup.buttonText.hide);
componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn, popupId.specs).html(SpecBtnTextHide);
$detailSpecWrap.removeClass(defParams.popup.specsPopup.cssClass.detailSpecHide);
} else {
var SpecBtnText = componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn, popupId.specs).html(),
SpecBtnTextHide = SpecBtnText.replace(defParams.popup.specsPopup.buttonText.hide, defParams.popup.specsPopup.buttonText.show);
componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn, popupId.specs).html(SpecBtnTextHide);
$detailSpecWrap.addClass(defParams.popup.specsPopup.cssClass.detailSpecHide);
}
setTimeout(function() {
componentScoperUsingId(defParams.popup.specsPopup.detailSpecBtn, popupId.specs).eq(0).focus();
}, 100);
$(window).trigger('resize');
},
setViewSpecs: function(e) {
var _ = this,
target = $(e.target) || e,
$dataInput = null,
fridgeModel = null,
fridgeType = null,
fridgeSelector = null,
mainSpecsTemplate = null,
mainSpecs = null,
detailSpecsTemplate = null,
dimd = $(".s-layer-dimmed").eq(0),
detailSpecs = null;
$dataInput = target.closest(defParams.typeSelect.item).find('input');
fridgeModel = $dataInput.attr('data-type-target') || $dataInput.data('type-target');
fridgeType = $dataInput.attr('data-fridge-type') || $dataInput.data('fridge-type');
fridgeSelector = fridgeType ? _.popupData[fridgeModel][fridgeType] : _.popupData[fridgeModel];
if(fridgeSelector.mainSpecs.length > 0) {
mainSpecsTemplate = TrimPath.parseTemplate(_.getMainSpecsTemplate());
mainSpecs = mainSpecsTemplate.process(fridgeSelector);
componentScoperUsingId(defParams.popup.specsPopup.mainSpecList, popupId.specs).replaceWith(mainSpecs);
}
if(fridgeSelector.detailSpecs.length > 0) {
detailSpecsTemplate = TrimPath.parseTemplate(_.getDetailSpecsTemplate());
detailSpecs = detailSpecsTemplate.process(fridgeSelector);
if(componentScoperUsingId(defParams.popup.specsPopup.detailSpec, popupId.specs)) {
componentScoperUsingId(defParams.popup.specsPopup.detailSpecList, popupId.specs).replaceWith(detailSpecs);
}
}
dimd.show();
},
getDetailSpecsTemplate: function() {
var _ = this,
specPopupTemplate = null;
specPopupTemplate =
'';
return specPopupTemplate;
},
getMainSpecsTemplate: function() {
var _ = this,
specPopupTemplate = null;
specPopupTemplate =
'' +
'{for item in mainSpecs}' +
'' +
''+'${item.value}'+'
' +
''+'${item.label}'+' ' +
' ' +
'{/for}' +
' ';
return specPopupTemplate;
},
};
var detailPopupManager = {
fridgeDataObj: {},
fridgeDoorModelNumberData: {
door1: {
normal: {
fridgeName: '1Door',
buynow: 'Learn More',
linkpd: 'https://www.samsung.com/id/refrigerators/bespoke/',
fridgeModelNumber: 'RZ32T7445AP/ST',
doorModelNumberObj: {
glam: {
white: {
value: 'Glam White',
top: [
{
modelNumber: 'RA-R23DAA35GG',
title: 'Door'
},
],
},
pink: {
value: 'Glam Pink',
top: [
{
modelNumber: 'RA-R23DAA32GG',
title: 'Door'
},
],
},
navy: {
value: 'Glam Navy',
top: [
{
modelNumber: 'RA-R23DAA41GG',
title: 'Door'
},
],
},
},
satin: {
skyblue: {
value: 'Satin SkyBlue',
top: [
{
modelNumber: 'RA-R23DAA48GG',
title: 'Door'
},
],
},
gray: {
value: 'Satin Gray',
top: [
{
modelNumber: 'RA-R23DAA31GG',
title: 'Door'
},
],
}
}
}
},
},
door2: {
fridgeName: 'BMF',
buynow: 'Learn More',
linkpd: 'https://www.samsung.com/id/refrigerators/bespoke/',
fridgeModelNumber: 'RB33T3070AP/ST',
doorModelNumberObj: {
glam: {
white: {
value: 'Glam White',
top: [
{
modelNumber: 'RA-B23DUU35GG',
title: 'Top Door'
},
],
bottom: [
{
modelNumber: 'RA-B23DBB35GG',
title: 'Bottom Door'
},
],
},
pink: {
value: 'Glam Pink',
top: [
{
modelNumber: 'RA-B23DUU32GG',
title: 'Top Door'
},
],
bottom: [
{
modelNumber: 'RA-B23DBB32GG',
title: 'Bottom Door'
},
],
},
navy: {
value: 'Glam Navy',
top: [
{
modelNumber: 'RA-B23DUU41GG',
title: 'Top Door'
},
],
bottom: [
{
modelNumber: 'RA-B23DBB41GG',
title: 'Bottom Door'
},
],
},
},
satin: {
skyblue: {
value: 'Satin SkyBlue',
top: [
{
modelNumber: 'RA-B23DUU48GG',
title: 'Top Door'
},
],
bottom: [
{
modelNumber: 'RA-B23DBB48GG',
title: 'Bottom Door'
},
],
},
gray: {
value: 'Satin Gray',
top: [
{
modelNumber: 'RA-B23DUU31GG',
title: 'Top Door'
},
],
bottom: [
{
modelNumber: 'RA-B23DBB31GG',
title: 'Bottom Door'
},
],
}
},
}
},
door4: {
fridgeName: 'FDR',
buynow: 'Learn More',
linkpd: 'https://www.samsung.com/id/refrigerators/bespoke/',
fridgeModelNumber: 'RF61T91R2AP',
doorModelNumberObj: {
glam: {
white: {
value: 'Glam White',
top: [
{
modelNumber: 'RA-F17DUU35',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU35',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB35',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB35',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
pink: {
value: 'Glam Pink',
top: [
{
modelNumber: 'RA-F17DUU32',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU32',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB32',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB32',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
]
},
lavender: {
value: 'Glam Lavender',
top: [
{
modelNumber: 'RA-F17DUU38',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU38',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB38',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB38',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
]
},
olive: {
value: 'Glam Olive',
top: [
{
modelNumber: 'RA-F17DUU44',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU44',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB44',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB44',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
deepgreen: {
value: 'Glam DeepGreen',
top: [
{
modelNumber: 'RA-F17DUU42',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU42',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB42',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB42',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
burgundy: {
value: 'Glam Burgundy',
top: [
{
modelNumber: 'RA-F17DUU43',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU43',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB43',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB43',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
navy: {
value: 'Glam Navy',
top: [
{
modelNumber: 'RA-F17DUU41',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU41',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB41',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB41',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
},
satin: {
beige: {
value: 'Satin Beige',
top: [
{
modelNumber: 'RA-F17DUU39',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU39',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB39',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB39',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
skyblue: {
value: 'Satin SkyBlue',
top: [
{
modelNumber: 'RA-F17DUU48',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU48',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB48',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB48',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
gray: {
value: 'Satin Gray',
top: [
{
modelNumber: 'RA-F17DUU31',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU31',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB31',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB31',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
}
},
cotta: {
white: {
value: 'Cotta White',
top: [
{
modelNumber: 'RA-F17DUU01',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU01',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB01',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB01',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
charcoal: {
value: 'Cotta Charcoal',
top: [
{
modelNumber: 'RA-F17DUU05',
title: isRTL ? 'Top Right Door' : 'Top Left Door'
},
{
modelNumber: 'RA-F17DUU05',
title: isRTL ? 'Top Left Door' : 'Top Right Door'
}
],
bottom: [
{
modelNumber: 'RA-F17DBB05',
title: isRTL ? 'Bottom Right Door' : 'Bottom Left Door'
},
{
modelNumber: 'RA-F17DBB05',
title: isRTL ? 'Bottom Left Door' : 'Bottom Right Door'
}
],
},
}
}
},
},
init: function () {
var _ = this;
_.bindEvents();
},
bindEvents: function () {
var _ = this,
$document = $(document);
$document.on('click.detailPopup', '[data-cm-layer-id="'+ popupId.detail + '"]', $.proxy(_.setDetailPopup, _));
},
setDetailPopup: function() {
var _ = this,
tempArray = [],
dataObj = {};
var tempFridgeDoorData = null;
for(let value in _fridgeList) {
tempFridgeDoorData = null
//1도어 분기처리
if(_fridgeList[value].doorList.length > 1) {
tempFridgeDoorData = _.fridgeDoorModelNumberData['door'+_fridgeList[value].doorList.length];
} else {
tempFridgeDoorData = _.fridgeDoorModelNumberData['door'+_fridgeList[value].doorList.length][_fridgeList[value].addionalType];
}
for(let doorValue in _fridgeList[value].doorList) {
var texture = _fridgeList[value].doorList[doorValue]['texture'].split('-')[0];
var color = _fridgeList[value].doorList[doorValue]['color'];
_fridgeList[value].doorList[doorValue].title = tempFridgeDoorData['doorModelNumberObj'][texture][color].value;
if(Array.isArray(tempFridgeDoorData['doorModelNumberObj'][texture][color].top)) {
if( Number(doorValue)+1 <= tempFridgeDoorData['doorModelNumberObj'][texture][color].top.length) {
var reverseArray = false ? JSON.parse(JSON.stringify(tempFridgeDoorData['doorModelNumberObj'][texture][color]['top'])).reverse() : tempFridgeDoorData['doorModelNumberObj'][texture][color]['top'];
_fridgeList[value].doorList[doorValue].modelNumber = reverseArray[doorValue].modelNumber;
_fridgeList[value].doorList[doorValue].doorPositionTitle = reverseArray[doorValue].title;
} else {
if(Array.isArray(tempFridgeDoorData['doorModelNumberObj'][texture][color].bottom)){
var reverseArray = false ? JSON.parse(JSON.stringify(tempFridgeDoorData['doorModelNumberObj'][texture][color]['bottom'])).reverse() : tempFridgeDoorData['doorModelNumberObj'][texture][color]['bottom']
_fridgeList[value].doorList[doorValue].modelNumber = reverseArray[Number(doorValue) - tempFridgeDoorData['doorModelNumberObj'][texture][color].top.length].modelNumber;
_fridgeList[value].doorList[doorValue].doorPositionTitle = reverseArray[Number(doorValue) - tempFridgeDoorData['doorModelNumberObj'][texture][color].top.length].title;
}
}
}
}
tempArray.push({
value: value,
fridgeName: tempFridgeDoorData['fridgeName'],
buynow: tempFridgeDoorData['buynow'],
linkpd: tempFridgeDoorData['linkpd'],
fridgeModelNumber: tempFridgeDoorData['fridgeModelNumber'],
itemIndex: _fridgeList[value].itemIndex,
doorList: _fridgeList[value].doorList,
model: _fridgeList[value].model,
});
}
tempArray.sort(function(a, b) { // 내림차순
return a['itemIndex'] - b['itemIndex'];
});
dataObj.fridgeArray = tempArray;
var myTemplateObj = TrimPath.parseTemplate(_.getDetailTemplate());
var additionalTemplate = myTemplateObj.process(dataObj);
$('#' + popupId.detail).find(defParams.popup.detailPopup.list).replaceWith(additionalTemplate);
interactionManager.setPopupContentHeight();
},
getDetailTemplate: function() {
var detailPopupTemplate = null;
detailPopupTemplate =
'' ;
return detailPopupTemplate;
},
};
var layerPopupManager = {
ariaList: [],
init: function(t) {
this.cta = t.cta;
this.t = window;
this.initType = t.initType || "init";
this.dimmed = $(".s-layer-dimmed").eq(0);
this.setElements();
this.isAemEditMode = this.isAemEditModes();
this.bindEventHandlers();
},
isAemEditModes: function(){
var e = window;
var n=!1;
return e.parent && e.frameElement&&t(e.parent.document).find(".foundation-authoring-ui-mode").size()&&(n=!0),n
},
checkSpecial: function(t) {
function e(t) {
if (!t)
return !1;
for (var e = "", i = 0, s = t.length; s > i; i++)
e += "\\" + t[i].charCodeAt(0).toString(16);
return e
}
var i = /[`~!@#$%^)(&|\\\'\";:\/?]/gi;
return 1 == i.test(t) ? e(t) : t
},
setElements: function() {
this.unsetLayerInfo(),
this.wrap = $("#" + this.checkSpecial(this.cta.data("cm-layer-id"))),
this.layerWidth = 0,
this.layerHeight = 0,
this.fadeDelay = 100,
this.keyShift = !1,
this.layerToggleClass = "layer-opened",
this.layerCloseClass = "js-alert-close",
this.tempLoopClass = "js-loop-hidden",
this.isResizeContent = !1,
this.isTouchDevice = $("body").hasClass("touch-device") ? !0 : !1,
this.cta.data("cm-layer-opt") && (this.resizeRatio = Number(this.cta.data("cm-layer-opt").resizeRatio),
this.resizeContentEl = $(this.cta.data("cm-layer-opt").resizeContent),
this.isResizeContent = this.resizeContentEl.length ? !0 : !1);
// !this.dimmed && $("body").append('
');
},
bindEventHandlers: function() {
var t = this.t;
"reInit" == this.initType && (e(document).off("click.alertLayer", "[data-cm-layer-id]", $.proxy(this.onDisplay, this)),
$(t).off("resize.alertLayer orientationchange.alertLayer", $.proxy(this.resizeFunc, this))),
$(document).on("click.alertLayer", "[data-cm-layer-id]", $.proxy(this.onDisplay, this)),
$(t).on("resize.alertLayer orientationchange.alertLayer", $.proxy(this.resizeFunc, this))
},
checkShift: function(t) {
var e = t.keyCode || t.which
, i = t.type;
"keydown" === i ? 16 === e && (this.keyShift = !0) : "keyup" === i && 16 === e && (this.keyShift = !1)
},
resizeFunc: function(t) {
this.layer && this.layer.is(":visible") && (this.isResizeContent && !this.isTouchDevice && this.resizeContentHeight(),
this.layerView())
},
resizeContentHeight: function() {
var t = this.resizeContentEl || {}
, e = i.winSize().h
, s = (Math.abs(parseInt(this.wrap.offset().top)),
Math.abs(parseInt(this.layer.css("margin-top")) / 2));
t.css("height", (e - s) * this.resizeRatio)
},
setLayerSize: function() {
this.layerWidth = this.layer.outerWidth(),
this.layerHeight = this.layer.outerHeight()
},
layerView: function() {
this.setLayerSize(),
this.layer.css({
left: "50%",
top: "50%",
"margin-top": -(this.layerHeight / 2),
"margin-left": -(this.layerWidth / 2)
})
},
onDisplay: function(t) {
t.preventDefault();
var i = $(t.currentTarget)
, s = "#" + this.checkSpecial(i.data("cm-layer-id"))
, n = $(s);
n.length ? (this.setLayerInfo(i, n),
this.onLayer(s),
this.isResizeContent && $("html").css("overflow-y", "hidden")) : this.isAemEditMode
$.proxy(this.setAriaAttr(), this);
},
setAriaAttr: function() {
var _ = this;
var $tmpLayer = $(_.layer).detach();
Array.from(document.querySelectorAll('body > div')).forEach(function (item) {
if (!item.getAttribute('aria-hidden')) {
layerPopupManager.ariaList.push(item);
item.setAttribute('aria-hidden', true);
}
});
$('body').append($tmpLayer);
setTimeout(function () {
var $close = $tmpLayer.find('.js-alert-close').length ? $tmpLayer.find('.js-alert-close') : $tmpLayer.find('.pr-g-bespoke-simulator__alert-popup-btn');
$close.focus();
}, 200);
},
onFocusLoopTempLink: function(t) {
t.preventDefault();
var i = $(t.currentTarget)
, s = (i.index(),
i.prev().length)
, n = i.next().length
, o = this.layer.find("." + this.tempLoopClass)
, r = this.layer.find("." + this.layerCloseClass)
, a = this.layer.find("a:not(." + this.layerCloseClass + "), input, button:not(." + this.layerCloseClass + "), select");
if (s || this.keyShift)
if (n || this.keyShift)
if (!s && this.keyShift)
o.eq(1).focus();
else {
if (n || !this.keyShift)
return;
r.focus()
}
else
o.eq(0).focus();
else
a.length ? a.eq(0).focus() : r.focus()
},
setLoopEl: function() {
this.isTouchDevice || (this.layer.prepend(''),
this.layer.append('')),
setTimeout($.proxy(function() {
this.isTouchDevice || this.layer.on("focusin", "." + this.tempLoopClass, $.proxy(this.onFocusLoopTempLink, this)),
// this.layer.attr("tabindex", 0).focus(),
this.layer.on("focusoutside", $.proxy(this.focusoutLayer, this))
}, this), 200)
},
focusoutLayer: function(t) {
this.layer.focus(),
this.layer.off("focusoutside", e.proxy(this.focusoutLayer, this))
},
onLayer: function(t) {
var i = $("#wrap").find('input[type="text"]').not(t + ' input[type="text"]');
this.closeBtn && this.closeBtn.trigger("click"),
this.currCTA.hasClass("js-disabled-input") && i.length && i.each(function() {
var t = $(this);
t.prop("disabled") || (t.addClass("js-disabled"),
t.attr("disabled", "disabled"))
}),
this.onBindEvents(),
this.setLoopEl(),
this.isResizeContent && $(window).trigger("resize")
},
offDisplay: function(t) {
t.preventDefault(),
this.offLayer()
},
offLayer: function() {
var t = $("#wrap").find('input[type="text"]');
this.closeBtn = this.layer.find("." + this.layerCloseClass),
this.currCTA.hasClass("js-disabled-input") && t.length && t.each(function() {
var t = $(this);
t.hasClass("js-disabled") && (t.removeClass("js-disabled"),
t.removeAttr("disabled"))
}),
this.unBindEvents(),
this.isResizeContent && $("html").css("overflow-y", "")
$.proxy(this.resetAriaAttr(), this);
},
resetAriaAttr: function () {
var _ = this;
var $tmpLayer = $(_.layer).detach();
_.ariaList.forEach(function (item) {
item.removeAttribute('aria-hidden');
});
$(defParams.self).append($tmpLayer);
},
onBindEvents: function() {
var t = this.t;
this.layer.off("click"),
this.layer.stop().fadeIn(this.fadeDelay),
$("html").addClass(this.layerToggleClass),
this.layer.on("keydown keyup", $.proxy(this.checkShift, this)),
this.closeBtn.on("click.cmLayerAlert", $.proxy(this.offDisplay, this)),
this.isSupportTransform() ? $(t).trigger("resize") : this.layerView(),
this.dimmed.length && this.dimmed.show().on("click", $.proxy(this.offDisplay, this))
},
unBindEvents: function() {
var t = this.currCTA;
this.layer.off("focusin keydown keyup focusoutside"),
this.layer.stop().fadeOut(this.fadeDelay),
this.layer.find("." + this.tempLoopClass).remove(),
$("html").removeClass(this.layerToggleClass),
this.dimmed.length && this.dimmed.hide(),
this.closeBtn.off("click.cmLayerAlert"),
t.focus()
},
setLayerInfo: function(t, e) {
this.layer = e,
this.closeBtn = this.layer.find("." + this.layerCloseClass),
this.currCTA = t
},
unsetLayerInfo: function() {
this.layer = "",
this.closeBtn = "",
this.currCTA = null
},
isSupportTransform: function() {
return "WebkitTransform"in document.body.style || "MozTransform"in document.body.style || "msTransform"in document.body.style || "OTransform"in document.body.style || "transform"in document.body.style
}
}
var init = function () {
if (!win.smg.aem.customEvent) {
$(window).on('resize', function () {
custom.body.trigger(CST_EVENT.RESPONSIVE.CHANGE);
});
}
responsiveManager.init();
pageBespokeManager.init();
stepTooltipManager.init();
controlManager.init();
dragManager.init();
interactionManager.init();
$("body").append('
');
window.layerPopupManager = null;
if(!window.layerPopupManager) {
var i = {};
var s = $.extend(i, {
cta: $("[data-cm-layer-id]")
});
layerPopupManager.init(s);
}
interiorPopupManager.init();
specsPopupManager.init();
detailPopupManager.init();
};
var reInit = function () {
responsiveManager.reInit();
};
return {
init: init,
reInit: reInit,
};
})();
$(function () {
namespace.pageBespoke.init();
});
})(window, window.jQuery);
/*! Sortable 1.10.2 - MIT | git://github.com/SortableJS/Sortable.git */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&h(t,e):h(t,e))||o&&t===n)return t;if(t===n)break}while(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode)}var i;return null}var f,p=/\s+/g;function k(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(p," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(p," ")}}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function g(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=e.left-n&&r<=e.right+n,i=a>=e.top-n&&a<=e.bottom+n;return n&&o&&i?l=t:void 0}}),l}((t=t.touches?t.touches[0]:t).clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[j]._onDragOver(n)}}}function kt(t){z&&z.parentNode[j]._isOutsideThisEl(t.target)}function Rt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ot(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Rt.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};for(var o in O.initializePlugins(this,t,n),n)o in e||(e[o]=n[o]);for(var i in At(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&xt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?u(t,"pointerdown",this._onTapStart):(u(t,"mousedown",this._onTapStart),u(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(u(t,"dragover",this),u(t,"dragenter",this)),bt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,T())}function Xt(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||w||E?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Yt(t){t.draggable=!1}function Bt(){Dt=!1}function Ft(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ht(t){return setTimeout(t,0)}function Lt(t){return clearTimeout(t)}Rt.prototype={constructor:Rt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(ht=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(function(t){St.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&St.push(o)}}(o),!z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled||s.isContentEditable||(l=P(l,t.draggable,o,!1))&&l.animated||Z===l)){if(J=F(l),et=F(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return W({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),K("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return W({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),K("filter",n,{evt:e}),!0})))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;if(n&&!z&&n.parentNode===r){var s=X(n);if(q=r,G=(z=n).parentNode,V=z.nextSibling,Z=n,ot=a.group,rt={target:Rt.dragged=z,clientX:(e||t).clientX,clientY:(e||t).clientY},ct=rt.clientX-s.left,ut=rt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,z.style["will-change"]="all",o=function(){K("delayEnded",i,{evt:t}),Rt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!c&&i.nativeDraggable&&(z.draggable=!0),i._triggerDragStart(t,e),W({sortable:i,name:"choose",originalEvent:t}),k(z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){g(z,t.trim(),Yt)}),u(l,"dragover",Pt),u(l,"mousemove",Pt),u(l,"touchmove",Pt),u(l,"mouseup",i._onDrop),u(l,"touchend",i._onDrop),u(l,"touchcancel",i._onDrop),c&&this.nativeDraggable&&(this.options.touchStartThreshold=4,z.draggable=!0),K("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(E||w))o();else{if(Rt.eventCanceled)return void this._onDrop();u(l,"mouseup",i._disableDelayedDrag),u(l,"touchend",i._disableDelayedDrag),u(l,"touchcancel",i._disableDelayedDrag),u(l,"mousemove",i._delayedDragTouchMoveHandler),u(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&u(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){z&&Yt(z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;d(t,"mouseup",this._disableDelayedDrag),d(t,"touchend",this._disableDelayedDrag),d(t,"touchcancel",this._disableDelayedDrag),d(t,"mousemove",this._delayedDragTouchMoveHandler),d(t,"touchmove",this._delayedDragTouchMoveHandler),d(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?u(document,"pointermove",this._onTouchMove):u(document,e?"touchmove":"mousemove",this._onTouchMove):(u(z,"dragend",this),u(q,"dragstart",this._onDragStart));try{document.selection?Ht(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(vt=!1,q&&z){K("dragStarted",this,{evt:e}),this.nativeDraggable&&u(document,"dragover",kt);var n=this.options;t||k(z,n.dragClass,!1),k(z,n.ghostClass,!0),Rt.active=this,t&&this._appendGhost(),W({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,Nt();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY))!==e;)e=t;if(z.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){if(e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);It()}},_onTouchMove:function(t){if(rt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=U&&v(U,!0),a=U&&r&&r.a,l=U&&r&&r.d,s=Ct&>&&b(gt),c=(i.clientX-rt.clientX+o.x)/(a||1)+(s?s[0]-Et[0]:0)/(a||1),u=(i.clientY-rt.clientY+o.y)/(l||1)+(s?s[1]-Et[1]:0)/(l||1);if(!Rt.active&&!vt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(n,a,this)&&!g.animated){if(g===z)return A(!1);if(g&&l===n.target&&(s=g),s&&(i=X(s)),!1!==Xt(q,l,z,o,s,i,n,!!s))return O(),l.appendChild(z),G=l,N(),A(!0)}else if(s.parentNode===l){i=X(s);var v,m,b,y=z.parentNode!==l,w=!function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,r=n?t.width:t.height,a=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===a||i===l||o+r/2===a+s/2}(z.animated&&z.toRect||o,s.animated&&s.toRect||i,a),E=a?"top":"left",D=Y(s,"top","top")||Y(z,"top","top"),S=D?D.scrollTop:void 0;if(ht!==s&&(m=i[E],yt=!1,wt=!w&&e.invertSwap||y),0!==(v=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,h=!1;if(!a)if(l&&pt /g, ">"); },
"capitalize" : function(s) { return String(s).toUpperCase(); },
"default" : function(s, d) { return s != null ? s : d; }
}
TrimPath.parseTemplate_etc.modifierDef.h = TrimPath.parseTemplate_etc.modifierDef.escape;
TrimPath.parseTemplate_etc.Template = function(tmplName, tmplContent, funcSrc, func, etc) {
this.process = function(context, flags) {
if (context == null)
context = {};
if (context._MODIFIERS == null)
context._MODIFIERS = {};
if (context.defined == null)
context.defined = function(str) { return (context[str] != undefined); };
for (var k in etc.modifierDef) {
if (context._MODIFIERS[k] == null)
context._MODIFIERS[k] = etc.modifierDef[k];
}
if (flags == null)
flags = {};
var resultArr = [];
var resultOut = { write: function(m) { resultArr.push(m); } };
try {
func(resultOut, context, flags);
} catch (e) {
if (flags.throwExceptions == true)
throw e;
var result = new String(resultArr.join("") + "[ERROR: " + e.toString() + (e.message ? '; ' + e.message : '') + "]");
result["exception"] = e;
return result;
}
return resultArr.join("");
}
this.name = tmplName;
this.source = tmplContent;
this.sourceFunc = funcSrc;
this.toString = function() { return "TrimPath.Template [" + tmplName + "]"; }
}
TrimPath.parseTemplate_etc.ParseError = function(name, line, message) {
this.name = name;
this.line = line;
this.message = message;
}
TrimPath.parseTemplate_etc.ParseError.prototype.toString = function() {
return ("TrimPath template ParseError in " + this.name + ": line " + this.line + ", " + this.message);
}
var parse = function(body, tmplName, etc) {
body = cleanWhiteSpace(body);
var funcText = [ "var TrimPath_Template_TEMP = function(_OUT, _CONTEXT, _FLAGS) { with (_CONTEXT) {" ];
var state = { stack: [], line: 1 }; // TODO: Fix line number counting.
var endStmtPrev = -1;
while (endStmtPrev + 1 < body.length) {
var begStmt = endStmtPrev;
// Scan until we find some statement markup.
begStmt = body.indexOf("{", begStmt + 1);
while (begStmt >= 0) {
var endStmt = body.indexOf('}', begStmt + 1);
var stmt = body.substring(begStmt, endStmt);
var blockrx = stmt.match(/^\{(cdata|minify|eval)/); // From B. Bittman, minify/eval/cdata implementation.
if (blockrx) {
var blockType = blockrx[1];
var blockMarkerBeg = begStmt + blockType.length + 1;
var blockMarkerEnd = body.indexOf('}', blockMarkerBeg);
if (blockMarkerEnd >= 0) {
var blockMarker;
if( blockMarkerEnd - blockMarkerBeg <= 0 ) {
blockMarker = "{/" + blockType + "}";
} else {
blockMarker = body.substring(blockMarkerBeg + 1, blockMarkerEnd);
}
var blockEnd = body.indexOf(blockMarker, blockMarkerEnd + 1);
if (blockEnd >= 0) {
emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText);
var blockText = body.substring(blockMarkerEnd + 1, blockEnd);
if (blockType == 'cdata') {
emitText(blockText, funcText);
} else if (blockType == 'minify') {
emitText(scrubWhiteSpace(blockText), funcText);
} else if (blockType == 'eval') {
if (blockText != null && blockText.length > 0) // From B. Bittman, eval should not execute until process().
funcText.push('_OUT.write( (function() { ' + blockText + ' })() );');
}
begStmt = endStmtPrev = blockEnd + blockMarker.length - 1;
}
}
} else if (body.charAt(begStmt - 1) != '$' && // Not an expression or backslashed,
body.charAt(begStmt - 1) != '\\') { // so check if it is a statement tag.
var offset = (body.charAt(begStmt + 1) == '/' ? 2 : 1); // Close tags offset of 2 skips '/'.
// 10 is larger than maximum statement tag length.
if (body.substring(begStmt + offset, begStmt + 10 + offset).search(TrimPath.parseTemplate_etc.statementTag) == 0)
break; // Found a match.
}
begStmt = body.indexOf("{", begStmt + 1);
}
if (begStmt < 0) // In "a{for}c", begStmt will be 1.
break;
var endStmt = body.indexOf("}", begStmt + 1); // In "a{for}c", endStmt will be 5.
if (endStmt < 0)
break;
emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText);
emitStatement(body.substring(begStmt, endStmt + 1), state, funcText, tmplName, etc);
endStmtPrev = endStmt;
}
emitSectionText(body.substring(endStmtPrev + 1), funcText);
if (state.stack.length != 0)
throw new etc.ParseError(tmplName, state.line, "unclosed, unmatched statement(s): " + state.stack.join(","));
funcText.push("}}; TrimPath_Template_TEMP");
return funcText.join("");
}
var emitStatement = function(stmtStr, state, funcText, tmplName, etc) {
var parts = stmtStr.slice(1, -1).split(' ');
var stmt = etc.statementDef[parts[0]]; // Here, parts[0] == for/if/else/...
if (stmt == null) { // Not a real statement.
emitSectionText(stmtStr, funcText);
return;
}
if (stmt.delta < 0) {
if (state.stack.length <= 0)
throw new etc.ParseError(tmplName, state.line, "close tag does not match any previous statement: " + stmtStr);
state.stack.pop();
}
if (stmt.delta > 0)
state.stack.push(stmtStr);
if (stmt.paramMin != null &&
stmt.paramMin >= parts.length)
throw new etc.ParseError(tmplName, state.line, "statement needs more parameters: " + stmtStr);
if (stmt.prefixFunc != null)
funcText.push(stmt.prefixFunc(parts, state, tmplName, etc));
else
funcText.push(stmt.prefix);
if (stmt.suffix != null) {
if (parts.length <= 1) {
if (stmt.paramDefault != null)
funcText.push(stmt.paramDefault);
} else {
for (var i = 1; i < parts.length; i++) {
if (i > 1)
funcText.push(' ');
funcText.push(parts[i]);
}
}
funcText.push(stmt.suffix);
}
}
var emitSectionText = function(text, funcText) {
if (text.length <= 0)
return;
var nlPrefix = 0; // Index to first non-newline in prefix.
var nlSuffix = text.length - 1; // Index to first non-space/tab in suffix.
while (nlPrefix < text.length && (text.charAt(nlPrefix) == '\n'))
nlPrefix++;
while (nlSuffix >= 0 && (text.charAt(nlSuffix) == ' ' || text.charAt(nlSuffix) == '\t'))
nlSuffix--;
if (nlSuffix < nlPrefix)
nlSuffix = nlPrefix;
if (nlPrefix > 0) {
funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
var s = text.substring(0, nlPrefix).replace('\n', '\\n'); // A macro IE fix from BJessen.
if (s.charAt(s.length - 1) == '\n')
s = s.substring(0, s.length - 1);
funcText.push(s);
funcText.push('");');
}
var lines = text.substring(nlPrefix, nlSuffix + 1).split('\n');
for (var i = 0; i < lines.length; i++) {
emitSectionTextLine(lines[i], funcText);
if (i < lines.length - 1)
funcText.push('_OUT.write("\\n");\n');
}
if (nlSuffix + 1 < text.length) {
funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
var s = text.substring(nlSuffix + 1).replace('\n', '\\n');
if (s.charAt(s.length - 1) == '\n')
s = s.substring(0, s.length - 1);
funcText.push(s);
funcText.push('");');
}
}
var emitSectionTextLine = function(line, funcText) {
var endMarkPrev = '}';
var endExprPrev = -1;
while (endExprPrev + endMarkPrev.length < line.length) {
var begMark = "${", endMark = "}";
var begExpr = line.indexOf(begMark, endExprPrev + endMarkPrev.length); // In "a${b}c", begExpr == 1
if (begExpr < 0)
break;
if (line.charAt(begExpr + 2) == '%') {
begMark = "${%";
endMark = "%}";
}
var endExpr = line.indexOf(endMark, begExpr + begMark.length); // In "a${b}c", endExpr == 4;
if (endExpr < 0)
break;
emitText(line.substring(endExprPrev + endMarkPrev.length, begExpr), funcText);
// Example: exprs == 'firstName|default:"John Doe"|capitalize'.split('|')
var exprArr = line.substring(begExpr + begMark.length, endExpr).replace(/\|\|/g, "#@@#").split('|');
for (var k in exprArr) {
if (exprArr[k].replace) // IE 5.x fix from Igor Poteryaev.
exprArr[k] = exprArr[k].replace(/#@@#/g, '||');
}
funcText.push('_OUT.write(');
emitExpression(exprArr, exprArr.length - 1, funcText);
funcText.push(');');
endExprPrev = endExpr;
endMarkPrev = endMark;
}
emitText(line.substring(endExprPrev + endMarkPrev.length), funcText);
}
var emitText = function(text, funcText) {
if (text == null ||
text.length <= 0)
return;
text = text.replace(/\\/g, '\\\\');
text = text.replace(/\n/g, '\\n');
text = text.replace(/"/g, '\\"');
funcText.push('_OUT.write("');
funcText.push(text);
funcText.push('");');
}
var emitExpression = function(exprArr, index, funcText) {
// Ex: foo|a:x|b:y1,y2|c:z1,z2 is emitted as c(b(a(foo,x),y1,y2),z1,z2)
var expr = exprArr[index]; // Ex: exprArr == [firstName,capitalize,default:"John Doe"]
if (index <= 0) { // Ex: expr == 'default:"John Doe"'
funcText.push(expr);
return;
}
var parts = expr.split(':');
funcText.push('_MODIFIERS["');
funcText.push(parts[0]); // The parts[0] is a modifier function name, like capitalize.
funcText.push('"](');
emitExpression(exprArr, index - 1, funcText);
if (parts.length > 1) {
funcText.push(',');
funcText.push(parts[1]);
}
funcText.push(')');
}
var cleanWhiteSpace = function(result) {
result = result.replace(/\t/g, " ");
result = result.replace(/\r\n/g, "\n");
result = result.replace(/\r/g, "\n");
result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1'); // Right trim by Igor Poteryaev.
return result;
}
var scrubWhiteSpace = function(result) {
result = result.replace(/^\s+/g, "");
result = result.replace(/\s+$/g, "");
result = result.replace(/\s+/g, " ");
result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1'); // Right trim by Igor Poteryaev.
return result;
}
// The DOM helper functions depend on DOM/DHTML, so they only work in a browser.
// However, these are not considered core to the engine.
//
TrimPath.parseDOMTemplate = function(elementId, optDocument, optEtc) {
if (optDocument == null)
optDocument = document;
var element = optDocument.getElementById(elementId);
var content = element.value; // Like textarea.value.
if (content == null)
content = element.innerHTML; // Like textarea.innerHTML.
content = content.replace(/</g, "<").replace(/>/g, ">");
return TrimPath.parseTemplate(content, elementId, optEtc);
}
TrimPath.processDOMTemplate = function(elementId, context, optFlags, optDocument, optEtc) {
return TrimPath.parseDOMTemplate(elementId, optDocument, optEtc).process(context, optFlags);
}
}) ();
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c0?r:o)(t)};
},{}],"S7IM":[function(require,module,exports) {
var e=require("./_to-integer"),r=Math.min;module.exports=function(t){return t>0?r(e(t),9007199254740991):0};
},{"./_to-integer":"MpYs"}],"Zwq5":[function(require,module,exports) {
var e=require("./_to-integer"),r=Math.max,t=Math.min;module.exports=function(n,a){return(n=e(n))<0?r(n+a,0):t(n,a)};
},{"./_to-integer":"MpYs"}],"LNnS":[function(require,module,exports) {
var e=require("./_to-iobject"),r=require("./_to-length"),t=require("./_to-absolute-index");module.exports=function(n){return function(i,o,u){var f,l=e(i),a=r(l.length),c=t(u,a);if(n&&o!=o){for(;a>c;)if((f=l[c++])!=f)return!0}else for(;a>c;c++)if((n||c in l)&&l[c]===o)return n||c||0;return!n&&-1}};
},{"./_to-iobject":"Wyka","./_to-length":"S7IM","./_to-absolute-index":"Zwq5"}],"NB7d":[function(require,module,exports) {
var r=require("./_core"),e=require("./_global"),o="__core-js_shared__",i=e[o]||(e[o]={});(module.exports=function(r,e){return i[r]||(i[r]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:require("./_library")?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"});
},{"./_core":"zKeE","./_global":"i1Q6","./_library":"kq3x"}],"X6va":[function(require,module,exports) {
var o=0,t=Math.random();module.exports=function(n){return"Symbol(".concat(void 0===n?"":n,")_",(++o+t).toString(36))};
},{}],"wuYm":[function(require,module,exports) {
var e=require("./_shared")("keys"),r=require("./_uid");module.exports=function(u){return e[u]||(e[u]=r(u))};
},{"./_shared":"NB7d","./_uid":"X6va"}],"B9Lq":[function(require,module,exports) {
var r=require("./_has"),e=require("./_to-iobject"),u=require("./_array-includes")(!1),i=require("./_shared-key")("IE_PROTO");module.exports=function(o,a){var n,s=e(o),t=0,h=[];for(n in s)n!=i&&r(s,n)&&h.push(n);for(;a.length>t;)r(s,n=a[t++])&&(~u(h,n)||h.push(n));return h};
},{"./_has":"yS17","./_to-iobject":"Wyka","./_array-includes":"LNnS","./_shared-key":"wuYm"}],"KxjL":[function(require,module,exports) {
module.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
},{}],"knrM":[function(require,module,exports) {
var e=require("./_object-keys-internal"),r=require("./_enum-bug-keys");module.exports=Object.keys||function(u){return e(u,r)};
},{"./_object-keys-internal":"B9Lq","./_enum-bug-keys":"KxjL"}],"gjjs":[function(require,module,exports) {
var e=require("./_object-dp"),r=require("./_an-object"),t=require("./_object-keys");module.exports=require("./_descriptors")?Object.defineProperties:function(o,i){r(o);for(var u,c=t(i),n=c.length,s=0;n>s;)e.f(o,u=c[s++],i[u]);return o};
},{"./_object-dp":"Gfzd","./_an-object":"zotD","./_object-keys":"knrM","./_descriptors":"MLNE"}],"ebIA":[function(require,module,exports) {
var e=require("./_global").document;module.exports=e&&e.documentElement;
},{"./_global":"i1Q6"}],"TNJq":[function(require,module,exports) {
var e=require("./_an-object"),r=require("./_object-dps"),t=require("./_enum-bug-keys"),n=require("./_shared-key")("IE_PROTO"),o=function(){},i="prototype",u=function(){var e,r=require("./_dom-create")("iframe"),n=t.length;for(r.style.display="none",require("./_html").appendChild(r),r.src="javascript:",(e=r.contentWindow.document).open(),e.write("
Pilih kulkas Bespoke Samsung Anda sekarang
Inspirasi Desain dengan Samsung Bespoke