CM – Little Mix’s Leigh-Anne Pinnock announces pregnancy

0
26

The girls group Little Mix is ​​growing by one. Leigh-Anne Pinnock announced she was pregnant with her first child (and that of the band!). « We’ve dreamed of this moment for so long and can’t believe the dream will finally come true … we can’t wait to meet you, » she wrote on social media along with photos of her glowing green and fiancé Andre Gray, a football player (President’s football player in English) for Watford FC. The 29-year-old singer and 29-year-old athlete got engaged last June after a four-year relationship. Her bandmates filled the comments with love. « I love you so much, » wrote Jade Thirlwall. « Look at this family. » Perrie Edwards added, « I can’t stop staring at these pictures. You are a vision. Ily both so much! Congratulations my lovely sister! »

Little Mix just made her first music video « Confetti » with Saweetie released without former member Jesy Nelson, who left the band for psychological reasons last year. Pinnock makes her film debut this Christmas on Boxing Day. She also starred in a new BBC documentary called Leigh-Anne: Race, Pop & Power. Congratulations to Leigh-Anne on her new biggest fan!

Already a subscriber?
Sign up or link your magazine subscription

Already a subscriber?
Sign up or link your magazine subscription

Already a subscriber?
Sign up or link your magazine subscription

Already a subscriber?
Sign up or link your magazine subscription

= 0 (u = f (str, 0, v), c = f (str 1)): (u = f, c = «  »), i = decodeURIComponent (u), l = decodeURIComponent (c ), hasOwnProperty (o, i)? isArray (o [i])? o [i] .push (l): o [i] = [o [i], l]: o [i] = l} return o}; var isArray = Array.isArray || function (r) {return « [object Array] » === Object.prototype.toString.call (r)};
}, {}];
window.modules [« 1179 »] = [function (required, module, export) {« use strict »; var stringifyPrimitive = function (r) {switch (typeof r) {case « string »: return r; case « boolean »: return r? « true »: « false »; case « number »: return isFinite (r)? r: «  »; default: return «  »}}; module.exports = function (r, e, t, n) {return e = e || « & », t = t || « = », null === r&& (r = void 0), « object » == typeof r? map (objectKeys (r), function (n) {var i = encodeURIComponent (stringifyPrimitive (n)) t; return isArray (r [n])? map (r [n], function (r) {return i encodeURIComponent (stringifyPrimitive (r))}). join (e): i encodeURIComponent (stringifyPrimitive (r [n]))}). join (e): n? encodeURIComponent (stringifyPrimitive (n)) t encodeURIComponent (stringifyPrimitive (r)): «  »}; var isArray = Array.isArray | | function (r) {return « [object Array] » === Object.prototype.toString.call (r)}; Function assignment (r, e) {if (r.map) return r.map (e); for (var t = [], n = 0; n0&&a [a.length-1]) && (6 === i [0] || 2 === i [0])) {o = 0; continue} if (3 === i [0] && (! a || i [1]> a [0] &&i [1] « : » akbar-men « , » ∑ « : » majmou « , » ¤  » : « omla »}, az: {}, ca: {« ∆ »: « delta », « ∞ »: « infinite », « ♥ »: « amor », « & »: « i », « | »: « o », «  »: « mes que », « ∑ »: « suma dels », « ¤ »: « moneda »}, cz: {« ∆ »: « delta », « ∞ »: « nekonecno »,  » ♥ « : » laska « , » & « : » a « , » | « : » nebo « , » « : » vice jako « , » ∑ « : » soucet « , » ¤ « : » mena « }, de: {« ∆ »: « delta », « ∞ »: « infinite », « ♥ »: « love », « & »: « and », « | »: « or », «  »: « greater than »,  » ∑ « : » Sum of « , » ¤ « : » Currency « }, dv: { » ∆ « : » delta « , » ∞ « : » kolunulaa « , » ♥ « : » loabi « , » & « : » aai « , » | « : » noonee « , » « : » ah vure bodu « , » ∑ « : » jumula « , » ¤ « : » faisaa « }, en: { » ∆ « : » delta « , » ∞  » : « infinite », « ♥ »: « love », « & »: « and », « | »: « or », «  »: « greater than », « ∑ »: « sum », « ¤ »:  » Currency « }, es: { » ∆ « : » Delta « , » ∞ « : » infinito « , » ♥ « : » amor « , » & « : » y « , » | « : » u « , » « : « mas que », « ∑ »: « suma de los », « ¤ »: « moneda »}, fr: {« ∆ »: « Delta », « ∞ »: « Infiniment », « ♥ »: « Amour », « & »: « et », « | »: « ou « , » « : » superieure a « , » ∑ « : » somme des « , » ¤ « : » monnaie « }, gr: {}, hu: { » ∆ « : » delta « , » ∞ « : » vegtelen « , » ♥ « : » szerelem « , » & « : » es « , » | « : » vagy « , » « : » nagyobb mint « , » ∑ « : » szu mma « , » ¤ « : » penznem « }, it: { » ∆ « : » delta « , » ∞ « : » infinito  » , « ♥ »: « amore », « & »: « e », « | « : » o « , » « : » maggiore di « , » ∑ « : » somma « , » ¤ « : » moneta « }, lt: {}, lv: { » ∆ « : » delta « , » ∞  » : « bezgaliba », « ♥ »: « milestiba », « & »: « un », « | »: « vai », «  »: « lielaks neka », « ∑ »: « summa », « ¤ »:  » valuta « }, my: { » ∆ « : » kwahkhyaet « , » ∞ « : » asaonasme « , » ♥ « : » akhyait « , » & « : » nhin « , » | « : » tho « , »: « kyithaw », « ∑ »: « paungld », « ¤ »: « ngwekye »}, mk: {}, nl: {« ∆ »: « delta », « ∞ »:  » oneindig « , » ♥ « : » leads « , » & « : » en « , » | « : » of « , » « : » groter dan « , » ∑ « : » som « , » ¤ « : » valuta  » }, pl: {« ∆ »: « Delta », « ∞ »: « nieskonczonosc », « ♥ »: « milosc », « & »: « i », « | »: « lub », «  »: « wieksze niz « , » ∑ « : » suma « , » ¤ « : » waluta « }, pt: { » ∆ « : » delta « , » ∞ « : » infinito « , » ♥ « : » amor « , » &  » : « e », « | »: « ou », «  »: « maior que », « ∑ »: « soma », « ¤ »: « moeda »}, ro: {« ∆ »: « delta »,  » ∞ « : » infinit « , » ♥ « : » dragoste « , » & « : » si « , » | « : » sau « , » « : » mai mare ca « , » ∑ « : » suma « , » ¤ « : » valuta « }, ru: { » ∆ « : » delta « , » ∞ « : » beskonechno « , » ♥ « : » lubov « , » & « : » i « , » | « : » ili « , «  »: « bolshe », « ∑ »: « summa », « ¤ »: « valjuta »}, sk: {« ∆ »: « delta », « ∞ »: « nekonecno », « ♥ »: « laska » , « & »: « a », « | »: « alebo », «  »: « viac ako », « ∑ »: « sucet », « ¤ »: « mena »}, sr: {}, tr: { « ∆ »: « Delta », « ∞ »: « Sonsuzluk », « ♥ »: « ask », « & »: « ve », « | » : « veya », «  »: « buyuktur », « ∑ »: « toplam », « ¤ »: « para birimi »}, uk: {« ∆ »: « delta », « ∞ »: « bezkinechnist »,  » ♥ « : » lubov « , » & « : » i « , » | « : » abo « , » « : » bilshe « , » ∑ « : » suma « , » ¤ « : » valjuta « }, vn: { « ∆ »: « delta », « ∞ »: « vo cuc », « ♥ »: « yeu », « & »: « va », « | « : » hoac « , » « : » lon hon « , » ∑ « : » tong « , » ¤ « : » tien te « }}; if ( » string « ! = typeof e) return » « ; if ( » string « == typeof a&& (A = a), m = I.en, c = C.en, » object « == type of a) for (g in n = a.maintainCase ||! 1, O = a .custom&& « object » == type of a.custom? a.custom: O, u = a.truncate> 1&&a.truncate ||! 1, l = a.uric ||! 1, s = a.uricNoSlash || ! 1, r = a.mark ||! 1, S =! 1! == a.symbols&&! 1! == a.lang, A = a.separator || A, l&& (p = b.join ( » « )), s&& (p = z.join ( » « )), r&& (p = [« . « , »! « , » ~ « , » * « , » ‘ », » (« , ») « ] . join («  »)), m = a.lang&&I [a.lang] && S? I [a.lang]: S? I.en: {}, c = a.lang&&C [a.lang]? C [ a.lang] :! 1 === a.lang ||! 0 == = a.lang? {}: C.en, a.titleCase&& « number » == typeof a.titleCase.length&&Array.prototype.toString. call ( a.titleCase)? (a.titleCase.forEach (function (e) {O [e «  »] = e «  »}), t =! 0): t = !! a.titleCase, a.custom&& « number » == typeof a.custom.length&&Array.prototype.toString.call (a. custom) &&a.custom.forEach (function (e) {O « e » «  » }), Object.keys (O) .forEach (function (a) {var n; n = a.length> 1 new RegExp (« \ b » o (a) « \ b », « gi »): new RegExp (o (a), « gi »), e = e.replace (n, O [a])}), O) p = g; for (p = o (p = A), f =! 1, y =! 1, d = 0, k = (e = e.replace (/ (^ s | ) s $) / g, «  » )). Length; d = 0? (j = g, g = «  ») :! 0 === y? (g = U [j] v [g], j = « ): g = f&&v [g] .match (/ [A-Za-z0-9] /)? v [g]: v [g], f =! 1, y =! 1): g in U? (J = g, g = «  », d === k-1&& (g = U [j]), y =! 0) :! M [g ] || l&&-1! == b.join («  ») .indexOf (g) || s&&-1! == z.join («  »). indexOf (g)? (! 0 === y? (g = U [j] g, j = «  », y =! 1): f&& (/ [A-Za-z0-9] /. Test (g) || E. substr (-1). match ( / A-Za-z0-9] /)) && (g = «  » g), f =! 1) 🙁 g = f || E.substr (-1) .match (/ [A-Za -z0 -9] /)? A m [g]: m [g], g = void 0! == e [d 1] &&e [d 1] .match (/ [A-Za-z0-9] /)? A: «  », f =! 0), E = g.replace (new RegExp (« [^ \ w \ s » p « _-] », « g »), A); return t&& (E = E.replace (/ ( w) ( S *) / g, function (e, a, n) {var t = a.toUpperCase () (null! == n? N: «  »); return Object. keys (O) .indexOf (t.toLowerCase ()) u&& (h = E.charAt (u) === A, E = E.slice (0, u), h || (E = E.slice (0, E.lastIndexOf (A)))), n || t || (E = E.toLowerCase ()), E}, t = function (s) {return function (a) {return n (a, e)}}, o = function (s) {return e.replace (/ [- \ ^ $ *?. () | [] {} /] / g, « \ $ & »)}, i = function (e, a) {for (var n in a) if (a [ n] === e) return! 0}; if (« undefined »! = type of module &&module.exports) module.exports = n, module.exports.createSlug = t; else if (« undefined »! = typeof define&&define.amd) define ([], function () {return n}); else try {if (e.getSlug || e.createSlug) throw « Speakingurl: Globals exists /(getSlug|createSlug)/ »;e.getSlug=n,e.createSlug=t Genealogiecatch(e)} Genealogie(this );
}, {}];
window.modules [« 1209 »] = [function (required, module, export) {var namespace = « expire_mixin »; Function expirePlugin () {var e = this.createStore (this.storage, null, this._namespacePrefix namespace); return {set: function (t, n, a, r) ​​{this.hasNamespace (Namespace) || e.set (n, r); return t ()}, get: function (e, n) {this.hasNamespace (Namespace) || t.call (this, n); return e ()}, remove: function (t, n) {this.hasNamespace (Namespace) || e.remove (n); return t ()}, getExpiration: function (t, n) {return e.get (n)}, removeExpiredKeys: function (s) {var n = []; this.each (function (e, t) {n.push (t)}); for (var a = 0; a = 0; r -) {var l = localStorage (). key (r); e (read (l), l)}} function remove (e) {return localStorage () .removeItem (e)} function clearAll () {return localStorage (). clear ()} module.exports = {Name: « localStorage », Read: Read, Write: Write, each: Remove: Remove, DeleteAll: DeleteAll};
}, {« 1211 »: 1211}];
window.modules [« 1213 »] = [Function (required, module, export) {module.exports = {Name: « memoryStorage », read: read, write: write, each: remove: remove, deleteAll: deleteAll}; var memoryStorage = {}; Function read (e) {return memoryStorage [e]} Function write (e, r) {memoryStorage [e] = r} Function each (e) {for (var r in memoryStorage) memoryStorage.hasOwnProperty (r) &&e (memoryStorage [ r], r)} function remove (e) {delete memoryStorage [e]} function clearAll (e) {memoryStorage = {}}
}, {}];
window.modules [« 1234 »] = [function (required, module, export) {! Function (s) {var t = function (s) {return new y (e)}; t.version = « 0.6.8 », « undefined »! = typeof module&&module.exports? module.exports = t: « function » == typeof define&&define.amd? define (function () {return t}): e.typogr = t; var n = function (e, t) {return new RegExp (e, t)}, s = /] *> / i, r = t.amp = function (e) {var t = / ( s |) ( & | & | & # 38;) ( s |) / g; if (e || « string » == typeof e) e.replace (/ ()? ([^)? / G, function (e, n, r, a) {return a = a || «  », ( n = n || «  »). match (s)? nra: n (r = r.replace (t, ‘$ 1& $ 3’)) a})}, a = t.ord = function (e) { if (e || « string » == typeof e) {var t, n = f (e), r = [], a =! 1, p = / ( d) (st | nd | rd | th) / g; return n.forEach (function (e) {« tag » === e.type? (r.push (e.txt), t = s.exec (e.txt), a =! (! t || void 0! == t [1])): a? R.push (e.txt): r.push (e.txt.replace (p, ‘$ 1 $ 2’))}), r.join ( » « )}}, p = t.initQuotes = function (s) {var t = n ( » (?: (?:] *> | ^) \ s * (?:] *> \ s *) * ) (?: (« | » | « ) | (‘|’ | ‘)) », « i »); if (e || « string » = = typeof e) return e.replace (t, function (e , t, n) {var s = t? « dquo »: « quo », r = t || n; return [e.slice (0, e.lastIndexOf (r)),  », r, «  »] . join («  »)})}, c = t.widont = function (s) {var t = « (?:] *?>) *? [^ \ s] (? 🙁 ?: a | em | span | strong | i | b) [^>] *?>) *? « , s = n ( » (\ s « t » \ s « t ») (?: \ s) ([^ \ s] (?: \ s * (?: a | em | span | strong | i | b) [^>] *?> \ s * \. *) *? (?: \ s *? (?: p | h [1-6] | li | dt | dd )> | $)) « , » gi « ); return e.replace (s, ‘$ 1 $ 2’)}, i = t.caps = function (e) {var t, r = f (e), a = [], p =! 1, c = n (« ((\ b [AZ \ d] * [AZ] \ d * [AZ] [) AZ \ d ‘] * \ b) | (\ b [AZ] \. \ s? (?: [AZ] \. \ s?)) (?: \ s | \ b | $)) « , » g « ) ; return r.forEach (function (e) {« tag » === e.type? (a.push (e.txt), t = s.exec (e.txt), p =! (! t || void 0! == t [1])): p? a.push (e.txt): a.push (e.txt.replace (c, function (e, t, n, s) {var r, a ; return n? ‘% s’.replace (« % s », n) 🙁 «  » === s.slice (-1)? (r = s.slice (0, -1), a = «  » ) 🙁 r = s, a = «  »), ‘% s1% s2’.replace (« % s1 », r) .replace (« % s2 », a))}))}), a.join ( «  »)}; t.typogrify = function (e) {var t = e; return e.jquery&&e.html&& (t = e.html ()), t = r (t), t = c (t), t = u (t), t = i (t), t = p (t), t = a (t)}; va r l, o, u = t function (e) {var t, n, r = f (e), a = [], p = [], c = «  », i = «  », l =! 1, o = «  »; return r.forEach (function (s) {if (« tag » === e.type) a.push (e.txt), null! == (i = s.exec (e.txt)) && (c = i [2] .toLowerCase (), i [1]? (p.length> 0&&c === p [p.length-1] &&p.pop (), 0 === p.length&& (l =! 1 )) 🙁 p.push (c), l =! 0)); else {if (n = (n = e.txt) .replace (/ (rock) ‘n’ (roll) / gi, « $ 1 ‘n’ $ 2 « ), t = n.Slice (-1),! l) switch (n = g (n)), n = h (n), n = d (n), n = x (n )) {case « ‘ »: n = / S / .test (o)? « ‘ »: « ‘ »; break; case ‘ »‘: n = / S / .test (o)? » « : » « ; break; default: n = m (n)} o = t, a.push (n)}}), a.join ( » « )}, f = t.tokenize = function (s) { for (var t, n = [], s = 0, r = / ([^] *>) / gi; null! == (t = r.exec (e));) {var a = t [1 ], p = t [2]; a&&n.push ({type: « text », txt: a}), n.push ({type: « Tag », txt: p}), s = r.lastIndex} return r.lastIndex) / g, « $ 1 -« )}, d = t.smartEllipses = function (s) {return e.replace (/…/ g, « … »). Replace (/ . . ./ g, « … »)}, x = t.smartBackticks = function (s) {return e.replace (/ «  / g, «  » « ). replace (/  » / g, «  » « )}, m = t.smartQuotes = function (s) {var t = » (? =% s \ B) « . Replace (« % s « , » [! « # \ $ \% \ ‘() *, -. \ /:;? \ @ \ [\\] \ ^ _` {|} ~] « ), s = « [^ \ \ t \ r n \ [\ {\ (\ -] », r = n (« (\ s | | – | & [mn] dash; | – | – | ȁ [34];) ‘(? = \ w) « , » g « ), a = n ( » (« s »)’ (?! \ s | s \ b | \ d ) « , » g « ), p = n ( » (« s ») ‘(?! \ s | s \ b) « , » g « ), c = n (‘ (\ s | | – | & [mn] dash; | – | – | ȁ [34];) « (? = \ w) ‘, » g « ), i = n (‘ » (? = \ s) ‘, « g « ), l = n ( » (« ) s’) » ‘, « g »); return e.replace (n (« ^’% s » .replace (« % s », t), « g ») , « ‘ »). replace (n (‘ ^ « % s’.replace (« % s « , t), » g « ), » « ). replace (/ « ‘(? = w) / g, » « ‘ »). replace (/ ‘ »(? = w) / g, »‘ «  »). Replace (/ b ‘(? = D {2} s) / g, « ‘ »). Replace (r, « $ 1 ‘ »). replace (a, « $ 1 ‘ »). replace (p, « $ 1 ‘$ 2 »). replace (« ‘ », « ‘ »). replace (c, « $ 1 » « ). replace (i, » «  ») .replace (l, « $ 1 » « ). replace (‘ »‘, «  » « )}, y = function (s) { this._wrapped = e}, v = function (e, n) {y.prototype [e] = function () {return e = n.call (t, this._wrapped), this._chain? t (e). chain (): e; var e}}; for (l in t) t.hasOwnProperty (l) && ((o = t [l]) &CS SEANDCHARo.constructor&&o.call&&o.apply) ); y.prototype.chain = function () {return this._chain =! 0, this}, y.prototype.value = function) this._wrapped}} (this);
}, {}];
window.modules [« 1330 »] = [function (required, module, export) {« use strict »; const universalAgora = required (1332), universalRest = required (27), universalQuery = required (1331), _ get = required (9); Function searchByQueryWithRawResults (e, r) {const t = `// $ {r.site.host} $ {80! == r.site.port? `: $ {R.site.port}`: «  »} $ {r.site.path} / _ agora / _search`; return universalRest.post (t, e,! 0)} function getProducts (e, r, t) {return searchByQueryWithRawResults (universalAgora.buildProductsQuery (e), r) .then (e => {const r = universalQuery.formatSearchResult (e ); return {total: e.hits.total, products: t? universalAgora.filterByLocale (r): r}})} function getMerchantsList (e) {return searchByQueryWithRawResults (universalAgora.buildMerchantsAggregation (1e6, _get (e, « site. agoraLocale « )), e) .then (universalQuery.formatAggregationResults ({aggregation name: » dealer « , field: » key « , subfield: » name « ))} module.exports.getProduct = universalAgora.getProduct, module.exports.getProducts = getProducts, module.exports.getMerchantsList = getMerchantsList, module.exports.searchByQueryWithR awResults = searchByQueryWithRawResults, module.exports.buildMerchantsByUrlQuery = universalAgora.buildMerchantsByUrlQuery;
}, {9: 9, 27: 27, 1331: 1331, 1332: 1332}];
window.modules [« 1331 »] = [function (required, module, export) {« use strict »; const _map = require (63), _ get = require (9), _ isArray = require (162), _ set = require (120), _ isObject = require (99), _ cloneDeep = require (81), _ uniq = require (104); function formatSearchResult (e) {return _map (e.hits.hits, « _ source »)} function newQuery (e) {if (! e) throw new Error (« An » index « is required to create a query »); return {index: e, type: « _ doc », body: {query: {}}}} function addShould (e, o) {var t = _get (e, « body.query.bool.should », void 0 ), r = _isArray (o); return t? r? _set (e, « body.query.bool.should », t.concat (o)) 🙁 t.push (o), _ set (e, « body.query.bool.should », t)): _ set (e, « body.query.bool.should », r? o: [o]), e} function addMust (e, o) {var t = _get (e, « body.query.bool.must », void 0), r = _isArray (o); return t? r? _set (e, « body.query.bool.must », t.concat (o)) 🙁 t.push (o), _ set (e, « body.query.bool.must », t)): _ set (e, « body.query.bool.must », r? o: [o]), e} Function addMustNot (e, o) {var t = _get (e, « body.query.bool.must_not », void 0), r = _isArray (o); return t? r? _set (e, « body.query.bool.must_not », tc oncat (o)) 🙁 t.push (o), _ set (e, « body.query.bool.must_not », t)): _ set (e, « body.query.bool.must_not », r? o: [o]), e} function addFilter (e, o) {var t = _get (e, « body.query.bool.filter », void 0); if (! _ isObject (o)) throws a new error (« filter ») query required to be an object « ); returns t? _isArray (t)? (t.push (o), _ set (e, « body.query.bool.filter », t)): _ set (e, « body. query.bool.filter », [_ cloneDeep (t), o]): _ set (e, « body.query. bool.filter « , o), e} Function addMinimumShould (e, o) {if ( » number « ! = typeof o) throw new Error ( » A number is required as the second argument « ); return _set (e, » body .query.bool.minimum_should_match « , o), e} Function addSort (e, o) {var t = _get (e, » body.sort « ); return _isArray (t) || _set (e, » body.sort « , t = []), t.push (o), e} function addSize (e, o) {if (! o&&0! == o) return e; if (o = parseInt (o), isNaN (o) ) triggers a new error (`the second argument must be a number: $ {o}`); return _set (e, « body.size », o)} function addFrom (e, o) {if (! o&&0! == o) returns e; if (o = parseInt (o), isNaN (o)) throws a new error (`The second argument must be a Be a number: $ {o} `); return _set (e, « body.from », o)} function onlyWithTheseFields (e, o) {if (! _ isArray (o)) throws a new error (« The second argument must be an array »); return _set (e, « body._source.include », _ uniq (o)), e} function onlyWithinThisSite (e, o) {return o.subsiteSlug? addFilter (e, {term: {subsite: o.subsiteSlug}}) 🙁 addFilter (e, {term: {site: o.slug}}), addMustNot (e, {exists: {field: « subsite »}} )), e} function onlyWithinThisDomain (e, o) {return addFilter (e, {Prefix: {canonicalUrl: `http: // $ {o.host}`}}), e} Function within this SiteAndCrossposts (e, o ) {var t = {term: {}}, r = {bool: {should: [], minimum_should_match: 1}}; return t.term [« crosspost ». (o.subsiteSlug || o.slug)] =! 0, r.bool.should.push (t), o.subsiteSlug? r.bool.should.push ({term: {subsite: o.subsiteSlug}}): (r.bool.should.push ({term: {site: o.slug}}), addMustNot (e, {exists: {field: « subsite »}})), addFilter (e, r), e} Function within thisDomainOrCrossposts (e, o) {return addShould (e, {term: {[`crosspost. $ {o.subsiteSlug || o .slug} `] :! 0}}), addShould (e, {Prefix: {canonicalUrl:` http: // $ {o.host} `}}), addMinimumShould (e, 1), e} Function moreLikeThis ( e, o, t) {let r = {fields: [« tags »], like: {_index: e.index, _type: « _ doc », _ id: o}, include:! 1, min_term_freq: 1, max_query_terms: 12, min_doc_freq: 1}; return {more_like_this: Object.assign (r, t)}} function addAggregation (e = {}, o) {const {body: t = {}} = e; return o? (t.aggs? _set (e, « body.aggs », Object.assign (t.aggs, o)): _ set (e, « body.aggs », o), e): e} Function formatAggregationResults ({aggregationName : e = «  », field: o = «  », subfield: t = «  », skipEmpty: r =! 0}) {return function (s = {}) {let u = _get (s, `aggregations. $ {E } $ {t? « . » T « . »: « . »} Buckets`, []); return r&& (u = u.filter (e => 0! == _ get (e, « doc_count », 0))), u.map (e => e [o] || «  »)}} function addGeo (e, o) {if (! _ isArray (o)) throws a new error (« The second argument must be an array »); if (2! == o.length) throw new Error (« Array must be length 2 »); if (o.some (isNaN)) throw new Error (« Array may only contain numbers »); return _set (e, « body.query.geo_shape.location.shape.type », « point »), _ set (e, « body.query.geo_shape.location.shape.coordinates », o), e} function combinFunctionScoreQueries (e, o) {let t = _cloneDeep (_get (e, « body.query », {})), r = _cloneDeep (_get (o, « body.query », {})), s = _get (e , « body.sort »); return _set (e, « body.query », {}), _ set (e, « body.query.function_score.functions », []), e.body.query.function_score.functions.push ({filter: t , weight: 20}), e.body.query.function_score.functions.push ({filter: r, weight: 10}), e.body.query.function_score.score_mode = « max », e.body. query.function_score.min_score = 10, _isArray (s) || _set (e, « body.sort », s = []), s.unshift ({_ score: « desc »}), e} Function addNestedObjQuery (e, o, t) {if (! e) solves a new one Error from (« There is no basic query to perform the addNestedObjQuery ion operation »); if (! o) throws a new error (« There is no nested object path on which to run the nested query »); if (! t) throws a new error (« There is no nested query path to run the nested query against »); return _set (e, « nested », {path: o, query: t}), e} function addMatchAll (e) {return _set (e, « body.query », {match_all: {}}), e} function addMultiMatch (e, o) {const t = _get (e, « body.query.bool.must », void 0), {fields: r, type: s, character string: u} = o, i = {multi_match: { query: u, fields: r, type: s}}; return t? (t.push (i), _ set (e, « body.query.bool.must », t)): _ set (e, « body.query.bool.must », [i]), e} module .exports = newQuery, module.exports.addGeo = addGeo, module.exports.addAggregation = addAggregation, module.exports.addShould = addShould, module. exports.addFilter = addFilter, module.exports.addMust = addMust, module.exports.addMustNot = addMustNot, module.exports.addMinimumShould = addMinimumShould, module.exports.addSort = addSort, module.exports.addSize = addSize, module.exports. addFrom = addFrom, module.exports.onlyWithTheseFields = only with synthesis fields, module.exports.onlyWithinThisS ITE = only within this site, module.exports.onlyWithinThisDomain = only within this domain, module.exports.withinThisSiteAndCrossposts = withinThisSiteAndCrossposts, module.exports.withinThisDomainOrCrossposts = withinThisDomainOrCrossposts, module.exports.formatAggregationResults = formatAggregationResults, module.exports.formatSearchResult = formatSearchResult, module.exports.moreLikeThis = moreLikeThis, module.exports.combineFunctionScoreQueries = combinFunctionScoreQueries, module.exports.addNestedObjQuery = addNestedOblljQuultiMatch = addNestedOblljQuultiMatch = addNestedOblljQuery = addMatchAatchA = addNestedOblljQuery, module.export = addMatchAlls. ;
}, {9: 9, 63: 63, 81: 81, 99: 99, 104: 104, 120: 120, 162: 162}];
window.modules [« 1332 »] = [function (required, module, export) {(function (process, __ file name) {(function () {
« use strict »; const _forEach = require (53), _ get = require (9), _ filter = require (146), _ map = require (63), _ isEmpty = require (100), urlParse = require (64), log = require (36) .setup ({file: __ filename}), queryService = require (1331), universalRest = require (27), AGORA_HOST = window.process.env.AGORA_HOST, AGORA_ELASTIC_PREFIX = window.process.env.AGORA_ELASTIC_PREFDPIC = AGORA_FELAST ? `$ {AGORA_HOST} / api / v1`: null, requestHeader = { » Content Type « : » application / json « }, PRODUCTS_INDEX = » Agora Products « , AFFILIATES_INDEX = » Partners « , RETAILERS_INDEX = » Retailers « , FILTER_KEY = { Dealer: « Name », Partner: « Partner »}, URL_RE = / ^ https?: / /.*$/; Function getProducts (e, t) {const {limit: r = 100, start: a = 0, search: s = «  », sortDate: i = « desc »} = e, n = `$ {AGORA_ENDPOINT} / products? limit = $ {r} &start = $ {a} &search = $ {encodeURIComponent (s)} &sortDate = $ {i} `; return fetch (n) .then (handleResponse) .then (e => t? filterByLocale (e, t): e) .then (e => ({total: e. length, products: e})). catch (handleError (n))} function getProduct (e, t) {const r = `$ {AGORA_ENDPOI NT} / products / $ {e}`; if (! AGORA_ENDPOINT) triggers a new error (« No Agora endpoint was specified »); if (« string »! = Typeof e) triggers a new error (« Requirement must provide a product id »); return fetch (r) .then (handleResponse) .then (e => t? filterByLocale (e, t): e) .catch (handleError (r))} function postProduct (e) {const t = `$ {AGORA_ENDPOINT} / products`, r = {method: « POST », header: requestHeader, body: JSON.stringify (e)}; Return value (t, r) .then (handleResponse) .catch (handleError (t))} Function putProduct (e, t) {const r = `$ {AGORA_ENDPOINT} / products / $ {e}`, a = {Method: « PUT », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function patchProduct (e, t) {const r = `$ {AGORA_ENDPOINT} / products / $ {e}`, a = {method : « PATCH », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteProduct (e) {const t = `$ {AGORA_ENDPOINT} / products / $ {e}`; return fetch (t, {method: « DELETE », header: requestHeader}). Then (handleResponse) .catch (handleError (t))} function getMerchantList (e) {const {limit: t = 100, fields: r = «  »} = e; return Promise.resolve ([{name: « Amazon »}]). catch (handleError («  »))} function getMerchant (e) {const t = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`; if (« string »! = typeof e) throws a new error (« Request must specify a merchant ID »); return fetch (t) .then (handleResponse) .catch (handleError (t))} function patchMerchant (e, t) {const r = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`, a = {method:  » PATCH « , header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function postMerchant (e) {const t = `$ {AGORA_ENDPOINT} / Merchants`, r = {method: » POST « , header: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function putMerchant (e, t) {const r = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`, a = {method : « PUT », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteMerchant (e) {const t = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`; return fetch (t, {method: « DELETE », head ers: requestHeader}). then (handleResponse) .catch (handleError (t))} function migrateMerchants (e) {const t = `$ {AGORA_ENDPOINT} / Händler / migrate-Affiliate`, r = {method: » POST « , header: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function getRetailers (e) {const {limit: t = 100, start: r = 0} = e, a = `$ {AGORA_ENDPOINT } / Retailer? limit = $ {t} &start = $ {r} `; return fetch (a) .then (handleResponse) .then (e => ({total: e.length, retailer: e})). catch (handleError (a))} function getRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailer / $ {e}`; return fetch (t). then (handleResponse) .catch (handleError (t))} function postRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailer`, r = {method: » POST « , header: requestHeader, body: JSON.stringify ( e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} Function putRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / retailer / $ {e}`, a = {method : « PUT », headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailer / $ {e}`; return fetch (t, {method: « DELETE », header: requestHeader}). then (handleResponse) .catch (handleError (t))} function getAffiliates (e) {const {limit: t = 100, start: r = 0} = e, a = `$ {AGORA_ENDPOINT} / affiliates? limit = $ {t} &start = $ {r} `; return fetch (a) .then (handleResponse) .then (e => ({total: e.length, Affiliates: e})). catch (handleError (a))} function getAffiliateRetailers (e) {const t = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates`; return fetch (t) .then (handleResponse) .catch (handleError (t))} function getAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / Retailer / $ {e} / Affiliates / $ {t}` ; return fetch (r) .then (handleResponse) .catch (handleError (r))} function postAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / Retailer / $ {e} / Affiliates`, a = {method : « POST », header: requestHeader, body: JSON.stringify (t)}; Return value (r, a) .then (handleResponse) .catch (handleError (r))} Function putAffiliateRetailer (e, t, r) {const a = `$ {AGORA_ENDPOINT} / Retailers / $ {e} / Affiliates / $ { t} `, s = {method: » PUT « , header: requestHeader, body: JSON.stringify (r)}; return fetch (a, s) .then (handleResponse) .catch (handleError (a))} Function deleteAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / Retailer / $ {e} / Affiliates / $ {t } `; return fetch (r, {method: « DELETE », header: requestHeader}). catch (handleError (r))} function postLocale (e) {const t = `$ {AGORA_ENDPOINT} / locales /`, r = {method: « POST », header: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function patchLocale (e, t) {const r = `$ {AGORA_ENDPOINT} / locales / $ {e}`, a = {method : « PATCH », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function handleResponse (e) {try {return e.json (). then (t => {if (e.status> = 400) {const e = _get (t, « message.details [0] .message »); throw a new error (e)} return t})} catch ( e) {throw new Fehler (e.message)}} Funktion handleError (e) {return t => {Wurfprotokoll (« warn », `Fehlgeschlagene Anforderung an $ {e}`, t), neuer Fehler (`Anforderung an $ {e} fehlgeschlagen `)}} Funktion buildProductsQuer y ({search: e = «  », limit: t = 100, start: r = 0, sortDate: a = «  », filter: s, locale: i}) {const n = queryService (PRODUCTS_INDEX), c = s&&Object .keys (s) .length? Object.keys (s) .filter (e => Array.isArray (s [e]) &&s [e] .length): [], o = {}, l = {}; if (prependElasticPrefix (n), e || c.length || i || queryService.addMatchAll (n), i&& (queryService.addMust (o, {match: {« locales.locale »: i}}), queryService. addMust (l, {match: {« Merchants.locale »: i}})), e) if (isURL (e)) queryService.addMust (n, [queryService.addNestedObjQuery ({}, « Merchants », {match: {« Merchants.buyUrl »: e}})]); else {const t = {}; queryService.addShould (t, [{match: {« locales.productId »: e}}, {match: {« locales. name « : {query: e, boost: 2}}}]), queryService.addMinimumShould (t, 1), queryService.addMust (o, _get (t, » body.query « ))} if (c.length) {const e = {}; c.forEach (t => {const r = s [t], a = FILTER_KEY [t], i = {}; a&& (i [`Händler. $ {a}`] = r , queryService.addShould (e, {Terms: i}))}), queryService.addMinimumShould (e, 1), queryService.addMust (l, _get (e, « body.que ») ry « ))} return _isEmpty (o) || queryService.addMust (n, [queryService.addNestedObjQuery ({}, » locales « , _ get (o, » body.query « ))]), _ isEmpty (l) || queryService.addMust (n, [queryService.addNestedObjQuery ({}, « Händler », _ get (l, « body.query »))]), queryService.addSize (n, t), r> = 0&&queryService.addFrom (n, r), « desc » === a || « asc » === a? queryService.addSort (n, {updatedAt: {order: a}}): e&&queryService.addSort (n, {_ score: {order:  » desc « }}), n} Funktion prependElasticPrefix (e) {return e.index = AGORA_ELASTIC_PREFIX?` $ {AGORA_ELASTIC_PREFIX} _ $ {e.index} `: e.index, e} Funktion buildMerchantsAggregation (e = 1e6, t) {const r = queryService (PRODUCTS_INDEX); return prependElasticPrefix (r), querySe rvice.addMust (r, {match: {active :! 0}}), t&&queryService.addMust (r, queryService.addNestedObjQuery ({}, « Händler ») _get (queryService.addMust ({}, {match: {« Merchants.locale »: t}}), « body.query »))), queryService.addAggregation (r, {Händler: {verschachtelt: {Pfad: « Händler « }, aggs: {name: {Terms: {field: » Merchants.name « , Größe: e}}}}}), queryService.addSize (r, 0), r} Funktion isURL (e) {URL_RE.test (e) zurückgeben} Funktion filterByLocale (e, t, r = {Gebietsschemas: « US »}) {const a = Array.isArray (e); wenn (_isEmpty (e)) ein? [] zurückgibt: {}; const s = [« Gebietsschemas », « Händler »], i = a? e: [e], n = Object.keys (r), c = _map (i, e => {const a = Object.assign ({}, e); return _forEach (s, s => {if (Object.keys (a)). enthält (s)) {const i = t? _filter (e [s], [« locale », t]): e [s]; a [s] = i ,! i.length&&n.includes (s) && ( a [s] = (_ filter (e [s], [« locale », r [s]]) || []). map (e => (e.id = null, e.locale = t, e) ))}}), a.name = _get (a, « locales [0] .name », «  »), a}); return a&&c.length? c: _get (c, « [0] », {} )} Funktion searchByQueryWithRawResults (e, t) {const r = `// $ {t.site.host} $ {80! == t.site.port?`: $ {t.site.port} `: »  » } $ {t.site.path} / _ agora / _search`; return universalRest.post (r, e ,! 0)} Funktion buildMerchantsByUrlQuery (e) {const t = queryService (PRODUCTS_INDEX); return prependElasticPrefix (t), queryService. addNestedObjQuery (t.body.query, « Händler », {match: {« Händler.buyUrl »: e}}), t} Funktion ge tAffiliatesByLocale (e, t) {const r = queryService (AFFILIATES_INDEX); return prependElasticPrefix (r), queryService.addMust (r, {match: {locale: e}}), queryService.addSize (r, 1e3), queryService.addSort (r, {name: « asc »}), searchByQueryWithRawResults (r, t) .then (e => _ get (e, « Hits.hits », []). map (e => _ get (e, « _ source ») , {})))} function buildRetailersQuery ({search: e = «  », limit: t = 50, start: r = 0, direction: a = « asc », locale: s = « US »}) {const i = queryService (RETAILERS_INDEX); return prependElasticPrefix (i), queryService.addMust (i, {Übereinstimmung: {Gebietsschema: s}}), e? queryService.addMultiMatch (i, {Felder: [« Name ^ 2 », « Domänen » ], Zeichenfolge: e, Typ: « phrasenpräfix »}) 🙁 queryService.addSort (i, {« name.keyword »: a}), queryService.addSize (i, t), r> = 0&&queryService.addFrom (i, r)), i} Funktion getRetailersList (e, t) {return searchByQueryWithRawResults (buildRetailersQuery (e), t) .then (e => ({total: _get (e, « Hits.total », 0), Einzelhändler: _get (e, « Hits.hits », []). map (e => _ get (e, « _ source », {}))})} Funktion getRetailersByAffiliateId (e, t, r) {const a = queryService (RETAILERS_INDEX ); r (e) .affiliateId « : e}})]), queryService.addSize (a, 1e4), queryService.addSort (a, { » name.keyword « : » asc « }), searchByQueryWithRawResults (a, t) .then (e = > _get (e, « Hits.hits », []). map (e => _ get (e, « _ source », {}))): Promise.reject ()} Funktion getMerchantsList (e) {return searchByQueryWithRawResults ( buildMerchantsAggregation (1e6, _get (e, « site.agoraLocale »)), e) .then (queryService.formatAggregationResults ({aggregat ionName: « Merchants », Feld: « key », Unterfeld: « name »}))} function queryRetailersByUrl ( e, t, r) {const a = urlParse (e) .host.split (« www. »). join («  »), s = queryService (RETAILERS_INDEX); return queryService.addMust (s, {match: {locale : r}}), queryService.addMust (s, {match: {Domains: a}}), prependElasticPrefix (s), queryService.addSize (s, 10), searchByQueryWithRawResults (s, t) .then (e => _ get (e, « tickets.hits », []). map (e => _ get (e, « _ source », {}))} function queryRetailersByNa me (e, t, r) {const a = queryService (RETAILERS_INDEX); return queryService.addMust (a, {match: {locale: r}}), queryService.addMust (a, {match: {« name.keyword » :e}}),prependElasticPrefix(a),queryService.addSize(a,10),searchByQueryWithRawResults(a,t).then(e=>_get(e, »hits.hits »,[]).map(e= >_get(e, »_source »,{})))}require(220),module.exports={buildProductsQuery:buildProductsQuery,buildMerchantsAggregation:buildMerchantsAggregation,getProducts:getProducts,getProduct:getProduct,postProduct:postProduct,putProduct:putProduct,patchProduct :patchProduct,deleteProduct:deleteProduct,getMerchantList:getMerchantList,getMerchant:getMerchant,postMerchant:postMerchant,patchMerchant:patchMerchant,putMerc hant:putMerchant,deleteMerchant:deleteMerchant,migrateMerchants:migrateMerchants,getRetailers:getRetailers,getRetailersList:getRetailersList,getRetailer:getRetailer,postRetailer:postRetailer ,putRetailer:putRetailer,deleteRetailer:deleteRetailer,getRetailersByAffiliateId:getRetailersByAffiliateId,getAffiliates:getAffiliates ,getAffiliateRetailers:getAffiliateRetailers,getAffiliateRetailer:getAffiliateRetailer,postAffiliateRetailer:postAffiliateRetailer,putAffiliateRetailer:putAffiliateRetailer,deleteAffiliateRetailer:deleteAffiliateRetailer,isURL:isURL,filterByLocale:filterByLocale,patchLocale:patchLocale,postLocale:postLocale,buildMerchantsByUrlQuery:buildMerchantsByUrlQuery,getAffiliatesByLocale:getAffiliatesByLocale,searchByQueryWithRawResults:searchByQueryWithRawResults,getMerchantsList:getMerchantsList,queryRetailersByUrl:queryRetailersByUrl,queryRetailersByName:queryRetailersByName};

}). call (this)}). call (this, require (28), « / services / universal / agora.js »)}, {« 9 »: 9, « 27 »: 27, « 28 »: 28 , « 36 »: 36, « 53 »: 53, « 63 »: 63, « 64 »: 64, « 100 »: 100, « 146 »: 146, « 220 »: 220, « 1331 »: 1331}] ;
window.modules [« 1333 »] = [function (require, module, exports) {« use strict »; const _map = require (63), _ mapValues ​​= require (215), _ reduce = require (103), _ assign = require ( 150), _ get = require (9), _ pickBy = require (151), _ find = require (55), affiliateFields = [« siteShortKey », « pageUri », « productId », « utmMedium », « utmSource », « sessionCount » , « format », « utmCampaign », « referrer », « deviceAbbreviation », « zone »], affiliateSettings = {amazon: {domains: [« amazon.com », « amazon.co.uk »], subtagKey: « ascsubtag « , maxLength: 99, delimiter: » standard « , encode:! 1}, narrative: {domains: [ » shop-links.co/ » ],subtagKey: »u1″,maxLength:99,delimiter: »standard « , encode:! 0}, rakuten: {domains: [« click.linksynergy.com/deeplink », »linksynergy.walmart.com/deeplink » ],subtagKey: »u1″,maxLength:72,delimiter: »standard »,encode :! 1}, shareasale: {domains: [« shareasale.com »], subtagKey: « afftrack », maxLength: 99, delimiter: « standard », encode:! 1}, skimlinks: {domains: [« go.redirectingat .com « ], subtagKey: » xcust « , maxLength: 50, delimiter: » alt « , encode:! 1}, impact: {domains: [], subtagKey: » subId2 « , maxLeng th: 99, delimiter: « standard », encode:! 1}, avantlink: {domains: [« avantlink.com »], subtagKey: « ctc », maxLength: 64, delimiter: « alt », encode:! 1} , cj: {domains: [« tkqlhce.com », « jdoqocy.com », « dpbolvw.net », « anrdoezrs.net », « kqzyfj.com »], subtagKey: « sid », maxLength: 64, delimiter: « alt », encode:! 1, joinBy: « / », assignBy: « / », positioned:! 0, position: « after », positionKey: « type / dlg / »}, partnerize: {domains: [« prf .hn « ], subtagKey: » pubref « , maxLength: 100, delimiter: » alt « , encode:! 1, joinBy: » / « , assignBy: »: « , positioned:! 0, position: » before « , positionKey : « destination »}, pepperjam: {domains: [« gopjn.com », « pntrac.com », « pjtra.com », « pjatr.com », « pntrs.com », « pntra.com »], subtagKey : « sid », maxLength: 100, delimiter: « alt », encode:! 1}, awin: {domains: [« awin1.com »], subtagKey: « pref1 », maxLength: 100, delimiter: « alt », encode:! 1, positioned:! 0, position: « before », positionKey: « ued »}}, subtagDictionary = {siteShortKey: «  », pageUri: « p », productId: « i », zone: « z », deviceAbbreviation: « d », utmSource: « s », utmMedium: « m », utmCampaign: « c », sessionCount: « u », referrer: « r », format: « t »}, delimiter s = {standard: [« [« , « ] »], old: [« __ », « _ »]}; function parseValueFromSubtag (e, t, i) {const a = t [0] et [1], s = i.split (a) [1] || «  »; return s? s.split (t [0]) [0]: null} function parseSubtag (e, t = delimiters.standard) {return _pickBy (_mapValues (subtagDictionary, i => parseValueFromSubtag (i, t, e)))} function generateSubtag (e, t, i = delimiters.standard, a =! 1) {const s = (e => t => `$ {e [0]} $ {t} $ {e [1]} `) (i); let n = _reduce (affiliateFields, (t, i) => {const a = s (subtagDictionary [i]), n = e [i]; return t (n? an: «  »)}, «  »); return a&& (n = encodeURIComponent (n)), n} function applySubtagMaxlength (e, t) {var i = t-3 * (e .split (« , »). length-1 e.split (« | »). length-1); return e.substr (0, i)} function getSubtagData ({getters: e, fields: t = [], visitState: i, locals: a, productLink: s}) {let n = {}; return t.forEach (t => {n [t] = e [t] &&e [t] ({visitState: i, locals: a, productLink: s})}), n} function parseQuery (e = «  ») {return e.split (« & »). reduce ((e, t) => {const i = t.split (« = « ) [0], a = t.split ( » = « ) [1]; return void 0! == a&& (e [i] = a), e}, {})} func tion processSubtagPosition ({url: e, positionKey: t, subtagKey: i, position: a = « after », subtagString: s, joinBy: n, assignBy: o} = {}) {const [r, l] = e. split (t), u = `$ {i} $ {o} $ {s}`, g = []; if (« after » === a) {if (! l) return e; const [a, s = «  »] = l.split (`$ {i} $ {o}`), d = s.split (n) .slice (1) .join (n); g.push (`$ {r} $ {t} `, u), a&&g.push (a), d&&g.push (d)} if ( » before « === a) {const [e, a = » « ] = r.split (` $ {i} $ {o} `), s = a.split (n) .slice (1) .join (n); g.push (e), s&&g.push (s), g.push (u,` $ {t} $ {l} `)} return g.reduce ((e, t) => {return e.slice (-1) === n&& (e = e.slice (0, -1)), e.length? [e, t] .join (n): t}, «  »)} function processSubtag ({getters: e, affiliate: t, url: i, visitState: a = {}, locals: s}) {const n = affiliateFields, o = _get (affiliateSettings [t], « subtagKey »), r = _get (affiliateSettings [t], « maxLength »), l = _get (affiliateSettings [t], « encode »), u = _get (affiliateSettings [t], « delimiter »), g = _get (affiliateSettings [t], « positioned »,! 1), d = _get (affiliateSettings [t], « position »), c = _get (affiliateSettings [t ], « positionKey »), p = _get (affiliateSettings [t], « assignBy », « = »), m = _get (affiliateSettings [t], « joinBy », « & »), f = delimiters [u]; let b, y, S = i. indexOf (« ? »)> = 0? i.split (« ? »). pop (): «  », h = parseQuery (S), _ = getSubtagData ({getters: e, fields: n, visitState: a, locals: s, productLink: i}); return o&& (y = h [o] || «  », y = applySubtagMaxlength (b = generateSubtag (_ = _ assign (parseSubtag (y, f), _ pickBy (_)), t , f, l), r), h [o] = y, S = _map (h, (e, t) => `$ {t} = $ {e}`) .join (« & »), i = g? processSubtagPosition ({url: i, positionKey: c, subtagKey: o, position: d, subtagString: y, joinBy: m, assignBy: p}): i.split (« ? ») [0] `? $ {S} `), i} function getAffiliate (e) {const t = Object.keys (affiliateSettings); return _find (t, t => _ find (affiliateSettings [t] .domains, t => e.includes (t. toLowerCase ()))) || «  »} function createSubtagProcessor (e) {return ({url: t, visitState: i, locals: a, affiliate: s}) => (s = getAffiliate (t) || s) ? processSubtag ({getters: e, url: t, affiliate: s, visitState: i, locals: a}): «  »} module.exports.generateSubtag = generateSubtag, module.exports.getAffiliate = getAffiliate, module.expo rts.createSubtagProcessor = createSubtagProcessor, module.exports.processSubtag = processSubtag;
}, {« 9 »: 9, « 55 »: 55, « 63 »: 63, « 103 »: 103, « 150 »: 150, « 151 »: 151, « 215 »: 215}];
window.modules [« article-nav.client »] = [function (required, module, export) {« use strict »; const dom = required (4), _ throttle = required (50), $ visibility = required (5), $ popup = require (65), $ gtm = require (3), {reportSocial: reportSocial} = require (66) , auth0 = require (7); module.exports = (t => {let e = dom.find (« .page-header »), i = dom.find (« . article-content »), r = dom.find (t, « . deepscroll- headline « ), o = dom.find (t, ». deepscroll-rubric « ), s = dom.find (t, ». deepscroll-rubric-sponsored « ), l = dom.find (« . article .article- header .rubric « ), n = dom.find ( » # deepscroll_center_divider « ), a = dom.find (« . tone paragraph « ), d = dom.find (t, ». logo « ), c = dom. find (t, « . dyn-cut-logo »), p = dom.find (t, « . article-nav-top »), u = dom.find (t, « . article-nav-deepscroll »), m = dom.find (‘link [rel = « canonical »]’), f = m&&m.getAttribute (« href »), g = dom.find (‘meta [property = « og: image »]’)? dom .find (‘meta [property = « og: image »]’) .getAttribute (« content »): «  », h = dom.find (‘meta [property = « og: title »]’)? dom.find (‘meta [property = « og: title »]’). getAttribute (« content »): «  », y = dom.find (t, « . share -link.facebook »), w = dom.find (t , « . share-link.twitter »), v = dom.find (t, « . share-link.pinterest »), b = t.classList.contains ( « header-simple »), x = window.getComputedStyle (d, null) .getPropertyValue (« – targetFlexBasis »), L = window.getComputedStyle (d, null) .getPropertyValue (« – verticalStart ») || 0, C = window.getComputedStyle (d, null) .getPropertyValue (« – verticalEnd ») || 0, $ =! 1, _ = 55; function k () {_ = parseInt (window.getComputedStyle (d, null). getPropertyValue (« – stickyTop »)) || _, C = $ visibility.getViewportWidth ()> = 1180? window.getComputedStyle (d, null) .getPropertyValue (« – verticalEndDesktop ») || C: window.getComputedStyle ( d, null) .getPropertyValue (« – verticalEnd ») || C} function S () {$ =! 1, P ()} function P () {let {top: r} = t.getBoundingClientRect (), o = window.getComputedStyle (d, null) .getPropertyValue (« – baseFlexBasis »), s = ox, l = (_- e.getBoundingClientRect (). top) / _, n = Math.max (0, Math.min (1, l)), m = LC-2, f = Math.round (L- (m * n 2)), g = Math.ceil (os * n); if (lt? E.classList.add ( « header-after-scroll »): e.classList.remove (« header-after-scroll »), p.style.transfo rm = `translateY ($ {C} px)`, u.style.transform = `translateY ($ {C} px) `, void (d.style.flexBasis = x » px « )} window.scrollY> r? T. classList.add (« after-scroll »): t.classList.remove (« after-scroll »), window.scrollY> r? e.classList.add (« header-after-scroll »): e.classList.remove (« header-after-scroll »), p.style.transform = `translateY ($ {f} px)`, u.style.transform = `translateY ($ {f} px)`, d.style.flexBasis = g « px », c&& (c.style.flexBasis = g « px »), $ visibility.getViewportWidth ()> = 1180&&i&&function () {const t = a? $ visibility.getPageOffset (a). e = $ visibility.getPageOffset (i) .top, r = Math.max (e, t); return Math.max (window.scrollY, document.body.scrollTop)> = r} ()? t.classList.add (« deep-scroll »): t.classList.remove (« deep-scroll »)} function V (t) {var e = t.currentTarget, i = e.getAttribute (« href »), r = e.getAttribute (« data-handle »), o = $ popup.getPopupClass (e.classList), s = $ visibility.isBelowPrimaryContent (e)? « bottom »: « top »; $ gtm.reportNow ({event: « social-share -widget « , clickLocation: s, socialNetw ork: o}), reportSocial (o), $ visibility.getViewportWidth ()> = 768&&o&& (t.preve ntDefault (), $ popup.popWindow (o, r, i))}! function () {const e = _throttle (P, 30); if (k (), dom.findAll (t, « . share-link » ) .forEach (t => t.addEventListener (« click », V)), y&& (y.href = « http://www.facebook.com/sharer/sharer.php?u= » f « ? utm_source = fb&utm_medium = s3&utm_campaign = sharebutton-t « ), w&& (w.href = » https://twitter.com/share?text= « encodeURIComponent (h) » &url = « f »? utSSm_mediumsource = = « w.getAttribute ( » data-handle « )), v&& (v.href = » http://pinterest.com/pin/create/button/?url= « f »? utm_source = pin&utm_medium = s3&utm_campaign = sharebutton- t&description = « encodeURIComponent (h) » &media = « g), b) return; auth0.on ( » init « , () => {auth0.isSubscriber () &&t.classList.add ( » subscribed « )}), window .addEventL istener (« scroll », e), window.addEventListener (« resize », S), window.addEventListener (« resize », k), l? l.classList.conta ins (« rubric-sponsor-story ») &&s? (o.classList.remove (« visible »), s.classList.add (« visible »), s.textContent = l.text || l.textContent) 🙁 o.textContent = l.text || l.textContent, o.href = l.href || « # ») 🙁 n.style.display = « none », o.style.display = « none »); p (), r.textContent = h} ()});
}, {3: 3, 4: 4, 5: 5, 7: 7, 50: 50, 65: 65, 66: 66}];
window.modules [« nav-search-button.client »] = [function (required, module, export) {« use strict »; const dom = required (4), $ gtm = required (3), {reportSearch: reportSearch} = require (66), openClass = « open », closeClass = « closed »; module.exports = (e => {const s = e, t = dom.find (e, « . nav-search-button-trigger »), n = dom.find (e, « . nav-search-form » ), o = dom.find (e, « . search-input »); function i () {const e = dom.find (« body »); s.classList.toggle (closeClass), s.classList.toggle ( openClass), e.classList.toggle (« disabled »), e.classList.toggle (« search-active »)} function c () {i (), s.classList.contains (openClass) &&o.focus ()} Function a (e) {! S.contains (e.target) &&s.classList.contains (openClass) &&i ()} function) {27 === e.keyCode&&s.classList.contains (openClass) &i (e) {e.preventDefault (), $ gtm.reportCustomEvent ({category: « search », label: « on = » window.location.href, action: o.value}), reportSearch ((o.value || «  »). split («  »), () => n.submit ())}! function (e, s, t) {s&&s.addEventListener (« click », c); t&&t.addEventListener (« submit », d); e.addEventListener (« click », a), document.addEventListener (« keydown », r), e.addEventListener (« touchend », a), n.addEventListener (« submit », d)} (dom.find (« body »), t, dom.find (e, « . nav-search-form Submit »))});
}, {« 3 »: 3, « 4 »: 4, « 66 »: 66}];
window.modules [« nav-dropdown-button.client »] = [function (require, module, exports) {« use strict »; const dom = require (4), visibility = require (5), {reportSearch: reportSearch} = require (66); function getNextSiblings (e) {const t = []; let i = e; for (; i = i.nextElementSibling;) t.push (i); return t} function getMainChildren (e, t) {let i = [], n = e.firstChild; for (; n = n.nextElementSibling;) n.contains (t)? n.isSameNode (t) || (i = i.concat (getMainChildren (n, t ))): i.push (n); return i} function isMobile () {return visibility.getViewportWidth () {let t; const i = e.querySelector (« . nav-dropdown-button-trigger »), n = dom.find (« body »), o = dom.find (« . top »), l = dom.find (« . confetti-list »), s = dom.find (« . nav-dropdown-button_nymag-homepage « ), r = dom.find ( » header.page-header « ) || o, c = dom.find (‘[data-editable = » main « ]’), a = dom.closest (e, ». page-header « ), d = a? a.querySelectorAll (« . confetti-image.blue « ): » « , g = a? a.querySelectorAll (« . confetti-image.green « ): » « , u = a? a.querySelectorAll (« . confetti-image.orange »): «  », f = a? a.querySelectorAll (« . confetti-image.orange2 »): «  », m = a? a.querySe lectorAll (« . confetti-image.pink »): «  », p = a? a.querySelectorAll (« . confetti-image.purple »): «  », h = a? a.querySelectorAll (« . confetti-image. yellow « ): » « , y = e.querySelectorAll (« . dropdown-nav-search-form « ); function b (e) {let t = e.currentTarget, i = t.querySelector (« . nav-search- input « ), n = i? i.value.split ( » « ): []; e.preventDefault (), reportSearch (n, () => t.submit ())} i.addEventListener ( » click « , () => {initializeHeight (e), v ()}); for (let e = 0, t = y.length; e (function (e) {e.classList.remove (« c-right », « c -rightdown « , » c-left « , » c-leftdown « )}) (e))}, 500)} ()) 🙁 i.setAttribute ( » aria-expanded « , » true « ), t = window .scrollY), e.classList.toggle (« closed »), e.classList.toggle (« open »), n.classList.toggle (« disabled »), a&&e.isSameNode (s)? function () {if ( o.contains (e)) {const e = getMainChildren (o, s); S (e), w (o)} if (c.contains (e)) {const e = getMainChildren (c, s); o. classList.toggle (« hidden-component »), w (c), S (e)} e.classList.toggle (« open-mobile »)} (): a&&! y&&r&& (w (r), function () { const i = e .classList.contains (« open »)? 0: t; window.scrollTo ({top: i})} ())} function w (e) {S (getNextSiblings (e))} function S (e) {e .forEach (e => {e.classList.toggle (« hidden-component »)})} n.addEventListener (« click », t => {! e.contains (t.target) &&e.classList.contains ( » open « ) &&v ()}), document.addEventListener ( » keydown « , t => {27 === t.keyCode&&e.classList.contains ( » open « ) &&v ()})});
}, {« 4 »: 4, « 5 »: 5, « 66 »: 66}];
window.modules [« follow.client »] = [function (require, module, exports) {« use strict »; const _find = require (55), $ popup = require (65); DS.controller (« follow », [function () {function e (e) {this.el = e, this.handle = e.getAttribute (« data-handle »)} return e.prototype = {events: {click: « openFollow »}, openFollow: function (e) {var t, n, a = $ popup.position, o = $ popup.params, l = {}, r = {w: 780, h: 500}, s = new a (rw, rh) , c = this.el.classList; l.handle = this.handle, r.left = s.left, r.top = s.top, n = _find ([{className: « facebook », url: « https: //facebook.com/{handle} »,network: »Facebook »},{className: »pinterest »,url: »http://www.pinterest.com/ registers »,network: »Pinterest « }, {className: « instagram », url: « https://www.instagram.com/ Zonenhandle} », network: « Instagram »}, {className: « rss », url: « http: //feeds.feedburner. com / {handle} « , network: » RSS « }, {className: » twitter « , url: » https://twitter.com/intent/follow?screen_name=phiahandle Genealogie&tw_p=followbutton&variant=2.0 « , network: « Twitter »}, {className: « snapchat », url: « https://www.snapchat.com/discover/ Genealogiehandle} », netw ork: « Snapchat »}], function (e) {return c.contains (e.className)}), l.url = n.url.replace (« {handle} », l.handle), l.network = n.network, l.name = « Follow » l.handle « on » l.network, t = new o (l, r), window.open (t.address, t.name, t.features), e. preventDefault ()}}, e}]);
}, {« 55 »: 55, « 65 »: 65}];
window.modules [« comment-link.client »] = [function (required, module, export) {« use strict »; const dom = required (4), _ get = required (9), _ isFinite = required (122), ajax = require (121); DS.controller (« comments link », [function () {var t, e = « http: // » document.documentElement.getAttribute (« data-uri ») « .html »; function n (n) {var o; (this.el = n, this.coral_talk_root = n.getAttribute (« data coral talk »), this.commentsCount = dom.find (n, « . comments link number »), this.commentsText = dom.find (n, « . Comments-Link-Text »), this.isNavVariation = n.classList.contains (« Comments-Link-Article-Nav »), this.cutoffCnt = n.getAttribute (« data-cutoffCnt » ) || 1e3, t = `$ {this.coral_talk_root} /api/v1/graph/ql`,this.shouldRenderCommentStream ()) && (o = this.onCommentCountFetched.bind (this), ajax. SendReceiveJson ({method: « GET », URL: t ‘? Query = {Asset (URL: « ‘ e ‘ ») {totalCommentCount}}’, data type: « json »}, function (t, e) {var n = _get (e,  » data.asset.totalCommentCount « , 0); return t? o (t): _ isFinite (n)? void o (null, n): o ( » Unexpected Coral Talk response « )})}) return n. per totype.onCommentCountFetched = function (t, e) {if (t) return conso le.warn (t); e> 0&& (this.isNavVariation&&e1? « s »: «  »), this.el.classList.remove (« no-comments »))}, n.prototype.shouldRenderCommentStream = function () { return-1! == e.indexOf (« @ published »)}, n}]);
}, {« 4 »: 4, « 9 »: 9, « 121 »: 121, « 122 »: 122}];
window.modules [« head-gtm.client »] = [function (require, module, exports) {« use strict »; const {getCLS: getCLS, getFID: getFID, getLCP: getLCP} = require (154), isProduction = require (8) (); function reportWebVitals (e) {isProduction || console.log (« reportWebVitals:% O », e); const t = « string » == typeof e.name?e.name.toUpperCase () : e.name; window.dataLayer = window.dataLayer || [], window.dataLayer.push ({event: « analyticsEvent », event_action: t, event_category: « Web Vitals », event_label: e.id, event_value: e .delta, eventAction: t, eventCategory: « Web Vitals », eventLabel: e.id, eventNonInt:! 0, eventValue: e.delta, nonInteraction:! 0, transport: « beacon »})} getCLS (e => { e.delta = Math.round (1e3 * e.delta), reportWebVitals (e)}), getFID (e => {e.delta = Math.round (e.delta), reportWebVitals (e)}), getLCP ( e => {e.delta = Math.round (e.delta), reportWebVitals (e)});
}, {« 8 »: 8, « 154 »: 154}];
window.modules [« concert-ads.client »] = [function (require, module, exports) {« use strict »; const customMappings = {« crime-assault »: « Power », « career money productivity »: « Power « , » feminism-politics-identity « : » Power « , » culture-media « : » Culture « , celebrity: » Culture « , living: » Style « , fashion: » Style « , shopping: » Style « , weddings: « Style », beauty: « Style », animals: « Self », « learning creativity »: « Self », « relationships-friends family »: « Self », « mental health personality social behavior »: « Self », « learning creativity « : » Self « , » health-wellness « : » Self « , parenting: » Self « , » relationships-sex dating marriage « : » Self « }, striptags = require (67); function installConcertAds () {const e = new URLSearchParams (window.location.search) .get (« concert_config_url »), t = e || window.concertConfigUrl; window._nymPermutive || console.warn (« ConcertAds initializing without Permutive »), window.concertAds = createConcertAds ( ), window.concertAds.loadRemoteConfig (t) .then (function () {window.concertAds.install ()})} function createConcertAds () {const e = getAuthStatus (); let t = getD ata (« title »), n = window.location.href, i = getData (« section »), o = «  », a = getData (« type »), r = getData (« vertical »); t&& (t = striptags (htmlDecode (t)). split («  »)), n = n.slice (n.lastIndexOf (« / ») 1); const l = {kw: getKeywords (), network: r, page_type: a , entry_group: i, keywords: t, pn: n}; return « Homepage » === a? o = « homepage »: « Section Page » === a&& (o = (o = window.location.pathname). replace (/ // g, «  »)), i&&-1 === i.indexOf («  ») && (o = i), customMappings [i] && (o = customMappings [i]), window.location .hostname.match (/ . aws ./ i) ​​&& (l.clay_sandbox_env = r), new window.ConcertAds ({cmd: [], slots: [], dfpVariables: l, slugPath: « / » o. replace (/ – | – / g, « -« ), loggedIn: « unauthenticated »! == e, paywallActive: getPaywallStatus (e)})} function getKeywords () {try {const e = window._nymPermutive.article.keywords ; return e&&e.length> 0&&e.some (Boolean)? e: (document.querySelector (‘meta [name = « keywords »]’) || document.querySelector (‘meta [property = « article: tag »]’)). getAttribute (« content »). split (« , »). map (function (e) {return e.trim ()})} catch (e) {return}} function getData (e) {if (window._nymPermutive) {if (e in window._nymPermutive) return window._nymPermutive [e]; if (window._nymPermutive.article&&e in window._nymPermutive.article) return window. _nymPermutive.article [e]; if (window._nymPermutive.user&&e in window._nymPermutive.user) return window._nymPermutive.user [e]}} function htmlDecode (e) {var t = document.createElement (« div »); return t.innerHTML = e, 0 === t.childNodes.length? «  »: t.childNodes [0] .nodeValue} function getAuthStatus () {const e = JSON.parse (localStorage.getItem (« auth0: profile » )), t = e? e [« http://nymag.com/app_metadata »]: null; return t? t.has_subscription? « entitled »: « unentitled »: « unauthenticated »} function getPaywallStatus (e) {const t = getData (« totalCount ») || 0; return Boolean (t> = 3&& « entitled »! == e)} window.ConcertAds? installConcertAds (): window.addEventListener (« concertAdsReady », in stallConcertAds);
}, {« 67 »: 67}];
window.modules [« latest-news.client »] = [function (required, module, export) {« use strict »; const dom = required (4), lazyLoad = required (108); Function lazyLoadImage (a) {const o = dom.find (a, « img [data-src] »), d = dom.findAll (a, « source [data-srcset] »), e = dom.closest (a , « . result »); if (o&&e) {new lazyLoad.LazyLoader (e, o, d) .init ()}} function handleLazyLoad (a) {(dom.findAll (a, « . result ») || []). forEach (lazyLoadImage)} module.exports = (a => {handleLazyLoad (a)});
}, {« 4 »: 4, « 108 »: 108}];
window.modules [« coral-talk.client »] = [function (required, module, export) {« use strict »; const dom = required (4), store = required (128), visibility = required (5), auth0 = require (7), TALK_AUTH = « talk: auth_token »; let coralEmbed, hasEmbedScriptLoaded =! 1, hasCoralTalkRendered =! 1; function renderComments (e) {if (hasEmbedScriptLoaded&&! hasCoralTalkRendered {const) e.CORAL_TALK_HOST} `, auth_token: getAuthToken (), asset_url: e.TALK_ASSET_URL}; hasCoralTalkRendered =! 0, coralEmbed = window.Coral.Talk.render (e.commentStreamContainer, t)}} function getAuthToken (e) {e) = e&&e [« http://nymag.com/coral_talk »] || auth0.getTalkJwt (), i = store.get (TALK_AUTH); return t? i&&t == i? i: (store.set (TALK_AUTH, t), t) 🙁 i&&store.remove (TALK_AUTH), null)} function coralLogin () {coralEmbed.login (getAuthToken ())} function embeddedScript (e, t) {let i = document.createElement (« script »); i.type = « text / javascript », i.async =! 0, i.src = e, i.addEventListener (« load », () => {hasEmbedScriptLoaded =! 0, r enderComments (t)}), document.getElementsByTagName (« head ») [0] .appendChild (i) } function initVerificationMessage () {auth0.isAuthenticated () &&auth0.refresh (); let e = document.querySelector (« . coral-talk-container »); auth0.isAuthenticated () &&! authARCH0.isEmail. insertAdjacentHTML (« beforebegin », ‘ n n Please verify your account to enable commenting. You haven’t received a confirmation email? Re-send email now. n’), document.querySelector (« . activation-link » ) .addEventListener (« click », sendVerificationEmail))} function sendVerificationEmail () {let e = document.querySelector (« . coral-talk-verify-address »); return fetch (`https: // $ {window.location. host} / _ user / verification-email? user_id = $ {auth0.getUserID ()} `, {method: » GET « , headers: { » Content-Type « : » application / json « }}). then (e = > e) .then (t => {t&&200 == t.status? e.innerHTML = « Verification email was sent successfully « : e.innerHTML =` $ {t.statusText} `}). catch (e => console.log (e))} function attemptScriptEmbedding (e, t) {initVerificationMessage (), hasEmbedScriptLoaded? renderComments ( t): embedScript (t.EMBED_URL, t)} function addVisibilityListener (e, t) {new visibility.Visible (e, {preloadThreshold: 750}). on (« preload », () => attemptScriptEmbedding (e, t) )} function removeSignInButton (e) {e&&e.parentNode&&dom.removeElement (e)} function init (e) {const t = e.getAttribute (« data-coral-talk-host »), i = `$ {t} / static / embed.js`, n = `http: // $ {document.documentElement.getAttribute ( » data-uri « )}. html`, a = » true « === e.getAttribute ( » data-maintenance « ) , o = -1! == n.indexOf (« @ published »), r = e.querySelector (« . coral-talk-container »), s = e.querySelector (« . coral-talk-btn-signin » ), c = {CORAL_TALK_HOST: t, EMBED_URL: i, commentStreamContainer: r, signInButton: s, TALK_ASSET_URL: n} ;! a&&o&& (auth0.on., « initer » add (e, cListen) => { .addEventListener (« click », () => aut h0.showLogin ()), auth0.isAuthenticated () &&removeSignInButton (s)}), auth0.on (« login », t => {removeSignInButton (s), getAuthToken (t), visibility.isElementInViewport (e) &C ), hasCoralTalkRendered&&coralLogin ()}), auth0.on (« logout », () => {store.remove (TALK_AUTH)}))} module.exports = init;
}, {« 4 »: 4, « 5 »: 5, « 7 »: 7, « 128 »: 128}];
window.modules [« choreographer.client »] = [function (required, module, export) {« use strict »; const cookie = required (54), _ get = require (9), _ omit = require (86), {insertSpeedBumpComponents: insertSpeedBumpComponents} = require (91), {insertNewsletterSpeedBumpComponents: insertNewsletterSpeedBumpComponents} = require (90), {generateGrowl: generateGrowl } = require (89), gtm = require (3), {getLocalStorage: getLocalStorage, setLocalStorage: setLocalStorage: setLocalStorage 30), {reportPaywall: reportPaywall} = require (66), moment = require (37), {getClientHistory: getClientHistory, updateClientHistoryWithPageData: updateClientHistoryWithPageData} = require (92), auth0 = require (7), {scenario: scenario} = require (87), cidReadyEvent = « nymcid-set », cidKey = « nymcid », isProduction = require (8) () , logger = require (85) .Logger (() => getLocalStorage (« show_choreographer_logs »)), {Verdon: Verdon} = require (88), TEST_COHORT_FLAG = « optimizeCohort »; Function displayDebug (e = «  ») {if (« Permission »! == e.split (« # »). Pop ()) return; const t = _get (window, « dataLayer [0] .userDetails », {}), o = _get (window, « dataLayer [0] .pageDetails.featureTypes », «  »), n = o.includes (« magazine » )? « magazine »: «  », r = o.includes (« feature »)? « featured »: «  », i = « Value of Article: » (n || r || « article »), a = _get (JSON.parse (localStorage.getItem (« auth0: profile »)), « http://nymag.com/app_metadata »), l = « Authentication Status: » (a? « Authenticated »: « unauthenticated »), s = « Entitlement Status: » (!! a&&a.has_subscription? « Entitled »: « unentitled »), c = Object.keys (_omit (t, « newYorkMediaUserID »)). Map (e => `$ {e}: $ {t [e]} `), d = document.body, g = document.createElement ( » div « ), u = document.createElement ( » ul « ); [i, l, s, … c]. map (e => {const t = document.createElement (« li »); return t.classList.add (« debug-item »), t.appendChild (document.createTextNode (e)), t}). forEach ( e => {u.appendChild (e)}), u.classList.add (« data-bullets »), g.classList.add (« debug-choreographer »), g.classList.add (« display-debug- data « ), g.appendChild (u), d.appendChild (g)} function initializeChoreographer (e) {const t = e.getAttribute (« data-site-slug »), o = pageShouldCountAsView (t), n = auth0.isSubscriber (); return t? getClientId (cidKey, 8e3) .then (e => (logger.h1 (« Choreographer initialized « ), logger.log (` clientId: $ {e} `), logger.log (` page counts as a view: $ {o} `), window.nymViewsResponse || (o? updateClientHistoryWithPageData (e, t) : getClientHistory (e)))). then (r => {if (logger.group (), logger.h2 (« Client history »), logger.table (r), logger.groupEnd (), isNCR ()) return; const {scenarios: i, touts: a, testCohort: l = «  »} = readJSONFromScript (e.querySelector (« script »)); if (! (l === (document.body.dataset [TEST_COHORT_FLAG] | | «  »))) return; const s = i.map (e => Scenario (Object.assign ({}, e, {history: r, siteSlug: t, isSubscriber: n}))). filter (e = > (logger.group (), logger.h2 (« Evaluating scenarios »), logger.log (e), logger.groupEnd (), e.shouldShow)). reduce ((e, {action: t, min: o , count: n}) => {const r = a.find (({value: e}) => e === t); return r? (e [r.type] = r, e [r.type ] .viewCount = no, e): e}, {}); logger.group (), logger.h2 (« Active Touts »), logger.log (s), logger.groupEnd (), executeTouts (e, o , s, r)}). c atch (console.error): console.error (« siteSlug not found. »)} function documentIncludes Component (e) {return document.querySelector (`[data-uri * = » / $ {e} / « ]`)} function pageShouldCountAsView (e) {const t = « strategist » === e, o = [« product », « product-grid »]. find (e => documentIncludesComponent (e)); return t ||! o} function executeTouts (e, t, o = {}, n) {const {global: r} = n, i = {featureArticleCount: r.Feature || 0, magazineArticleCount: r.Magazine || 0, standardArticleCount: r.Article | | 0, totalArticleCount: r.total || 0}, a = window.concertAds, l = window.ConcertAds; if (o [« speed-bump »] && (_get (a, « adsBlocked »,! 0)? InsertSpeedBumpComponents (findTemplate (e, « speed-bump »), o [« speed-bump »], i): a.lifecycle.listenAndPlayback (l.events.slotsInserted, () => {insertSpeedBumpComponents (findTemplate (e, « speed- bump « ), o [ » speed-bump « ], i)})), o [ » newsletter-speed-bump « ] && (_get (a, » adsBlocked « ,! 0)? insertNewsletterSpeedBumpComponents (findTemplate (e, » newsletter-speed-bump « ), o [ » newsletter-speed-bump « ], i): a.lifecycle.listenAndPlayback (l .events.slotsInserted, () => {insertNewsletterSpeedBumpComponents (findTemplate (e, « news letter-speed-bump »), o [« newsletter-speed-bump »], i)})), o [« branded-growl » ] &&brandedTakeoverTime (o [« branded-growl »]) &&t) return logger.log (« should show branded growl »), void growlManager (findTemplate (e, « branded-growl »), {baseTrackingData: i, body: o [ « branded-growl »]. brandedGrowlBody, contentClass: « branded-content », cta: o [« branded-growl »]. brandedGrowlCTA, imageUrl: o [« branded-growl »]. imageUrl, link: o [« branded- growl « ]. brandedGrowlLink, name: o [ » branded-growl « ]. name, scrollDepth: o [ » branded-growl « ]. brandedGrowlScrollDepth, title: o [ » branded-growl « ]. brandedGrowlTitle, toutType: » branded growl « }, » # branded-growl « ); if (t&&o [ » content-cliff « ]) contentCliff (findTemplate (e, » content-cliff « ), o [ » content-cliff « ], o [ » content-cliff « ] .viewsLeft, n); else {if (t&&o [ » cliff-takeover « ]) return / coronavirus news | pivot | paywall exclude / i.test (window._nymGtmPage.tags)? void (isProduc tion&&logger.log (« Content cliff no-op due to excluded tag match: », window._nymGtmPage.tags)): void cliffTakeover (findTemplate (e, « paywall-reader-interface »), i, o [« cliff-takeover « ]); if (o [ » growl-newletter « ] ||! o [ » promo-growl « ]) if (o [ » baby-growl « ]) babyGrowl (findTemplate (e, » paywall-reader-interface  » ), i, o [« baby-growl »]); else {if (! o [« warning-growl-2 »]) return o [« warning-growl »] &&shouldWarn ()? (setContentCliffWarningDisplayed (), logger. log (« should show warning »), void growlManager (findTemplate (e, « warning-growl »), {contentClass: « warning-content », title: o [« warning-growl »]. warningGrowlTitle, name: o [ » warning-growl « ]. name, scrollDepth: o [ » warning-growl « ]. warningGrowlScrollDepth, cta: o [ » warning-growl « ]. warningGrowlCTA, body: o [ » warning-growl « ]. warningGrowlBody, link: o [« warning-growl »]. warningGrowlLink, baseTrackingData: i, toutType: « warning growl »}, « # warning-growl »)): void 0; warningGrowl (findTemplate (e, « paywall-reader-interface »), i , o [« warning-growl-2 »])} else growlManager (findTempla te (e, « growl-message »), {contentClass: « promo-content », title: void 0, name: o [« promo-growl »] .name, scrollDepth: o [« promo-growl »]. promoGrowlScrollDepth , cta: o [« promo-growl »]. promoGrowlCTA, body: o [« promo-growl »]. promoGrowlMessage, link: o [« promo-growl »]. promoGrowlLink, baseTrackingData: i, toutType: « promo growl » }, « # growl-message »)}} function shouldWarn () {return! contentCliffWarningDisplayed ()} function getContentCliffWarningDisplayedKey () {const e = new Date, t = e.getMonth (); return`content-cliff-warning-displayed – $ {e.getFullYear ()} – $ {t} `} function contentCliffWarningDisplayed () {const e = getContentCliffWarningDisplayedKey (); return » true « === getLocalStorage (e)} function setContentCliffWarningDisplayed () {const e = getDisplayedWarning () ); return setLocalStorage (e, « true »)} function growlManager (e, {contentClass: t, scrollDepth: o, name: n, title: r, body: i, cta: a, link: l, baseTrackingData: s, toutType: c, imageUrl: d = null}, g = «  ») {const u = function () {const e = ` n n n n n $ {r} n $ {d?  »: » « } n $ {i} n $ {d?`: «  »} n $ {a} n n n n `; return document.createRange (). createContextualFragment (e)} () , p = {creative: i, id: c, name: n, position: « growl »}; u.querySelector (« a »). addEventListener (« click », () => promotionReport (« Click », s, p)), generateGrowl (e, g, {content: u, scrollDepth: o, onShow: () => promotionReport (« View », s, p)})} function contentCliff (e, t, o, n) { const {first_visit: r, global: i} = n, a = {totalArticleCount: i.total || 0, standardArticleCount: i.Article || 0, featureArticleCount: i.Feature || 0, magazineArticleCount: i.Magazine || 0}, {contentCliffBody: l} = t, s = document.importNode (e,! 0) .querySelector (« . Content-cliff »), c = document.querySelector (« . Article-content> .clay-paragraph » ), d = {creative: l, id: « content cliff », name: « Content Cliff », position: « in-article »}; s&& (c.insertAdjacentHTML (« afterend », s.outerHTML), require ( » content-cliff.client « ) (document.querySelector (« . content-cliff « ), {contentCliffOptions: t, viewsLeft: o, firstVisit: Number (r), onShow :() =>promotionReport(« View »,a,d),onClickCliff:()=>promotionReport(« Click »,a,d)}))}functio n verdonFosseToutSetter(e,t,o,n,r){const i=new Verdon({container: ».paywall-reader-interface »,url: »https://fosse.nymag.com/fosse/v1.6.1/index.html »}),a=e.type,l={email:auth0.getEmail(),isAuthenticated:auth0.isAuthenticated(),isSubscriber:auth0.isSubscriber()};n.classList.add(a),i.once(« frame:ready »,()=>{i.sendMessage(« tout:show »,{readerState:l,toutType:a,toutData:e}),r&&i.sendMessage(« frame:height »)}),i.on(« tout:visible »,()=>{promotionReport(« View »,t,o)}),i.on(« tout:sign-in »,()=>{auth0.showLogin(window.location.href)}),i.on(« tout:log-out »,()=>{auth0.logout()}),i.on(« tout:dismiss »,()=>{n.classList.add(« dismiss »),i.sendMessage(« tout:hide »,{toutType:a,toutData:e})}),i.on(« tout:subscribe »,()=>{e.ctaLink=replaceQueryParams(e.ctaLink),promotionReport(« Click »,t,o),window.open(e.ctaLink, »_blank »)}),i.on(« frame:height »,e=>{n.style.height=`${e.payload.currentHeight 10}px`}),i.on(« tout:view-a ccount »,()=>{window.location.href= »https://subs.nymag.com/account »})}function promotion Report(e,t,o){const{creative:n,id:r,name:i,position:a}=o;t.event=`eec.promotion${e}`,t.ecommerce={promoView:{promotions:[{creative:n.trim(),id:r,name:i,position:a}]}},gtm.reportNow(t),reportPaywall({creative:n.trim(),eventType:e,id:r,name:i,position:a})}function babyGrowl(e,t,o){const n=document.importNode(e,!0).querySelector(« .paywall-reader-interface »),r={creative:o.babygrowlDescription,id: »baby growl »,name: »baby growl »,position: »growl »};document.body.appendChild(n),o.ctaLink=o.babygrowlCtaLink,o.ctaText=o.babygrowlMessage,o.headline=o.babygrowlDescription,verdonFosseToutSetter(o,t,r,n)}function cliffTakeover(e,t,o){const{cliffTakeoverCTA:n,cliffTakeoverCtaLink:r,cliffTakeoverDescription:i,cliffTakeoverImage:a,cliffTakeoverPromo:l,cliffTakeoverStatus:s,type:c}=o,d=document.importNode(e,!0).querySelector(« .paywall-reader-interface »),g=document.querySelectorAll(« .clay-paragraph »),u={creative:l,id: »c ontent cliff »,name: »Content Cliff »,position: »growl »},p={cta:n,ctaLink:r,description:i,im age:a,promo:l,status:s,type:c};document.body.appendChild(d),g.forEach((e,t)=>{0!==t&&e.remove()}),verdonFosseToutSetter(p,t,u,d,!0),document.querySelector(« html »).style.overflowY= »hidden »,document.body.style.position= »fixed »}function warningGrowl(e,t,o){const{type:n,warningGrowl2CTA:r,warningGrowl2CtaLink:i,warningGrowl2Description:a,warningGrowl2Image:l,warningGrowl2Promo:s,warningGrowl2Status:c}=o,d=document.importNode(e,!0).querySelector(« .paywall-reader-interface »),g={creative:s,id: »warning growl »,name: »Warning Growl »,position: »growl »},u={cta:r,ctaLink:i,description:a,image:l,promo:s,status:c,type:n};document.body.appendChild(d),verdonFosseToutSetter(u,t,g,d,!0)}function getClientId(e= » »,t=8e3){let o=cookie.get(e);return o?Promise.resolve(o):new Promise((o,n)=>{const r=setTimeout(()=>{n(`could not find key: ${e} on cookie after ${t}ms`)},t);window.addEventListener(cidReadyEv ent,()=>{clearTimeout(r),o(cookie.get(e))})})}function readJSONFromScript(e){try{return J SON.parse(e.innerHTML)}catch(e){return{touts:[],scenarios:[]}}}function findTemplate(e,t= » »){const o=e&&e.querySelector(`[data-template-id= »${t} »]`);return o&&o.content}function isNCR(){return/[?&]source=ncr/.test(location.search)}function brandedTakeoverTime(e){const{startTime:t,endTime:o,startDate:n,endDate:r}=e,i=n.concat( » « ,t),a=r.concat( » « ,o),l=moment(i),s=moment(a);return moment().isBetween(l,s)}function optimizeDebugger(){return new Promise(e=>{const t=window.location.search|| » »;if(t){const o=new URLSearchParams(t),n=o.get(« optimize-attribute-name »)|| » »,r=o.get(« optimize-attribute-value »)|| » »,i=o.get(« optimize-delay »)||0,a=o.get(« optimize-cookie »)||!1;setTimeout(()=>{a&&(document.cookie=randomNymcid()),document.body.setAttribute(`data-${n}`,r),e()},i)}else e()})}function randomNymcid(){return`nymcid=${(()=>([1e7] -1e3 – 4e3 -8e3 -1e11).replace(/[018]/g,e=>(e^16*crypto.getRandomValues(new Uint8Array(1))[0]>>e/ 4).toString(16)[0]))()}`}function replaceQueryParams(e){const t=window.location.search|| » »;if(t){const o=new URLSearchParams(t);if(e.includes(« ? »)){const t=e.split(« ? »),n=new URLSearchParams(t[1]);for(let e of o.entries())n.set(e[0],e[1]);e=`${t[0]}?${n.toString()}`}else e=`${e}?${o.toString()}`}return e}module.exports=(e=>new Promise(e=>{auth0.on(« init »,()=>{e()})}).then(()=>optimizeDebugger()).then(()=>{displayDebug(window.location.href),initializeChoreographer(e)}));
}, {3: 3, 7: 7, 8: 8, 9: 9, 30: 30, 37: 37, 54: 54, 66: 66 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92: content-cliff.client « : » content-cliff.client « }];
window.modules [« growl.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; require (152); const _some = require (75), dom = require (4), localStorageKeyRoot = « slideout – « , {getLocalStorage: getLocalStorage, setLocalStorage: setLocalStorage} = require (30); module.exports = ((e, t) => {const {content: o, onShow: s, scrollDepth: r = 50, abweisbar: i =! 1} = t, n = Zahl (r || e.getAttribute (« Datenanzeige-auf-Seite-Bildlauf-Prozentsatz »)), a = dom.find (e, « . Modal »), l = « slideout- » (t.id || e.getAttribute (« id »)), c = getLocalStorage (l); Funktion d () {a.classList.add (« hidden »)} Funktion g () {setLocalStorage ( l ,! 0), d ()} i&&c? e.remove () 🙁 o&&e.querySelector (« [Dateninhalt] »). appendChild (o), n&&function (e = 50) {const t = new Inters e => {_ some (e, « isIntersecting ») && (a.style.top = « erben », a.classList.remove (« versteckt », « initial »), « function » == typeof s&&s (), t .unobserve (a))}); a.style.top = `$ {document.querySelector ( » body « ). scrollHeight / (100 / e)} px`, t.observe (a)}(n),e.querySelector(« .dismiss-modal »).addEventListener(« click »,()=>i?g():d()),e.addEventListener(« growl:hide »,d),e.addEventListener(« growl:dismiss »,g))});
}, {4: 4, 30: 30, 75: 75, 152: 152}];
window.modules [« newsletter-speed-batch.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; const {loadRecaptcha: loadRecaptcha} = require (119), _ isEmpty = require (100), _ set = require (120), _ kebabCase = require (93), gtm = require (3), auth0 = require (7), Visibility = require (5), COMPONENT_NAME = « Newsletter-Speed-Bump », EMAIL_VALID_REGEX = / ^ (?: (?: [^ () [] \.,;: S @ « ] (?: . [^ () [] \.,;: s @ « ]) *) | (« . « )) @ (?: (?: [[0-9] {1,3} . [0-9] {1,3} . [0-9] {1,3} . [0-9] {1,3}]) | (?: (?: [A-zA-Z -0-9] .) [A-zA-Z] {2,})) $ /, LOCAL_STORAGE_KEY_NAME = « newsletterSpeedBumpSignUpStatus _ », MAX_EMAIL_LENGTH = 50; Funktion setClass (e, t) {e.classList.add (t)} Funktion getRequestUrl (e) {return e.getAttribute (« action ») {const t = e? e.getAttribute (« content »): «  »; return _kebabCase (t)} function getPayloadObject (e, t, r, s) {const n = {}; return _set (n, `vars. Quelle _ $ {t} `,` $ {COMPONENT_NAME} _ $ {s} `), n.email = r, n.lists = {}, n.lists [t] =! 0, n.recaptcha = e, n .signuppage = `$ {document.location.href} _ $ {t}`, n [`source _ $ {t}`] = « newsleter_speedbump », n} module.exports = ( (e,t)=>{if(!t||!e)return;if(« success »===window.localStorage.getItem(`${LOCAL_STORAGE_KEY_NAME}${t.newsletterSpeedBumpNewsletterId}`))return void e.remove();const{baseTrackingData:r,name:s,newsletterSpeedBumpCtaCopy:n,newsletterSpeedBumpDescription:i,newsletterSpeedBumpHeadline:a,newsletterSpeedBumpNewsletterId:o,newsletterSpeedBumpThankYouMessage:c,RECAPTCHA_PUBLIC_KEY:l}=t,u=auth0.getEmail(),d=e.querySelector(« .description »),p=e.querySelector(« .input.email »),m=e.querySelector(« .error-message »),h=e.querySelector(« .form »),E=e.querySelector(« .form-container »),y=e.querySelector(« .form-recaptcha-container »),g=e.querySelector(« .headline »),v=e.querySelector(« .container »),S=e.querySelector(« .input.newsletterId »),_=e.querySelector(« .recaptcha-wrapper »),L=e.querySelector(« .input.submit »),w=e.querySelector(« .text-container »),q=new visibility.Visible(e,{sho wnThreshold:.5});u&&(p.removeAttribute(« required »),e.classList.add(« signed-in »)),d.innerHTML=i,g.innerHTML=a,S.value=o,L.v alue=n,q.on(« shown »,function(){if(visibility.isElementNotHidden(e)){const e=r;e.event= »eec.promotionView »,e.ecommerce={promoView:{promotions:[{creative:`${a} | ${i}`,id: »newsletter speed bump »,name:s,position: »in-article »}]}},gtm.reportNow(e),q.destroy()}}),p.addEventListener(« focus »,()=>{_.classList.remove(« hidden »)}),h.addEventListener(« submit »,t=>{t.preventDefault();const s=new XMLHttpRequest,n=u||e.querySelector(« .input.email »).value,i=getPageType(document.querySelector(‘meta[name= »type »]’));u||!(n.length>=50)&&EMAIL_VALID_REGEX.test(n)?loadRecaptcha(l, »newsletterSubmit »,!0).then(a=>{s.open(« POST »,getRequestUrl(h),!0),s.setRequestHeader(« Content-Type », »application/json;charset=UTF-8″),s.addEventListener(« load »,s=>{const a=s.currentTarget||s.target;if(a.status>=200&&a.statussetClass(e, »success »)),[d,E,m,_].forEach(e=>setClass(e, »hidden »)),g.innerHTML=c.replace(« {{email}} »,n),m.innerHTML= » »;const s=JSON.parse(a.response),l=_isEmpty(s.sailthruIds)? » »:Object.values(s.sailthruIds)[0],u=r;u.event= »eec.purchase »,u.ecommerce={purchase:{actionField:{id:l,revenue: »0.00″},products:[{category: »newsletter signup « ,name:S.value,quantity:1,variant:`${COMPONENT_NAME} – ${i}`}]}},gtm.reportNow(u),setTimeout(()=>{e.classList.add(« hidden »)},5e3),t.preventDefault()}else m.innerHTML= »*An error has occurred. Please try again. »}),s.addEventListener(« error »,()=>{m.classList.remove(« hidden »),m.innerHTML= »*An error has occurred. Please try again. »}),s.send(JSON.stringify(getPayloadObject(a,o,n,i))),t.preventDefault()}):m.innerHTML= »*Please enter a valid email »})});
}, {3: 3, 5: 5, 7: 7, 93: 93, 100: 100, 119: 119, 120: 120}];
window.modules[« speed-bump.client »] = [function(require,module,exports){« use strict »;const gtm=require(3),visibility=require(5);module.exports=((e,i)=>{if(!i||!e)return;const{name:o,speedbumpDescription:r,speedbumpMessage:t,speedbumpLink:n,baseTrackingData:s}=i,c=new visibility.Visible(e,{shownThreshold:.5});e.querySelector(« .description »).innerHTML=r,e.querySelector(« .promo-link »).innerHTML=t,e.querySelector(« .promo-link »).href=n,e.classList.remove(« collapsed »),c.on(« shown »,function(){if(visibility.isElementNotHidden(e)){let e=s;e.event= »eec.promotionView »,e.ecommerce={promoView:{promotions:[{name:o,creative:r,id: »speed bump »,position: »in-article »}]}},gtm.reportNow(e),c.destroy()}}),e.querySelector(« .promo-link »).addEventListener(« click »,function(){let e=s;e.event= »eec.promotionClick »,e.ecommerce={promoClick:{promotions:[{name:o,creative:r,id: »speed bump »,position: »in-article »}]}},gtm.reportNow(e)})});
}, {« 3 »: 3, « 5 »: 5}];
window.modules[« content-cliff.client »] = [function(require,module,exports){« use strict »;const auth0=require(7),isProduction=require(8)(),logger=require(85).Logger(()=>!isProduction);module.exports=((t,e)=>{if(!e)return;logger.group(),logger.h2(« Content Cliff »);const{contentCliffOptions:o,firstVisit:n,onShow:r,onClickCliff:i}=e,c=300,l=Number(document.querySelector(« [data-components-count] »).getAttribute(« data-components-count »)),u=3,s=[« taboola »],a= »#content-cliff »,f=t,d=function(){let t=0;return document.querySelectorAll(« [data-word-count] »).forEach(function(e){t =Number(e.getAttribute(« data-word-count »)||0,10)||0}),t}(),g=function(t,e){function o(t){return Math.round(t.getTime()/1e3/60)}const n=o(t),r=o(e);return n-r}(new Date,new Date(n)){},show:()=>{r(),function(){(p=function(t= » »){return document.querySelectorAll(`${t} ~ *`)}(a)).forEach(t=>t.remove()),function(){const{contentCliffStatus:e,contentCliffPromo:n,contentCliffCTA:r,contentCliffURL:c}=o,l=t.querySelector(« [data-content-cliff-status] »),u=t.querySelector(« [data-content-cliff-promo] »),s=t.querySelector(« [data-content-cliff-cta] »);s&&s.setAttribute(« href »,c),s&&s.insertAdjacentHTML(« afterbegin »,r),l&&l.insertAdjacentHTML(« afterbegin »,e),u&&u.insertAdjacentHTML(« afterbegin »,n),s&&s.addEventListener(« click »,i)}(),f.classList.remove(« collapsed »),e=s,e.forEach(t=>{const e=document.querySelector(`[data-uri*= »/${t}/ »]`);e&&e.remove()}),m.addEventListener(« click »,()=>auth0.showLogin());var e}()}}[function(){if(dl)return logger.log(`article word count ${d} was too short for the cliff`),logger.log(`article components count is smaller than ${u} and not eligible for the cliff`), »noop »;if(g&&isProduction)return »noop »;g&&logger.log(`First session check was ${g}! Showing the cliff anyway: isProduction => ${isProduction}`);if(/coronavirus news|pivot|paywall exclude/i.test(window._nymGtmPage.tags))return isProduction&&logger.log(« Content cliff no-op due to excluded tag match: « ,window._nymGtmPage.tags), »noop »;return »show »}()],m=t.querySelector(« .content-cliff-login »);let p=[];return logger.log(`should noop in production due to 30-minute first-session window: ${g}`),logger.groupEnd(),auth0.on(« login »,()=>{f.classList.add(« collapsed »),(p=Array.prototype.slice.call(p,0).reverse()).forEach(t=>f.insertAdjacentElement(« afterend »,t)),p=[]}), »function »==typeof h?h():void 0});
}, {« 7″:7, »8″:8, »85 »:85}];
window.modules [« ad.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; const _forEach = require (53), _ max = require (56), _ find = require (55), _ contains = require (57), $ visibility = require (5), dom = require (4), MAX_MOBILE_RE = / [[0-9] {1,3} – (768 | 600) /, MAX_TABLET_RE = / [0-9] {3} – (1024 | 1180) /, DESKTOP_RE = / (1024 | 1180) -plus /, AD_NAME_SELECTOR = ‘[data name ^ = « / 4088 / »], [data name ^ = « / 172968584 / »]’; var flaggedComponentsOnPage = function () {var e, t = document.querySelector (« . article-content »), n = []; return t&&_forEach ([‘. article-sidebar [data-width = « large »] ‘], Funktion (a) {e = t.querySelectorAll (a), _ forEach (e, Funktion (e) {n.push (e)})}), n} (); Funktion getElementsVerticalOverlap (e, t) { var n = e.getBoundingClientRect (), a = t.getBoundingClientRect (); return! (n.top> a.bottom || n.righta.right)? a.bottom-n.top: 0} Funktion getElementsOverlapAmount (e , t) {var n, a = []; return _forEach (t, Funktion (t) {n = getElementsVerticalOverlap (e, t), a.push (n)}), _ max (a)} Funktion getNYMagAdChannel (e) {var t = «  »; switch (e) {case « Unternehmensinformationen »: t = « comp any »;break;case »new york guides & things to do »:t= »to-do »;break;case »other »:t=e;break;case »sponsored guides »:t= »s-guides »;break;case »urbanist »:t= »urbanist »;break;default:t= » »}return t}function appendSectionToDfpAds(){var e,t,n,a=document.querySelector(« meta[property=’og:site_name’] »),o=document.querySelector(« article[data-content-channel] »),i=document.querySelectorAll(AD_NAME_SELECTOR);a&&(e=a.content),o&&(t=o.getAttribute(« data-content-channel »).toLowerCase()),t&& »New York Magazine »===e&&(n=getNYMagAdChannel(t)),n&&appendToAdd(i,n)}function appendPageTypeToDfpAds(){let e=document.querySelector(« .body > div »)||{},t=document.querySelector(« body »)||{},n=e&&e.classList,a=n&&n.length?[…n]:[],o=_find(a,e=>e.includes(« feature »)),i=document.querySelectorAll(AD_NAME_SELECTOR);n&C SSEANDCHAR(o?appendPageNumberPositionToDfpAds(i, »Feature « ):n.contains(« lede-gallery-content »)?appendPageNumberPositionToDfpAds(i, »Image_Gallery »):t.classList.contains(« one-column-layout »)?appendPageNumberPositionToDfpAds(i, »One_Column_Article »):n.contains(« article-content »)&&appendPageNumberPositionToDfpAds(i, »Standard_Article »))}function appendPageNumberPositionToDfpAds(e,t){const n=[« 528×379″, »1100×200″, »1×1 »];let a=e||[],o=dom.find(« .ad-splash »),i=dom.find(« section.wrapper »),r=dom.find(« .secondary »),d=dom.find(« .bottom »),s=dom.find(« .primary »),c={IA:{xsMobile:{normal:1,grid:1},mobile:{normal:1,grid:1},tablet:{normal:1,grid:1},desktop:{normal:1,grid:1}},BA:{xsMobile:{normal:1,grid:1},mobile:{normal:1,grid:1},tablet:{normal:1,grid:1},desktop:{normal:1,grid:1}}};a.forEach(e=>{let a,l= » »,u=e.dataset.sizes,m=e.classList.value,p=_find(n,e=>u.includes(e)),g=e.parentElement.classList.contains(« image-gallery-mobile-grid-ad »);if(u&&!p||e.setAttribute( » data-name »,e.getAttribute(« data-name ») « / » t),iCSSEANDCHA R&u&&!p){let n,u;if(o&&o.contains(e)?l= »LB »:i&&i.contains(e)?l= »IA »:(r&&r.contains(e)||d&&d.contains(e)||s&&s.contains(e))&&(l= »BA »),c[l]){if(!(u=checkForAdViewport(m)))return;g?(n=c[l][u].grid,c[l][u].grid ):(n=c[l][u].normal,c[l][u].normal ),a=n{e.setAttribute(« data-name »,e.getAttribute(« data-name ») « / » t)})}function injectGoogleScripts(){var e=document.createElement(« script »),t=document.createElement(« script »),n=document.createDocumentFragment();e.src= »//www.googletagservices.com/tag/js/gpt.js »,e.async= »async »,t.src= »//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js »,t.async= »async »,n.appendChild(e),n.appendChild(t),document.getElementsByTagName(« body »)[0].appendChild(n)}appendSectionToDfpAds(),appendPageTypeToDfpAds(),injectGoogleScripts(),DS.controller(« ad »,[« adServic e »,function(e){return function(t){var n,a,o,i=t.getAttribu te(« data-offload »),r=new $visibility.Visible(t,{preloadThreshold:i?window.innerHeight/4:200}),d=!1;function s(){window.innerWidth>=1180&&t.parentElement.classList.contains(« ad-repeat »)&&flaggedComponentsOnPage.length&&(a=getElementsOverlapAmount(t,flaggedComponentsOnPage),o=parseInt(t.parentElement.getAttribute(« data-gap »),10),t.style.marginTop=o 30 a « px »)}function c(){s(),e.refresh(n)}function l(){e.remove(n),d||(d=!0,r.on(« shown »,c))}document.querySelector(‘script[data-name= »concert-ads »]’)||(n=e.create(t),r.preload&&$visibility.isElementNotHidden(t)?(e.addToPageLoadQueue(n),i&&r.on(« hidden »,l)):(r.on(« preload »,function(){!n.slot&&$visibility.isElementNotHidden(t)&&(s(),e.load(n))}),i&&r.on(« hidden »,l)),this.adData=n)}}]);
}, {4: 4, 5: 5, 53: 53, 55: 55, 56: 56, 57: 57}];
window.modules [« sticky-list.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; const dom = required (4), $ gtm = required (3), _ get = required (9), stickyContainer = require (« sticky-container.client »); DS.controller (« sticky-list », [« $ window », Funktion (t) {var e = require (230), i = 40; function s ( s) {sei n, r = Funktion (t) {sei s = t [0], n = 0, r = e.Höhe (this.contentArea), h = this.contentArea.offsetHeight; if (this.containers&&this. container.length) {if (s.target.offsetHeight) {let t = this.breakouts.findIndex (t => (Funktion (t, e) {return t! == document.body&&t.contains (e)}) ( t, s.target.parentElement)); if (t> -1&&this.breakouts [t]) {let e = this.breakouts [t] .offsetHeight i; this.containers [t] .style.marginBottom = `$ { e} px`}} if (h! == this.currentHeigh) {const t = e.rect (this.rightRail, this.contentArea); this.currentHeight = h, this.rightRail.style.height = rt.top -a (this.rightRail) « px », this.breakouts.forEach ((s, r) => {let a = e.rect (s, this.contentArea), h = e.intersection (a, t); wenn (h) {sei e, s = h.top-t. top-n;n =s h.height i,this.containers[r].style.height=`${s}px`,this.containers[r].s tyle.minHeight=`${s}px`,e=this.breakouts[r].offsetHeight i,this.containers[r].style.marginBottom=`${e}px`}})}}}.bind(this);t.innerWidth{let n=_get(e, »dataset.name », » »),r=n.slice(-1)|| »1″,a=[« Image_Gallery », »Standard_Article », »Feature », »One_Column_Article »].find(t=>n.includes(t))|| » »;this.rightRail.parentElement.classList.contains(« tertiary »)&&a&&(e.dataset.name=parseInt(i,10) se===t)||0;return i.slice(s 1).reduce((t,e)=>t (e.offsetHeight||0),0)||0}return s.prototype={setPins:function(){const t=e.rect(this.rightRail,this.contentArea),i=e.height(this.contentArea),s=i-t.top-a(this.rightRail);let n,h,o,l;if(this.populatePinsList(),s1&&t.classList.add(« multi-children »),l=0;l{const t=Array.from(e.children);let o,a,i=0;for(;i{handleLazyLoad(a)});
}, {« 4 »: 4, « 108 »: 108}];
window.modules [« article.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; const $ visibility = required (5), $ gtm = required (3), ImageZoom = required (69), $ sentry = require (70); DS.controller (« article », [function () {var e = 40; function t (t) {const i = document.querySelector (« . wrapper> .tertiary »), n = t.querySelector (« . lede-image-wrapper.full-bleed »), r = t.querySelector (« . attribution.full-bleed »), o = t.querySelector (« . article-header »), l = o? o.querySelector (« img »): null, c = function () {let t = o.getBoundingClientRect (). height; n&& (t = n.getBoundingClientRect (). height 25, r&& (t = r.getBoundingClientRect () .height)), i.style.paddingTop = te « px »}; i&&o&& (window.innerWidtht (e)), $ sentry.initializeIDListeners ()}}]);
}, {« 3 »: 3, « 5 »: 5, « 69 »: 69, « 70 »: 70}];
window.modules[« tags.client »] = [function(require,module,exports){« use strict »;const _forEach=require(53);DS.controller(« tags »,[function(){function e(e){this.el=e}return e.prototype={events:{« a.more click »: »showAll »},showAll:function(e){var t=e.target,o=this.el.querySelectorAll(« li.hidden »);_forEach(o,function(e){e.classList.remove(« hidden »)}),t.parentNode.removeChild(t),e.preventDefault()}},e}]);
}, {« 53 »:53}];
window.modules[« memo-pixel.client »] = [function(require,module,exports){« use strict »;(()=>{var e=document.createElement(« script »);e.async=!0,e.type= »text/javascript »,e.src=document.location.protocol « //d16xpr36wrmcmk.cloudfront.net/js/memo.js »,(document.getElementsByTagName(« head »)[0]||document.getElementsByTagName(« body »)[0]).appendChild(e)})(),module.exports=(()=>{});
}, {}];
window.modules [« Affiliate-Links.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; const dom = required (4), _ contains = required (57), _ StartsWith = required (61), globalClick = require (60), visit = require (59), productSubtags = require (62); var ausgeschlossenHostnames, skimlinksBaseUrl, skimlinksId, visitState, productUrl, ignoreDataAttribute = « Daten-Affiliate-Links-Ignorieren », Artikel = Fenster.Dokument. querySelector (« article »), isSponsored = article&& « Sponsor Story » === article.getAttribute (« Datentyp »); Funktion setExcludedHostnames (t) {ausgeschlossenHostnames = (t.getAttribute (« Daten ausgeschlossene Hostnamen ») | | «  »). toLowerCase (). split (« , »)} Funktion isSkimLink (t) {return !! (skimlinksId = t.getAttribute (« data-skimlinks »))} Funktion isExcluded (t) {return _includes (ausgeschlossenHostnames , t) || _startsWith (t, « www. ») &&_includes (ausgeschlossenHostnames, t.slice (4)) || isSponsored} function isUrlProtocol (t) {return 0! == t.indexOf (« mailto: ») &&0 ! == t.indexOf (« javascript: »)} Funktion getTargetHostname (t) {return (t.ho. stname||t.host||t.href|| » »).toLowerCase()}function convertSkimlinkUrl(t){return(skimlinksBaseUrl=skimlinksBaseUrl||skimlinksId? »//go.redirectingat.com/?xs=1&id= » skimlinksId « &sref= » encodeURIComponent(window.location.href) « &url= »:void 0)&&skimlinksBaseUrl encodeURIComponent(t)}function hasIgnoreAttribute(t){return »true »===t.getAttribute(ignoreDataAttribute)}function convertSkimlink(t){var e,i,r,s=dom.closest(t.target, »a »),n=s&&s.href;n&&n.length&&!t.defaultPrevented&&(i=getTargetHostname(s),!isUrlProtocol(n)||isExcluded(i)||hasIgnoreAttribute(s)||productSubtags.getAffiliate(n)||(e=convertSkimlinkUrl(n))&&(productUrl=n,r=s&&s.getAttribute(« data-track-id »),s.href=productSubtags.ensureSubtag({url:e,productId:r,visitState:visitState,anchorEl:s})) )}function revertSkimLink(t){var e=dom.closest(t.target, »a »),i=e&C SSEANDCHARe.href|| » »;i.includes(skimlinksBaseUrl)&&i&&i.length&&productUrl&&(e.href=productUrl)}module.exports=(t=>{const e=isSkimLink(t);visit.onceReady(function(t){visitState=t}),e&&(setExcludedHostnames(t),globalClick.addHandler(convertSkimlink,revertSkimLink))});
}, {4: 4, 57: 57, 59: 59, 60: 60, 61: 61, 62: 62}];
window.modules[« gtm.client »] = [function(require,module,exports){« use strict »;const $gtm=require(3);DS.controller(« gtm »,[function(){return function(t){$gtm.init(t.getAttribute(« data-container-id »),t.getAttribute(« data-site-slug »))}}]);
}, {« 3 »: 3}];
window.modules[« banner-callout.client »] = [function(require,module,exports){« use strict »;const visit=require(59),_get=require(9);module.exports=(t=>{let e;const s=t.querySelector(« .banner-trigger »),i=window.localStorage,a=`banner-callout-${_get(window.kiln, »preloadSite.slug », »nymag »)}`;visit.onceReady(function(){!function(){try{e=JSON.parse(i.getItem(a))||{}}catch(t){e={}}}(),e.dismissed||t.classList.add(« show »)}),t.addEventListener(« click »,n=>{(n.target.matches(« a »)||n.target.matches(« span.banner-link »)||n.target.matches(« .banner-trigger »))&&(e.dismissed=Date.now().toString(),function(){try{i.setItem(a,JSON.stringify(e))}catch(t){}}(),function(){t.classList.contains(« show »)?s.setAttribute(« aria-expanded », »false »):s.setAttribute(« aria-expanded », »true »);t.classList.remove(« show »)}())})});
}, {« 9″:9, »59 »:59}];
window.modules [« global-nav.client »] = [Funktion (erforderlich, Modul, Export) {« use strict »; const dom = required (4), auth0 = required (7), signInButton = dom.find (« .user-signin »), signOutButton = dom.find (« . user-signout »), globalNav = dom.find (‘ [class ^ = « global-nav »] ‘), body = dom.find (« body »)), dropdownItems = dom.findAll (« . dropdown-wrap »), gtm = require (3), pageUri = require ( 148). GetPageUri (); function closeDropdowns (e) {let n = globalNav.querySelectorAll (« . dropdown .open « ); dropdownItems.forEach (Funktion (t) {let o = t.querySelector (« . dropdown « );! n || t.contains (e.target) &&27! == e.keyCode || o. classList.remove (« open »)})} Funktion gtmSendReport (e, n, t) {let o = {eventCategory: « ecommerce », eventAction: « componentClick », Marke: e, Dimension23: « global-nav », Liste : pageUri, pageZone: « header », Variante: « nav-link »}; « global-nav-link » === t&& (o.eventLabel = n.href), gtm.reportNow (o)} function init (e ) {auth0.on (« init », () => {signInButton.addEventListener (« click », Funktion (e) {e.preventDefault (), auth0.showLogin ()}), signOutButton.add EventListener(« click »,function(e){e.preventDefault(),auth0.logout(),gtmSendReport(« Sign Out »,e.target, »user-info-link »)}),auth0.isAuthenticated()&&e.classList.add(« signed-in »),auth0.isSubscriber()&&e.classList.add(« subscribed »),e.querySelectorAll(« .user-link »).forEach(e=>{e.classList.add(« active »)})}),auth0.on(« login »,()=>{e.classList.add(« signed-in »),auth0.isSubscriber()&&e.classList.add(« subscribed »)}),auth0.on(« logout »,()=>{e.classList.remove(« signed-in »),e.classList.remove(« subscribed »)})}dropdownItems.forEach(function(e){e.addEventListener(« click »,function(){e.querySelector(« .dropdown »).classList.toggle(« open »)})}),body.addEventListener(« click »,closeDropdowns),document.addEven tListener(« keydown »,closeDropdowns),globalNav.addEventListener(« click »,function(e){let n=e.target;n.classList.contains(« global-nav-track »)&&gtmSendReport(n.text,n, »global-nav-link »)}),module.exports=init;
}, {3: 3, 4: 4, 7: 7, 148: 148}];
window.modules[« aaa-module-mounting.legacy »] = [function(require,module,exports){« use strict »;const eventify=require(176),_pickBy=require(151),_each=require(312),fingerprintjs2=require(311),DS=require(310);function registerGlobals(){window.DS=DS,window.Eventify=eventify,window.Fingerprint2=fingerprintjs2,DS.value(« Eventify »,eventify),DS.value(« Fingerprint2 »,fingerprintjs2),DS.value(« $document »,window.document),DS.value(« $window »,window)}function mountDollarSliceComponents(){DS.service(« components »,[« $document », »$module »,function(e,n){var r=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),o=Object.keys(r);function t(e){return r=>{try{n.get(e,r)}catch(e){logMountError(r,e)}}}_each(o,n=>{var r=e.querySelectorAll(‘[data-uri*= »/_components/’ n ‘/ »]’),o=e.querySelectorAll(‘[data-uri$= »/_components/’ n ‘ »]’);_each(r,t(n)),_each(o,t(n))}),this.components=o}]),DS.get(« components »)}function logMountError(e,n){const r=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error(« Error attaching controller to  » r,n)}registerGlobals(),document.addEventListener(« DOMContentLoaded »,()=>{mountDollarSliceComponents()});
}, {« 151″:151, »176″:176, »310″:310, »311″:311, »312 »:312}];
window.modules[« ads.legacy »] = [function(require,module,exports){« use strict »;const _map=require(63),_forEach=require(53),_isString=require(195),_intersectionWith=require(313),_isEqual=require(201),_each=require(312),_debounce=require(111),_sortBy=require(134),page=require(148),visit=require(59);DS.service(« adService »,[« Eventify », »$cid », »$document », »$window »,function(e,t,a,i){var o,n,s,r,d,c,l,u,g,p,m={},h=this,f=[],b=visit.getQueryParamsObject([« utm_campaign »]),w=document.querySelector(‘script[data-type= »ad-a9″]’);document.querySelector(‘script[data-name= »concert-ads »]’)||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],c=i.googletag,w&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()}),l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log(« MESSAGE: Timeout for A9 load exceeded, aborting »))},500)),u=document.createElement(« script »),g=document.createDocumentFragment(),p=document.getElementsByTagName(« head »)[0],u.src= »https://z.moatads.com/voxprebidheader841653991752/moatheader.js »,g.appendChild(u),p.insertBefore(g,p.firstChild),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?c.defineSlot(o.name,o.sizes,o.id).addService(c.pubads()):c.defineOutOfPageSlot(o.name,o.id).addService(c.pubads())).setTargeting(« adid »,o.id),b.hasOwnProperty(« utm_campaign »)&&t.setTargeting(« utmcamp »,b.utm_campaign),a=h.getAdCount(o.label),t.setTargeting(« label »,o.label « _ » o.site « – » a),c.display(o.id),c.pubads().addEventListener(« slotOnload »,function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),(n=v(o))?window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){c.cmd.push(function(){window.apstag.setDisplayBids(),c.pubads().refresh([t],{changeCorrelator:!1})})}):c.pubads().refresh([t],{changeCorrelator:!1}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute(« data-name »),r=e.getAttribute(« data-sizes »),d=e.getAttribute(« data-label »),c=e.getAttribute(« data-site »);n=e.id,r&&r.length?(r=r.split(« , »),a=[],_map(r,function(e){e=e.split(« x »),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add(« oop »),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},m[n]=this},r=function(e){c.cmd.push(function(){var t=o(e);m[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=v(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){c.cmd.push(function(){window.apstag.setDisplayBids(),c.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},c.cmd.push(function(){var e,t,o,n=page.getMeta(« article:tag »),s=page.getMeta(« author »),r=i.location.href,d=(e=a.head.querySelector(« .head-gtm »),t=a.body.querySelector(« .gtm »),e&& »top »===e.getAttribute(« data-gtm »)? »gtmtop »:t&& »bottom »===t.getAttribute(« data-gtm »)? »gtmbottom »: » »);o=[],_forEach([n,s,d],function(e){_forEach(e.split(« , »),function(e){(e=e.trim().toLowerCase().replace(/s/g, »-« ).replace(/’|’/g, » »)).length&&o.push(e)})}),c.pubads().setTargeting(« kw »,o),c.pubads().setTargeting(« entry_group »,o),r=r.slice(r.lastIndexOf(« / ») 1),c.pubads().setTargeting(« pn »,r),c.companionAds().setRefreshUnfilledSlots(!0),c.pubads().enableAsyncRendering(),c.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML= » »},this.getAdCount=function(e){var t,a=0,i=Object.keys(m);return _each(i,function(i){(t=m[i]).data.loaded&&t.data.label===e&&a }),a},this.getById=function(e){return m[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99, »homepageTakeover/TopLeaderboard »:1},t=_sortBy(f,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),f=[]},10),this.addToPageLoadQueue=function(e){f.push(e),d()});function v(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}}]);
}, {« 53″:53, »59″:59, »63″:63, »111″:111, »134″:134, »148″:148, »195″:195, »201″:201, »312″:312, »313 »:313}];
window.modules[« cid.legacy »] = [function(require,module,exports){« use strict »;DS.service(« $cid »,function(){var r=Math.floor(100*Math.random());return function(){return »cid- » r}});
}, {}];
window.modules[« facebook.legacy »] = [function(require,module,exports){« use strict »;DS.service(« facebook »,[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require== »function »&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(« Cannot find module ‘ » o « ‘ »);throw f.code= »MODULE_NOT_FOUND »,f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require== »function »&&require;for(var o=0;o typeof key === ‘string’ && key.match(/.legacy$/)).forEach(key => window.require(key));
}}

Function tryToMount (fn, el, name) {
To attempt {
fn (el); // start the controller
} catch (e) {
const elementTag = el.outerHTML.slice (0, el.outerHTML.indexOf (el.innerHTML));
console.error (`Error initializing controller for » $ {name} « on » $ {elementTag} « `, e);
}}
}}
/ **
* mount client.js component controllers
* /

Function mountComponentModules () {
Object.keys (window.modules) .filter (key => typeof key === ‘string’ && key.match (/ . Client $ /)). ForEach (key => {
let controllerFn = window.require (key);

if (typeof controllerFn === ‘function’) {
const name = key.replace (‘. client’,  »),
instanceSelector = `[data-uri * = » _ components / $ {name} / « ]`,
defaultSelector = `[data-uri $ = » _ components $ {name} « ]`,
instances = document.querySelectorAll (instancesSelector),
defaults = document.querySelectorAll (defaultSelector);

for (let el of instances) {
tryToMount (controllerFn, el, name);
}}

for (leave el by default) {
tryToMount (controllerFn, el, name);
}}
}}
});
} // Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// Services or components that might require it
// note: the «  value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js

window.process = window.process || {};
window.process.env = window.process.env || {};

if (! window.process.env.NODE_ENV) {
window.process.env.NODE_ENV =  »;
} // note: legacy controllers that require legacy services (e.g. dollar-slice) must
// Wait for DOMContentLoaded to initialize itself, as the files themselves have to be mounted first

mountLegacyServices ();
mountComponentModules ();
//]]

Ref: https://www.vulture.com

QU’EN PENSEZ-VOUS?

Donnez votre point de vue et aboonez-vous!

[gs-fb-comments]

Votre point de vue compte, donnez votre avis



Lire aussi  World news - US - High winds cut power for thousands