4075.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. exports.id = 4075;
  2. exports.ids = [4075];
  3. exports.modules = {
  4. /***/ 82184:
  5. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6. "use strict";
  7. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  9. /* harmony export */ });
  10. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  11. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  12. var _path;
  13. function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
  14. var SvgDownload = function SvgDownload(props) {
  15. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
  16. width: 15,
  17. height: 15,
  18. viewBox: "0 0 15 15",
  19. fill: "none",
  20. xmlns: "http://www.w3.org/2000/svg"
  21. }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
  22. d: "M7.5 1.05a.45.45 0 0 1 .45.45v6.914l2.232-2.232a.45.45 0 1 1 .636.636l-3 3a.45.45 0 0 1-.636 0l-3-3a.45.45 0 1 1 .636-.636L7.05 8.414V1.5a.45.45 0 0 1 .45-.45ZM2.5 10a.5.5 0 0 1 .5.5V12c0 .554.446 1 .996 1h7.005A.999.999 0 0 0 12 12v-1.5a.5.5 0 0 1 1 0V12c0 1.104-.894 2-1.999 2H3.996A1.997 1.997 0 0 1 2 12v-1.5a.5.5 0 0 1 .5-.5Z",
  23. fill: "currentColor",
  24. fillRule: "evenodd",
  25. clipRule: "evenodd"
  26. })));
  27. };
  28. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDownload);
  29. /***/ }),
  30. /***/ 23848:
  31. /***/ ((module) => {
  32. // Exports
  33. module.exports = {
  34. "pageContainer": "index_pageContainer__Pxtn3",
  35. "loadingContainer": "index_loadingContainer__WEZFc",
  36. "flow": "index_flow__rCTR5",
  37. "flowItem": "index_flowItem__GnXWz",
  38. "additionalVerticalGap": "index_additionalVerticalGap__nzYz6",
  39. "fullWidth": "index_fullWidth__1n4ux"
  40. };
  41. /***/ }),
  42. /***/ 64881:
  43. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  44. "use strict";
  45. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  46. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  47. /* harmony export */ "L": () => (/* binding */ download)
  48. /* harmony export */ });
  49. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  50. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  51. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  52. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  53. /* harmony import */ var _xstate_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59456);
  54. /* harmony import */ var _xstate_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_xstate_react__WEBPACK_IMPORTED_MODULE_2__);
  55. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(60866);
  56. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3__);
  57. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6022);
  58. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
  59. /* harmony import */ var _dls_PopoverMenu_PopoverMenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99163);
  60. /* harmony import */ var _dls_Spinner_Spinner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7190);
  61. /* harmony import */ var _icons_download_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(82184);
  62. /* harmony import */ var _redux_slices_AudioPlayer_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(53800);
  63. /* harmony import */ var _utils_eventLogger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(55943);
  64. /* harmony import */ var src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(64564);
  65. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_dls_PopoverMenu_PopoverMenu__WEBPACK_IMPORTED_MODULE_5__, _utils_eventLogger__WEBPACK_IMPORTED_MODULE_9__, src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_10__]);
  66. ([_dls_PopoverMenu_PopoverMenu__WEBPACK_IMPORTED_MODULE_5__, _utils_eventLogger__WEBPACK_IMPORTED_MODULE_9__, src_xstate_AudioPlayerMachineContext__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  67. const download = (url, onDone)=>{
  68. const splits = url.substring(url.lastIndexOf("/") + 1).split("?");
  69. const [filename] = splits;
  70. const xhr = new XMLHttpRequest();
  71. xhr.responseType = "blob";
  72. xhr.onload = ()=>{
  73. const a = document.createElement("a");
  74. a.href = window.URL.createObjectURL(xhr.response);
  75. a.download = filename;
  76. a.style.display = "none";
  77. document.body.appendChild(a);
  78. a.click();
  79. onDone();
  80. };
  81. xhr.open("GET", url);
  82. xhr.send();
  83. };
  84. const DownloadAudioButton = ()=>{
  85. const { t } = useTranslation("common");
  86. const audioService = useContext(AudioPlayerMachineContext);
  87. const audioDataUrl = useXstateSelector(audioService, (state)=>state.context.audioData.audioUrl);
  88. const loading = useSelector(selectIsDownloadingAudio);
  89. const dispatch = useDispatch();
  90. const onClick = ()=>{
  91. logButtonClick("audio_player_download");
  92. dispatch(setIsDownloadingAudio(true));
  93. download(audioDataUrl, ()=>{
  94. dispatch(setIsDownloadingAudio(false));
  95. });
  96. };
  97. return /*#__PURE__*/ _jsx(PopoverMenu.Item, {
  98. onClick: onClick,
  99. icon: loading ? /*#__PURE__*/ _jsx(Spinner, {
  100. size: SpinnerSize.Large
  101. }) : /*#__PURE__*/ _jsx(DownloadIcon, {}),
  102. children: t("audio.player.download")
  103. });
  104. };
  105. /* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (DownloadAudioButton)));
  106. __webpack_async_result__();
  107. } catch(e) { __webpack_async_result__(e); } });
  108. /***/ }),
  109. /***/ 53800:
  110. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  111. "use strict";
  112. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  113. /* harmony export */ "Mj": () => (/* binding */ selectEnableAutoScrolling),
  114. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  115. /* harmony export */ "ow": () => (/* binding */ selectShowTooltipWhenPlayingAudio)
  116. /* harmony export */ });
  117. /* unused harmony exports selectAudioPlayerState, selectIsDownloadingAudio, audioPlayerStateSlice, setEnableAutoScrolling, setIsDownloadingAudio, setShowTooltipWhenPlayingAudio */
  118. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  119. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  120. /* harmony import */ var redux_persist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14161);
  121. /* harmony import */ var redux_persist__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(redux_persist__WEBPACK_IMPORTED_MODULE_1__);
  122. /* harmony import */ var _redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(78733);
  123. /* harmony import */ var _redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(91767);
  124. /* harmony import */ var _redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17241);
  125. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(61243);
  126. /* harmony import */ var types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(13591);
  127. const selectAudioPlayerState = (state)=>state.audioPlayerState;
  128. const selectEnableAutoScrolling = (state)=>state.audioPlayerState.enableAutoScrolling;
  129. const selectIsDownloadingAudio = (state)=>state.audioPlayerState.isDownloadingAudio;
  130. const selectShowTooltipWhenPlayingAudio = (state)=>state.audioPlayerState.showTooltipWhenPlayingAudio;
  131. const audioPlayerStateSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  132. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_5__/* ["default"].AUDIO_PLAYER_STATE */ .Z.AUDIO_PLAYER_STATE,
  133. initialState: (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_4__/* .getAudioPlayerStateInitialState */ .aq)(),
  134. reducers: {
  135. setEnableAutoScrolling: (state, action)=>({
  136. ...state,
  137. enableAutoScrolling: action.payload
  138. }),
  139. setIsDownloadingAudio: (state, action)=>({
  140. ...state,
  141. isDownloadingAudio: action.payload
  142. }),
  143. setShowTooltipWhenPlayingAudio: (state, action)=>({
  144. ...state,
  145. showTooltipWhenPlayingAudio: action.payload
  146. })
  147. },
  148. // reset reciter to the default based on the locale
  149. // WHEN `reset` action is dispatched
  150. extraReducers: (builder)=>{
  151. builder.addCase(_redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, (state, action)=>({
  152. ...state,
  153. ...(0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_4__/* .getAudioPlayerStateInitialState */ .aq)(action.payload.locale)
  154. }));
  155. builder.addCase(_redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, (state, action)=>{
  156. const { payload: { userPreferences } , } = action;
  157. const remotePreferences = userPreferences[types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_6__/* ["default"].AUDIO */ .Z.AUDIO];
  158. if (remotePreferences) {
  159. return {
  160. ...state,
  161. ...remotePreferences
  162. };
  163. }
  164. return state;
  165. });
  166. // listen to redux-persist's REHYDRATE event
  167. builder.addCase(redux_persist__WEBPACK_IMPORTED_MODULE_1__.REHYDRATE, (state, action)=>{
  168. // @ts-ignore
  169. const { key , payload } = action;
  170. /**
  171. * There is an issue with redux-persists (https://github.com/rt2zz/redux-persist/issues/290)
  172. * that converts Infinite to null which affects when the user chooses to
  173. * repeat a verse(s) infinitely and leads to repeatRange being persisted
  174. * as null which is an invalid value so we need to convert it back to Infinity.
  175. */ if (key === _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_5__/* ["default"].AUDIO_PLAYER_STATE */ .Z.AUDIO_PLAYER_STATE && payload?.repeatSettings?.repeatRange === null) {
  176. return {
  177. ...state,
  178. ...payload
  179. };
  180. }
  181. return {
  182. ...state,
  183. ...payload
  184. };
  185. });
  186. }
  187. });
  188. const { setEnableAutoScrolling , setIsDownloadingAudio , setShowTooltipWhenPlayingAudio } = audioPlayerStateSlice.actions;
  189. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (audioPlayerStateSlice.reducer);
  190. /***/ }),
  191. /***/ 17339:
  192. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  193. "use strict";
  194. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  195. /* harmony export */ "Kr": () => (/* binding */ makeCDNUrl)
  196. /* harmony export */ });
  197. /* unused harmony exports CDN_HOST, CDN_ASSETS_VERSION */
  198. const CDN_HOST = "https://static.qurancdn.com";
  199. const CDN_ASSETS_VERSION = "1";
  200. /**
  201. * Generate versioned URL of static asset
  202. *
  203. * @param {string} path the path of static asset
  204. * @returns {string}
  205. */ const makeCDNUrl = (path)=>{
  206. return `${CDN_HOST}/${path}?v=${CDN_ASSETS_VERSION}`;
  207. };
  208. /***/ })
  209. };
  210. ;
  211. //# sourceMappingURL=4075.js.map