1 2// Ajax auth setup. 3 4$.fn.loadProductSetOnDemand = function(options){ 5 var element = this, 6 settings = { 7 setId: 0, 8 startPage: 1, 9 rpp: 0, 10 vsQuery: '', 11 element: '' 12 }; 13 14 if (!element.length) { 15 return false; 16 } 17 18 if (options) { 19 $.extend(settings, options); 20 } 21 22 var model = { 23 retData: ko.observableArray(), 24 products: ko.observable(0), 25 compeleteProducts:ko.observable(0), 26 total: ko.observable(), 27 setId: settings.setId, 28 pageIndex: ko.observable(1), 29 pageSize: ko.observable(1), 30 pageCount: ko.observable(1), 31 pages: ko.observableArray([]), 32 productFrom: ko.observable(), 33 productTo: ko.observable(), 34 nextPage: function () { 35 if (this.pageIndex() >= this.pageCount()) { 36 return false; 37 } 38 this.pageIndex(this.pageIndex() + 1); 39 loadCurrentPage('NXTPSL'); 40 return false; 41 }, 42 previousPage: function () { 43 if (this.pageIndex() <= 1) { 44 return false; 45 } 46 this.pageIndex(this.pageIndex() - 1); 47 loadCurrentPage('PRVPSL'); 48 49 return false; 50 }, 51 gotoPage: function (page) { 52 this.pageIndex(page.pageNumber()); 53 }, 54 ImageSource: function (mdl) { 55 var ret = '/images/toolbar_icon.png', 56 vsUrl = Module.ProductSetAutoUpdate.Scene7BaseAndRender; 57 imgUrl = mdl.ImageUrl; 58 if (imgUrl) { 59 if (mdl.HasVirtualSample && settings.vsQuery != 'stock') { 60 var src = vsUrl + imgUrl.replace(/\media\//g, '') + settings.vsQuery; 61 recordVSImpressionStats(src, mdl.Id); 62 } else { 63 var src = Module.ProductSetAutoUpdate.URL.api + '/v1/' + imgUrl;// + (settings.vsQuery !== null ? '&' : '?') + 'size=small'; 64 } 65 ret = src; 66 } 67 return ret; 68 } 69 } 70 71 var vsSetup = function () { 72 var vsCookie = getCookie('VSCookie'), 73 vsText = getCookie('VSTxt'), 74 vsBlankProd = getCookie('VS_Blank_Product'), 75 useTextPref = Module.ProductSetAutoUpdate.UseText, 76 useStockImage = Module.ProductSetAutoUpdate.UseStockImage; 77 78 /* text */ 79 var vsTextObj = vsText.replace('TextURL=?', '').replace(/\?/g, '&').replace(/\$/g, '').replace(/is{/g, '').replace(/ugc{/g, '').replace(/}/g, '').replace(/ASI\//g, ''); 80 vsTextObj = queryStringToJSON('?' + vsTextObj); 81 /* logo */ 82 var vsCookieObj = vsCookie.replace('LogoURL=?', '').replace(/\?/g, '&').replace(/\$/g, '').replace(/is{/g, '').replace(/ugc{/g, '').replace(/}/g, '').replace(/ASI\//g, ''); 83 vsCookieObj = queryStringToJSON('?' + vsCookieObj); 84 /* blank */ 85 vsBlankProdObj = queryStringToJSON('?' + vsBlankProd); 86 87 vsCookie = vsCookie.replace('LogoURL=', ''); 88 vsText = vsText.replace('TextURL=', ''); 89 90 if (typeof vsCookieObj.logoid === 'undefined' && typeof vsTextObj.text === 'undefined' && typeof vsBlankProdObj.useblankprod === 'undefined') { 91 /* use preference settings set up by distributor */ 92 if (useStockImage === 'False') { 93 if (useTextPref === 'True') { 94 var textSeg = Module.ProductSetAutoUpdate.TextSegmentFromPref; 95 var newTextUrl = textSeg.replace('&', '&'); 96 settings.vsQuery = Module.ProductSetAutoUpdate.BaseTextSeg + newTextUrl + Module.ProductSetAutoUpdate.EndTextSeg; 97 } 98 else { 99 var logo = Module.ProductSetAutoUpdate.DefaultLogoFromPref; 100 var logoUrl = Module.ProductSetAutoUpdate.DefaultLogoUrl; 101 settings.vsQuery = logoUrl.replace('logo', logo); 102 } 103 } 104 else { 105 settings.vsQuery = 'stock'; 106 } 107 } 108 else { 109 /* user has made a change - these changes override distributor settings in pref */ 110 if (vsBlankProdObj.useblankprod !== '0') { 111 settings.vsQuery = ''; 112 } else if (vsCookieObj.logoid !== '0') { 113 settings.vsQuery = vsCookie; 114 } else if (vsTextObj.text) { 115 settings.vsQuery = vsText; 116 } else { 117 settings.vsQuery = 'stock'; 118 } 119 } 120 } 121 122 var queryStringToJSON = function (url) { 123 if (url === '') 124 return ''; 125 var pairs = (url || location.search).slice(1).split('&'); 126 var result = {}; 127 for (var idx = 0; idx < pairs.length; idx++) { 128 var pair = pairs[idx].split('='); 129 if (!!pair[0]) 130 result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || ''); 131 } 132 return result; 133 } 134 var shuffle = function (array) { 135 var currentIndex = array.length, temp, randomIndex; 136 while (0 !== currentIndex) { 137 randomIndex = Math.floor(Math.random() * currentIndex); 138 currentIndex -= 1; 139 temp = array[currentIndex]; 140 array[currentIndex] = array[randomIndex]; 141 array[randomIndex] = temp; 142 } 143 return array; 144 } 145 var loadCurrentPage = function (action) 146 { 147 var productFrom = model.pageIndex() * settings.rpp - settings.rpp + 1, 148 productTo = model.pageIndex() * settings.rpp, 149 productIds = []; 150 model.products(model.compeleteProducts().slice(productFrom - 1, productTo)); 151 totalResult = model.compeleteProducts().length; 152 if (totalResult < productTo) { 153 productTo = totalResult; 154 } 155 $.each(model.products(), function (idx, obj) { 156 productIds.push(obj.Id); 157 }); 158 /* STATS CAPTURE */ 159 recordProductSetObjectStats(totalResult, settings.setId); 160 recordProductSetInboundStats(); 161 recordProductsViewedPerPageStats(productIds, settings.setId); 162 if (action) { 163 recordProductSetAutoAction(action); 164 } 165 /* END STATS CAPTURE */ 166 //model.products(data.Results); 167 model.total(totalResult); 168 //model.pageIndex(data.Page); 169 model.pageCount(Math.ceil(totalResult / settings.rpp)); 170 model.productFrom(totalResult ? productFrom : 0); 171 model.productTo(totalResult ? productTo : 0); 172 } 173 var loadService = function (page) { 174 var requestUrl = Module.ProductSetAutoUpdate.URL.api + '/v1/products/{0}/{1}.json?q={2}&rpp={3}&sort={4}&dl={5}&include_detail={6}&callback=?'; //0=type,1=id,2=query,3=page,4=results_per_page,5=sort,6=dl,7=include_detail 175 $.ajax({
176 type: 'GET', 177 dataType: 'json', 178 url: String.format(requestUrl, 'collection', settings.setId, '', 113, 'RNDM', '', false), 179 cache: false, 180 success: function (data) { 181 data = data.d ? data.d : data; 182 if (data && data.Results.length>0) { 183 model.pageIndex(1); 184 model.compeleteProducts(shuffle(data.Results)); 185 loadCurrentPage(); 186 } else { 187 element.parents('.ProductSetAutoUpdate').hide(); 188 } 189 } 190 }); 191 } 192 if (settings.setId && settings.setId != 0 && element) { 193 vsSetup(); 194 ko.applyBindings(model, $(element)[0]); 195 loadService(settings.startPage); 196 element.find('.prodImg img').lazyload({ effect: 'fadeIn', failimage: failImg }).trigger("appear"); 197 } else { 198 element.parents('.ProductSetAutoUpdate').hide(); 199 } 200} 201 202function recordProductSetObjectStats(total, setId) { 203 if (setId && Module.ProductSetAutoUpdate.BusinessLevel_CD) { 204 asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "OPST11", "immediate": false, "productset_id": setId, "businesslevel_cd": Module.ProductSetAutoUpdate.BusinessLevel_CD, "product_cnt": total })); 205 } 206} 207 208function recordProductSetInboundStats () { 209 asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "ICNN11", "immediate": false, "inboundcall_cd": "UNKNOW" })); 210} 211 212function recordProductsViewedPerPageStats(productIds, setId) { 213 if (setId && productIds.length > 0) { 214 asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "OPRD19", "immediate": false, "product_ids": productIds.toString(), "productset_id": setId, "hits_cnt": productIds.length, "adaction_cd": "POTD" })); 215 } 216} 217 218function recordProductSetAutoAction (actionCD) { 219 asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "ACNN11", "immediate": false, "appaction_cd": actionCD })); 220} 221 222function onProductDetail(productId, setId, isVSOpen) { 223 asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "OPRD19", "immediate": false, "product_ids": productId.toString(), "productset_id": setId, "hits_cnt": 1, "adaction_cd": "POCT" })); 224 var url = Module.ProductSetAutoUpdate.URL.ProductDetailsBasic + '&productID=' + productId + '&tab=ProductSet&autoLaunchVS=' + isVSOpen + '&ProdSetIds=' + setId; 225 post_to_url(url, {}, '_self'); 226} 227 228function recordVSImpressionStats (imageUrl, prodId) { 229 var defaultLogoIsSet = Module.ProductSetAutoUpdate.DefaultLogoIsSet == 'True' ? true : false; 230 var textUsed = imageUrl.toUpperCase().indexOf("TEXT500") >= 0 ? true : false; 231 var collectStat = !textUsed && defaultLogoIsSet ? false : true; 232 var useBlank = Module.ProductSetAutoUpdate.UseBlank == 'True' ? true : false; 233 if (collectStat) { 234 if (prodId) { 235 asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "ACVS11", "immediate": false, "product_id": prodId, "isvstextused": (textUsed ? "1" : "0"), "isvsblankused": (useBlank ? "1" : "0"), "appaction_cd": "VSIPST" })); 236 } 237 } 238} 239 240function LoadStockImage(stockImageURL) { 241 $('.prodImg img').attr('src', stockImageURL); 242} 243 244function imgError(img) { 245 img.onerror = ""; 246 var orig = $(img).attr('data-original'); 247 img.src = orig; 248} 249 250// var CC = Module.ProductSetAutoUpdate.WrapperId;
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.