1// Common javascript functions and variables to be reused across the site. 2var dateFormat = 'YYYY-MM-DD'; 3var timeFormat = 'HH:mm:ss'; 4var timedateFormat = 'YYYY-MM-DD HH:mm:ss'; 5var zeroTime = '0000-00-00 00:00:00'; 6 7async function selectBoxFill(URL, selector, key_name, value_name, first_option) { 8 let obj = await $.post(URL, {}, null, "json"); 9 // we need to always return a promise or the chain run out of order, giving undefined results. 10 let sel = $(selector); 11 //console.log(obj); 12 if (obj.error_msg == "Success") { 13 let rows = obj.rows; 14 if (typeof first_option != 'undefined') { 15 sel.append( 16 $('<option>', { 17 value: 0, 18 text: first_option 19 }) 20 ); 21 } 22 rows.forEach(r => { 23 let key = r[key_name]; // can't use compound elements in a json object. 24 let Name = r[value_name]; 25 sel.append($('<option>', { 26 value: key, 27 text: Name 28 })); 29 }); 30 return rows; // useful for debugging! 31 } 32} 33 34async function selectPairFill(URL, selector) { 35 let obj = await $.getJSON(URL); 36 //console.log(obj); 37 let sel = $(selector); 38 for (let key in obj) { 39 let value = obj[key]; 40 sel.append( 41 $('<option>', { 42 value: key, 43 text: value 44 }) 45 ); 46 } 47 return obj; 48} 49 50function toLocalTimeArray(data, format) { 51 data.forEach(d => { 52 if (d.t != zeroTime) { // ignore zero date 53 let utc = moment.utc(d.t).toDate(); 54 d.t = moment(utc).local().format(format); 55 } 56 }); 57} 58 59function toLocalTime(dt, format) { 60 if (dt == zeroTime) return dt; 61 let utc = moment.utc(dt).toDate(); 62 return moment(utc).local().format(format); 63} 64 65function trackingUrl(carrier, tracking) { 66 switch (carrier) { 67 case "USPS": return `http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=${tracking}`; 68 case "UPS": 69 case "UPSDAP": return `http://wwwapps.ups.com/WebTracking/track?track=yes&trackNums=${tracking}`; 70 case "DHL": return `http://www.dhl.com/en/express/tracking.html?brand=DHL&AWB=${tracking}`; 71 case "FEDEX": return `https://www.fedex.com/fedextrack/?trknbr=${tracking}`; 72 default: return "#"; 73 } 74} 75 76function randomAlphaNumericString (length) { 77 let chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 78 let result = ''; 79 for (let i = 0; i < length; i++) result += chars[Math.floor(Math.random() * chars.length)]; 80 return result; 81} 82 83function catchMsg(er, selector) { 84 let msg; 85 if (typeof er == 'undefined') { 86 msg = 'Error: Undefined Error.'; 87 } else if (typeof er == "string") { 88 msg = er; 89 } else { 90 switch (er.status) { 91 case 400: msg = `Error: Malformed request`; break; 92 case 401: msg = `Error: Unauthorized Access`; break; 93 case 404: msg = `Error: Page not Found`; break; 94 case 429: msg = `Error: Rate Limit Exceeded`; break; 95 case 500: msg = `Error: Internal Server Error`; break; 96 default: msg = `Error: Unknown Error - ${er.status}`; 97 } 98 } 99 $(selector).html(msg); 100} 101 102async function cartCount() { 103 let obj = await $.post('/cart/count', {}, null, "json"); 104 if (obj.error_msg == "Success") { 105 let count = Number(obj.count); 106 $('#cart-count').text(count ? count : ""); 107 } 108} 109 110async function pricesGet() { 111 let ProductIDs = $('.product-price').map((_, pp) => { 112 return $(pp).attr('ProductID'); 113 }).get(); 114 let obj = await $.post('/product/prices', { ProductIDs }, null, "json"); 115 if (obj.error_msg == "Success") { 116 let rows = obj.rows; 117 //console.log(rows); 118 rows.forEach(p => { 119 $(`#price-${p.ProductID}`).html(`$${p.Price}`); 120 }); 121 } 122} 123 124async function whoAmI() { 125 let user = await $.post('/whoami', {}, null, "json"); 126 //console.log(user); 127 if (user) { 128 $('#logout-a').removeClass("d-none"); 129 $('.whoami-name').html(`${user.first_name} ${user.last_name}`); 130 $('.whoami-id').html(`${user.id}`); 131 $('#nav-brand-link').attr('href', '/user/dash'); 132 return user; 133 } else { 134 $('#login-a').removeClass("d-none"); 135 $('#register-a').removeClass("d-none"); 136 } 137 return null; 138} 139 140async function cartAdd(ProductID, Quantity) { 141 let obj = await $.post("/cart/add", { ProductID, Quantity }, null, "json"); 142 if (obj.error_msg == "Success") { 143 location.assign("/cart"); 144 } 145} 146 147$(() => { 148 $('.buy-now').click(async ev => { 149 ev.preventDefault(); 150 let id = ev.currentTarget.id; 151 let Quantity = 1; // fixed for now. 152 let ProductID = $(`#${id}`).attr('ProductID'); 153 await cartAdd(ProductID, Quantity); 154 return false;
155 }); 156 157 158 $('.carousel').carousel({ interval: 1500 }); // Globally changes the feature carousel speed. 159 pricesGet(); 160 cartCount(); 161 whoAmI(); 162}); 163 164 165
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.