Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil
Folded Star Guide Stencil

Folded Star Guide Stencil

Price

$14.39 $9.99
Save 31%
/** * ไผ˜ๆƒ ็ ็ป„ไปถๆจกๅž‹็ฑป * ๅค„็†ไผ˜ๆƒ ็ ็š„ๆ˜พ็คบๅ’Œไบคไบ’้€ป่พ‘ */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // ๅคๅˆถๆŒ‰้’ฎๅ’Œๅ†…ๅฎน็š„็ฑปๅ this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // ๅˆๅง‹ๅŒ–ๆœๅŠก this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * ๆธฒๆŸ“ไผ˜ๆƒ ็ ็ป„ไปถ * @param {Object} data - ๆธฒๆŸ“ๆ•ฐๆฎ */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // ็ป‘ๅฎšๅคๅˆถไปฃ็ ๅŠŸ่ƒฝ this.copyCode(el, data); }); } /** * ่Žทๅ–ๆธฒๆŸ“ๆจกๆฟ * @param {Object} data - ๆธฒๆŸ“ๆ•ฐๆฎ */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * ๆธ…้™คDOMๅ†…ๅฎน */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * ่Žทๅ–้ป˜่ฎคๆ•ฐๆฎ * @returns {Object} ้ป˜่ฎคๆ•ฐๆฎๅฏน่ฑก */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * ๅคๅˆถไผ˜ๆƒ ็ ๅŠŸ่ƒฝ * @param {Element} el - ๅฝ“ๅ‰ๅ…ƒ็ด  */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // ็กฎไฟ่Žทๅ–ๆญฃ็กฎ็š„ๅ…ƒ็ด ๅ’Œๅ†…ๅฎน const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // ่Žทๅ–็บฏๆ–‡ๆœฌๅ†…ๅฎน const textToCopy = codeElement.innerText.trim(); // ๅฐ่ฏ•ไฝฟ็”จ็ŽฐไปฃAPI๏ผŒๅฆ‚ๆžœๅคฑ่ดฅๅˆ™ไฝฟ็”จๅค‡็”จๆ–นๆกˆ try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // ๆ˜พ็คบๅคๅˆถๆˆๅŠŸๆ็คบ this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // ไฝฟ็”จๅค‡็”จๅคๅˆถๆ–นๆกˆ this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // ๆ˜ฏๅฆ่ทณ่ฝฌ่ฝๅœฐ้กต้…็ฝฎ const redirection = item.dataset["redirection"] === "true"; // ่ทณ่ฝฌๅˆฐ่ฝๅœฐ้กต if (redirection && appDiscountUtils.inProductBody(this.element)) { this.win.open(`/promotions/discount-default/${discountId}`); } } }) } } /** * ไฝฟ็”จ execCommand ็š„ๅคๅˆถๆ–นๆกˆ * @param {string} codeText - ่ฆๅคๅˆถ็š„ๆ–‡ๆœฌ * @param {Element} el - ๅฝ“ๅ‰ๅ…ƒ็ด  */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // ่ฎพ็ฝฎๆ ทๅผไฝฟๆ–‡ๆœฌๆก†ไธๅฏ่ง textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // ๆทปๅŠ  readonly ๅฑžๆ€ง้˜ฒๆญข็งปๅŠจ็ซฏ่™šๆ‹Ÿ้”ฎ็›˜ๅผนๅ‡บ textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // ๆ˜พ็คบๅคๅˆถๆˆๅŠŸๆ็คบ this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * ๅˆ›ๅปบ Toast ๅ…ƒ็ด  * @returns {Element} ๅˆ›ๅปบ็š„ Toast ๅ…ƒ็ด  */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * ๆŒ‚่ฝฝ Toast ๅ…ƒ็ด ๅˆฐ body * @returns {Element} ๆŒ‚่ฝฝ็š„ Toast ๅ…ƒ็ด  */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * ๅคๅˆถๆˆๅŠŸ็š„ๆ้†’ * @param {string} codeText - ่ฆๅคๅˆถ็š„ๆ–‡ๆœฌ * @param {Element} el - ๅฝ“ๅ‰ๅ…ƒ็ด  */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * ๅคๅˆถไผ˜ๆƒ ็ ๆˆๅŠŸๅŽ่ฆๅญ˜ไธ€ไปฝๅˆฐๆœฌๅœฐๅญ˜ๅ‚จไธญ๏ผŒ่ดญ็‰ฉ่ฝฆไฝฟ็”จ * @param {string} codeText - ่ฆๅคๅˆถ็š„ๆ–‡ๆœฌ */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // ๆณจๅ†Œ่‡ชๅฎšไน‰ๅ…ƒ็ด  SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "846927da-9f4b-42ec-8c41-ca46690dc701"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // ๆธ…้™คๅฎšๆ—ถๅ™จ if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '54a0c635-4a4d-4c50-8373-af26fcc72a7c' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "54a0c635-4a4d-4c50-8373-af26fcc72a7c", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);

size

Please select a size

Quantity

Free worldwide shipping over $39.99
30-Day Returns
24h Customer service
Secure payments
  • ๐Ÿ”’30 days return guarantee

  • ๐Ÿ’Œ24/7 customer support


๐ŸŒŸ Have you always had trouble making Folded Star

๐ŸงตEasily make beautiful 8 point folded star blocks and more with this sewing tool.

This is the first folded star guide template tool to create a measurement method.

——Place the fabric at the same distance from each other and at the same distance from the center of the star to make a beautiful folded star.

Use a stencil to trace folded star hot pad foundations, create blocks in 5 sizes, draw perfect 45 and 90-degree angles, and easily space prairie points with a built-in ruler.


Very practical: Recyclable, no waste and save paper to protect the environment

 FEATURES 

  • Indelibly printed lines help you get accurate measurements.
  • Durable, won't bend or break easily. 
  • Transparent, allows you to work unimpeded.
You can do these cample

Here is what you need

Plum Easy Folded Star Pattern and Template (the patterns come with 1 template, and you can also get packs of 3 templates)

1 small square

4 small dark-colored squares turned into prairie points

8 large light-colored squares turned into prairie points

8 large dark-colored squares turned into prairie points

8 large light-colored squares turned into prairie points

glue stick

rotary cutter and ruler

steam iron(for making the prairie points)


Just prepare the origami paper beforehand

Place the first one on the layer 2 line on the 45-degree angle line.

Add some glue to the second prairie point and place it on the layer 2 line and the 90-degree angle line.

Continue adding glue to the corners of your prairie points and place them around the circle as pictured above.

For layer number 3, start in the same place as you did with layer number 2 and continue going around the circle adding all the prairie points.

Add layer number 4 the same way you added layer number 2 and 3.

Topstitch each section of your 8 points.

Use 4 scrap triangles larger than the corners and stitch right sides together. Then iron seams to one side as it is really thick.

Trim up your block with your rotary cutter and ruler and then you are all done! You can now make that into a potholder or keep going and make a pillow. :)

I quilted the pillow by topstitching around each star. This is one thick and comfy pillow!! :)

SPECIFICATIONS:

Material: PVC

Size: small-8in; medium-10in; large-15in

Customer Reviews

6
Kathy Nunn
Jul 35,2024

Very pretty!

Pamela Ade
Aug 11, 2024

Canโ€™t wait to stitch this for my daughter in law. It really is โ€œjust her!โ€ ๐Ÿ˜

Jane Bautch
Aug 6,2024

I have been adding a key chain to mine.For the one I kept for myself i also added a charm and a second hook for my keys!

Brenda Gerritsen
Sep 18, 2023

Oh my gosh, so cute! Planning on giving it to my daughter for Christmas after I finish it. I know she is going to love it. The kit itself would also be a great gift. Itโ€™s all packaged up very nicely with clear instructions.

Alyssa
Aug 20, 2024

I loved this kit! It came with everything needed including detailed directions. I'm so happy with how it turned out!

Anna Holubkovรก
Jul 19, 2024

Amazing pattern, easy to stitch, with all the instructions (including videos) and recommendations for the threats!