Last active
May 22, 2019 09:11
-
-
Save x3388638/c38e479c0aa5468512f8da2259dfdeed to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
YUI().use('node-base', function(Y) { | |
Y.Global.on('ymediaReady', function(data) { | |
YMedia = data.e; | |
YMedia.applyConfig({ | |
"groups": { | |
"td-applet-mega-header": { | |
"base": "https://s.yimg.com/os/mit/td/td-applet-mega-header-1.0.888/", | |
"root": "os/mit/td/td-applet-mega-header-1.0.888/", | |
"combine": false, | |
"filter": "min", | |
"comboBase": "https://s.yimg.com/zz/combo?", | |
"comboSep": "&" | |
} | |
} | |
}); | |
window.Af = window.Af || {}; | |
window.Af.bootstrap = window.Af.bootstrap || {}; | |
window.Af.bootstrap["p_30345894"] = { | |
"applet_type": "td-applet-mega-header", | |
"views": { | |
"main": { | |
"yui_module": "td-applet-mega-header-mainview", | |
"yui_class": "TD.Applet.MegaHeaderMainView", | |
"config": { | |
"accountSwitchData": { | |
"enabled": 1, | |
"jsonpUrl": "https://jsapi.login.yahoo.com/w/device_users?.crumb=%2FtpaDCw8w4m", | |
"manageUrl": "https://login.yahoo.com/manage_account?.crumb=%2FtpaDCw8w4m&.done=https%3A%2F%2Fwww.yahoo.com", | |
"signoutUrl": "https://login.yahoo.com/config/login/?logout_all=1&.crumb=%2FtpaDCw8w4m&.direct=2&.done=https%3A%2F%2Fwww.yahoo.com", | |
"switchUrl": "https://login.yahoo.com/d?.crumb=%2FtpaDCw8w4m&as=1&login={alias}&.done=https%3A%2F%2Fwww.yahoo.com", | |
"main_user": { | |
"doneUrl": "https%3A%2F%2Fwww.yahoo.com", | |
"alias": "d5584392", | |
"fn": "YY" | |
}, | |
"welcomeMsgTimeout": 1000, | |
"errorTimeout": 10000, | |
"profileUrl": "https://edit.yahoo.com/config/eval_profile", | |
"showWelcome": false, | |
"alphatar": { | |
"enabled": true, | |
"urlPath": "https://s.yimg.com/rz/uh/alphatars/", | |
"imgType": ".png" | |
}, | |
"accountLimit": 2, | |
"useAvatar": true, | |
"userIntentMgmt": false | |
}, | |
"alphatar": { | |
"enabled": true, | |
"urlPath": "https://s.yimg.com/rz/uh/alphatars/", | |
"imgType": ".png" | |
}, | |
"avatar": { | |
"serverCall": false, | |
"ucs": { | |
"protocol": "https", | |
"host": "ucs.query.yahoo.com", | |
"path": "/v1/console/yql", | |
"query": { | |
"format": "json", | |
"_maxage": 900 | |
} | |
}, | |
"cp": { | |
"protocol": "https", | |
"host": "ha-sg3.api.udb.yahoo.com:4443", | |
"path": "/v3/users/yahoo/credential", | |
"query": { | |
"fields": "guid,name,profileImages" | |
}, | |
"port": "4443", | |
"url": "https://ha-sg3.api.udb.yahoo.com:4443/v3/users/yahoo/credential?fields=guid%2Cname%2CprofileImages" | |
}, | |
"imgsize": 48, | |
"timeout": 250, | |
"version": "cp" | |
}, | |
"banner": false, | |
"bottomBar": true, | |
"bucket": "903", | |
"hasDialpad": false, | |
"hasHelpMenu": false, | |
"extensionHelper": { | |
"enabled": true, | |
"extensions": { | |
"homepage": { | |
"chrome": { | |
"url": "https://chrome.google.com/webstore/detail/jdanfkhnfpagoijgfmklhgakdicpnfil", | |
"minVersion": 31, | |
"maxVersion": 0, | |
"os": ["win", "mac"] | |
}, | |
"firefox": { | |
"url": "https://addons.mozilla.org/en-US/firefox/addon/yahoo-homepage/", | |
"xpi": "https://addons.mozilla.org/firefox/downloads/latest/yahoo-homepage/addon-705134-latest.xpi", | |
"minVersion": 38, | |
"maxVersion": 0, | |
"os": ["win", "mac"] | |
}, | |
"markupFlagClassName": "yahoo_hp_set_ext_installed", | |
"markupFlagSelector": "body" | |
}, | |
"partnerDisable": false | |
}, | |
"hashTag": "extInstall?partner=uk" | |
}, | |
"firstName": "YY", | |
"followable": { | |
"enabled": false, | |
"uri": "/_td_api" | |
}, | |
"formHoverState": false, | |
"hasExtensionPromo": { | |
"intlSelector": { | |
"enabled": true, | |
"link": "https://uk.yahoo.com/everything/world", | |
"intl": "uk", | |
"slk": "country", | |
"elm": "country" | |
}, | |
"promos": { | |
"linkPromo": { | |
"enabled": true, | |
"eyeBrowPromoBgUrl": "", | |
"icon": "", | |
"link": "https://chrome.google.com/webstore/detail/jdanfkhnfpagoijgfmklhgakdicpnfil", | |
"label": "Make Yahoo your homepage", | |
"localizedLabel": false, | |
"linkStyles": "font-weight: bold; margin-right: 56px;", | |
"bgStyles": "", | |
"showChevron": false, | |
"sec": "hd", | |
"elm": "hpset" | |
}, | |
"extensionPromo": { | |
"enabled": false, | |
"label": "Click here to set Yahoo as your home page" | |
}, | |
"subscriptionPromo": { | |
"enabled": false, | |
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAp5JREFUSA21lT1oFEEUx/9vb8mRiCAiAcEiaAKaiyDcXfwgQhoLjQQFRVCwsTBYaWGhVRoLBbFIIWKlRUoVJQl2IgjmjI25U0kiUaIigmhE8EJy93x7SDI7O7M7G83BwXv/9/Hbmdl5C/ynH5eL57hc+Cb/Cy4tPZekpByuFPqB+hCYN0puT1J+EP9nMFeKu1DnYfDfXsRzaw7m1/nNAn0koHUrMJpZse3WqlfMc3ubUaOHAG8Jt19DMDMT5hfvCrQQhgae77RiP1rooJQLVyTrWDSTltCZfR/Vo0rqrZbrclraXIq2EoX4A9GTJWNME1OBudK9X7b3ttZDdd+pTpztDOap4lZw7Z5cm6aYhk7nG9Q7gXm2dwMW6iMC3RQDlc3wZmPjSpAU22gy9/oo/xqVrgeMCSFRXi7ipyC6j6bMA+oY/xgKK04yeLJwU6ADSo2bSbI/wDOQd5xyL77oRbFbLW/w+VVBAwojQPfIDD+lQwPfCpZx2CfV101FqTTOlE359gFSw624BzM1i2hE16ir9DiiJzSOnIupgV2jUeQOmwdNLLg5e0hG0ZDkzNubWyNv0cIniQbrtozkt/pzvgXfvRPykR+Qf7etkaL/gJ/ZTTtKU4oWMRPBagVP5l+Jv1PVwjbV5Pr02c5VzbW+1WrSsk3UtmybDMJFF2hQ6gzmmX2tstXrTbyGRrhDXRM3rHEt4AzG78V2rVZ1nyPbelYVkmx3MHibpdkneN5R6hhbsMSNsn2A6OnE7Y3pq+pEVfjeEdpeSn3n3VfMiK6Y+IxAJ9RncbXdwYTwGZN3lXIvh11Bep47GKEVjyDXd1lvlsZ3GiA8fTCL6tdqozHhDbL+HvnI/0wD0nOdwEGRfJvH5B63IeP3U+f4tN4orf8HANKx7IxUMdEAAAAASUVORK5CYII=", | |
"label": "Get breaking news notifications" | |
} | |
}, | |
"top": { | |
"links": [{ | |
"iconClasses": "Icon-Fp2 IconHome", | |
"property": "home", | |
"title": "Home", | |
"url": "https://uk.yahoo.com/", | |
"position": 1 | |
}, { | |
"property": "mail", | |
"title": "Mail", | |
"url": "https://mail.yahoo.com/?.intl=uk&.lang=en-GB&.partner=none&.src=fp", | |
"position": 2 | |
}, { | |
"property": "news", | |
"title": "News", | |
"url": "https://uk.news.yahoo.com/", | |
"position": 3 | |
}, { | |
"property": "sports", | |
"title": "Sports", | |
"url": "https://uk.sports.yahoo.com/", | |
"position": 4 | |
}, { | |
"property": "finance", | |
"title": "Finance", | |
"url": "https://uk.finance.yahoo.com/", | |
"position": 5 | |
}, { | |
"property": "celebrity", | |
"title": "Celebrity", | |
"url": "https://uk.celebrity.yahoo.com/", | |
"position": 6 | |
}, { | |
"property": "style", | |
"title": "Style", | |
"url": "https://uk.style.yahoo.com/", | |
"position": 7 | |
}, { | |
"property": "weather", | |
"title": "Weather", | |
"url": "https://uk.news.yahoo.com/weather/", | |
"position": 8 | |
}, { | |
"property": "answers", | |
"title": "Answers", | |
"url": "https://uk.answers.yahoo.com/", | |
"position": 9 | |
}, { | |
"property": "mobile", | |
"title": "Mobile", | |
"url": "https://uk.mobile.yahoo.com/", | |
"position": 10 | |
}, { | |
"property": "more", | |
"title": "More", | |
"type": "menu", | |
"url": "https://uk.yahoo.com/everything", | |
"links": [{ | |
"property": "messenger", | |
"title": "Messenger", | |
"url": "https://uk.messenger.yahoo.com/", | |
"position": 12 | |
}, { | |
"property": "movies", | |
"title": "Movies", | |
"url": "https://uk.movies.yahoo.com/", | |
"position": 13 | |
}, { | |
"property": "groups", | |
"title": "Groups", | |
"url": "https://uk.groups.yahoo.com/", | |
"position": 14 | |
}], | |
"position": 11 | |
}] | |
}, | |
"bottom": { | |
"links": [{ | |
"iconClasses": "Icon-Fp2 IconMail", | |
"property": "mail", | |
"title": "Mail", | |
"url": "https://mail.yahoo.com/?.intl=uk&.lang=en-GB&.partner=none&.src=fp" | |
}, { | |
"property": "news", | |
"title": "News", | |
"url": "https://uk.news.yahoo.com/" | |
}, { | |
"property": "sports", | |
"title": "Sports", | |
"url": "https://uk.sports.yahoo.com/" | |
}, { | |
"property": "finance", | |
"title": "Finance", | |
"url": "https://uk.finance.yahoo.com/" | |
}, { | |
"property": "celebrity", | |
"title": "Celebrity", | |
"url": "https://uk.celebrity.yahoo.com/" | |
}, { | |
"property": "style", | |
"title": "Style", | |
"url": "https://uk.style.yahoo.com/" | |
}, { | |
"property": "movies", | |
"title": "Movies", | |
"url": "https://uk.movies.yahoo.com/" | |
}, { | |
"property": "more", | |
"title": "More...", | |
"url": "https://uk.yahoo.com/everything" | |
}] | |
}, | |
"dialpad": { | |
"links": [{ | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadHomePos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:home;subsec:nav;", | |
"property": "yahoo", | |
"title": "Yahoo", | |
"url": "https://www.yahoo.com/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadMailPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:mail;subsec:nav;", | |
"property": "mail", | |
"title": "Mail", | |
"url": "https://mail.yahoo.com/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadNewsPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:news;subsec:nav;", | |
"property": "news", | |
"title": "News", | |
"url": "https://news.yahoo.com/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadFinancePos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:finance;subsec:nav;", | |
"property": "finance", | |
"title": "Finance", | |
"url": "https://finance.yahoo.com/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadSportsPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:sports;subsec:nav;", | |
"property": "sports", | |
"title": "Sports", | |
"url": "https://sports.yahoo.com/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialpadFantastyPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:fantasy;subsec:nav;", | |
"property": "fantasy", | |
"title": "Fantasy", | |
"url": "https://football.fantasysports.yahoo.com/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadPoliticsPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:politics;subsec:nav;", | |
"property": "politics", | |
"title": "Politics", | |
"url": "https://news.yahoo.com/politics/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadCelebrityPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:celebrity;subsec:nav;", | |
"property": "celebrity", | |
"title": "Celebrity", | |
"url": "https://www.yahoo.com/entertainment/celebrity/" | |
}, { | |
"iconClasses": "Bgi($dialPadPanelBgImg) Bgp($dialPadViewPos) ua-ie7_Bgi($dialPadNonRetinaPanelBgImg) ua-ie8_Bgi($dialPadNonRetinaPanelBgImg)", | |
"i13n": "sec:hd;slk:view;subsec:nav;", | |
"property": "view", | |
"title": "View", | |
"url": "https://view.yahoo.com/" | |
}], | |
"footer": { | |
"i13n": "sec:hd;subsec:nav;slk:see more;", | |
"title": "SEE MORE", | |
"url": "https://www.yahoo.com/everything/" | |
} | |
}, | |
"selectedPromo": "linkPromo" | |
}, | |
"hasMail": true, | |
"hasMailPreview": true, | |
"hasNotificationCenterLink": false, | |
"hasNotifications": true, | |
"hasProfile": true, | |
"isFallback": false, | |
"isRecognizedUser": false, | |
"loginUrl": "https://login.yahoo.com/config/login?.src=fpctx&.intl=uk&.lang=en-GB&.done=https%3A%2F%2Fuk.yahoo.com", | |
"logoutUrl": "https://login.yahoo.com/config/login?logout=1&.direct=2&.src=fpctx&.intl=uk&.lang=en-GB&.done=https%3A%2F%2Fuk.yahoo.com", | |
"mail": { | |
"compose": { | |
"url": "https://mail.yahoo.com/mrd/mail/any/compose" | |
}, | |
"count": { | |
"api": { | |
"protocol": "https", | |
"host": "apis.mail.yahoo.com", | |
"path": "/ws/v3/batch", | |
"query": { | |
"appid": "YahooFrontPage", | |
"q": "" | |
}, | |
"requestQuery": "{\"responseType\":\"json\",\"requests\":[{\"id\":\"GetMailboxId\",\"uri\":\"/ws/v3/mailboxes/\",\"method\":\"GET\",\"filters\":{\"iterator\":\"$..mailboxes[?(@.isPrimary==true)]\",\"select\":{\"mailboxId\":\"$..id\"}},\"suppressResponse\":true,\"requests\":[{\"id\":\"ListDecos\",\"uri\":\"/ws/v3/mailboxes/@.id==$(mailboxId)/decos\",\"method\":\"GET\"}]}]}", | |
"url": "https://apis.mail.yahoo.com/ws/v3/batch?appid=YahooFrontPage&q=" | |
}, | |
"refreshInterval": 120, | |
"maxCountDisplay": 99 | |
}, | |
"preview": { | |
"prefetch": false, | |
"api": { | |
"protocol": "https", | |
"host": "apis.mail.yahoo.com", | |
"path": "/ws/v3/batch", | |
"query": { | |
"appid": "YahooFrontPage", | |
"q": "" | |
}, | |
"requestQuery": "{\"responseType\":\"json\",\"requests\":[{\"id\":\"GetMailboxId\",\"uri\":\"/ws/v3/mailboxes/\",\"method\":\"GET\",\"filters\":{\"select\":{\"mailboxId\":\"$..mailboxes[?(@.isPrimary==true)].id\"}},\"suppressResponse\":true,\"requests\":[{\"id\":\"ListMessages\",\"uri\":\"/ws/v3/mailboxes/@.id==$(mailboxId)/messages/@.select==q?q=count%3A6+offset%3A0+folderType%3AINBOX+-sort%3Adate\",\"method\":\"GET\"}]}]}", | |
"url": "https://apis.mail.yahoo.com/ws/v3/batch?appid=YahooFrontPage&q=" | |
}, | |
"earnyUpsellPosition": "", | |
"earnyUpsellImg": "", | |
"urls": { | |
"earnyOauth": "https://mail.yahoo.com/d/earnyOauth", | |
"message": "https://mail.yahoo.com/mrd/mail/any/message?imid=" | |
} | |
}, | |
"url": "https://mail.yahoo.com/?.intl=uk&.lang=en-GB&.partner=none&.src=fp", | |
"useCors": true, | |
"useYqlApi": 0 | |
}, | |
"mailBeacon": 1, | |
"miniheader": true, | |
"miniheaderHeight": 0, | |
"miniheaderYPos": 0, | |
"notifications": { | |
"polling": true, | |
"pollingInterval": 300, | |
"notificationClient": { | |
"badge": { | |
"hideClass": "D(n)" | |
}, | |
"enabled": true, | |
"historyServicePath": "/_td_api/resource/notificationHistory", | |
"panel": { | |
"notificationCenterPath": "/notifications" | |
}, | |
"promos": { | |
"enableNotifOnboard": true | |
} | |
}, | |
"subscriptionHelper": { | |
"enabled": true, | |
"enableChurnCheck": true, | |
"enableSubsResyncIfError": true, | |
"churnCheckBackoff": 604800, | |
"confirmationNotification": { | |
"body": "We will send you notifications about latest breaking news. Change settings anytime under the bell on Yahoo.com", | |
"enabled": true, | |
"icon": "https://s.yimg.com/rz/uh/notifications/default-notif-img.png", | |
"title": "Welcome!" | |
}, | |
"overlay": { | |
"default": { | |
"backgroundColor": "rgba(236, 236, 236, .95)", | |
"imageHeight": 227, | |
"imageUrl": "https://s.yimg.com/rz/uh/notifications/inst-push-perm-6.png", | |
"imageWidth": 541, | |
"overlayId": "permission-instructions", | |
"xOffset": 335, | |
"yOffset": 83 | |
}, | |
"denied": { | |
"backgroundColor": "rgba(236, 236, 236, .95)", | |
"imageHeight": 326, | |
"imageUrl": "https://s.yimg.com/rz/uh/notifications/inst-unblock-push-perm.png", | |
"imageWidth": 490, | |
"overlayId": "unblock-instructions", | |
"xOffset": 100, | |
"yOffset": 2 | |
} | |
}, | |
"resubscribeOnChurn": true, | |
"serviceWorkerUrl": "/service-worker.js", | |
"spaceId": 1197806515, | |
"subscriptionService": { | |
"host": null, | |
"path": "/_td_api", | |
"protocol": null | |
}, | |
"supportedBrowsers": { | |
"chrome": { | |
"maxVersion": 0, | |
"minVersion": 54, | |
"os": ["win", "mac"], | |
"useServiceWorker": true | |
} | |
} | |
}, | |
"autoInitSubscription": 0, | |
"pushPromo": 0 | |
}, | |
"search": { | |
"action": "https://uk.search.yahoo.com/search", | |
"appendFrToTypeQuery": false, | |
"assistYlc": ";_ylc=X3oDMTFiaHBhMnJmBF9TAzIwMjM1MzgwNzUEaXRjAzEEc2VjA3NyY2hfcWEEc2xrA3NyY2hhc3Q-", | |
"fr2Code": "", | |
"ylc": ";_ylc=X3oDMTFiN25laTRvBF9TAzIwMjM1MzgwNzUEaXRjAzEEc2VjA3NyY2hfcWEEc2xrA3NyY2h3ZWI-", | |
"searchTermQueryKey": "p", | |
"queries": [{ | |
"name": "fr", | |
"value": "yfp-t" | |
}, { | |
"name": "fp", | |
"value": "1" | |
}, { | |
"name": "toggle", | |
"value": "1" | |
}, { | |
"name": "cop", | |
"value": "mss" | |
}, { | |
"name": "ei", | |
"value": "UTF-8" | |
}], | |
"autocomplete": { | |
"additionalParams": { | |
"appid": "fp" | |
}, | |
"ghostEnabled": false, | |
"host": "https://uk.search.yahoo.com/sugg/gossip/gossip-uk-ura/", | |
"crumbKey": "gossip", | |
"theme": { | |
"highlight": { | |
"color": "black", | |
"background": "#c6d7ff" | |
} | |
}, | |
"plugin": { | |
"minQueryLength": 1, | |
"resultHighlighter": "phraseMatch" | |
} | |
}, | |
"i13nModel": { | |
"elm": "btn", | |
"elmt": "srch", | |
"itc": "0", | |
"rspns": "nav", | |
"sec": "srch", | |
"slk": "srchweb", | |
"tar": "uk.search.yahoo.com", | |
"tar_uri": "/search", | |
"t1": "a1", | |
"t2": "srch" | |
}, | |
"i13nSuggestion": { | |
"cpos": "cposV", | |
"elm": "itm", | |
"elmt": "srch", | |
"itc": "0", | |
"rspns": "nav", | |
"sec": "srch", | |
"slk": "srchast", | |
"tar": "uk.search.yahoo.com", | |
"t1": "a1", | |
"t2": "srch", | |
"t3": "tray", | |
"t9": "t9Val" | |
}, | |
"i13nModelString": "elm:btn;elmt:srch;itc:0;rspns:nav;sec:srch;slk:srchweb;tar:uk.search.yahoo.com;tar_uri:/search;t1:a1;t2:srch", | |
"i13nSuggestionString": "cpos:cposV;elm:itm;elmt:srch;itc:0;rspns:nav;sec:srch;slk:srchast;tar:uk.search.yahoo.com;t1:a1;t2:srch;t3:tray;t9:t9Val" | |
}, | |
"searchAssistJS": true, | |
"searchBtnIcon": true, | |
"searchFormGlow": true, | |
"topBar": true, | |
"useAvatar": true, | |
"userAgent": { | |
"browserName": "chrome", | |
"browserVersion": 74, | |
"browserVendor": "google", | |
"os": "mac" | |
} | |
} | |
}, | |
"avatar": { | |
"yui_module": "mega-header-plugin-avatar-cp", | |
"yui_class": "Y.TD.megaHeaderAvatarCP" | |
}, | |
"mail": { | |
"yui_module": "mega-header-plugin-mail", | |
"yui_class": "Y.TD.megaHeaderMail" | |
} | |
}, | |
"templates": { | |
"main": { | |
"yui_module": "td-applet-mega-header-templates-main", | |
"template_name": "td-applet-mega-header-templates-main", | |
"lazy_load": true | |
}, | |
"mailpreview": { | |
"yui_module": "td-applet-mega-header-templates-mailpreview", | |
"template_name": "td-applet-mega-header-templates-mailpreview" | |
}, | |
"accountSwitchPanel": { | |
"yui_module": "td-applet-mega-header-templates-accountSwitchPanel", | |
"template_name": "td-applet-mega-header-templates-accountSwitchPanel" | |
}, | |
"profile": { | |
"yui_module": "td-applet-mega-header-templates-profile", | |
"template_name": "td-applet-mega-header-templates-profile" | |
} | |
}, | |
"i18n": { | |
"ACCOUNT_INFO": "Account info", | |
"ACCOUNT_SWITCH_WELCOME_1": "Easily switch between multiple Yahoo accounts using the new", | |
"ACCOUNT_SWITCH_WELCOME_2": "Click on ‘Add account’ below to get started.", | |
"ACCOUNT_SWITCH_COOKIE_ERR": "It looks as though you’ve switched accounts. Refresh the browser to view your personalised page.", | |
"ACCOUNT_SWITCH_CRUMB_ERR": "Your account data may be out of sync.<br>Refresh the page to see your accounts.", | |
"ACCOUNT_SWITCH_ACCOUNT_MANAGER": "Account manager", | |
"ADD_ACCOUNT": "Add account", | |
"ADD_MANAGE_ACCOUNT": "Add or manage accounts", | |
"BANNER_PROMO_TITLE": "Make Yahoo your homepage", | |
"BANNER_PROMO_DESC": "Discover something new every day from News, Sport, Finance, Entertainment and more!", | |
"BANNER_PROMO_CLOSE": "No, thanks", | |
"BANNER_PROMO_ADD": "Get", | |
"CLEAR_SEARCH": "Clear search query", | |
"CLOSE": "Close", | |
"COMPOSE": "Compose", | |
"CORPMAIL": "Corp Mail", | |
"DEVELOPING_NOW": "Developing now", | |
"DIALPAD_FEATURE_CUE_MSG": "Get to <strong>News, Sport and Finance</strong> here", | |
"EARNY_UPSELL_IMG_ALT": "Automatic refunds", | |
"EARNY_UPSELL_HEADING": "You may have overpaid", | |
"EARNY_UPSELL_DESC": "Use your receipts to get money back", | |
"EARNY_UPSELL_BUTTON_TITLE": "Show me how much I could save", | |
"ENTER_KEY": "Enter", | |
"FOLLOW": "Follow", | |
"FOLLOWING": "Following", | |
"FOR": "For", | |
"FROM": "From", | |
"GO_TO_MAIL": "Go to Mail", | |
"HAVE_NO_NEW_MESSAGES": "You have no new messages.", | |
"HOME": "Home", | |
"HELP": "Help", | |
"IEINSTALLER_SET_YAHOO_AS_HP": "Set Yahoo as your homepage", | |
"IEINSTALLER_MODAL_TEXT": "Click \"<strong>Run</strong>\" and you'll never miss a thing with Yahoo as your default homepage and new tab page across all browsers on your device.", | |
"IEINSTALLER_PRIVACY_TERMS": "<a href='{termsUrl}' target='_blank'>Yahoo Terms</a> and <a href='{privacyUrl}' target='_blank'>Privacy Policy</a> apply", | |
"LOADING_MAIL": "Loading email preview", | |
"LOADING_UPDATES": "Loading updates", | |
"MAIL": "Mail", | |
"MENU": "Menu", | |
"NAVIGATION": "Navigation", | |
"NEW": "New", | |
"NEW_MESSAGE": "new message.", | |
"NEW_MESSAGES": "new messages.", | |
"NOTIFICATIONS": "Notifications", | |
"NOTIFICATION_CENTER_NAV_MSG": "View all {newCount} notifications", | |
"NO_NEW_NOTIFICATIONS": "You have no new notifications.", | |
"NOTIFY_ME": "Notify me", | |
"NOTIF_PANEL_PROMO_TEXT": "Get notifications for your favourite topics", | |
"NOTIF_CONFIRMATION_TEXT": "We will send you notifications about the latest breaking news. Change settings at any time under the bell on {hostName}", | |
"NOTIF_CONFIRMATION_TITLE": "Welcome!", | |
"PLEASE_CHECK_BACK_LATER": "Please check back later.", | |
"PROFILE": "Profile", | |
"PUSH_NOTIF_DISABLED": "You are not receiving browser alerts", | |
"PUSH_NOTIF_ENABLED": "You are receiving browser alerts", | |
"REL_DAYS": "{0}d", | |
"REL_DAYS_AGO": "{0} days ago", | |
"REL_HOURS": "{0}h", | |
"REL_HOURS_AGO": "{0} hours ago", | |
"REL_MINS": "{0}m", | |
"REL_MINS_AGO": "{0} minutes ago", | |
"REL_MONTHS": "{0}mo", | |
"REL_MONTHS_AGO": "{0} months ago", | |
"REL_SECS": "{0}s", | |
"REL_SECS_AGO": "{0} seconds ago", | |
"REL_WEEKS": "{0}wk", | |
"REL_WEEKS_AGO": "{0} weeks ago", | |
"REL_YEARS": "{0}yr", | |
"REL_YEARS_AGO": "{0} years ago", | |
"SEARCH": "Search", | |
"SEARCH_WEB": "Search web", | |
"SIGNIN": "Sign in", | |
"SIGNUP": "Sign up", | |
"SIGNOUT": "Sign out", | |
"SIGNOUT_ALL": "Sign out of all", | |
"SIGNOUT_CAPS": "SIGN OUT", | |
"SUBJECT": "Subject", | |
"SWITCH_TO": "Switch to account", | |
"TO_VIEW_MAIL": " to view your emails", | |
"TOGGLE_PUSH_NOTIF": "Toggle notification status", | |
"UNABLE_TO_PREVIEW_MAIL": "We are unable to preview your mail.", | |
"UNABLE_TO_FETCH_UPDATES": "Check back later for updates on stories that you’re following.", | |
"UNFOLLOW": "Unfollow", | |
"USER_INTENT_MANAGE_PUBLISHERS": "Manage publishers", | |
"VIDEO": "Video", | |
"WEB": "Web", | |
"WELCOME_BACK": "Welcome back", | |
"YOU_HAVE": "You have", | |
"SKIP_ASIDE": "Skip to related content", | |
"SKIP_MAIN": "Skip to main content", | |
"SKIP_NAV": "Skip to navigation", | |
"SCROLL_PROMO_TITLE": "Stay on top of breaking news.", | |
"SCROLL_PROMO_DESC": "Set your new tab and homepage to Yahoo to keep up with the latest news.", | |
"SCROLL_PROMO_ADD": "Add it now" | |
}, | |
"transport": { | |
"xhr": "/_tdpp_api" | |
}, | |
"context": { | |
"bucket": "903", | |
"device": "desktop", | |
"lang": "en-GB", | |
"region": "GB", | |
"site": "fp" | |
} | |
}; /*! NotificationClient - v0.0.13 - 2019-04-30 */ | |
window.NotificationClient = function() { | |
"use strict"; | |
function a(a, c) { | |
if (a && !b(a, c)) { | |
var d = a.className + j + c; | |
a.className = d | |
} | |
} | |
function b(a, b) { | |
var c = a && a.className && a.className.split(j); | |
return !!c && -1 !== c.indexOf(b) | |
} | |
function c(a, b) { | |
if (a) { | |
var c = a.className && a.className.split(j); | |
if (c) { | |
var d = c.indexOf(b); | |
0 <= d && c.splice(d, 1), a.className = c.join(j) | |
} | |
} | |
} | |
function d(a, b) { | |
if (a) { | |
if (!b) return a; | |
for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c]) | |
} | |
} | |
var e = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(a) { | |
return typeof a | |
} : function(a) { | |
return a && "function" == typeof Symbol && a.constructor === Symbol && a !== Symbol.prototype ? "symbol" : typeof a | |
}, f = function(a, b) { | |
if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function") | |
}, g = function() { | |
function a(a, b) { | |
for (var c, d = 0; d < b.length; d++) c = b[d], c.enumerable = c.enumerable || !1, c.configurable = !0, "value" in c && (c.writable = !0), Object.defineProperty(a, c.key, c) | |
} | |
return function(b, c, d) { | |
return c && a(b.prototype, c), d && a(b, d), b | |
} | |
}(), | |
h = "GET", | |
i = function() { | |
function a(b) { | |
f(this, a), this._config = b | |
} | |
return g(a, [{ | |
key: "_getRequestUrl", | |
value: function(a) { | |
var b = a.url || this._config.service.url; | |
if (b) { | |
var c = b.split("?"), | |
d = { | |
path: c[0], | |
queryParams: c[1] ? c[1].split("&") : [] | |
}; | |
c = d.path.split(";"), d.path = c[0], d.matrixParams = c.slice(1); | |
var e = a.queryParams, | |
f = a.matrixParams; | |
f && Object.keys(f).forEach(function(a) { | |
d.matrixParams.push(encodeURIComponent(a) + "=" + encodeURIComponent(f[a] || "")) | |
}), e && Object.keys(e).forEach(function(a) { | |
d.queryParams.push(encodeURIComponent(a) + "=" + encodeURIComponent(e[a] || "")) | |
}); | |
var g = d.path; | |
return d.matrixParams.length && (g += ";" + d.matrixParams.join(";")), d.queryParams.length && (g += "?" + d.queryParams.join("&")), g | |
} | |
} | |
}, { | |
key: "_getRequestBody", | |
value: function(a) { | |
return a && JSON.stringify(a) || "" | |
} | |
}, { | |
key: "_parseRequestResult", | |
value: function(a) { | |
if ("string" == typeof a) try { | |
a = JSON.parse(a) | |
} catch (b) { | |
a = {} | |
} | |
return a = a || {}, { | |
css: a.css, | |
count: a.count, | |
markup: a.html, | |
newCount: a.newCount | |
} | |
} | |
}, { | |
key: "read", | |
value: function(a, b) { | |
this._attemptRequest(h, a, b) | |
} | |
}, { | |
key: "update", | |
value: function(a, b) { | |
this._attemptRequest("PUT", a, b) | |
} | |
}, { | |
key: "create", | |
value: function(a, b) { | |
this._attemptRequest("POST", a, b) | |
} | |
}, { | |
key: "_attemptRequest", | |
value: function(a, b, c) { | |
var d = this._config.service.attemptCount; | |
b || (b = {}); | |
var e = this._getRequestUrl(b), | |
f = this._getRequestBody(b.body); | |
this._sendRequest({ | |
body: f, | |
method: a, | |
url: e | |
}, d, c) | |
} | |
}, { | |
key: "_sendRequest", | |
value: function(a, b, c) { | |
var d = this; | |
a = a || {}; | |
var e = d._config.service, | |
f = 1e3 * e.attemptDelay, | |
g = a, | |
i = g.url, | |
j = g.body, | |
k = new XMLHttpRequest; | |
k.open(a.method, i), k.responseType = e.responseType, k.timeout = e.timeout; | |
var l = function() { | |
0 < b ? (b--, setTimeout(function() { | |
d._sendRequest(a, b, c) | |
}, f)) : c && c(new Error("Error: " + k.status + " " + k.statusText), null) | |
}; | |
k.onload = function() { | |
if (200 === k.status) { | |
var b = d._parseRequestResult(k.response || k.responseText); | |
c && c(null, b, a) | |
} else l() | |
}, k.onerror = l, a.method === h ? k.send() : k.send(j) | |
} | |
}]), a | |
}(), | |
j = " ", | |
k = function() { | |
function a(b, c) { | |
f(this, a); | |
var d = this; | |
d._config = b, d._markup = "", d._newCount, d._count, d._request = c | |
} | |
return g(a, [{ | |
key: "_replaceAllNotifications", | |
value: function(a) { | |
this._markup = a.markup || "", this._newCount = a.newCount && parseInt(a.newCount, 10) || 0, this._count = a.count && parseInt(a.count, 10) || 0 | |
} | |
}, { | |
key: "resetNewCount", | |
value: function() { | |
this._newCount = 0 | |
} | |
}, { | |
key: "_requestNotifications", | |
value: function(a, b) { | |
var c = this, | |
e = c._config.panel, | |
f = { | |
count: e.maxCount, | |
imageTag: e.imageTag | |
}; | |
a || (a = {}), d(f, a.matrixParams), c._request.read({ | |
matrixParams: f | |
}, function(a, d) { | |
!a && d && c._replaceAllNotifications(d), d = d || {}, b && b(a, d) | |
}) | |
} | |
}, { | |
key: "getNotifications", | |
value: function() { | |
return { | |
count: this._count, | |
markup: this._markup, | |
newCount: this._newCount | |
} | |
} | |
}, { | |
key: "fetchNotifications", | |
value: function(a, b) { | |
this._requestNotifications(a, b) | |
} | |
}]), a | |
}(), | |
l = { | |
panelLoading: "yns-panel-loading", | |
panelNodeId: "yns-panel", | |
panelNodeClass: "yns-panel", | |
panelHideElement: "yns-hide", | |
panelError: "yns-panel-error", | |
panelPaddingBtm: "yns-panel-padding-btm" | |
}, m = function() { | |
function a(b, c) { | |
f(this, a); | |
var d = this; | |
d._config = b, d._panelNode = null, d._store = c | |
} | |
return g(a, [{ | |
key: "_generatePanelMarkup", | |
value: function(a, c) { | |
var d, e, f = this._config; | |
"undefined" != typeof window && (d = window.Notification && "granted" === window.Notification.permission, e = b(document.body, f.promos.eligibleBodyClass)); | |
var g, h = f.promos.enableNotifOnboard && !d && e, | |
i = h ? '<li class="yns-container yns-promo"><div class="yns-link"><img class="yns-img" src="https://s.yimg.com/cv/ae/notifications/Y-Notif-Panel.png" /><div class="yns-content"><span class="yns-promo-title yns-title">Get Breaking News alerts on your desktop</span><span class="yns-promo-button"><button class="yns-promo-ctr js-push-subscribe" data-subscription-topic="gondor_homerun_news" data-ylk="sec:hd;subsec:notifications-promo;slk:Notify Me;" data-subscription-ylk="sec:hd;subsec:notifications-promo;" >Notify Me</button></span></div></div></li>' : "", | |
j = c.newCount > f.panel.maxCount, | |
k = j ? c.newCount : "", | |
m = f.panel.notificationCenterPath, | |
n = m ? "" : l.panelHideElement, | |
o = m ? l.panelPaddingBtm : ""; | |
return g = c.count ? c.markup : '<li class="yns-container yns-empty"><div class="yns-content">{emptyPanelMsg}</div></li>'.replace("{emptyPanelMsg}", f.panel.emptyPanelMsg), a = a.replace("{notifMarkup}", g).replace("{promoMarkup}", i).replace("{hideClass}", n).replace("{notifCenterLink}", m).replace("{paddingClass}", o).replace("{headerMsg}", f.panel.headerMsg).replace(/{notificationCenterNavMsg}/g, f.panel.notificationCenterNavMsg).replace(/{newCount}/g, k) | |
} | |
}, { | |
key: "render", | |
value: function(a, b) { | |
var c = this; | |
if (!c._panelNode) return void(b && b(new Error("No panel parent"))); | |
var d, e, f, g = c._panelNode; | |
switch (a) { | |
case "expanded_panel": | |
d = '<div class="yns-panel-header"><span class="yns-panel-header-title">{headerMsg}</span></div><div class="yns-panel-data"><ul class="yns-notifications {paddingClass}">{promoMarkup}{notifMarkup}</ul></div><div class="yns-panel-footer-action {hideClass}"><a class="yns-navigate-center" href="{notifCenterLink}" data-ylk="sec:hd;subsec:notifications-viewall;slk:{notificationCenterNavMsg};">{notificationCenterNavMsg}</a></div>', f = c._store.getNotifications(), e = c._generatePanelMarkup(d, f), g.innerHTML = e; | |
break; | |
case "error_panel": | |
d = '<div class="yns-panel-error"><span> {errorMsg} </span></div>', e = d.replace("{errorMsg}", c._config.panel.errorMsg), g.innerHTML = e | |
} | |
b && b() | |
} | |
}, { | |
key: "createPanelParentNode", | |
value: function(a) { | |
a && (a.innerHTML = '<div class="yns-panel" id="yns-panel"></div>', this._panelNode = document.getElementById(l.panelNodeId)) | |
} | |
}, { | |
key: "updateBadgeNode", | |
value: function(a) { | |
if (a) { | |
var b = this._store.getNotifications(), | |
c = b.newCount, | |
d = this._config.badge.maxCount; | |
if (c) { | |
var e = c > d ? d + "+" : c; | |
a.innerHTML = e | |
} else a.innerHTML = "" | |
} | |
} | |
}, { | |
key: "addStyles", | |
value: function(a) { | |
if (a && "undefined" != typeof window) { | |
var b = document.getElementById(this._config.panel.styleTagId); | |
b || (b = document.createElement("style"), b.type = "text/css", b.id = this._config.panel.styleTagId, b.innerText = a, document.head.appendChild(b)) | |
} | |
} | |
}]), a | |
}(), | |
n = function() { | |
function b(a, c, d) { | |
f(this, b); | |
var e = this; | |
e._store = c, e._view = d, e._config = a; | |
var g = e._config.panel; | |
e._panelParentNode = document.querySelector(g.parentSelector), e._badgeNode = e._config.badge.selector && document.querySelector(e._config.badge.selector), e._indicatorNode = g.indicatorSelector && document.querySelector(g.indicatorSelector) | |
} | |
return g(b, [{ | |
key: "createPanelParentNode", | |
value: function() { | |
this._view.createPanelParentNode(this._panelParentNode), this._notifPanelNode = document.getElementById(l.panelNodeId) | |
} | |
}, { | |
key: "refreshPanelNode", | |
value: function(b, d) { | |
var e = this; | |
a(e._notifPanelNode, l.panelLoading), e._store.fetchNotifications(b, function(b, f) { | |
b ? !e._notifPanelNode.innerHTML && (e._view.render("error_panel"), a(e._notifPanelNode, l.panelLoading)) : (e._view.render("expanded_panel"), e._view.updateBadgeNode(e._badgeNode), e._showBadge(), e._showIndicator(), e._view.addStyles(f.css)), c(e._notifPanelNode, l.panelLoading), d && d(b, f) | |
}) | |
} | |
}, { | |
key: "resetBadge", | |
value: function() { | |
var b = this; | |
b._store.resetNewCount(), b._view.updateBadgeNode(b._badgeNode), a(b._badgeNode, b._config.badge.hideClass) | |
} | |
}, { | |
key: "_showIndicator", | |
value: function() { | |
if (this._indicatorNode) { | |
var b = this._store.getNotifications(), | |
d = b.newCount; | |
d ? a(this._indicatorNode, this._config.panel.indicatorClass) : c(this._indicatorNode, this._config.panel.indicatorClass) | |
} | |
} | |
}, { | |
key: "_showBadge", | |
value: function() { | |
var b = this, | |
d = b._store.getNotifications(), | |
e = d.newCount; | |
e ? c(b._badgeNode, b._config.badge.hideClass) : a(b._badgeNode, b._config.badge.hideClass) | |
} | |
}]), b | |
}(), | |
o = { | |
promos: { | |
eligibleBodyClass: "display-push-promos", | |
enableNotifOnboard: !0 | |
}, | |
badge: { | |
hideClass: "", | |
maxCount: 5, | |
selector: "" | |
}, | |
panel: { | |
emptyPanelMsg: "You have no new notifications.", | |
errorMsg: "", | |
headerMsg: "Notifications", | |
imageTag: "img:40x40|2|80", | |
indicatorClass: "yns-indicator", | |
indicatorSelector: null, | |
maxCount: 6, | |
notificationCenterNavMsg: "View all {newCount} notifications", | |
notificationCenterPath: "", | |
styleTagId: "notificationStyles", | |
parentSelector: null | |
}, | |
service: { | |
attemptCount: 2, | |
attemptDelay: 1, | |
url: null, | |
responseType: "json", | |
timeout: 1500 | |
} | |
}, p = function() { | |
function a(b) { | |
f(this, a); | |
var c = this; | |
c.config = c._parseConfig(b); | |
var d = c._validateRequiredConfigs(); | |
d && (c._request = new i(c.config), c._store = new k(c.config, c._request), c._view = new m(c.config, c._store), c._panelController = new n(c.config, c._store, c._view), c._panelController.createPanelParentNode(), c._assignHelperMethods()) | |
} | |
return g(a, [{ | |
key: "_parseConfig", | |
value: function(a) { | |
var b = {}; | |
for (var c in d(b, o), b) | |
if (b.hasOwnProperty(c)) { | |
var f = b[c], | |
g = a[c]; | |
"object" === ("undefined" == typeof f ? "undefined" : e(f)) ? d(f, g) : b[c] = a[c] | |
} | |
return b | |
} | |
}, { | |
key: "_validateRequiredConfigs", | |
value: function() { | |
var a = this.config; | |
return !(!a.panel.parentSelector || !a.service.url) | |
} | |
}, { | |
key: "_assignHelperMethods", | |
value: function() { | |
var a = this; | |
a.helpers = { | |
refreshPanelNode: a._panelController.refreshPanelNode.bind(a._panelController), | |
resetBadge: a._panelController.resetBadge.bind(a._panelController), | |
resetIndicator: function() { | |
c(a._panelController._indicatorNode, a.config.panel.indicatorClass) | |
} | |
} | |
} | |
}]), a | |
}(); | |
return p | |
}(); /*! SubscriptionHelper - v3.8.11 - 2019-05-07 */ | |
! function() { | |
function a(a, b, c) { | |
this.init(a, b, c) | |
} | |
var b = "BrowserSubscriptionHelper", | |
c = "chrome", | |
d = "error", | |
e = "firefox", | |
f = "info", | |
g = "pushNotifications", | |
h = "undefined", | |
i = "Unsupported Browser.", | |
j = "No_SW_registration", | |
k = "No_PushManager_Subscription", | |
l = "Subscription_Present", | |
m = "granted", | |
n = "denied", | |
o = "yahooNotifications", | |
p = 2, | |
q = "subscriptions", | |
r = "type", | |
s = "push", | |
t = "display-push-promos", | |
u = "js-push-subscribe", | |
v = "rapidnofollow", | |
w = "subscriptionFail", | |
x = 864e5; | |
a.prototype = { | |
init: function(a, b, c) { | |
var d = this; | |
d.beaconer = b, d.tracker = c, d.config = { | |
bucket: a.bucket, | |
confirmationNotification: a.confirmationNotification || {}, | |
overlay: a.overlay || {}, | |
serviceWorkerScope: a.serviceWorkerScope || "/", | |
serviceWorkerUrl: a.serviceWorkerUrl, | |
spaceId: a.spaceId, | |
subscriptionService: a.subscriptionService || {}, | |
supportedBrowsers: a.supportedBrowsers || {}, | |
userAgent: a.userAgent || {} | |
}, d._setIsPrivateSession(), d._attachPermissionUpdateHandle(), d._updateAttributesForSubscribedUser() | |
}, | |
checkIsPrivateSession: function(a) { | |
var b = this; | |
typeof b.isPrivateSession === h ? b._setIsPrivateSession(a) : a && a(null, b.isPrivateSession) | |
}, | |
checkIsSupportedBrowser: function() { | |
for (var a = this, b = a.config.userAgent, c = b.browserName, d = b.browserVersion, e = b.os || b.osName, f = a.config.supportedBrowsers, g = f[c] || {}, h = !1, i = !1, j = g.os && g.os.length, k = 0; k < j; k++) | |
if (e.indexOf(g.os[k]) > -1) { | |
i = !0; | |
break | |
} | |
return !a.isPrivateSession && (!g.minVersion || d >= g.minVersion) && (!g.maxVersion || d <= g.maxVersion) && (!g.useServiceWorker || g.useServiceWorker && "serviceWorker" in navigator) && i && (h = !0), h | |
}, | |
checkSubscriptionChurn: function(a) { | |
function b(b, d) { | |
var e = c._parseGCMSubscriptionId(d) || null, | |
g = b.deviceId || null, | |
h = b.subscriptionState || null, | |
i = d && d.error === w, | |
j = !g && "granted" === b.state && "started" === d.onboardState, | |
k = g && "granted" === b.state && "started" === d.onboardState && !d.error, | |
l = i || j || k, | |
m = "subsPushMngrResync"; | |
return i ? m = "subsOnepushResync" : k && (m = "subsFCMResync"), l ? (c._sendBeacon(f, { | |
code: m, | |
deviceId: g, | |
idbDeviceId: e, | |
onboardTime: d.onboardTime | |
}), void(a && a(null, { | |
isOnboardError: !0, | |
pushManagerChurn: null | |
}))) : void(e && e !== g && (!d.churnCheckTime || d.churnCheckTime < d.subscriptionTime) ? c.logSubscriptionChurnCheck(function(b) { | |
return b ? void(a && a(b)) : (c._sendBeacon(f, { | |
code: "subChurn", | |
idbDeviceId: e, | |
deviceId: g, | |
subscriptionState: h | |
}), void(a && a(null, { | |
isOnboardError: !1, | |
pushManagerChurn: !0 | |
}))) | |
}) : a && a(null, { | |
isOnboardError: !1, | |
pushManagerChurn: !1 | |
})) | |
} | |
var c = this; | |
return c.checkIsSupportedBrowser(g) ? void c.fetchPushPermission(function(d, e) { | |
return d || !e || e && "granted" !== e.state ? void(a && a(d, { | |
isOnboardError: null, | |
pushManagerChurn: null | |
})) : void c.getSubscriptionLog(function(c, d) { | |
return c ? void(a && a(c)) : void(e && d ? b(e, d) : a && a(null, { | |
isOnboardError: !1, | |
pushManagerChurn: !1 | |
})) | |
}) | |
}) : void(a && a(new Error(i))) | |
}, | |
fetchPushPermission: function(a) { | |
if (a) { | |
var b = this; | |
return b.checkIsSupportedBrowser() && b.config.userAgent.browserName === c ? void b._fetchPushPermissionChrome(a) : void a(new Error(i, null)) | |
} | |
}, | |
requestPushPermission: function(a, b) { | |
if (b) { | |
var d = this; | |
return d.checkIsSupportedBrowser() && (d.logOnboardingStart(), d.config.userAgent.browserName === c) ? void d._requestPushPermissionChrome(a, b) : void b(new Error(i, null)) | |
} | |
}, | |
_fetchPushPermissionChrome: function(a) { | |
var b = this, | |
c = Notification && Notification.permission; | |
c === m ? navigator.serviceWorker.getRegistration(b.config.serviceWorkerScope).then(function(a) { | |
return a && a.pushManager.getSubscription() | |
}).then(b._buildPermissionObjectChrome.bind(b)).then(function(b) { | |
a(null, b) | |
})["catch"](function(c) { | |
b._sendBeacon(d, { | |
code: "brwsrPermFetchError", | |
message: c | |
}), a(c) | |
}) : a(null, b._buildPermissionObjectChrome(null)) | |
}, | |
_requestPushPermissionChrome: function(a, b) { | |
var c = this, | |
e = c.config.serviceWorkerUrl, | |
g = c.config.serviceWorkerScope; | |
Notification && e && g && ("default" === Notification.permission && (c._trackLinkView({ | |
itc: "1", | |
sec: a.sec, | |
slk: "notification permission request", | |
subsec: a.subsec | |
}), c._sendBeacon(f, { | |
code: "notificationPermissionRequest", | |
message: a.sec | |
})), Notification.requestPermission().then(function() { | |
return c._doRegisterServiceWorker(e, g) | |
}).then(c._doPushManagerSubscribe.bind(c)).then(c._buildPermissionObjectChrome.bind(c)).then(function(a) { | |
c._sendBeacon(f, { | |
code: "brwsrPermReqSuccess", | |
message: a.state | |
}), b(null, a) | |
})["catch"](function(a) { | |
c._sendBeacon(d, { | |
code: "brwsrPermReqError", | |
message: a | |
}), b(a, null) | |
})) | |
}, | |
_doRegisterServiceWorker: function(a, b) { | |
var c = this; | |
return navigator.serviceWorker.register(a, { | |
scope: b | |
}).then(function(a) { | |
return c._sendBeacon(f, { | |
code: "svcWkrRegSuccess" | |
}), a | |
}, function(a) { | |
c._sendBeacon(d, { | |
code: "svcWkrRegError", | |
message: a | |
}) | |
}) | |
}, | |
_doPushManagerSubscribe: function(a) { | |
var b = this; | |
if (window.Promise && a) return new Promise(function(b, c) { | |
if (Notification && "granted" === Notification.permission) { | |
var d = a.installing || a.waiting; | |
d ? d.addEventListener("statechange", function(a) { | |
"activated" === a.target.state && b() | |
}) : a.active ? b() : c("Service Worker not active") | |
} else c("Permission not granted") | |
}).then(function() { | |
return a.pushManager.subscribe({ | |
userVisibleOnly: !0 | |
}) | |
}).then(function(a) { | |
if (!a || !a.endpoint) throw "Missing subscription endpoint"; | |
return b.logPushManagerSuccess(a.endpoint), b._sendBeacon(f, { | |
code: "PushMngrSubSuccess", | |
deviceId: a.endpoint | |
}), a | |
})["catch"](function(a) { | |
b._sendBeacon(d, { | |
code: "PushMngrSubFail", | |
message: a | |
}), b.logPushManagerFailure() | |
}) | |
}, | |
_buildPermissionObjectChrome: function(a) { | |
var b; | |
return b = typeof a === h ? j : null === a ? k : l, { | |
deviceId: a && this._parseGCMSubscriptionId(a), | |
state: Notification && Notification.permission, | |
subscriptionKeys: a && btoa(JSON.stringify(a)), | |
subscriptionState: b | |
} | |
}, | |
_parseGCMSubscriptionId: function(a) { | |
var b, c, d = /^https\:\/\/(fcm|android)\.googleapis\.com\/(gcm|fcm)\/send\/(.*)$/; | |
return a && a.endpoint && (b = a.endpoint.match(d), c = b && b.length && b[3]), c | |
}, | |
_sendBeacon: function(a, c) { | |
var d = this; | |
d.beaconer && a && c && ("function" == typeof d.beaconer ? d.beaconer(a, b, c) : "function" == typeof d.beaconer[a] && d.beaconer[a](b, c)) | |
}, | |
_trackClick: function(a, b) { | |
var c = this; | |
c.tracker && a && a.sec && a.slk && typeof a._p !== h && c.tracker.beaconClick(a.sec, a.slk, a._p, a, a.outcome, b) | |
}, | |
_trackLinkView: function(a) { | |
var b = this; | |
b.tracker && a && a.sec && a.slk && b.tracker.beaconLinkViews([{ | |
sec: a.sec, | |
t1: a.t1, | |
t2: a.t2, | |
_links: [a] | |
}]) | |
}, | |
_setIsPrivateSession: function(a) { | |
function b() { | |
f.isPrivateSession = !0, a && a(null, f.isPrivateSession) | |
} | |
function d() { | |
f.isPrivateSession = !1, a && a(null, f.isPrivateSession) | |
} | |
var f = this, | |
g = f.config.userAgent.browserName || ""; | |
if (typeof f.isPrivateSession === h) try { | |
if (g.toLowerCase() === c) { | |
var i = window.RequestFileSystem || window.webkitRequestFileSystem; | |
i && i(window.TEMPORARY, 100, d, b) | |
} else if (g.toLowerCase() === e && window.indexedDB) { | |
var j = window.indexedDB.open("test"); | |
j.onerror = b, j.onsuccess = d | |
} | |
} catch (k) { | |
d() | |
} else a && a(null, f.isPrivateSession) | |
}, | |
_attachPermissionUpdateHandle: function(a) { | |
var b = this; | |
return b.checkIsSupportedBrowser(g) ? void(navigator && navigator.permissions && navigator.permissions.query && navigator.permissions.query({ | |
name: "notifications" | |
}).then(function(c) { | |
return c ? (c.onchange = function() { | |
b.getSubscriptionLog(function(a, d) { | |
d || (d = {}), d.code = "userPermissionUpdate", d.newState = c.state, b._sendBeacon(f, d) | |
}) | |
}, void(a && a(null, !0))) : void(a && a(null, !1)) | |
})) : void(a && a(new Error(i), !1)) | |
}, | |
_convertAllOnepushTopicsToRivendell: function(a, b) { | |
var c = this; | |
b = b || {}; | |
var d = b.subscriptionKeys, | |
e = { | |
channel_id: d, | |
device_id: b.deviceId, | |
registration_id: a | |
}, f = Object.assign(e, c.getEssentialAttributes()), | |
g = { | |
method: "POST", | |
operation: "update", | |
serviceResource: "subscriptions.oToR" | |
}; | |
return c.callSubscriptionService(g, f), !0 | |
}, | |
_updateAttributesForSubscribedUser: function() { | |
if (!window.indexedDB) return !1; | |
var a = this; | |
a._readEntryInDB(function(b, c) { | |
if (b) return !1; | |
c = c || {}; | |
var d = c.lastAttributeUpdateTime, | |
e = c.registrationId; | |
return !(Date.now() - d <= x) && void a.fetchPushPermission(function(b, d) { | |
if (b) return !1; | |
d = d || {}; | |
var f = d.subscriptionKeys; | |
if (d.state === m && "completed" === c.onboardState && f) { | |
var g = { | |
channel_id: f, | |
device_id: d.deviceId | |
}; | |
e && (g.registration_id = e, a._convertAllOnepushTopicsToRivendell(e, d)); | |
var h = Object.assign(g, a.getEssentialAttributes()), | |
i = { | |
method: "POST", | |
operation: "update", | |
serviceResource: "subscriptions.setAttributes" | |
}; | |
return a.callSubscriptionService(i, h, function(b, c) { | |
if (!b) { | |
c = c || {}, e = e || c.registrationId || c.g0 && c.g0.data && c.g0.data.registrationId; | |
var d = { | |
lastAttributeUpdateTime: Date.now() | |
}; | |
e && (d.registrationId = e), a._setEntryInDB(d) | |
} | |
}), !0 | |
} | |
return !1 | |
}) | |
}) | |
}, | |
logOnboardingStart: function(a, b) { | |
a = a || {}, this._initDB(a, b) | |
}, | |
logOnboardingCompleted: function(a, b) { | |
this._setEntryInDB({ | |
onboardState: "completed", | |
origin: a, | |
error: void 0 | |
}, b) | |
}, | |
logPushManagerSuccess: function(a, b) { | |
this._setEntryInDB({ | |
endpoint: a, | |
subscriptionTime: (new Date).getTime() | |
}, b) | |
}, | |
logPushManagerFailure: function(a) { | |
this._setEntryInDB({ | |
error: "pushManagerFail" | |
}, a) | |
}, | |
logSubscriptionFailure: function(a) { | |
this._setEntryInDB({ | |
error: w | |
}, a) | |
}, | |
logSubscriptionChurnCheck: function(a) { | |
this._setEntryInDB({ | |
churnCheckTime: (new Date).getTime() | |
}, a) | |
}, | |
clearErrorLog: function(a) { | |
this._setEntryInDB({ | |
error: void 0 | |
}, a) | |
}, | |
getSubscriptionLog: function(a) { | |
this._readEntryInDB(a) | |
}, | |
_openDB: function(a) { | |
var b = this, | |
c = window.indexedDB.open(o, p); | |
c.onupgradeneeded = function(c) { | |
var e = c.target.result, | |
f = e.createObjectStore(q, { | |
keyPath: r | |
}); | |
f.transaction.onerror = function(c) { | |
var e = new Error("Failed upgrading: " + c.target.errorCode); | |
b._sendBeacon(d, { | |
code: "IDBUpgradeFail", | |
message: e.message | |
}), a && a(e) | |
} | |
}, c.onsuccess = function(b) { | |
var c = b.target.result; | |
a && a(null, c) | |
}, c.onerror = function(c) { | |
var e = new Error("Failed opening: " + c.target.errorCode); | |
b._sendBeacon(d, { | |
code: "IDBOpenFail", | |
message: e.message | |
}), a && a(new Error(e)) | |
} | |
}, | |
_initDB: function(a, b) { | |
var c = this, | |
e = (new Date).getTime(), | |
g = "IDBInitFail", | |
h = "Failed initilazing: "; | |
c._openDB(function(i, j) { | |
if (i) return b && b(i); | |
var k = c._buildEntryObject(a), | |
l = j.transaction(q, "readwrite").objectStore(q), | |
m = l.put(k); | |
m.onsuccess = function(a) { | |
var d = (new Date).getTime(); | |
b && b(null, k), c._sendBeacon(f, { | |
code: "initIndexedDBDuration", | |
message: d - e | |
}), j.close() | |
}, m.onerror = function(a) { | |
var e = new Error(h + a.target.errorCode); | |
c._sendBeacon(d, { | |
code: g, | |
message: e.message | |
}), b && b(e), j.close() | |
} | |
}) | |
}, | |
_readEntryInDB: function(a) { | |
var b = this, | |
c = (new Date).getTime(); | |
b._openDB(function(e, g) { | |
if (e) return a && a(e); | |
var h = g.transaction(q).objectStore(q), | |
i = h.get(s); | |
i.onsuccess = function(d) { | |
var e = (new Date).getTime(); | |
a && a(null, i.result), b._sendBeacon(f, { | |
code: "readIndexedDBDuration", | |
message: e - c | |
}), g.close() | |
}, i.onerror = function(c) { | |
var e = new Error("Failed Reading: ", c.target.errorCode); | |
b._sendBeacon(d, { | |
code: "IDBReadFail", | |
message: e.message | |
}), a && a(e), g.close() | |
} | |
}) | |
}, | |
_setEntryInDB: function(a, b) { | |
var c = this, | |
e = (new Date).getTime(); | |
c._readEntryInDB(function(g, h) { | |
g || !h ? c._initDB(c._buildEntryObject(a, h), b) : c._openDB(function(g, i) { | |
if (g) return b && b(g); | |
var j = i.transaction(q, "readwrite").objectStore(q), | |
k = j.put(c._buildEntryObject(a, h)); | |
k.onsuccess = function(a) { | |
var d = (new Date).getTime(); | |
b && b(null, !0), c._sendBeacon(f, { | |
code: "updateIndexedDBDuration", | |
message: d - e | |
}), i.close() | |
}, k.onerror = function(a) { | |
c._sendBeacon(d, { | |
code: "IDBUpdateFail", | |
message: g | |
}), b && b(new Error("Failed updating: ", a.target.errorCode)), i.close() | |
} | |
}) | |
}) | |
}, | |
_buildEntryObject: function(a, b) { | |
var c = this; | |
a = a || {}, b = b || {}; | |
var d = (new Date).getTime(), | |
e = a.registrationId || b.registrationId, | |
f = { | |
bucket: a.bucket || b.bucket || c.config.bucket, | |
churnCheckTime: a.churnCheckTime || b.churnCheckTime, | |
endpoint: a.endpoint || b.endpoint, | |
error: a.error || b.error, | |
lastAttributeUpdateTime: a.lastAttributeUpdateTime || b.lastAttributeUpdateTime, | |
onboardState: a.onboardState || b.onboardState || "started", | |
onboardTime: b.onboardTime || d, | |
origin: a.origin || b.origin, | |
permissionState: Notification && Notification.permission || "unsuported", | |
spaceId: a.spaceId || b.spaceId || c.config.spaceId, | |
subscriptionTime: a.subscriptionTime || b.subscriptionTime, | |
updateTime: d | |
}; | |
return e && (f.registrationId = e), a.hasOwnProperty("error") && void 0 === a.error && (f.error = void 0, "started" === f.onboardState && (f.onboardState = "completed", f.onboardTime = d)), f[r] = s, f | |
}, | |
_sendRequest: function(a, b, c) { | |
function d() { | |
b > 0 ? (b -= 1, setTimeout(function() { | |
e._sendRequest(a, b, c) | |
}, f)) : c && c(new Error(j.statusText)) | |
} | |
if (a) { | |
var e = this, | |
f = 2e3, | |
g = a.url, | |
h = a.headers, | |
i = a.body, | |
j = new XMLHttpRequest; | |
b = "number" == typeof b ? b : 3, j.open(a.method, g), j.responseType = "json", j.timeout = 1e4; | |
for (var k in h) h.hasOwnProperty(k) && j.setRequestHeader(k, h[k]); | |
j.onload = function() { | |
if (200 === j.status) { | |
var a = j.response; | |
c && c(null, a) | |
} else d() | |
}, j.onerror = function() { | |
d() | |
}, j.ontimeout = function() { | |
d() | |
}, "GET" === a.method ? j.send() : j.send(i) | |
} | |
}, | |
callSubscriptionService: function(a, b, c) { | |
a = a || {}; | |
var d, e = this.config.subscriptionService, | |
f = "", | |
g = ""; | |
a.matrixParams && Object.keys && (Object.keys(a.matrixParams).forEach(function(b) { | |
f += ";" + (encodeURIComponent(b) + "=" + encodeURIComponent(a.matrixParams[b] || "")) | |
}), f && (f += ";")), g = [].concat(e.protocol ? e.protocol + "://" : []).concat(e.host || []).concat(e.path ? e.path.replace("RESOURCE_PLACEHOLDER", a.serviceResource + f) : []).join(""), "GET" === a.method ? (g.indexOf("resource/") < 0 && (g.endsWith && !g.endsWith("/") && (g += "/"), g += "resource/" + a.serviceResource + f), d = { | |
url: g, | |
method: "GET" | |
}) : "POST" === a.method && (d = { | |
body: JSON.stringify({ | |
requests: { | |
g0: { | |
resource: a.serviceResource, | |
operation: a.operation, | |
params: a, | |
body: b | |
} | |
}, | |
context: e.context || {} | |
}), | |
headers: { | |
"content-type": "application/json" | |
}, | |
url: g, | |
method: "POST" | |
}), this._sendRequest(d, 3, c) | |
}, | |
readTopicSubscription: function(a, b, c) { | |
if (!a || !b) return void(c && c(new Error("Missing required arguments"))); | |
if (!window.indexedDB) return void(c && c(new Error("IndexedDB connection failed"))); | |
var d = this; | |
d._readEntryInDB(function(e, f) { | |
if (e) return void(c && c(e)); | |
f = f || {}; | |
var g = f.registrationId, | |
h = { | |
matrixParams: { | |
channel_id: b, | |
operation: "read", | |
serviceResource: "subscriptions.hasSubscription", | |
target_id: a | |
}, | |
method: "GET", | |
serviceResource: "subscriptions.hasSubscription" | |
}; | |
g && (h.matrixParams.registration_id = g), d.callSubscriptionService(h, null, c) | |
}) | |
}, | |
setTopicSubscription: function(a, b, c, e, f) { | |
if (!a || !c || !e) return void(f && f(new Error("Missing required arguments"))); | |
if (!window.indexedDB) return void(f && f(new Error("IndexedDB connection failed"))); | |
var g = this; | |
g._readEntryInDB(function(h, i) { | |
if (h) return void(f && f(h)); | |
i = i || {}; | |
var j = i.registrationId, | |
k = { | |
channel_id: e, | |
device_id: c, | |
target_id: a | |
}; | |
j && (k.registration_id = j); | |
var l = Object.assign(k, g.getEssentialAttributes()), | |
m = { | |
method: "POST", | |
operation: "update", | |
serviceResource: b ? "subscriptions.setSubscription" : "subscriptions.removeSubscription" | |
}; | |
g.callSubscriptionService(m, l, function(a, b) { | |
return !a && (b = b || {}, j = j || b.registrationId || b.g0 && b.g0.data && b.g0.data.registrationId) ? void g._setEntryInDB({ | |
registrationId: j | |
}, function(c) { | |
c && g._sendBeacon(d, { | |
code: "registrationIDBEntryError", | |
message: c.message | |
}), f.call(g, a, b) | |
}) : void f.apply(g, Array.prototype.slice.call(arguments)) | |
}) | |
}) | |
}, | |
checkIsPushMuted: function(a, b) { | |
if (!a || !b) return void(b && b(new Error("Missing required topic"))); | |
var c = this; | |
c.fetchPushPermission(function(d, e) { | |
e && e.state === m && e.subscriptionKeys ? c.readTopicSubscription(a, e.subscriptionKeys, function(a, c) { | |
var d = c && c.isSubscribed; | |
b(null, !d) | |
}) : b(null, !0) | |
}) | |
}, | |
pushNotificationSubscribe: function(a, b) { | |
if (!a || !a.topic) return void(b && b(new Error("Missing required option: topic"))); | |
a = JSON.parse(JSON.stringify(a)); | |
var c = this, | |
e = c.config.overlay["default"], | |
f = a.topic, | |
g = a.trackingParams || { | |
sec: "hd" | |
}; | |
g.subsec = "browser-prompt", g.aid = f, a.trackingParams = g, c.fetchPushPermission(function(f, h) { | |
return f || !h ? (c._sendBeacon(d, { | |
code: "permRead", | |
message: f.message | |
}), void(b && b(new Error("Could not read push permission")))) : h.state === n ? (a.trackingParams = null, void c._handlePermissionDenied(a, b)) : h.state === m && h.deviceId && h.subscriptionKeys ? (a.trackingParams = null, void c._handlePermissionGranted(h, a, b)) : (a.showInstructionsDefault && e && h.state !== m && c.renderInstructionOverlay(e.overlayId, e.imageUrl, e.imageWidth, e.imageHeight, e.xOffset, e.yOffset), void c.requestPushPermission(g, function(f, g) { | |
return a.showInstructionsDefault && e && c.removeInstructionsOverlay(e.overlayId), !f && g ? g.state === m ? void c._handlePermissionGranted(g, a, b) : g.state === n ? void c._handlePermissionDenied(a, b) : void c._handlePermissionDismissed(a, b) : (c._sendBeacon(d, { | |
code: "permReq", | |
message: f.message | |
}), void(b && b(new Error("Push permission request failure")))) | |
})) | |
}) | |
}, | |
_handlePermissionGranted: function(a, b, c) { | |
b = b || {}; | |
var e = this, | |
f = b.trackingParams, | |
g = b.topic, | |
h = function(b, f) { | |
b ? a.deviceId && e.logSubscriptionFailure() : (e.hidePushSubscriptionPromos(), e.getSubscriptionLog(function(a, b) { | |
b && "completed" !== b.onboardState && e.logOnboardingCompleted(g) | |
})), b && e._sendBeacon(d, { | |
code: "failureAfterPerm", | |
message: b && b.message | |
}), c && c(b, f) | |
}; | |
a && a.state === m && g ? (f && (f.slk = "permission-allow", f._p = 1, e._trackClick(f)), this.setTopicSubscription(g, !0, a.deviceId, a.subscriptionKeys, h)) : c && c(new Error("Missing required params in handler")) | |
}, | |
_handlePermissionDenied: function(a, b) { | |
a = a || {}; | |
var c = this, | |
d = c.config.overlay.denied, | |
e = a.trackingParams; | |
e && (e.slk = "permission-block", e._p = 2, this._trackClick(e)), a.showInstructionsDenied && d && this.renderInstructionOverlay(d.overlayId, d.imageUrl, d.imageWidth, d.imageHeight, d.xOffset, d.yOffset), b && b(new Error("Permission denied by user")) | |
}, | |
_handlePermissionDismissed: function(a, b) { | |
a = a || {}; | |
var c = a.trackingParams; | |
c && (c.slk = "permission-dismiss", c._p = 0, this._trackClick(c)), b && b(new Error("Permission not granted by user")) | |
}, | |
pushNotificationUnsubscribe: function(a, b) { | |
var c = this; | |
a && c.fetchPushPermission(function(d, e) { | |
return e ? void c.setTopicSubscription(a, !1, e.deviceId, e.subscriptionKeys, b) : void(b && b(new Error("Could not read permission"))) | |
}) | |
}, | |
renderInstructionOverlay: function(a, b, c, d, e, f) { | |
var g = this; | |
if (a && b && c && d) { | |
var h = document.createElement("div"), | |
i = document.createElement("div"), | |
j = ""; | |
h.id = a, h.setAttribute("style", "position:fixed; background-color:rgba(236, 236, 236, 0.95); top:0; left:0; width:100%; height:100%; z-index:100;"), "number" != typeof e && (j += "margin-left:auto; margin-right:auto;"), "number" != typeof f && (j += " margin-top:117px;"), j && i.setAttribute("style", j), i.setAttribute("style", "width:" + c + "px;height:" + d + "px;background: url(" + b + ") 0 0/" + c + "px " + d + "px no-repeat;" + ("number" == typeof e ? "margin-left:" + e + "px;" : "") + ("number" == typeof f ? "margin-top:" + f + "px;" : "")), h.appendChild(i), document.body.appendChild(h), g.removeInstructionsOverlay && (document.onkeydown = function(b) { | |
b = b || window.event; | |
var c; | |
c = "key" in b ? "Escape" === b.key || "Esc" === b.key : 27 === b.keyCode, c && g.removeInstructionsOverlay(a) | |
}, h.onclick = function(b) { | |
g.removeInstructionsOverlay(a) | |
}) | |
} | |
}, | |
removeInstructionsOverlay: function(a) { | |
var b = document.getElementById(a); | |
b && document.body.removeChild(b) | |
}, | |
shouldPromotePushNotifications: function() { | |
return this.checkIsSupportedBrowser(g) && Notification.permission !== m | |
}, | |
shouldPromotePushNotificationsForTopic: function(a, b) { | |
var c = this; | |
return a && c.checkIsSupportedBrowser(g) ? void c.checkIsPushMuted(a, function(a, c) { | |
return a ? void b(a, !1) : void b(void 0, c) | |
}) : void b(void 0, !1) | |
}, | |
showPushSubscriptionPromos: function() { | |
this.shouldPromotePushNotifications() && document.body.classList.add(t) | |
}, | |
hidePushSubscriptionPromos: function() { | |
document.body.classList.remove(t) | |
}, | |
_stringParseKV: function(a, b, c) { | |
var d = {}; | |
if (!a) return d; | |
b = b || ";", c = c || ":"; | |
for (var e = a.split(b), f = 0; f < e.length; f += 1) { | |
var g = e[f], | |
h = g.indexOf(c), | |
i = g.substring(0, h), | |
j = g.substring(h + 1); | |
i = i.trim ? i.trim() : i, j = j.trim ? j.trim() : j, i && (d[i] = j) | |
} | |
return d | |
}, | |
_delegateDOMEvent: function(a, b, c, d) { | |
if (a && b && c && d) { | |
var e = document.querySelector(b); | |
e && e.addEventListener(a, function(a) { | |
for (var b = a.target; b && a.currentTarget !== b;) { | |
if (b.classList.contains(c)) { | |
d.call(b, a); | |
break | |
} | |
b = b.parentNode | |
} | |
}, !1) | |
} | |
}, | |
addPromoButtonDelegator: function() { | |
var a = this; | |
a._delegateDOMEvent("click", "body", u, function(b) { | |
a.handlePromoButtonSubscription(this) | |
}) | |
}, | |
handlePromoButtonSubscription: function(a) { | |
if (a) { | |
var b = this, | |
c = a.getAttribute("data-subscription-topic"), | |
d = a.getAttribute("data-subscription-ylk"), | |
e = d && b._stringParseKV(d), | |
f = "false" === a.getAttribute("data-subscription-instructions-default"), | |
g = "false" === a.getAttribute("data-subscription-instructions-denied"); | |
c && e && (b._trackClick(b._stringParseKV(d)), b.pushNotificationSubscribe({ | |
showInstructionsDefault: !f, | |
showInstructionsDenied: !g, | |
topic: c, | |
trackingParams: e | |
}, b.displayWelcomeNotification.bind(b))) | |
} | |
}, | |
trackPromoButtonsLinkViews: function() { | |
for (var a, b, c = this, d = document.getElementsByClassName(u), e = 0; d && e < d.length; e += 1) d[e].classList.contains(v) && c._isVisible(d[e]) && (a = d[e].getAttribute("data-subscription-ylk") || "", b = c._stringParseKV(a), b && b.slk && (b.slk = "[manual] " + b.slk, c._trackLinkView(b)), d[e].classList.remove(v)) | |
}, | |
_isVisible: function(a) { | |
if (a) { | |
var b = window.getComputedStyle(a, null); | |
return b && "none" !== b.display && "hidden" !== b.visibility | |
} | |
}, | |
displayWelcomeNotification: function() { | |
var a = this, | |
b = a.config.confirmationNotification; | |
Notification.permission === m && b.enabled && new Notification(b.title, { | |
body: b.body, | |
icon: b.icon | |
}) | |
}, | |
getEssentialAttributes: function() { | |
var a = -((new Date).getTimezoneOffset() / 60), | |
b = "UTC" + a, | |
c = { | |
utcTz: b | |
}; | |
if (window.Intl) try { | |
c.tz = window.Intl.DateTimeFormat().resolvedOptions().timeZone | |
} catch (d) {} | |
return c | |
} | |
}, typeof module !== h && module.exports ? module.exports = a : typeof window !== h && (window.SubscriptionHelper = a) | |
}(); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment