`; } } else { console.log("failed to remove"); } } else { let isAdded = addToList(myIcon.dataset.handle); if (isAdded) { savedList = readWishList(); [itemCount, itemCountFloating].forEach(item=>item.innerHTML = savedList.length); myIcon.dataset.status = "true"; myIcon.classList.add("added"); } else { console.log("failed to add") } } updateAllIcon(); }) return myIcon; } function updateAllIcon() { document.querySelectorAll(".wishlist_btn").forEach(button=>{ if (button.hasAttribute("data-handle")) { let isPresent = findItem(button.dataset.handle); if (isPresent) { button.classList.add("added"); button.dataset.status = "true"; } else { button.classList.remove("added"); button.dataset.status = "false"; } } }) } // ========================================================================================= Objective utility functions // =============================================== On-page organizing wishlist item list wishlistControls.forEach(control=>{ control.addEventListener("click", ()=>{ ["col3", "col4", "col5"].forEach(thisClass=>wishlistContainer.classList.remove(thisClass)); wishlistControls.forEach(btn=>btn.classList.remove("active")); control.classList.add("active"); wishlistContainer.classList.add(control.dataset.row); }) }) // =========================================================================== Generating products on the wishlist page function printProduct(thisProduct) { let variant_id = thisProduct.variants[0].id; let cardImageContainer = null; cardImageContainer = createElement("div"); let cardImage = createElement("img", ["product_card_img"]); if (thisProduct.image && thisProduct.image.src) { cardImage.src = thisProduct.image.src; } else { cardImage.src = "https://cdn.shopify.com/s/files/1/0533/2089/files/placeholder-images-image_large.png?format=webp&v=1530129081"; } cardImageContainer.appendChild(cardImage); let cardTitle = null; cardTitle = createElement("p", ["product_card_title"], [], thisProduct.title); let cardPrice = createElement("p", ["product_card_price"], [], `${"${{amount}}".trim().split("{")[0] + thisProduct.variants[0].price}`); let cardComparePrice = createElement("p", ["product_card_compare_price"], [], `${thisProduct.variants[0].compare_at_price.length > 0 ? "${{amount}}".trim().split("{")[0] + thisProduct.variants[0].compare_at_price : ""}`); let priceContainer = createElement("div", ["product_card_price_container"], [cardComparePrice, cardPrice]) let variantContainer = createElement("div", ["product_card_variant_container"]); let cardDetailButton = null; cardDetailButton = createElement("a", ["product_card_button", "inline"], [], "Details"); cardDetailButton.href = `${window.Shopify.routes.root + 'products/' + thisProduct.handle}`; let cardForm = createElement("form", ["product_form_custom_wishlist"]); cardForm.method = "post"; cardForm.action = `/cart/add/${variant_id}`; cardForm.acceptCharset = "UTF-8"; cardForm.enctype = "multipart/form-data"; cardForm.novalidate = "novalidate"; let cardInputProduct = createElement("input"); cardInputProduct.type = "hidden"; cardInputProduct.name = "form_type"; cardInputProduct.value = "product"; let cardInputChar = createElement("input"); cardInputChar.type = "hidden"; cardInputChar.name = "utf8"; cardInputChar.value = "✓"; let cardInputVariant = createElement("input"); cardInputVariant.type = "hidden"; cardInputVariant.name = "id"; cardInputVariant.value = variant_id; cardInputVariant.disabled = "disabled"; let cardSubmit = createElement("button", ["product_card_button"], [], "Add to cart"); cardSubmit.type = "submit"; cardSubmit.name = "add"; cardSubmit.value = variant_id; let cardInputProductId = createElement("input"); cardInputProductId.type = "hidden"; cardInputProductId.name = "product-id"; cardInputProductId.value = variant_id; [cardInputProduct, cardInputChar, cardInputVariant, cardSubmit, cardInputProductId].forEach(item=>cardForm.appendChild(item)); let cardButtonContainer = createElement("div", ["product_card_button_list"], [cardDetailButton, cardForm]); if (thisProduct.options[0].values[0] != "Default Title") { for (option in thisProduct.options) { let cardOptionName = createElement("p", ["product_card_option_name"], [], thisProduct.options[option].name); let cardVariantSelect = createElement("select", ["product_card_option_set"]); for (value in thisProduct.options[option].values) { let cardVariantOption = createElement("option", [], [], thisProduct.options[option].values[value]); cardVariantOption.value = thisProduct.options[option].values[value]; cardVariantSelect.appendChild(cardVariantOption); } let optionData = []; for (variant in thisProduct.variants) { let variantData = [ thisProduct.variants[variant].title, thisProduct.variants[variant].id, thisProduct.variants[variant].image_id != null ? thisProduct.images.find(img=>img.id == thisProduct.variants[variant].image_id).src : null, [ "${{amount}}".trim().split("{")[0] + thisProduct.variants[variant].price, thisProduct.variants[variant].compare_at_price.length > 0 ? "${{amount}}".trim().split("{")[0] + thisProduct.variants[variant].compare_at_price : "" ] ]; optionData.push(variantData); } cardVariantSelect.addEventListener("change", ()=>{ variantUpdate(optionData); }) let cardOption = createElement("div", ["product_card_option"], [cardOptionName, cardVariantSelect]); variantContainer.appendChild(cardOption) } } let cardContainer = createElement("div", ["product_card", "product"], [cardImageContainer, cardTitle, priceContainer, variantContainer, cardButtonContainer]); function variantUpdate(optionData) { let selectedDataSet = Array.from(cardContainer.querySelectorAll(".product_card_option_set"), item => item.value); let selectedVariant = null; optionData.forEach(option=>{ if (selectedVariant == null) { selectedVariant = option; selectedDataSet.forEach(item=>{ if (!option[0].includes(item)) { selectedVariant = null; } }) } }) cardPrice.innerHTML = selectedVariant[3][0]; cardComparePrice.innerHTML = selectedVariant[3][1]; selectedVariant[2] != "null" ? cardImage.src = selectedVariant[2] : null; if (cardForm.tagName == "FORM") { cardForm.action = `/cart/add/${selectedVariant[1]}`; cardInputVariant.value = selectedVariant[1]; cardSubmit.value = selectedVariant[1]; cardInputProductId.value = selectedVariant[1]; } else if (cardForm.tagName == "BUTTON") { cardForm.dataset.variant = selectedVariant[1]; } } if (!cardContainer.classList.contains("icon_holder")) { let icon = generateIcon(thisProduct.handle); icon.addEventListener("click", ()=>{ cardContainer.classList.add("hiding"); setTimeout(()=>{ cardContainer.style.display = "none"; }, 300) }) appendIcon(cardContainer, icon); } wishlistContainer.appendChild(cardContainer); } // =============================================== Fetching product data from Shopify function fetchProduct(item) { jQuery.getJSON(window.Shopify.routes.root + 'products/' + item, function(thisProduct) { printProduct(thisProduct.product); responseCount += 1; }).fail(function(response) { if (response.status == 404) { responseCount += 1; failedProducts.push(item); } }); } function updateList () { setTimeout(()=>{ if (responseCount == savedList.length) { let newList = []; savedList.forEach(save=>{ if (!failedProducts.includes(save.toLowerCase())) { newList.push(save); } }) saveWishList(newList); let updatedList = readWishList(); itemCount.innerHTML = updatedList.length; itemCountFloating.innerHTML = updatedList.length; responseCount = 0; failedProducts = []; loadingSpinner.classList.remove("active"); wishlistContainer.classList.add("active"); } else { updateList() } }, 100) } // =============================================== Manipulating wishlist window wishlistClose.addEventListener("click", ()=>{ isWishlistOpen = false; pageBody.classList.remove("no_scroll"); Array.from(wishlistSection.parentElement.children).forEach(sibling=>sibling.classList.remove("functionally_hidden")); // wishlistSection.classList.add("functionally_hidden"); wishlistContainer.classList.remove("active"); wishlistUtility.classList.remove("active"); wishlistTrigger.classList.add("active"); loadingSpinner.classList.add("active"); updateAllIcon(); }) wishlistTrigger.addEventListener("click", ()=>{ isWishlistOpen = open; pageBody.classList.add("no_scroll"); Array.from(wishlistSection.parentElement.children).forEach(sibling=>sibling.classList.add("functionally_hidden")); wishlistSection.classList.remove("functionally_hidden"); wishlistContainer.classList.add("active"); wishlistUtility.classList.add("active"); wishlistTrigger.classList.remove("active"); savedList = readWishList(); itemCount.innerHTML = savedList.length; wishlistContainer.innerHTML = ""; if (savedList.length > 0) { savedList.forEach(item=>{ let thisProduct = fetchProduct(item); }) } else { wishlistContainer.innerHTML = `
`; } updateList() }) // =============================================== Manipulating Savelist function removeFromList(value) { let newList = []; savedList.forEach(item=>{ if (value.toLowerCase() != item.toLowerCase()) { newList.push(item); } }) return saveWishList(newList); } function addToList(value) { let newList = []; if (!savedList.includes(value)) { newList = [...savedList, value]; } else { newList = savedList; } return saveWishList(newList); } function saveWishList(value) { let isSaveLocal = saveLocal(value); let isSaveCloud = true; if (isSaveLocal && isSaveCloud) { return true; } } function readWishList() { let myLocal = readLocal(); // let myCloud = readCloud(); return myLocal; } // =============================================== Manipulating local storage function saveLocal(value) { try { const jsonString = JSON.stringify(value); localStorage.setItem("wishlist", jsonString); return true; } catch (error) { return false; } } function readLocal() { try { const storedValue = localStorage.getItem("wishlist"); if (storedValue !== null) { return JSON.parse(storedValue); } else { return []; } } catch (error) { return []; } } // =============================================== Manipulating Customer Metafield function readCloud() { } async function saveCloud(value) { } }) })()
PAPER WEIGHT BASICS
Are you finding paper weights to be confusing? Whyis 80 lb. "text" paperlighter and thinner than 65 lb. "cover"? Follow along as we explain how paper weight is calculated and what it means.
- Paper weight, also known as BASIS WEIGHT, is measured in LBS (pounds) and GSM (grams per square meter)
- GSM is a universalmeasurement and applies to all paper types, making it a better measurement of a paper's weight
- LBS alone doesnotadequately convey the weight of paper
- The TYPE of paper is a key element when using LBSbecause . . .
- Paper comes in many types or categories, each with a unique weight in LBS because of the way it is calculated. Let's explain further!
COMMON TYPES OF PAPER
Here are a few common paper types:
Bond, Book, Text, Index, Bristol, Laid, Wove, and Cover
- Each type of paper has a different "standard sheet" size. Here are a few examples of paper typestandard sheet sizes:
Book or Text | 25 x 38 inches |
Index | 25.5 x 30.5 inches |
Bristol | 22.5 x 28.5 inches |
Cover | 20 x 26 inches |
- Paper weightis measured in pounds per 500 standard sheetswithin its type
- Each type of paper has it's own range of basis weights becausetheir standard sizes are different
- If 500 sheets of a paper's standard sheet size weighs 100 lbs., then the paper weight or basis weight of that type of paper will be 100 lb.
- So a larger standard size sheet of a lighter thinner text-weight paper can weigh more than a smaller standard size sheet of a thicker heavier cover-weight paper
- When standard size sheets are cut down to commonly used sizes, they are still referred to by their original basis weight calculation
- The heavier paper grade commonly referred to as "cardstock" is technically known as "cover"
PAPER THICKNESS or CALIPER
- The measurement of a paper's thickness is also known as it's "caliper" and is measured using a tool called a micrometer
- Caliper is expressed as a point size in thousandths of an inch
- One point equals 1/1000 of an inch and can be expressed as 1 pt. or .001
- Paper weight gives a good indication of the range of thickness of a paper type, however, thickness can vary due to the materials used in making the paper, and how much it is compressed or compacted together during the paper making process called "calendering"
- Calendering is the smoothing and compressing of paper which will determine how rough or smooth the paper will become
- Two papers of the same weight can have different caliper measurements
PAPER WEIGHT CHART
Here is a chart to further illustrate:
PAPER WEIGHT EXAMPLES
(refer to chart above)
Light Weight Paper
- Like pages of a book or regular copy paper
- Can be folded without scoring
- Very flexible and easy to manipulate
- Prints in most home printers
see additional note about printing below
Medium Weight Paper
- Like a standard greeting card
- Should be scored before folding
- Noticeably thicker than a light-weight paper
- Prints in most home printers
see additional note about printing below
Heavy weight paper
- Like a heavy greeting card
- Often used for single panel cards and business cards
- Must be scored before folding
- May not print in some home printers
see additional note about printing below
Extra-Heavy Weight Paper
- Extra heavy weights are similar to gift box weight or chipboard
- Can beDT (double-thick) meaning two sheets are pasted together
- Often used forpackaging and letterpress
- Can only be printed by professional printers
Note: Printing is dependant on the printer meeting a paper's specific printing requirements. Not all paper can be printed on any printer. Visit our Printing 101 Page for information on printing.
We're Here to Help . . .
We hope this information helps to demystify paper weights.
Looking for the perfect paper? Click on the Shop All link below.
Use the Paper Finder filter to search our large selection of papers to find the right paper for you.
Still have questions?Contact us using the form below and we'll be glad to answer any additional questions youmay have.