1(function (window, document, $, miniShop2Config) { 2 var miniShop2 = miniShop2 || {}; 3 miniShop2Config.callbacksObjectTemplate = function () { 4 return { 5 // return false to prevent send data 6 before: [], 7 response: { 8 success: [], 9 error: [] 10 }, 11 ajax: { 12 done: [], 13 fail: [], 14 always: [] 15 } 16 } 17 }; 18 miniShop2.Callbacks = miniShop2Config.Callbacks = { 19 Cart: { 20 add: miniShop2Config.callbacksObjectTemplate(), 21 remove: miniShop2Config.callbacksObjectTemplate(), 22 change: miniShop2Config.callbacksObjectTemplate(), 23 clean: miniShop2Config.callbacksObjectTemplate() 24 }, 25 Order: { 26 add: miniShop2Config.callbacksObjectTemplate(), 27 getcost: miniShop2Config.callbacksObjectTemplate(), 28 clean: miniShop2Config.callbacksObjectTemplate(), 29 submit: miniShop2Config.callbacksObjectTemplate(), 30 getrequired: miniShop2Config.callbacksObjectTemplate() 31 }, 32 }; 33 miniShop2.Callbacks.add = function (path, name, func) { 34 if (typeof func != 'function') { 35 return false; 36 } 37 path = path.split('.'); 38 var obj = miniShop2.Callbacks; 39 for (var i = 0; i < path.length; i++) { 40 if (obj[path[i]] == undefined) { 41 return false; 42 } 43 obj = obj[path[i]]; 44 } 45 if (typeof obj != 'object') { 46 obj = [obj]; 47 } 48 if (name != undefined) { 49 obj[name] = func; 50 } else { 51 obj.push(func); 52 } 53 return true; 54 }; 55 miniShop2.Callbacks.remove = function (path, name) { 56 path = path.split('.'); 57 var obj = miniShop2.Callbacks; 58 for (var i = 0; i < path.length; i++) { 59 if (obj[path[i]] == undefined) { 60 return false; 61 } 62 obj = obj[path[i]]; 63 } 64 if (obj[name] != undefined) { 65 delete obj[name]; 66 return true; 67 } 68 return false; 69 }; 70 miniShop2.ajaxProgress = false; 71 miniShop2.setup = function () { 72 // selectors & $objects 73 this.actionName = 'ms2_action'; 74 this.action = ':submit[name=' + this.actionName + ']'; 75 this.form = '.ms2_form'; 76 this.$doc = $(document); 77 78 this.sendData = { 79 $form: null, 80 action: null, 81 formData: null 82 }; 83 84 this.timeout = 300; 85 }; 86 miniShop2.initialize = function () { 87 miniShop2.setup(); 88 // Indicator of active ajax request 89 90 //noinspection JSUnresolvedFunction 91 miniShop2.$doc 92 .ajaxStart(function () { 93 miniShop2.ajaxProgress = true; 94 }) 95 .ajaxStop(function () { 96 miniShop2.ajaxProgress = false; 97 }) 98 .on('submit', miniShop2.form, function (e) { 99 e.preventDefault(); 100 var $form = $(this); 101 var action = $form.find(miniShop2.action).val(); 102 103 if (action) { 104 var formData = $form.serializeArray(); 105 formData.push({ 106 name: miniShop2.actionName, 107 value: action 108 }); 109 miniShop2.sendData = { 110 $form: $form, 111 action: action, 112 formData: formData 113 }; 114 miniShop2.controller(); 115 } 116 }); 117 miniShop2.Cart.initialize(); 118 miniShop2.Message.initialize(); 119 miniShop2.Order.initialize(); 120 miniShop2.Gallery.initialize(); 121 }; 122 miniShop2.controller = function () { 123 var self = this; 124 switch (self.sendData.action) { 125 case 'cart/add': 126 miniShop2.Cart.add(); 127 break; 128 case 'cart/remove': 129 miniShop2.Cart.remove(); 130 break; 131 case 'cart/change': 132 miniShop2.Cart.change(); 133 break; 134 case 'cart/clean': 135 miniShop2.Cart.clean(); 136 break; 137 case 'order/submit': 138 miniShop2.Order.submit(); 139 break; 140 case 'order/clean': 141 miniShop2.Order.clean(); 142 break; 143 default: 144 return; 145 } 146 }; 147 miniShop2.send = function (data, callbacks, userCallbacks) { 148 var runCallback = function (callback, bind) { 149 if (typeof callback == 'function') { 150 return callback.apply(bind, Array.prototype.slice.call(arguments, 2)); 151 } else if (typeof callback == 'object') { 152 for (var i in callback) { 153 if (callback.hasOwnProperty(i)) { 154 var response = callback[i].apply(bind, Array.prototype.slice.call(arguments, 2)); 155 if (response === false) { 156 return false;
157 } 158 } 159 } 160 } 161 return true; 162 }; 163 // set context 164 if ($.isArray(data)) { 165 data.push({ 166 name: 'ctx', 167 value: miniShop2Config.ctx 168 }); 169 } else if ($.isPlainObject(data)) { 170 data.ctx = miniShop2Config.ctx; 171 } else if (typeof data == 'string') { 172 data += '&ctx=' + miniShop2Config.ctx; 173 } 174 175 // set action url 176 var formActionUrl = (miniShop2.sendData.$form) 177 ? miniShop2.sendData.$form.attr('action') 178 : false; 179 var url = (formActionUrl) 180 ? formActionUrl 181 : (miniShop2Config.actionUrl) 182 ? miniShop2Config.actionUrl 183 : document.location.href; 184 // set request method 185 var formMethod = (miniShop2.sendData.$form) 186 ? miniShop2.sendData.$form.attr('method') 187 : false; 188 var method = (formMethod) 189 ? formMethod 190 : 'post'; 191 192 // callback before 193 if (runCallback(callbacks.before) === false || runCallback(userCallbacks.before) === false) { 194 return; 195 } 196 // send 197 var xhr = function (callbacks, userCallbacks) { 198 return $[method](url, data, function (response) { 199 if (response.success) { 200 if (response.message) { 201 miniShop2.Message.success(response.message); 202 } 203 runCallback(callbacks.response.success, miniShop2, response); 204 runCallback(userCallbacks.response.success, miniShop2, response); 205 } else { 206 miniShop2.Message.error(response.message); 207 runCallback(callbacks.response.error, miniShop2, response); 208 runCallback(userCallbacks.response.error, miniShop2, response); 209 } 210 }, 'json').done(function () { 211 runCallback(callbacks.ajax.done, miniShop2, xhr); 212 runCallback(userCallbacks.ajax.done, miniShop2, xhr); 213 }).fail(function () { 214 runCallback(callbacks.ajax.fail, miniShop2, xhr); 215 runCallback(userCallbacks.ajax.fail, miniShop2, xhr); 216 }).always(function () { 217 runCallback(callbacks.ajax.always, miniShop2, xhr); 218 runCallback(userCallbacks.ajax.always, miniShop2, xhr); 219 }); 220 }(callbacks, userCallbacks); 221 }; 222 223 miniShop2.Cart = { 224 callbacks: { 225 add: miniShop2Config.callbacksObjectTemplate(), 226 remove: miniShop2Config.callbacksObjectTemplate(), 227 change: miniShop2Config.callbacksObjectTemplate(), 228 clean: miniShop2Config.callbacksObjectTemplate() 229 }, 230 setup: function () { 231 miniShop2.Cart.cart = '#msCart'; 232 miniShop2.Cart.miniCart = '#msMiniCart'; 233 miniShop2.Cart.miniCartClass = '.msMiniCart'; 234 miniShop2.Cart.miniCartNotEmptyClass = 'full'; 235 miniShop2.Cart.countInput = 'input[name=count]'; 236 miniShop2.Cart.totalWeight = '.ms2_total_weight'; 237 miniShop2.Cart.totalCount = '.ms2_total_count'; 238 miniShop2.Cart.totalCost = '.ms2_total_cost'; 239 miniShop2.Cart.totalFullCost = '.ms2_total_full_cost'; 240 miniShop2.Cart.totalDiscount = '.ms2_total_discount'; 241 miniShop2.Cart.cost = '.ms2_cost'; 242 miniShop2.Cart.oldCost = '.ms2_old_cost'; 243 }, 244 initialize: function () { 245 miniShop2.Cart.setup(); 246 if (!$(miniShop2.Cart.cart).length) { 247 return; 248 } 249 miniShop2.$doc.on('change', miniShop2.Cart.cart + ' ' + miniShop2.Cart.countInput, function () { 250 if (!!$(this).val()) { 251 $(this).closest(miniShop2.form).submit(); 252 } 253 }); 254 }, 255 add: function () { 256 var callbacks = miniShop2.Cart.callbacks; 257 callbacks.add.response.success = function (response) { 258 this.Cart.status(response.data); 259 }; 260 miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.add, miniShop2.Callbacks.Cart.add); 261 }, 262 remove: function () { 263 var callbacks = miniShop2.Cart.callbacks; 264 callbacks.remove.response.success = function (response) { 265 this.Cart.remove_position(miniShop2.Utils.getValueFromSerializedArray('key')); 266 this.Cart.status(response.data); 267 }; 268 miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.remove, miniShop2.Callbacks.Cart.remove); 269 }, 270 change: function () { 271 var callbacks = miniShop2.Cart.callbacks; 272 callbacks.change.response.success = function (response) { 273 if (typeof (response.data.key) == 'undefined') { 274 this.Cart.remove_position(miniShop2.Utils.getValueFromSerializedArray('key')); 275 } else { 276 $('#' + miniShop2.Utils.getValueFromSerializedArray('key')).find(''); 277 } 278 this.Cart.status(response.data); 279 }; 280 miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.change, miniShop2.Callbacks.Cart.change); 281 }, 282 status: function (status) { 283 if (status['total_count'] < 1) { 284 $(".cart-all-content").fadeOut(function(){ 285 location.reload(); 286 }); 287 //location.reload(); 288 } else { 289 //var $cart = $(miniShop2.Cart.cart); 290 var $miniCarts = $(miniShop2.Cart.miniCart).add(miniShop2.Cart.miniCartClass); 291 if (status['total_count'] > 0 && $miniCarts.length > 0) { 292 $miniCarts.each(function (index, cart) { 293 if (!$(cart).hasClass(miniShop2.Cart.miniCartNotEmptyClass)) { 294 $(cart).addClass(miniShop2.Cart.miniCartNotEmptyClass); 295 } 296 }); 297 } 298 $(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight'])); 299 $(miniShop2.Cart.totalCount).text(status['total_count']); 300 $(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost'])); 301 $(miniShop2.Cart.totalDiscount).text(miniShop2.Utils.formatPrice(status['total_discount'])); 302 $(miniShop2.Cart.totalFullCost).text(miniShop2.Utils.formatPrice(status['total_cost']+status['total_discount'])); 303 //console.log("total_discount = "+status['total_discount']); 304 //console.log("total_cost = "+status['total_cost']); 305 //console.log("wow! "+ JSON.stringify(status)); 306 if (typeof(status['cost']) === 'number') { 307 $(miniShop2.Cart.cost, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['cost'])); 308 309 310 311 } 312 313 if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) { 314 miniShop2.Order.getcost(); 315 } 316 } 317 }, 318 clean: function () { 319 var callbacks = miniShop2.Cart.callbacks; 320 callbacks.clean.response.success = function (response) { 321 this.Cart.status(response.data); 322 }; 323 324 miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.clean, miniShop2.Callbacks.Cart.clean); 325 }, 326 remove_position: function (key) { 327 $('#' + key).remove(); 328 } 329 }; 330 331 miniShop2.Gallery = { 332 setup: function () { 333 miniShop2.Gallery.gallery = $('#msGallery'); 334 miniShop2.Gallery.files = miniShop2.Gallery.gallery.find('.fotorama'); 335 }, 336 initialize: function () { 337 miniShop2.Gallery.setup(); 338 if (miniShop2.Gallery.files.length) { 339 $('<link/>', { 340 rel: 'stylesheet', 341 type: 'text/css', 342 href: miniShop2Config.cssUrl + 'lib/fotorama.min.css', 343 }).appendTo('head'); 344 $('<script/>', { 345 type: 'text/javascript', 346 src: miniShop2Config.jsUrl + 'lib/fotorama.min.js', 347 }).appendTo('head'); 348 } 349 350 // fix size gallery 351 miniShop2.$doc.on('fotorama:ready', miniShop2.Gallery.files, function (e, Fotorama, extra) { 352 if ((src = Fotorama.activeFrame.src)) { 353 measure = $.Fotorama.measures[src]; 354 if (measure === undefined) { 355 for (i in $.Fotorama.measures) { 356 measure = $.Fotorama.measures[i]; 357 break; 358 } 359 Fotorama.resize(measure); 360 } 361 } 362 }); 363 364 } 365 }; 366 367 miniShop2.Order = { 368 callbacks: { 369 add: miniShop2Config.callbacksObjectTemplate(), 370 getcost: miniShop2Config.callbacksObjectTemplate(), 371 clean: miniShop2Config.callbacksObjectTemplate(), 372 submit: miniShop2Config.callbacksObjectTemplate(), 373 getrequired: miniShop2Config.callbacksObjectTemplate() 374 }, 375 setup: function () { 376 miniShop2.Order.order = '#msOrder'; 377 miniShop2.Order.deliveries = '#deliveries'; 378 miniShop2.Order.payments = '#payments'; 379 miniShop2.Order.deliveryInput = 'input[name="delivery"]'; 380 miniShop2.Order.inputParent = '.input-parent'; 381 miniShop2.Order.paymentInput = 'input[name="payment"]'; 382 miniShop2.Order.paymentInputUniquePrefix = 'input#payment_'; 383 miniShop2.Order.deliveryInputUniquePrefix = 'input#delivery_'; 384 miniShop2.Order.orderCost = '.ms2_order_cost'; 385 miniShop2.Order.cartCost = '#ms2_order_cart_cost'; 386 miniShop2.Order.deliveryCost = '.ms2_order_delivery_cost'; 387 }, 388 initialize: function () { 389 miniShop2.Order.setup(); 390 if ($(miniShop2.Order.order).length) { 391 miniShop2.$doc 392 .on('click', miniShop2.Order.order + ' [name="' + miniShop2.actionName + '"][value="order/clean"]', function (e) { 393 miniShop2.Order.clean(); 394 e.preventDefault(); 395 }) 396 .on('change', miniShop2.Order.order + ' input,' + miniShop2.Order.order + ' textarea', function () { 397 var $this = $(this); 398 var key = $this.attr('name'); 399 if (!key) return; 400 var value = $this.val(); 401 miniShop2.Order.add(key, value); 402 }); 403 var $deliveryInputChecked = $(miniShop2.Order.deliveryInput + ':checked', miniShop2.Order.order); 404 $deliveryInputChecked.trigger('change'); 405 } 406 }, 407 updatePayments: function (payments) { 408 var $paymentInputs = $(miniShop2.Order.paymentInput, miniShop2.Order.order); 409 $paymentInputs.attr('disabled', true).prop('disabled', true).closest(miniShop2.Order.inputParent).hide(); 410 if (payments.length > 0) { 411 for (var i in payments) { 412 if (payments.hasOwnProperty(i)) { 413 $paymentInputs.filter(miniShop2.Order.paymentInputUniquePrefix + payments[i]).attr('disabled', false).prop('disabled', false).closest(miniShop2.Order.inputParent).show(); 414 } 415 } 416 } 417 if ($paymentInputs.filter(':visible:checked').length == 0) { 418 $paymentInputs.filter(':visible:first').trigger('click'); 419 } 420 }, 421 add: function (key, value) { 422 var callbacks = miniShop2.Order.callbacks; 423 var old_value = value; 424 callbacks.add.response.success = function (response) { 425 (function (key, value, old_value) { 426 var $field = $('[name="' + key + '"]', miniShop2.Order.order); 427 switch (key) { 428 case 'delivery': 429 $field = $(miniShop2.Order.deliveryInputUniquePrefix + response.data[key]); 430 if (response.data[key] != old_value) { 431 $field.trigger('click'); 432 } else { 433 miniShop2.Order.getrequired(value); 434 miniShop2.Order.updatePayments($field.data('payments')); 435 miniShop2.Order.getcost(); 436 } 437 break; 438 case 'payment': 439 $field = $(miniShop2.Order.paymentInputUniquePrefix + response.data[key]); 440 if (response.data[key] != old_value) { 441 $field.trigger('click'); 442 } else { 443 miniShop2.Order.getcost(); 444 } 445 break; 446 //default: 447 } 448 $field.val(response.data[key]).removeClass('error').closest(miniShop2.Order.inputParent).removeClass('error'); 449 })(key, value, old_value); 450 }; 451 callbacks.add.response.error = function () { 452 (function (key) { 453 var $field = $('[name="' + key + '"]', miniShop2.Order.order); 454 if ($field.attr('type') == 'checkbox' || $field.attr('type') == 'radio') { 455 $field.closest(miniShop2.Order.inputParent).addClass('error'); 456 } else { 457 $field.addClass('error'); 458 } 459 })(key); 460 }; 461 462 var data = { 463 key: key, 464 value: value 465 }; 466 data[miniShop2.actionName] = 'order/add'; 467 miniShop2.send(data, miniShop2.Order.callbacks.add, miniShop2.Callbacks.Order.add); 468 }, 469 getcost: function () { 470 var callbacks = miniShop2.Order.callbacks; 471 callbacks.getcost.response.success = function (response) { 472 $(miniShop2.Order.orderCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['cost'])); 473 $(miniShop2.Order.cartCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['cart_cost'])); 474 $(miniShop2.Order.deliveryCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['delivery_cost'])); 475 476 $(".ms2_order_delivery_cost").text(miniShop2.Utils.formatPrice(response.data['delivery_cost'])); 477 $(".ms2_total_cart_cost").text(miniShop2.Utils.formatPrice(response.data['cart_cost'])); 478 $(".ms2_total_cost").text(miniShop2.Utils.formatPrice(response.data['cost'])); 479 $(".ms2_total_discount").text(miniShop2.Utils.formatPrice(response.data['discount_cost'])); 480 console.log("wow! "+ JSON.stringify(response.data)); 481 }; 482 var data = {}; 483 data[miniShop2.actionName] = 'order/getcost'; 484 miniShop2.send(data, miniShop2.Order.callbacks.getcost, miniShop2.Callbacks.Order.getcost); 485 }, 486 clean: function () { 487 var callbacks = miniShop2.Order.callbacks; 488 callbacks.clean.response.success = function () { 489 location.reload(); 490 }; 491 492 var data = {}; 493 data[miniShop2.actionName] = 'order/clean'; 494 miniShop2.send(data, miniShop2.Order.callbacks.clean, miniShop2.Callbacks.Order.clean); 495 }, 496 submit: function () { 497 miniShop2.Message.close(); 498 499 // Checking for active ajax request 500 if (miniShop2.ajaxProgress) { 501 //noinspection JSUnresolvedFunction 502 miniShop2.$doc.ajaxComplete(func
502tion () { 503 miniShop2.ajaxProgress = false; 504 miniShop2.$doc.unbind('ajaxComplete'); 505 miniShop2.Order.submit(); 506 }); 507 return false; 508 } 509 510 var callbacks = miniShop2.Order.callbacks; 511 callbacks.submit.before = function () { 512 $(':button, a', miniShop2.Order.order).attr('disabled', true).prop('disabled', true); 513 $('.cart-checkout').addClass('checkout-in-progress'); 514 }; 515 callbacks.submit.response.success = function (response) { 516 // ORWO GTM event 517 //console.log('cart_send_form'); 518 //console.log(response); 519 window.dataLayer = window.dataLayer || []; 520 dataLayer.push({ event: "cart_send_form" }); 521 // 522 523 // ЧÑÐ¾Ð±Ñ ÑÑабоÑал вÑзов ecommerce 524 setTimeout(function () { 525 if (response.data['redirect']) { 526 document.location.href = response.data['redirect']; 527 } else if (response.data['msorder']) { 528 document.location.href = document.location.origin + document.location.pathname 529 + (document.location.search ? document.location.search + '&' : '?') 530 + 'msorder=' + response.data['msorder']; 531 } else { 532 location.reload(); 533 } 534 }, 1000); // ÐадеÑжка в 1000 Ð¼Ñ 535 536 }; 537 callbacks.submit.response.error = function (response) { 538 setTimeout((function () { 539 $(':button, a', miniShop2.Order.order).attr('disabled', false).prop('disabled', false); 540 $('.cart-checkout').removeClass('checkout-in-progress'); 541 }.bind(this)), 3 * miniShop2.timeout); 542 $('[name]', miniShop2.Order.order).removeClass('error').closest(miniShop2.Order.inputParent).removeClass('error'); 543 for (var i in response.data) { 544 if (response.data.hasOwnProperty(i)) { 545 var key = response.data[i]; 546 //var $field = $('[name="' + response.data[i] + '"]', miniShop2.Order.order); 547 //$field.addClass('error').closest(miniShop2.Order.inputParent).addClass('error'); 548 var $field = $('[name="' + key + '"]', miniShop2.Order.order); 549 if ($field.attr('type') == 'checkbox' || $field.attr('type') == 'radio') { 550 $field.closest(miniShop2.Order.inputParent).addClass('error'); 551 } else { 552 $field.addClass('error'); 553 } 554 } 555 } 556 }; 557 return miniShop2.send(miniShop2.sendData.formData, miniShop2.Order.callbacks.submit, miniShop2.Callbacks.Order.submit); 558 }, 559 getrequired: function (value) { 560 var callbacks = miniShop2.Order.callbacks; 561 callbacks.getrequired.response.success = function (response) { 562 $('[name]', miniShop2.Order.order).removeClass('required').closest(miniShop2.Order.inputParent).removeClass('required'); 563 var requires = response.data['requires']; 564 for (var i = 0, length = requires.length; i < length; i++) { 565 $('[name=' + requires[i] + ']', miniShop2.Order.order).addClass('required').closest(miniShop2.Order.inputParent).addClass('required'); 566 } 567 }; 568 callbacks.getrequired.response.error = function () { 569 $('[name]', miniShop2.Order.order).removeClass('required').closest(miniShop2.Order.inputParent).removeClass('required'); 570 }; 571 572 var data = { 573 id: value 574 }; 575 data[miniShop2.actionName] = 'order/getrequired'; 576 miniShop2.send(data, miniShop2.Order.callbacks.getrequired, miniShop2.Callbacks.Order.getrequired); 577 } 578 }; 579 580 miniShop2.Message = { 581 initialize: function () { 582 }, 583 close: function () { 584 }, 585 show: function (message) { 586 if (message != '') { 587 alert(message); 588 } 589 }, 590 success: function (message) { 591 }, 592 error: function (message) { 593 }, 594 info: function (message) { 595 } 596 }; 597 598 miniShop2.Utils = { 599 empty: function (val) { 600 return (typeof (val) == 'undefined' || val == 0 || val === null || val === false || (typeof (val) == 'string' && val.replace(/\s+/g, '') == '') || (typeof (val) == 'object' && val.length == 0)); 601 }, 602 formatPrice: function (price) { 603 var pf = miniShop2Config.price_format; 604 price = this.number_format(price, pf[0], pf[1], pf[2]); 605 606 if (miniShop2Config.price_format_no_zeros && pf[0] > 0) { 607 price = price.replace(/(0+)$/, ''); 608 price = price.replace(/[^0-9]$/, ''); 609 } 610 611 return price; 612 }, 613 formatWeight: function (weight) { 614 var wf = miniShop2Config.weight_format; 615 weight = this.number_format(weight, wf[0], wf[1], wf[2]); 616 617 if (miniShop2Config.weight_format_no_zeros && wf[0] > 0) { 618 weight = weight.replace(/(0+)$/, ''); 619 weight = weight.replace(/[^0-9]$/, ''); 620 } 621 622 return weight; 623 }, 624 // Format a number with grouped thousands, 625 number_format: function (number, decimals, dec_point, thousands_sep) { 626 // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) 627 // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 628 // bugfix by: Michael White (http://crestidg.com) 629 var i, j, kw, kd, km; 630 631 // input sanitation & defaults 632 if (isNaN(decimals = Math.abs(decimals))) { 633 decimals = 2; 634 } 635 if (dec_point == undefined) { 636 dec_point = ','; 637 } 638 if (thousands_sep == undefined) { 639 thousands_sep = '.'; 640 } 641 642 i = parseInt(number = (+number || 0).toFixed(decimals)) + ''; 643 644 if ((j = i.length) > 3) { 645 j = j % 3; 646 } else { 647 j = 0; 648 } 649 650 km = j 651 ? i.substr(0, j) + thousands_sep 652 : ''; 653 kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep); 654 kd = (decimals 655 ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, '0').slice(2) 656 : ''); 657 658 return km + kw + kd; 659 }, 660 getValueFromSerializedArray: function (name, arr) { 661 if (!$.isArray(arr)) { 662 arr = miniShop2.sendData.formData; 663 } 664 for (var i = 0, length = arr.length; i < length; i++) { 665 if (arr[i].name == name) { 666 return arr[i].value; 667 } 668 } 669 return null; 670 } 671 }; 672 673 $(document).ready(function ($) { 674 miniShop2.initialize(); 675 var html = $('html'); 676 html.removeClass('no-js'); 677 if (!html.hasClass('js')) { 678 html.addClass('js'); 679 } 680 }); 681 682 window.miniShop2 = miniShop2; 683})(window, document, jQuery, miniShop2Config);
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.