PageSourceSearch

https://www.mymilitarysavings.com/assets/app-359480f5.js

js mymilitarysavings.com collected 2026-09-25 19:43:26 UTC 8,948 bytes, 283 lines download raw bytes

1var compressMenu = true;
2
3var BRAND_TRACKING_VERSION = "V2";
4
5function getBrandPageContext() {
6  var meta = document.querySelector('meta[name="brand-page-context"]');
7  return meta ? meta.getAttribute('content') : null;
8}
9
10// Send a Somo Analytics (SAS) track event. somoAnalytics only exists when
11// SAS_PROPERTY_ID is set (see shared/_sas_analytics), so check for it first.
12function sasTrack(name, properties) {
13  if (window.somoAnalytics) window.somoAnalytics.track(name, properties);
14}
15
16$(document).ready(function () {
17  checkSize();
18  mobileMenuSetup();
19  mobileMenu();
20  clickTrackingSetup();
21  seoMenuSetup();
22  addToList();
23  recipeClickTracking();
24  featuredPartnerClickTracking();
25  contestClickTracking();
26  couponClickTracking();
27  circularClickTracking();
28  promoClickTracking();
29});
30
31$(window).resize(function () {
32  checkSize();
33  mobileMenu();
34});
35
36// mobile menu setup
37function mobileMenuSetup() {
38  $(".menu__primary").append(
39    '<li class="expand" title="Show menu"><span class="icon-menu"></span> <em>More</em></li>',
40  ); // add expand link placeholder
41  $(".menu__primary li.expand").on("click", function (e) {
42    // when expand link is clicked
43    if ($(".menu__primary li.expand em").html() == "More") {
44      $(".menu__primary li.expand em").html("Less");
45      $("header .more").show();
46    } else {
47      $(".menu__primary li.expand em").html("More");
48      $("header .more").hide();
49    }
50    e.preventDefault();
51  });
52}
53
54// toggle mobile menu
55function mobileMenu() {
56  if (compressMenu) {
57    // if media query is small or primary menu is wrapping
58    $("header .more").hide(); // hide most links
59    $(".menu__primary li.expand em").html("More");
60    $(".menu__primary li.expand").show(); // show expand link
61  } else {
62    $("header .more").show(); // show most links
63    $(".menu__primary li.expand em").html("Less");
64    $(".menu__primary li.expand").hide(); // hide expand link
65  }
66}
67
68// check if browser width exceeds primary menu width
69function checkSize() {
70  if ($("header").width() > 860) {
71    compressMenu = false;
72  } else {
73    compressMenu = true;
74  }
75}
76
77// track clicks on links with data-track attribute
78function clickTrackingSetup() {
79  $("a[data-track]").on("click", function (e) {
80    // when tracked link is clicked
81    var redirect_to = $(this).attr("href");
82    var tracking_id = $(this).data("track");
83    var external = $(this).attr("rel") == "external" ? true : false;
84    var isExternalBrand = $(this).hasClass("external-brand-link");
85
86    // Track all data-track clicks with Ahoy for timestamped per-user data
87    ahoy.track("Link Clicked", {
88      url: redirect_to,
89      tag: tracking_id,
90    });
91
92    // Also track with Ahoy if this is an external brand link
93    if (isExternalBrand) {
94      ahoy.track("External Brand Clicked", {
95        brand_id: $(this).data("brand-id"),
96        brand_name: $(this).data("brand-name"),
97        url: redirect_to,
98      });
99    }
100
101    if (external) window.open(redirect_to, "_blank"); // open requested link in new tab
102    $.post("/clicks", { url: redirect_to, tag: tracking_id }, function () {
103      // capture url and tracking id
104      if (!external) {
105        // Delay navigation for external brand links to allow Ahoy request to complete
106        if (isExternalBrand) {
107          setTimeout(function () {
108            window.location.href = redirect_to;
109          }, 150);
110        } else {
111          window.location.href = redirect_to;
112        }
113      }
114    });
115    e.preventDefault();
116  });
117}
118
119// hide/show seo footer links
120function seoMenuSetup() {
121  $("footer .secondary li.seo_page").hide();
122  if ($("footer .secondary li.seo_page").length > 0) {
123    $("footer .secondary").append('<li class="seo_toggle">More&hellip;<li>');
124    $("footer .seo_toggle").on("click", function (e) {
125      $("footer .seo_toggle").hide();
126      $("footer .secondary li.seo_page").fadeIn();
127    });
128  }
129}
130
131// Ajax add to list hijack
132function addToList() {
133  $("a.add_to_list").on("click", function (e) {
134    var action_item = $(this);
135    var item_id = action_item.data("item-id");
136    var itemName = action_item.data("item-name");
137    var brandId = action_item.data("brand-id");
138    var brandName = action_item.data("brand-name");
139
140    // Track with Ahoy
141    var eventData = { item_id: item_id };
142    if (itemName) eventData.item_name = itemName;
143    if (brandId) eventData.brand_id = brandId;
144    if (brandName) eventData.brand_name = brandName;
145    var page = getBrandPageContext();
146    if (page) eventData.page = page;
147    eventData.tracking_version = BRAND_TRACKING_VERSION;
148    ahoy.track("Shopping List Item Added", eventData);
149
150    // add the item to the list via ajax
151    $.get("/shopping-list/add/" + item_id, function (data) {
152      addToListHighlight(action_item);
153      $(".shopping_list_count").text(data.item_count);
154      sasTrack("shopping_list_add", data.sas_properties);
155    }).fail(function () {
156      // Visitors get a 401 and must sign in first; follow the link so the
157      // server can send them there, or show its error on the list page.
158      window.location.href = action_item.attr("href");
159    });
160    e.preventDefault();
161  });
162}
163
164// Mark list button temporarily
165function addToListHighlight(action_item) {
166  action_item.text("Added");
167  action_item.addClass("added");
168}
169
170// Track recipe button clicks with Ahoy
171function recipeClickTracking() {
172  $(".recipe-view-button").on("click", function (e) {
173    var recipeId = $(this).data("recipe-id");
174    var recipeName = $(this).data("recipe-name");
175    var brandId = $(this).data("brand-id");
176    var brandName = $(this).data("brand-name");
177
178    // Track the event with Ahoy
179    var eventData = {
180      recipe_id: recipeId,
181      recipe_name: recipeName,
182      source: "recipe_button_click",
183    };
184    if (brandId) eventData.brand_id = brandId;
185    if (brandName) eventData.brand_name = brandName;
186    var page = getBrandPageContext();
187    if (page) eventData.page = page;
188    eventData.tracking_version = BRAND_TRACKING_VERSION;
189    ahoy.track("Recipe Viewed", eventData);
190    sasTrack("recipe_view", eventData);
191  });
192}
193
194// Track featured partner link clicks with Ahoy
195function featuredPartnerClickTracking() {
196  $(".featured-partner-link").on("click", function () {
197    var brandId = $(this).data("brand-id");
198    var brandName = $(this).data("brand-name");
199
200    var eventData = {
201      brand_id: brandId,
202      brand_name: brandName,
203    };
204    var page = getBrandPageContext();
205    if (page) eventData.page = page;
206    eventData.tracking_version = BRAND_TRACKING_VERSION;
207    ahoy.track("Featured Partner Clicked", eventData);
208  });
209}
210
211// Track contest button clicks with Ahoy
212function contestClickTracking() {
213  $(".contest-enter-button").on("click", function () {
214    var contestId = $(this).data("contest-id");
215    var contestName = $(this).data("contest-name");
216    var contestType = $(this).data("contest-type");
217
218    var eventData = {
219      contest_id: contestId,
220      contest_name: contestName,
221      contest_type: contestType,
222    };
223    var page = getBrandPageContext();
224    if (page) eventData.page = page;
225    eventData.tracking_version = BRAND_TRACKING_VERSION;
226    ahoy.track("Contest Entered", eventData);
227  });
228}
229
230// Track coupon button clicks with Ahoy
231function couponClickTracking() {
232  $(".coupon-view-button").on("click", function () {
233    var couponId = $(this).data("coupon-id");
234    var couponName = $(this).data("coupon-name");
235    var brandId = $(this).data("brand-id");
236    var brandName = $(this).data("brand-name");
237
238    var eventData = {
239      coupon_id: couponId,
240      coupon_name: couponName,
241    };
242    if (brandId) eventData.brand_id = brandId;
243    if (brandName) eventData.brand_name = brandName;
244    var page = getBrandPageContext();
245    if (page) eventData.page = page;
246    eventData.tracking_version = BRAND_TRACKING_VERSION;
247    ahoy.track("Coupon Viewed", eventData);
248    sasTrack("coupon_view", eventData);
249  });
250}
251
252// Track opening a circular (a monthly ad) with SAS
253function circularClickTracking() {
254  $(".stack--monthly_ads a").on("click", function () {
255    var circular = $(this).closest(".stack--monthly_ads");
256
257    sasTrack("circular_view", {
258      circular_id: circular.data("circular-id"),
259      circular_title: circular.data("circular-title"),
260    });
261  });
262}
263
264// Track promo button clicks with Ahoy
265function promoClickTracking() {
266  $(".promo-view-button").on("click", function () {
267    var promoId = $(this).data("promo-id");
268    var promoName = $(this).data("promo-name");
269    var brandId = $(this).data("brand-id");
270    var brandName = $(this).data("brand-name");
271
272    var eventData = {
273      promo_id: promoId,
274      promo_name: promoName,
275    };
276    if (brandId) eventData.brand_id = brandId;
277    if (brandName) eventData.brand_name = brandName;
278    var page = getBrandPageContext();
279    if (page) eventData.page = page;
280    eventData.tracking_version = BRAND_TRACKING_VERSION;
281    ahoy.track("Promo Viewed", eventData);
282  });
283}

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.