
Share on:
SINGER Drawstring Threader and Sewing Loop Turner Tool SetFound a lower price? Let us know. Although we can't match every price reported, we'll use your feedback to ensure that our prices remain competitive. Store (Offline) Store name: City: State: Please select province Please select province Price: ($) Date of the price: 01 02 03 04 05 06 07 08 09 10 11 12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 / Please sign in to provide feedback. Submit Feedback P.when("A", "a-modal", "ready").execute(function (A, modal) { var $ = A.$; var instance; var title = $("#modalHeader").val(); A.declarative("pricingFeedback-modal-button", "click", function (event) { if (!instance) { var options = { name: "pricingFeedback-modal-content", dataStrategy: "preload", }; instance = modal.create(event.$target, options); } instance.update({ "header": title, "width": "550" }).lock().show(); }); }); P.when('A', 'ready').execute(function (A) { var $ = A.$; var csrf = $("#aapiCsrfToken").val(); var productPrice = $("#priceValue").val(); var hostname = $("#absoluteUrlPrefix").val(); var customerId = $("#customerId").val(); var isCustomerRecognized = ($("#isCustomerLoggedIn").val() === 'true'); var isCurrentGlOnlineOnly = ($("#isCurrentGlOnlineOnly").val() === 'true'); var asin = $("#asin").val(); var marketplaceId = $("#marketplaceId").val(); var country = $("#countryCode").val(); var offlineStoresList = $("#offlineStoresList").val(); var statesList = $("#statesList").val(); var errorMessages = { errorNoRetailerType: $("#errorNoType").val(), errorBadPrice: $("#errorBadPrice").val(), errorBadPriceShipping: $("#errorBadPriceShipping").val(), errorInvalidUrl: $("#errorInvalidUrl").val(), errorSubmission: $("#errorSubmission").val(), errorEmptyFields: $("#errorEmptyFields").val(), thankFeedback: $("#thankFeedback").val() }; var feedbackFormContent = document.querySelector('#feedbackForm'); var signUpContainer = document.querySelector('#signUpForm'); var feedbackFormFinalStateContainer = document.querySelector('#feedbackFormFinalState'); var states = JSON.parse(statesList); var offlineStores = JSON.parse(offlineStoresList); var offlineStoresEnabled = !isCurrentGlOnlineOnly; var currentDate = getCurrentDay(); var currentMonth = getCurrentMonth(); var currentYear = getCurrentYear(); if (isCustomerRecognized) { feedbackFormContent.style['display'] = 'block'; feedbackFormFinalStateContainer.style['display'] = 'block'; signUpContainer.style['display'] = 'none'; var enableOnlineStoreRadio = document.querySelector('#pricingFeedback_onlineRadio'); var enableOfflineStoreRadio = document.querySelector('#pricingFeedback_offlineRadio'); var onlineStoreInputForm = document.querySelector('#pricingFeedback_onlineInput'); var offlineStoreInputForm = document.querySelector('#pricingFeedback_offlineInput'); var offlineStateSelect = document.querySelector('#offlineState'); var offlineStoreSelect = document.querySelector('#offlineStoreNameList'); var submitButton = document.querySelector('#pricingFeedback_submit'); var onlineUrl = document.querySelector('#onlineUrl'); var onlinePriceRaw = document.querySelector('#onlinePriceRaw'); var onlineShippingRaw = document.querySelector('#onlineShippingRaw'); var onlineDay = document.querySelector('#onlineDay'); var onlineMonth = document.querySelector('#onlineMonth'); var onlineYear = document.querySelector('#onlineYear'); var onlineCalendar = document.querySelector('#onlineCalendar'); var offlineRadioContainer = document.querySelector('#offlineRadioContainer'); var offlineStoreName = document.querySelector('#offlineStoreName'); var offlineCity = document.querySelector('#offlineCity'); var offlineState = document.querySelector('#offlineState'); var offlinePriceRaw = document.querySelector('#offlinePriceRaw'); var offlineDay = document.querySelector('#offlineDay'); var offlineMonth = document.querySelector('#offlineMonth'); var offlineYear = document.querySelector('#offlineYear'); var offlineCalendar = document.querySelector('#offlineCalendar'); var thankYouDiv = document.querySelector('#pricingFeedback_thank'); var errorDiv = document.querySelector('#pricingFeedback_error'); var loadingGifDiv = document.querySelector('#loading'); setCalenderOrderBasedOnCountry(country); setInitialStates( onlineMonth, currentMonth, offlineMonth, onlineDay, currentDate, offlineDay, onlineYear, currentYear, offlineYear, onlineStoreInputForm, offlineStoreInputForm, enableOfflineStoreRadio, enableOnlineStoreRadio, onlineCalendar, offlineCalendar ); createPermalinkContainer(asin, hostname); for (let state of states) { var option = document.createElement('option'); option.setAttribute('value', state['value']); option.innerText = state['name']; offlineStateSelect.appendChild(option); } for (let store of offlineStores) { var option = document.createElement('option'); option.setAttribute('value', store); offlineStoreSelect.appendChild(option); } $("#pricingFeedback_onlineRadio").click(function () { onlineStoreInputForm.style['display'] = 'table'; offlineStoreInputForm.style['display'] = 'none'; }); $("#pricingFeedback_offlineRadio").click(function () { onlineStoreInputForm.style['display'] = 'none'; offlineStoreInputForm.style['display'] = 'table'; }); if (!offlineStoresEnabled) { offlineRadioContainer.style['display'] = 'none'; offlineStoreInputForm.style['display'] = 'none'; } $("#pricingFeedback_submit").click(function () { var feedbackSubmitted = submitFeedback( customerId, marketplaceId, asin, productPrice, onlineStoreInputForm, offlineStoreInputForm, onlineUrl.value, onlinePriceRaw.value, onlineShippingRaw.value, onlineDay.value, onlineMonth.value, offlineStoreName.value, offlineCity.value, offlineState.value, offlinePriceRaw.value, offlineDay.value, offlineMonth.value, thankYouDiv, errorDiv, submitButton, loadingGifDiv, errorMessages ); if (feedbackSubmitted !== null && !feedbackSubmitted) { errorDiv.innerHTML = getErrorDiv(errorMessages.errorSubmission); } }); A.on("a:popover:beforeHide:pricingFeedback-modal-content", function (data) { resetModalToInitialState(currentMonth, currentDate, currentYear); }); } else { feedbackFormContent.style['display'] = 'none'; feedbackFormFinalStateContainer.style['display'] = 'none'; signUpContainer.style['display'] = 'block'; var authPortalLink = getAuthenticationPageURL(asin, hostname); $("#signUpForm").one("click", function () { window.location = encodeURI(authPortalLink); }); } function setCalenderOrderBasedOnCountry(country) { var monthSections = document.getElementsByClassName('monthSection'); var daySections = document.getElementsByClassName('daySection'); var yearSections = document.getElementsByClassName('yearSection'); var firstDelimiters = document.getElementsByClassName('firstDelimiter'); var secondDelimiters = document.getElementsByClassName('secondDelimiter'); if (country === 'US') { for (let i = 0; i < 2; i++) { (monthSections[i]).style['order'] = '-1'; (firstDelimiters[i]).style['order'] = '0'; (daySections[i]).style['order'] = '1'; (secondDelimiters[i]).style['order'] = '2'; (yearSections[i]).style['order'] = '3'; } } else if (country === 'JP') { for (let i = 0; i < 2; i++) { (yearSections[i]).style['order'] = '-1'; (secondDelimiters[i]).style['order'] = '0'; (monthSections[i]).style['order'] = '1'; (firstDelimiters[i]).style['order'] = '2'; (daySections[i]).style['order'] = '3'; } } else { for (let i = 0; i < 2; i++) { (daySections[i]).style['order'] = '-1'; (firstDelimiters[i]).style['order'] = '0'; (monthSections[i]).style['order'] = '1'; (secondDelimiters[i]).style['order'] = '2'; (yearSections[i]).style['order'] = '3'; } } } function createPermalinkContainer(asin, hostname) { var permalinkHref = getPermalink(hostname, asin); var permalinkContainer = document.querySelector('#permalink'); var permalink = document.createElement('a'); permalink.setAttribute('href', permalinkHref); permalink.innerText = permalinkHref; permalinkContainer.append(permalink); } function getPermalink(server, asin) { return server + '/dp/' + asin; } function triggerPricingFeedback( customerId, marketplaceId, asin, price, retailerType, retailerUrl, retailerName, retailerCity, retailerState, retailerPrice, retailerShipping, sampleDate ) { var dataCart = { ourPrice: parseInt(price), retailer: { type: retailerType, name: retailerName, city: retailerCity, state: retailerState, price: parseInt(retailerPrice), shippingCost: parseInt(retailerShipping), url: retailerUrl }, date: sampleDate + "T00:00:00.102Z" }; return new Promise((resolve, reject) => { A.$.ajax($("#aapiEndpoint").val() + "/api/marketplaces/" + marketplaceId + "/products/" + asin + "/feedback/pricing", { type: 'POST', headers: { 'Accept-Language': 'en-US', 'Accept': 'application/vnd.com.amazon.api+json; type="product.feedback.pricing/v1"', 'Content-Type': 'application/vnd.com.amazon.api+json; type="product.feedback.pricing.request/v1"', 'x-api-csrf-token': csrf }, data: JSON.stringify(dataCart), xhrFields: { withCredentials: true }, success: function (responseContent) { $("#pricingFeedback_thankcontent").innerText = "Success! " + responseContent.toString(); resolve(); }, error: function (err) { $("#pricingFeedback_thankcontent").innerText = "Error! " + err.toString(); reject(); } }) }) } function getAuthenticationPageURL(asin, hostname) { return hostname + '/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&openid.identity=http://specs.openid.net/auth/2.0/identifier_select&openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.ns.pape=http://specs.openid.net/extensions/pape/1.0&openid.pape.max_auth_age=0&openid.return_to=https://www.amazon.com/dp//'; } function getCurrentDay() { var date = new Date(); return date.getDate().toString(); } function getCurrentMonth() { var date = new Date(); return (date.getMonth() + 1).toString(); } function getCurrentYear() { var date = new Date(); return date.getFullYear().toString(); } function setInitialStates(onlineMonth, currentMonth, offlineMonth, onlineDay, currentDate, offlineDay, onlineYear, currentYear, offlineYear, onlineStoreInputForm, offlineStoreInputForm, enableOfflineStoreRadio, enableOnlineStoreRadio, onlineCalendar, offlineCalendar) { onlineMonth.defaultValue = currentMonth; offlineMonth.defaultValue = currentMonth; onlineDay.defaultValue = currentDate; offlineDay.defaultValue = currentDate; onlineYear.defaultValue = currentYear; offlineYear.defaultValue = currentYear; var onlineMonthOption = document.querySelector('#onlineMonthOptionDefault'); onlineMonthOption.innerText = currentMonth; var onlineMonthPrompt = document.querySelector('#onlineMonthPrompt'); onlineMonthPrompt.innerText = currentMonth; var offlineMonthOption = document.querySelector('#offlineMonthOptionDefault'); offlineMonthOption.innerText = currentMonth; var offlineMonthPrompt = document.querySelector('#offlineMonthPrompt'); offlineMonthPrompt.innerText = currentMonth; var onlineDateOption = document.querySelector('#onlineDateOptionDefault'); onlineDateOption.innerText = currentDate; var onlineDayPrompt = document.querySelector('#onlineDatePrompt'); onlineDayPrompt.innerText = currentDate; var offlineDateOption = document.querySelector('#offlineDateOptionDefault'); offlineDateOption.innerText = currentDate; var offlineDayPrompt = document.querySelector('#offlineDatePrompt'); offlineDayPrompt.innerText = currentDate; var onlineYearOption = document.querySelector('#onlineYearOptionDefault'); onlineYearOption.setAttribute('href', currentYear); onlineYearOption.innerText = currentYear; var onlineYearPrompt = document.querySelector('#onlineYearPrompt'); onlineYearPrompt.innerText = currentYear; var offlineYearOption = document.querySelector('#offlineYearOptionDefault'); offlineYearOption.setAttribute('href', currentYear); offlineYearOption.innerText = currentYear; var offlineYearPrompt = document.querySelector('#offlineYearPrompt'); offlineYearPrompt.innerText = currentYear; if (onlineMonth.children && offlineMonth.children && onlineDay.children && offlineDay.children) { onlineMonth.children[currentMonth].setAttribute('selected', currentMonth); offlineMonth.children[currentMonth].setAttribute('selected', currentMonth); onlineDay.children[currentDate].setAttribute('selected', currentDate); offlineDay.children[currentDate].setAttribute('selected', currentDate); } onlineStoreInputForm.style['display'] = 'none'; offlineStoreInputForm.style['display'] = 'none'; enableOfflineStoreRadio.checked = false; enableOnlineStoreRadio.checked = false; if (onlineCalendar.style && offlineCalendar.style) { onlineCalendar.style['display'] = 'flex'; offlineCalendar.style['display'] = 'flex'; } } function submitFeedback( customerId, marketplaceId, asin, price, onlineStoreInputForm, offlineStoreInputForm, onlineUrl, onlinePriceRaw, onlineShippingRaw, onlineDay, onlineMonth, offlineStoreName, offlineCity, offlineState, offlinePriceRaw, offlineDay, offlineMonth, thankYouDiv, errorDiv, submitButton, loadingGifDiv, errorMessages ) { errorDiv.innerHTML = ''; let cleanRetailerType, cleanRetailerUrl, cleanRetailerName, cleanRetailerCity, cleanRetailerState, cleanRetailerPrice, cleanRetailerShipping, cleanSampleDate; var currentYear = getCurrentYear(); if (onlineStoreInputForm.style['display'] === 'table') { var onlineValidity = validateOnlineInputs(onlineUrl, onlinePriceRaw, onlineShippingRaw, errorMessages); if (onlineValidity.valid) { cleanRetailerType = 'ONLINE'; cleanRetailerUrl = truncate(trim(onlineUrl), 300); cleanRetailerPrice = trim(onlinePriceRaw); cleanRetailerShipping = trim(onlineShippingRaw); if (!cleanRetailerShipping) { cleanRetailerShipping = '0'; } cleanSampleDate = formatDate( currentYear, onlineDay ? onlineDay : getCurrentDay(), onlineMonth ? onlineMonth : getCurrentMonth() ); } else { if (onlineValidity.error) { errorDiv.innerHTML = getErrorDiv(onlineValidity.error); } return null; } } else if (offlineStoreInputForm.style['display'] === 'table') { var offlineValidity = validateOfflineInputs( offlineStoreName, offlineCity, offlineState, offlinePriceRaw, errorMessages ); if (offlineValidity.valid) { cleanRetailerType = 'OFFLINE'; cleanRetailerName = truncate(trim(offlineStoreName), 100); cleanRetailerCity = truncate(trim(offlineCity), 100); cleanRetailerState = truncate(trim(offlineState), 100); cleanRetailerPrice = trim(offlinePriceRaw); cleanRetailerShipping = '0'; cleanSampleDate = formatDate( currentYear, offlineDay ? offlineDay : getCurrentDay(), offlineMonth ? offlineMonth : getCurrentMonth() ); } else { if (offlineValidity.error) { errorDiv.innerHTML = getErrorDiv(offlineValidity.error); } return null; } } else { errorDiv.innerHTML = getErrorDiv(errorMessages.errorNoRetailerType); return null; } loadingGifDiv.innerHTML = getLoadingGifDiv(); if (price) price = parseFloat(price); return triggerPricingFeedback( customerId, marketplaceId, asin, price, cleanRetailerType, cleanRetailerUrl, cleanRetailerName, cleanRetailerCity, cleanRetailerState, parseFloat(cleanRetailerPrice), parseFloat(cleanRetailerShipping), cleanSampleDate ) .then(response => { errorDiv.innerHTML = ''; thankYouDiv.innerHTML = getThankYouDiv(errorMessages.thankFeedback); submitButton.style.display = 'none'; return response; }) .catch(err => { errorDiv.innerHTML = getErrorDiv(errorMessages.errorSubmission); return null; }); } function validateOnlineInputs(url, onlinePrice, onlineShipping, errorMessages) { if (isEmptyValue(url) || isEmptyValue(onlinePrice)) { return { valid: false, error: errorMessages.errorEmptyFields }; } else if (!isValidUrl(url)) { return { valid: false, error: errorMessages.errorInvalidUrl }; } else if (!isNumericPrice(onlinePrice) || (!isEmptyValue(onlineShipping) && !isNumericPrice(onlineShipping))) { return { valid: false, error: errorMessages.errorBadPriceShipping }; } return { valid: true, error: null }; } function validateOfflineInputs(offlineStoreName, offlineCity, offlineState, offlinePrice, errorMessages) { if ( isEmptyValue(offlineStoreName) || isEmptyValue(offlineCity) || isEmptyValue(offlineState) || isEmptyValue(offlinePrice) ) { return { valid: false, error: errorMessages.errorEmptyFields }; } else if (!isNumericPrice(offlinePrice)) { return { valid: false, error: errorMessages.errorBadPrice }; } return { valid: true, error: null }; } function getErrorDiv(errorMsg) { return ( '\n' + ' ' + errorMsg + '\n' + ' ' ); } function getThankYouDiv(thankMsg) { return ( '' + '' + thankMsg + '\n' + '' ); } function getLoadingGifDiv() { return ''; } function isValidUrl(url) { if (!url) { return false; } var encodedUrl = encodeURI(url); return encodedUrl.match( /^(https?:\/\/)?(([a-z0-9-]|%[A-F0-9]{2})+\.)+(([a-z]|%[A-F0-9]{2})([a-z0-9]|%[A-F0-9]{2})*)(:[0-9]+)?(\/[a-z0-9;:,~!+#@&=%\/$\.?_-]+)?$/ ); } function isNumericPrice(price) { if (!price) { return false; } return price.match(/^([0-9]+\.?[0-9]*)$|^([0-9]*\.[0-9]+)$/); } function isEmptyValue(input) { return !input || input.length === 0 || input.match(/^\s*$/); } function truncate(input, length) { if (!input) { return ''; } else { return input.substr(0, length); } } function formatDate(year, date, month) { return year + '-' + month + '-' + date; } function trim(input) { if (!input) { return ''; } else { return input.trim(); } } function resetModalToInitialState(currentMonth, currentDate, currentYear) { var enableOnlineStoreRadio = document.querySelector('#pricingFeedback_onlineRadio'); var enableOfflineStoreRadio = document.querySelector('#pricingFeedback_offlineRadio'); var onlineStoreInputForm = document.querySelector('#pricingFeedback_onlineInput'); var offlineStoreInputForm = document.querySelector('#pricingFeedback_offlineInput'); var onlineUrl = document.querySelector('#onlineUrl'); var onlinePriceRaw = document.querySelector('#onlinePriceRaw'); var onlineShippingRaw = document.querySelector('#onlineShippingRaw'); var onlineDay = document.querySelector('#onlineDay'); var onlineMonth = document.querySelector('#onlineMonth'); var onlineYear = document.querySelector('#onlineYear'); var onlineCalendar = document.querySelector('#onlineCalendar'); var offlineStoreName = document.querySelector('#offlineStoreName'); var offlineCity = document.querySelector('#offlineCity'); var offlineState = document.querySelector('#offlineState'); var offlinePriceRaw = document.querySelector('#offlinePriceRaw'); var offlineDay = document.querySelector('#offlineDay'); var offlineMonth = document.querySelector('#offlineMonth'); var offlineYear = document.querySelector('#offlineYear'); var offlineCalendar = document.querySelector('#offlineCalendar'); var thankYouDiv = document.querySelector('#pricingFeedback_thank'); var errorDiv = document.querySelector('#pricingFeedback_error'); var submitButton = document.querySelector('#pricingFeedback_submit'); var loadingGifDiv = document.querySelector('#loading'); var stateDefaultOption = document.querySelector('#stateDefaultOption'); var stateDefaultPrompt = document.querySelector('#stateDefaultPrompt'); if (thankYouDiv) { thankYouDiv.innerHTML = ''; } if (errorDiv) { errorDiv.innerHTML = ''; } if (loadingGifDiv) { loadingGifDiv.innerHTML = ''; } if (submitButton) { submitButton.style.display = 'block'; } onlineUrl.value = ''; onlinePriceRaw.value = ''; onlineShippingRaw.value = ''; offlineStoreName.value = ''; offlineCity.value = ''; offlineState.value = ''; offlinePriceRaw.value = ''; stateDefaultOption.innerHTML = $("#selectProvince").val(); stateDefaultPrompt.innerHTML = $("#selectProvince").val(); setInitialStates( onlineMonth, currentMonth, offlineMonth, onlineDay, currentDate, offlineDay, onlineYear, currentYear, offlineYear, onlineStoreInputForm, offlineStoreInputForm, enableOfflineStoreRadio, enableOnlineStoreRadio, onlineCalendar, offlineCalendar ); } }); Product Description The SINGER Drawstring Threader and Loop Turner Tool Set provides sewists and non-sewists with everything they need for a variety of threading and loop turning tasks. If you’re creating a garment or bag with a drawstring closure, these are the ideal threading tools to use. Suitable for ribbon, Velcro, elastic, cord, or string. This clothing replacement tool known as SINGER’s Threader N’ Turner is suitable for even the non-sewist who need a quick fix to their favorite hoodie or pair of swim trunks. If it loses its drawstring in the washing machine, these tools can help you repair within 5-10 minutes. No sewing experience needed! Simply use one of the threaders to pull the end of the drawstring back through the garment. If you’re sewing a pillowcase or other project that requires sharp corners, use a threader’s point to push out corners cleanly without damaging the fabric. Turn it around and you can use the wide end to press the fabric and create sharp creases. Each bodkin threader is made from flexible plastic for easy maneuvering and includes markings for measuring fabrics. Threaders come in five sizes to accommodate different projects: 6 mm (1/4 inch), 9 mm (5/16 inch), 12 mm (1/2 inch), 15 mm (9/16 inch), and 18 mm (11/16 inch). Use the comfort-grip loop turner tool with its latch-hook end to easily invert bias tubing when sewing thin straps, button loops, and garment closures. Ribbed on the inside for a pain-free pull, the SINGER loop turner is much more comfortable than most competitive loop turners. Add a bonus ring for easy bundling of tools and you’ve got the perfect tool set for any threading project To calculate the overall star rating and percentage breakdown by star, we don’t use a simple average. Instead, our system considers things like how recent a review is and if the reviewer bought the item on Amazon. It also analyzed reviews to verify trustworthiness.







