Sifter + Scale Attachment KSMSFTA | KitchenAid (2024)

Sifter + Scale Attachment

Model: KSMSFTA

Model: KSMSFTA

KSMSFTA

Model: KSMSFTA

Hurry! Limited Time Offer Ends Soon

Customize Your Stand Mixer (Free)

Personalize your stand mixer with laser engraving and special offers on additional bowls and attachments. Available on select colors.

CUSTOMIZE IT

Sifter + Scale Attachment KSMSFTA | KitchenAid (1)

'; setTimeout(function (){ if (window.location.href.indexOf("ksm150") > -1) { if (window.digitalData.product[0].productInfo.availability == "inStock"){ $(".productvariants").append(customSection); } } }, 5000); // How long you want the delay to be, measured in milliseconds. });

Preview in your space

Use your phone camera to see it in your space.

`; class AgileVideoComponent extends HTMLElement { constructor() { super(); this.cfUrl = this.getAttribute("cf-data-url"); this.vidUniqId = `video-`+String(Date.now()); this.jsonData = {}; this.urlSku = ""; this.pageType = window.digitalData.page.pageInfo.pageType; this.pageType = 'productdetail'; if (this.pageType.includes("productdetail")) { this.urlSku = window.location.pathname.split('p.').pop().split('.') } // ===================== ATTACHING SHADOW AND SETTING DELEGATES FOCUS TO MAKE ELEMENTS INSIDE THE COMPONENT FOCUSABLE ===================== this.attachShadow({ mode: "open", delegatesFocus: true }); this.shadowRoot.appendChild(pdpTemplate.content.cloneNode(true)); this.classList.add('hidden') } connectedCallback() { this.shadowRoot.querySelector('[name=play-icon]').addEventListener('slotchange', (e)=>{ // *** Can I move this to document scoped CSS since it cannot be changed from the within the component scoped styles? *** // If/when this is moved to codebase, we can bring in and use YT internally, which would eliminate the need to bring these in via slots and allow us to use/style them within the component. const playSvg = this.querySelector('.play-svg svg') playSvg.setAttribute('style', 'height:100%;') playSvg.addEventListener('mouseenter',()=>{ playSvg.parentElement.style.scale = '1.15' }) playSvg.addEventListener('mouseleave',()=>{ playSvg.parentElement.style.scale = '1' }) // ************* }) const modal = document.getElementById(this.getAttribute('modal-id')) // if(!window.location.host.includes('aem-author.whirlpool') ){ // this.classList.add('hidden') // }else if(window.location.host.includes('aem-author.whirlpool') ){ this.classList.remove('hidden') this.shadowRoot.querySelector('.headline').textContent = 'Agile Video Placeholder' this.closest('.xf-content-height').style.margin = '0'; this.shadowRoot.querySelector('.img-placeholder').style.display = 'inline-block' } // *** Fetch Content Fragment, Or JSON Data *** // // this.getCfData.bind(this)(); document.addEventListener('readystatechange', ()=>this.getCfData.bind(this)() ) // ************* // } // ===================== FETCH CONTENT FRAGMENT/JSON DATA ===================== // **** Newest Version uses web-workers to handle most of the logic, that will further improve the performance as nearly all the logic will be taken off the main thread **** async getCfData () { if(document.readyState == 'complete' ){ await fetch(this.cfUrl) .then( response => response.json() ) .then( data => this.jsonData = data ) .then( () => this.parseSet.bind(this)(this.jsonData) ) .catch( err => console.log("Getting cf data failed: ", err)) } } // ===================== PARSE CONTENT FRAGMENT DATA ===================== // **** Newest Version uses web-workers to handle most of the logic, that will further improve the performance as nearly all the logic will be taken off the main thread **** async parseSet(data) { let cfObj = this.jsonData || data;// console.log(cfObj, this.urlSku) let foundVid = cfObj["videos"].forEach((vid, i) => { let loadVid = this.urlSku.filter(item=>{ if(!vid["skus"])return return vid["skus"].includes(item) }) // console.log(loadVid) if (this.pageType.includes("productdetail") && loadVid.length>0 ) { this.setPdpVidAttrs({ overline: vid.overline, headline: vid.headline, subtitle: vid.subtitle, dataVideoId: vid.dataVideoId, mobileImg: vid.mobileImg, desktopImg: vid.desktopImg, ctaText: vid.ctaText, ctaTitle: vid.ctaTitle, dataUniqueId: this.vidUniqId, }); } }); } // ===================== SET ATTRIBUTES ===================== setPdpVidAttrs = (vidDataToRender) => { // ===================== CONTENT CARD SELECTORS ===================== const vidSel = this.shadowRoot ? { overline: this.shadowRoot.querySelector(".overline"), headline: this.shadowRoot.querySelector(".headline"), subtitle: this.shadowRoot.querySelector(".subtitle"), ctaText: this.querySelector(".platform-components-video__button .button-text"), playSvg: this.querySelector(".play-svg"), playBtn: this.querySelector('.platform-components-video__button'), desktopImg: this.shadowRoot.querySelector('[media="(min-width: 768px)"]'), mobileImg: this.shadowRoot.querySelector('[media="(max-width: 767px)"]'), img: this.shadowRoot.querySelector( ".image" ), } : ""; this.videoId = vidDataToRender.dataVideoId // Check to see if the agile-video element has been hydrated first to avoid unneccessary work. if(!this.getAttribute('hyrdrated')){ for(const prop in vidDataToRender){ switch(prop){ case 'overline': let contentContainer = this.shadowRoot.querySelector('.agile-pdp-content') let overline = document.createElement('h1') contentContainer.insertAdjacentElement('afterbegin',overline) overline.textContent = vidDataToRender[prop] overline.classList.add('overline') break; case 'headline': // Check to see if ® is in the text, if it is, superscript it vidDataToRender[prop].includes('®') ? vidSel[prop].innerHTML = vidDataToRender[prop].replace('®','®') : vidSel[prop].textContent = vidDataToRender[prop] break; case 'subtitle': // Check to see if ® is in the text, if it is, superscript it vidDataToRender[prop].includes('®') ? vidSel[prop].innerHTML = vidDataToRender[prop].replace('®','®') : vidSel[prop].textContent = vidDataToRender[prop] break; case 'desktopImg': vidSel[prop].getAttribute('srcset', vidDataToRender[prop]) vidSel["img"].setAttribute('src', (window.innerWidth >= 768 ? vidDataToRender[prop] :vidDataToRender["mobileImg"])) break; case 'mobileImg': vidSel[prop].getAttribute('srcset', vidDataToRender[prop]) break; case 'ctaTitle': vidSel["playSvg"].setAttribute('title', vidDataToRender[prop]) vidSel["playBtn"].setAttribute('title', vidDataToRender[prop]) break; case 'dataVideoId': {vidSel["playSvg"].setAttribute('data-video-id', vidDataToRender[prop]) vidSel["playBtn"].setAttribute('data-video-id', vidDataToRender[prop])} break; case 'dataUniqueId': { vidSel["playSvg"].setAttribute('data-unique-id', this.vidUniqId) vidSel["playBtn"].setAttribute('data-unique-id', this.vidUniqId)} break; } } } this.setAttribute('hydrated', ''); this.classList.remove('hidden'); }; } // ===================== CHECK TO MAKE SURE ELEMENT ISN'T ALREADY REGISTERED & REGISTER ===================== if (!customElements.get("agile-video")) { window.customElements.define("agile-video", AgileVideoComponent); }

How to Preview in Your Space

Scan QR Code to view product in your space

  • Point your Phone Camera at a flat surface

    Try a different space if you cannot view the product

  • Moving the product in your space

    Use one finger to move product

  • Scale to see product detail

    Use two fingers to pinch, scale, and rotate product

  • Tap twice to reset

    Return to original scale by double tapping with one finger on the product

Augmented Reality experience is currently supported on the following devices: iPhone on iOS 12+ Android 8.0+ with ARCore 1.9 support

Get Started

Key Features

Works with all KitchenAid® Stand Mixers

Automatic, Hands-Free Sifting

Easy-to-use Digital Scale

Generous Capacity Hopper

Convenient Storage

Color:

Other

Hurry! Limited Time Offer Ends Soon

Sign in to unlock lower pricing

FREE SHIPPING

Temporarily out of stock

Success!

We will send you an email when this product is back in stock. Thank you.

in.stock.toast.message

FREE SHIPPING

Provide your ZIP code to check availability in your area.

Estimating In-Home Delivery for ...

Change this location?

Estimated Shipping Date for :

product.tray.arrival.date.unavailable.label

Change this location?

Sifter + Scale Attachment KSMSFTA | KitchenAid (3) Sifter + Scale Attachment KSMSFTA | KitchenAid (4) Sifter + Scale Attachment KSMSFTA | KitchenAid (5) Sifter + Scale Attachment KSMSFTA | KitchenAid (6)

Protection Plans(Optional)

  • No-hassle Claim Process
  • Service Scheduled at Your Convenience
  • Multi-year Protection Options
  • Convenient Payment Options

View Full Policy

Flexible Appliance Protection Plans for Your NeedsLearn More

Sifter + Scale Attachment KSMSFTA | KitchenAid (2024)
Top Articles
Latest Posts
Article information

Author: Corie Satterfield

Last Updated:

Views: 5757

Rating: 4.1 / 5 (42 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Corie Satterfield

Birthday: 1992-08-19

Address: 850 Benjamin Bridge, Dickinsonchester, CO 68572-0542

Phone: +26813599986666

Job: Sales Manager

Hobby: Table tennis, Soapmaking, Flower arranging, amateur radio, Rock climbing, scrapbook, Horseback riding

Introduction: My name is Corie Satterfield, I am a fancy, perfect, spotless, quaint, fantastic, funny, lucky person who loves writing and wants to share my knowledge and understanding with you.