1 var __wpo
= {"assets":{"main":["/packs/base_polyfills.js","/packs/extra_polyfills.js","/packs/features/compose.js","/packs/modals/onboarding_modal.js","/packs/emoji_picker.js","/packs/features/notifications.js","/packs/features/account_timeline.js","/packs/features/home_timeline.js","/packs/features/public_timeline.js","/packs/features/community_timeline.js","/packs/features/favourited_statuses.js","/packs/features/list_timeline.js","/packs/features/following.js","/packs/features/followers.js","/packs/features/hashtag_timeline.js","/packs/features/status.js","/packs/features/account_gallery.js","/packs/features/blocks.js","/packs/features/follow_requests.js","/packs/features/reblogs.js","/packs/features/favourites.js","/packs/features/getting_started.js","/packs/features/keyboard_shortcuts.js","/packs/features/generic_not_found.js","/packs/features/list_editor.js","/packs/status/media_gallery.js","/packs/share.js","/packs/application.js","/packs/about.js","/packs/public.js","/packs/mailer.js","/packs/default.js","/packs/admin.js","/packs/common.js","/packs/common.css","/packs/mailer.css","/packs/default.css","/packs/manifest.json"],"additional":["/emoji/1f602.svg","/emoji/sheet.png"],"optional":["/packs/locale_zh-TW.js","/packs/locale_zh-HK.js","/packs/locale_zh-CN.js","/packs/locale_uk.js","/packs/locale_tr.js","/packs/locale_th.js","/packs/locale_sv.js","/packs/locale_sr.js","/packs/locale_sr-Latn.js","/packs/locale_sk.js","/packs/locale_ru.js","/packs/locale_pt.js","/packs/locale_pt-BR.js","/packs/locale_pl.js","/packs/locale_oc.js","/packs/locale_no.js","/packs/locale_nl.js","/packs/locale_ko.js","/packs/locale_ja.js","/packs/locale_it.js","/packs/locale_io.js","/packs/locale_id.js","/packs/locale_hy.js","/packs/locale_hu.js","/packs/locale_hr.js","/packs/locale_he.js","/packs/locale_gl.js","/packs/locale_fr.js","/packs/locale_fi.js","/packs/locale_fa.js","/packs/locale_es.js","/packs/locale_eo.js","/packs/locale_en.js","/packs/locale_de.js","/packs/locale_ca.js","/packs/locale_bg.js","/packs/locale_ar.js","/packs/roboto-italic-webfont-50efdad8c62f5f279e3f4f1f63a4f9bc.woff2","/packs/roboto-bold-webfont-f633cb5c651ba4d50791e1adf55d3c18.woff2","/packs/roboto-medium-webfont-69c55fc2fe77d38934ea98dc31642ce6.woff2","/packs/roboto-regular-webfont-3ec24f953ed5e859a6402cb3c030ea8b.woff2","/packs/fontawesome-webfont-af7ae505a9eed503f8b8e6982036873e.woff2","/packs/robotomono-regular-webfont-6c1ce30b90ee993b22618ec489585594.woff2","/packs/Montserrat-Regular-080422d4c1328f3407818d25c86cce51.woff2","/packs/void-65dfe5bd31335a5b308d36964d320574.png","/packs/reticle-7d7ce959271e5ff1193fb32cff90ea56.png","/packs/elephant-fren-d16fd77f9a9387e7d146b5f9d4dc1e7f.png","/packs/icon_cached-98a757f1d9e93652742be43c22f46287.png","/packs/icon_done-12b87c12f915597dccbd2ca4d7167ba4.png","/packs/icon_email-738c89662d6640f5e6539151023d049a.png","/packs/icon_file_download-e5c29678f3a639e1e62374911d85e1d0.png","/packs/icon_grade-3ec67253b37908d2ab783f7225f20682.png","/packs/icon_lock_open-0bfd71a52eb3f34934edd59088b559fb.png","/packs/icon_person_add-e2c6b660f6e1c95785d8d2bfa7a823af.png","/packs/icon_reply-4f6ada7a0b886b084706a484753a0ff0.png","/packs/logo_full-5c51cffe1fcb8225ae02400d6a7e7077.png","/packs/logo_transparent-6f79eeb2c38ec2d12ed4d978322457d6.png","/packs/preview-9a17d32fc48369e8ccd910a75260e67d.jpg","/packs/elephant_ui_plane-e3f2d57c12c376e189c274cbe81af8dd.svg","/packs/elephant_ui_disappointed-8864342480c3612e3061702851d3a798.svg","/packs/elephant_ui_greeting-475430963d0b00fe82b07b17857ebf6c.svg","/packs/elephant_ui_working-2e653cc278c2ac871c23aeb10de1c0e2.svg","/packs/icon_cached-108e30d96e1d5152be7fe2978bcdfe14.svg","/packs/icon_done-dba357bfbba455428787fefc655ce120.svg","/packs/icon_email-1346985c7aaceb601b0d4257133254f4.svg","/packs/icon_file_download-4b5c054e76b0df3cbbc851854cd10c3c.svg","/packs/icon_grade-8e81b8e88c2b5834347a2a226c65d440.svg","/packs/icon_lock_open-c9627928caaaa505ac7de2a64bd065ec.svg","/packs/icon_person_add-5c56ef10b9e99e77a44d89041f4b77b5.svg","/packs/icon_reply-b5e28e1fe6acd4ec003e643e947f1c4a.svg","/packs/logo-fe5141d38a25f50068b4c69b77ca1ec8.svg","/packs/logo_alt-6090911445f54a587465e41da77a6969.svg","/packs/logo_full-96e7a97fe469f75a23a74852b2478fa3.svg","/packs/logo_transparent-6900bab180aa3a46c34425e5367a218f.svg"]},"externals":["/emoji/1f602.svg","/emoji/sheet.png"],"hashesMap":{"8aadd54157395376ea8c22827bde88e67f31358e":"/packs/roboto-italic-webfont-50efdad8c62f5f279e3f4f1f63a4f9bc.woff2","e2fc71044647b6edf7a3ba41429d5d626e63710a":"/packs/roboto-bold-webfont-f633cb5c651ba4d50791e1adf55d3c18.woff2","b66f9a200f8671202198f0238b4729e127bc0dac":"/packs/roboto-medium-webfont-69c55fc2fe77d38934ea98dc31642ce6.woff2","74f352b40a57789750d3c738c710a82cdb0f254a":"/packs/roboto-regular-webfont-3ec24f953ed5e859a6402cb3c030ea8b.woff2","d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c":"/packs/fontawesome-webfont-af7ae505a9eed503f8b8e6982036873e.woff2","1e149b7d5f1c5a5c4971cb523450118b1d50ed47":"/packs/robotomono-regular-webfont-6c1ce30b90ee993b22618ec489585594.woff2","c6aade94b414951dc75e41b6f30fc1fa93bf89fb":"/packs/Montserrat-Regular-080422d4c1328f3407818d25c86cce51.woff2","7e2065071fefe6d54f64b821bf575a0ab49b92c0":"/packs/void-65dfe5bd31335a5b308d36964d320574.png","f7e7808e34f32df8859ac9cef991858df4fc0bba":"/packs/reticle-7d7ce959271e5ff1193fb32cff90ea56.png","8523aa7b16b029770170cc12026e7c7d172d626d":"/packs/elephant_ui_plane-e3f2d57c12c376e189c274cbe81af8dd.svg","027d2ab934afd67b404426234750c08b516ec223":"/packs/elephant-fren-d16fd77f9a9387e7d146b5f9d4dc1e7f.png","2523b7002bda93c12af3b4b7f4d7a35fd52faf41":"/packs/elephant_ui_disappointed-8864342480c3612e3061702851d3a798.svg","2dace1e38e0d159660c56d838ad2ce22c0184661":"/packs/elephant_ui_greeting-475430963d0b00fe82b07b17857ebf6c.svg","42a8fc2f0526540979583534ec331a2d28d2575e":"/packs/elephant_ui_working-2e653cc278c2ac871c23aeb10de1c0e2.svg","22fac75a796b2bd2c6872cbd8d14bd325b00bb64":"/packs/icon_cached-108e30d96e1d5152be7fe2978bcdfe14.svg","e9cea6fd6e8034f60e0358a15956490831c66b03":"/packs/icon_done-dba357bfbba455428787fefc655ce120.svg","17604ec5d343bc1aee070a2197dae8fd78bdccef":"/packs/icon_email-1346985c7aaceb601b0d4257133254f4.svg","e4a88b85b09c072041e89acaa22ec362ece97f27":"/packs/icon_file_download-4b5c054e76b0df3cbbc851854cd10c3c.svg","75a26256446662fb331fd42b9849dfff235364d5":"/packs/icon_grade-8e81b8e88c2b5834347a2a226c65d440.svg","7a534f4811adb70a796a285fb70b93c87a9f4b94":"/packs/icon_lock_open-c9627928caaaa505ac7de2a64bd065ec.svg","08ef53f9228b3d24f2801ba942fc842599c39e34":"/packs/icon_person_add-5c56ef10b9e99e77a44d89041f4b77b5.svg","ad9a0479341f3a93a83c7cadab091569e459076c":"/packs/icon_reply-b5e28e1fe6acd4ec003e643e947f1c4a.svg","aa75bce521938954706802c15e393ea05663e5e0":"/packs/logo-fe5141d38a25f50068b4c69b77ca1ec8.svg","f573db9e5698b7a3541880875c3ce88fe03ebee2":"/packs/logo_alt-6090911445f54a587465e41da77a6969.svg","3b339fcffc64574bca7cd2521e25bfbea8c3cbbf":"/packs/logo_full-96e7a97fe469f75a23a74852b2478fa3.svg","12520e03b958c73d94a1f19644ca4d0b79c6505d":"/packs/logo_transparent-6900bab180aa3a46c34425e5367a218f.svg","dc0b5a8d2d7e67f84d37635137610c6c6d937058":"/packs/icon_cached-98a757f1d9e93652742be43c22f46287.png","58f810df15baa9109f9db7f800e31c0d011e6f0d":"/packs/icon_done-12b87c12f915597dccbd2ca4d7167ba4.png","828ed8086eacb6622609e9992950998ce0a1579b":"/packs/icon_email-738c89662d6640f5e6539151023d049a.png","c60492c5ceea92a0acb138f20e0a33dd1e553f6b":"/packs/icon_file_download-e5c29678f3a639e1e62374911d85e1d0.png","b60349291b7d31e9aa78b94aed0f6ce07171096f":"/packs/icon_grade-3ec67253b37908d2ab783f7225f20682.png","d80b4dd1135df4803cddc1c1f6646dd7fc601367":"/packs/icon_lock_open-0bfd71a52eb3f34934edd59088b559fb.png","3f2c7f54c1073569de3a7312fb9a055723f68898":"/packs/icon_person_add-e2c6b660f6e1c95785d8d2bfa7a823af.png","f7717ae34919e3c88a668b5d9426b5fdc868b0de":"/packs/icon_reply-4f6ada7a0b886b084706a484753a0ff0.png","ee2ae924bf02960749696f2c66890780ca321924":"/packs/logo_full-5c51cffe1fcb8225ae02400d6a7e7077.png","2a2ed7e6889f11e00656cb952d0704f762bf05ea":"/packs/logo_transparent-6f79eeb2c38ec2d12ed4d978322457d6.png","361cf83e570038228710feb587738d6b74308e26":"/packs/preview-9a17d32fc48369e8ccd910a75260e67d.jpg","5d4a359e92bd0db85142ef5d2032f978299fd931":"/packs/base_polyfills.js","7d08663792b58ef04a228b1b914a6533c1dad89c":"/packs/extra_polyfills.js","43ff472978310fae521c1442e7a83c35f7718526":"/packs/features/compose.js","a599e27be978462b0d5c44d97a4e69f0835a5b9b":"/packs/modals/onboarding_modal.js","27e8cc1e196a017efe4e3f18e5c7fa0ac2f822b6":"/packs/emoji_picker.js","9735fe27a4fff92fdf2ff2daab01664c6a01ea9c":"/packs/features/notifications.js","25000ed648d48e8f63b24b4517d5c30cc19f692c":"/packs/features/account_timeline.js","aa8f81e9de6d31c7475d8af56dcddefbb21e6d1b":"/packs/features/home_timeline.js","629d72621f5ea602e6aac484aa517d907a1704c9":"/packs/features/public_timeline.js","d5dd37bcf53ff8d632e3d75ae754d7ca8b70382a":"/packs/features/community_timeline.js","c3c4aef1c595d5d0dda3932ad3f6f5d09b81f21c":"/packs/features/favourited_statuses.js","3bfe61af0efd8baea67c3040aafcd5e915ec9264":"/packs/features/list_timeline.js","60009a6e220403c393f6b6c3ff15896d3386aaa9":"/packs/features/following.js","e2c609410d3d5af59831bf449a5524c6f4e11899":"/packs/features/followers.js","d5802f65587d3d9853f2102fc8d8ca503f323841":"/packs/features/hashtag_timeline.js","a1408df611d9352c112f758918e60dfea6fe5ef5":"/packs/features/status.js","e8fb6f14711bb5fb901f095d35489a2b8b3cc19c":"/packs/features/account_gallery.js","1a3f765e8badc38183ff6bbc3f4adde4306a4f7c":"/packs/features/blocks.js","11d0072a456c1d611798cbab2d5c1f77774e348e":"/packs/features/follow_requests.js","bbd300034c982135068bc0351255f5d53314b966":"/packs/features/reblogs.js","37473f955a099e92a65b62c4058c052bb1fddb8b":"/packs/features/favourites.js","819eeccce151a15ddd3698a6bb9d1db322409cb3":"/packs/features/getting_started.js","97d7197bee456cdbfa72ea59a127bf39ec4a5c4b":"/packs/features/keyboard_shortcuts.js","dfb831d7f4ef1a5e42a5e0da5079976e62854e73":"/packs/features/generic_not_found.js","bbdf2b7959500499bb1dfa7ebbdf491655f43b80":"/packs/features/list_editor.js","2c17d7d23aee17b52923f613267d055405502aea":"/packs/status/media_gallery.js","3f24044d94d1fb56d83491052723533d47c8980d":"/packs/share.js","e0a89e86ef5d9a7e78e45108d4b75e86da15b381":"/packs/application.js","c702e61b3ea0793ecc4366d076b7349bb1518b69":"/packs/about.js","44d05906d49cc88f9409473aaaf26b906f5b6892":"/packs/public.js","da3993d9f3408a1ab3dad4f7bdf02dc8da425dc3":"/packs/locale_zh-TW.js","069445f3f8b3ea9cd71eb12a87c6915f3e46989b":"/packs/locale_zh-HK.js","92a7e6c208910f5214444dc91aa27360c4c77f6d":"/packs/locale_zh-CN.js","a49b1cb687c9db73b917a9d927cafd1b1c3870ec":"/packs/locale_uk.js","1b34cb16a8c2d6eee4d4fc86dd2edd8a93c8a0a6":"/packs/locale_tr.js","cc1753b364aa7390dedc29504398e1fd8c23d8c6":"/packs/locale_th.js","8a22093161c324516acce1bd00c3ba5ac6c8b8f1":"/packs/locale_sv.js","08cb0789a22b4a4859ae4590a59fbbd4c628026e":"/packs/locale_sr.js","a3481ef4cecce5754d600e326c3dc33c12a0c001":"/packs/locale_sr-Latn.js","f66480cc039a99821ebc4dc26fca8ec4b3195556":"/packs/locale_sk.js","4f10c28c894e6b17b6f989e6e34899d2d497ab1e":"/packs/locale_ru.js","189eaf61b7a833d1222beae1fcf08660a97081bb":"/packs/locale_pt.js","3ed6633be74d664e812cf167d0b79237b346b8eb":"/packs/locale_pt-BR.js","e2d206b98ccf9e3578c7cda7bd491e11a36bd9a7":"/packs/locale_pl.js","f95a47f22fe522ea9f19aea427eccdb92d668463":"/packs/locale_oc.js","f3a63e3a9b667af7b8aae6677cca9cd5fa544450":"/packs/locale_no.js","1617607a224891aca21dbd955f1d8d748073553c":"/packs/locale_nl.js","15fdc87c04677827cf62f023e93dbe704b14ffe6":"/packs/locale_ko.js","7263a0c443b06193d76974cfd530db11137cc814":"/packs/locale_ja.js","24efd78e64e34023d7fccc6ed6f9e4c9317f606d":"/packs/locale_it.js","eef1fb80c7e2d7d9d9a53fc2d2ab42c49e090973":"/packs/locale_io.js","668463bcf41ce8971dfc2e03b4760a5769608f9d":"/packs/locale_id.js","546038783532ad3a0a3d64c4f9fdec0fe274cb1b":"/packs/locale_hy.js","dcacf3d9c920b82b61e1c5c1e530b4cd89bf86d6":"/packs/locale_hu.js","e6ea9a0c39af19c23dd268dfa42d02f3ef6f5286":"/packs/locale_hr.js","d6f92ff2dc28b2b129db3b70a50916f429363d16":"/packs/locale_he.js","223fb275136e05f90330126a6c36a053c4105212":"/packs/locale_gl.js","ab248c91990e6585e9c845400e78a87023c2fc66":"/packs/locale_fr.js","5edfbae7843ae0deb08e842365e6b969c8e4319e":"/packs/locale_fi.js","234deb4354ef553db8947ac96e2ceecd187570dd":"/packs/locale_fa.js","8eef75454b123fa84bcbd897bb0b76c8023b57c8":"/packs/locale_es.js","e0fd3a1f37cc3ea0d40755e0847ef91a50adf313":"/packs/locale_eo.js","76bf1c955e254301d6271e4a2d1b712d7544b2ef":"/packs/locale_en.js","36c9261b7bf3d23c4a7fe7da776a3f7c73f4cb24":"/packs/locale_de.js","c94a8f32ae92263346a0087c0de7b229d24b5c31":"/packs/locale_ca.js","60d0bb13db45157614defb53ea18733d1d2bfa02":"/packs/locale_bg.js","c7feb7e93d36072925660142802091c491b02e5c":"/packs/locale_ar.js","9c5b75dcad12d553d953dfa71e4a3913600ddd80":"/packs/mailer.js","bccfc356ca0d67eb35b045cd313996454ba2e9d5":"/packs/default.js","a216f9aa7a4fb009a2e0fccdb2d0e09b9c7e3368":"/packs/admin.js","b35564c272704e8c31ba5c730f1f536e24dab1f8":"/packs/common.js","63d5949a7f9065ed25c771b22883444dc420be1d":"/packs/common.css","2a742852e4241f6de4f33884bf01731c08a3851d":"/packs/mailer.css","b16bfa7a55ba0ecfd3c91f84f587f8875a238634":"/packs/default.css","0663f076d7e4cce086fbebc8b2aa66d29e1123d9":"/packs/manifest.json"},"strategy":"changed","responseStrategy":"cache-first","version":"2018-4-1 11:28:19","name":"webpack-offline:mastodon","pluginVersion":"4.8.4","relativePaths":false};
3 /******/ (function(modules
) { // webpackBootstrap
4 /******/ // The module cache
5 /******/ var installedModules
= {};
7 /******/ // The require function
8 /******/ function __webpack_require__(moduleId
) {
10 /******/ // Check if module is in cache
11 /******/ if(installedModules
[moduleId
]) {
12 /******/ return installedModules
[moduleId
].exports
;
14 /******/ // Create a new module (and put it into the cache)
15 /******/ var module
= installedModules
[moduleId
] = {
21 /******/ // Execute the module function
22 /******/ modules
[moduleId
].call(module
.exports
, module
, module
.exports
, __webpack_require__
);
24 /******/ // Flag the module as loaded
25 /******/ module
.l
= true;
27 /******/ // Return the exports of the module
28 /******/ return module
.exports
;
32 /******/ // expose the modules object (__webpack_modules__)
33 /******/ __webpack_require__
.m
= modules
;
35 /******/ // expose the module cache
36 /******/ __webpack_require__
.c
= installedModules
;
38 /******/ // define getter function for harmony exports
39 /******/ __webpack_require__
.d = function(exports
, name
, getter
) {
40 /******/ if(!__webpack_require__
.o(exports
, name
)) {
41 /******/ Object
.defineProperty(exports
, name
, {
42 /******/ configurable: false,
43 /******/ enumerable: true,
49 /******/ // getDefaultExport function for compatibility with non-harmony modules
50 /******/ __webpack_require__
.n = function(module
) {
51 /******/ var getter
= module
&& module
.__esModule
?
52 /******/ function getDefault() { return module
['default']; } :
53 /******/ function getModuleExports() { return module
; };
54 /******/ __webpack_require__
.d(getter
, 'a', getter
);
55 /******/ return getter
;
58 /******/ // Object.prototype.hasOwnProperty.call
59 /******/ __webpack_require__
.o = function(object
, property
) { return Object
.prototype.hasOwnProperty
.call(object
, property
); };
61 /******/ // __webpack_public_path__
62 /******/ __webpack_require__
.p
= "/packs/";
64 /******/ // Load entry module and return exports
65 /******/ return __webpack_require__(__webpack_require__
.s
= 0);
67 /************************************************************************/
70 /***/ (function(module
, exports
, __webpack_require__
) {
76 var waitUntil
= ExtendableEvent
.prototype.waitUntil
;
77 var respondWith
= FetchEvent
.prototype.respondWith
;
78 var promisesMap
= new WeakMap();
80 ExtendableEvent
.prototype.waitUntil = function (promise
) {
81 var extendableEvent
= this;
82 var promises
= promisesMap
.get(extendableEvent
);
85 promises
.push(Promise
.resolve(promise
));
89 promises
= [Promise
.resolve(promise
)];
90 promisesMap
.set(extendableEvent
, promises
);
92 // call original method
93 return waitUntil
.call(extendableEvent
, Promise
.resolve().then(function processPromises() {
94 var len
= promises
.length
;
96 // wait for all to settle
97 return Promise
.all(promises
.map(function (p
) {
98 return p
["catch"](function () {});
99 })).then(function () {
100 // have new items been added? If so, wait again
101 if (promises
.length
!= len
) return processPromises();
103 promisesMap
["delete"](extendableEvent
);
104 // reject if one of the promises rejected
105 return Promise
.all(promises
);
110 FetchEvent
.prototype.respondWith = function (promise
) {
111 this.waitUntil(promise
);
112 return respondWith
.call(this, promise
);
117 if (typeof DEBUG
=== 'undefined') {
121 function WebpackServiceWorker(params
, helpers
) {
122 var loaders
= helpers
.loaders
;
123 var cacheMaps
= helpers
.cacheMaps
;
125 var strategy
= params
.strategy
;
126 var responseStrategy
= params
.responseStrategy
;
128 var assets
= params
.assets
;
129 var loadersMap
= params
.loaders
|| {};
131 var hashesMap
= params
.hashesMap
;
132 var externals
= params
.externals
;
135 // const alwaysRevalidate = params.alwaysRevalidate;
136 // const ignoreSearch = params.ignoreSearch;
137 // const preferOnline = params.preferOnline;
139 var CACHE_PREFIX
= params
.name
;
140 var CACHE_TAG
= params
.version
;
141 var CACHE_NAME
= CACHE_PREFIX
+ ':' + CACHE_TAG
;
143 var STORED_DATA_KEY
= '__offline_webpack__data';
147 var allAssets
= [].concat(assets
.main
, assets
.additional
, assets
.optional
);
148 var navigateFallbackURL
= params
.navigateFallbackURL
;
149 var navigateFallbackForRedirects
= params
.navigateFallbackForRedirects
;
151 self
.addEventListener('install', function (event
) {
152 console
.log('[SW]:', 'Install event');
154 var installing
= undefined;
156 if (strategy
=== 'changed') {
157 installing
= cacheChanged('main');
159 installing
= cacheAssets('main');
162 event
.waitUntil(installing
);
165 self
.addEventListener('activate', function (event
) {
166 console
.log('[SW]:', 'Activate event');
168 var activation
= cacheAdditional();
170 // Delete all assets which name starts with CACHE_PREFIX and
171 // is not current cache (CACHE_NAME)
172 activation
= activation
.then(storeCacheData
);
173 activation
= activation
.then(deleteObsolete
);
174 activation
= activation
.then(function () {
175 if (self
.clients
&& self
.clients
.claim
) {
176 return self
.clients
.claim();
180 event
.waitUntil(activation
);
183 function cacheAdditional() {
184 if (!assets
.additional
.length
) {
185 return Promise
.resolve();
189 console
.log('[SW]:', 'Caching additional');
192 var operation
= undefined;
194 if (strategy
=== 'changed') {
195 operation
= cacheChanged('additional');
197 operation
= cacheAssets('additional');
200 // Ignore fail of `additional` cache section
201 return operation
['catch'](function (e
) {
202 console
.error('[SW]:', 'Cache section `additional` failed to load');
206 function cacheAssets(section
) {
207 var batch
= assets
[section
];
209 return caches
.open(CACHE_NAME
).then(function (cache
) {
210 return addAllNormalized(cache
, batch
, {
211 bust: params
.version
,
212 request: params
.prefetchRequest
214 }).then(function () {
215 logGroup('Cached assets: ' + section
, batch
);
216 })['catch'](function (e
) {
222 function cacheChanged(section
) {
223 return getLastCache().then(function (args
) {
225 return cacheAssets(section
);
228 var lastCache
= args
[0];
229 var lastKeys
= args
[1];
230 var lastData
= args
[2];
232 var lastMap
= lastData
.hashmap
;
233 var lastVersion
= lastData
.version
;
235 if (!lastData
.hashmap
|| lastVersion
=== params
.version
) {
236 return cacheAssets(section
);
239 var lastHashedAssets
= Object
.keys(lastMap
).map(function (hash
) {
240 return lastMap
[hash
];
243 var lastUrls
= lastKeys
.map(function (req
) {
244 var url
= new URL(req
.url
);
248 return url
.toString();
251 var sectionAssets
= assets
[section
];
253 var changed
= sectionAssets
.filter(function (url
) {
254 if (lastUrls
.indexOf(url
) === -1 || lastHashedAssets
.indexOf(url
) === -1) {
261 Object
.keys(hashesMap
).forEach(function (hash
) {
262 var asset
= hashesMap
[hash
];
264 // Return if not in sectionAssets or in changed or moved array
265 if (sectionAssets
.indexOf(asset
) === -1 || changed
.indexOf(asset
) !== -1 || moved
.indexOf(asset
) !== -1) return;
267 var lastAsset
= lastMap
[hash
];
269 if (lastAsset
&& lastUrls
.indexOf(lastAsset
) !== -1) {
270 moved
.push([lastAsset
, asset
]);
276 logGroup('Changed assets: ' + section
, changed
);
277 logGroup('Moved assets: ' + section
, moved
);
279 var movedResponses
= Promise
.all(moved
.map(function (pair
) {
280 return lastCache
.match(pair
[0]).then(function (response
) {
281 return [pair
[1], response
];
285 return caches
.open(CACHE_NAME
).then(function (cache
) {
286 var move = movedResponses
.then(function (responses
) {
287 return Promise
.all(responses
.map(function (pair
) {
288 return cache
.put(pair
[0], pair
[1]);
292 return Promise
.all([move, addAllNormalized(cache
, changed
, {
293 bust: params
.version
,
294 request: params
.prefetchRequest
300 function deleteObsolete() {
301 return caches
.keys().then(function (keys
) {
302 var all
= keys
.map(function (key
) {
303 if (key
.indexOf(CACHE_PREFIX
) !== 0 || key
.indexOf(CACHE_NAME
) === 0) return;
305 console
.log('[SW]:', 'Delete cache:', key
);
306 return caches
['delete'](key
);
309 return Promise
.all(all
);
313 function getLastCache() {
314 return caches
.keys().then(function (keys
) {
315 var index
= keys
.length
;
321 if (key
.indexOf(CACHE_PREFIX
) === 0) {
328 var cache
= undefined;
330 return caches
.open(key
).then(function (_cache
) {
332 return _cache
.match(new URL(STORED_DATA_KEY
, location
).toString());
333 }).then(function (response
) {
334 if (!response
) return;
336 return Promise
.all([cache
, cache
.keys(), response
.json()]);
341 function storeCacheData() {
342 return caches
.open(CACHE_NAME
).then(function (cache
) {
343 var data
= new Response(JSON
.stringify({
344 version: params
.version
,
348 return cache
.put(new URL(STORED_DATA_KEY
, location
).toString(), data
);
352 self
.addEventListener('fetch', function (event
) {
353 var url
= new URL(event
.request
.url
);
356 var urlString
= url
.toString();
358 // Not external, so search part of the URL should be stripped,
359 // if it's external URL, the search part should be kept
360 if (externals
.indexOf(urlString
) === -1) {
362 urlString
= url
.toString();
365 // Handle only GET requests
366 var isGET
= event
.request
.method
=== 'GET';
367 var assetMatches
= allAssets
.indexOf(urlString
) !== -1;
368 var cacheUrl
= urlString
;
371 var cacheRewrite
= matchCacheMap(event
.request
);
374 cacheUrl
= cacheRewrite
;
379 if (!assetMatches
&& isGET
) {
380 // If isn't a cached asset and is a navigation request,
381 // fallback to navigateFallbackURL if available
382 if (navigateFallbackURL
&& isNavigateRequest(event
.request
)) {
383 event
.respondWith(handleNavigateFallback(fetch(event
.request
)));
389 if (!assetMatches
|| !isGET
) {
390 // Fix for https://twitter.com/wanderview/status/696819243262873600
391 if (url
.origin
!== location
.origin
&& navigator
.userAgent
.indexOf('Firefox/44.') !== -1) {
392 event
.respondWith(fetch(event
.request
));
398 // Logic of caching / fetching is here
399 // * urlString -- url to match from the CACHE_NAME
400 // * event.request -- original Request to perform fetch() if necessary
401 var resource
= undefined;
403 if (responseStrategy
=== 'network-first') {
404 resource
= networkFirstResponse(event
, urlString
, cacheUrl
);
407 // (responseStrategy has been validated before)
409 resource
= cacheFirstResponse(event
, urlString
, cacheUrl
);
412 if (navigateFallbackURL
&& isNavigateRequest(event
.request
)) {
413 resource
= handleNavigateFallback(resource
);
416 event
.respondWith(resource
);
419 self
.addEventListener('message', function (e
) {
423 switch (data
.action
) {
426 if (self
.skipWaiting
) self
.skipWaiting();
431 function cacheFirstResponse(event
, urlString
, cacheUrl
) {
432 return cachesMatch(cacheUrl
, CACHE_NAME
).then(function (response
) {
435 console
.log('[SW]:', 'URL [' + cacheUrl
+ '](' + urlString
+ ') from cache');
441 // Load and cache known assets
442 var fetching
= fetch(event
.request
).then(function (response
) {
445 console
.log('[SW]:', 'URL [' + urlString
+ '] wrong response: [' + response
.status
+ '] ' + response
.type
);
452 console
.log('[SW]:', 'URL [' + urlString
+ '] from network');
455 if (cacheUrl
=== urlString
) {
457 var responseClone
= response
.clone();
458 var storing
= caches
.open(CACHE_NAME
).then(function (cache
) {
459 return cache
.put(urlString
, responseClone
);
460 }).then(function () {
461 console
.log('[SW]:', 'Cache asset: ' + urlString
);
464 event
.waitUntil(storing
);
475 function networkFirstResponse(event
, urlString
, cacheUrl
) {
476 return fetch(event
.request
).then(function (response
) {
479 console
.log('[SW]:', 'URL [' + urlString
+ '] from network');
485 // Throw to reach the code in the catch below
486 throw new Error('Response is not ok');
488 // This needs to be in a catch() and not just in the then() above
489 // cause if your network is down, the fetch() will throw
490 ['catch'](function () {
492 console
.log('[SW]:', 'URL [' + urlString
+ '] from cache if possible');
495 return cachesMatch(cacheUrl
, CACHE_NAME
);
499 function handleNavigateFallback(fetching
) {
500 return fetching
['catch'](function () {}).then(function (response
) {
501 var isOk
= response
&& response
.ok
;
502 var isRedirect
= response
&& response
.type
=== 'opaqueredirect';
504 if (isOk
|| isRedirect
&& !navigateFallbackForRedirects
) {
509 console
.log('[SW]:', 'Loading navigation fallback [' + navigateFallbackURL
+ '] from cache');
512 return cachesMatch(navigateFallbackURL
, CACHE_NAME
);
516 function mapAssets() {
517 Object
.keys(assets
).forEach(function (key
) {
518 assets
[key
] = assets
[key
].map(function (path
) {
519 var url
= new URL(path
, location
);
523 if (externals
.indexOf(path
) === -1) {
527 return url
.toString();
531 Object
.keys(loadersMap
).forEach(function (key
) {
532 loadersMap
[key
] = loadersMap
[key
].map(function (path
) {
533 var url
= new URL(path
, location
);
537 if (externals
.indexOf(path
) === -1) {
541 return url
.toString();
545 hashesMap
= Object
.keys(hashesMap
).reduce(function (result
, hash
) {
546 var url
= new URL(hashesMap
[hash
], location
);
550 result
[hash
] = url
.toString();
554 externals
= externals
.map(function (path
) {
555 var url
= new URL(path
, location
);
558 return url
.toString();
562 function addAllNormalized(cache
, requests
, options
) {
563 var allowLoaders
= options
.allowLoaders
!== false;
564 var bustValue
= options
&& options
.bust
;
565 var requestInit
= options
.request
|| {
570 return Promise
.all(requests
.map(function (request
) {
572 request
= applyCacheBust(request
, bustValue
);
575 return fetch(request
, requestInit
).then(fixRedirectedResponse
);
576 })).then(function (responses
) {
577 if (responses
.some(function (response
) {
580 return Promise
.reject(new Error('Wrong response status'));
584 var addAll
= responses
.map(function (response
, i
) {
586 extracted
.push(extractAssetsWithLoaders(requests
[i
], response
));
589 return cache
.put(requests
[i
], response
);
592 if (extracted
.length
) {
594 var newOptions
= copyObject(options
);
595 newOptions
.allowLoaders
= false;
597 var waitAll
= addAll
;
599 addAll
= Promise
.all(extracted
).then(function (all
) {
600 var extractedRequests
= [].concat
.apply([], all
);
602 if (requests
.length
) {
603 waitAll
= waitAll
.concat(addAllNormalized(cache
, extractedRequests
, newOptions
));
606 return Promise
.all(waitAll
);
610 addAll
= Promise
.all(addAll
);
617 function extractAssetsWithLoaders(request
, response
) {
618 var all
= Object
.keys(loadersMap
).map(function (key
) {
619 var loader
= loadersMap
[key
];
621 if (loader
.indexOf(request
) !== -1 && loaders
[key
]) {
622 return loaders
[key
](response
.clone());
624 }).filter(function (a
) {
628 return Promise
.all(all
).then(function (all
) {
629 return [].concat
.apply([], all
);
633 function matchCacheMap(request
) {
634 var urlString
= request
.url
;
635 var url
= new URL(urlString
);
637 var requestType
= undefined;
639 if (request
.mode
=== 'navigate') {
640 requestType
= 'navigate';
641 } else if (url
.origin
=== location
.origin
) {
642 requestType
= 'same-origin';
644 requestType
= 'cross-origin';
647 for (var i
= 0; i
< cacheMaps
.length
; i
++) {
648 var map
= cacheMaps
[i
];
651 if (map
.requestTypes
&& map
.requestTypes
.indexOf(requestType
) === -1) {
655 var newString
= undefined;
657 if (typeof map
.match
=== 'function') {
658 newString
= map
.match(url
, request
);
660 newString
= urlString
.replace(map
.match
, map
.to
);
663 if (newString
&& newString
!== urlString
) {
670 function cachesMatch(request
, cacheName
) {
671 return caches
.match(request
, {
673 }).then(function (response
) {
674 if (isNotRedirectedResponse()) {
678 // Fix already cached redirected responses
679 return fixRedirectedResponse(response
).then(function (fixedResponse
) {
680 return caches
.open(cacheName
).then(function (cache
) {
681 return cache
.put(request
, fixedResponse
);
682 }).then(function () {
683 return fixedResponse
;
687 // Return void if error happened (cache not found)
688 ['catch'](function () {});
691 function applyCacheBust(asset
, key
) {
692 var hasQuery
= asset
.indexOf('?') !== -1;
693 return asset
+ (hasQuery
? '&' : '?') + '__uncache=' + encodeURIComponent(key
);
696 function getClientsURLs() {
698 return Promise
.resolve([]);
701 return self
.clients
.matchAll({
702 includeUncontrolled: true
703 }).then(function (clients
) {
704 if (!clients
.length
) return [];
708 clients
.forEach(function (client
) {
709 var url
= new URL(client
.url
);
712 var urlString
= url
.toString();
714 if (!result
.length
|| result
.indexOf(urlString
) === -1) {
715 result
.push(urlString
);
723 function isNavigateRequest(request
) {
724 return request
.mode
=== 'navigate' || request
.headers
.get('Upgrade-Insecure-Requests') || (request
.headers
.get('Accept') || '').indexOf('text/html') !== -1;
727 function isNotRedirectedResponse(response
) {
728 return !response
|| !response
.redirected
|| !response
.ok
|| response
.type
=== 'opaqueredirect';
731 // Based on https://github.com/GoogleChrome/sw-precache/pull/241/files#diff-3ee9060dc7a312c6a822cac63a8c630bR85
732 function fixRedirectedResponse(response
) {
733 if (isNotRedirectedResponse(response
)) {
734 return Promise
.resolve(response
);
737 var body
= 'body' in response
? Promise
.resolve(response
.body
) : response
.blob();
739 return body
.then(function (data
) {
740 return new Response(data
, {
741 headers: response
.headers
,
742 status: response
.status
747 function copyObject(original
) {
748 return Object
.keys(original
).reduce(function (result
, key
) {
749 result
[key
] = original
[key
];
754 function logGroup(title
, assets
) {
755 console
.groupCollapsed('[SW]:', title
);
757 assets
.forEach(function (asset
) {
758 console
.log('Asset:', asset
);
763 WebpackServiceWorker(__wpo
, {
767 module
.exports
= __webpack_require__(1)
772 /***/ (function(module
, __webpack_exports__
, __webpack_require__
) {
775 Object
.defineProperty(__webpack_exports__
, "__esModule", { value: true });
776 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__web_push_notifications__
= __webpack_require__(2);
777 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__web_push_notifications___default
= __webpack_require__
.n(__WEBPACK_IMPORTED_MODULE_0__web_push_notifications__
);
778 /*** IMPORTS FROM imports-loader ***/
779 var process
= (process
|| {});
780 process
.env
= {"GJS_DEBUG_TOPICS":"JS ERROR;JS LOG","npm_config_cache_lock_stale":"60000","npm_config_ham_it_up":"","npm_package_dependencies_mark_loader":"^0.1.6","npm_config_legacy_bundling":"","npm_config_sign_git_tag":"","USER":"howl","LANGUAGE":"en_GB:en","npm_package_dependencies_autoprefixer":"^7.1.6","npm_package_dependencies_mkdirp":"^0.5.1","npm_package_dependencies_node_sass":"^4.7.2","npm_package_devDependencies_jest":"^21.2.1","npm_config_user_agent":"npm/5.6.0 node/v9.10.1 linux x64","npm_config_always_auth":"","COMP_WORDBREAKS":" \t\n\"'><;|&(:","XDG_SEAT":"seat0","npm_package_dependencies_detect_passive_events":"^1.0.2","npm_package_dependencies_immutable":"^3.8.2","npm_package_bugs_url":"https://github.com/tootsuite/mastodon/issues","npm_config_bin_links":"true","npm_config_key":"","SSH_AGENT_PID":"1323","XDG_SESSION_TYPE":"x11","npm_package_dependencies_react_overlays":"^0.8.3","npm_config_allow_same_version":"","npm_config_description":"true","npm_config_fetch_retries":"2","npm_config_heading":"npm","npm_config_if_present":"","npm_config_init_version":"1.0.0","npm_config_user":"","npm_node_execpath":"/usr/bin/node","LD_LIBRARY_PATH":"/home/howl/torch-cl/install/lib:","LUA_PATH":"/home/howl/.luarocks/share/lua/5.1/?.lua;/home/howl/.luarocks/share/lua/5.1/?/init.lua;/home/howl/torch-cl/install/share/lua/5.1/?.lua;/home/howl/torch-cl/install/share/lua/5.1/?/init.lua;./?.lua;/home/howl/torch-cl/install/share/luajit-2.1.0-beta1/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua","SHLVL":"1","npm_package_scripts_manage_translations":"node ./config/webpack/translationRunner.js","npm_package_dependencies_babel_plugin_transform_class_properties":"^6.24.1","npm_package_dependencies_babel_plugin_transform_es2015_modules_commonjs":"^6.24.1","npm_package_dependencies_escape_html":"^1.0.3","npm_package_dependencies_imports_loader":"^0.8.0","npm_package_optionalDependencies_node_zopfli":"^2.0.2","npm_config_prefer_online":"","OLDPWD":"/home/howl/oc/mastofe/app","HOME":"/home/howl","npm_package_dependencies_postcss_loader":"^2.0.9","npm_config_force":"","OSU_API_KEY":"e0146ddaf01d1e9d107afedcd340b42347186260","DESKTOP_SESSION":"cinnamon","npm_package_dependencies_react_redux_loading_bar":"^2.9.3","npm_package_dependencies_redis":"^2.7.1","npm_config_only":"","npm_config_read_only":"","GIO_LAUNCHED_DESKTOP_FILE":"/usr/share/applications/xfce4-terminal.desktop","npm_package_engines_node":">=6","npm_package_dependencies_babel_plugin_react_intl":"^2.3.1","npm_package_dependencies_npmlog":"^4.1.2","npm_package_devDependencies_enzyme_adapter_react_16":"^1.1.0","npm_config_cache_min":"10","npm_config_init_license":"ISC","GTK_MODULES":"gail:atk-bridge","XDG_SEAT_PATH":"/org/freedesktop/DisplayManager/Seat0","npm_package_scripts_build_production":"cross-env NODE_ENV=production webpack --config config/webpack/production.js","npm_package_dependencies_glob":"^7.1.1","npm_package_dependencies_webpack_merge":"^4.1.1","npm_config_editor":"vi","npm_config_rollback":"true","npm_config_tag_version_prefix":"v","OSU_PASSWORD":"il mio cane gioca meglio di me","npm_package_dependencies_redux_thunk":"^2.2.0","npm_package_dependencies_webpack":"^3.9.1","npm_config_cache_max":"Infinity","npm_config_timing":"","npm_config_userconfig":"/home/howl/.npmrc","DBUS_SESSION_BUS_ADDRESS":"unix:path=/run/user/1000/bus","CINNAMON_VERSION":"3.6.7","npm_package_dependencies_babel_plugin_lodash":"^3.3.2","npm_package_dependencies_dotenv":"^4.0.0","npm_package_dependencies_precss":"^2.0.0","npm_package_dependencies_react_hotkeys":"^0.10.0","npm_config_engine_strict":"","npm_config_init_author_name":"","npm_config_init_author_url":"","npm_config_tmp":"/tmp","COLORTERM":"truecolor","GIO_LAUNCHED_DESKTOP_FILE_PID":"1943","npm_package_dependencies_react_router_dom":"^4.1.1","npm_package_description":"Here is a fork of mastodon. We could really just remove all of the code except for the frontend, but to easily pull the upstream repo we'll just keep everything. This is my fork for the moment with the idea of making the mastofe just as polished as the pleromafe. If you want to get access, open an issue or hit me up at howl@social.zxq.co.","npm_config_depth":"Infinity","npm_config_package_lock_only":"","npm_config_save_dev":"","npm_config_usage":"","npm_package_scripts_test_jest":"cross-env NODE_ENV=test jest --coverage","npm_package_dependencies_throng":"^4.0.0","npm_package_devDependencies_react_intl_translations_manager":"^5.0.0","npm_package_readmeFilename":"README.md","npm_package_homepage":"https://github.com/tootsuite/mastodon#readme","npm_config_metrics_registry":"https://registry.npmjs.org/","npm_config_cafile":"","npm_config_otp":"","npm_config_package_lock":"true","npm_config_progress":"true","npm_config_https_proxy":"","npm_config_save_prod":"","QT_QPA_PLATFORMTHEME":"gtk2","npm_package_scripts_dev":"cross-env NODE_ENV=development webpack-dev-server --config config/webpack/development.js --progress --color","npm_package_scripts_test_lint":"eslint -c .eslintrc.yml --ext=js app/javascript/ config/webpack/ streaming/","npm_package_dependencies_babel_plugin_transform_react_remove_prop_types":"^0.4.10","npm_package_dependencies_websocket_js":"^0.1.12","npm_config_cidr":"","npm_config_onload_script":"","npm_config_sso_type":"oauth","LOGNAME":"howl","npm_package_dependencies_babel_plugin_syntax_dynamic_import":"^6.18.0","npm_package_dependencies_hammerjs":"^2.0.8","npm_package_dependencies_rails_ujs":"^5.1.2","npm_package_dependencies_react_immutable_pure_component":"^1.1.1","npm_package_dependencies_react_motion":"^0.5.2","npm_package_dependencies_reselect":"^3.0.1","npm_package_devDependencies_eslint_plugin_import":"^2.8.0","npm_config_rebuild_bundle":"true","npm_config_save_bundle":"","npm_config_shell":"/bin/bash","WINDOWID":"77594627","_":"./build.sh","npm_package_private":"true","npm_package_dependencies_express":"^4.16.2","npm_package_dependencies_react_notification":"^6.8.2","npm_package_dependencies_sass_loader":"^6.0.6","npm_config_dry_run":"","npm_config_prefix":"/usr","npm_config_scope":"","npm_config_browser":"","npm_config_cache_lock_wait":"10000","npm_config_ignore_prepublish":"","npm_config_registry":"https://registry.npmjs.org/","npm_config_save_optional":"","npm_config_searchopts":"","npm_config_versions":"","GTK_OVERLAY_SCROLLING":"0","XDG_SESSION_ID":"2","TERM":"xterm-256color","npm_package_dependencies_font_awesome":"^4.7.0","npm_package_dependencies_postcss_object_fit_images":"^1.1.2","npm_package_dependencies_react_immutable_proptypes":"^2.1.0","npm_package_dependencies_style_loader":"^0.19.0","npm_package_dependencies_uws":"^8.14.0","npm_package_optionalDependencies_fsevents":"*","npm_config_cache":"/home/howl/.npm","npm_config_proxy":"","npm_config_send_metrics":"","GNOME_DESKTOP_SESSION_ID":"this-is-deprecated","npm_package_scripts_start":"node ./streaming/index.js","npm_config_global_style":"","npm_config_ignore_scripts":"","npm_config_version":"","npm_package_dependencies_axios":"~0.16.2","npm_package_dependencies_css_loader":"^0.28.4","npm_package_dependencies_marky":"^1.2.0","npm_config_local_address":"","npm_config_viewer":"man","npm_config_node_gyp":"/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js","PATH":"/usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/howl/oc/mastofe/node_modules/.bin:/home/howl/torch-cl/install/bin:/home/howl/go/bin:/home/howl/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games","SESSION_MANAGER":"local/pluto:@/tmp/.ICE-unix/1292,unix/pluto:/tmp/.ICE-unix/1292","npm_package_name":"mastodon","npm_package_repository_type":"git","npm_package_dependencies_babel_preset_env":"^1.6.1","npm_package_dependencies_cross_env":"^5.1.1","npm_package_dependencies_extract_text_webpack_plugin":"^3.0.2","npm_package_dependencies_substring_trie":"^1.0.2","npm_config_prefer_offline":"","NODE":"/usr/bin/node","XDG_RUNTIME_DIR":"/run/user/1000","XDG_SESSION_PATH":"/org/freedesktop/DisplayManager/Session0","npm_package_dependencies_babel_plugin_transform_runtime":"^6.23.0","npm_package_dependencies_react_redux":"^5.0.4","npm_package_dependencies_tiny_queue":"^0.2.1","npm_package_devDependencies_eslint_plugin_jsx_a11y":"^5.1.1","npm_config_color":"true","DISPLAY":":0","npm_package_scripts_build_development":"cross-env NODE_ENV=development webpack --config config/webpack/development.js","npm_package_dependencies_npm_run_all":"^4.1.2","npm_package_dependencies_stringz":"^0.3.0","npm_config_fetch_retry_mintimeout":"10000","npm_config_maxsockets":"50","npm_config_offline":"","npm_config_sso_poll_frequency":"500","LANG":"en_GB.UTF-8","XDG_CURRENT_DESKTOP":"X-Cinnamon","npm_package_dependencies_babel_plugin_transform_react_inline_elements":"^6.22.0","npm_package_dependencies_babel_preset_react":"^6.24.1","npm_package_dependencies_object_assign":"^4.1.1","npm_package_dependencies_react_dom":"^16.2.0","npm_package_dependencies_react_textarea_autosize":"^5.2.1","npm_package_dependencies_redux":"^3.7.1","npm_package_devDependencies_eslint":"^4.15.0","npm_package_devDependencies_react_test_renderer":"^16.2.0","npm_config_umask":"0022","LS_COLORS":"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_DESKTOP":"cinnamon","XAUTHORITY":"/home/howl/.Xauthority","npm_package_dependencies_babel_plugin_transform_object_rest_spread":"^6.23.0","npm_package_dependencies_offline_plugin":"^4.8.3","npm_package_dependencies_path_complete_extname":"^0.1.0","npm_package_dependencies_postcss_smart_import":"^0.7.5","npm_package_dependencies_node_zopfli":"^2.0.2","npm_package_gitHead":"f48f11d488a1c48965317034a7a5fd470a4971f5","npm_config_fetch_retry_maxtimeout":"60000","npm_config_loglevel":"notice","npm_config_logs_max":"10","npm_config_message":"%s","npm_lifecycle_script":"cross-env NODE_ENV=production webpack --config config/webpack/production.js","SSH_AUTH_SOCK":"/run/user/1000/keyring/ssh","XDG_GREETER_DATA_DIR":"/var/lib/lightdm/data/howl","npm_package_scripts_postversion":"git push --tags","npm_package_scripts_test":"npm-run-all test:lint test:jest","npm_package_dependencies_babel_core":"^6.25.0","npm_package_dependencies_babel_plugin_preval":"^1.6.1","npm_package_dependencies_http_link_header":"^0.8.0","npm_package_dependencies_intersection_observer":"^0.5.0","npm_package_dependencies_is_nan":"^1.2.1","npm_package_dependencies_react_intl":"^2.4.0","npm_package_dependencies_react_router_scroll_4":"^1.0.0-beta.1","npm_package_dependencies_react_swipeable_views":"^0.12.3","npm_package_dependencies_redux_immutable":"^4.0.0","npm_package_devDependencies_webpack_dev_server":"^2.9.5","npm_config_ca":"","npm_config_cert":"","npm_config_global":"","npm_config_link":"","SHELL":"/bin/bash","npm_package_repository_url":"git+https://github.com/tootsuite/mastodon.git","npm_package_dependencies_webpack_bundle_analyzer":"^2.9.1","npm_package_version":"","npm_config_access":"","npm_config_also":"","npm_config_save":"true","npm_config_unicode":"true","npm_lifecycle_event":"build","QT_ACCESSIBILITY":"1","GDMSESSION":"cinnamon","npm_package_scripts_build":"cross-env NODE_ENV=production webpack --config config/webpack/production.js","npm_package_dependencies_emoji_mart":"github:Gargron/emoji-mart#build","npm_package_dependencies_intl":"^1.2.5","npm_package_dependencies_js_yaml":"^3.9.0","npm_package_dependencies_uuid":"^3.1.0","npm_config_argv":"{\"remain\":[],\"cooked\":[\"run\",\"build\"],\"original\":[\"run\",\"build\"]}","npm_config_long":"","npm_config_production":"","npm_config_searchlimit":"20","npm_config_unsafe_perm":"true","npm_package_dependencies_array_includes":"^3.0.3","npm_package_dependencies_babel_plugin_transform_react_jsx_source":"^6.22.0","npm_package_dependencies_compression_webpack_plugin":"^1.0.1","npm_package_dependencies_file_loader":"^0.11.2","npm_package_dependencies_lodash":"^4.17.4","npm_config_auth_type":"legacy","npm_config_node_version":"9.10.1","npm_config_tag":"latest","OSU_USERNAME":"howl","npm_config_git_tag_version":"true","npm_config_commit_hooks":"true","npm_config_script_shell":"","npm_config_shrinkwrap":"true","GJS_DEBUG_OUTPUT":"stderr","GPG_AGENT_INFO":"/run/user/1000/gnupg/S.gpg-agent:0:1","npm_package_license":"AGPL-3.0-or-later","npm_package_dependencies_classnames":"^2.2.5","npm_package_dependencies_es6_symbol":"^3.1.1","npm_package_dependencies_intl_messageformat":"^2.2.0","npm_package_dependencies_punycode":"^2.1.0","npm_package_devDependencies_eslint_plugin_react":"^7.5.1","npm_config_fetch_retry_factor":"10","npm_config_save_exact":"","npm_config_strict_ssl":"true","XDG_VTNR":"7","npm_package_dependencies_babel_plugin_transform_react_jsx_self":"^6.22.0","npm_config_dev":"","npm_config_globalconfig":"/usr/etc/npmrc","npm_config_init_module":"/home/howl/.npm-init.js","npm_config_parseable":"","LUA_CPATH":"/home/howl/torch-cl/install/lib/?.so;/home/howl/.luarocks/lib/lua/5.1/?.so;/home/howl/torch-cl/install/lib/lua/5.1/?.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so","PWD":"/home/howl/oc/mastofe","npm_package_dependencies_intl_relativeformat":"^2.1.0","npm_package_dependencies_requestidlecallback":"^0.3.0","npm_package_dependencies_webpack_manifest_plugin":"^1.2.1","npm_package_devDependencies_enzyme":"^3.2.0","npm_package_devDependencies_raf":"^3.4.0","npm_config_globalignorefile":"/usr/etc/npmignore","npm_execpath":"/usr/lib/node_modules/npm/bin/npm-cli.js","DYLD_LIBRARY_PATH":"/home/howl/torch-cl/install/lib:","XDG_DATA_DIRS":"/usr/share/gnome:/home/howl/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share","npm_package_dependencies_react_toggle":"^4.0.1","npm_config_cache_lock_retries":"10","npm_config_searchstaleness":"900","npm_package_dependencies_object_values":"^1.0.4","npm_package_dependencies_prop_types":"^15.5.10","npm_package_dependencies_resolve_url_loader":"^2.2.0","npm_package_dependencies_rimraf":"^2.6.1","npm_config_node_options":"","npm_config_save_prefix":"^","npm_config_scripts_prepend_node_path":"warn-only","npm_package_devDependencies_babel_eslint":"^8.2.1","npm_package_devDependencies_yargs":"^8.0.2","npm_config_group":"1000","npm_config_init_author_email":"","npm_config_searchexclude":"","VTE_VERSION":"5200","npm_package_dependencies_babel_loader":"^7.1.1","npm_package_dependencies_object_fit_images":"^3.2.3","npm_config_git":"git","npm_config_optional":"true","npm_package_dependencies_babel_plugin_transform_decorators_legacy":"^1.3.4","npm_package_dependencies_pg":"^6.4.0","npm_package_dependencies_react":"^16.2.0","npm_package_dependencies_fsevents":"*","npm_config_json":"","INIT_CWD":"/home/howl/oc/mastofe","NODE_ENV":"production"};
784 function openSystemCache() {
785 return caches
.open('mastodon-system');
788 function openWebCache() {
789 return caches
.open('mastodon-web');
792 function fetchRoot() {
793 return fetch('/web', { credentials: 'include' });
796 // Cause a new version of a registered Service Worker to replace an existing one
797 // that is already installed, and replace the currently active worker on open pages.
798 self
.addEventListener('install', function (event
) {
799 event
.waitUntil(Promise
.all([openWebCache(), fetchRoot()]).then(function (_ref
) {
802 return cache
.put('/web', root
);
805 self
.addEventListener('activate', function (event
) {
806 event
.waitUntil(self
.clients
.claim());
808 self
.addEventListener('fetch', function (event
) {
809 var url
= new URL(event
.request
.url
);
811 if (url
.pathname
.startsWith('/web')) {
812 var asyncResponse
= fetchRoot();
813 var asyncCache
= openWebCache();
815 event
.respondWith(asyncResponse
.then(async
function (response
) {
817 var cache
= await asyncCache
;
818 await cache
.put('/web', response
);
819 return response
.clone();
823 }).catch(function () {
824 return asyncCache
.then(function (cache
) {
825 return cache
.match('/web');
828 } else if (url
.pathname
=== '/auth/sign_out') {
829 var _asyncResponse
= fetch(event
.request
);
830 var _asyncCache
= openWebCache();
832 event
.respondWith(_asyncResponse
.then(async
function (response
) {
833 if (response
.ok
|| response
.type
=== 'opaqueredirect') {
834 var cache
= await _asyncCache
;
835 await cache
.delete('/web');
840 } else if (process
.env
.CDN_HOST
? url
.host
=== process
.env
.CDN_HOST : url
.pathname
.startsWith('/system/')) {
841 event
.respondWith(openSystemCache().then(async
function (cache
) {
842 var cached
= await cache
.match(event
.request
.url
);
844 if (cached
=== undefined) {
845 var fetched
= await
fetch(event
.request
);
848 await cache
.put(event
.request
.url
, fetched
.clone());
862 /***/ (function(module
, exports
) {
864 var MAX_NOTIFICATIONS
= 5;
865 var GROUP_TAG
= 'tag';
867 // Avoid loading intl-messageformat and dealing with locales in the ServiceWorker
868 var formatGroupTitle
= function formatGroupTitle(message
, count
) {
869 return message
.replace('%{count}', count
);
872 var notify
= function notify(options
) {
873 return self
.registration
.getNotifications().then(function (notifications
) {
874 if (notifications
.length
=== MAX_NOTIFICATIONS
) {
875 // Reached the maximum number of notifications, proceed with grouping
877 title: formatGroupTitle(options
.data
.message
, notifications
.length
+ 1),
878 body: notifications
.sort(function (n1
, n2
) {
879 return n1
.timestamp
< n2
.timestamp
;
880 }).map(function (notification
) {
881 return notification
.title
;
884 icon: '/android-chrome-192x192.png',
887 url: new URL('/web/notifications', self
.location
).href
,
888 count: notifications
.length
+ 1,
889 message: options
.data
.message
893 notifications
.forEach(function (notification
) {
894 return notification
.close();
897 return self
.registration
.showNotification(group
.title
, group
);
898 } else if (notifications
.length
=== 1 && notifications
[0].tag
=== GROUP_TAG
) {
899 // Already grouped, proceed with appending the notification to the group
900 var _group
= cloneNotification(notifications
[0]);
902 _group
.title
= formatGroupTitle(_group
.data
.message
, _group
.data
.count
+ 1);
903 _group
.body
= options
.title
+ '\n' + _group
.body
;
904 _group
.data
= Object
.assign({}, _group
.data
, { count: _group
.data
.count
+ 1 });
906 return self
.registration
.showNotification(_group
.title
, _group
);
909 return self
.registration
.showNotification(options
.title
, options
);
913 var handlePush
= function handlePush(event
) {
914 var options
= event
.data
.json();
916 options
.body
= options
.data
.nsfw
|| options
.data
.content
;
917 options
.dir
= options
.data
.dir
;
918 options
.image
= options
.image
|| undefined; // Null results in a network request (404)
919 options
.timestamp
= options
.timestamp
&& new Date(options
.timestamp
);
921 var expandAction
= options
.data
.actions
.find(function (action
) {
922 return action
.todo
=== 'expand';
926 options
.actions
= [expandAction
];
927 options
.hiddenActions
= options
.data
.actions
.filter(function (action
) {
928 return action
!== expandAction
;
930 options
.data
.hiddenImage
= options
.image
;
931 options
.image
= undefined;
933 options
.actions
= options
.data
.actions
;
936 event
.waitUntil(notify(options
));
939 var cloneNotification
= function cloneNotification(notification
) {
942 for (var k
in notification
) {
943 clone
[k
] = notification
[k
];
949 var expandNotification
= function expandNotification(notification
) {
950 var nextNotification
= cloneNotification(notification
);
952 nextNotification
.body
= notification
.data
.content
;
953 nextNotification
.image
= notification
.data
.hiddenImage
;
954 nextNotification
.actions
= notification
.data
.actions
.filter(function (action
) {
955 return action
.todo
!== 'expand';
958 return self
.registration
.showNotification(nextNotification
.title
, nextNotification
);
961 var makeRequest
= function makeRequest(notification
, action
) {
962 return fetch(action
.action
, {
964 'Authorization': 'Bearer ' + notification
.data
.access_token
,
965 'Content-Type': 'application/json'
967 method: action
.method
,
968 credentials: 'include'
972 var findBestClient
= function findBestClient(clients
) {
973 var focusedClient
= clients
.find(function (client
) {
974 return client
.focused
;
976 var visibleClient
= clients
.find(function (client
) {
977 return client
.visibilityState
=== 'visible';
980 return focusedClient
|| visibleClient
|| clients
[0];
983 var openUrl
= function openUrl(url
) {
984 return self
.clients
.matchAll({ type: 'window' }).then(function (clientList
) {
985 if (clientList
.length
!== 0) {
986 var webClients
= clientList
.filter(function (client
) {
987 return (/\/web\//.test(client
.url
)
991 if (webClients
.length
!== 0) {
992 var client
= findBestClient(webClients
);
994 var _ref
= new URL(url
),
995 pathname
= _ref
.pathname
;
997 if (pathname
.startsWith('/web/')) {
998 return client
.focus().then(function (client
) {
999 return client
.postMessage({
1001 path: pathname
.slice('/web/'.length
- 1)
1005 } else if ('navigate' in clientList
[0]) {
1006 // Chrome 42-48 does not support navigate
1007 var _client
= findBestClient(clientList
);
1009 return _client
.navigate(url
).then(function (client
) {
1010 return client
.focus();
1015 return self
.clients
.openWindow(url
);
1019 var removeActionFromNotification
= function removeActionFromNotification(notification
, action
) {
1020 var actions
= notification
.actions
.filter(function (act
) {
1021 return act
.action
!== action
.action
;
1023 var nextNotification
= cloneNotification(notification
);
1025 nextNotification
.actions
= actions
;
1027 return self
.registration
.showNotification(nextNotification
.title
, nextNotification
);
1030 var handleNotificationClick
= function handleNotificationClick(event
) {
1031 var reactToNotificationClick
= new Promise(function (resolve
, reject
) {
1033 var action
= event
.notification
.data
.actions
.find(function (_ref2
) {
1034 var action
= _ref2
.action
;
1035 return action
=== event
.action
;
1038 if (action
.todo
=== 'expand') {
1039 resolve(expandNotification(event
.notification
));
1040 } else if (action
.todo
=== 'request') {
1041 resolve(makeRequest(event
.notification
, action
).then(function () {
1042 return removeActionFromNotification(event
.notification
, action
);
1045 reject('Unknown action: ' + action
.todo
);
1048 event
.notification
.close();
1049 resolve(openUrl(event
.notification
.data
.url
));
1053 event
.waitUntil(reactToNotificationClick
);
1056 self
.addEventListener('push', handlePush
);
1057 self
.addEventListener('notificationclick', handleNotificationClick
);