Bucs rebuild on defense, surround Jameis Winston with playmakers in NFL Draft

TAMPA, Fla. (AP) — For the Tampa Bay Buccaneers, the NFL draft was all about trying to give Jameis Winston a better chance to succeed.

That not only means surrounding the fifth-year quarterback with playmakers on offense but rebuilding a defense that’s been one of the worst in the league since Winston entered the league as the No. 1 overall pick in 2015.

Coach Bruce Arians and general manager Jason Licht began their first draft together since their days of working together with the Arizona Cardinals by selecting five consecutive defensive players over the first four rounds.

They interrupted the overhaul by picking Utah kicker Matt Gay in the fifth round, then finished Saturday by taking little-known but speedy Bowling Green receiver Scotty Miller in the sixth round and Missouri defensive tackle Terry Beckner, Jr. in the seventh.

“Feel really, really good about this one,” Licht said about the draft haul that began with selecting linebacker Devin White with the fifth overall pick.

Cornerbacks Sean Bunting and Jamel Dean, plus safety Mike Edwards are part of the potential fix for a unit making the transition to a 3-4 scheme under defensive coordinator Todd Bowles after allowing the second-most points in the NFL last season.

Offensive line and running back are areas of need that were not addressed in this draft.

Licht reiterated that the roster is a work in progress.

“We still have time to make some additions if we have to,” the GM said.

“You can’t address every position that you may have some concerns. Whether they vary from big concern to small concern, you can’t — it’s just impossible to do it in a small amount of time during free agency or the draft,” Licht said. “But, we have through August to do what we can.”

WHO THEY GOT

Licht and Arians passed on an opportunity to select the top-rated pass rusher in the draft, Josh Allen, to make White the centerpiece of the defensive overhaul. Bunting could compete for a starting job right away, too, while Dean, Edwards, Nelson and Beckner address the need for depth.

SURPRISE MOVE

Selecting a kicker in the fifth round, No. 145 overall, was unexpected, especially considering the single biggest draft-day blunder under Licht’s watch was the decision three years ago to trade up 15 spots to select Roberto Aguayo in the second round, No. 59 overall. The former Florida State star was a major disappointment as a rookie and released after just one season in Tampa Bay.

The position has been problematic for much of Licht’s tenure, which began in 2014.

The GM insisted he had no qualms about drafting another kicker.

“To me — and to us — it was a small price to pay to get a kicker,” Licht said. “You wouldn’t say the same thing for a receiver. If a receiver didn’t work out a couple years ago that you took in the second round, would you be afraid to take a receiver in the fifth round? No. This is a very, very important position.”

Bucs rebuild on defense, surround Jameis Winston with playmakers in NFL Draft | FOX Sports

HOW THEY DID

While they didn’t opt for any of the top edge rushers in the draft, the Bucs believe White has the versatility to bolster pressure up the middle, be a run-stopper and excel in pass coverage. With at least two starting jobs open in the secondary, Bunting, Dean and Edwards will be added to a mix of young candidates that include 2018 draft picks M.J. Stewart and Carlton Davis.

“Competition is a beautiful thing in this league,” Licht said.

WHAT’S NEXT

The Bucs have little flexibility under the salary cap to upgrade the roster and likely will need to release, trade or get six-time Pro Bowl defensive tackle Gerald McCoy — due to make $13 million this year — to agree to a sizeable pay cut to free up money to sign their draft picks and make other significant moves.

Magic president of basketball operations Jeff Weltman recaps 2018-19 season

Magic CEO Alex Martins hits the streets to thank fans

FOX Sports Florida & FOX Sports Sun team broadcast schedules

View the latest schedule for the FOX Sports Sun Outdoors block

NEWS AND FEATURES

Preview: Marlins searching for a series split in finale against Phillies

1h FOX Sports Florida

Preview: Tyler Glasnow gets the call as Rays look for another win over Red Sox

1h FOX Sports Florida

Marlins’ late comeback comes up short in 12-9 loss to Phillies

13h FOX Sports Florida2116251233657

  • LIVE NOWFox Sports Florida
    • FS FloridaFocused – PBA Tour
  • FEATUREDFox Sports FloridaFull Listings
    • FS FloridaToday 12:00p ET Marlins Clubhouse
    • FS FloridaToday 12:30p ET Marlins Live! Pregame
    • FS FloridaToday 1:00p ET Women’s College Lacrosse – ACC Final
    • FS FloridaToday 1:00p ET Marlins at Phillies
  • LIVE NOWFox Sports Sun
    • FS SunFocused – PBA Tour
    • MLBFS SunRays at Red Sox RE-AIR
  • FEATUREDFox Sports SunFull Listings
    • FS SunToday 12:30p ET Rays Live! Pregame
    • FS SunToday 1:00p ET Rays at Red Sox
    • FS SunToday 4:00p ET Rays Live! Postgame
    • FS SunTomorrow 8:00p ET Rays at Royals

FOX Sports Go

032719-fsf-mlb-tampa-bay-rays-fsgo-go-app-300-100
Miami Marlins fs go app 300x100

Hot Topics

Miami Marlins

  1. Preview: Marlins searching for a series split in finale against Phillies
  2. Marlins’ late comeback comes up short in 12-9 loss to Phillies
  3. WATCH: Jorge Alfaro has the hot bat for Marlins in Philly
  4. Marlins shut out by Phillies after 90-minute rain delay, series even at one apiece
  5. Marlins manager Don Mattingly on Jose Urena’s start, shutout loss to Phillies

More Miami MarlinsTampa Bay Rays

  1. Preview: Tyler Glasnow gets the call as Rays look for another win over Red Sox
  2. Charlie Morton pitches 6 shutout innings in Rays’ 2-1 series-opening win over Red Sox
  3. Emilio Pagan on his mentality: ‘Attack hitters and throw strikes’
  4. Kevin Cash on today’s pitching performances, play of Mike Zunino
  5. Mike Zunino on his performance behind the plate, Rays’ bullpen

More Tampa Bay RaysFlorida Panthers

  1. Florida Panthers exit interview: Aleksander Barkov on hiring of coach Joel Quenneville, his growth as a leader
  2. Florida Panthers exit interview: Jonathan Huberdeau
  3. Panthers to select 13th overall in 2019 NHL draft
  4. One on one with new Florida Panthers coach Joel Quenneville
  5. WATCH: Joel Quenneville introduced as new Florida Panthers coach

More Florida PanthersTampa Bay Lightning

  1. Lightning GM Julien BriseBois disappointed, still confident in coach Cooper after quick postseason exit
  2. Tampa Bay Lightning press conference: GM Julien BriseBois on 2018-19 season, playoff exit
  3. John Tortorella on Blue Jackets sweeping Lightning
  4. Does an unceremonious end diminish the Lightning’s historic season?
  5. Jon Cooper breaks down a ‘depressing’ end to Lightning’s season

More Tampa Bay LightningMiami Heat

  1. Miami Heat exit interview: Kelly Olynyk on building collectively, individually for next season
  2. ‘Inside the Heat: Chris Bosh’ premiers April 24 on FOX Sports Sun
  3. Miami Heat exit interview: Derrick Jones. Jr.
  4. Erik Spoelstra press conference part 2: On Justise Winslow, Dion Waiters’ summer, what it takes to win
  5. Pat Riley press conference part 3: On Udonis Haslem, Goran Dragic’s contract, progress of Winslow and Richardson

More Miami HeatOrlando Magic

  1. Magic president of basketball operations Jeff Weltman recaps 2018-19 season
  2. Magic CEO Alex Martins hits the streets to thank fans
  3. Magic take step forward despite exit from playoffs
  4. Terrence Ross takes pride in helping Magic return to playoffs
  5. Nikola Vucevic on Magic-Raptors series: ‘As the series went on, they started playing much better’

More Orlando MagicMiami Dolphins

  1. Dolphins new QB Josh Rosen bids goodbye to Arizona, congratulates Kyler Murray
  2. Dolphins bolster defense, provide Josh Rosen with another shot to be franchise QB
  3. Dolphins acquire QB Josh Rosen from Cardinals for 62nd pick, 5th-rounder in 2020
  4. Dolphins go defense in 1st round, draft Clemson DT Christian Wilkins with 13th pick
  5. Dolphins Draft Preview: Franchise QB likely out of reach, building foundation with new coach Brian Flores is focal point

More Miami DolphinsTampa Bay Buccaneers

  1. Bucs rebuild on defense, surround Jameis Winston with playmakers in NFL Draft
  2. Buccaneers take Lou Groza Award winning kicker Matt Gay in 5th round
  3. Buccaneers select Central Michigan CB Sean Bunting 39th overall in NFL draft
  4. Buccaneers take LSU’s Devin White with 5th overall pick
  5. Buccaneers Draft Preview: Filling holes in leaky defense priority for new coach Bruce Arians, GM Jason Licht

More Tampa Bay BuccaneersJacksonville Jaguars

  1. Jaguars take chance on Murray State LB Quincy Williams with 98th overall pick
  2. Jaguars continue to retool backfield, draft Temple RB Ryquell Armstead in 5th round
  3. Jaguars select Florida RT Jawaan Taylor with 35th pick, get Nick Foles help in 2nd, 3rd rounds
  4. Jaguars add to deep defense, select Kentucky DE Josh Allen with 7th overall pick
  5. Jaguars Draft Preview: Building around newly acquired QB Nick Foles paramount

More Jacksonville JaguarsFlorida Gators

  1. Mike White bolsters Gators’ roster with recruits, transfer Anthony Duruji
  2. Fourth-year junior forward Keith Stone to transfer from Florida after his graduation
  3. Florida goes down to Michigan in 2nd round of NCAA Tournament
  4. No. 10 seed Florida finishes strong to upset Nevada 70-61
  5. Jalen Hudson, Gators ready for Nevada’s Martin twins

More Florida GatorsFlorida State Seminoles

  1. Florida State’s season ends with Sweet 16 loss to Gonzaga
  2. Florida State in Sweet 16 after taking down Ja Morant, Murray State
  3. FSU withstands a 3-point barrage to hold off Vermont in 1st round of NCAA Tournament
  4. FSU cracks top 10 in final Associated Press poll of the season
  5. March Madness: Florida State, Florida, UCF punch tickets to Big Dance

More Florida State SeminolesMiami Hurricanes

  1. Highly touted combo guard Harlond Beverly signs with Miami Hurricanes
  2. Fitting in: Tate Martell making a smooth transition to Miami, ready to compete for starting QB job
  3. End of the road: Miami’s season comes to a close with loss to Virginia Tech in 2nd round of ACC tourney
  4. Four score in double figures as Miami takes care of Wake Forest in opening round of ACC tournament
  5. Miami can’t hang with Nickeil Alexander-Walker, No. 15 Virginia Tech in 84-70 loss

More Miami Hurricanes

FOX 35

Bucs rebuild on defense, surround Jameis Winston with playmakers in NFL Draft

13h FOX Sports Florida

Jaguars take chance on Murray State LB Quincy Williams with 98th overall pick

13h FOX Sports Florida

Charlie Morton pitches 6 shutout innings in Rays’ 2-1 series-opening win over Red Sox

15h FOX Sports Florida

Dolphins new QB Josh Rosen bids goodbye to Arizona, congratulates Kyler Murray

16h FOX Sports Florida

Dolphins bolster defense, provide Josh Rosen with another shot to be franchise QB

16h FOX Sports Florida

Buccaneers take Lou Groza Award winning kicker Matt Gay in 5th round

17h FOX Sports Florida

Jaguars continue to retool backfield, draft Temple RB Ryquell Armstead in 5th round

19h FOX Sports Florida

Marlins shut out by Phillies after 90-minute rain delay, series even at one apiece

Yesterday FOX Sports Florida

Dolphins acquire QB Josh Rosen from Cardinals for 62nd pick, 5th-rounder in 2020

Yesterday FOX Sports Florida

Buccaneers select Central Michigan CB Sean Bunting 39th overall in NFL draft

Yesterday FOX Sports Florida

Jaguars select Florida RT Jawaan Taylor with 35th pick, get Nick Foles help in 2nd, 3rd rounds

Yesterday FOX Sports Florida

Rays-Red Sox series opener washed out; day-night doubleheader rescheduled for June 8

Yesterday FOX Sports Florida24:17

Magic president of basketball operations Jeff Weltman recaps 2018-19 season

Yesterday FOX Sports Florida

Starlin Castro’s clutch 2-run game winning homer lifts Marlins over Phillies in 10th inning

Apr 26 FOX Sports Florida

Dolphins go defense in 1st round, draft Clemson DT Christian Wilkins with 13th pick

Apr 25 FOX Sports Florida

Jaguars add to deep defense, select Kentucky DE Josh Allen with 7th overall pick

Apr 25 FOX Sports Florida

Buccaneers take LSU’s Devin White with 5th overall pick

Apr 25 FOX Sports Florida

Jaguars Draft Preview: Building around newly acquired QB Nick Foles paramount

Apr 25 FOX Sports Florida0:30

Magic CEO Alex Martins hits the streets to thank fans

Apr 25 FOX Sports Florida

Dolphins Draft Preview: Franchise QB likely out of reach, building foundation with new coach Brian Flores is focal point

Apr 25 FOX Sports Florida

Buccaneers Draft Preview: Filling holes in leaky defense priority for new coach Bruce Arians, GM Jason Licht

Apr 25 FOX Sports Florida1:21

Marlins pitcher Jose Quijada reflects on Major League debut

Apr 24 FOX Sports Florida

[this.toString()]

, {type: ‘application/x-www-form-urlencoded’} ); }; */ URLSearchParamsProto.toJSON = function toJSON() { return {}; }; URLSearchParamsProto.toString = function toString() { var dict = this[secret], query = [], i, key, name, value; for (key in dict) { name = encode(key); for ( i = 0, value = dict[key]; i < value.length; i++ ) { query.push(name + ‘=’ + encode(value[i])); } } return query.join(‘&’); }; URLSearchParams = (module.exports = global.URLSearchParams || URLSearchParams); (function (URLSearchParamsProto) { var iterable = (function () { try { return !!Symbol.iterator; } catch(error) { return false; } }()); // mostly related to issue #24 if (!(‘forEach’ in URLSearchParamsProto)) { URLSearchParamsProto.forEach = function forEach(callback, thisArg) { var names = Object.create(null); this.toString() .replace(/=[\s\S]*?(?:&|$)/g, ‘=’) .split(‘=’) .forEach(function (name) { if (!name.length || name in names) return; (names[name] = this.getAll(name)).forEach(function(value) { callback.call(thisArg, value, name, this); }, this); }, this); }; } if (!(‘keys’ in URLSearchParamsProto)) { URLSearchParamsProto.keys = function keys() { var items = []; this.forEach(function(value, name) { items.push(name); }); var iterator = { next: function() { var value = items.shift(); return {done: value === undefined, value: value}; } }; if (iterable) { iterator[Symbol.iterator] = function() { return iterator; }; } return iterator; }; } if (!(‘values’ in URLSearchParamsProto)) { URLSearchParamsProto.values = function values() { var items = []; this.forEach(function(value) { items.push(value); }); var iterator = { next: function() { var value = items.shift(); return {done: value === undefined, value: value}; } }; if (iterable) { iterator[Symbol.iterator] = function() { return iterator; }; } return iterator; }; } if (!(‘entries’ in URLSearchParamsProto)) { URLSearchParamsProto.entries = function entries() { var items = []; this.forEach(function(value, name) { items.push([name, value]); }); var iterator = { next: function() { var value = items.shift(); return {done: value === undefined, value: value}; } }; if (iterable) { iterator[Symbol.iterator] = function() { return iterator; }; } return iterator; }; } if (iterable && !(Symbol.iterator in URLSearchParamsProto)) { URLSearchParamsProto[Symbol.iterator] = URLSearchParamsProto.entries; } if (!(‘sort’ in URLSearchParamsProto)) { URLSearchParamsProto.sort = function sort() { var entries = this.entries(), entry = entries.next(), done = entry.done, keys = [], values = Object.create(null), i, key, value ; while (!done) { value = entry.value; key = value[0]; keys.push(key); if (!(key in values)) { values[key] = []; } values[key].push(value[1]); entry = entries.next(); done = entry.done; } // not the champion in efficiency // but these two bits just do the job keys.sort(); for (i = 0; i < keys.length; i++) { this.delete(keys[i]); } for (i = 0; i < keys.length; i++) { key = keys[i]; this.append(key, values[key].shift()); } }; } }(URLSearchParams.prototype)); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ “./node_modules/webpack/buildin/global.js”))) /***/ }), /***/ “./node_modules/usertiming/src/usertiming.js”: /*!***************************************************!*\ !*** ./node_modules/usertiming/src/usertiming.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-env browser,amd,node */ // // usertiming.js // // A polyfill for UserTiming (http://www.w3.org/TR/user-timing/) // // Copyright 2013 Nic Jansma // http://nicj.net // // https://github.com/nicjansma/usertiming.js // // Licensed under the MIT license // (function(window) { “use strict”; // allow running in Node.js environment if (typeof window === “undefined”) { window = {}; } // prepare base perf object if (typeof window.performance === “undefined”) { window.performance = {}; } // We need to keep a global reference to the window.performance object to // prevent any added properties from being garbage-collected in Safari 8. // https://bugs.webkit.org/show_bug.cgi?id=137407 window._perfRefForUserTimingPolyfill = window.performance; // // Note what we shimmed // window.performance.userTimingJsNow = false; window.performance.userTimingJsNowPrefixed = false; window.performance.userTimingJsUserTiming = false; window.performance.userTimingJsUserTimingPrefixed = false; window.performance.userTimingJsPerformanceTimeline = false; window.performance.userTimingJsPerformanceTimelinePrefixed = false; // for prefixed support var prefixes = []; var methods = []; var methodTest = null; var i, j; // // window.performance.now() shim // http://www.w3.org/TR/hr-time/ // if (typeof window.performance.now !== “function”) { window.performance.userTimingJsNow = true; // copy prefixed version over if it exists methods = [“webkitNow”, “msNow”, “mozNow”]; for (i = 0; i < methods.length; i++) { if (typeof window.performance[methods[i]] === “function”) { window.performance.now = window.performance[methods[i]]; window.performance.userTimingJsNowPrefixed = true; break; } } // // now() should be a DOMHighResTimeStamp, which is defined as being a time relative // to navigationStart of the PerformanceTiming (PT) interface. If this browser supports // PT, use that as our relative start. Otherwise, use “now” as the start and all other // now() calls will be relative to our initialization. // var nowOffset = +(new Date()); if (window.performance.timing && window.performance.timing.navigationStart) { nowOffset = window.performance.timing.navigationStart; } else if (typeof process !== “undefined” && typeof process.hrtime === “function”) { nowOffset = process.hrtime(); window.performance.now = function() { var time = process.hrtime(nowOffset); return time[0] * 1e3 + time[1] * 1e-6; } } if (typeof window.performance.now !== “function”) { // No browser support, fall back to Date.now if (Date.now) { window.performance.now = function() { return Date.now() – nowOffset; }; } else { // no Date.now support, get the time from new Date() window.performance.now = function() { return +(new Date()) – nowOffset; }; } } } // // PerformanceTimeline (PT) shims // http://www.w3.org/TR/performance-timeline/ // /** * Adds an object to our internal Performance Timeline array. * * Will be blank if the environment supports PT. */ var addToPerformanceTimeline = function() { }; /** * Clears the specified entry types from our timeline array. * * Will be blank if the environment supports PT. */ var clearEntriesFromPerformanceTimeline = function() { }; // performance timeline array var performanceTimeline = []; // whether or not the timeline will require sort on getEntries() var performanceTimelineRequiresSort = false; // whether or not ResourceTiming is natively supported but UserTiming is // not (eg Firefox 35) var hasNativeGetEntriesButNotUserTiming = false; // // If getEntries() and mark() aren’t defined, we’ll assume // we have to shim at least some PT functions. // if (typeof window.performance.getEntries !== “function” || typeof window.performance.mark !== “function”) { if (typeof window.performance.getEntries === “function” && typeof window.performance.mark !== “function”) { hasNativeGetEntriesButNotUserTiming = true; } window.performance.userTimingJsPerformanceTimeline = true; // copy prefixed version over if it exists prefixes = [“webkit”, “moz”]; methods = [“getEntries”, “getEntriesByName”, “getEntriesByType”]; for (i = 0; i < methods.length; i++) { for (j = 0; j < prefixes.length; j++) { // prefixed method will likely have an upper-case first letter methodTest = prefixes[j] + methods[i].substr(0, 1).toUpperCase() + methods[i].substr(1); if (typeof window.performance[methodTest] === “function”) { window.performance[methods[i]] = window.performance[methodTest]; window.performance.userTimingJsPerformanceTimelinePrefixed = true; } } } /** * Adds an object to our internal Performance Timeline array. * * @param {Object} obj PerformanceEntry */ addToPerformanceTimeline = function(obj) { performanceTimeline.push(obj); // // If we insert a measure, its startTime may be out of order // from the rest of the entries because the use can use any // mark as the start time. If so, note we have to sort it before // returning getEntries(); // if (obj.entryType === “measure”) { performanceTimelineRequiresSort = true; } }; /** * Ensures our PT array is in the correct sorted order (by startTime) */ var ensurePerformanceTimelineOrder = function() { if (!performanceTimelineRequiresSort) { return; } // // Measures, which may be in this list, may enter the list in // an unsorted order. For example: // // 1. measure(“a”) // 2. mark(“start_mark”) // 3. measure(“b”, “start_mark”) // 4. measure(“c”) // 5. getEntries() // // When calling #5, we should return [a,c,b] because technically the start time // of c is “0” (navigationStart), which will occur before b’s start time due to the mark. // performanceTimeline.sort(function(a, b) { return a.startTime – b.startTime; }); performanceTimelineRequiresSort = false; }; /** * Clears the specified entry types from our timeline array. * * @param {string} entryType Entry type (eg “mark” or “measure”) * @param {string} [name] Entry name (optional) */ clearEntriesFromPerformanceTimeline = function(entryType, name) { // clear all entries from the perf timeline i = 0; while (i < performanceTimeline.length) { if (performanceTimeline[i].entryType !== entryType) { // unmatched entry type i++; continue; } if (typeof name !== “undefined” && performanceTimeline[i].name !== name) { // unmatched name i++; continue; } // this entry matches our criteria, remove just it performanceTimeline.splice(i, 1); } }; if (typeof window.performance.getEntries !== “function” || hasNativeGetEntriesButNotUserTiming) { var origGetEntries = window.performance.getEntries; /** * Gets all entries from the Performance Timeline. * http://www.w3.org/TR/performance-timeline/#dom-performance-getentries * * NOTE: This will only ever return marks and measures. * * @returns {PerformanceEntry[]} Array of PerformanceEntrys */ window.performance.getEntries = function() { ensurePerformanceTimelineOrder(); // get a copy of all of our entries var entries = performanceTimeline.slice(0); // if there was a native version of getEntries, add that if (hasNativeGetEntriesButNotUserTiming && origGetEntries) { // merge in native Array.prototype.push.apply(entries, origGetEntries.call(window.performance)); // sort by startTime entries.sort(function(a, b) { return a.startTime – b.startTime; }); } return entries; }; } if (typeof window.performance.getEntriesByType !== “function” || hasNativeGetEntriesButNotUserTiming) { var origGetEntriesByType = window.performance.getEntriesByType; /** * Gets all entries from the Performance Timeline of the specified type. * http://www.w3.org/TR/performance-timeline/#dom-performance-getentriesbytype * * NOTE: This will only work for marks and measures. * * @param {string} entryType Entry type (eg “mark” or “measure”) * * @returns {PerformanceEntry[]} Array of PerformanceEntrys */ window.performance.getEntriesByType = function(entryType) { // we only support marks/measures if (typeof entryType === “undefined” || (entryType !== “mark” && entryType !== “measure”)) { if (hasNativeGetEntriesButNotUserTiming && origGetEntriesByType) { // native version exists, forward return origGetEntriesByType.call(window.performance, entryType); } return []; } // see note in ensurePerformanceTimelineOrder() on why this is required if (entryType === “measure”) { ensurePerformanceTimelineOrder(); } // find all entries of entryType var entries = []; for (i = 0; i < performanceTimeline.length; i++) { if (performanceTimeline[i].entryType === entryType) { entries.push(performanceTimeline[i]); } } return entries; }; } if (typeof window.performance.getEntriesByName !== “function” || hasNativeGetEntriesButNotUserTiming) { var origGetEntriesByName = window.performance.getEntriesByName; /** * Gets all entries from the Performance Timeline of the specified * name, and optionally, type. * http://www.w3.org/TR/performance-timeline/#dom-performance-getentriesbyname * * NOTE: This will only work for marks and measures. * * @param {string} name Entry name * @param {string} [entryType] Entry type (eg “mark” or “measure”) * * @returns {PerformanceEntry[]} Array of PerformanceEntrys */ window.performance.getEntriesByName = function(name, entryType) { if (entryType && entryType !== “mark” && entryType !== “measure”) { if (hasNativeGetEntriesButNotUserTiming && origGetEntriesByName) { // native version exists, forward return origGetEntriesByName.call(window.performance, name, entryType); } return []; } // see note in ensurePerformanceTimelineOrder() on why this is required if (typeof entryType !== “undefined” && entryType === “measure”) { ensurePerformanceTimelineOrder(); } // find all entries of the name and (optionally) type var entries = []; for (i = 0; i < performanceTimeline.length; i++) { if (typeof entryType !== “undefined” && performanceTimeline[i].entryType !== entryType) { continue; } if (performanceTimeline[i].name === name) { entries.push(performanceTimeline[i]); } } if (hasNativeGetEntriesButNotUserTiming && origGetEntriesByName) { // merge in native Array.prototype.push.apply(entries, origGetEntriesByName.call(window.performance, name, entryType)); // sort by startTime entries.sort(function(a, b) { return a.startTime – b.startTime; }); } return entries; }; } } // // UserTiming support // if (typeof window.performance.mark !== “function”) { window.performance.userTimingJsUserTiming = true; // copy prefixed version over if it exists prefixes = [“webkit”, “moz”, “ms”]; methods = [“mark”, “measure”, “clearMarks”, “clearMeasures”]; for (i = 0; i < methods.length; i++) { for (j = 0; j < prefixes.length; j++) { // prefixed method will likely have an upper-case first letter methodTest = prefixes[j] + methods[i].substr(0, 1).toUpperCase() + methods[i].substr(1); if (typeof window.performance[methodTest] === “function”) { window.performance[methods[i]] = window.performance[methodTest]; window.performance.userTimingJsUserTimingPrefixed = true; } } } // only used for measure(), to quickly see the latest timestamp of a mark var marks = {}; if (typeof window.performance.mark !== “function”) { /** * UserTiming mark * http://www.w3.org/TR/user-timing/#dom-performance-mark * * @param {string} markName Mark name */ window.performance.mark = function(markName) { var now = window.performance.now(); // mark name is required if (typeof markName === “undefined”) { throw new SyntaxError(“Mark name must be specified”); } // mark name can’t be a NT timestamp if (window.performance.timing && markName in window.performance.timing) { throw new SyntaxError(“Mark name is not allowed”); } if (!marks[markName]) { marks[markName] = []; } marks[markName].push(now); // add to perf timeline as well addToPerformanceTimeline({ entryType: “mark”, name: markName, startTime: now, duration: 0 }); }; } if (typeof window.performance.clearMarks !== “function”) { /** * UserTiming clear marks * http://www.w3.org/TR/user-timing/#dom-performance-clearmarks * * @param {string} markName Mark name */ window.performance.clearMarks = function(markName) { if (!markName) { // clear all marks marks = {}; } else { marks[markName] = []; } clearEntriesFromPerformanceTimeline(“mark”, markName); }; } if (typeof window.performance.measure !== “function”) { /** * UserTiming measure * http://www.w3.org/TR/user-timing/#dom-performance-measure * * @param {string} measureName Measure name * @param {string} [startMark] Start mark name * @param {string} [endMark] End mark name */ window.performance.measure = function(measureName, startMark, endMark) { var now = window.performance.now(); if (typeof measureName === “undefined”) { throw new SyntaxError(“Measure must be specified”); } // if there isn’t a startMark, we measure from navigationStart to now if (!startMark) { // add to perf timeline as well addToPerformanceTimeline({ entryType: “measure”, name: measureName, startTime: 0, duration: now }); return; } // // If there is a startMark, check for it first in the NavigationTiming interface, // then check our own marks. // var startMarkTime = 0; if (window.performance.timing && startMark in window.performance.timing) { // mark cannot have a timing of 0 if (startMark !== “navigationStart” && window.performance.timing[startMark] === 0) { throw new Error(startMark + ” has a timing of 0″); } // time is the offset of this mark to navigationStart’s time startMarkTime = window.performance.timing[startMark] – window.performance.timing.navigationStart; } else if (startMark in marks) { startMarkTime = marks[startMark][marks[startMark].length – 1]; } else { throw new Error(startMark + ” mark not found”); } // // If there is a endMark, check for it first in the NavigationTiming interface, // then check our own marks. // var endMarkTime = now; if (endMark) { endMarkTime = 0; if (window.performance.timing && endMark in window.performance.timing) { // mark cannot have a timing of 0 if (endMark !== “navigationStart” && window.performance.timing[endMark] === 0) { throw new Error(endMark + ” has a timing of 0″); } // time is the offset of this mark to navigationStart’s time endMarkTime = window.performance.timing[endMark] – window.performance.timing.navigationStart; } else if (endMark in marks) { endMarkTime = marks[endMark][marks[endMark].length – 1]; } else { throw new Error(endMark + ” mark not found”); } } // add to our measure array var duration = endMarkTime – startMarkTime; // add to perf timeline as well addToPerformanceTimeline({ entryType: “measure”, name: measureName, startTime: startMarkTime, duration: duration }); }; } if (typeof window.performance.clearMeasures !== “function”) { /** * UserTiming clear measures * http://www.w3.org/TR/user-timing/#dom-performance-clearmeasures * * @param {string} measureName Measure name */ window.performance.clearMeasures = function(measureName) { clearEntriesFromPerformanceTimeline(“measure”, measureName); }; } } // // Export UserTiming to the appropriate location. // // When included directly via a script tag in the browser, we’re good as we’ve been // updating the window.performance object. // if (true) { // // AMD / RequireJS // !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { return window.performance; }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} }(typeof window !== “undefined” ? window : undefined)); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ “./node_modules/process/browser.js”))) /***/ }), /***/ “./node_modules/webpack/buildin/global.js”: /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function(“return this”)(); } catch (e) { // This works if the window reference is available if (typeof window === “object”) g = window; } // g can still be undefined, but nothing to do about it… // We return undefined, instead of nothing here, so it’s // easier to handle this case. if(!global) { …} module.exports = g; /***/ }), /***/ “./node_modules/whatwg-fetch/fetch.js”: /*!********************************************!*\ !*** ./node_modules/whatwg-fetch/fetch.js ***! \********************************************/ /*! exports provided: Headers, Request, Response, DOMException, fetch */ /***/ (function(module, __webpack_exports__, __webpack_require__) { “use strict”; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “Headers”, function() { return Headers; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “Request”, function() { return Request; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “Response”, function() { return Response; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “DOMException”, function() { return DOMException; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “fetch”, function() { return fetch; }); var support = { searchParams: ‘URLSearchParams’ in self, iterable: ‘Symbol’ in self && ‘iterator’ in Symbol, blob: ‘FileReader’ in self && ‘Blob’ in self && (function() { try { new Blob() return true } catch (e) { return false } })(), formData: ‘FormData’ in self, arrayBuffer: ‘ArrayBuffer’ in self } function isDataView(obj) { return obj && DataView.prototype.isPrototypeOf(obj) } if (support.arrayBuffer) { var viewClasses = [ ‘[object Int8Array]’, ‘[object Uint8Array]’, ‘[object Uint8ClampedArray]’, ‘[object Int16Array]’, ‘[object Uint16Array]’, ‘[object Int32Array]’, ‘[object Uint32Array]’, ‘[object Float32Array]’, ‘[object Float64Array]’ ] var isArrayBufferView = ArrayBuffer.isView || function(obj) { return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 } } function normalizeName(name) { if (typeof name !== ‘string’) { name = String(name) } if (/[^a-z0-9\-#$%&’*+.^_`|~]/i.test(name)) { throw new TypeError(‘Invalid character in header field name’) } return name.toLowerCase() } function normalizeValue(value) { if (typeof value !== ‘string’) { value = String(value) } return value } // Build a destructive iterator for the value list function iteratorFor(items) { var iterator = { next: function() { var value = items.shift() return {done: value === undefined, value: value} } } if (support.iterable) { iterator[Symbol.iterator] = function() { return iterator } } return iterator } function Headers(headers) { this.map = {} if (headers instanceof Headers) { headers.forEach(function(value, name) { this.append(name, value) }, this) } else if (Array.isArray(headers)) { headers.forEach(function(header) { this.append(header[0], header[1]) }, this) } else if (headers) { Object.getOwnPropertyNames(headers).forEach(function(name) { this.append(name, headers[name]) }, this) } } Headers.prototype.append = function(name, value) { name = normalizeName(name) value = normalizeValue(value) var oldValue = this.map[name] this.map[name] = oldValue ? oldValue + ‘, ‘ + value : value } Headers.prototype[‘delete’] = function(name) { delete this.map[normalizeName(name)] } Headers.prototype.get = function(name) { name = normalizeName(name) return this.has(name) ? this.map[name] : null } Headers.prototype.has = function(name) { return this.map.hasOwnProperty(normalizeName(name)) } Headers.prototype.set = function(name, value) { this.map[normalizeName(name)] = normalizeValue(value) } Headers.prototype.forEach = function(callback, thisArg) { for (var name in this.map) { if (this.map.hasOwnProperty(name)) { callback.call(thisArg, this.map[name], name, this) } } } Headers.prototype.keys = function() { var items = [] this.forEach(function(value, name) { items.push(name) }) return iteratorFor(items) } Headers.prototype.values = function() { var items = [] this.forEach(function(value) { items.push(value) }) return iteratorFor(items) } Headers.prototype.entries = function() { var items = [] this.forEach(function(value, name) { items.push([name, value]) }) return iteratorFor(items) } if (support.iterable) { Headers.prototype[Symbol.iterator] = Headers.prototype.entries } function consumed(body) { if (body.bodyUsed) { return Promise.reject(new TypeError(‘Already read’)) } body.bodyUsed = true } function fileReaderReady(reader) { return new Promise(function(resolve, reject) { reader.onload = function() { resolve(reader.result) } reader.onerror = function() { reject(reader.error) } }) } function readBlobAsArrayBuffer(blob) { var reader = new FileReader() var promise = fileReaderReady(reader) reader.readAsArrayBuffer(blob) return promise } function readBlobAsText(blob) { var reader = new FileReader() var promise = fileReaderReady(reader) reader.readAsText(blob) return promise } function readArrayBufferAsText(buf) { var view = new Uint8Array(buf) var chars = new Array(view.length) for (var i = 0; i < view.length; i++) { chars[i] = String.fromCharCode(view[i]) } return chars.join(”) } function bufferClone(buf) { if (buf.slice) { return buf.slice(0) } else { var view = new Uint8Array(buf.byteLength) view.set(new Uint8Array(buf)) return view.buffer } } function Body() { this.bodyUsed = false this._initBody = function(body) { this._bodyInit = body if (!body) { this._bodyText = ” } else if (typeof body === ‘string’) { this._bodyText = body } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { this._bodyBlob = body } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { this._bodyFormData = body } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { this._bodyText = body.toString() } else if (support.arrayBuffer && support.blob && isDataView(body)) { this._bodyArrayBuffer = bufferClone(body.buffer) // IE 10-11 can’t handle a DataView body. this._bodyInit = new Blob([this._bodyArrayBuffer]) } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { this._bodyArrayBuffer = bufferClone(body) } else { this._bodyText = body = Object.prototype.toString.call(body) } if (!this.headers.get(‘content-type’)) { if (typeof body === ‘string’) { this.headers.set(‘content-type’, ‘text/plain;charset=UTF-8’) } else if (this._bodyBlob && this._bodyBlob.type) { this.headers.set(‘content-type’, this._bodyBlob.type) } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { this.headers.set(‘content-type’, ‘application/x-www-form-urlencoded;charset=UTF-8’) } } } if (support.blob) { this.blob = function() { var rejected = consumed(this) if (rejected) { return rejected } if (this._bodyBlob) { return Promise.resolve(this._bodyBlob) } else if (this._bodyArrayBuffer) { return Promise.resolve(new Blob([this._bodyArrayBuffer])) } else if (this._bodyFormData) { throw new Error(‘could not read FormData body as blob’) } else { return Promise.resolve(new Blob([this._bodyText])) } } this.arrayBuffer = function() { if (this._bodyArrayBuffer) { return consumed(this) || Promise.resolve(this._bodyArrayBuffer) } else { return this.blob().then(readBlobAsArrayBuffer) } } } this.text = function() { var rejected = consumed(this) if (rejected) { return rejected } if (this._bodyBlob) { return readBlobAsText(this._bodyBlob) } else if (this._bodyArrayBuffer) { return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) } else if (this._bodyFormData) { throw new Error(‘could not read FormData body as text’) } else { return Promise.resolve(this._bodyText) } } if (support.formData) { this.formData = function() { return this.text().then(decode) } } this.json = function() { return this.text().then(JSON.parse) } return this } // HTTP methods whose capitalization should be normalized var methods = [‘DELETE’, ‘GET’, ‘HEAD’, ‘OPTIONS’, ‘POST’, ‘PUT’] function normalizeMethod(method) { var upcased = method.toUpperCase() return methods.indexOf(upcased) > -1 ? upcased : method } function Request(input, options) { options = options || {} var body = options.body if (input instanceof Request) { if (input.bodyUsed) { throw new TypeError(‘Already read’) } this.url = input.url this.credentials = input.credentials if (!options.headers) { this.headers = new Headers(input.headers) } this.method = input.method this.mode = input.mode this.signal = input.signal if (!body && input._bodyInit != null) { body = input._bodyInit input.bodyUsed = true } } else { this.url = String(input) } this.credentials = options.credentials || this.credentials || ‘same-origin’ if (options.headers || !this.headers) { this.headers = new Headers(options.headers) } this.method = normalizeMethod(options.method || this.method || ‘GET’) this.mode = options.mode || this.mode || null this.signal = options.signal || this.signal this.referrer = null if ((this.method === ‘GET’ || this.method === ‘HEAD’) && body) { throw new TypeError(‘Body not allowed for GET or HEAD requests’) } this._initBody(body) } Request.prototype.clone = function() { return new Request(this, {body: this._bodyInit}) } function decode(body) { var form = new FormData() body .trim() .split(‘&’) .forEach(function(bytes) { if (bytes) { var split = bytes.split(‘=’) var name = split.shift().replace(/\+/g, ‘ ‘) var value = split.join(‘=’).replace(/\+/g, ‘ ‘) form.append(decodeURIComponent(name), decodeURIComponent(value)) } }) return form } function parseHeaders(rawHeaders) { var headers = new Headers() // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space // https://tools.ietf.org/html/rfc7230#section-3.2 var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ‘ ‘) preProcessedHeaders.split(/\r?\n/).forEach(function(line) { var parts = line.split(‘:’) var key = parts.shift().trim() if (key) { var value = parts.join(‘:’).trim() headers.append(key, value) } }) return headers } Body.call(Request.prototype) function Response(bodyInit, options) { if (!options) { options = {} } this.type = ‘default’ this.status = options.status === undefined ? 200 : options.status this.ok = this.status >= 200 && this.status < 300 this.statusText = ‘statusText’ in options ? options.statusText : ‘OK’ this.headers = new Headers(options.headers) this.url = options.url || ” this._initBody(bodyInit) } Body.call(Response.prototype) Response.prototype.clone = function() { return new Response(this._bodyInit, { status: this.status, statusText: this.statusText, headers: new Headers(this.headers), url: this.url }) } Response.error = function() { var response = new Response(null, {status: 0, statusText: ”}) response.type = ‘error’ return response } var redirectStatuses = [301, 302, 303, 307, 308] Response.redirect = function(url, status) { if (redirectStatuses.indexOf(status) === -1) { throw new RangeError(‘Invalid status code’) } return new Response(null, {status: status, headers: {location: url}}) } var DOMException = self.DOMException try { new DOMException() } catch (err) { DOMException = function(message, name) { this.message = message this.name = name var error = Error(message) this.stack = error.stack } DOMException.prototype = Object.create(Error.prototype) DOMException.prototype.constructor = DOMException } function fetch(input, init) { return new Promise(function(resolve, reject) { var request = new Request(input, init) if (request.signal && request.signal.aborted) { return reject(new DOMException(‘Aborted’, ‘AbortError’)) } var xhr = new XMLHttpRequest() function abortXhr() { xhr.abort() } xhr.onload = function() { var options = { status: xhr.status, statusText: xhr.statusText, headers: parseHeaders(xhr.getAllResponseHeaders() || ”) } options.url = ‘responseURL’ in xhr ? xhr.responseURL : options.headers.get(‘X-Request-URL’) var body = ‘response’ in xhr ? xhr.response : xhr.responseText resolve(new Response(body, options)) } xhr.onerror = function() { reject(new TypeError(‘Network request failed’)) } xhr.ontimeout = function() { reject(new TypeError(‘Network request failed’)) } xhr.onabort = function() { reject(new DOMException(‘Aborted’, ‘AbortError’)) } xhr.open(request.method, request.url, true) if (request.credentials === ‘include’) { xhr.withCredentials = true } else if (request.credentials === ‘omit’) { xhr.withCredentials = false } if (‘responseType’ in xhr && support.blob) { xhr.responseType = ‘blob’ } request.headers.forEach(function(value, name) { xhr.setRequestHeader(name, value) }) if (request.signal) { request.signal.addEventListener(‘abort’, abortXhr) xhr.onreadystatechange = function() { // DONE (success or failure) if (xhr.readyState === 4) { request.signal.removeEventListener(‘abort’, abortXhr) } } } xhr.send(typeof request._bodyInit === ‘undefined’ ? null : request._bodyInit) }) } fetch.polyfill = true if (!self.fetch) { self.fetch = fetch self.Headers = Headers self.Request = Request self.Response = Response } /***/ }), /***/ “./react-app-src/shared/constants.js”: /*!*******************************************!*\ !*** ./react-app-src/shared/constants.js ***! \*******************************************/ /*! exports provided: settings, global, widthRange, shareLinks, urlFilterObj, foxApiSettings, MVPDConsts */ /***/ (function(module, __webpack_exports__, __webpack_require__) { “use strict”; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “settings”, function() { return settings; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “global”, function() { return global; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “widthRange”, function() { return widthRange; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “shareLinks”, function() { return shareLinks; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “urlFilterObj”, function() { return urlFilterObj; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “foxApiSettings”, function() { return foxApiSettings; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “MVPDConsts”, function() { return MVPDConsts; }); var settings = { COLLECTIONS_URL: ‘/wp-json/fsd/v1/wp/video-collections/’, MPX_PLAYLIST_URL: ‘/wp-json/fsd/v1/wp/mpx-related-videos’, PARSELY_URL: ‘/wp-json/fsd/v1/wp/parsely-content/’, PARSELY_URL_V2: ‘/wp-json/fsd/v1/wp/parsely-content-v2/’, PODCAST_CLIPS_URL: ‘/wp-json/fsd/v1/wp/podcast-clips/’, PODCAST_EPISODES_URL: ‘/wp-json/fsd/v1/wp/podcast-episodes/’, MEDIA_LISTS_URL: ‘/wp-json/fsd/v1/wp/media-lists/’, REPLAYS_URL: ‘/wp-json/fsd/v1/replays/panels’ }; var global = { FSGO_URL: ‘https://www.foxsportsgo.com/’ }; var widthRange = { DESKTOP: ‘1280+’, LAPTOP: ‘1024-1279’, TABLET: ‘768-1023’, MOBILE: ‘-767’, DESKTOP_MOBILE: ‘-767,1280+’, TABLET_LAPTOP: ‘768-1279’ }; var shareLinks = { FB_SHARE: ‘https://www.facebook.com/sharer/sharer.php?u=’, TWITTER_SHARE: ‘https://twitter.com/intent/tweet?url=’, GOOGLE_PLUS: ‘https://plus.google.com/share?url=’, MAIL: ‘mailto:?subject=’ }; var urlFilterObj = { ‘auto_nascar’: ‘nascar’, ‘motorsports’: ‘motor’, ‘ncaa_football’: ‘college-football’ }; var foxApiSettings = { apiKey: “xKVbwnZ794xXP6nTbXFz0HcbSfxQDo20”, foxApi: { qa: “https://qa.api2.fox.com/v2.0”, dev: “https://dev.api2.fox.com/v2.0”, stage: “https://stage.api2.fox.com/v2.0”, prod: “https://api2.fox.com/v2.0” } }; var MVPDConsts = { processMsg: “We’re processing your provider credentials”, selectMsg: “Select Your TV Provider”, selectSubMsg: “Sign in to unlock live events and replays”, helpMsg1: “Don’t have a TV Provider? Get one”, helpMsg2: “Need Help?”, failMsg: “Something went wrong. Please try again later”, okBtnText: “OK”, helpAccessLink: “https://foxsports.com/watch/instant-access”, helpLink: “https://help.fox.com/s/topic/0TO1H000000HHQVWA4/fox-sports” }; /***/ }), /***/ “./react-app-src/shared/services/FetchService.js”: /*!*******************************************************!*\ !*** ./react-app-src/shared/services/FetchService.js ***! \*******************************************************/ /*! exports provided: get, post */ /***/ (function(module, __webpack_exports__, __webpack_require__) { “use strict”; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “get”, function() { return get; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “post”, function() { return post; }); /* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! isomorphic-fetch */ “./node_modules/isomorphic-fetch/fetch-npm-browserify.js”); /* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ “./react-app-src/shared/utils.js”); function fetchData(url, options, callback, error) { return isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default()(url, options).then(_utils__WEBPACK_IMPORTED_MODULE_1__[“handleFetchedErrors”]).then(function (response) { return response.json(); }).then(callback)[“catch”](error); } function sendPost(url, options, callback, error) { return isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default()(url, options).then(_utils__WEBPACK_IMPORTED_MODULE_1__[“handleFetchedErrors”]).then(callback)[“catch”](error); } function get(url, callback, error) { var customHeaders = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _utils__WEBPACK_IMPORTED_MODULE_1__[“headers”]; var options = Object.assign({ method: ‘GET’ }, customHeaders); return fetchData(url, options, callback, error); } function post(url, data, callback, error) { var customHeaders = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _utils__WEBPACK_IMPORTED_MODULE_1__[“headers”]; var options = Object.assign({ method: ‘POST’, body: JSON.stringify(data) }, customHeaders); return sendPost(url, options, callback, error); } /***/ }), /***/ “./react-app-src/shared/services/FsPlaylistService.js”: /*!************************************************************!*\ !*** ./react-app-src/shared/services/FsPlaylistService.js ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { “use strict”; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants */ “./react-app-src/shared/constants.js”); /* harmony import */ var _FetchService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FetchService */ “./react-app-src/shared/services/FetchService.js”); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(“Cannot call a class as a function”); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (“value” in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var FsPlaylistService = /*#__PURE__*/ function () { function FsPlaylistService() { _classCallCheck(this, FsPlaylistService); this.MpxPlaylist = null; this.parselyPlaylist = null; } _createClass(FsPlaylistService, [{ key: “getMpxPlaylist”, value: function getMpxPlaylist(endcard, limit, postId) { if (this.MpxPlaylist) { return this.MpxPlaylist; } this.MpxPlaylist = Object(_FetchService__WEBPACK_IMPORTED_MODULE_1__[“get”])(“”.concat(_constants__WEBPACK_IMPORTED_MODULE_0__[“settings”].MPX_PLAYLIST_URL, “?mpxfeed=”).concat(encodeURIComponent(endcard), “&limit=”).concat(limit, “&postId=”).concat(postId), function (json) { var data = json.data; return Array.isArray(data) ? data : [data]; }, function () { return []; }); return this.MpxPlaylist; } }, { key: “getParselyPlaylist”, value: function getParselyPlaylist(postId) { if (this.parselyPlaylist) { return this.parselyPlaylist; } this.parselyPlaylist = Object(_FetchService__WEBPACK_IMPORTED_MODULE_1__[“get”])(_constants__WEBPACK_IMPORTED_MODULE_0__[“settings”].PARSELY_URL + postId, function (json) { if (!json.success) return []; var data = json.data; return Array.isArray(data) ? data : [data]; }, function () { return []; }); return this.parselyPlaylist; } }, { key: “getParselyContentByTags”, value: function getParselyContentByTags() { var parselyFeedTags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ”; var defaultVideoTags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ”; var postId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; if (this.parselyPlaylist) { return this.parselyPlaylist; } var tags = ‘?parselytags=’ + parselyFeedTags + (defaultVideoTags && ‘&defaulttags=’ + defaultVideoTags) + ‘&postid=’ + postId; this.parselyPlaylist = Object(_FetchService__WEBPACK_IMPORTED_MODULE_1__[“get”])(_constants__WEBPACK_IMPORTED_MODULE_0__[“settings”].PARSELY_URL_V2 + tags, function (json) { if (!json.success) return []; var data = json.data; return Array.isArray(data) ? data : [data]; }, function () { return []; }); return this.parselyPlaylist; } }, { key: “getParselyContentByFeed”, value: function getParselyContentByFeed(feedUrl) { var postId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (this.playlist) { return this.playlist; } var url = ‘?feedurl=’ + encodeURIComponent(feedUrl) + ‘&postid=’ + postId; this.playlist = Object(_FetchService__WEBPACK_IMPORTED_MODULE_1__[“get”])(_constants__WEBPACK_IMPORTED_MODULE_0__[“settings”].PARSELY_URL_V2 + url, function (json) { if (!json.success) return []; var data = json.data; return Array.isArray(data) ? data : [data]; }, function () { return []; }); return this.playlist; } }]); return FsPlaylistService; }(); /* harmony default export */ __webpack_exports__[“default”] = (FsPlaylistService); /***/ }), /***/ “./react-app-src/shared/utils.js”: /*!***************************************!*\ !*** ./react-app-src/shared/utils.js ***! \***************************************/ /*! exports provided: headers, handleFetchedErrors, getPostId, assetsDomain, decodeHtmlEntities, parseImagesTag, parseSeconds, convertSecondsToTime, isFlashEnabled, isTabletOrMobile, isAndroid, getQueryString, getCookie, getAuthStatus */ /***/ (function(module, __webpack_exports__, __webpack_require__) { “use strict”; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “headers”, function() { return headers; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “handleFetchedErrors”, function() { return handleFetchedErrors; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “getPostId”, function() { return getPostId; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “assetsDomain”, function() { return assetsDomain; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “decodeHtmlEntities”, function() { return decodeHtmlEntities; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “parseImagesTag”, function() { return parseImagesTag; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “parseSeconds”, function() { return parseSeconds; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “convertSecondsToTime”, function() { return convertSecondsToTime; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “isFlashEnabled”, function() { return isFlashEnabled; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “isTabletOrMobile”, function() { return isTabletOrMobile; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “isAndroid”, function() { return isAndroid; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “getQueryString”, function() { return getQueryString; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “getCookie”, function() { return getCookie; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, “getAuthStatus”, function() { return getAuthStatus; }); var headers = { headers: { Accept: ‘application/json’, ‘Content-Type’: ‘application/json’ }, credentials: ‘include’ }; function handleFetchedErrors(response) { if (!response.ok) { throw Error(response.statusText); } return response; } function getPostId() { var pageInfo = document.getElementById(‘page-information’); if (pageInfo) { var body = document.querySelector(‘.fox_sectionfront .body-content’); if (body) { return body.getAttribute(‘post-id’); } } return document.body.getAttribute(‘post-id’); } function getAssetsDomain() { var locationName = location.hostname; if (locationName.match(/www.foxsports.com/)) { return ‘https://b.fssta.com/sta/’; } if (locationName.match(/wp.foxsports.com/)) { return ‘https://b.dev.fssta.com/sta/’; } return ‘/wp-content/themes/foxsports/assets/dist/’; } var assetsDomain = getAssetsDomain(); function decodeHtmlEntities(text) { if (!text) return ”; return text.replace(/\&(\w*|#\d*)\;/g, function (s) { return decodeTable[s] || ”; }); } var decodeTable = { ‘&’: ‘&’, ‘”‘: ‘”‘, ‘<‘: ‘<‘, ‘>’: ‘>’, ‘ ‘: ‘ ‘, ‘!’: ‘!’, ‘”‘: ‘”‘, ‘#’: ‘#’, ‘$’: ‘$’, ‘%’: ‘%’, ‘&’: ‘&’, ”’: ‘\”, ”’: ‘\”, ‘(‘: ‘(‘, ‘)’: ‘)’, ‘*’: ‘*’, ‘+’: ‘+’, ‘,’: ‘,’, ‘-‘: ‘-‘, ‘.’: ‘.’, ‘/’: ‘/’, ‘–’: ‘–’, ‘—’: ‘—’, ‘‘’: ‘‘’, ‘’’: ‘’’, ‘‚’: ‘‚’, ‘“’: ‘“’, ‘”’: ‘”’, ‘„’: ‘„’, ‘†’: ‘†’, ‘‡’: ‘‡’, ‘•’: ‘•’, ‘…’: ‘…’, ‘‰’: ‘‰’, ‘€’: ‘€’, ‘™’: ‘™’ }; function parseImagesTag(text) { text = “”.concat(text, “”); var parser = new DOMParser(); var result = { srcSet: ”, sizes: ”, src: ”, noscript: ” }; try { var el = parser.parseFromString(text, ‘text/html’); var images = el.getElementsByTagName(‘img’); if (images.length > 0) { var img = images[0]; result.sizes = img.getAttribute(‘data-sizes’) || img.getAttribute(‘sizes’); result.srcSet = img.getAttribute(‘data-srcset’) || img.getAttribute(‘srcset’); result.src = img.getAttribute(‘data-src’) || img.getAttribute(‘src’); } var noscripts = el.getElementsByTagName(‘noscript’); if (noscripts.length > 0) { var noscript = noscripts[0]; result.noscript = noscript.innerHTML; } } finally { return result; } } function parseSeconds(time) { if (!time || time.indexOf(‘.’) === -1) { return time; } var minutes = Math.floor(time / 60); var seconds = Math.floor(time – minutes * 60); return minutes + ‘:’ + (seconds < 10 ? ‘0’ : ”) + seconds; } function convertSecondsToTime(secs) { var hours = Math.floor(secs / 3600) % 24; var minutes = Math.floor(secs / 60) % 60; var seconds = secs % 60; var timeArr = hours > 0 ? [hours, minutes, seconds] : [minutes, seconds]; return timeArr.map(function (v, i) { return v < 10 ? i > 0 ? ‘0’ + v : v : v; }).filter(function (v, i) { return v !== ’00’ || i > 0; }).join(‘:’); } function isFlashEnabledFn() { var hasFlash = false; try { if (navigator.mimeTypes && navigator.mimeTypes[‘application/x-shockwave-flash’] ? navigator.mimeTypes[‘application/x-shockwave-flash’].enabledPlugin : 0) { hasFlash = true; } } catch (e) { if (navigator.mimeTypes[‘application/x-shockwave-flash’] != undefined) { hasFlash = true; } } return hasFlash; } var isFlashEnabled = isFlashEnabledFn(); function isTabletOrMobileFn() { return navigator.userAgent.match(/Android|webOS|iPhone|iPod|iPad|BlackBerry|IEMobile|Opera Mini|Windows Phone/i); } var isTabletOrMobile = isTabletOrMobileFn(); function isAndroidFn() { return window.navigator.userAgent.match(/Android/i); } var isAndroid = isAndroidFn(); /** * Get the value of a querystring * @param {String} field The field to get the value of * @param {String} url The URL to get the value from (optional) * @return {String} The field value */ function getQueryString(field, url) { var href = url ? url : window.location.href; var reg = new RegExp(‘[?&]’ + field + ‘=([^&#]*)’, ‘i’); var string = reg.exec(href); return string ? string[1] : null; } /** * get cookie by name * @param {string} name cookie name */ var getCookie = function getCookie(name) { var match = document.cookie.match(new RegExp(‘(^| )’ + name + ‘=([^;]+)’)); if (match) return JSON.parse(decodeURIComponent(match[2])); return false; }; var getAuthStatus = function getAuthStatus() { return new Promise(function (resolve, reject) { var reg = window.wisRegistration; var isRegAval = reg && typeof reg.isUserLoggedInMVPD === “function”; if (!isRegAval || !reg.isUserLoggedInMVPD()) { resolve({}); return; } resolve({ isLoggedIn: true }); }); }; /***/ }) /******/ }); //# sourceMappingURL=critical.min.js.map

Help | Press | Advertise With Us | Jobs | FOX Cincy | RSS | Site Map

SHARE