Material Paper - Mottled Rust Shadow Series Vintage Old Pattern Landscape

class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = ""; // ไฟƒ้”€ๆดปๅŠจๆ•ฐๆฎ this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // ๆŒ‚่ฝฝbindๅ‡ฝๆ•ฐ ่งฃๅ†ณthisๆŒ‡ๅ‘้—ฎ้ข˜ this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // ่Žทๅ–ๆ•ฐๆฎ this.variantId = "c0955b2a-d31e-4653-b350-fe97c02a647f"; this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); if (this.flashsaleData.product_setting.is_redirection && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(`/promotions/discount-default/${this.flashsaleData.discount_info.id}`); } } // ็ป‘ๅฎš this.viewport_.onResize(this.resize); // ็›‘ๅฌๅญๆฌพๅผๅˆ‡ๆข๏ผŒ้‡ๆ–ฐๆธฒๆŸ“ this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // ่งฃ็ป‘ this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.getData(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '164e9842-7001-4832-ab36-54a43b2f9c75') { this.variantId = variant.id; this.getData() } } getData() { const reqBody = { product_id: "164e9842-7001-4832-ab36-54a43b2f9c75", product_type: "default", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'c0955b2a-d31e-4653-b350-fe97c02a647f'; this.debounceRenderDiscountList = this.win.SPZCore.Types.debounce(this.win,this.renderDiscountList.bind(this), 500); } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { console.log('่‡ชๅŠจๆŠ˜ๆ‰ฃ็›ดๅ‡บๆ•ฐๆฎ',{"downgrade":false,"automatic_discount_list":[{"discount_type":"DT_REBATE_CTA_OTR","discount_icon":"\/\/img.staticdj.com\/oss\/operation\/52a3d7f0a272be85092170dc93eefe81.svg","discount":[{"discount_id":"499888018849545243","discount_type":"DT_REBATE_CTA_OTR","discount_method":"DM_AUTOMATIC","config":{"text":"Buy $50.00<\/span> get $2.00<\/span> off","texts":["Buy $50.00<\/span> get $2.00<\/span> off"],"off_text":""},"product_enabled":true,"template_type":"banner","is_redirection":true,"template_config":"{\"color\":{\"text\":{\"icon_text_color\":\"#EB391B\"},\"tag\":{\"text_color\":\"#EB391B\",\"background_color\":\"rgba(235, 57, 27, 0.04)\"},\"banner\":{\"icon_text_color\":\"#EB391B\",\"background_color\":\"rgba(235, 57, 27, 0.04)\"},\"coupon\":{\"coupon_border_color\":\"#FFEFDE\",\"coupon_background_color\":\"#F8A056\",\"coupon_background_color_end\":\"#F93E37\",\"coupon_color\":\"#FFFFFF\",\"coupon_button_background_color_start\":\"#FEE7CD\",\"coupon_button_background_color_end\":\"#FFF4E7\",\"coupon_button_color\":\"#F94339\"}}}","display_type":"DTE_FOLD"}]}],"hash":"320c3c204f253756eb8a26ac5901e30c"}); this.init(); // ็›‘ๅฌไบ‹ไปถ this.bindEvent_(); } async init() { this.handleFitTheme(); const promotionComplex = {"downgrade":false,"automatic_discount_list":[{"discount_type":"DT_REBATE_CTA_OTR","discount_icon":"\/\/img.staticdj.com\/oss\/operation\/52a3d7f0a272be85092170dc93eefe81.svg","discount":[{"discount_id":"499888018849545243","discount_type":"DT_REBATE_CTA_OTR","discount_method":"DM_AUTOMATIC","config":{"text":"Buy $50.00<\/span> get $2.00<\/span> off","texts":["Buy $50.00<\/span> get $2.00<\/span> off"],"off_text":""},"product_enabled":true,"template_type":"banner","is_redirection":true,"template_config":"{\"color\":{\"text\":{\"icon_text_color\":\"#EB391B\"},\"tag\":{\"text_color\":\"#EB391B\",\"background_color\":\"rgba(235, 57, 27, 0.04)\"},\"banner\":{\"icon_text_color\":\"#EB391B\",\"background_color\":\"rgba(235, 57, 27, 0.04)\"},\"coupon\":{\"coupon_border_color\":\"#FFEFDE\",\"coupon_background_color\":\"#F8A056\",\"coupon_background_color_end\":\"#F93E37\",\"coupon_color\":\"#FFFFFF\",\"coupon_button_background_color_start\":\"#FEE7CD\",\"coupon_button_background_color_end\":\"#FFF4E7\",\"coupon_button_color\":\"#F94339\"}}}","display_type":"DTE_FOLD"}]}],"hash":"320c3c204f253756eb8a26ac5901e30c"}; let data = await this.getDiscountList(); if (data.hash && (data.hash !== promotionComplex.hash)) { // ๅ…œๅบ•ๆ–นๆกˆ, downgrade == true; ้œ€่ฆ้™็บง ๅˆ™่ฆ่ฏทๆฑ‚ๆŽฅๅฃ, // ไฝ†ๆ˜ฏ็›ดๅ‡บๆ•ฐๆฎๅฏ่ƒฝๅญ˜ๅœจ็ผ“ๅญ˜๏ผŒไธ€ๅฎšไผš่ฐƒ็”จไธ€ๆฌกๆŽฅๅฃ๏ผŒ็›ดๆŽฅๅˆคๆ–ญhash็‰ˆๆœฌ๏ผŒไธไธ€่‡ดๅฐฑ็”จๆŽฅๅฃ็š„๏ผŒไธ€่‡ดๅฐฑๆฒกๅฟ…่ฆ้‡ๆ–ฐๆธฒๆŸ“ไธ€ๆจกไธ€ๆ ท็š„ๆ•ฐๆฎไบ† console.log('%c ่‡ชๅŠจๆŠ˜ๆ‰ฃhashไธไธ€่‡ด, ไฝฟ็”จๆŽฅๅฃๆ•ฐๆฎ ', 'background:#ffe3f4;border: 1px solid #ff4395; color: #ff4395;', data.hash); this.renderApiData_(data); } } async getDiscountList() { const productId = '164e9842-7001-4832-ab36-54a43b2f9c75'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if(parentDiv){ parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // ้‡ๆ–ฐๆธฒๆŸ“ ๆŠ–ๅŠจ้—ฎ้ข˜ๅค„็† this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // ็ป‘ๅฎšไบ‹ไปถ bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // ๆ˜ฏๅฆpopover้ขๆฟ็‚นๅ‡ป่Œƒๅ›ด if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // ๅ…ผๅฎนไธป้ข˜ this.toggleProductSticky(true); }) // ็›‘ๅฌๅ˜ไฝ“ๅ˜ๅŒ– document.addEventListener('dj.variantChange', async(event) => { // ้‡ๆ–ฐๆธฒๆŸ“ const variant = event.detail.selected; if (variant.product_id == '164e9842-7001-4832-ab36-54a43b2f9c75') { this.variant_id = variant.id; } await this.debounceRenderDiscountList(); }); } // ๅ…ผๅฎนไธป้ข˜ handleFitTheme() { // top ๅฑžๆ€งๅฝฑๅ“ๆŠ–ๅŠจ let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // ๅ…ผๅฎน wind/flash /hero ไธป้ข˜ (stickyๅฑžๆ€งๅฝฑๅ“ popover ๅฑ‚็บงๅฑ•็คบ, ไผš่ขซๅ…ถไป–ๅ…ƒ็ด ่ฆ†็›–) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // ่ฟ˜ๅŽŸ่ฏฅไธป้ข˜ๅŽŸๆœ‰็š„stickyๅฑžๆ€งๅ€ผ productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // ๅ…ผๅฎนไธป้ข˜ this.toggleProductSticky(); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
Buy $50.00 get $2.00 off
Color:  SCZ-BBXY-01
$1.94
$3.88
-50%
Quantity
Visible only when the product is out of stock. Currently in preview mode.
Notify Me
(function(){ function $(selector){ return document.querySelector(selector); } const EMAIL_REG = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; // ่Žทๅ–domๆ•ฐๆฎ const doms = { button: $('#app-arrival-reminder-button'), previewBox: $('#app-arrival-reminder-preview-box'), toast: $('#app-arrival-reminder-toast'), lightbox: $('#arrival-lightbox'), datalist: $('#app-arrival-reminder-email-list'), imgRender: $('#app-arrival-reminder-product-image-render'), productVariant: $('#app-arrival-reminder-product-variant'), emailInput: $('#app-arrival-reminder-form .reminder-email-input'), emailWarn: $('#app-arrival-reminder-form .reminder-email-warn-wrap'), emailWarnText: $('#app-arrival-reminder-form .reminder-email-warn-text'), submitButton: $('#app-arrival-reminder-submit-button') }; // ้€‰ไธญ็š„skuๆ•ฐๆฎ let selectedVariant = {"id":"c0955b2a-d31e-4653-b350-fe97c02a647f","product_id":"164e9842-7001-4832-ab36-54a43b2f9c75","title":"SCZ-BBXY-01","weight_unit":"kg","inventory_quantity":1034,"sku":"SCZ-BBXY-01","barcode":"","position":1,"option1":"SCZ-BBXY-01","option2":"","option3":"","note":"","image":{"src":"\/\/img.staticdj.com\/3df7eaea813c16106002ae84e9cd46e4.jpeg","path":"3df7eaea813c16106002ae84e9cd46e4.jpeg","width":800,"height":800,"alt":"Material Paper - Mottled Rust Shadow Series Vintage Old Pattern Landscape ","aspect_ratio":1},"wholesale_price":[{"price":1.95,"min_quantity":1}],"weight":"0.05","compare_at_price":"3.88","price":"1.94","retail_price":"3.88","available":true,"url":"\/products\/mottled-rust-shadow-series-vintage-old-pattern-landscape-material-paper?variant=c0955b2a-d31e-4653-b350-fe97c02a647f","available_quantity":1034,"options":[{"name":"Color","value":"SCZ-BBXY-01"}],"off_ratio":"50","flashsale_info":{"variant_id":"c0955b2a-d31e-4653-b350-fe97c02a647f","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"1.94","compare_at_price":"","discount_price":"1.94","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"50","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":147}; // ไธŠๆŠฅ function reportData(params){ // ็ผ–่พ‘/้ข„่งˆไธไธŠๆŠฅ if(false){ return; } window.sa.track(params.event_name, { business_type: 'product_plugin', function_name: 'Back_in_Stock', plugin_name: "Back_in_Stock", template_name: "product", template_type: 1, module: "apps", module_type: "Back_in_Stock", event_info: JSON.stringify({ action_type: 'Back_in_Stock' }), ...params }); } // ๆŒ‰้’ฎๆ›ๅ…‰ไธŠๆŠฅ function buttonPVReport(){ reportData({ event_name: 'function_expose', event_type: 'expose', event_desc: 'ๆ— ่ดงๅ•†ๅ“ๆ—ถ่งฆๅ‘' }); } // ๅผน็ช—ๆ›ๅ…‰ไธŠๆŠฅ function popupPVReport(){ reportData({ event_name: 'function_expose', event_type: 'popup_expose', event_desc: 'ๅผน็ช—ๆ›ๅ…‰ๆ—ถ่งฆๅ‘' }); } // submitๆŒ‰้’ฎ็‚นๅ‡ปไธŠๆŠฅ function submitClickReport(){ reportData({ event_name: 'function_click', event_type: 'popup_click', event_desc: 'ๅกซๅ…ฅ้‚ฎ็ฎฑไน‹ๅŽ๏ผŒ็‚นๅ‡ปnotify ่งฆๅ‘', event_info: JSON.stringify({ action_type: 'email_click' }), }); } // -----------------------ๅˆๅง‹ๅŒ–----------------- init(); // ๅˆๅง‹ๅŒ–ๆ“ไฝœ function init(){ // ไธบ็กฎไฟwindowๆœ‰ๅŽ้ขๆทปๅŠ ็š„ๅ€ผไพ‹ๅฆ‚window.sa ้œ€่ฆๅœจDOMContentLoadedๅ›ž่ฐƒไบ‹ไปถไธญๆ‰ง่กŒ้€ป่พ‘ document.addEventListener("DOMContentLoaded", function() { // ่ฎพ็ฝฎ้‚ฎไปถ่”ๆƒณ setDataList(); if(!true){ // ๅˆๅง‹ๆ— ่ดง ๆŒ‰้’ฎpvไบ‹ไปถๅŸ‹็‚นไธŠๆŠฅ buttonPVReport(); } }); } // ่ฎพ็ฝฎ้‚ฎไปถ่”ๆƒณ function setDataList(){ const customer_email = window.C_SETTINGS.customer.customer_email; if(customer_email){ const options = document.createElement('option'); options.setAttribute('value', customer_email); doms.datalist.appendChild(options); } } // -----------------------ไบ‹ไปถๆ“ไฝœ---------------- // ็›‘ๅฌskuๅ˜ๅŒ–ไบ‹ไปถ document.addEventListener('dj.variantChange', variantChange); // ็›‘ๅฌๆ้†’ๆŒ‰้’ฎ็‚นๅ‡ปไบ‹ไปถ doms.button.addEventListener('click', reminderButtonClick); // ็›‘ๅฌๆไบคๆŒ‰้’ฎ็‚นๅ‡ปไบ‹ไปถ doms.submitButton.addEventListener('click', submit); // ็›‘ๅฌinputๅ…ƒ็ด ็š„keydownไบ‹ไปถ doms.emailInput.addEventListener('keydown', function(e) { // ๅˆคๆ–ญๆ˜ฏๅฆๆŒ‰ไธ‹ไบ†Enter้”ฎ if (e.keyCode === 13 || e.key === 'Enter') { submit(); } }); // ๆ˜พ็คบๆญฃๅธธๆŒ‰้’ฎ function showReminderButton(){ doms.button.classList.remove('app-arrival-hidden'); doms.previewBox.classList.add('app-arrival-preview-hidden'); buttonPVReport(); } // ๅฑ•็คบ้ข„่งˆๆŒ‰้’ฎ function showPreviewButton(){ doms.button.classList.remove('app-arrival-hidden'); doms.previewBox.classList.remove('app-arrival-preview-hidden'); } // ้š่—ๆŒ‰้’ฎ function hiddenReminderButton(){ doms.button.classList.add('app-arrival-hidden'); doms.previewBox.classList.add('app-arrival-preview-hidden'); } // ๆไบคๆ•ฐๆฎ, ่ฏทๆฑ‚ๆŽฅๅฃ function submit(){ // ่Žทๅ–้‚ฎ็ฎฑๆ•ฐๆฎ const email = doms.emailInput.value.trim(); if(!email){ doms.emailWarnText.innerText = "Please enter your email address"; doms.emailWarn.classList.remove('app-arrival-hidden'); return; } if(!EMAIL_REG.test(email)){ doms.emailWarnText.innerText = "Please enter a valid email address"; doms.emailWarn.classList.remove('app-arrival-hidden'); return; } // ้‚ฎ็ฎฑๆ ก้ชŒๆˆๅŠŸ doms.emailWarn.classList.add('app-arrival-hidden'); // ้ข„่งˆๆ—ถไธ่ฐƒๆŽฅๅฃ if(false){ SPZ.whenApiDefined(doms.toast).then(apis => { apis.showToast("Currently in preview mode, subscription is for testing only", 3000); }); return; } // ๅŠ ๅ…ฅloadingๆ ทๅผ doms.submitButton.classList.add('reminder-submit-button-loading'); // ๆไบคๆ•ฐๆฎ่ฏทๆฑ‚ๆŽฅๅฃ let quantity = 1; const quantityDom = $('#app-arrival-reminder-quantity-render ljs-quantity'); if(quantityDom){ quantity = Number(quantityDom.getAttribute('value')) || 1; } const params = { customer_email: email, product_num: quantity, product_id: selectedVariant.product_id, product_variant_id: selectedVariant.id }; fetch(`${window.C_SETTINGS.routes.root}/api/front/gobbler/v1/subscribe`, { method: 'POST', body: JSON.stringify(params), headers: { 'Content-Type': 'application/json' } }).then((res)=>res.json()).then((res)=>{ /* ๅŽ็ซฏ้”™่ฏฏๆ็คบ */ if(res.errors && res.errors.length){ SPZ.whenApiDefined(doms.toast).then(apis=>{ apis.showToast(res.errors[0], 3000); }); return; } /* code * 0 SUCCESS ่ฎข้˜…ๆˆๅŠŸ * 1 PRODUCT_OFFLINE ๅ•†ๅ“ไธ‹ๆžถ * 2 INVENTORY_NOT_EMPTY ๅ•†ๅ“ๅบ“ๅญ˜ไธไธบ็ฉบ * 3 REPEAT_SUBSCRIBE ้‡ๅค่ฎข้˜… * 4 EMAIL_EMPTY ้‚ฎไปถไธบ็ฉบ * 5 EMAIL_WRONG_FORMAT ้‚ฎไปถๆ ผๅผ้”™่ฏฏ * 99999 INVALID_PARAMS ๅ…ถไป–ๅ‚ๆ•ฐ้”™่ฏฏ */ const codeMap = { SUCCESS: ()=>{ SPZ.whenApiDefined(doms.lightbox).then(apis=>{ apis.close(); }); SPZ.whenApiDefined(doms.toast).then(apis=>{ apis.showToast("Thank you for your subscription! We will notify you as soon as the product is back in stock!", 3000); }); }, INVENTORY_NOT_EMPTY: ()=>{ SPZ.whenApiDefined(doms.lightbox).then(apis=>{ apis.close(); }); SPZ.whenApiDefined(doms.toast).then(apis=>{ apis.showToast("Subscription failed. Product back in stock, please proceed to checkout.", 3000); }); setTimeout(()=>{ window.location.reload(); }, 3000); }, REPEAT_SUBSCRIBE: ()=>{ SPZ.whenApiDefined(doms.toast).then(apis=>{ apis.showToast("You've already subscribed to this product. We'll let you know as soon as it's back in stock. Feel free to explore our other products.", 3000); }); }, EMAIL_EMPTY: ()=>{ SPZ.whenApiDefined(doms.toast).then(apis=>{ apis.showToast("Please enter your email address", 3000); }); }, EMAIL_WRONG_FORMAT: ()=>{ SPZ.whenApiDefined(doms.toast).then(apis=>{ apis.showToast("Please enter a valid email address", 3000); }); } }; codeMap.PRODUCT_OFFLINE = codeMap.SUCCESS; codeMap[res.code] && codeMap[res.code](); }).finally(()=>{ doms.submitButton.classList.remove('reminder-submit-button-loading'); }); // submit็‚นๅ‡ปไธŠๆŠฅ submitClickReport(); } // ้‡ๆ–ฐๆธฒๆŸ“dialog function refreshRenderDialog(){ console.log('selectedVariant', selectedVariant); const images = selectedVariant.image || {"src":"\/\/img.staticdj.com\/0d88042d921c057dd2b95d8fe8731e4f.jpeg","path":"0d88042d921c057dd2b95d8fe8731e4f.jpeg","width":1500,"height":1500,"alt":"Material Paper - Mottled Rust Shadow Series Vintage Old Pattern Landscape ","aspect_ratio":1}; const imagePosition = images.aspect_ratio > 1 ? 'left top' : 'center center'; // ้‡ๆ–ฐๆธฒๆŸ“ๅ›พ็‰‡ SPZ.whenApiDefined(doms.imgRender).then((apis)=>{ apis.render({ images, imagePosition }); }); // ้‚ฎไปถ้”™่ฏฏๆ็คบ็ฝฎ็ฉบ doms.emailWarn.classList.add('app-arrival-hidden'); // ้‡ๆ–ฐๆธฒๆŸ“ๆฌพๅผ่ฏดๆ˜Ž if(selectedVariant.title){ doms.productVariant.innerText = selectedVariant.title.split('-').join('/'); } // ่กจๅ•ๆ•ฐๆฎ็ฝฎ็ฉบ doms.emailInput.value = ''; } // skuๅ˜ๅŒ– ๅ•ไธ€ๆฌพๅผไธไผš่งฆๅ‘ function variantChange(e){ const selected = e.detail.selected; // ๅญๆฌพๅผๆฒกๅ˜ไธๆ‰ง่กŒๆ“ไฝœ ไพ‹ๅฆ‚ๆ•ฐ้‡ๅ˜ๅŒ– if(selected.id === selectedVariant.id){ return; } selectedVariant = selected; console.log('selectedVariant', selectedVariant); // ๆ•ฐ้‡ๅ˜ๅŒ– if(selected.available || selected.product_id === undefined){ // ๆœ‰ๅบ“ๅญ˜ ็ผ–่พ‘ๆ—ถๅฑ•็คบ้ข„่งˆๆŒ‰้’ฎ ๅฆๅˆ™้š่—ๆŒ‰้’ฎ if(false){ showPreviewButton(); }else { hiddenReminderButton(); } }else{ // ๆ— ๅบ“ๅญ˜ ๆ˜พ็คบๆญฃๅธธๆŒ‰้’ฎ showReminderButton(); } } // ๆ้†’ๆŒ‰้’ฎ็‚นๅ‡ป function reminderButtonClick(){ refreshRenderDialog(); // ๅผน็ช—ๆ›ๅ…‰ไธŠๆŠฅ popupPVReport(); } document.body.appendChild(doms.toast); document.body.appendChild(doms.lightbox.parentElement); })();
Shipping
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);

Description

๐ŸŒฟ Add a touch of vintage charm and texture to your scrapbooking, journaling, and DIY projects with this stunning rust-themed decorative paper. Featuring a variety of different rusty textures and designs, this paper evokes the beauty of age and wear, perfect for creating unique, retro-inspired layouts. Whether you're designing a rustic scrapbook, vintage journal, or need a textured backdrop for your cards, this rust-themed paper will provide the perfect foundation for your creative projects. Ideal for adding a distressed, weathered look to your designs, it brings character and depth to any project.

Product Features
โœ… Rust Theme | Vintage & Distressed Textures ๐ŸŒฟ

  • Rusty Designs: This decorative paper features a collection of different rusty textures and patterns, including rusty metal, aged wood, and corroded surfaces, adding a beautiful worn look to your projects.

  • Perfect for Retro Styles: Whether you're working on a vintage scrapbook or a rustic-themed project, the rust theme brings an authentic, aged touch to your creations.
    โœ… Ideal for Scrapbooking & DIY Projects | Stunning Backgrounds ๐Ÿ“–

  • Vintage Feel: The rust-colored designs create a unique and nostalgic atmosphere, perfect for vintage-themed projects.

  • Creative Use: Use the rust-themed paper as a background for photos, journaling, or other embellishments, adding texture and depth to your layouts.
    โœ… High-Quality Paper | Durable & Easy to Work With ๐ŸŽจ

  • Strong & Versatile: Made from high-quality paper, this decorative sheet is durable and versatile, perfect for cutting, folding, and layering in your creative projects.

  • Smooth Finish: The paper’s smooth texture allows for easy handling and cutting, ensuring your designs are neat and clean.
    โœ… Perfect for Customizing & Layering | 10cm x 14cm Size ๐Ÿ“

  • Large Sheet Size: Each sheet measures 10cm x 14cm, giving you plenty of space to create detailed, customized designs. The larger size is ideal for scrapbooking layouts, card-making, or any other DIY project that requires a high-quality base material.

Bring the beauty of rust and vintage charm to your projects with this decorative paper. Whether you're adding a rustic touch to a scrapbook, creating a weathered background for a greeting card, or designing a retro journal, this paper will give your creations an authentic, timeless look. โœจ

FAQ

โ‘ ๏ผšOur shop has installed currency conversion tool. If you want to know the currency settlement price of your country, please switch in the upper right corner of the page

โ‘ก๏ผšfter-sale service๏ผšIf you have any problems with the product received,please do not directly leave negative feedback.Do contact us and we will try our best to solve the problems until you are satisfied.Please contact me via WhatsApp: +8618858726426

About Indian buyers
Question: Will my package be taxed?
Answer:For parcels sent to India, DDU (Delivered Duty Unpaid) terms are currently used. Under DDU terms, the product prices shown on our website do not include any local taxes and import taxes at the destination.
The specific customs duties will be based on the charges when the parcel is delivered.


Question: How long does it take for the package to reach my home?
Answer: The parcel processing time is 1-3 days + the parcel transportation time is 7-25 days = it takes 8-28 days in total

Question: Need to fill in PAN for local payment in India?
Answer: Yes, you need to fill in the accurate PAN, please rest assured, we are a regular store and a regular collector, please be assured of your payment

Question: Will my package be split?
Answer: At present, the journalsay has updated a brand new transportation channel. Products weighing less than 2kg can be transported in one package and will not be split into multiple ones. Please rest assured to buy.


1: How long does it take to transport the package?
Answer: Total Delivery Time (10-30days) = Processing Time (3 days) + Shipping Time (7-25days)

2: Will my package be taxed?
Answer: Parcels will not be taxed through standard transportation and economic transportation, please rest assured to buy.

3: What are your transportation methods?


โ‘ : Standard shipping: Shipping time: 7-30days (full tracking of logistics information, shipping method: e-packet, CNE, China Post, YANWEN) Free standard shipping if the order amount exceeds $20

โ‘ก: Express delivery: delivery time: 7-14days (full tracking of logistics information, transportation method: DHL, UPS, TNT, Federal Express)

4: Do you support wholesale products?
Answer: Journalsay supports wholesale and dropshopping. Journalsay does not have a product list.For more information, please contact me via Instagram or WhatsApp.

5: Where does the journalsay come from?
Answer: The journalsay comes from China, we have ample supply of goods, and the price is affordable and exquisite.

6: Which countries are supported for transportation?
Answer: The journalsay can be shipped to more than 200 countries around the world, including India (please rest assured to buy).

7: What payment methods are supported?
Answer: I support the world’s most popular credit and debit cards and paypal.
For example: VISA, MasterCard, DISCOVER, JBC, ICICI, American Express, Diners Club International.
And your local payment
Such as Mexico-OXXO
Peru-interbank

8: Where can I contact you?
Service: WhatsApp: +86 188 5872 6426
Instagram: journalsay
Email: journalsay04@gmail.com
Please try to contact me via Instagram or WhatsApp, and I will respond to your questions faster.


9๏ผšHow can I track my package?
Answer:
โ‘ : You can find the corresponding order you purchased on my website,๏ผˆP.S:The tracking number can only be seen through the computer๏ผ‰Find the tracking number, use this website (https://www.17track.net/en) to track your package, please rest assured that all order logistics information is trackable throughout the process
โ‘ก: Check your Google mailbox "A series of operations such as successful package payment/package delivery" and there will be an email to notify you. In the email, see the tracking number, use this website (https://www.17track.net/en to track your package, please rest assured that all order logistics information is trackable throughout the process


10๏ผšI clicked "Confirm Receipt" by mistake, what should I do?
Answer: Don't worry, your package will not stop shipping, you can receive your package. You only need to know the tracking number and track it.


DELIVERY
Delivery to delivery time may 5~27 Business Days, depending on the items and the way of transportation.
Sometimes, the accumulation of goods will cause the logistics company's online logistics information update to be delayed for a long time, but in fact your goods are still being transported, In our experience, it always comes without exception. Thank you for your patience!
Special cases, you buy multiple items, We will send in several packages.

Contact Us

We love to hear from you,our team is available to help answer questions and offer styling advice, so if there’s anything you’d like to ask us, we’re right here and ready to help in every way we can.


We’re available to support you via

Email:journalsay04@gmail.com

WhatsApp:+86 18858726426

We strive to answer your questions within.24 hours

Customer service chat hours:

Monday - Saturday 8:30am - 18.30pm ,Pacific Time: 5:30 pm-2:30 am the next day

Address: Room 22, 2nd Floor, Fudu Building, 98 Argyle Street, Mong Kok, Kowloon, Hong Kong

Please kindly note: During peak seasons and promotional sales, our response time might take a little longer. Please use the same email address you used when placing your order when contacting us, and include your order number in your email.

Customer Reviews
Here are what our customers say.
Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.