🎁Free Shipping on Orders Over $59🎉
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
1 / 14
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR
50% OFF
Fnkus

2023 CHRISTMAS GIF-2024 ADULTING IS HARD CALENDAR

$20.99 $41.98
0 sold
QTY
Qty 1000 in stock

🎅Christmas is coming! Give this to your adult friend as a Christmas gift so he or she will think of you every time he opens his calendar throughout the year.

You can also give it as a Christmas gift to encourage yourself to be a better person next year. When you are tired from work, seeing this will definitely boost your confidence and inspire your fighting spirit!

12 Month Calendar filled with hilarious and relatable quotes about being an adult.

Format: 8"x11.5"
Material: Heavy White Card Stock
Binding: White Coil 

    const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation);