PageSourceSearch

https://www.warrentontoyota.com/app/themes/dv-framework/media/js/dv-hydrate.js?v=1.772.37

js warrentontoyota.com collected 2026-09-30 14:56:25 UTC 4,222 bytes, 102 lines download raw bytes

1/**
2 * DVHydrate Utility
3 * Shared hydration logic for vehicles and forms
4 */
5var DVHydrate = {
6    /**
7     * Collect data from an object, its closest .listing, or #fixed-info-container (VDP)
8     * @param {jQuery|HTMLElement} obj
9     * @returns {Object}
10     */
11    collectData: function (obj) {
12        var combinedData = {};
13        var $el = jQuery(obj);
14        var $listing = $el.closest('.listing');
15        var $vdpContainer = jQuery("#fixed-info-container");
16        
17        // 1. Data from VDP container or Listing card
18        var $source = $vdpContainer.length ? $vdpContainer : $listing;
19        if ($source.length) {
20            jQuery.each($source.data(), function (key, value) {
21                combinedData[key] = value;
22                // Normalize 'vehicleYear' -> 'year', etc.
23                if (key.indexOf('vehicle') === 0 && key.length > 7) {
24                    var shortKey = key.substring(7);
25                    shortKey = shortKey.charAt(0).toLowerCase() + shortKey.slice(1);
26                    if (combinedData[shortKey] === undefined) {
27                        combinedData[shortKey] = value;
28                    }
29                }
30            });
31        }
32
33        // 2. Data from the element itself (overrides listing/vdp)
34        if (obj) {
35            jQuery.extend(combinedData, $el.data());
36        }
37
38        // 3. Normalized helpers
39        if (combinedData.vehicleMakeModel && !combinedData.make) {
40            var parts = combinedData.vehicleMakeModel.split(" ");
41            combinedData.make = parts[0];
42            combinedData.model = parts.slice(1).join(" ");
43        }
44        
45        // Ensure some common fields are present under standard names
46        if (combinedData.vehicleVin && !combinedData.vin) combinedData.vin = combinedData.vehicleVin;
47        if (combinedData.vehicleStockNumber && !combinedData.stockNumber) combinedData.stockNumber = combinedData.vehicleStockNumber;
48        if (combinedData.vehiclePrice && !combinedData.finalPrice) combinedData.finalPrice = combinedData.vehiclePrice;
49
50        return combinedData;
51    },
52
53   /**
54     * Format a number as money
55     * @param {number|string} amount
56     * @returns {string}
57     */
58    formatMoney: function (amount) {
59        if (amount === undefined || amount === null || amount === "") return "";
60        var val = parseFloat(String(amount).replace(/[^\d.]/g, ''));
61        if (isNaN(val)) return amount;
62        return "$" + val.toLocaleString("en-US", {
63            minimumFractionDigits: 0,
64            maximumFractionDigits: 0
65        });
66    },
67
68    /**
69     * Populate form fields based on data attributes and common classes
70     * @param {jQuery|HTMLElement} form
71     * @param {Object} data
72     */
73    populateFormFields: function (form, data) {
74        var $form = jQuery(form);
75        if (!data) data = this.collectData(form);
76
77        // Map data to specific classes used in the project
78        var mappings = {
79            '.vehicle-id-field': data.id || data.vehicleId,
80            '.vin-field': data.vin || data.vehicleVin,
81            '.stock-number-field': data.stockNumber || data.vehicleStockNumber,
82            '.year-field': data.year || data.vehicleYear,
83            '.make-field': data.make,
84            '.model-field': data.model,
85            '.trim-field': data.trim || data.vehicleTrim,
86            '.msrp-field': this.formatMoney(data.msrp || data.vehicleMsrp),
87            '.final-price-field': this.formatMoney(data.finalPrice || data.vehiclePrice || data.price),
88            '.dealer-name-field': data.dealerName,
89            '.discount-matrix-field': this.formatMoney(data.discountMatrix || data.vehicleDiscountMatrix),
90            '.discount-matrix-value-field': this.formatMoney(data.discountMatrixValue || data.discountmatrix_value),
91            '.internet-price-field': this.formatMoney(data.internetPrice || data.vehicleInternetPrice),
92            '.condition-field': data.condition,
93            '.vehicle-url-field': data.vehicleUrl || data.agVdpUrl || data.vdpUrl
94        };
95
96        jQuery.each(mappings, function (selector, value) {
97            if (value !== undefined) {
98                $form.find(selector).val(value);
99            }
100        });
101    }
102};

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.