PageSourceSearch

https://ceolympians.com/js/cart-actions.js?v=qTkiF1lAaZM9AFleQOJZ78EkRqzGitBOnxPjVvJ9Tgw

js ceolympians.com collected 2026-10-07 20:00:38 UTC 3,920 bytes, 143 lines download raw bytes

1
2//var PassHolderInfo = {
3//    name: string,
4//    email: string,
5//}
6
7//class CartItem {
8//    constructor(SeasonPassConfigurationID, PassHolders) {
9//        this.SeasonPassConfigurationID = SeasonPassConfigurationID,
10//        this.PassHolders = PassHolders
11//    }
12    
13//}
14
15function readCart() {
16    let cartCacheEntryJson = localStorage.getItem(eventlink.organizationID + "-cart");
17    if (!cartCacheEntryJson) {
18        return [];
19    }
20    
21    let cartCacheEntry = JSON.parse(cartCacheEntryJson);
22    let cutOffDate = new Date();
23    cutOffDate.setDate(cutOffDate.getDate() - 3);
24    if (!cartCacheEntry.lastWrite || new Date(cartCacheEntry.lastWrite) < cutOffDate) {
25        return [];
26    }
27    
28    return cartCacheEntry.cart;
29}
30
31function writeCart(cartValue) {
32    let cartCacheEntry = {
33        lastWrite: new Date(),
34        cart: cartValue
35    };
36    localStorage.setItem(eventlink.organizationID + "-cart", JSON.stringify(cartCacheEntry));
37    updateCartCount();
38}
39
40function clearCart() {
41    writeCart([]);
42    updateCartCount();
43}
44
45function updateCartCount() {
46    let $cartButton = $("#pass-cart-button");
47    let cartCount = readCart().length;
48    let cartText = "Cart";
49    if (cartCount > 0) {
50        cartText += " (" + cartCount + ")";
51    }
52    $cartButton.text(cartText);
53}
54
55function addToCart(passFormID, passConfigurationID, passTitle, passPriceDollars) {
56    let $form = $("#" + passFormID);
57    let $errorText = $(".pass-form-error-text", $form);
58    $errorText.hide();
59    
60    function showFormError(message) {
61        $errorText.text(message).show();
62    }
63    
64    if ($form.length) {
65        let passHolders = [];
66        let $rows = $(".pass-holder-row", $form);
67        
68        // Map form inputs to objects
69        for (let i = 0; i < $rows.length; i++) {
70            let $row = $($rows[i]);
71            $row.removeClass("bg-danger");
72            let name = $(".pass-holder-name", $row).val();
73            let email = $(".pass-holder-email", $row).val();
74            
75            if (name || email) {
76                passHolders.push({
77                    name,
78                    email,
79                    $sourceRow: $row
80                });
81            }
82        }
83
84        // Validate the list of objects
85        if (!passHolders.length) {
86            if ($rows.length > 1) {
87                showFormError("At least one pass holder name is required.");
88            } else {
89                showFormError("Pass holder name is required.");
90            }
91            
92            return;
93        }
94        
95        for (let i = 0; i < passHolders.length; i++) {
96            let pass = passHolders[i];
97            if (pass.email && !pass.name) {
98                pass.$sourceRow.addClass("bg-danger");
99                showFormError("Pass holder name is required.")
100                return;
101            }
102
103            if (pass.email && pass.email.indexOf("@") < 0) {
104                pass.$sourceRow.addClass("bg-danger");
105                showFormError("Pass holder email is not a valid email address.")
106                return;
107            }
108        }
109        
110        // Add the list of passes to the cart
111        let cart = readCart();
112        for (let i = 0; i < passHolders.length; i++)
113        {
114            delete passHolders[i].$sourceRow;
115        }
116        cart.push({
117            passConfigurationID,
118            passTitle,
119            passPriceDollars,
120            passHolders
121        })
122        writeCart(cart);
123        
124        // Reset form state
125        $("input", $form).val("");
126
127        // Open confirmation modal
128        $("#addedToCartModal").modal('show');
129    }
130}
131
132function removeCartPassHolder(passIndex, holderIndex) {
133    let cart = readCart();
134    let pass = cart[passIndex];
135    
136    if (pass.passHolders.length === 1) {
137        cart.splice(passIndex, 1);
138    }  else {
139        pass.passHolders.splice(holderIndex, 1);
140    }
141    
142    writeCart(cart);
143}

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.