diff --git a/js/dist/admin.js b/js/dist/admin.js index 4615429..f46831d 100644 --- a/js/dist/admin.js +++ b/js/dist/admin.js @@ -1,215 +1,2 @@ -module.exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./admin.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./admin.js": -/*!******************!*\ - !*** ./admin.js ***! - \******************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _src_admin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/admin */ "./src/admin/index.js"); -/* empty/unused harmony star reexport */ - -/***/ }), - -/***/ "./src/admin/index.js": -/*!****************************!*\ - !*** ./src/admin/index.js ***! - \****************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); -/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/app */ "flarum/app"); -/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/PermissionGrid */ "flarum/components/PermissionGrid"); -/* harmony import */ var flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2__); - - - -flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('xelson-chat', function (app) { - app.extensionData["for"]('xelson-chat').registerSetting({ - setting: 'xelson-chat.settings.charlimit', - label: app.translator.trans('xelson-chat.admin.settings.charlimit'), - type: 'number' - }).registerSetting({ - setting: 'xelson-chat.settings.floodgate.number', - label: app.translator.trans('xelson-chat.admin.settings.floodgate.number'), - type: 'number' - }).registerSetting({ - setting: 'xelson-chat.settings.floodgate.time', - label: app.translator.trans('xelson-chat.admin.settings.floodgate.time'), - type: 'text' - }).registerSetting({ - setting: 'xelson-chat.settings.display.minimize', - label: app.translator.trans('xelson-chat.admin.settings.display.minimize'), - type: 'switch' - }).registerSetting({ - setting: 'xelson-chat.settings.display.censor', - label: app.translator.trans('xelson-chat.admin.settings.display.censor'), - type: 'switch' - }).registerPermission({ - icon: 'fas fa-eye', - label: app.translator.trans('xelson-chat.admin.permissions.enabled'), - permission: 'xelson-chat.permissions.enabled', - allowGuest: true - }, 'view').registerPermission({ - icon: 'fas fa-comment-medical', - label: app.translator.trans('xelson-chat.admin.permissions.create.chat'), - permission: 'xelson-chat.permissions.create' - }, 'start').registerPermission({ - icon: 'fas fa-comment-medical', - label: app.translator.trans('xelson-chat.admin.permissions.create.channel'), - permission: 'xelson-chat.permissions.create.channel' - }, 'start').registerPermission({ - icon: 'fas fa-comments', - label: app.translator.trans('xelson-chat.admin.permissions.post'), - permission: 'xelson-chat.permissions.chat' - }, 'reply').registerPermission({ - icon: 'fas fa-pencil-alt', - label: app.translator.trans('xelson-chat.admin.permissions.edit'), - permission: 'xelson-chat.permissions.edit' - }, 'reply').registerPermission({ - icon: 'far fa-trash-alt', - label: app.translator.trans('xelson-chat.admin.permissions.delete'), - permission: 'xelson-chat.permissions.delete' - }, 'reply').registerPermission({ - icon: 'fas fa-eye', - label: app.translator.trans('xelson-chat.admin.permissions.moderate.vision'), - permission: 'xelson-chat.permissions.moderate.vision' - }, 'moderate').registerPermission({ - icon: 'far fa-trash-alt', - label: app.translator.trans('xelson-chat.admin.permissions.moderate.delete'), - permission: 'xelson-chat.permissions.moderate.delete' - }, 'moderate'); -}); - -/***/ }), - -/***/ "flarum/app": -/*!********************************************!*\ - !*** external "flarum.core.compat['app']" ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['app']; - -/***/ }), - -/***/ "flarum/components/PermissionGrid": -/*!******************************************************************!*\ - !*** external "flarum.core.compat['components/PermissionGrid']" ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/PermissionGrid']; - -/***/ }), - -/***/ "flarum/extend": -/*!***********************************************!*\ - !*** external "flarum.core.compat['extend']" ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['extend']; - -/***/ }) - -/******/ }); +module.exports=function(e){var t={};function s(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,s),r.l=!0,r.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(n,r,function(t){return e[t]}.bind(null,r));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=33)}({30:function(e,t){e.exports=flarum.core.compat.app},31:function(e,t){e.exports=flarum.core.compat["components/PermissionGrid"]},33:function(e,t,s){"use strict";s.r(t);s(9);var n=s(30),r=s.n(n);s(31);r.a.initializers.add("xelson-chat",(function(e){e.extensionData.for("xelson-chat").registerSetting({setting:"xelson-chat.settings.charlimit",label:e.translator.trans("xelson-chat.admin.settings.charlimit"),type:"number"}).registerSetting({setting:"xelson-chat.settings.floodgate.number",label:e.translator.trans("xelson-chat.admin.settings.floodgate.number"),type:"number"}).registerSetting({setting:"xelson-chat.settings.floodgate.time",label:e.translator.trans("xelson-chat.admin.settings.floodgate.time"),type:"text"}).registerSetting({setting:"xelson-chat.settings.display.minimize",label:e.translator.trans("xelson-chat.admin.settings.display.minimize"),type:"switch"}).registerSetting({setting:"xelson-chat.settings.display.censor",label:e.translator.trans("xelson-chat.admin.settings.display.censor"),type:"switch"}).registerPermission({icon:"fas fa-eye",label:e.translator.trans("xelson-chat.admin.permissions.enabled"),permission:"xelson-chat.permissions.enabled",allowGuest:!0},"view").registerPermission({icon:"fas fa-comment-medical",label:e.translator.trans("xelson-chat.admin.permissions.create.chat"),permission:"xelson-chat.permissions.create"},"start").registerPermission({icon:"fas fa-comment-medical",label:e.translator.trans("xelson-chat.admin.permissions.create.channel"),permission:"xelson-chat.permissions.create.channel"},"start").registerPermission({icon:"fas fa-comments",label:e.translator.trans("xelson-chat.admin.permissions.post"),permission:"xelson-chat.permissions.chat"},"reply").registerPermission({icon:"fas fa-pencil-alt",label:e.translator.trans("xelson-chat.admin.permissions.edit"),permission:"xelson-chat.permissions.edit"},"reply").registerPermission({icon:"far fa-trash-alt",label:e.translator.trans("xelson-chat.admin.permissions.delete"),permission:"xelson-chat.permissions.delete"},"reply").registerPermission({icon:"fas fa-eye",label:e.translator.trans("xelson-chat.admin.permissions.moderate.vision"),permission:"xelson-chat.permissions.moderate.vision"},"moderate").registerPermission({icon:"far fa-trash-alt",label:e.translator.trans("xelson-chat.admin.permissions.moderate.delete"),permission:"xelson-chat.permissions.moderate.delete"},"moderate")}))},9:function(e,t){e.exports=flarum.core.compat.extend}}); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index 68bfbcc..4e5ed98 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://module.exports/webpack/bootstrap","webpack://module.exports/./admin.js","webpack://module.exports/./src/admin/index.js","webpack://module.exports/external \"flarum.core.compat['app']\"","webpack://module.exports/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://module.exports/external \"flarum.core.compat['extend']\""],"names":["app","initializers","add","extensionData","registerSetting","setting","label","translator","trans","type","registerPermission","icon","permission","allowGuest"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./admin.js\");\n","export * from './src/admin';\n","import { extend } from 'flarum/extend';\nimport app from 'flarum/app';\nimport PermissionGrid from 'flarum/components/PermissionGrid';\n\napp.initializers.add('xelson-chat', (app) => {\n app.extensionData\n .for('xelson-chat')\n .registerSetting({\n setting: 'xelson-chat.settings.charlimit',\n label: app.translator.trans('xelson-chat.admin.settings.charlimit'),\n type: 'number',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.floodgate.number',\n label: app.translator.trans('xelson-chat.admin.settings.floodgate.number'),\n type: 'number',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.floodgate.time',\n label: app.translator.trans('xelson-chat.admin.settings.floodgate.time'),\n type: 'text',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.display.minimize',\n label: app.translator.trans('xelson-chat.admin.settings.display.minimize'),\n type: 'switch',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.display.censor',\n label: app.translator.trans('xelson-chat.admin.settings.display.censor'),\n type: 'switch',\n })\n .registerPermission(\n {\n icon: 'fas fa-eye',\n label: app.translator.trans('xelson-chat.admin.permissions.enabled'),\n permission: 'xelson-chat.permissions.enabled',\n allowGuest: true,\n },\n 'view'\n )\n .registerPermission(\n {\n icon: 'fas fa-comment-medical',\n label: app.translator.trans('xelson-chat.admin.permissions.create.chat'),\n permission: 'xelson-chat.permissions.create',\n },\n 'start'\n )\n .registerPermission(\n {\n icon: 'fas fa-comment-medical',\n label: app.translator.trans('xelson-chat.admin.permissions.create.channel'),\n permission: 'xelson-chat.permissions.create.channel',\n },\n 'start'\n )\n .registerPermission(\n {\n icon: 'fas fa-comments',\n label: app.translator.trans('xelson-chat.admin.permissions.post'),\n permission: 'xelson-chat.permissions.chat',\n },\n 'reply'\n )\n .registerPermission(\n {\n icon: 'fas fa-pencil-alt',\n label: app.translator.trans('xelson-chat.admin.permissions.edit'),\n permission: 'xelson-chat.permissions.edit',\n },\n 'reply'\n )\n .registerPermission(\n {\n icon: 'far fa-trash-alt',\n label: app.translator.trans('xelson-chat.admin.permissions.delete'),\n permission: 'xelson-chat.permissions.delete',\n },\n 'reply'\n )\n .registerPermission(\n {\n icon: 'fas fa-eye',\n label: app.translator.trans('xelson-chat.admin.permissions.moderate.vision'),\n permission: 'xelson-chat.permissions.moderate.vision',\n },\n 'moderate'\n )\n .registerPermission(\n {\n icon: 'far fa-trash-alt',\n label: app.translator.trans('xelson-chat.admin.permissions.moderate.delete'),\n permission: 'xelson-chat.permissions.moderate.delete',\n },\n 'moderate'\n );\n});\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/PermissionGrid'];","module.exports = flarum.core.compat['extend'];"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://module.exports/webpack/bootstrap","webpack://module.exports/external \"flarum.core.compat['app']\"","webpack://module.exports/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://module.exports/./src/admin/index.js","webpack://module.exports/external \"flarum.core.compat['extend']\""],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","app","initializers","add","extensionData","registerSetting","setting","label","translator","trans","type","registerPermission","icon","permission","allowGuest"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 33);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/PermissionGrid'];","import { extend } from 'flarum/extend';\nimport app from 'flarum/app';\nimport PermissionGrid from 'flarum/components/PermissionGrid';\n\napp.initializers.add('xelson-chat', (app) => {\n app.extensionData\n .for('xelson-chat')\n .registerSetting({\n setting: 'xelson-chat.settings.charlimit',\n label: app.translator.trans('xelson-chat.admin.settings.charlimit'),\n type: 'number',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.floodgate.number',\n label: app.translator.trans('xelson-chat.admin.settings.floodgate.number'),\n type: 'number',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.floodgate.time',\n label: app.translator.trans('xelson-chat.admin.settings.floodgate.time'),\n type: 'text',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.display.minimize',\n label: app.translator.trans('xelson-chat.admin.settings.display.minimize'),\n type: 'switch',\n })\n .registerSetting({\n setting: 'xelson-chat.settings.display.censor',\n label: app.translator.trans('xelson-chat.admin.settings.display.censor'),\n type: 'switch',\n })\n .registerPermission(\n {\n icon: 'fas fa-eye',\n label: app.translator.trans('xelson-chat.admin.permissions.enabled'),\n permission: 'xelson-chat.permissions.enabled',\n allowGuest: true,\n },\n 'view'\n )\n .registerPermission(\n {\n icon: 'fas fa-comment-medical',\n label: app.translator.trans('xelson-chat.admin.permissions.create.chat'),\n permission: 'xelson-chat.permissions.create',\n },\n 'start'\n )\n .registerPermission(\n {\n icon: 'fas fa-comment-medical',\n label: app.translator.trans('xelson-chat.admin.permissions.create.channel'),\n permission: 'xelson-chat.permissions.create.channel',\n },\n 'start'\n )\n .registerPermission(\n {\n icon: 'fas fa-comments',\n label: app.translator.trans('xelson-chat.admin.permissions.post'),\n permission: 'xelson-chat.permissions.chat',\n },\n 'reply'\n )\n .registerPermission(\n {\n icon: 'fas fa-pencil-alt',\n label: app.translator.trans('xelson-chat.admin.permissions.edit'),\n permission: 'xelson-chat.permissions.edit',\n },\n 'reply'\n )\n .registerPermission(\n {\n icon: 'far fa-trash-alt',\n label: app.translator.trans('xelson-chat.admin.permissions.delete'),\n permission: 'xelson-chat.permissions.delete',\n },\n 'reply'\n )\n .registerPermission(\n {\n icon: 'fas fa-eye',\n label: app.translator.trans('xelson-chat.admin.permissions.moderate.vision'),\n permission: 'xelson-chat.permissions.moderate.vision',\n },\n 'moderate'\n )\n .registerPermission(\n {\n icon: 'far fa-trash-alt',\n label: app.translator.trans('xelson-chat.admin.permissions.moderate.delete'),\n permission: 'xelson-chat.permissions.moderate.delete',\n },\n 'moderate'\n );\n});\n","module.exports = flarum.core.compat['extend'];"],"sourceRoot":""} \ No newline at end of file diff --git a/js/dist/forum.js b/js/dist/forum.js index 58e0179..a81d9d9 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,4674 +1,2 @@ -module.exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./forum.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./forum.js": -/*!******************!*\ - !*** ./forum.js ***! - \******************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _src_forum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/forum */ "./src/forum/index.js"); -/* empty/unused harmony star reexport */ - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! - \*******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _defineProperty; }); -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/extends.js": -/*!************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***! - \************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _extends; }); -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! - \******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _inheritsLoose; }); -function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; -} - -/***/ }), - -/***/ "./src/forum/addChatPage.js": -/*!**********************************!*\ - !*** ./src/forum/addChatPage.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return addChatPage; }); -/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); -/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/IndexPage */ "flarum/components/IndexPage"); -/* harmony import */ var flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/LinkButton */ "flarum/components/LinkButton"); -/* harmony import */ var flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _components_ChatPage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/ChatPage */ "./src/forum/components/ChatPage.js"); - - - - -function addChatPage() { - app.routes.chat = { - path: '/chat', - component: _components_ChatPage__WEBPACK_IMPORTED_MODULE_3__["default"] - }; - Object(flarum_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_1___default.a.prototype, 'navItems', function (items) { - if (app.screen() !== 'phone') return; - items.add('chat', m(flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2___default.a, { - icon: "fas fa-comment", - href: app.route('chat') - }, app.translator.trans('xelson-chat.forum.index.chat_link')), -10); - }); -} - -/***/ }), - -/***/ "./src/forum/components/ChatAvatar.js": -/*!********************************************!*\ - !*** ./src/forum/components/ChatAvatar.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatAvatar; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2__); - - - - -var ChatAvatar = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatAvatar, _Component); - - function ChatAvatar() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatAvatar.prototype; - - _proto.oninit = function oninit(vnode) { - _Component.prototype.oninit.call(this, vnode); - - this.model = this.attrs.model; - }; - - _proto.componentAvatarPM = function componentAvatarPM() { - return m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2___default()({ - avatar: true, - image: this.model.avatarUrl() - }), - style: { - 'background-color': this.model.color(), - color: this.model.textColor(), - 'background-image': this.model.avatarUrl() ? "url(" + this.model.avatarUrl() + ")" : null - } - }, this.model.icon() ? m("i", { - "class": this.model.icon() - }) : this.model.avatarUrl() ? null : this.firstLetter(this.model.title()).toUpperCase()); - }; - - _proto.componentAvatarChannel = function componentAvatarChannel() { - return m("div", { - className: "avatar", - style: { - 'background-color': this.model.color(), - color: this.model.textColor() - } - }, this.model.icon() ? m("i", { - "class": this.model.icon() - }) : this.model.avatarUrl() ? null : this.firstLetter(this.model.title()).toUpperCase()); - }; - - _proto.view = function view(vnode) { - return this.model.type() == 1 ? this.componentAvatarChannel() : this.componentAvatarPM(); - }; - - _proto.firstLetter = function firstLetter(string) { - for (var i = 0; i < string.length; i++) { - if (this.isLetter(string[i])) return string[i]; - } - - return string[0]; - }; - - _proto.isLetter = function isLetter(c) { - return c.toLowerCase() != c.toUpperCase(); - }; - - return ChatAvatar; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatCreateModal.js": -/*!*************************************************!*\ - !*** ./src/forum/components/ChatCreateModal.js ***! - \*************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatCreateModal; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _ChatSearchUser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ChatSearchUser */ "./src/forum/components/ChatSearchUser.js"); -/* harmony import */ var _ChatModal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChatModal */ "./src/forum/components/ChatModal.js"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/utils/Stream */ "flarum/utils/Stream"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5__); - - - - - - - -var ChatCreateModal = -/*#__PURE__*/ -function (_ChatModal) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatCreateModal, _ChatModal); - - function ChatCreateModal() { - return _ChatModal.apply(this, arguments) || this; - } - - var _proto = ChatCreateModal.prototype; - - _proto.oninit = function oninit(vnode) { - _ChatModal.prototype.oninit.call(this, vnode); - - this.isChannel = false; - }; - - _proto.title = function title() { - return app.translator.trans('xelson-chat.forum.chat.list.add_modal.title'); - }; - - _proto.onsubmit = function onsubmit() { - app.store.createRecord('chats').save({ - title: this.getInput().title(), - isChannel: this.isChannel, - icon: this.getInput().icon(), - color: this.getInput().color(), - relationships: { - users: [].concat(this.getSelectedUsers(), [app.session.user]) - } - }).then(function (model) { - app.chat.addChat(model); - app.chat.onChatChanged(model); - m.redraw(); - }); - this.hide(); - }; - - _proto.componentFormInputColor = function componentFormInputColor() { - return this.componentFormColor({ - title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.label'), - desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.validator'), - stream: this.getInput().color, - placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.label') - }); - }; - - _proto.componentFormInputIcon = function componentFormInputIcon() { - return this.componentFormIcon({ - title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.icon.label'), - desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.icon.validator', { - a: m("a", { - href: "https://fontawesome.com/icons?m=free", - tabindex: "-1", - target: "blank" - }) - }), - stream: this.getInput().icon, - placeholder: 'fas fa-bolt' - }); - }; - - _proto.componentFormChat = function componentFormChat() { - return [this.usersSelected.length > 1 ? [this.componentFormInput({ - title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.chat'), - desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.validator'), - stream: this.getInput().title, - placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.chat') - }), this.componentFormInputColor(), this.componentFormInputIcon()] : null, this.componentFormUsersSelect()]; - }; - - _proto.componentFormChannel = function componentFormChannel() { - return [this.componentFormInput({ - title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.channel'), - desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.validator'), - stream: this.getInput().title, - placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.channel') - }), this.componentFormInputColor(), this.componentFormInputIcon()]; - }; - - _proto.isCanCreateChat = function isCanCreateChat() { - if (this.getSelectedUsers().length > 1 && !this.getInput().title().length) return false; - if (!this.getSelectedUsers().length) return false; - if (this.alertText()) return false; - return true; - }; - - _proto.isCanCreateChannel = function isCanCreateChannel() { - return this.getInput().title().length; - }; - - _proto.content = function content() { - var _this = this; - - return m("div", { - className: "Modal-body" - }, m("div", { - "class": "Form-group InputTitle" - }, app.chat.getPermissions().create.channel ? m("div", { - className: "ChatType" - }, m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2___default()({ - 'Tab Tab--left': true, - 'Tab--active': !this.isChannel - }), - onclick: function () { - return _this.isChannel = false; - }.bind(this) - }, app.translator.trans('xelson-chat.forum.chat.list.add_modal.chat')), m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_2___default()({ - 'Tab Tab--right': true, - 'Tab--active': this.isChannel - }), - onclick: function () { - return _this.isChannel = true; - }.bind(this) - }, app.translator.trans('xelson-chat.forum.chat.list.add_modal.channel'))) : null, this.isChannel ? this.componentFormChannel() : this.componentFormChat(), m("div", { - className: "ButtonsPadding" - }), m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_1___default.a, { - className: "Button Button--primary Button--block", - disabled: this.isChannel ? !this.isCanCreateChannel() : !this.isCanCreateChat(), - onclick: this.onsubmit.bind(this) - }, app.translator.trans('xelson-chat.forum.chat.list.add_modal.create.' + (this.isChannel ? 'channel' : 'chat'))))); - }; - - return ChatCreateModal; -}(_ChatModal__WEBPACK_IMPORTED_MODULE_4__["default"]); - - - -/***/ }), - -/***/ "./src/forum/components/ChatEditModal.js": -/*!***********************************************!*\ - !*** ./src/forum/components/ChatEditModal.js ***! - \***********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatEditModal; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/Dropdown */ "flarum/components/Dropdown"); -/* harmony import */ var flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var flarum_models_Group__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/models/Group */ "flarum/models/Group"); -/* harmony import */ var flarum_models_Group__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_models_Group__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _ChatModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ChatModal */ "./src/forum/components/ChatModal.js"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! flarum/utils/Stream */ "flarum/utils/Stream"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8__); - - - - - - - - - - -var ChatEditModal = -/*#__PURE__*/ -function (_ChatModal) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(ChatEditModal, _ChatModal); - - function ChatEditModal() { - return _ChatModal.apply(this, arguments) || this; - } - - var _proto = ChatEditModal.prototype; - - _proto.oninit = function oninit(vnode) { - var _this = this; - - _ChatModal.prototype.oninit.call(this, vnode); - - this.getInput().title = flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8___default()(this.model.title()); - this.getInput().color = flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8___default()(this.model.color()); - this.getInput().icon = flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8___default()(this.model.icon()); - this.deleteChatTitleInput = flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_8___default()(''); - this.deleteState = 0; - this.initialUsers = this.model.users().filter(function (mdl) { - return !mdl.chat_pivot(_this.model.id()).removed_at(); - }); - this.setSelectedUsers(this.model.users().filter(function (mdl) { - return !mdl.chat_pivot(_this.model.id()).removed_at(); - })); - this.edited = {}; - this.isLocalModerator = this.isModer(app.session.user); - this.isLocalLeaved = !this.initialUsers.includes(app.session.user); - }; - - _proto.title = function title() { - return app.translator.trans('xelson-chat.forum.chat.edit_modal.title'); - }; - - _proto.onsubmit = function onsubmit() { - var _this2 = this; - - var added = this.getSelectedUsers().map(function (mdl) { - return !_this2.initialUsers.includes(mdl) ? flarum_Model__WEBPACK_IMPORTED_MODULE_5___default.a.getIdentifier(mdl) : null; - }).filter(function (e) { - return e; - }); - var removed = this.initialUsers.map(function (mdl) { - return !_this2.getSelectedUsers().includes(mdl) ? flarum_Model__WEBPACK_IMPORTED_MODULE_5___default.a.getIdentifier(mdl) : null; - }).filter(function (e) { - return e; - }); - var edited = Object.keys(this.edited).map(function (k) { - return _this2.edited[k] = Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ - id: k - }, _this2.edited[k]); - }); - this.model.save({ - title: this.getInput().title(), - color: this.getInput().color(), - icon: this.getInput().icon(), - users: { - added: added, - removed: removed, - edited: edited - }, - relationships: { - users: this.getSelectedUsers() - } - }); - this.hide(); - }; - - _proto.alertText = function alertText() { - return null; - }; - - _proto.isModer = function isModer(user) { - var _ref, _this$edited$user$id; - - if (!user) return false; - if ((_ref = (_this$edited$user$id = this.edited[user.id()]) == null ? void 0 : _this$edited$user$id.role) != null ? _ref : user.chat_pivot(this.model.id()).role()) return true; - if (this.isCreator(user)) return true; - return false; - }; - - _proto.isCreator = function isCreator(user) { - return user.chat_pivot(this.model.id()).role() == 2 || !this.model.creator() && user.groups() && user.groups().some(function (g) { - return g.id() == flarum_models_Group__WEBPACK_IMPORTED_MODULE_6___default.a.ADMINISTRATOR_ID; - }); - }; - - _proto.userMentionClassname = function userMentionClassname(user) { - return flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4___default()({ - editable: true, - moder: this.isModer(user), - creator: this.isCreator(user) - }); - }; - - _proto.userMentionDropdownOnclick = function userMentionDropdownOnclick(user, button) { - switch (button) { - case 'moder': - { - if (this.isModer(user)) this.edited[user.id()] = { - role: 0 - };else this.edited[user.id()] = { - role: 1 - }; - break; - } - - case 'kick': - { - this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(user), 1); - break; - } - } - }; - - _proto.componentUserMentionDropdown = function componentUserMentionDropdown(user) { - return m(flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_3___default.a, { - buttonClassName: "Button Button--icon Button--flat Button--mention-edit", - menuClassName: "Dropdown-menu--top Dropdown-menu--bottom Dropdown-menu--left Dropdown-menu--right", - icon: "fas fa-chevron-down" - }, m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default.a, { - icon: this.isModer(user) ? 'fas fa-times' : 'fas fa-users-cog', - onclick: this.userMentionDropdownOnclick.bind(this, user, 'moder'), - disabled: user == app.session.user || !this.isCreator(app.session.user) || this.isCreator(user) - }, app.translator.trans('xelson-chat.forum.chat.moder')), m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default.a, { - icon: "fas fa-trash-alt", - onclick: this.userMentionDropdownOnclick.bind(this, user, 'kick'), - disabled: user.chat_pivot(this.model.id()).role() >= this.isLocalModerator && user != app.session.user - }, app.translator.trans("xelson-chat.forum.chat." + (user == app.session.user ? 'leave' : 'kick')))); - }; - - _proto.userMentionContent = function userMentionContent(user) { - return ['@' + user.displayName(), this.isLocalModerator && !app.chat.isChatPM(this.model) ? this.componentUserMentionDropdown(user) : null]; - }; - - _proto.userMentionOnClick = function userMentionOnClick(user, e) { - this.$(e.target).find('.Dropdown').trigger('shown.bs.dropdown'); - }; - - _proto.componentFormInputIcon = function componentFormInputIcon() { - return this.componentFormIcon({ - title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.icon.label'), - desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.icon.validator', { - a: m("a", { - href: "https://fontawesome.com/icons?m=free", - tabindex: "-1", - target: "blank" - }) - }), - stream: this.getInput().icon, - placeholder: 'fas fa-bolt' - }); - }; - - _proto.componentFormInputTitle = function componentFormInputTitle() { - return this.componentFormInput({ - title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.label'), - desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.validator'), - stream: this.getInput().title, - placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.label') - }); - }; - - _proto.componentFormInputColor = function componentFormInputColor() { - return this.componentFormColor({ - title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.label'), - desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.validator'), - stream: this.getInput().color, - placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.label') - }); - }; - - _proto.componentChatInfo = function componentChatInfo() { - return [m("label", null, m("h2", null, this.model.title())), this.componentUsersMentions()]; - }; - - _proto.componentFormPM = function componentFormPM() { - return this.componentChatInfo(); - }; - - _proto.componentFormChannel = function componentFormChannel() { - return this.isLocalModerator ? [this.componentFormInputTitle(), this.componentFormInputColor(), this.componentFormInputIcon(), this.componentFormUsersSelect('xelson-chat.forum.chat.edit_modal.form.users.edit')] : this.componentChatInfo(); - }; - - _proto.componentFormChat = function componentFormChat() { - return this.isLocalModerator ? [this.componentFormInputTitle(), this.componentFormInputColor(), this.componentFormInputIcon(), this.componentFormUsersSelect()] : this.componentChatInfo(); - }; - - _proto.componentForm = function componentForm() { - if (this.model.type()) return this.componentFormChannel(); - if (app.chat.isChatPM(this.model)) return this.componentFormPM(); - return this.componentFormChat(); - }; - - _proto.componentFormButtons = function componentFormButtons() { - var buttons = []; - if (this.isLocalModerator && !app.chat.isChatPM(this.model)) buttons.push(m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default.a, { - className: "Button Button--primary Button--block ButtonSave", - onclick: this.onsubmit.bind(this), - disabled: this.model.type() ? !this.isCanEditChannel() : !this.isCanEditChat() - }, app.translator.trans('xelson-chat.forum.chat.edit_modal.save_button'))); - buttons.push(m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default.a, { - className: "Button Button--primary Button--block ButtonLeave", - onclick: this.onleave.bind(this), - disabled: this.model.removed_by() && this.model.removed_by() != app.session.user.id() - }, app.translator.trans("xelson-chat.forum.chat.edit_modal.form." + (this.isLocalLeaved ? 'return' : 'leave')))); - if (!app.chat.isChatPM(this.model) && app.chat.getPermissions().create.channel) buttons.push(this.componentDeleteChat()); - return buttons; - }; - - _proto.onleave = function onleave() { - if (!this.isLocalLeaved) { - this.model.save({ - users: { - removed: [flarum_Model__WEBPACK_IMPORTED_MODULE_5___default.a.getIdentifier(app.session.user)] - }, - relationships: { - users: this.getSelectedUsers() - } - }).then(function (e) { - return m.redraw(); - }); - } else { - this.getSelectedUsers().push(app.session.user); - this.model.save({ - users: { - added: [flarum_Model__WEBPACK_IMPORTED_MODULE_5___default.a.getIdentifier(app.session.user)] - }, - relationships: { - users: this.getSelectedUsers() - } - }).then(function (e) { - return m.redraw(); - }); - } - - this.hide(); - }; - - _proto.isCanEditChannel = function isCanEditChannel() { - return this.getInput().title().length; - }; - - _proto.isCanEditChat = function isCanEditChat() { - if (this.alertText()) return false; - return true; - }; - - _proto.componentDeleteChat = function componentDeleteChat() { - return [this.deleteState == 1 ? [m("br", null), this.componentFormInput({ - title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.title'), - desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.desc'), - placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.placeholder'), - stream: this.deleteChatTitleInput - })] : null, m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default.a, { - className: "Button Button--primary Button--block ButtonDelete", - onclick: this.ondelete.bind(this), - disabled: this.deleteState == 1 && !this.isValidTitleCopy() - }, app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.button'))]; - }; - - _proto.isValidTitleCopy = function isValidTitleCopy() { - return this.deleteChatTitleInput() == this.model.title(); - }; - - _proto.ondelete = function ondelete() { - switch (this.deleteState) { - case 0: - { - this.deleteState = 1; - break; - } - - case 1: - { - if (this.isValidTitleCopy()) { - app.chat.deleteChat(this.model); - this.model["delete"](); - this.hide(); - } - - break; - } - } - }; - - _proto.content = function content() { - return m("div", { - className: "Modal-body" - }, m("div", { - "class": "Form-group InputTitle" - }, this.componentForm(), m("div", { - className: "ButtonsPadding" - }), this.componentFormButtons())); - }; - - return ChatEditModal; -}(_ChatModal__WEBPACK_IMPORTED_MODULE_7__["default"]); - - - -/***/ }), - -/***/ "./src/forum/components/ChatEventMessage.js": -/*!**************************************************!*\ - !*** ./src/forum/components/ChatEventMessage.js ***! - \**************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatEventMessage; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var _ChatMessage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ChatMessage */ "./src/forum/components/ChatMessage.js"); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/Link */ "flarum/components/Link"); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Link__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/utils/extractText */ "flarum/utils/extractText"); -/* harmony import */ var flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/utils/humanTime */ "flarum/utils/humanTime"); -/* harmony import */ var flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/helpers/fullTime */ "flarum/helpers/fullTime"); -/* harmony import */ var flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_5__); - - - - - - - -var ChatEventMessage = -/*#__PURE__*/ -function (_ChatMessage) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatEventMessage, _ChatMessage); - - function ChatEventMessage() { - return _ChatMessage.apply(this, arguments) || this; - } - - var _proto = ChatEventMessage.prototype; - - _proto.oninit = function oninit(vnode) { - _ChatMessage.prototype.oninit.call(this, vnode); - - if (this.model.message().split('').every(function (c) { - return c === '*'; - })) this.parsedContent = { - id: 'chatCensored' - };else this.parsedContent = JSON.parse(this.model.message()); - }; - - _proto.componentUserMention = function componentUserMention(user) { - return m(flarum_components_Link__WEBPACK_IMPORTED_MODULE_2___default.a, { - href: app.route.user(user) - }, m("span", { - className: "UserMention" - }, user.displayName())); - }; - - _proto.componentUserMentionsByIds = function componentUserMentionsByIds(ids) { - var _this = this; - - return ids.map(function (id) { - return _this.componentUserMention(app.store.getById('users', id)); - }); - }; - - _proto.componentEventText = function componentEventText() { - switch (this.parsedContent.id) { - case 'chatCensored': - { - return m("div", { - className: "censored", - title: app.translator.trans('xelson-chat.forum.chat.message.censored') - }, this.model.message()); - } - - case 'chatCreated': - { - if (!this.model.chat()) return; - - if (this.model.chat().type() == 1) { - return app.translator.trans("xelson-chat.forum.chat.message.events.channel.created", { - creatorname: this.componentUserMention(this.model.user()), - chatname: m("b", { - className: "chat-title" - }, this.model.chat().title()) - }); - } else { - if (this.model.chat().type() == 0 && this.model.chat().users().length <= 2) { - return app.translator.trans("xelson-chat.forum.chat.message.events.pm.created", { - creatorname: this.componentUserMention(this.model.chat().creator()), - username: this.parsedContent.users.length ? this.componentUserMention(app.store.getById('users', this.parsedContent.users[0])) : null - }); - } - - return app.translator.trans("xelson-chat.forum.chat.message.events.chat.created", { - creatorname: this.componentUserMention(this.model.user()), - chatname: m("b", { - className: "chat-title" - }, this.model.chat().title()), - usernames: this.componentUserMentionsByIds(this.parsedContent.users), - username: this.parsedContent.users.length ? this.componentUserMention(app.store.getById('users', this.parsedContent.users[0])) : null - }); - } - } - - case 'chatEdited': - { - var componentOld, componentNew; - - switch (this.parsedContent.column) { - case 'title': - componentOld = m("b", { - className: "chat-title" - }, this.parsedContent.old); - componentNew = m("b", { - className: "chat-title" - }, this.parsedContent["new"]); - break; - - case 'color': - componentOld = m("i", { - className: "fas fa-circle", - style: { - color: this.parsedContent.old - } - }); - componentNew = m("i", { - className: "fas fa-circle", - style: { - color: this.parsedContent["new"] - } - }); - break; - - case 'icon': - componentOld = this.parsedContent.old ? m("i", { - className: this.parsedContent.old - }) : m("b", null, "[nothing]"); - componentNew = m("i", { - className: this.parsedContent["new"] - }); - break; - } - - return app.translator.trans("xelson-chat.forum.chat.message.events." + this.parsedContent.column + ".edited", { - editorname: this.componentUserMention(this.model.user()), - old: componentOld, - "new": componentNew - }); - } - - case 'chatAddRemoveUser': - { - if (this.parsedContent.add.length && this.parsedContent.remove.length) { - return app.translator.trans('xelson-chat.forum.chat.message.events.users.invited_kicked', { - editorname: this.componentUserMention(this.model.user()), - invitednames: this.componentUserMentionsByIds(this.parsedContent.add), - kickednames: this.componentUserMentionsByIds(this.parsedContent.remove) - }); - } else if (this.parsedContent.add.length) { - if (this.parsedContent.add[0] == this.model.user().id()) { - return app.translator.trans('xelson-chat.forum.chat.message.events.self.entered', { - username: this.componentUserMention(this.model.user()) - }); - } else { - return app.translator.trans('xelson-chat.forum.chat.message.events.users.invited', { - editorname: this.componentUserMention(this.model.user()), - usernames: this.componentUserMentionsByIds(this.parsedContent.add) - }); - } - } else if (this.parsedContent.remove.length) { - if (this.parsedContent.remove[0] == this.model.user().id()) { - return app.translator.trans('xelson-chat.forum.chat.message.events.self.leaved', { - username: this.componentUserMention(this.model.user()) - }); - } else { - return app.translator.trans('xelson-chat.forum.chat.message.events.users.kicked', { - editorname: this.componentUserMention(this.model.user()), - usernames: this.componentUserMentionsByIds(this.parsedContent.remove) - }); - } - } - } - } - }; - - _proto.content = function content() { - return m("div", { - className: "event" - }, this.componentEventText(), m("a", { - className: "timestamp", - title: flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_3___default()(flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_5___default()(this.model.created_at())) - }, this.humanTime = flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_4___default()(this.model.created_at()))); - }; - - return ChatEventMessage; -}(_ChatMessage__WEBPACK_IMPORTED_MODULE_1__["default"]); - - - -/***/ }), - -/***/ "./src/forum/components/ChatFrame.js": -/*!*******************************************!*\ - !*** ./src/forum/components/ChatFrame.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatFrame; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/LoadingIndicator */ "flarum/components/LoadingIndicator"); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _ChatHeader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ChatHeader */ "./src/forum/components/ChatHeader.js"); -/* harmony import */ var _ChatList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChatList */ "./src/forum/components/ChatList.js"); -/* harmony import */ var _ChatPage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ChatPage */ "./src/forum/components/ChatPage.js"); -/* harmony import */ var _ChatViewport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ChatViewport */ "./src/forum/components/ChatViewport.js"); - - - - - - - - -var ChatFrame = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatFrame, _Component); - - function ChatFrame() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatFrame.prototype; - - _proto.oninit = function oninit(vnode) { - _Component.prototype.oninit.call(this, vnode); - - document.addEventListener('mousedown', this.chatMoveListener.bind(this, 'mousedown')); - document.addEventListener('mouseup', this.chatMoveListener.bind(this, 'mouseup')); - }; - - _proto.oncreate = function oncreate(vnode) { - _Component.prototype.oncreate.call(this, vnode); - }; - - _proto.calcHeight = function calcHeight() { - if (!app.chat.getFrameState('beingShown')) { - return '30px'; - } else if (app.screen() !== 'phone') { - return app.chat.getFrameState('transform').y + 'px'; - } else { - return '70vh'; - } - }; - - _proto.view = function view(vnode) { - if (app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_5__["default"])) return; - var style = { - right: app.chat.getFrameState('transform').x + 'px', - height: this.calcHeight() - }; - return m("div", { - className: 'NeonChatFrame ' + (app.chat.getFrameState('beingShown') ? '' : 'hidden'), - style: style - }, m("div", { - tabindex: "0", - className: "frame", - id: "chat" - }, m(_ChatList__WEBPACK_IMPORTED_MODULE_4__["default"], null), m("div", { - id: "chat-panel" - }, m(_ChatHeader__WEBPACK_IMPORTED_MODULE_3__["default"], { - ondragstart: function ondragstart() { - return false; - }, - onmousedown: this.chatHeaderOnMouseDown.bind(this), - inFrame: true - }), app.chat.chatsLoading ? m(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2___default.a, null) : m(_ChatViewport__WEBPACK_IMPORTED_MODULE_6__["default"], { - chatModel: app.chat.getCurrentChat() - })))); - }; - - _proto.chatHeaderOnMouseDown = function chatHeaderOnMouseDown(e) { - if (e.button !== 0) return; - var path = e.path || e.composedPath && e.composedPath(); - - if (path) { - for (var i = 0, el; i < path.length; i++) { - el = path[i]; - if (el.classList && el.classList.contains('icon')) return; - } - } - - if (!this.chatMoveStart(e)) { - e.stopPropagation(); - e.preventDefault(); - } - }; - - _proto.chatMoveListener = function chatMoveListener(event, e) { - switch (event) { - case 'mouseup': - { - if (this.chatMoving) this.chatMoveEnd(e); - break; - } - } - }; - - _proto.chatMoveStart = function chatMoveStart(e) { - if (!app.chat.getFrameState('beingShown')) return; - this.chatMoving = true; - this.mouseMoveEvent = this.chatMoveProcess.bind(this); - this.moveLast = { - x: e.clientX, - y: e.clientY - }; - document.addEventListener('mousemove', this.mouseMoveEvent); - document.body.classList.add('moving'); - return false; - }; - - _proto.chatMoveEnd = function chatMoveEnd(e) { - this.chatMoving = false; - document.removeEventListener('mousemove', this.mouseMoveEvent); - document.body.classList.remove('moving'); - - if (!app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_5__["default"])) { - app.chat.saveFrameState('transform', { - x: parseInt(this.element.style.right), - y: this.element.offsetHeight || 400 - }); - } - }; - - _proto.chatMoveProcess = function chatMoveProcess(e) { - var move = { - x: e.clientX - this.moveLast.x, - y: e.clientY - this.moveLast.y - }; - var right = parseInt(this.element.style.right) || 0; - var nextPos = { - x: right - move.x, - y: this.element.offsetHeight - move.y - }; - if (nextPos.x < window.innerWidth - this.element.querySelector('#chat').offsetWidth && move.x < 0 || nextPos.x > 0 && move.x > 0) this.element.style.right = nextPos.x + 'px'; - - if (this.element.querySelector('.ChatHeader').clientHeight < nextPos.y && nextPos.y < window.innerHeight - 100) { - this.element.style.height = nextPos.y + 'px'; - } - - this.moveLast = { - x: e.clientX, - y: e.clientY - }; - }; - - return ChatFrame; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatHeader.js": -/*!********************************************!*\ - !*** ./src/forum/components/ChatHeader.js ***! - \********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatHeader; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/Link */ "flarum/components/Link"); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Link__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/utils/ItemList */ "flarum/utils/ItemList"); -/* harmony import */ var flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _ChatEditModal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ChatEditModal */ "./src/forum/components/ChatEditModal.js"); - - - - - - - -var ChatHeader = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(ChatHeader, _Component); - - function ChatHeader() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatHeader.prototype; - - _proto.view = function view(vnode) { - var _this = this; - - var attrs = {}; - if (this.attrs.ondragstart) attrs.ondragstart = this.attrs.ondragstart; - if (this.attrs.ondragstart) attrs.onmousedown = this.attrs.onmousedown; - return m("div", Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ - className: "ChatHeader" - }, attrs), this.attrs.showChatListStream ? m("div", { - className: "icon", - onclick: function onclick(e) { - _this.attrs.showChatListStream(!_this.attrs.showChatListStream()); - - e.stopPropagation(); - } - }, m("i", { - className: "fas fa-list" - })) : '', m("h2", null, app.chat.getCurrentChat() ? [app.chat.getCurrentChat().icon() ? m("i", { - "class": app.chat.getCurrentChat().icon(), - style: { - color: app.chat.getCurrentChat().color(), - 'margin-right': '3px' - } - }) : null, app.chat.getCurrentChat().title()] : app.translator.trans('xelson-chat.forum.toolbar.title')), !app.chat.getCurrentChat() || !app.session.user ? null : m("div", { - className: "icon", - "data-title": app.translator.trans('xelson-chat.forum.toolbar.chat.settings'), - onclick: function onclick() { - return app.modal.show(_ChatEditModal__WEBPACK_IMPORTED_MODULE_5__["default"], { - model: app.chat.getCurrentChat() - }); - } - }, m("i", { - className: "fas fa-cog" - })), m("div", { - className: "window-buttons" - }, this.windowButtonItems().toArray())); - }; - - _proto.windowButtonItems = function windowButtonItems() { - var items = new flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_4___default.a(); - items.add('sound', m("div", { - className: "icon", - onclick: this.toggleSound.bind(this), - "data-title": app.translator.trans('xelson-chat.forum.toolbar.' + (app.chat.getFrameState('isMuted') ? 'enable_sounds' : 'disable_sounds')) - }, m("i", { - className: app.chat.getFrameState('isMuted') ? 'fas fa-volume-mute' : 'fas fa-volume-up' - }))); - items.add('notifications', m("div", { - className: "icon", - onclick: this.toggleNotifications.bind(this), - "data-title": app.translator.trans('xelson-chat.forum.toolbar.' + (app.chat.getFrameState('notify') ? 'disable_notifications' : 'enable_notifications')) - }, m("i", { - className: app.chat.getFrameState('notify') ? 'fas fa-bell' : 'fas fa-bell-slash' - }))); - - if (this.attrs.inFrame) { - items.add('minimize', m("div", { - className: "icon", - onclick: this.toggleChat.bind(this), - "data-title": app.translator.trans('xelson-chat.forum.toolbar.' + (app.chat.getFrameState('beingShown') ? 'minimize' : 'maximize')) - }, m("i", { - className: app.chat.getFrameState('beingShown') ? 'fas fa-window-minimize' : 'fas fa-window-maximize' - }))); - } - /* - if (this.attrs.inFrame && app.screen() === 'phone') { - items.add( - 'fullscreen', - - - - ); - } - */ - - - return items; - }; - - _proto.toggleChat = function toggleChat(e) { - var showing = !app.chat.getFrameState('beingShown'); - app.chat.saveFrameState('beingShown', showing); - e.preventDefault(); - e.stopPropagation(); - }; - - _proto.toggleSound = function toggleSound(e) { - app.chat.saveFrameState('isMuted', !app.chat.getFrameState('isMuted')); - e.preventDefault(); - e.stopPropagation(); - }; - - _proto.toggleNotifications = function toggleNotifications(e) { - app.chat.saveFrameState('notify', !app.chat.getFrameState('notify')); - if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission(); - e.preventDefault(); - e.stopPropagation(); - }; - - return ChatHeader; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_2___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatInput.js": -/*!*******************************************!*\ - !*** ./src/forum/components/ChatInput.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatInput; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _ChatEditModal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChatEditModal */ "./src/forum/components/ChatEditModal.js"); -/* harmony import */ var flarum_utils_throttleDebounce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/utils/throttleDebounce */ "flarum/utils/throttleDebounce"); -/* harmony import */ var flarum_utils_throttleDebounce__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_throttleDebounce__WEBPACK_IMPORTED_MODULE_5__); - - - - - - - -var ChatInput = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(ChatInput, _Component); - - function ChatInput() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatInput.prototype; - - _proto.oninit = function oninit(vnode) { - var _app$forum$attribute; - - _Component.prototype.oninit.call(this, vnode); - - this.model = this.attrs.model; - this.state = this.attrs.state; - app.chat.input = this; - this.messageCharLimit = (_app$forum$attribute = app.forum.attribute('xelson-chat.settings.charlimit')) != null ? _app$forum$attribute : 512; - this.updatePlaceholder(); - }; - - _proto.oncreate = function oncreate(vnode) { - _Component.prototype.oncreate.call(this, vnode); - - var inputState = this.state.input; - var input = this.$('#chat-input')[0]; - input.lineHeight = parseInt(window.getComputedStyle(input).getPropertyValue('line-height')); - inputState.element = input; - - if (inputState.content().length) { - this.inputProcess({ - target: input - }); - } - - this.updateLimit(); - }; - - _proto.onbeforeupdate = function onbeforeupdate(vnode, old) { - _Component.prototype.onbeforeupdate.call(this, vnode, old); - - if (this.model !== this.attrs.model) { - this.model = this.attrs.model; - this.state = this.attrs.state; - } - - this.updatePlaceholder(); - }; - - _proto.updatePlaceholder = function updatePlaceholder() { - if (!app.session.user) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.unauthenticated');else if (!app.chat.getPermissions().post) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.chatdenied');else if (this.model.removed_at()) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.removed');else this.inputPlaceholder = app.translator.trans('xelson-chat.forum.chat.placeholder'); - }; - - _proto.view = function view() { - var _this = this; - - return m("div", { - className: "ChatInput input-wrapper" - }, m("textarea", { - id: "chat-input", - maxlength: this.messageCharLimit, - disabled: !app.chat.getPermissions().post || this.model.removed_at(), - placeholder: this.inputPlaceholder, - onkeypress: this.inputPressEnter.bind(this), - oninput: this.inputProcess.bind(this), - onpaste: this.inputProcess.bind(this), - onkeyup: this.inputSaveDraft.bind(this), - rows: this.state.input.rows, - value: this.state.input.content(), - onupdate: function onupdate() { - return _this.saveDraft.apply(_this); - } - }), this.state.messageEditing ? m("div", { - className: "icon edit", - onclick: this.state.messageEditEnd.bind(this.state) - }, m("i", { - "class": "fas fa-times" - })) : null, this.model.removed_at() && this.model.removed_by() === parseInt(app.session.user.id()) ? m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_3___default.a, { - className: "Button Button--primary ButtonRejoin", - onclick: function onclick() { - return app.modal.show(_ChatEditModal__WEBPACK_IMPORTED_MODULE_4__["default"], { - model: _this.model - }); - } - }, app.translator.trans('xelson-chat.forum.chat.rejoin')) : [m("div", { - className: "icon send", - onclick: this.inputPressButton.bind(this) - }, m("i", { - "class": "fas fa-angle-double-right" - })), m("div", { - id: "chat-limiter" - })]); - }; - - _proto.updateLimit = function updateLimit() { - var limiter = this.element.querySelector('#chat-limiter'); - if (!limiter) return; - var charsTyped = this.messageCharLimit - (this.state.input.messageLength || 0); - limiter.innerText = charsTyped + '/' + this.messageCharLimit; - limiter.className = charsTyped < 100 ? 'reaching-limit' : ''; - }; - - _proto.saveDraft = function saveDraft(text) { - var _this2 = this; - - if (text === void 0) { - text = this.state.input.content(); - } - - this.state.input.lastDraft != text && Object(flarum_utils_throttleDebounce__WEBPACK_IMPORTED_MODULE_5__["throttle"])(300, function () { - _this2.state.setChatStorageValue('draft', text); - })(); - this.state.input.lastDraft = text; - }; - - _proto.inputSaveDraft = function inputSaveDraft(e) { - if (e) e.redraw = false; - var input = e.target; - this.saveDraft(input.value.trim()); - }; - - _proto.resizeInput = function resizeInput() { - var input = this.state.input.element; - input.rows = 1; - this.state.input.rows = Math.min(input.scrollHeight / input.lineHeight, app.screen() === 'phone' ? 2 : 5); - input.rows = this.state.input.rows; - }; - - _proto.inputProcess = function inputProcess(e) { - if (e) e.redraw = false; - var input = e.target; - this.state.input.content(input.value); - var inputValue = input.value.trim(); - this.state.input.messageLength = inputValue.length; - this.updateLimit(); - this.resizeInput(); - - if (this.state.input.messageLength) { - if (!this.state.input.writingPreview && !this.state.messageEditing) this.inputPreviewStart(inputValue); - } else { - if (this.state.input.writingPreview && !inputValue.length) this.inputPreviewEnd(); - } - - if (this.state.messageEditing) this.state.messageEditing.content = inputValue;else if (this.state.input.writingPreview) this.state.input.previewModel.content = inputValue; - if (this.attrs.oninput) this.attrs.oninput(e); - }; - - _proto.inputPressEnter = function inputPressEnter(e) { - e.redraw = false; - - if (e.keyCode == 13 && !e.shiftKey) { - this.state.messageSend(); - return false; - } - - return true; - }; - - _proto.inputPressButton = function inputPressButton() { - this.state.messageSend(); - }; - - _proto.inputPreviewStart = function inputPreviewStart(content) { - if (!this.state.input.writingPreview) { - this.state.input.writingPreview = true; - this.state.input.previewModel = app.store.createRecord('chatmessages'); - this.state.input.previewModel.pushData({ - id: 0, - attributes: { - message: ' ', - created_at: 0 - }, - relationships: { - user: app.session.user, - chat: this.model - } - }); - - Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])(this.state.input.previewModel, { - isEditing: true, - isNeedToFlash: true, - content: content - }); - } else this.state.input.previewModel.isNeedToFlash = true; - - m.redraw(); - }; - - _proto.inputPreviewEnd = function inputPreviewEnd() { - this.state.input.writingPreview = false; - m.redraw(); - }; - - return ChatInput; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_2___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatList.js": -/*!******************************************!*\ - !*** ./src/forum/components/ChatList.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatFrame; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _ChatCreateModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ChatCreateModal */ "./src/forum/components/ChatCreateModal.js"); -/* harmony import */ var _ChatPreview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ChatPreview */ "./src/forum/components/ChatPreview.js"); - - - - - -var ChatFrame = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatFrame, _Component); - - function ChatFrame() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatFrame.prototype; - - _proto.view = function view(vnode) { - var classes = ['ChatList']; - if (app.chat.getFrameState('beingShownChatsList') || this.attrs.inPage) classes.push('toggled'); - return m("div", { - className: classes.join(' ') - }, m("div", { - className: "header" - }, m("div", { - className: "input-wrapper input--down" - }, m("input", { - id: "chat-find", - bidi: app.chat.q, - placeholder: app.translator.trans('xelson-chat.forum.chat.list.placeholder') - })), this.attrs.inPage ? '' : m("div", { - className: "ToggleButton icon icon-toggle", - onclick: this.toggleChatsList.bind(this), - "data-title": app.translator.trans('xelson-chat.forum.chat.list.' + (app.chat.getFrameState('beingShownChatsList') ? 'unpin' : 'pin')) - }, m("i", { - className: "fas fa-paperclip" - }))), m("div", { - className: "list" - }, app.chat.getChatsSortedByLastUpdate().map(function (model) { - return m("div", { - onclick: app.chat.onChatChanged.bind(app.chat, model) - }, m(_ChatPreview__WEBPACK_IMPORTED_MODULE_3__["default"], { - key: model.id(), - model: model - })); - }), app.session.user && app.chat.getPermissions().create.chat ? m("div", { - "class": "panel-add", - onclick: function onclick() { - return app.modal.show(_ChatCreateModal__WEBPACK_IMPORTED_MODULE_2__["default"]); - } - }) : null)); - }; - - _proto.content = function content() { - var _this = this; - - return app.chat.getChatsSortedByLastUpdate().map(function (model) { - return m("div", { - onclick: _this.onChatChanged.bind(_this, model) - }, m(_ChatPreview__WEBPACK_IMPORTED_MODULE_3__["default"], { - key: model.id(), - model: model - })); - }); - }; - - _proto.getChatsListPanel = function getChatsListPanel() { - return document.querySelector('.ChatList'); - }; - - _proto.getChatsList = function getChatsList() { - return document.querySelector('.ChatList .list'); - }; - - _proto.toggleChatsList = function toggleChatsList(e) { - var chatLists = this.getChatsListPanel(); - var showing = true; - - if (chatLists.classList.contains('toggled')) { - chatLists.classList.remove('toggled'); - showing = false; - } else chatLists.classList.add('toggled'); - - app.chat.saveFrameState('beingShownChatsList', showing); - }; - - return ChatFrame; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatMessage.js": -/*!*********************************************!*\ - !*** ./src/forum/components/ChatMessage.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatMessage; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/helpers/avatar */ "flarum/helpers/avatar"); -/* harmony import */ var flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_helpers_username__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/helpers/username */ "flarum/helpers/username"); -/* harmony import */ var flarum_helpers_username__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_username__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/helpers/fullTime */ "flarum/helpers/fullTime"); -/* harmony import */ var flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/utils/humanTime */ "flarum/utils/humanTime"); -/* harmony import */ var flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! flarum/utils/extractText */ "flarum/utils/extractText"); -/* harmony import */ var flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! flarum/utils/ItemList */ "flarum/utils/ItemList"); -/* harmony import */ var flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! flarum/utils/SubtreeRetainer */ "flarum/utils/SubtreeRetainer"); -/* harmony import */ var flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! flarum/components/Dropdown */ "flarum/components/Dropdown"); -/* harmony import */ var flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); -/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var flarum_components_Separator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! flarum/components/Separator */ "flarum/components/Separator"); -/* harmony import */ var flarum_components_Separator__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Separator__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! flarum/components/Link */ "flarum/components/Link"); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Link__WEBPACK_IMPORTED_MODULE_13__); - - - - - - - - - - - - - - - -var ChatMessage = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatMessage, _Component); - - function ChatMessage() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatMessage.prototype; - - _proto.oninit = function oninit(vnode) { - var _this = this; - - _Component.prototype.oninit.call(this, vnode); - - this.labels = []; - this.model = this.attrs.model; - if (!this.model.content) this.model.content = this.model.message(); - this.initLabels(); - this.subtree = new flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_9___default.a(function () { - return _this.model.freshness; - }, function () { - return _this.model.user().freshness; - }, function () { - return app.chat.getCurrentChat(); - }, // Reactive attrs - function () { - return _this.model.content; - }, function () { - return _this.model.isDeletedForever; - }, function () { - return _this.model.isTimedOut; - }, function () { - return _this.model.isEditing; - }, function () { - return _this.model.isNeedToFlash; - }); - }; - - _proto.modelEvent = function modelEvent(name) { - var viewportState = app.chat.getViewportState(this.model.chat()); - viewportState.onChatMessageClicked(name, this.model); - app.chat.onChatMessageClicked(name, this.model); - }; - - _proto.onbeforeupdate = function onbeforeupdate(vnode) { - _Component.prototype.onbeforeupdate.call(this, vnode); - - this.model = this.attrs.model; - return this.subtree.needsRebuild(); - }; - - _proto.content = function content() { - return m("div", null, this.model.user() ? m(flarum_components_Link__WEBPACK_IMPORTED_MODULE_13___default.a, { - className: "avatar-wrapper", - href: app.route.user(this.model.user()) - }, m("span", null, flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_2___default()(this.model.user(), { - className: 'avatar' - }))) : m("div", { - className: "avatar-wrapper" - }, m("span", null, flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_2___default()(this.model.user(), { - className: 'avatar' - }))), m("div", { - className: "message-block" - }, m("div", { - className: "toolbar" - }, m("a", { - className: "name", - onclick: this.modelEvent.bind(this, 'insertMention') - }, flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_7___default()(flarum_helpers_username__WEBPACK_IMPORTED_MODULE_3___default()(this.model.user())) + ': '), m("div", { - className: "labels" - }, this.labels.map(function (label) { - return label.condition() ? label.component() : null; - })), m("div", { - className: "right" - }, this.model.id() ? [this.model.isDeletedForever ? null : this.editDropDown(), m("a", { - className: "timestamp", - title: flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_7___default()(flarum_helpers_fullTime__WEBPACK_IMPORTED_MODULE_4___default()(this.model.created_at())) - }, this.humanTime = flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_6___default()(this.model.created_at()))] : this.model.isTimedOut ? this.editDropDownTimedOut() : null)), m("div", { - className: "message" - }, this.model.is_censored() ? m("div", { - className: "censored actualMessage", - title: app.translator.trans('xelson-chat.forum.chat.message.censored') - }, this.model.content) : m("div", { - className: "actualMessage", - oncreate: this.onContentWrapperCreated.bind(this), - onupdate: this.onContentWrapperUpdated.bind(this) - }, this.model.content)))); - }; - - _proto.view = function view(vnode) { - return m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_5___default()({ - 'message-wrapper': true, - hidden: this.model.deleted_by(), - editing: this.model.isEditing, - deleted: !this.isVisible() - }), - "data-id": this.model.id() - }, this.model ? this.content() : null); - }; - - _proto.initLabels = function initLabels() { - var _this2 = this; - - this.labelBind(function () { - return _this2.model.edited_at(); - }, function () { - return m("div", { - "class": "icon", - title: flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_7___default()(app.translator.trans('core.forum.post.edited_tooltip', { - user: _this2.model.user(), - ago: flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_6___default()(_this2.model.edited_at()) - })) - }, m("i", { - "class": "fas fa-pencil-alt" - })); - }); - this.labelBind(function () { - return _this2.model.deleted_by(); - }, function () { - return m("div", { - "class": "icon" - }, m("i", { - "class": "fas fa-trash-alt" - }), ' ', m("span", null, "(" + app.translator.trans('xelson-chat.forum.chat.message.deleted' + (_this2.model.isDeletedForever ? '_forever' : '')), ' ', flarum_helpers_username__WEBPACK_IMPORTED_MODULE_3___default()(_this2.model.deleted_by()), ')')); - }); - this.labelBind(function () { - return _this2.model.isTimedOut; - }, function () { - return m("div", { - "class": "icon", - style: "color: #ff4063" - }, m("i", { - "class": "fas fa-exclamation-circle" - })); - }); - }; - - _proto.labelBind = function labelBind(condition, component) { - this.labels.push({ - condition: condition, - component: component - }); - }; - - _proto.editDropDown = function editDropDown() { - var items = new flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_8___default.a(); - - if (app.chat.getPermissions().edit && this.model.user() && this.model.user() == app.session.user) { - items.add('dropdownEditStart', m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default.a, { - onclick: this.modelEvent.bind(this, 'dropdownEditStart'), - icon: "fas fa-pencil-alt", - disabled: this.model.deleted_by() || this.model.isEditing - }, app.translator.trans('core.forum.post_controls.edit_button'))); - } - - items.add('separator', m(flarum_components_Separator__WEBPACK_IMPORTED_MODULE_12___default.a, null)); - - if (this.model.chat().role() || app.chat.getPermissions()["delete"] && this.model.user() == app.session.user) { - if (this.model.deleted_by()) { - items.add('dropdownRestore', m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default.a, { - onclick: this.modelEvent.bind(this, 'dropdownRestore'), - icon: "fas fa-reply", - disabled: !app.chat.getPermissions().moderate["delete"] && this.model.deleted_by() != app.session.user - }, app.translator.trans('core.forum.post_controls.restore_button'))); - } else { - items.add('dropdownHide', m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default.a, { - onclick: this.modelEvent.bind(this, 'dropdownHide'), - icon: "fas fa-trash-alt", - disabled: this.model.isEditing - }, app.translator.trans('core.forum.post_controls.delete_button'))); - } - } - - if (this.model.chat().role() && (this.model.deleted_by() || app.chat.totalHidden() >= 3)) { - items.add('dropdownDelete', m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default.a, { - onclick: this.modelEvent.bind(this, 'dropdownDelete'), - icon: "fas fa-trash-alt", - disabled: !app.chat.getPermissions()["delete"] - }, app.translator.trans('core.forum.post_controls.delete_forever_button'))); - } - - return Object.keys(items.items).length <= 1 ? null : m("div", { - className: "edit" - }, m(flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_10___default.a, { - buttonClassName: "Button Button--icon Button--flat", - menuClassName: "Dropdown-menu Dropdown-menu--top Dropdown-menu--bottom Dropdown-menu--left Dropdown-menu--right", - icon: "fas fa-ellipsis-h" - }, items.toArray())); - }; - - _proto.editDropDownTimedOut = function editDropDownTimedOut() { - return m("div", { - className: "edit" - }, m(flarum_components_Dropdown__WEBPACK_IMPORTED_MODULE_10___default.a, { - buttonClassName: "Button Button--icon Button--flat", - menuClassName: "Dropdown-menu--top Dropdown-menu--bottom Dropdown-menu--left Dropdown-menu--right", - icon: "fas fa-ellipsis-h" - }, m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default.a, { - onclick: this.modelEvent.bind(this, 'dropdownDelete'), - icon: "fas fa-trash-alt" - }, app.translator.trans('xelson-chat.forum.chat.message.actions.hide')), m(flarum_components_Button__WEBPACK_IMPORTED_MODULE_11___default.a, { - onclick: this.modelEvent.bind(this, 'dropdownResend'), - icon: "fas fa-reply" - }, app.translator.trans('xelson-chat.forum.chat.message.actions.resend')))); - }; - - _proto.oncreate = function oncreate(vnode) { - var _this3 = this; - - _Component.prototype.oncreate.call(this, vnode); - - this.messageWrapper = vnode.dom; - this.pollInterval = setInterval(function () { - _this3.renderMessage(); - }, 100); - }; - - _proto.onremove = function onremove(vnode) { - _Component.prototype.onremove.call(this, vnode); - - clearInterval(this.pollInterval); - }; - - _proto.onContentWrapperUpdated = function onContentWrapperUpdated(vnode) { - _Component.prototype.onupdate.call(this, vnode); - - this.renderMessage(vnode.dom); - }; - - _proto.onContentWrapperCreated = function onContentWrapperCreated(vnode) { - _Component.prototype.oncreate.call(this, vnode); - - this.renderMessage(vnode.dom); - }; - - _proto.renderMessage = function renderMessage() { - if (this.model.isNeedToFlash) { - app.chat.flashItem($(this.messageWrapper)); - this.model.isNeedToFlash = false; - } - - if (this.model.content !== this.oldContent) { - this.oldContent = this.model.content; - app.chat.renderChatMessage(this.model, this.model.content); - } - }; - - _proto.isVisible = function isVisible() { - if (this.model.chat() != app.chat.getCurrentChat()) return false; - if (this.model.isDeletedForever) return false; - if (this.model.deleted_by() && !(this.model.chat().role() || this.model.user() == app.session.user)) return false; - return true; - }; - - return ChatMessage; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatModal.js": -/*!*******************************************!*\ - !*** ./src/forum/components/ChatModal.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatModal; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_components_Modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/Modal */ "flarum/components/Modal"); -/* harmony import */ var flarum_components_Modal__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Modal__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _ChatSearchUser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ChatSearchUser */ "./src/forum/components/ChatSearchUser.js"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/utils/Stream */ "flarum/utils/Stream"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _resources__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../resources */ "./src/forum/resources.js"); -/* harmony import */ var flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/helpers/highlight */ "flarum/helpers/highlight"); -/* harmony import */ var flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_6__); - - - - - - - - -var ChatModal = -/*#__PURE__*/ -function (_Modal) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatModal, _Modal); - - function ChatModal() { - return _Modal.apply(this, arguments) || this; - } - - var _proto = ChatModal.prototype; - - _proto.oninit = function oninit(vnode) { - _Modal.prototype.oninit.call(this, vnode); - - this.model = this.attrs.model; - app.search.neonchat = { - usersSelected: [] - }; - this.usersSelected = app.search.neonchat.usersSelected; - this.input = { - title: flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_3___default()(''), - color: flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_3___default()(''), - icon: flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_3___default()(''), - iconState: { - matches: [], - lastInput: null - } - }; - }; - - _proto.onremove = function onremove(vnode) { - _Modal.prototype.onremove.call(this, vnode); - - app.search.neonchat = null; - }; - - _proto.getInput = function getInput() { - return this.input; - }; - - _proto.setSelectedUsers = function setSelectedUsers(users) { - app.search.neonchat.usersSelected = users; - this.usersSelected = app.search.neonchat.usersSelected; - }; - - _proto.getSelectedUsers = function getSelectedUsers() { - return this.usersSelected; - }; - - _proto.className = function className() { - return 'ChatModal Modal--small'; - }; - - _proto.isChatExists = function isChatExists() { - return this.getSelectedUsers().length === 1 && app.chat.isExistsPMChat(app.session.user, this.getSelectedUsers()[0]); - }; - - _proto.alertText = function alertText() { - if (this.isChatExists()) return app.translator.trans('xelson-chat.forum.chat.list.add_modal.alerts.exists'); - return null; - }; - - _proto.componentAlert = function componentAlert() { - return !this.alertText() ? null : m("div", { - className: "Alert" - }, this.alertText()); - }; - - _proto.componentFormUsersSelect = function componentFormUsersSelect(label) { - if (label === void 0) { - label = 'xelson-chat.forum.chat.list.add_modal.form.users'; - } - - return [m("label", null, app.translator.trans(label)), this.componentUsersSelect()]; - }; - - _proto.userMentionContent = function userMentionContent(user) { - return '@' + user.displayName(); - }; - - _proto.userMentionClassname = function userMentionClassname(user) { - return 'deletable'; - }; - - _proto.userMentionOnClick = function userMentionOnClick(event, user) { - return this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(user), 1); - }; - - _proto.componentUsersMentions = function componentUsersMentions() { - var _this = this; - - return m("div", { - className: "UsersTags" - }, this.getSelectedUsers().map(function (u) { - return m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4___default()(['UserMention', _this.userMentionClassname(u)]), - onclick: _this.userMentionOnClick.bind(_this, u) - }, _this.userMentionContent(u)); - })); - }; - - _proto.componentUsersSelect = function componentUsersSelect() { - return [this.componentAlert(), this.componentUsersMentions(), m("div", { - className: "UsersSearch" - }, m(_ChatSearchUser__WEBPACK_IMPORTED_MODULE_2__["default"], { - state: app.search - }))]; - }; - - _proto.componentFormIcon = function componentFormIcon(options) { - var _this2 = this, - _this$input$icon; - - return [options.title ? m("label", null, options.title) : null, m("div", { - className: "IconSearch" - }, options.desc ? m("label", null, options.desc) : null, m("div", { - className: "Icon-Input IconSearchResult" - }, m("input", { - "class": "FormControl", - type: "text", - bidi: options.stream, - placeholder: options.placeholder, - onupdate: this.formInputOnUpdate.bind(this), - onfocus: function onfocus() { - return _this2.inputIconHasFocus = true; - }, - onclick: function onclick() { - return _this2.inputIconHasFocus = true; - }, - onkeypress: function onkeypress(e) { - return _this2.inputIconHasFocus = !(e.keyCode == 13); - } - }), m("icon", { - className: "Chat-FullColor" - }, m("i", { - className: ((_this$input$icon = this.input.icon()) == null ? void 0 : _this$input$icon.length) ? this.input.icon() : 'fas fa-bolt' - })), this.inputIconHasFocus ? this.dropdownIconMatches(this.input.icon()) : null))]; - }; - - _proto.componentFormColor = function componentFormColor(options) { - return [options.title ? m("label", null, options.title) : null, m("div", null, options.desc ? m("label", null, options.desc) : null, m("div", { - className: "Color-Input" - }, m("input", { - "class": "FormControl", - type: "text", - bidi: options.stream, - placeholder: options.placeholder, - onupdate: this.formInputOnUpdate.bind(this) - }), m("color", { - className: "Chat-FullColor" - })))]; - }; - - _proto.dropdownIconMatches = function dropdownIconMatches(search) { - var _this3 = this; - - var inputIcon = this.input.icon(); - var iconState = this.input.iconState; - - if (inputIcon !== iconState.lastInput) { - iconState.matches = _resources__WEBPACK_IMPORTED_MODULE_5__["fa5IconsList"].filter(function (icon) { - return icon.includes(inputIcon); - }); - if (iconState.matches.length > 5) iconState.matches = iconState.matches.sort(function (a, b) { - return 0.5 - Math.random(); - }); - iconState.lastInput = inputIcon; - } - - return inputIcon.length && iconState.matches.length > 0 && !(iconState.matches.length == 1 && iconState.matches[0] === inputIcon) ? m("ul", { - className: "Dropdown-menu Dropdown--Icons Search-results" - }, m("li", { - className: "Dropdown-header" - }, "Font Awesome 5"), iconState.matches.slice(-5).map(function (icon) { - return m("li", { - className: "IconSearchResult", - onclick: function onclick(e) { - return _this3.input.icon(icon); - } - }, m("icon", { - className: "Chat-FullColor" - }, m("i", { - className: icon - })), m("span", null, flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_6___default()(icon, inputIcon))); - })) : null; - }; - - _proto.formInputOnUpdate = function formInputOnUpdate(vnode) { - $('.Chat-FullColor').css({ - color: this.input.color(), - backgroundColor: this.input.color() - }); - }; - - _proto.componentFormInput = function componentFormInput(options) { - return [options.title ? m("label", null, options.title) : null, m("div", null, options.desc ? m("label", null, options.desc) : null, m("input", { - "class": "FormControl", - type: "text", - bidi: options.stream, - placeholder: options.placeholder - }))]; - }; - - return ChatModal; -}(flarum_components_Modal__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatPage.js": -/*!******************************************!*\ - !*** ./src/forum/components/ChatPage.js ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatPage; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_common_components_Page__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/common/components/Page */ "flarum/common/components/Page"); -/* harmony import */ var flarum_common_components_Page__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Page__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/IndexPage */ "flarum/components/IndexPage"); -/* harmony import */ var flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/LoadingIndicator */ "flarum/components/LoadingIndicator"); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_helpers_listItems__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/helpers/listItems */ "flarum/helpers/listItems"); -/* harmony import */ var flarum_helpers_listItems__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_listItems__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/utils/Stream */ "flarum/utils/Stream"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _ChatHeader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ChatHeader */ "./src/forum/components/ChatHeader.js"); -/* harmony import */ var _ChatList__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ChatList */ "./src/forum/components/ChatList.js"); -/* harmony import */ var _ChatViewport__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ChatViewport */ "./src/forum/components/ChatViewport.js"); - - - - - - - - - - -var ChatPage = -/*#__PURE__*/ -function (_Page) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatPage, _Page); - - function ChatPage() { - return _Page.apply(this, arguments) || this; - } - - var _proto = ChatPage.prototype; - - _proto.oninit = function oninit(vnode) { - _Page.prototype.oninit.call(this, vnode); - - this.bodyClass = 'App--chat'; - this.listOpen = flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_5___default()(false); - }; - - _proto.view = function view() { - var navItems = flarum_components_IndexPage__WEBPACK_IMPORTED_MODULE_2___default.a.prototype.sidebarItems(); - if (navItems.has('forumStatisticsWidget')) navItems.remove('forumStatisticsWidget'); - return m("div", { - className: "ChatPage" - }, m("nav", { - className: "IndexPage-nav sideNav" - }, m("ul", null, flarum_helpers_listItems__WEBPACK_IMPORTED_MODULE_4___default()(navItems.toArray()))), m(_ChatHeader__WEBPACK_IMPORTED_MODULE_6__["default"], { - showChatListStream: this.listOpen - }), app.chat.chatsLoading ? m(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_3___default.a, null) : m(_ChatViewport__WEBPACK_IMPORTED_MODULE_8__["default"], { - chatModel: app.chat.getCurrentChat() - }), this.listOpen() ? m("div", { - "class": "ChatPage--list" - }, m(_ChatList__WEBPACK_IMPORTED_MODULE_7__["default"], { - inPage: true - })) : ''); - }; - - _proto.oncreate = function oncreate(vnode) { - var _this = this; - - _Page.prototype.oncreate.call(this, vnode); - - this.clickHandler = function (e) { - var chatList = _this.$('.ChatList')[0]; - - if (_this.listOpen() && !(chatList && chatList.contains(e.target))) { - _this.listOpen(false); - - m.redraw(); - } - }; - - $(window).on('click', this.clickHandler); - }; - - _proto.onupdate = function onupdate(vnode) { - _Page.prototype.onupdate.call(this, vnode); - - if (this.listOpen()) { - this.element.querySelector('.ChatPage--list').style.height = document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top + 'px'; - console.log(this.element.querySelector('.ChatPage--list'), this.element.querySelector('.ChatPage--list').style.height, document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top); - } - }; - - _proto.onremove = function onremove(vnode) { - _Page.prototype.onremove.call(this, vnode); - - $(window).off('click', this.clickHandler); - }; - - return ChatPage; -}(flarum_common_components_Page__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatPreview.js": -/*!*********************************************!*\ - !*** ./src/forum/components/ChatPreview.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatPreview; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/utils/humanTime */ "flarum/utils/humanTime"); -/* harmony import */ var flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/utils/extractText */ "flarum/utils/extractText"); -/* harmony import */ var flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/utils/SubtreeRetainer */ "flarum/utils/SubtreeRetainer"); -/* harmony import */ var flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _ChatAvatar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ChatAvatar */ "./src/forum/components/ChatAvatar.js"); - - - - - - - - -var ChatPreview = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatPreview, _Component); - - function ChatPreview() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatPreview.prototype; - - _proto.oninit = function oninit(vnode) { - var _this = this; - - _Component.prototype.oninit.call(this, vnode); - - this.model = this.attrs.model; - this.subtree = new flarum_utils_SubtreeRetainer__WEBPACK_IMPORTED_MODULE_5___default.a(function () { - return _this.model.freshness; - }, function () { - return app.chat.getCurrentChat(); - }, // Reactive attrs - function () { - return _this.model.isNeedToFlash; - }); - }; - - _proto.onbeforeupdate = function onbeforeupdate(vnode) { - _Component.prototype.onbeforeupdate.call(this, vnode); - - this.model = this.attrs.model; - return this.subtree.needsRebuild(); - }; - - _proto.view = function view(vnode) { - return m("div", { - style: { - position: 'relative' - } - }, m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_3___default()({ - 'panel-preview': true, - active: app.chat.getCurrentChat() == this.model - }) - }, this.componentPreview()), this.model.unreaded() ? m("div", { - className: "unreaded" - }, this.model.unreaded()) : null); - }; - - _proto.oncreate = function oncreate(vnode) { - _Component.prototype.oncreate.call(this, vnode); - - if (this.model.isNeedToFlash) { - app.chat.flashItem($(vnode.dom)); - this.model.isNeedToFlash = false; - } - }; - - _proto.onupdate = function onupdate(vnode) { - _Component.prototype.onupdate.call(this, vnode); - - if (this.model.isNeedToFlash) { - app.chat.flashItem($(vnode.dom)); - this.model.isNeedToFlash = false; - } - }; - - _proto.componentMessageTime = function componentMessageTime() { - var lastMessage = this.model.last_message(); - var time = new Date(lastMessage.created_at()); - - if (Date.now() - time.getTime() < 60 * 60 * 12 * 1000) { - var nl = function nl(n) { - return (n < 10 ? '0' : '') + n; - }; - - return nl(time.getHours()) + ':' + nl(time.getMinutes()); - } - - return flarum_utils_humanTime__WEBPACK_IMPORTED_MODULE_1___default()(lastMessage.created_at()); - }; - - _proto.componentPreview = function componentPreview() { - return [m(_ChatAvatar__WEBPACK_IMPORTED_MODULE_6__["default"], { - model: this.model - }), m("div", { - "class": "previewBody" - }, m("div", { - className: "title", - title: this.model.title() - }, this.model.icon() ? m("i", { - "class": this.model.icon(), - style: { - color: this.model.color() - } - }) : null, this.model.title()), this.model.last_message() ? this.componentTextPreview() : this.componentTextEmpty()), this.model.last_message() ? m("div", { - className: "timestamp", - title: flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_4___default()(this.model.last_message().created_at()) - }, this.humanTime = this.componentMessageTime()) : null]; - }; - - _proto.componentPreviewChannel = function componentPreviewChannel() { - return [m(_ChatAvatar__WEBPACK_IMPORTED_MODULE_6__["default"], { - model: this.model - }), m("div", { - style: "display: flex; flex-direction: column" - }, m("div", { - className: "title", - title: this.model.title() - }, this.model.title()), this.componentTextPreview()), m("div", { - className: "timestamp", - title: flarum_utils_extractText__WEBPACK_IMPORTED_MODULE_4___default()(this.model.last_message().created_at()) - }, this.humanTime = this.componentMessageTime())]; - }; - - _proto.formatTextPreview = function formatTextPreview(text) { - var type; - - if (text.startsWith('```')) { - text = app.translator.trans('xelson-chat.forum.chat.message.type.code'); - type = 'media'; - } else if (text.startsWith('http://') || text.startsWith('https://')) { - text = app.translator.trans('xelson-chat.forum.chat.message.type.url'); - type = 'media'; - } - - return { - text: text, - type: type - }; - }; - - _proto.componentTextPreview = function componentTextPreview() { - var lastMessage = this.model.last_message(); - - if (lastMessage.type() != 0) { - return m("div", { - className: "message" - }, m("span", { - className: "media" - }, app.translator.trans('xelson-chat.forum.chat.message.type.event'))); - } - - var formatResult = this.formatTextPreview(lastMessage.message()); - var senderName, - users = this.model.users(), - sender = lastMessage.user(); - - if (app.session.user) { - if (app.session.user == sender) senderName = app.translator.trans('xelson-chat.forum.chat.message.you') + ": ";else if (users.length > 2 || this.model.type()) senderName = sender.displayName() + ': '; - } - - return m("div", { - className: flarum_utils_classList__WEBPACK_IMPORTED_MODULE_3___default()({ - message: true, - censored: lastMessage.is_censored() - }), - title: lastMessage.is_censored() ? app.translator.trans('xelson-chat.forum.chat.message.censored') : null - }, m("span", { - className: "sender" - }, senderName), m("span", { - className: formatResult.type - }, formatResult.text)); - }; - - _proto.componentTextEmpty = function componentTextEmpty() { - return m("div", { - className: "message" - }, m("span", { - className: "empty" - }, app.translator.trans('xelson-chat.forum.chat.list.preview.empty'))); - }; - - return ChatPreview; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_2___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatSearchUser.js": -/*!************************************************!*\ - !*** ./src/forum/components/ChatSearchUser.js ***! - \************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatSearchUser; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_components_Search__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/Search */ "flarum/components/Search"); -/* harmony import */ var flarum_components_Search__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Search__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/LoadingIndicator */ "flarum/components/LoadingIndicator"); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/utils/ItemList */ "flarum/utils/ItemList"); -/* harmony import */ var flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/utils/classList */ "flarum/utils/classList"); -/* harmony import */ var flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/helpers/icon */ "flarum/helpers/icon"); -/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _UsersSearchResults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./UsersSearchResults */ "./src/forum/components/UsersSearchResults.js"); - - - - - - - - -var ChatSearchUser = -/*#__PURE__*/ -function (_Search) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatSearchUser, _Search); - - function ChatSearchUser() { - return _Search.apply(this, arguments) || this; - } - - var _proto = ChatSearchUser.prototype; - - _proto.oninit = function oninit(vnode) { - _Search.prototype.oninit.call(this, vnode); - }; - - _proto.sourceItems = function sourceItems() { - var _this$attrs$state; - - var items = new flarum_utils_ItemList__WEBPACK_IMPORTED_MODULE_3___default.a(); - this.state = (_this$attrs$state = this.attrs.state) != null ? _this$attrs$state : {}; - if (app.forum.attribute('canSearchUsers')) items.add('users', new _UsersSearchResults__WEBPACK_IMPORTED_MODULE_6__["default"]({ - state: app.search.neonchat - })); - return items; - }; - - _proto.updateMaxHeight = function updateMaxHeight() {}; - - _proto.view = function view(vnode) { - var _this$state$getValue, - _this = this; - - var currentSearch = this.state.getInitialSearch(); - - if (!((_this$state$getValue = this.state.getValue()) == null ? void 0 : _this$state$getValue.length)) { - this.state.setValue(currentSearch || ''); - } - - app.current.searching = function () { - return _this.state.getValue(); - }; - - if (!this.sources) { - this.sources = this.sourceItems().toArray(); - } - - if (!this.sources.length) return m("div", null); - return m("div", { - className: 'Search ' + flarum_utils_classList__WEBPACK_IMPORTED_MODULE_4___default()({ - open: this.hasFocus, - active: !!currentSearch, - loading: !!this.loadingSources - }) - }, m("div", { - className: "Search-input SearchInput" - }, m("input", { - className: "FormControl", - type: "search", - placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.placeholder'), - value: this.state.getValue(), - oninput: function oninput(e) { - return _this.state.setValue(e.target.value); - }, - onfocus: function onfocus() { - return _this.hasFocus = true; - } - }), this.loadingSources ? m(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2___default.a, { - size: "tiny", - className: "Button Button--icon Button--link" - }) : currentSearch ? m("button", { - className: "Search-clear Button Button--icon Button--link", - onclick: this.clear.bind(this) - }, flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_5___default()('fas fa-times-circle')) : ''), this.state.getValue() && this.hasFocus ? m("ul", { - className: "Dropdown-menu Dropdown--Users Search-results" - }, this.sources.map(function (source) { - return source.view(_this.state.getValue()); - })) : null); - }; - - return ChatSearchUser; -}(flarum_components_Search__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatViewport.js": -/*!**********************************************!*\ - !*** ./src/forum/components/ChatViewport.js ***! - \**********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatViewport; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/LoadingIndicator */ "flarum/components/LoadingIndicator"); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _ChatInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ChatInput */ "./src/forum/components/ChatInput.js"); -/* harmony import */ var _ChatMessage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChatMessage */ "./src/forum/components/ChatMessage.js"); -/* harmony import */ var _ChatEventMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ChatEventMessage */ "./src/forum/components/ChatEventMessage.js"); -/* harmony import */ var _ChatWelcome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ChatWelcome */ "./src/forum/components/ChatWelcome.js"); -/* harmony import */ var _models_Message__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../models/Message */ "./src/forum/models/Message.js"); -/* harmony import */ var _utils_timedRedraw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/timedRedraw */ "./src/forum/utils/timedRedraw.js"); -/* harmony import */ var _ChatPage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ChatPage */ "./src/forum/components/ChatPage.js"); - - - - - - - - - - - -var ChatViewport = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatViewport, _Component); - - function ChatViewport() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatViewport.prototype; - - _proto.oninit = function oninit(vnode) { - _Component.prototype.oninit.call(this, vnode); - - this.model = this.attrs.chatModel; - - if (this.model) { - this.state = app.chat.getViewportState(this.model); - } - }; - - _proto.oncreate = function oncreate(vnode) { - _Component.prototype.oncreate.call(this, vnode); - - this.loadChat(); - }; - - _proto.onupdate = function onupdate(vnode) { - _Component.prototype.onupdate.call(this, vnode); // this.attrs is broken in onupdate hook - - - var model = vnode.attrs.chatModel; - - if (model !== this.model) { - this.model = model; - - if (this.model) { - this.state = app.chat.getViewportState(this.model); - this.loadChat(); - } - } - }; - - _proto.loadChat = function loadChat() { - var _this = this; - - var oldScroll = this.state.scroll.oldScroll; - this.reloadMessages(); - m.redraw(); - setTimeout(function () { - var element = _this.element; - _this.getChatWrapper().scrollTop = element.scrollHeight - element.clientHeight - oldScroll; - }, 200); - }; - - _proto.view = function view(vnode) { - var _this2 = this; - - if (this.model) { - return m("div", { - className: "ChatViewport" - }, m("div", { - className: "wrapper", - oncreate: this.wrapperOnCreate.bind(this), - onbeforeupdate: this.wrapperOnBeforeUpdate.bind(this), - onupdate: this.wrapperOnUpdate.bind(this), - onremove: this.wrapperOnRemove.bind(this) - }, this.componentLoader(this.state.scroll.loading), this.componentsChatMessages(this.model).concat(this.state.input.writingPreview ? this.componentChatMessage(this.state.input.previewModel) : [])), m(_ChatInput__WEBPACK_IMPORTED_MODULE_3__["default"], { - state: this.state, - model: this.model, - oninput: function oninput() { - if (_this2.nearBottom() && !_this2.state.messageEditing) { - _this2.scrollToBottom(); - } - } - }), this.isFastScrollAvailable() ? this.componentScroller() : null); - } - - return m("div", { - className: "ChatViewport" - }, m(_ChatWelcome__WEBPACK_IMPORTED_MODULE_6__["default"], null), ";"); - }; - - _proto.componentChatMessage = function componentChatMessage(model) { - return model.type() ? m(_ChatEventMessage__WEBPACK_IMPORTED_MODULE_5__["default"], { - key: model.id(), - model: model - }) : m(_ChatMessage__WEBPACK_IMPORTED_MODULE_4__["default"], { - key: model.id(), - model: model - }); - }; - - _proto.componentsChatMessages = function componentsChatMessages(chat) { - var _this3 = this; - - return app.chat.getChatMessages().map(function (model) { - return _this3.componentChatMessage(model); - }); - }; - - _proto.componentScroller = function componentScroller() { - return m("div", { - className: "scroller", - onclick: this.fastScroll.bind(this) - }, m("i", { - "class": "fas fa-angle-down" - })); - }; - - _proto.componentLoader = function componentLoader(watch) { - return watch ? m("msgloader", { - className: "message-wrapper--loading" - }, m(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2___default.a, { - className: "loading-old Button-icon" - })) : null; - }; - - _proto.getChatWrapper = function getChatWrapper() { - return app.screen() === 'phone' && app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_9__["default"]) ? document.documentElement : document.querySelector('.ChatViewport .wrapper'); - }; - - _proto.isFastScrollAvailable = function isFastScrollAvailable() { - var chatWrapper = this.getChatWrapper(); - return (this.state.newPushedPosts || this.model.unreaded() >= 30 || chatWrapper && chatWrapper.scrollHeight > 2000 && chatWrapper.scrollTop < chatWrapper.scrollHeight - 2000) && !this.nearBottom(); - }; - - _proto.fastScroll = function fastScroll(e) { - if (this.model.unreaded() >= 30) this.fastMessagesFetch(e);else { - var chatWrapper = this.getChatWrapper(); - chatWrapper.scrollTop = Math.max(chatWrapper.scrollTop, chatWrapper.scrollHeight - 3000); - this.scrollToBottom(); - } - }; - - _proto.fastMessagesFetch = function fastMessagesFetch(e) { - var _this4 = this; - - e.redraw = false; - app.chat.chatmessages = []; - app.chat.apiFetchChatMessages(this.model).then(function (r) { - _this4.scrollToBottom(); - - Object(_utils_timedRedraw__WEBPACK_IMPORTED_MODULE_8__["default"])(300); - - _this4.model.pushAttributes({ - unreaded: 0 - }); - - var message = app.chat.getChatMessages(function (mdl) { - return mdl.chat() == _this4.model; - }).slice(-1)[0]; - app.chat.apiReadChat(_this4.model, message); - }); - }; - - _proto.wrapperOnCreate = function wrapperOnCreate(vnode) { - _Component.prototype.oncreate.call(this, vnode); - - this.wrapperOnUpdate(vnode); - (app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_9__["default"]) ? window : vnode.dom).addEventListener('scroll', this.boundScrollListener = this.wrapperOnScroll.bind(this), { - passive: true - }); - }; - - _proto.wrapperOnBeforeUpdate = function wrapperOnBeforeUpdate(vnode, vnodeNew) { - _Component.prototype.onbeforeupdate.call(this, vnode, vnodeNew); - - if (!this.state.autoScroll && this.nearBottom() && this.state.newPushedPosts) { - this.scrollAfterUpdate = true; - } - }; - - _proto.wrapperOnUpdate = function wrapperOnUpdate(vnode) { - _Component.prototype.onupdate.call(this, vnode); - - var el = vnode.dom; - - if (this.model && this.state.scroll.autoScroll) { - if (this.autoScrollTimeout) clearTimeout(this.autoScrollTimeout); - this.autoScrollTimeout = setTimeout(this.scrollToBottom.bind(this, true), 100); - } - - if (el.scrollTop <= 0) el.scrollTop = 1; - this.checkUnreaded(); - - if (this.scrollAfterUpdate) { - this.scrollAfterUpdate = false; - this.scrollToBottom(); - } - }; - - _proto.wrapperOnRemove = function wrapperOnRemove(vnode) { - _Component.prototype.onremove.call(this, vnode); - - vnode.dom.removeEventListener('scroll', this.boundScrollListener); - }; - - _proto.wrapperOnScroll = function wrapperOnScroll(e) { - var _this5 = this; - - var el = app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_9__["default"]) ? document.documentElement : this.element; - this.state.scroll.oldScroll = el.scrollHeight - el.clientHeight - el.scrollTop; - this.checkUnreaded(); - - if (this.lastFastScrollStatus != this.isFastScrollAvailable()) { - this.lastFastScrollStatus = this.isFastScrollAvailable(); - m.redraw(); - } - - var currentHeight = el.scrollHeight; - - if (this.atBottom()) { - this.state.newPushedPosts = false; - } - - if (this.state.scroll.autoScroll || this.state.loading || this.scrolling) return; - - if (!this.state.messageEditing && el.scrollTop >= 0) { - if (el.scrollTop <= 500) { - var topMessage = app.chat.getChatMessages(function (model) { - return model.chat() == _this5.model; - })[0]; - - if (topMessage && topMessage != this.model.first_message()) { - app.chat.apiFetchChatMessages(this.model, topMessage.created_at().toISOString()); - } - } else if (el.scrollTop + el.offsetHeight >= currentHeight - 500) { - var bottomMessage = app.chat.getChatMessages(function (model) { - return model.chat() == _this5.model; - }).slice(-1)[0]; - - if (bottomMessage && bottomMessage != this.model.last_message()) { - app.chat.apiFetchChatMessages(this.model, bottomMessage.created_at().toISOString()); - } - } - } - }; - - _proto.checkUnreaded = function checkUnreaded() { - var _this6 = this; - - var wrapper = this.getChatWrapper(); - - if (wrapper && this.model.unreaded()) { - var list = app.chat.getChatMessages(function (mdl) { - return mdl.chat() == _this6.model && mdl.created_at() >= _this6.model.readed_at() && !mdl.isReaded; - }); - - for (var _iterator = list, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var message = _ref; - var msg = document.querySelector(".message-wrapper[data-id=\"" + message.id() + "\""); - - if (msg && wrapper.scrollTop + wrapper.offsetHeight >= msg.offsetTop) { - message.isReaded = true; - - if (this.state.scroll.autoScroll && app.chat.getCurrentChat() == this.model) { - app.chat.apiReadChat(this.model, new Date()); - this.model.pushAttributes({ - unreaded: 0 - }); - } else { - app.chat.apiReadChat(this.model, message); - this.model.pushAttributes({ - unreaded: this.model.unreaded() - 1 - }); - } - - m.redraw(); - } - } - } - }; - - _proto.scrollToAnchor = function scrollToAnchor(anchor) { - var element; - if (anchor instanceof _models_Message__WEBPACK_IMPORTED_MODULE_7__["default"]) element = $(".message-wrapper[data-id=\"" + anchor.id() + "\"")[0];else element = anchor; - var chatWrapper = this.getChatWrapper(); - if (chatWrapper && element) $(chatWrapper).stop().animate({ - scrollTop: element.offsetTop - element.offsetHeight - }, 500);else setTimeout(scroll, 100); - }; - - _proto.scrollToBottom = function scrollToBottom(force) { - var _this7 = this; - - if (force === void 0) { - force = false; - } - - this.scrolling = true; - var chatWrapper = this.getChatWrapper(); - - if (chatWrapper) { - var notAtBottom = !force && this.atBottom(); - var fewMessages = app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_9__["default"]) && document.querySelector('.ChatViewport .wrapper').scrollHeight + 200 < document.documentElement.clientHeight; - if (notAtBottom || fewMessages) return; - var time = this.pixelsFromBottom() < 80 ? 0 : 250; - $(chatWrapper).stop().animate({ - scrollTop: chatWrapper.scrollHeight - }, time, 'swing', function () { - _this7.state.scroll.autoScroll = false; - _this7.scrolling = false; - }); - } - }; - - _proto.reloadMessages = function reloadMessages() { - var _this8 = this; - - if (!this.state.messagesFetched) { - var query; - - if (this.model.unreaded()) { - var _ref2, _this$model$readed_at; - - query = (_ref2 = (_this$model$readed_at = this.model.readed_at()) == null ? void 0 : _this$model$readed_at.toISOString()) != null ? _ref2 : new Date(0).toISOString(); - this.state.scroll.autoScroll = false; - } - - app.chat.apiFetchChatMessages(this.model, query).then(function () { - if (_this8.model.unreaded()) { - var anchor = app.chat.getChatMessages(function (mdl) { - return mdl.chat() == _this8.model && mdl.created_at() > _this8.model.readed_at(); - })[0]; - - _this8.scrollToAnchor(anchor); - } else _this8.state.scroll.autoScroll = true; - - m.redraw(); - }); - this.state.messagesFetched = true; - } - }; - - _proto.nearBottom = function nearBottom() { - return this.pixelsFromBottom() <= 500; - }; - - _proto.atBottom = function atBottom() { - return this.pixelsFromBottom() <= 5; - }; - - _proto.pixelsFromBottom = function pixelsFromBottom() { - var element = app.current.matches(_ChatPage__WEBPACK_IMPORTED_MODULE_9__["default"]) ? document.documentElement : this.element; - return Math.abs(element.scrollHeight - element.scrollTop - element.clientHeight); - }; - - return ChatViewport; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/ChatWelcome.js": -/*!*********************************************!*\ - !*** ./src/forum/components/ChatWelcome.js ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatWelcome; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); -/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_1__); - - - -var ChatWelcome = -/*#__PURE__*/ -function (_Component) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ChatWelcome, _Component); - - function ChatWelcome() { - return _Component.apply(this, arguments) || this; - } - - var _proto = ChatWelcome.prototype; - - _proto.view = function view(vnode) { - return m("div", null, m("div", { - className: "wrapper", - style: { - height: app.chat.getFrameState('transform').y + 40 + 'px' - } - }, app.chat.getChats().length ? m("div", { - className: "welcome" - }, m("h1", null, app.translator.trans('xelson-chat.forum.chat.welcome.header')), m("span", null, app.translator.trans('xelson-chat.forum.chat.welcome.subheader'))) : null)); - }; - - return ChatWelcome; -}(flarum_Component__WEBPACK_IMPORTED_MODULE_1___default.a); - - - -/***/ }), - -/***/ "./src/forum/components/UsersSearchResults.js": -/*!****************************************************!*\ - !*** ./src/forum/components/UsersSearchResults.js ***! - \****************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return UsersSearchResults; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/helpers/avatar */ "flarum/helpers/avatar"); -/* harmony import */ var flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_helpers_username__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/helpers/username */ "flarum/helpers/username"); -/* harmony import */ var flarum_helpers_username__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_username__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/helpers/highlight */ "flarum/helpers/highlight"); -/* harmony import */ var flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/components/LoadingIndicator */ "flarum/components/LoadingIndicator"); -/* harmony import */ var flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_4__); - - - - - - -var UsersSearchResults = -/*#__PURE__*/ -function () { - function UsersSearchResults(props) { - this.results = {}; - this.searching = false; - if (!props.state.usersSelected) props.state.usersSelected = []; - this.usersSelected = props.state.usersSelected; - } - - var _proto = UsersSearchResults.prototype; - - _proto.search = function search(query) { - var _this = this; - - this.searching = true; - return app.store.find('users', { - filter: { - q: query - }, - page: { - limit: 5 - } - }).then(function (results) { - _this.results[query] = results; - _this.searching = false; - m.redraw(); - }); - }; - - _proto.isUserSelected = function isUserSelected(user) { - return this.usersSelected.some(function (u) { - return user.id() == u.id(); - }); - }; - - _proto.userClick = function userClick(user) { - if (!this.isUserSelected(user)) this.usersSelected.push(user);else this.usersSelected.splice(this.usersSelected.indexOf(user), 1); - }; - - _proto.view = function view(query) { - var _this2 = this; - - query = query.toLowerCase(); - var usersList = (this.results[query] || []).concat(app.store.all('users').filter(function (user) { - return [user.username(), user.displayName()].some(function (value) { - return value.toLowerCase().includes(query); - }); - })).filter(function (user) { - return user !== app.session.user; - }); - var resultsFind = usersList.filter(function (e, i, arr) { - return arr.lastIndexOf(e) === i; - }).sort(function (a, b) { - return a.displayName().localeCompare(b.displayName()); - }).filter(function (user) { - return !_this2.isUserSelected(user); - }); - var moreText; - - if (resultsFind.length > 5) { - moreText = m("div", { - "class": "MoreResultsText" - }, app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.more_results', { - more_results: resultsFind.length - 5 - })); - resultsFind = resultsFind.slice(-5); - } - - if (!resultsFind.length) { - if (!this.searching) return m("li", { - className: "SearchFailed" - }, app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.failed'));else flarum_components_LoadingIndicator__WEBPACK_IMPORTED_MODULE_4___default.a.component({ - size: 'tiny', - className: 'Button Button--icon Button--link' - }); - } - - var resultsSelected = Object.values(this.usersSelected).slice(-5); - return [m("li", { - className: "Dropdown-header" - }, app.translator.trans('core.forum.search.users_heading')), resultsFind.map(function (user) { - var name = flarum_helpers_username__WEBPACK_IMPORTED_MODULE_2___default()(user); - var id = user.id(); - var children = [flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_3___default()(name.text, query)]; - return m("li", { - className: "UserSearchResult UserSearchResult", - "data-index": 'users' + id, - onclick: _this2.userClick.bind(_this2, user) - }, m("span", null, flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_1___default()(user), Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, name, { - text: undefined, - children: children - }))); - }), moreText, resultsSelected.length ? m("li", { - className: "Dropdown-header" - }, app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.invited')) : null, resultsSelected.map(function (user) { - var name = flarum_helpers_username__WEBPACK_IMPORTED_MODULE_2___default()(user); - var children = [flarum_helpers_highlight__WEBPACK_IMPORTED_MODULE_3___default()(name.text, query)]; - return m("li", { - className: "UserSearchResult UserSearchResult", - "data-index": 'users' + user.id(), - onclick: _this2.userClick.bind(_this2, user) - }, m("span", { - "class": "selected" - }, flarum_helpers_avatar__WEBPACK_IMPORTED_MODULE_1___default()(user), Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, name, { - text: undefined, - children: children - }))); - })]; - }; - - return UsersSearchResults; -}(); - - - -/***/ }), - -/***/ "./src/forum/index.js": -/*!****************************!*\ - !*** ./src/forum/index.js ***! - \****************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); -/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_Application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Application */ "flarum/Application"); -/* harmony import */ var flarum_Application__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Application__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _components_ChatFrame__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/ChatFrame */ "./src/forum/components/ChatFrame.js"); -/* harmony import */ var _models_Chat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./models/Chat */ "./src/forum/models/Chat.js"); -/* harmony import */ var _models_Message__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./models/Message */ "./src/forum/models/Message.js"); -/* harmony import */ var flarum_models_User__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/models/User */ "flarum/models/User"); -/* harmony import */ var flarum_models_User__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_models_User__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _states_ChatState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./states/ChatState */ "./src/forum/states/ChatState.js"); -/* harmony import */ var _addChatPage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./addChatPage */ "./src/forum/addChatPage.js"); - - - - - - - - - - -var chat = document.createElement('div'); -chat.setAttribute('id', 'chat'); -document.body.append(chat); -app.initializers.add('xelson-chat', function (app) { - app.store.models.chats = _models_Chat__WEBPACK_IMPORTED_MODULE_4__["default"]; - app.store.models.chatmessages = _models_Message__WEBPACK_IMPORTED_MODULE_5__["default"]; - - function pivot(name, id, attr, transform) { - pivot.hasOne = function (name, id, attr) { - return function () { - var relationship = this.data.attributes[name] && this.data.attributes[name][id] && this.data.attributes[name][id][attr]; - if (relationship) return app.store.getById(relationship.data.type, relationship.data.id); - }; - }; - - return function () { - var value = this.data.attributes[name] && this.data.attributes[name][id] && this.data.attributes[name][id][attr]; - return transform ? transform(value) : value; - }; - } - - Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])(flarum_models_User__WEBPACK_IMPORTED_MODULE_6___default.a.prototype, { - chat_pivot: function chat_pivot(chat_id) { - return { - role: pivot('chat_pivot', chat_id, 'role').bind(this), - removed_by: pivot('chat_pivot', chat_id, 'removed_by').bind(this), - readed_at: pivot('chat_pivot', chat_id, 'readed_at', flarum_Model__WEBPACK_IMPORTED_MODULE_7___default.a.transformDate).bind(this), - removed_at: pivot('chat_pivot', chat_id, 'removed_at', flarum_Model__WEBPACK_IMPORTED_MODULE_7___default.a.transformDate).bind(this), - joined_at: pivot('chat_pivot', chat_id, 'joined_at', flarum_Model__WEBPACK_IMPORTED_MODULE_7___default.a.transformDate).bind(this) - }; - } - }); - - Object(flarum_extend__WEBPACK_IMPORTED_MODULE_1__["extend"])(flarum_Application__WEBPACK_IMPORTED_MODULE_2___default.a.prototype, 'mount', function () { - if (!app.forum.attribute('xelson-chat.permissions.enabled')) return; - app.chat = new _states_ChatState__WEBPACK_IMPORTED_MODULE_8__["default"](); - m.mount(document.getElementById('chat'), _components_ChatFrame__WEBPACK_IMPORTED_MODULE_3__["default"]); - if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission(); - - if (!app.pusher) { - app.alerts.show({ - type: 'error' - }, app.translator.trans('xelson-chat.forum.pusher_not_found')); - } - - app.chat.apiFetchChats(); - }); //addChatPage(); -}); - -/***/ }), - -/***/ "./src/forum/models/Chat.js": -/*!**********************************!*\ - !*** ./src/forum/models/Chat.js ***! - \**********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Chat; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/utils/computed */ "flarum/utils/computed"); -/* harmony import */ var flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3__); - - - - - -var Chat = -/*#__PURE__*/ -function (_Model) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(Chat, _Model); - - function Chat() { - return _Model.apply(this, arguments) || this; - } - - return Chat; -}(flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a); - - - -Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])(Chat.prototype, { - _title: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('title'), - _color: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('color'), - type: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('type'), - created_at: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('created_at', flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.transformDate), - creator: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasOne('creator'), - users: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasMany('users'), - first_message: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasOne('first_message'), - last_message: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasOne('last_message'), - icon: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('icon'), - role: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('role'), - unreaded: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('unreaded', function (v) { - return Math.max(v, 0); - }), - readed_at: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('readed_at', flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.transformDate), - removed_at: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('removed_at', flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.transformDate), - joined_at: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('joined_at', flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.transformDate), - removed_by: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('removed_by'), - pm_user: flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3___default()('freshness', function (updated) { - return this.getPMUser(); - }), - title: flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3___default()('pm_user', '_title', function (pm_user, _title) { - return pm_user ? pm_user.displayName() : _title; - }), - color: flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3___default()('pm_user', '_color', function (pm_user, _color) { - return pm_user ? pm_user.color() : _color; - }), - avatarUrl: flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3___default()('pm_user', function (pm_user) { - return pm_user ? pm_user.avatarUrl() : null; - }), - textColor: flarum_utils_computed__WEBPACK_IMPORTED_MODULE_3___default()('color', function (color) { - return this.pickTextColorBasedOnBgColorSimple(color, '#FFF', '#000'); - }), - matches: function matches(q) { - return this.title().toLowerCase().includes(q) || this.users().some(function (user) { - return user.displayName().toLowerCase().includes(q); - }); - }, - getPMUser: function getPMUser() { - var users = this.users(); - - if (app.session.user && this.type() == 0 && users.length && users.length < 3) { - for (var _iterator = users, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var user = _ref; - if (user && user != app.session.user) return user; - } - } - - return null; - }, - pickTextColorBasedOnBgColorSimple: function pickTextColorBasedOnBgColorSimple(bgColor, lightColor, darkColor) { - var color = bgColor.charAt(0) === '#' ? bgColor.substring(1, 7) : bgColor; - var r = parseInt(color.substring(0, 2), 16); - var g = parseInt(color.substring(2, 4), 16); - var b = parseInt(color.substring(4, 6), 16); - return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? darkColor : lightColor; - } -}); - -/***/ }), - -/***/ "./src/forum/models/Message.js": -/*!*************************************!*\ - !*** ./src/forum/models/Message.js ***! - \*************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Message; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_2__); - - - - -var Message = -/*#__PURE__*/ -function (_Model) { - Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(Message, _Model); - - function Message() { - return _Model.apply(this, arguments) || this; - } - - return Message; -}(flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a); - - - -Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])(Message.prototype, { - message: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('message'), - user: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasOne('user'), - deleted_by: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasOne('deleted_by'), - chat: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.hasOne('chat'), - created_at: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('created_at', flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.transformDate), - edited_at: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('edited_at', flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.transformDate), - type: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('type'), - is_readed: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('is_readed'), - ip_address: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('ip_address'), - is_censored: flarum_Model__WEBPACK_IMPORTED_MODULE_2___default.a.attribute('is_censored') -}); - -/***/ }), - -/***/ "./src/forum/resources.js": -/*!********************************!*\ - !*** ./src/forum/resources.js ***! - \********************************/ -/*! exports provided: base64AudioNotificationRef, base64AudioNotification, base64PlaceholderAvatarImage, fa5IconsList */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "base64AudioNotificationRef", function() { return base64AudioNotificationRef; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "base64AudioNotification", function() { return base64AudioNotification; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "base64PlaceholderAvatarImage", function() { return base64PlaceholderAvatarImage; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fa5IconsList", function() { return fa5IconsList; }); -var base64AudioNotificationRef = 'data:audio/ogg;base64,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'; -var base64AudioNotification = 'data:audio/ogg;base64,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'; -var base64PlaceholderAvatarImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPZSURBVHhe7Zs9aNVQGIZvioODQwdHCxUqdHBQtNihg4NLQdCigg6CoKKiNS4dnKRDcXBpEaHSggWFLg4WBBcHBwdLCzo4FBQs2NHBoYODcH2fnOQ2iUnvT27uvcnpA29Ozh3afG++85OTE6darVZyxXEP6XhSOiUNS4NSv1+G2ZR+++WGtCqtV6pzWypzIx8DHHdUx3PSRWmInzLwXXotrciMT94vbaR9Bjgud/WadEviTucBmfFcWpIZZEtmshtgAn8guRLnnYDg56TZrEZkM8Bxb+j4WDro1TvPL+mhTFg01eZpzQDHpV0vSKe9evf5IN2UEfQXTdHnl43juJd1XJN6JXjgWtb8a2uKxjPAcffp+ESivfcys9KUsuGvqe5OYwaY4JclhrUiwLB5pRET6htQvOAD3kiX6pmwex9Q3ODhvLTsx5BKvU6QNl/E4AO4dmJIJb0JmB6Vu18GrqopvPLPIyQbYMZ5hrpOzezyZls6njRPSGsCTHLKEjwckF6Y0yj/G2Cmt700yWkXY4rtnn9eI9oEzIPNN6lbc/u84dnhiJpC7QEqngHM8soaPBBbZCa7kwHm7v+QytT2k+DuHw6yIJwBLGaUPXggxtvmNGoAKzm2cN0vfQPMGl5ey1i9yJBiHuMkyAAWMG3jAofAgCLP91uFhyWNApX7rNv/pGIhA2QALy1sZRQDeGNjKycwwKbeP84wBsTf0dnEIAbYMPtLo38vA/wTa9kzwC+tBQPYkWErmxiQ6f16wdneywAdmn6nXiI2MIDdWLayigHr5txK1vsq1Tn6ABv7gU1iJwPgrV/ahBdzYMCKX9qEF3P4xQjLYiyP2cCW0n+AkyAD4Jlf2kAt1rAB85INs8I/ErF67Bhg3pUtmUqpmQ/eC0I4A2BaKnMWEBsx1ogaYJyZMZVSMhO++xDPAGCnZRlnh18kYouQtkmKpfLP0n6vXnzo+EZ097+a6g5JGUBT4MOESVMpBZNJwUOyAWD24Le8D7+HWPRjSSTdAMMdiY3HRYX5PjGkktwHhHFc9ti9k7wNBQXiozSuu88myVTqZQBNgT8wLhXpiZFrrRs81DcAzB+akIrQJ3CNE40ED/WbQByzk/Sp1GtDJEMdvX1TN6l5A8Bxj+r4Ujrm1bsPkxx2hCcOdbvRWBOIY/7RiDQldfPZgf/NNSROchqhtQwIY3aYPpLYfNipZhE80k4r8Ew3ILsBAcYITLgr5bWyxIfULGZEHmmz0D4DwjjuGR3Ze3hWyrr/gBVrhjU+nn7v/dJG8jEgjONiQPzzeSZXcWMIlKGLMvz5fI5L9pXKP+lVHvxHrr8zAAAAAElFTkSuQmCC'; -var fa5IconsList = ['fas fa-ad', 'fas fa-address-book', 'fas fa-address-card', 'fas fa-adjust', 'fas fa-air-freshener', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fas fa-allergies', 'fas fa-ambulance', 'fas fa-american-sign-language-interpreting', 'fas fa-anchor', 'fas fa-angle-double-down', 'fas fa-angle-double-left', 'fas fa-angle-double-right', 'fas fa-angle-double-up', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angry', 'fas fa-ankh', 'fas fa-apple-alt', 'fas fa-archive', 'fas fa-archway', 'fas fa-arrow-alt-circle-down', 'fas fa-arrow-alt-circle-left', 'fas fa-arrow-alt-circle-right', 'fas fa-arrow-alt-circle-up', 'fas fa-arrow-circle-down', 'fas fa-arrow-circle-left', 'fas fa-arrow-circle-right', 'fas fa-arrow-circle-up', 'fas fa-arrow-down', 'fas fa-arrow-left', 'fas fa-arrow-right', 'fas fa-arrow-up', 'fas fa-arrows-alt', 'fas fa-arrows-alt-h', 'fas fa-arrows-alt-v', 'fas fa-assistive-listening-systems', 'fas fa-asterisk', 'fas fa-at', 'fas fa-atlas', 'fas fa-atom', 'fas fa-audio-description', 'fas fa-award', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backspace', 'fas fa-backward', 'fas fa-bacon', 'fas fa-bahai', 'fas fa-balance-scale', 'fas fa-balance-scale-left', 'fas fa-balance-scale-right', 'fas fa-ban', 'fas fa-band-aid', 'fas fa-barcode', 'fas fa-bars', 'fas fa-baseball-ball', 'fas fa-basketball-ball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fas fa-bed', 'fas fa-beer', 'fas fa-bell', 'fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bible', 'fas fa-bicycle', 'fas fa-biking', 'fas fa-binoculars', 'fas fa-biohazard', 'fas fa-birthday-cake', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blind', 'fas fa-blog', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-dead', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-reader', 'fas fa-bookmark', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-style', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-open', 'fas fa-boxes', 'fas fa-braille', 'fas fa-brain', 'fas fa-bread-slice', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broadcast-tower', 'fas fa-broom', 'fas fa-brush', 'fas fa-bug', 'fas fa-building', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burn', 'fas fa-bus', 'fas fa-bus-alt', 'fas fa-business-time', 'fas fa-calculator', 'fas fa-calendar', 'fas fa-calendar-alt', 'fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-minus', 'fas fa-calendar-plus', 'fas fa-calendar-times', 'fas fa-calendar-week', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-campground', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-alt', 'fas fa-car-battery', 'fas fa-car-crash', 'fas fa-car-side', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-square-down', 'fas fa-caret-square-left', 'fas fa-caret-square-right', 'fas fa-caret-square-up', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-plus', 'fas fa-cash-register', 'fas fa-cat', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-teacher', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-check', 'fas fa-check-circle', 'fas fa-check-double', 'fas fa-check-square', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'fas fa-chess-knight', 'fas fa-chess-pawn', 'fas fa-chess-queen', 'fas fa-chess-rook', 'fas fa-chevron-circle-down', 'fas fa-chevron-circle-left', 'fas fa-chevron-circle-right', 'fas fa-chevron-circle-up', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-church', 'fas fa-circle', 'fas fa-circle-notch', 'fas fa-city', 'fas fa-clinic-medical', 'fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clock', 'fas fa-clone', 'fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-download-alt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fas fa-cloud-upload-alt', 'fas fa-cocktail', 'fas fa-code', 'fas fa-code-branch', 'fas fa-coffee', 'fas fa-cog', 'fas fa-cogs', 'fas fa-coins', 'fas fa-columns', 'fas fa-comment', 'fas fa-comment-alt', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-slash', 'fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'fas fa-compress', 'fas fa-compress-alt', 'fas fa-compress-arrows-alt', 'fas fa-concierge-bell', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'fas fa-copyright', 'fas fa-couch', 'fas fa-credit-card', 'fas fa-crop', 'fas fa-crop-alt', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cut', 'fas fa-database', 'fas fa-deaf', 'fas fa-democrat', 'fas fa-desktop', 'fas fa-dharmachakra', 'fas fa-diagnoses', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fas fa-digital-tachograph', 'fas fa-directions', 'fas fa-divide', 'fas fa-dizzy', 'fas fa-dna', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dolly-flatbed', 'fas fa-donate', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dot-circle', 'fas fa-dove', 'fas fa-download', 'fas fa-drafting-compass', 'fas fa-dragon', 'fas fa-draw-polygon', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fas fa-edit', 'fas fa-egg', 'fas fa-eject', 'fas fa-ellipsis-h', 'fas fa-ellipsis-v', 'fas fa-envelope', 'fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelope-square', 'fas fa-equals', 'fas fa-eraser', 'fas fa-ethernet', 'fas fa-euro-sign', 'fas fa-exchange-alt', 'fas fa-exclamation', 'fas fa-exclamation-circle', 'fas fa-exclamation-triangle', 'fas fa-expand', 'fas fa-expand-alt', 'fas fa-expand-arrows-alt', 'fas fa-external-link-alt', 'fas fa-external-link-square-alt', 'fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-slash', 'fas fa-fan', 'fas fa-fast-backward', 'fas fa-fast-forward', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-alt', 'fas fa-female', 'fas fa-fighter-jet', 'fas fa-file', 'fas fa-file-alt', 'fas fa-file-archive', 'fas fa-file-audio', 'fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-download', 'fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-medical', 'fas fa-file-medical-alt', 'fas fa-file-pdf', 'fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-signature', 'fas fa-file-upload', 'fas fa-file-video', 'fas fa-file-word', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-alt', 'fas fa-fire-extinguisher', 'fas fa-first-aid', 'fas fa-fish', 'fas fa-fist-raised', 'fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flushed', 'fas fa-folder', 'fas fa-folder-minus', 'fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-font', 'fas fa-football-ball', 'fas fa-forward', 'fas fa-frog', 'fas fa-frown', 'fas fa-frown-open', 'fas fa-funnel-dollar', 'fas fa-futbol', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gavel', 'fas fa-gem', 'fas fa-genderless', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fas fa-glass-cheers', 'fas fa-glass-martini', 'fas fa-glass-martini-alt', 'fas fa-glass-whiskey', 'fas fa-glasses', 'fas fa-globe', 'fas fa-globe-africa', 'fas fa-globe-americas', 'fas fa-globe-asia', 'fas fa-globe-europe', 'fas fa-golf-ball', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grimace', 'fas fa-grin', 'fas fa-grin-alt', 'fas fa-grin-beam', 'fas fa-grin-beam-sweat', 'fas fa-grin-hearts', 'fas fa-grin-squint', 'fas fa-grin-squint-tears', 'fas fa-grin-stars', 'fas fa-grin-tears', 'fas fa-grin-tongue', 'fas fa-grin-tongue-squint', 'fas fa-grin-tongue-wink', 'fas fa-grin-wink', 'fas fa-grip-horizontal', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fas fa-guitar', 'fas fa-h-square', 'fas fa-hamburger', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand-holding', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-usd', 'fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-paper', 'fas fa-hand-peace', 'fas fa-hand-point-down', 'fas fa-hand-point-left', 'fas fa-hand-point-right', 'fas fa-hand-point-up', 'fas fa-hand-pointer', 'fas fa-hand-rock', 'fas fa-hand-scissors', 'fas fa-hand-spock', 'fas fa-hands', 'fas fa-hands-helping', 'fas fa-handshake', 'fas fa-hanukiah', 'fas fa-hard-hat', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-hdd', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-alt', 'fas fa-headset', 'fas fa-heart', 'fas fa-heart-broken', 'fas fa-heartbeat', 'fas fa-helicopter', 'fas fa-highlighter', 'fas fa-hiking', 'fas fa-hippo', 'fas fa-history', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fas fa-home', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'fas fa-hospital-alt', 'fas fa-hospital-symbol', 'fas fa-hot-tub', 'fas fa-hotdog', 'fas fa-hotel', 'fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house-damage', 'fas fa-hryvnia', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'fas fa-id-card', 'fas fa-id-card-alt', 'fas fa-igloo', 'fas fa-image', 'fas fa-images', 'fas fa-inbox', 'fas fa-indent', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fas fa-info-circle', 'fas fa-italic', 'fas fa-jedi', 'fas fa-joint', 'fas fa-journal-whills', 'fas fa-kaaba', 'fas fa-key', 'fas fa-keyboard', 'fas fa-khanda', 'fas fa-kiss', 'fas fa-kiss-beam', 'fas fa-kiss-wink-heart', 'fas fa-kiwi-bird', 'fas fa-landmark', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-medical', 'fas fa-laugh', 'fas fa-laugh-beam', 'fas fa-laugh-squint', 'fas fa-laugh-wink', 'fas fa-layer-group', 'fas fa-leaf', 'fas fa-lemon', 'fas fa-less-than', 'fas fa-less-than-equal', 'fas fa-level-down-alt', 'fas fa-level-up-alt', 'fas fa-life-ring', 'fas fa-lightbulb', 'fas fa-link', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-alt', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-location-arrow', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-long-arrow-alt-down', 'fas fa-long-arrow-alt-left', 'fas fa-long-arrow-alt-right', 'fas fa-long-arrow-alt-up', 'fas fa-low-vision', 'fas fa-luggage-cart', 'fas fa-magic', 'fas fa-magnet', 'fas fa-mail-bulk', 'fas fa-male', 'fas fa-map', 'fas fa-map-marked', 'fas fa-map-marked-alt', 'fas fa-map-marker', 'fas fa-map-marker-alt', 'fas fa-map-pin', 'fas fa-map-signs', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-h', 'fas fa-mars-stroke-v', 'fas fa-mask', 'fas fa-medal', 'fas fa-medkit', 'fas fa-meh', 'fas fa-meh-blank', 'fas fa-meh-rolling-eyes', 'fas fa-memory', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-meteor', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-alt', 'fas fa-microphone-alt-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fas fa-minus', 'fas fa-minus-circle', 'fas fa-minus-square', 'fas fa-mitten', 'fas fa-mobile', 'fas fa-mobile-alt', 'fas fa-money-bill', 'fas fa-money-bill-alt', 'fas fa-money-bill-wave', 'fas fa-money-bill-wave-alt', 'fas fa-money-check', 'fas fa-money-check-alt', 'fas fa-monument', 'fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-motorcycle', 'fas fa-mountain', 'fas fa-mouse', 'fas fa-mouse-pointer', 'fas fa-mug-hot', 'fas fa-music', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'fas fa-not-equal', 'fas fa-notes-medical', 'fas fa-object-group', 'fas fa-object-ungroup', 'fas fa-oil-can', 'fas fa-om', 'fas fa-otter', 'fas fa-outdent', 'fas fa-pager', 'fas fa-paint-brush', 'fas fa-paint-roller', 'fas fa-palette', 'fas fa-pallet', 'fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-parking', 'fas fa-passport', 'fas fa-pastafarianism', 'fas fa-paste', 'fas fa-pause', 'fas fa-pause-circle', 'fas fa-paw', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-alt', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-square', 'fas fa-pencil-alt', 'fas fa-pencil-ruler', 'fas fa-people-carry', 'fas fa-pepper-hot', 'fas fa-percent', 'fas fa-percentage', 'fas fa-person-booth', 'fas fa-phone', 'fas fa-phone-alt', 'fas fa-phone-slash', 'fas fa-phone-square', 'fas fa-phone-square-alt', 'fas fa-phone-volume', 'fas fa-photo-video', 'fas fa-piggy-bank', 'fas fa-pills', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-departure', 'fas fa-play', 'fas fa-play-circle', 'fas fa-plug', 'fas fa-plus', 'fas fa-plus-circle', 'fas fa-plus-square', 'fas fa-podcast', 'fas fa-poll', 'fas fa-poll-h', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-portrait', 'fas fa-pound-sign', 'fas fa-power-off', 'fas fa-pray', 'fas fa-praying-hands', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-alt', 'fas fa-print', 'fas fa-procedures', 'fas fa-project-diagram', 'fas fa-puzzle-piece', 'fas fa-qrcode', 'fas fa-question', 'fas fa-question-circle', 'fas fa-quidditch', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-quran', 'fas fa-radiation', 'fas fa-radiation-alt', 'fas fa-rainbow', 'fas fa-random', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-recycle', 'fas fa-redo', 'fas fa-redo-alt', 'fas fa-registered', 'fas fa-remove-format', 'fas fa-reply', 'fas fa-reply-all', 'fas fa-republican', 'fas fa-restroom', 'fas fa-retweet', 'fas fa-ribbon', 'fas fa-ring', 'fas fa-road', 'fas fa-robot', 'fas fa-rocket', 'fas fa-route', 'fas fa-rss', 'fas fa-rss-square', 'fas fa-ruble-sign', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-running', 'fas fa-rupee-sign', 'fas fa-sad-cry', 'fas fa-sad-tear', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-save', 'fas fa-school', 'fas fa-screwdriver', 'fas fa-scroll', 'fas fa-sd-card', 'fas fa-search', 'fas fa-search-dollar', 'fas fa-search-location', 'fas fa-search-minus', 'fas fa-search-plus', 'fas fa-seedling', 'fas fa-server', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-alt', 'fas fa-share-alt-square', 'fas fa-share-square', 'fas fa-shekel-sign', 'fas fa-shield-alt', 'fas fa-ship', 'fas fa-shipping-fast', 'fas fa-shoe-prints', 'fas fa-shopping-bag', 'fas fa-shopping-basket', 'fas fa-shopping-cart', 'fas fa-shower', 'fas fa-shuttle-van', 'fas fa-sign', 'fas fa-sign-in-alt', 'fas fa-sign-language', 'fas fa-sign-out-alt', 'fas fa-signal', 'fas fa-signature', 'fas fa-sim-card', 'fas fa-sitemap', 'fas fa-skating', 'fas fa-skiing', 'fas fa-skiing-nordic', 'fas fa-skull', 'fas fa-skull-crossbones', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders-h', 'fas fa-smile', 'fas fa-smile-beam', 'fas fa-smile-wink', 'fas fa-smog', 'fas fa-smoking', 'fas fa-smoking-ban', 'fas fa-sms', 'fas fa-snowboarding', 'fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-alpha-down', 'fas fa-sort-alpha-down-alt', 'fas fa-sort-alpha-up', 'fas fa-sort-alpha-up-alt', 'fas fa-sort-amount-down', 'fas fa-sort-amount-down-alt', 'fas fa-sort-amount-up', 'fas fa-sort-amount-up-alt', 'fas fa-sort-down', 'fas fa-sort-numeric-down', 'fas fa-sort-numeric-down-alt', 'fas fa-sort-numeric-up', 'fas fa-sort-numeric-up-alt', 'fas fa-sort-up', 'fas fa-spa', 'fas fa-space-shuttle', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spray-can', 'fas fa-square', 'fas fa-square-full', 'fas fa-square-root-alt', 'fas fa-stamp', 'fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'fas fa-star-half-alt', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fas fa-step-backward', 'fas fa-step-forward', 'fas fa-stethoscope', 'fas fa-sticky-note', 'fas fa-stop', 'fas fa-stop-circle', 'fas fa-stopwatch', 'fas fa-store', 'fas fa-store-alt', 'fas fa-stream', 'fas fa-street-view', 'fas fa-strikethrough', 'fas fa-stroopwafel', 'fas fa-subscript', 'fas fa-subway', 'fas fa-suitcase', 'fas fa-suitcase-rolling', 'fas fa-sun', 'fas fa-superscript', 'fas fa-surprise', 'fas fa-swatchbook', 'fas fa-swimmer', 'fas fa-swimming-pool', 'fas fa-synagogue', 'fas fa-sync', 'fas fa-sync-alt', 'fas fa-syringe', 'fas fa-table', 'fas fa-table-tennis', 'fas fa-tablet', 'fas fa-tablet-alt', 'fas fa-tablets', 'fas fa-tachometer-alt', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tasks', 'fas fa-taxi', 'fas fa-teeth', 'fas fa-teeth-open', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-tenge', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-width', 'fas fa-th', 'fas fa-th-large', 'fas fa-th-list', 'fas fa-theater-masks', 'fas fa-thermometer', 'fas fa-thermometer-empty', 'fas fa-thermometer-full', 'fas fa-thermometer-half', 'fas fa-thermometer-quarter', 'fas fa-thermometer-three-quarters', 'fas fa-thumbs-down', 'fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-ticket-alt', 'fas fa-times', 'fas fa-times-circle', 'fas fa-tint', 'fas fa-tint-slash', 'fas fa-tired', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toolbox', 'fas fa-tools', 'fas fa-tooth', 'fas fa-torah', 'fas fa-torii-gate', 'fas fa-tractor', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-tram', 'fas fa-transgender', 'fas fa-transgender-alt', 'fas fa-trash', 'fas fa-trash-alt', 'fas fa-trash-restore', 'fas fa-trash-restore-alt', 'fas fa-tree', 'fas fa-trophy', 'fas fa-truck', 'fas fa-truck-loading', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-tshirt', 'fas fa-tty', 'fas fa-tv', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fas fa-underline', 'fas fa-undo', 'fas fa-undo-alt', 'fas fa-universal-access', 'fas fa-university', 'fas fa-unlink', 'fas fa-unlock', 'fas fa-unlock-alt', 'fas fa-upload', 'fas fa-user', 'fas fa-user-alt', 'fas fa-user-alt-slash', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-circle', 'fas fa-user-clock', 'fas fa-user-cog', 'fas fa-user-edit', 'fas fa-user-friends', 'fas fa-user-graduate', 'fas fa-user-injured', 'fas fa-user-lock', 'fas fa-user-md', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-times', 'fas fa-users', 'fas fa-users-cog', 'fas fa-utensil-spoon', 'fas fa-utensils', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vial', 'fas fa-vials', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fas fa-voicemail', 'fas fa-volleyball-ball', 'fas fa-volume-down', 'fas fa-volume-mute', 'fas fa-volume-off', 'fas fa-volume-up', 'fas fa-vote-yea', 'fas fa-vr-cardboard', 'fas fa-walking', 'fas fa-wallet', 'fas fa-warehouse', 'fas fa-water', 'fas fa-wave-square', 'fas fa-weight', 'fas fa-weight-hanging', 'fas fa-wheelchair', 'fas fa-wifi', 'fas fa-wind', 'fas fa-window-close', 'fas fa-window-maximize', 'fas fa-window-minimize', 'fas fa-window-restore', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-alt', 'fas fa-won-sign', 'fas fa-wrench', 'fas fa-x-ray', 'fas fa-yen-sign', 'fas fa-yin-yang', 'far fa-address-book', 'far fa-address-card', 'far fa-angry', 'far fa-arrow-alt-circle-down', 'far fa-arrow-alt-circle-left', 'far fa-arrow-alt-circle-right', 'far fa-arrow-alt-circle-up', 'far fa-bell', 'far fa-bell-slash', 'far fa-bookmark', 'far fa-building', 'far fa-calendar', 'far fa-calendar-alt', 'far fa-calendar-check', 'far fa-calendar-minus', 'far fa-calendar-plus', 'far fa-calendar-times', 'far fa-caret-square-down', 'far fa-caret-square-left', 'far fa-caret-square-right', 'far fa-caret-square-up', 'far fa-chart-bar', 'far fa-check-circle', 'far fa-check-square', 'far fa-circle', 'far fa-clipboard', 'far fa-clock', 'far fa-clone', 'far fa-closed-captioning', 'far fa-comment', 'far fa-comment-alt', 'far fa-comment-dots', 'far fa-comments', 'far fa-compass', 'far fa-copy', 'far fa-copyright', 'far fa-credit-card', 'far fa-dizzy', 'far fa-dot-circle', 'far fa-edit', 'far fa-envelope', 'far fa-envelope-open', 'far fa-eye', 'far fa-eye-slash', 'far fa-file', 'far fa-file-alt', 'far fa-file-archive', 'far fa-file-audio', 'far fa-file-code', 'far fa-file-excel', 'far fa-file-image', 'far fa-file-pdf', 'far fa-file-powerpoint', 'far fa-file-video', 'far fa-file-word', 'far fa-flag', 'far fa-flushed', 'far fa-folder', 'far fa-folder-open', 'far fa-frown', 'far fa-frown-open', 'far fa-futbol', 'far fa-gem', 'far fa-grimace', 'far fa-grin', 'far fa-grin-alt', 'far fa-grin-beam', 'far fa-grin-beam-sweat', 'far fa-grin-hearts', 'far fa-grin-squint', 'far fa-grin-squint-tears', 'far fa-grin-stars', 'far fa-grin-tears', 'far fa-grin-tongue', 'far fa-grin-tongue-squint', 'far fa-grin-tongue-wink', 'far fa-grin-wink', 'far fa-hand-lizard', 'far fa-hand-paper', 'far fa-hand-peace', 'far fa-hand-point-down', 'far fa-hand-point-left', 'far fa-hand-point-right', 'far fa-hand-point-up', 'far fa-hand-pointer', 'far fa-hand-rock', 'far fa-hand-scissors', 'far fa-hand-spock', 'far fa-handshake', 'far fa-hdd', 'far fa-heart', 'far fa-hospital', 'far fa-hourglass', 'far fa-id-badge', 'far fa-id-card', 'far fa-image', 'far fa-images', 'far fa-keyboard', 'far fa-kiss', 'far fa-kiss-beam', 'far fa-kiss-wink-heart', 'far fa-laugh', 'far fa-laugh-beam', 'far fa-laugh-squint', 'far fa-laugh-wink', 'far fa-lemon', 'far fa-life-ring', 'far fa-lightbulb', 'far fa-list-alt', 'far fa-map', 'far fa-meh', 'far fa-meh-blank', 'far fa-meh-rolling-eyes', 'far fa-minus-square', 'far fa-money-bill-alt', 'far fa-moon', 'far fa-newspaper', 'far fa-object-group', 'far fa-object-ungroup', 'far fa-paper-plane', 'far fa-pause-circle', 'far fa-play-circle', 'far fa-plus-square', 'far fa-question-circle', 'far fa-registered', 'far fa-sad-cry', 'far fa-sad-tear', 'far fa-save', 'far fa-share-square', 'far fa-smile', 'far fa-smile-beam', 'far fa-smile-wink', 'far fa-snowflake', 'far fa-square', 'far fa-star', 'far fa-star-half', 'far fa-sticky-note', 'far fa-stop-circle', 'far fa-sun', 'far fa-surprise', 'far fa-thumbs-down', 'far fa-thumbs-up', 'far fa-times-circle', 'far fa-tired', 'far fa-trash-alt', 'far fa-user', 'far fa-user-circle', 'far fa-window-close', 'far fa-window-maximize', 'far fa-window-minimize', 'far fa-window-restore', 'fab fa-500px', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fab fa-acquisitions-incorporated', 'fab fa-adn', 'fab fa-adobe', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fab fa-android', 'fab fa-angellist', 'fab fa-angrycreative', 'fab fa-angular', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fab fa-artstation', 'fab fa-asymmetrik', 'fab fa-atlassian', 'fab fa-audible', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fab fa-aws', 'fab fa-bandcamp', 'fab fa-battle-net', 'fab fa-behance', 'fab fa-behance-square', 'fab fa-bimobject', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fab fa-bootstrap', 'fab fa-btc', 'fab fa-buffer', 'fab fa-buromobelexperte', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fab fa-canadian-maple-leaf', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fab fa-centercode', 'fab fa-centos', 'fab fa-chrome', 'fab fa-chromecast', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fab fa-codepen', 'fab fa-codiepie', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fab fa-cotton-bureau', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fab fa-critical-role', 'fab fa-css3', 'fab fa-css3-alt', 'fab fa-cuttlefish', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dashcube', 'fab fa-delicious', 'fab fa-deploydog', 'fab fa-deskpro', 'fab fa-dev', 'fab fa-deviantart', 'fab fa-dhl', 'fab fa-diaspora', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fab fa-dochub', 'fab fa-docker', 'fab fa-draft2digital', 'fab fa-dribbble', 'fab fa-dribbble-square', 'fab fa-dropbox', 'fab fa-drupal', 'fab fa-dyalog', 'fab fa-earlybirds', 'fab fa-ebay', 'fab fa-edge', 'fab fa-elementor', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fab fa-envira', 'fab fa-erlang', 'fab fa-ethereum', 'fab fa-etsy', 'fab fa-evernote', 'fab fa-expeditedssl', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fab fa-facebook-square', 'fab fa-fantasy-flight-games', 'fab fa-fedex', 'fab fa-fedora', 'fab fa-figma', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fab fa-flickr', 'fab fa-flipboard', 'fab fa-fly', 'fab fa-font-awesome', 'fab fa-font-awesome-alt', 'fab fa-font-awesome-flag', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fab fa-foursquare', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fab fa-fulcrum', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fab fa-git', 'fab fa-git-alt', 'fab fa-git-square', 'fab fa-github', 'fab fa-github-alt', 'fab fa-github-square', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fab fa-glide', 'fab fa-glide-g', 'fab fa-gofore', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-plus-square', 'fab fa-google-wallet', 'fab fa-gratipay', 'fab fa-grav', 'fab fa-gripfire', 'fab fa-grunt', 'fab fa-gulp', 'fab fa-hacker-news', 'fab fa-hacker-news-square', 'fab fa-hackerrank', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hooli', 'fab fa-hornbill', 'fab fa-hotjar', 'fab fa-houzz', 'fab fa-html5', 'fab fa-hubspot', 'fab fa-ideal', 'fab fa-imdb', 'fab fa-instagram', 'fab fa-instagram-square', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fab fa-java', 'fab fa-jedi-order', 'fab fa-jenkins', 'fab fa-jira', 'fab fa-joget', 'fab fa-joomla', 'fab fa-js', 'fab fa-js-square', 'fab fa-jsfiddle', 'fab fa-kaggle', 'fab fa-keybase', 'fab fa-keycdn', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fab fa-korvue', 'fab fa-laravel', 'fab fa-lastfm', 'fab fa-lastfm-square', 'fab fa-leanpub', 'fab fa-less', 'fab fa-line', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fab fa-lyft', 'fab fa-magento', 'fab fa-mailchimp', 'fab fa-mandalorian', 'fab fa-markdown', 'fab fa-mastodon', 'fab fa-maxcdn', 'fab fa-mdb', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medium-m', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fab fa-mendeley', 'fab fa-microblog', 'fab fa-microsoft', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fab fa-modx', 'fab fa-monero', 'fab fa-napster', 'fab fa-neos', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fab fa-odnoklassniki', 'fab fa-odnoklassniki-square', 'fab fa-old-republic', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fab fa-page4', 'fab fa-pagelines', 'fab fa-palfed', 'fab fa-patreon', 'fab fa-paypal', 'fab fa-penny-arcade', 'fab fa-periscope', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fab fa-pied-piper-square', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pinterest-square', 'fab fa-playstation', 'fab fa-product-hunt', 'fab fa-pushed', 'fab fa-python', 'fab fa-qq', 'fab fa-quinscape', 'fab fa-quora', 'fab fa-r-project', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-reddit-square', 'fab fa-redhat', 'fab fa-renren', 'fab fa-replyd', 'fab fa-researchgate', 'fab fa-resolving', 'fab fa-rev', 'fab fa-rocketchat', 'fab fa-rockrms', 'fab fa-safari', 'fab fa-salesforce', 'fab fa-sass', 'fab fa-schlix', 'fab fa-scribd', 'fab fa-searchengin', 'fab fa-sellcast', 'fab fa-sellsy', 'fab fa-servicestack', 'fab fa-shirtsinbulk', 'fab fa-shopify', 'fab fa-shopware', 'fab fa-simplybuilt', 'fab fa-sistrix', 'fab fa-sith', 'fab fa-sketch', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fab fa-slack-hash', 'fab fa-slideshare', 'fab fa-snapchat', 'fab fa-snapchat-ghost', 'fab fa-snapchat-square', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fab fa-speakap', 'fab fa-speaker-deck', 'fab fa-spotify', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-square', 'fab fa-steam-symbol', 'fab fa-sticker-mule', 'fab fa-strava', 'fab fa-stripe', 'fab fa-stripe-s', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fab fa-superpowers', 'fab fa-supple', 'fab fa-suse', 'fab fa-swift', 'fab fa-symfony', 'fab fa-teamspeak', 'fab fa-telegram', 'fab fa-telegram-plane', 'fab fa-tencent-weibo', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fab fa-think-peaks', 'fab fa-trade-federation', 'fab fa-trello', 'fab fa-tripadvisor', 'fab fa-tumblr', 'fab fa-tumblr-square', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-twitter-square', 'fab fa-typo3', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fab fa-uniregistry', 'fab fa-unity', 'fab fa-untappd', 'fab fa-ups', 'fab fa-usb', 'fab fa-usps', 'fab fa-ussunnah', 'fab fa-vaadin', 'fab fa-viacoin', 'fab fa-viadeo', 'fab fa-viadeo-square', 'fab fa-viber', 'fab fa-vimeo', 'fab fa-vimeo-square', 'fab fa-vimeo-v', 'fab fa-vine', 'fab fa-vk', 'fab fa-vnv', 'fab fa-vuejs', 'fab fa-waze', 'fab fa-weebly', 'fab fa-weibo', 'fab fa-weixin', 'fab fa-whatsapp', 'fab fa-whatsapp-square', 'fab fa-whmcs', 'fab fa-wikipedia-w', 'fab fa-windows', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wolf-pack-battalion', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fab fa-xbox', 'fab fa-xing', 'fab fa-xing-square', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fab fa-yoast', 'fab fa-youtube', 'fab fa-youtube-square', 'fab fa-zhihu']; - -/***/ }), - -/***/ "./src/forum/states/ChatState.js": -/*!***************************************!*\ - !*** ./src/forum/states/ChatState.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ChatState; }); -/* harmony import */ var _models_Message__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../models/Message */ "./src/forum/models/Message.js"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); -/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/Stream */ "flarum/utils/Stream"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/Link */ "flarum/components/Link"); -/* harmony import */ var flarum_components_Link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Link__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _resources__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../resources */ "./src/forum/resources.js"); -/* harmony import */ var _ViewportState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ViewportState */ "./src/forum/states/ViewportState.js"); - - - - - - -var refAudio = new Audio(); -refAudio.src = _resources__WEBPACK_IMPORTED_MODULE_4__["base64AudioNotificationRef"]; -refAudio.volume = 0.5; -var audio = new Audio(); -audio.src = _resources__WEBPACK_IMPORTED_MODULE_4__["base64AudioNotification"]; -audio.volume = 0.5; - -var ChatState = -/*#__PURE__*/ -function () { - function ChatState() { - var _JSON$parse, _neonchatState$beingS, _neonchatState$beingS2, _neonchatState$isMute, _neonchatState$notify, _neonchatState$transf, _neonchatState$select; - - this.q = flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2___default()(''); - this.chats = []; - this.chatmessages = []; - this.chatsLoading = true; - this.curChat = null; - this.totalHiddenCount = 0; - var neonchatState = (_JSON$parse = JSON.parse(localStorage.getItem('neonchat'))) != null ? _JSON$parse : {}; - this.frameState = { - beingShown: (_neonchatState$beingS = neonchatState.beingShown) != null ? _neonchatState$beingS : app.forum.attribute('xelson-chat.settings.display.minimize'), - beingShownChatsList: (_neonchatState$beingS2 = neonchatState.beingShownChatsList) != null ? _neonchatState$beingS2 : 0, - isMuted: (_neonchatState$isMute = neonchatState.isMuted) != null ? _neonchatState$isMute : false, - notify: (_neonchatState$notify = neonchatState.notify) != null ? _neonchatState$notify : false, - transform: (_neonchatState$transf = neonchatState.transform) != null ? _neonchatState$transf : { - x: 0, - y: 400 - }, - isActive: true, - selectedChat: (_neonchatState$select = neonchatState.selectedChat) != null ? _neonchatState$select : 0 - }; - this.permissions = { - post: app.forum.attribute('xelson-chat.permissions.chat'), - edit: app.forum.attribute('xelson-chat.permissions.edit'), - "delete": app.forum.attribute('xelson-chat.permissions.delete'), - create: { - channel: app.forum.attribute('xelson-chat.permissions.create.channel'), - chat: app.forum.attribute('xelson-chat.permissions.create') - }, - moderate: { - "delete": app.forum.attribute('xelson-chat.permissions.moderate.delete'), - vision: app.forum.attribute('xelson-chat.permissions.moderate.vision') - } - }; - this.viewportStates = {}; - if (app.session.user && app.pusher) app.pusher.then(this.listenSocketChannels.bind(this)); - } - - var _proto = ChatState.prototype; - - _proto.getViewportState = function getViewportState(model) { - return this.viewportStates[model.id()]; - }; - - _proto.listenSocketChannels = function listenSocketChannels(socket) { - var channels = socket.channels; - channels.main.bind('neonchat.events', this.handleSocketEvent.bind(this)); - if (channels.user) channels.user.bind('neonchat.events', this.handleSocketEvent.bind(this)); - }; - - _proto.handleSocketEvent = function handleSocketEvent(r) { - var message = r.response.message; - if (message) message = app.store.pushPayload(message); - var chat = r.response.chat; - if (chat) chat = app.store.pushPayload(chat); // Workaround for blocking events from a chat we leaved - - if (message && message.chat().type() == 1 && message.chat().removed_at()) return; - - switch (r.event.id) { - case 'message.post': - { - if (!app.session.user || message.user() != app.session.user) { - this.insertChatMessage(message, true); - m.redraw(); - } - - break; - } - - case 'message.edit': - { - var actions = message.data.attributes.actions; - if (app.session.user && actions.invoker == app.session.user.id()) return; - - if (actions.msg !== undefined) { - if (!app.session.user || message.user() != app.session.user) this.editChatMessage(message, false, actions.msg); - } else if (actions.hide !== undefined) { - if (!app.session.user || actions.invoker != app.session.user.id()) actions.hide ? this.hideChatMessage(message, false, message.deleted_by()) : this.restoreChatMessage(message, false); - } - - break; - } - - case 'message.delete': - { - if (!app.session.user || message.deleted_by() != app.session.user) this.deleteChatMessage(message, false, message.deleted_by()); - break; - } - - case 'chat.create': - { - if (!app.session.user || chat.creator() != app.session.user) { - this.addChat(chat, true); - m.redraw(); - } - - break; - } - - case 'chat.edit': - { - this.editChat(chat, true); - var range = r.response.eventmsg_range; - if (range.length) this.apiFetchChatMessages(chat, range, { - notify: true, - withFlash: true, - disableLoader: true - }); - - if (app.session.user && r.response.roles_updated_for && r.response.roles_updated_for.includes(app.session.user.id())) { - var role = app.session.user.chat_pivot(chat.id()).role(); - - switch (role) { - case 0: - { - app.alerts.show({ - type: 'error' - }, app.translator.trans('xelson-chat.forum.chat.edit_modal.moderator.lost', { - chatname: m("b", null, chat.title()) - })); - break; - } - - case 1: - { - app.alerts.show({ - type: 'success' - }, app.translator.trans('xelson-chat.forum.chat.edit_modal.moderator.got', { - chatname: m("b", null, chat.title()) - })); - break; - } - } - } - - m.redraw(); - break; - } - - case 'chat.delete': - { - if (!app.session.user || chat.creator() != app.session.user) { - this.deleteChat(chat); - m.redraw(); - } - - break; - } - } - }; - - _proto.getFrameState = function getFrameState(key) { - return this.frameState[key]; - }; - - _proto.saveFrameState = function saveFrameState(key, value) { - var _JSON$parse2; - - var neonchatState = (_JSON$parse2 = JSON.parse(localStorage.getItem('neonchat'))) != null ? _JSON$parse2 : {}; - neonchatState[key] = value; - localStorage.setItem('neonchat', JSON.stringify(neonchatState)); - this.frameState[key] = value; - }; - - _proto.getPermissions = function getPermissions() { - return this.permissions; - }; - - _proto.getChats = function getChats() { - var _this = this; - - return this.chats.filter(function (chat) { - return _this.q() && chat.matches(_this.q().toLowerCase()) || !_this.q() && !chat.removed_at(); - }); - }; - - _proto.getChatsSortedByLastUpdate = function getChatsSortedByLastUpdate() { - return this.getChats().sort(function (a, b) { - if (b.last_message() && a.last_message()) { - var _b$last_message, _a$last_message; - - return ((_b$last_message = b.last_message()) == null ? void 0 : _b$last_message.created_at()) - ((_a$last_message = a.last_message()) == null ? void 0 : _a$last_message.created_at()); - } - - return 0; - }); - }; - - _proto.addChat = function addChat(model, outside) { - if (outside === void 0) { - outside = false; - } - - this.chats.push(model); - this.viewportStates[model.id()] = new _ViewportState__WEBPACK_IMPORTED_MODULE_5__["default"]({ - model: model - }); - if (model.id() == this.getFrameState('selectedChat')) this.onChatChanged(model); - if (outside) model.isNeedToFlash = true; - }; - - _proto.editChat = function editChat(model, outside) { - if (outside === void 0) { - outside = false; - } - - if (outside) model.isNeedToFlash = true; - }; - - _proto.apiReadChat = function apiReadChat(chat, message) { - if (this.readingTimeout) clearTimeout(this.readingTimeout); - var timestamp; - if (message instanceof Date) timestamp = message.toISOString();else if (message instanceof _models_Message__WEBPACK_IMPORTED_MODULE_0__["default"]) timestamp = message.created_at().toISOString(); - this.readingTimeout = setTimeout(function () { - return chat.save({ - actions: { - reading: timestamp - } - }); - }, 1000); - }; - - _proto.deleteChat = function deleteChat(model) { - this.chats = this.chats.filter(function (mdl) { - return mdl != model; - }); - if (this.getCurrentChat() == model) this.setCurrentChat(null); - }; - - _proto.isChatPM = function isChatPM(model) { - return model.type() == 0 && model.users().length <= 2; - }; - - _proto.isExistsPMChat = function isExistsPMChat(user1, user2) { - return this.getChats().some(function (model) { - var users = model.users(); - return model.type() === 0 && users.length === 2 && users.some(function (model) { - return model == user1; - }) && users.some(function (model) { - return model == user2; - }); - }); - }; - - _proto.onChatChanged = function onChatChanged(model, e) { - if (e === void 0) { - e = {}; - } - - e.redraw = false; - if (model == this.getCurrentChat()) return; - this.setCurrentChat(model); - m.redraw.sync(); - }; - - _proto.comporatorAscButZerosDesc = function comporatorAscButZerosDesc(a, b) { - return a == 0 ? 1 : b == 0 ? -1 : a - b; - }; - - _proto.getChatMessages = function getChatMessages(filter) { - var _this2 = this; - - var list = this.chatmessages.sort(function (a, b) { - return _this2.comporatorAscButZerosDesc(a.id(), b.id()); - }); - return filter ? list.filter(filter) : list; - }; - - _proto.apiFetchChatMessages = function apiFetchChatMessages(model, query, options) { - var _this3 = this; - - if (options === void 0) { - options = {}; - } - - var viewport = this.getViewportState(model); - var self = this; - if (viewport.loading || viewport.loadingQueries[query]) return; - viewport.loading = true; - viewport.loadingQueries[query] = true; - return app.store.find('chatmessages', { - chat_id: model.id(), - query: query - }).then(function (r) { - if (r.length) { - r.map(function (model) { - if (options.withFlash) model.isNeedToFlash = true; - self.insertChatMessage(model); - }); - if (options.notify) _this3.messageNotify(r[0]); - viewport.loading = false; - viewport.loadingQueries[query] = false; //viewport.scroll.autoScroll = false; - - m.redraw(); - } - }); - }; - - _proto.isChatMessageExists = function isChatMessageExists(model) { - return this.chatmessages.find(function (e) { - return e.id() == model.id(); - }); - }; - - _proto.insertEventChatMessage = function insertEventChatMessage(model, data, notify) { - if (notify === void 0) { - notify = false; - } - - model.pushAttributes({ - message: JSON.stringify(data) - }); - insertChatMessage(model, notify); - }; - - _proto.insertChatMessage = function insertChatMessage(model, notify) { - if (notify === void 0) { - notify = false; - } - - if (this.isChatMessageExists(model)) return null; - this.chatmessages.push(model); - - if (notify) { - this.messageNotify(model); - model.isNeedToFlash = true; - var chatModel = model.chat(); - chatModel.isNeedToFlash = true; - chatModel.pushAttributes({ - unreaded: chatModel.unreaded() + 1 - }); - } - - var list = this.getChatMessages(function (mdl) { - return mdl.chat() == model.chat(); - }); - - if ((notify || model.chat().removed_at()) && model.id() && list[list.length - 1] == model) { - model.chat().pushData({ - relationships: { - last_message: model - } - }); - this.getViewportState(model.chat()).newPushedPosts = true; - } - }; - - _proto.renderChatMessage = function renderChatMessage(model, content) { - var element = model instanceof flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a ? document.querySelector(".NeonChatFrame .message-wrapper[data-id=\"" + model.id() + "\"] .message") : model; - - if (element) { - element.innerText = content; - s9e.TextFormatter.preview(content, element); // Workaround for user mentions that doesn't works properly - - $(element).find('.UserMention').each(function () { - var user = app.store.getBy('users', 'username', this.innerText.substring(1)); - - if (user) { - this.className = ''; - m.render(this, m(flarum_components_Link__WEBPACK_IMPORTED_MODULE_3___default.a, { - href: app.route.user(user) - }, m("span", { - className: "UserMention" - }, '@' + user.displayName()))); - } - }); - if (this.executeScriptsTimeout) clearTimeout(this.executeScriptsTimeout); - this.executeScriptsTimeout = setTimeout(function () { - $('.NeonChatFrame script').each(function () { - if (!self.executedScripts) self.executedScripts = {}; - var scriptURL = $(this).attr('src'); - - if (!self.executedScripts[scriptURL]) { - var scriptTag = document.createElement('script'); - scriptTag.src = scriptURL; - document.head.appendChild(scriptTag); - self.executedScripts[scriptURL] = true; - } - }); - }, 100); - } - }; - - _proto.onChatMessageClicked = function onChatMessageClicked(eventName, model) { - switch (eventName) { - case 'dropdownHide': - { - this.hideChatMessage(model, true); - break; - } - - case 'dropdownRestore': - { - this.restoreChatMessage(model, true); - break; - } - - case 'dropdownDelete': - { - this.deleteChatMessage(model, true); - break; - } - } - }; - - _proto.postChatMessage = function postChatMessage(model) { - return model.save({ - message: model.content, - created_at: new Date(), - chat_id: model.chat().id() - }).then(function (r) { - model.isTimedOut = false; - model.isNeedToFlash = true; - model.isEditing = false; - model.chat().pushData({ - relationships: { - last_message: model - } - }); - }, function (r) { - model.isTimedOut = true; - }); - }; - - _proto.editChatMessage = function editChatMessage(model, sync, content) { - if (sync === void 0) { - sync = false; - } - - model.content = content; - model.isNeedToFlash = true; - model.pushAttributes({ - message: content, - edited_at: new Date() - }); - if (sync) model.save({ - actions: { - msg: content - }, - edited_at: new Date(), - message: content - }); - m.redraw(); - }; - - _proto.deleteChatMessage = function deleteChatMessage(model, sync, user) { - if (sync === void 0) { - sync = false; - } - - if (user === void 0) { - user = app.session.user; - } - - model.isDeletedForever = true; - if (!model.deleted_by()) model.pushData({ - relationships: { - deleted_by: user - } - }); - var list = this.getChatMessages(function (mdl) { - return mdl.chat() == model.chat() && !mdl.isDeletedForever; - }); - if (list.length) model.chat().pushData({ - relationships: { - last_message: list[list.length - 1] - } - }); - this.chatmessages = this.chatmessages.filter(function (mdl) { - return mdl != model; - }); - if (sync) model["delete"](); - m.redraw(); - }; - - _proto.totalHidden = function totalHidden() { - return this.totalHiddenCount; - }; - - _proto.hideChatMessage = function hideChatMessage(model, sync, user) { - if (sync === void 0) { - sync = false; - } - - if (user === void 0) { - user = app.session.user; - } - - model.pushData({ - relationships: { - deleted_by: user - } - }); - if (sync) model.save({ - actions: { - hide: true - }, - relationships: { - deleted_by: app.session.user - } - }); - this.totalHiddenCount++; - m.redraw(); - }; - - _proto.restoreChatMessage = function restoreChatMessage(model, sync) { - if (sync === void 0) { - sync = false; - } - - if (!this.isChatMessageExists(model)) { - this.insertChatMessage(model); - model.isNeedToFlash = true; - } else { - model.pushAttributes({ - deleted_by: 0 - }); - model.isNeedToFlash = true; - delete model.data.relationships.deleted_by; - } - - if (sync) model.save({ - actions: { - hide: false - }, - deleted_by: 0 - }); - m.redraw(); - }; - - _proto.setCurrentChat = function setCurrentChat(model) { - this.curChat = model; - this.saveFrameState('selectedChat', model ? model.id() : null); - }; - - _proto.getCurrentChat = function getCurrentChat() { - return this.curChat; - }; - - _proto.apiFetchChats = function apiFetchChats() { - var _this4 = this; - - return app.store.find('chats').then(function (chats) { - chats.map(function (model) { - return _this4.addChat(model); - }); - _this4.chatsLoading = false; - m.redraw(); - }); - }; - - _proto.messageNotify = function messageNotify(model) { - if (!app.session.user || model.user().id() != app.session.user.id()) this.notifyTry(model); - }; - - _proto.notifyTry = function notifyTry(model) { - if (!('Notification' in window)) return; - if (this.messageIsMention(model)) this.notifySend(model); - this.notifySound(model); - }; - - _proto.messageIsMention = function messageIsMention(model) { - return app.session.user && model.message().indexOf('@' + app.session.user.username()) >= 0; - }; - - _proto.notifySend = function notifySend(model) { - var avatar = model.user().avatarUrl(); - if (!avatar) avatar = _resources__WEBPACK_IMPORTED_MODULE_4__["base64PlaceholderAvatarImage"]; - if (this.getFrameState('notify') && document.hidden) new Notification(model.chat().title(), { - body: model.user().username() + ": " + model.message(), - icon: avatar, - silent: true, - timestamp: new Date() - }); - }; - - _proto.notifySound = function notifySound(model) { - if (!this.getFrameState('isMuted')) { - var sound = this.messageIsMention(model) ? refAudio : audio; - sound.currentTime = 0; - sound.play(); - } - } - /** - * https://github.com/flarum/core/blob/7e74f5a03c7f206014f3f091968625fc0bf29094/js/src/forum/components/PostStream.js#L579 - * - * 'Flash' the given post, drawing the user's attention to it. - * - * @param {jQuery} $item - */ - ; - - _proto.flashItem = function flashItem($item) { - $item.addClass('flash').one('animationend webkitAnimationEnd', function () { - return $item.removeClass('flash'); - }); - }; - - return ChatState; -}(); - - - -/***/ }), - -/***/ "./src/forum/states/ViewportState.js": -/*!*******************************************!*\ - !*** ./src/forum/states/ViewportState.js ***! - \*******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ViewportState; }); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); -/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/Stream */ "flarum/utils/Stream"); -/* harmony import */ var flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2__); - - - - -var ViewportState = -/*#__PURE__*/ -function () { - function ViewportState(params) { - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "loadingSend", false); - - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "scroll", { - autoScroll: true, - oldScroll: 0 - }); - - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "loading", false); - - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "loadingQueries", {}); - - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "input", { - messageLength: 0, - rows: 1, - content: flarum_utils_Stream__WEBPACK_IMPORTED_MODULE_2___default()() - }); - - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "messagesFetched", false); - - Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(this, "chatStorage", { - key: null, - draft: null - }); - - if (params.model) { - this.initChatStorage(params.model); - this.input.content(this.getChatStorageValue('draft')); - } - } - - var _proto = ViewportState.prototype; - - _proto.initChatStorage = function initChatStorage(model) { - this.chatStorage.key = "neonchat.viewport" + model.id(); - var parsedData = JSON.parse(localStorage.getItem(this.chatStorage.key)); - - if (parsedData) { - var _parsedData$draft; - - this.chatStorage.draft = (_parsedData$draft = parsedData.draft) != null ? _parsedData$draft : ''; - } - }; - - _proto.getChatStorageValue = function getChatStorageValue(key) { - return this.chatStorage[key]; - }; - - _proto.setChatStorageValue = function setChatStorageValue(key, value) { - var _JSON$parse; - - var cachedState = (_JSON$parse = JSON.parse(localStorage.getItem(this.chatStorage.key))) != null ? _JSON$parse : {}; - cachedState[key] = value; - localStorage.setItem(this.chatStorage.key, JSON.stringify(cachedState)); - this.chatStorage[key] = value; - }; - - _proto.onChatMessageClicked = function onChatMessageClicked(eventName, model) { - switch (eventName) { - case 'dropdownEditStart': - { - this.messageEdit(model, true); - break; - } - - case 'dropdownResend': - { - this.messageResend(model); - break; - } - - case 'insertMention': - { - this.insertMention(model); - break; - } - } - }; - - _proto.getChatInput = function getChatInput() { - return document.querySelector('.NeonChatFrame #chat-input'); - }; - - _proto.messageSend = function messageSend() { - var text = this.input.content(); - - if (text && text.trim().length > 0 && !this.loadingSend) { - if (this.input.writingPreview) { - this.input.writingPreview = false; - this.messagePost(this.input.previewModel); - app.chat.insertChatMessage(Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])(this.input.previewModel, {})); - this.inputClear(); - } else if (this.messageEditing) { - var model = this.messageEditing; - - if (model.content.trim() !== model.oldContent.trim()) { - model.oldContent = model.content; - app.chat.editChatMessage(model, true, model.content); - } - - this.messageEditEnd(); - this.inputClear(); - } - } - }; - - _proto.messageEdit = function messageEdit(model) { - if (this.input.writingPreview) this.input.instance.inputPreviewEnd(); - if (this.messageEditing) this.messageEditEnd(); - model.isEditing = true; - model.oldContent = model.message(); - this.messageEditing = model; - var inputElement = this.getChatInput(); - inputElement.value = this.input.content(model.oldContent); - inputElement.focus(); - app.chat.input.resizeInput(); - m.redraw(); - }; - - _proto.messageEditEnd = function messageEditEnd() { - var message = this.messageEditing; - - if (message) { - message.isEditing = false; - message.content = message.oldContent; - this.inputClear(); - m.redraw(); - this.messageEditing = null; - } - }; - - _proto.messageResend = function messageResend(model) { - this.messagePost(model); - }; - - _proto.messagePost = function messagePost(model) { - var _this = this; - - this.loadingSend = true; - m.redraw(); - return app.chat.postChatMessage(model).then(function (r) { - _this.loadingSend = false; - m.redraw(); - }, function (r) { - _this.loadingSend = false; - m.redraw(); - }); - }; - - _proto.inputClear = function inputClear() { - this.input.messageLength = 0; - this.input.rows = 1; - this.input.content(null); - m.redraw(); - }; - - _proto.insertMention = function insertMention(model) { - var user = model.user(); - if (!app.session.user) return; - this.input.content((this.input.content() || '') + (" @" + user.username() + " ")); - var input = this.getChatInput(); - input.focus(); - }; - - return ViewportState; -}(); - - - -/***/ }), - -/***/ "./src/forum/utils/timedRedraw.js": -/*!****************************************!*\ - !*** ./src/forum/utils/timedRedraw.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return timedRedraw; }); -var redrawTimeout; -function timedRedraw(timeout, callback) { - if (!redrawTimeout) { - redrawTimeout = setTimeout(function () { - m.redraw(); - if (callback) callback(); - redrawTimeout = null; - }, timeout); - } -} - -/***/ }), - -/***/ "flarum/Application": -/*!****************************************************!*\ - !*** external "flarum.core.compat['Application']" ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['Application']; - -/***/ }), - -/***/ "flarum/Component": -/*!**************************************************!*\ - !*** external "flarum.core.compat['Component']" ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['Component']; - -/***/ }), - -/***/ "flarum/Model": -/*!**********************************************!*\ - !*** external "flarum.core.compat['Model']" ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['Model']; - -/***/ }), - -/***/ "flarum/common/components/Page": -/*!***************************************************************!*\ - !*** external "flarum.core.compat['common/components/Page']" ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['common/components/Page']; - -/***/ }), - -/***/ "flarum/components/Button": -/*!**********************************************************!*\ - !*** external "flarum.core.compat['components/Button']" ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/Button']; - -/***/ }), - -/***/ "flarum/components/Dropdown": -/*!************************************************************!*\ - !*** external "flarum.core.compat['components/Dropdown']" ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/Dropdown']; - -/***/ }), - -/***/ "flarum/components/IndexPage": -/*!*************************************************************!*\ - !*** external "flarum.core.compat['components/IndexPage']" ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/IndexPage']; - -/***/ }), - -/***/ "flarum/components/Link": -/*!********************************************************!*\ - !*** external "flarum.core.compat['components/Link']" ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/Link']; - -/***/ }), - -/***/ "flarum/components/LinkButton": -/*!**************************************************************!*\ - !*** external "flarum.core.compat['components/LinkButton']" ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/LinkButton']; - -/***/ }), - -/***/ "flarum/components/LoadingIndicator": -/*!********************************************************************!*\ - !*** external "flarum.core.compat['components/LoadingIndicator']" ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/LoadingIndicator']; - -/***/ }), - -/***/ "flarum/components/Modal": -/*!*********************************************************!*\ - !*** external "flarum.core.compat['components/Modal']" ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/Modal']; - -/***/ }), - -/***/ "flarum/components/Search": -/*!**********************************************************!*\ - !*** external "flarum.core.compat['components/Search']" ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/Search']; - -/***/ }), - -/***/ "flarum/components/Separator": -/*!*************************************************************!*\ - !*** external "flarum.core.compat['components/Separator']" ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['components/Separator']; - -/***/ }), - -/***/ "flarum/extend": -/*!***********************************************!*\ - !*** external "flarum.core.compat['extend']" ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['extend']; - -/***/ }), - -/***/ "flarum/helpers/avatar": -/*!*******************************************************!*\ - !*** external "flarum.core.compat['helpers/avatar']" ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['helpers/avatar']; - -/***/ }), - -/***/ "flarum/helpers/fullTime": -/*!*********************************************************!*\ - !*** external "flarum.core.compat['helpers/fullTime']" ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['helpers/fullTime']; - -/***/ }), - -/***/ "flarum/helpers/highlight": -/*!**********************************************************!*\ - !*** external "flarum.core.compat['helpers/highlight']" ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['helpers/highlight']; - -/***/ }), - -/***/ "flarum/helpers/icon": -/*!*****************************************************!*\ - !*** external "flarum.core.compat['helpers/icon']" ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['helpers/icon']; - -/***/ }), - -/***/ "flarum/helpers/listItems": -/*!**********************************************************!*\ - !*** external "flarum.core.compat['helpers/listItems']" ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['helpers/listItems']; - -/***/ }), - -/***/ "flarum/helpers/username": -/*!*********************************************************!*\ - !*** external "flarum.core.compat['helpers/username']" ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['helpers/username']; - -/***/ }), - -/***/ "flarum/models/Group": -/*!*****************************************************!*\ - !*** external "flarum.core.compat['models/Group']" ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['models/Group']; - -/***/ }), - -/***/ "flarum/models/User": -/*!****************************************************!*\ - !*** external "flarum.core.compat['models/User']" ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['models/User']; - -/***/ }), - -/***/ "flarum/utils/ItemList": -/*!*******************************************************!*\ - !*** external "flarum.core.compat['utils/ItemList']" ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/ItemList']; - -/***/ }), - -/***/ "flarum/utils/Stream": -/*!*****************************************************!*\ - !*** external "flarum.core.compat['utils/Stream']" ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/Stream']; - -/***/ }), - -/***/ "flarum/utils/SubtreeRetainer": -/*!**************************************************************!*\ - !*** external "flarum.core.compat['utils/SubtreeRetainer']" ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/SubtreeRetainer']; - -/***/ }), - -/***/ "flarum/utils/classList": -/*!********************************************************!*\ - !*** external "flarum.core.compat['utils/classList']" ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/classList']; - -/***/ }), - -/***/ "flarum/utils/computed": -/*!*******************************************************!*\ - !*** external "flarum.core.compat['utils/computed']" ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/computed']; - -/***/ }), - -/***/ "flarum/utils/extractText": -/*!**********************************************************!*\ - !*** external "flarum.core.compat['utils/extractText']" ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/extractText']; - -/***/ }), - -/***/ "flarum/utils/humanTime": -/*!********************************************************!*\ - !*** external "flarum.core.compat['utils/humanTime']" ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/humanTime']; - -/***/ }), - -/***/ "flarum/utils/throttleDebounce": -/*!***************************************************************!*\ - !*** external "flarum.core.compat['utils/throttleDebounce']" ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = flarum.core.compat['utils/throttleDebounce']; - -/***/ }) - -/******/ }); +module.exports=function(a){var e={};function t(A){if(e[A])return e[A].exports;var s=e[A]={i:A,l:!1,exports:{}};return a[A].call(s.exports,s,s.exports,t),s.l=!0,s.exports}return t.m=a,t.c=e,t.d=function(a,e,A){t.o(a,e)||Object.defineProperty(a,e,{enumerable:!0,get:A})},t.r=function(a){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},t.t=function(a,e){if(1&e&&(a=t(a)),8&e)return a;if(4&e&&"object"==typeof a&&a&&a.__esModule)return a;var A=Object.create(null);if(t.r(A),Object.defineProperty(A,"default",{enumerable:!0,value:a}),2&e&&"string"!=typeof a)for(var s in a)t.d(A,s,function(e){return a[e]}.bind(null,s));return A},t.n=function(a){var e=a&&a.__esModule?function(){return a.default}:function(){return a};return t.d(e,"a",e),e},t.o=function(a,e){return Object.prototype.hasOwnProperty.call(a,e)},t.p="",t(t.s=32)}([function(a,e){a.exports=flarum.core.compat.Model},function(a,e){a.exports=flarum.core.compat.Component},function(a,e){a.exports=flarum.core.compat["components/Button"]},function(a,e){a.exports=flarum.core.compat["utils/classList"]},function(a,e){a.exports=flarum.core.compat["utils/Stream"]},function(a,e){a.exports=flarum.core.compat["components/LoadingIndicator"]},function(a,e){a.exports=flarum.core.compat["utils/extractText"]},function(a,e){a.exports=flarum.core.compat["components/Link"]},function(a,e){a.exports=flarum.core.compat["utils/humanTime"]},function(a,e){a.exports=flarum.core.compat.extend},function(a,e){a.exports=flarum.core.compat["utils/ItemList"]},function(a,e){a.exports=flarum.core.compat["helpers/avatar"]},function(a,e){a.exports=flarum.core.compat["helpers/username"]},function(a,e){a.exports=flarum.core.compat["utils/computed"]},function(a,e){a.exports=flarum.core.compat["components/Dropdown"]},function(a,e){a.exports=flarum.core.compat["helpers/highlight"]},function(a,e){a.exports=flarum.core.compat["utils/SubtreeRetainer"]},function(a,e){a.exports=flarum.core.compat["components/IndexPage"]},function(a,e){a.exports=flarum.core.compat["utils/throttleDebounce"]},function(a,e){a.exports=flarum.core.compat["helpers/fullTime"]},function(a,e){a.exports=flarum.core.compat.Application},function(a,e){a.exports=flarum.core.compat["models/Group"]},function(a,e){a.exports=flarum.core.compat["components/Modal"]},function(a,e){a.exports=flarum.core.compat["components/Search"]},function(a,e){a.exports=flarum.core.compat["helpers/icon"]},function(a,e){a.exports=flarum.core.compat["common/components/Page"]},function(a,e){a.exports=flarum.core.compat["helpers/listItems"]},function(a,e){a.exports=flarum.core.compat["components/Separator"]},function(a,e){a.exports=flarum.core.compat["models/User"]},function(a,e){a.exports=flarum.core.compat["components/LinkButton"]},,,function(a,e,t){"use strict";function A(){return(A=Object.assign||function(a){for(var e=1;e5&&(t=m("div",{class:"MoreResultsText"},app.translator.trans("xelson-chat.forum.chat.list.add_modal.search.more_results",{more_results:s.length-5})),s=s.slice(-5)),!s.length){if(!this.searching)return m("li",{className:"SearchFailed"},app.translator.trans("xelson-chat.forum.chat.list.add_modal.search.failed"));h.a.component({size:"tiny",className:"Button Button--icon Button--link"})}var n=Object.values(this.usersSelected).slice(-5);return[m("li",{className:"Dropdown-header"},app.translator.trans("core.forum.search.users_heading")),s.map((function(t){var s=J()(t),n=t.id(),o=[Z()(s.text,a)];return m("li",{className:"UserSearchResult UserSearchResult","data-index":"users"+n,onclick:e.userClick.bind(e,t)},m("span",null,U()(t),A({},s,{text:void 0,children:o})))})),t,n.length?m("li",{className:"Dropdown-header"},app.translator.trans("xelson-chat.forum.chat.list.add_modal.search.invited")):null,n.map((function(t){var s=J()(t),n=[Z()(s.text,a)];return m("li",{className:"UserSearchResult UserSearchResult","data-index":"users"+t.id(),onclick:e.userClick.bind(e,t)},m("span",{class:"selected"},U()(t),A({},s,{text:void 0,children:n})))}))]},a}(),O=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e)},t.sourceItems=function(){var a,e=new g.a;return this.state=null!=(a=this.attrs.state)?a:{},app.forum.attribute("canSearchUsers")&&e.add("users",new P({state:app.search.neonchat})),e},t.updateMaxHeight=function(){},t.view=function(a){var e,t=this,A=this.state.getInitialSearch();return(null==(e=this.state.getValue())?void 0:e.length)||this.state.setValue(A||""),app.current.searching=function(){return t.state.getValue()},this.sources||(this.sources=this.sourceItems().toArray()),this.sources.length?m("div",{className:"Search "+I()({open:this.hasFocus,active:!!A,loading:!!this.loadingSources})},m("div",{className:"Search-input SearchInput"},m("input",{className:"FormControl",type:"search",placeholder:app.translator.trans("xelson-chat.forum.chat.list.add_modal.search.placeholder"),value:this.state.getValue(),oninput:function(a){return t.state.setValue(a.target.value)},onfocus:function(){return t.hasFocus=!0}}),this.loadingSources?m(h.a,{size:"tiny",className:"Button Button--icon Button--link"}):A?m("button",{className:"Search-clear Button Button--icon Button--link",onclick:this.clear.bind(this)},F()("fas fa-times-circle")):""),this.state.getValue()&&this.hasFocus?m("ul",{className:"Dropdown-menu Dropdown--Users Search-results"},this.sources.map((function(a){return a.view(t.state.getValue())}))):null):m("div",null)},e}(N.a),q=t(4),R=t.n(q),z=["fas fa-ad","fas fa-address-book","fas fa-address-card","fas fa-adjust","fas fa-air-freshener","fas fa-align-center","fas fa-align-justify","fas fa-align-left","fas fa-align-right","fas fa-allergies","fas fa-ambulance","fas fa-american-sign-language-interpreting","fas fa-anchor","fas fa-angle-double-down","fas fa-angle-double-left","fas fa-angle-double-right","fas fa-angle-double-up","fas fa-angle-down","fas fa-angle-left","fas fa-angle-right","fas fa-angle-up","fas fa-angry","fas fa-ankh","fas fa-apple-alt","fas fa-archive","fas fa-archway","fas fa-arrow-alt-circle-down","fas fa-arrow-alt-circle-left","fas fa-arrow-alt-circle-right","fas fa-arrow-alt-circle-up","fas fa-arrow-circle-down","fas fa-arrow-circle-left","fas fa-arrow-circle-right","fas fa-arrow-circle-up","fas fa-arrow-down","fas fa-arrow-left","fas fa-arrow-right","fas fa-arrow-up","fas fa-arrows-alt","fas fa-arrows-alt-h","fas fa-arrows-alt-v","fas fa-assistive-listening-systems","fas fa-asterisk","fas fa-at","fas fa-atlas","fas fa-atom","fas fa-audio-description","fas fa-award","fas fa-baby","fas fa-baby-carriage","fas fa-backspace","fas fa-backward","fas fa-bacon","fas fa-bahai","fas fa-balance-scale","fas fa-balance-scale-left","fas fa-balance-scale-right","fas fa-ban","fas fa-band-aid","fas fa-barcode","fas fa-bars","fas fa-baseball-ball","fas fa-basketball-ball","fas fa-bath","fas fa-battery-empty","fas fa-battery-full","fas fa-battery-half","fas fa-battery-quarter","fas fa-battery-three-quarters","fas fa-bed","fas fa-beer","fas fa-bell","fas fa-bell-slash","fas fa-bezier-curve","fas fa-bible","fas fa-bicycle","fas fa-biking","fas fa-binoculars","fas fa-biohazard","fas fa-birthday-cake","fas fa-blender","fas fa-blender-phone","fas fa-blind","fas fa-blog","fas fa-bold","fas fa-bolt","fas fa-bomb","fas fa-bone","fas fa-bong","fas fa-book","fas fa-book-dead","fas fa-book-medical","fas fa-book-open","fas fa-book-reader","fas fa-bookmark","fas fa-border-all","fas fa-border-none","fas fa-border-style","fas fa-bowling-ball","fas fa-box","fas fa-box-open","fas fa-boxes","fas fa-braille","fas fa-brain","fas fa-bread-slice","fas fa-briefcase","fas fa-briefcase-medical","fas fa-broadcast-tower","fas fa-broom","fas fa-brush","fas fa-bug","fas fa-building","fas fa-bullhorn","fas fa-bullseye","fas fa-burn","fas fa-bus","fas fa-bus-alt","fas fa-business-time","fas fa-calculator","fas fa-calendar","fas fa-calendar-alt","fas fa-calendar-check","fas fa-calendar-day","fas fa-calendar-minus","fas fa-calendar-plus","fas fa-calendar-times","fas fa-calendar-week","fas fa-camera","fas fa-camera-retro","fas fa-campground","fas fa-candy-cane","fas fa-cannabis","fas fa-capsules","fas fa-car","fas fa-car-alt","fas fa-car-battery","fas fa-car-crash","fas fa-car-side","fas fa-caravan","fas fa-caret-down","fas fa-caret-left","fas fa-caret-right","fas fa-caret-square-down","fas fa-caret-square-left","fas fa-caret-square-right","fas fa-caret-square-up","fas fa-caret-up","fas fa-carrot","fas fa-cart-arrow-down","fas fa-cart-plus","fas fa-cash-register","fas fa-cat","fas fa-certificate","fas fa-chair","fas fa-chalkboard","fas fa-chalkboard-teacher","fas fa-charging-station","fas fa-chart-area","fas fa-chart-bar","fas fa-chart-line","fas fa-chart-pie","fas fa-check","fas fa-check-circle","fas fa-check-double","fas fa-check-square","fas fa-cheese","fas fa-chess","fas fa-chess-bishop","fas fa-chess-board","fas fa-chess-king","fas fa-chess-knight","fas fa-chess-pawn","fas fa-chess-queen","fas fa-chess-rook","fas fa-chevron-circle-down","fas fa-chevron-circle-left","fas fa-chevron-circle-right","fas fa-chevron-circle-up","fas fa-chevron-down","fas fa-chevron-left","fas fa-chevron-right","fas fa-chevron-up","fas fa-child","fas fa-church","fas fa-circle","fas fa-circle-notch","fas fa-city","fas fa-clinic-medical","fas fa-clipboard","fas fa-clipboard-check","fas fa-clipboard-list","fas fa-clock","fas fa-clone","fas fa-closed-captioning","fas fa-cloud","fas fa-cloud-download-alt","fas fa-cloud-meatball","fas fa-cloud-moon","fas fa-cloud-moon-rain","fas fa-cloud-rain","fas fa-cloud-showers-heavy","fas fa-cloud-sun","fas fa-cloud-sun-rain","fas fa-cloud-upload-alt","fas fa-cocktail","fas fa-code","fas fa-code-branch","fas fa-coffee","fas fa-cog","fas fa-cogs","fas fa-coins","fas fa-columns","fas fa-comment","fas fa-comment-alt","fas fa-comment-dollar","fas fa-comment-dots","fas fa-comment-medical","fas fa-comment-slash","fas fa-comments","fas fa-comments-dollar","fas fa-compact-disc","fas fa-compass","fas fa-compress","fas fa-compress-alt","fas fa-compress-arrows-alt","fas fa-concierge-bell","fas fa-cookie","fas fa-cookie-bite","fas fa-copy","fas fa-copyright","fas fa-couch","fas fa-credit-card","fas fa-crop","fas fa-crop-alt","fas fa-cross","fas fa-crosshairs","fas fa-crow","fas fa-crown","fas fa-crutch","fas fa-cube","fas fa-cubes","fas fa-cut","fas fa-database","fas fa-deaf","fas fa-democrat","fas fa-desktop","fas fa-dharmachakra","fas fa-diagnoses","fas fa-dice","fas fa-dice-d20","fas fa-dice-d6","fas fa-dice-five","fas fa-dice-four","fas fa-dice-one","fas fa-dice-six","fas fa-dice-three","fas fa-dice-two","fas fa-digital-tachograph","fas fa-directions","fas fa-divide","fas fa-dizzy","fas fa-dna","fas fa-dog","fas fa-dollar-sign","fas fa-dolly","fas fa-dolly-flatbed","fas fa-donate","fas fa-door-closed","fas fa-door-open","fas fa-dot-circle","fas fa-dove","fas fa-download","fas fa-drafting-compass","fas fa-dragon","fas fa-draw-polygon","fas fa-drum","fas fa-drum-steelpan","fas fa-drumstick-bite","fas fa-dumbbell","fas fa-dumpster","fas fa-dumpster-fire","fas fa-dungeon","fas fa-edit","fas fa-egg","fas fa-eject","fas fa-ellipsis-h","fas fa-ellipsis-v","fas fa-envelope","fas fa-envelope-open","fas fa-envelope-open-text","fas fa-envelope-square","fas fa-equals","fas fa-eraser","fas fa-ethernet","fas fa-euro-sign","fas fa-exchange-alt","fas fa-exclamation","fas fa-exclamation-circle","fas fa-exclamation-triangle","fas fa-expand","fas fa-expand-alt","fas fa-expand-arrows-alt","fas fa-external-link-alt","fas fa-external-link-square-alt","fas fa-eye","fas fa-eye-dropper","fas fa-eye-slash","fas fa-fan","fas fa-fast-backward","fas fa-fast-forward","fas fa-fax","fas fa-feather","fas fa-feather-alt","fas fa-female","fas fa-fighter-jet","fas fa-file","fas fa-file-alt","fas fa-file-archive","fas fa-file-audio","fas fa-file-code","fas fa-file-contract","fas fa-file-csv","fas fa-file-download","fas fa-file-excel","fas fa-file-export","fas fa-file-image","fas fa-file-import","fas fa-file-invoice","fas fa-file-invoice-dollar","fas fa-file-medical","fas fa-file-medical-alt","fas fa-file-pdf","fas fa-file-powerpoint","fas fa-file-prescription","fas fa-file-signature","fas fa-file-upload","fas fa-file-video","fas fa-file-word","fas fa-fill","fas fa-fill-drip","fas fa-film","fas fa-filter","fas fa-fingerprint","fas fa-fire","fas fa-fire-alt","fas fa-fire-extinguisher","fas fa-first-aid","fas fa-fish","fas fa-fist-raised","fas fa-flag","fas fa-flag-checkered","fas fa-flag-usa","fas fa-flask","fas fa-flushed","fas fa-folder","fas fa-folder-minus","fas fa-folder-open","fas fa-folder-plus","fas fa-font","fas fa-football-ball","fas fa-forward","fas fa-frog","fas fa-frown","fas fa-frown-open","fas fa-funnel-dollar","fas fa-futbol","fas fa-gamepad","fas fa-gas-pump","fas fa-gavel","fas fa-gem","fas fa-genderless","fas fa-ghost","fas fa-gift","fas fa-gifts","fas fa-glass-cheers","fas fa-glass-martini","fas fa-glass-martini-alt","fas fa-glass-whiskey","fas fa-glasses","fas fa-globe","fas fa-globe-africa","fas fa-globe-americas","fas fa-globe-asia","fas fa-globe-europe","fas fa-golf-ball","fas fa-gopuram","fas fa-graduation-cap","fas fa-greater-than","fas fa-greater-than-equal","fas fa-grimace","fas fa-grin","fas fa-grin-alt","fas fa-grin-beam","fas fa-grin-beam-sweat","fas fa-grin-hearts","fas fa-grin-squint","fas fa-grin-squint-tears","fas fa-grin-stars","fas fa-grin-tears","fas fa-grin-tongue","fas fa-grin-tongue-squint","fas fa-grin-tongue-wink","fas fa-grin-wink","fas fa-grip-horizontal","fas fa-grip-lines","fas fa-grip-lines-vertical","fas fa-grip-vertical","fas fa-guitar","fas fa-h-square","fas fa-hamburger","fas fa-hammer","fas fa-hamsa","fas fa-hand-holding","fas fa-hand-holding-heart","fas fa-hand-holding-usd","fas fa-hand-lizard","fas fa-hand-middle-finger","fas fa-hand-paper","fas fa-hand-peace","fas fa-hand-point-down","fas fa-hand-point-left","fas fa-hand-point-right","fas fa-hand-point-up","fas fa-hand-pointer","fas fa-hand-rock","fas fa-hand-scissors","fas fa-hand-spock","fas fa-hands","fas fa-hands-helping","fas fa-handshake","fas fa-hanukiah","fas fa-hard-hat","fas fa-hashtag","fas fa-hat-cowboy","fas fa-hat-cowboy-side","fas fa-hat-wizard","fas fa-hdd","fas fa-heading","fas fa-headphones","fas fa-headphones-alt","fas fa-headset","fas fa-heart","fas fa-heart-broken","fas fa-heartbeat","fas fa-helicopter","fas fa-highlighter","fas fa-hiking","fas fa-hippo","fas fa-history","fas fa-hockey-puck","fas fa-holly-berry","fas fa-home","fas fa-horse","fas fa-horse-head","fas fa-hospital","fas fa-hospital-alt","fas fa-hospital-symbol","fas fa-hot-tub","fas fa-hotdog","fas fa-hotel","fas fa-hourglass","fas fa-hourglass-end","fas fa-hourglass-half","fas fa-hourglass-start","fas fa-house-damage","fas fa-hryvnia","fas fa-i-cursor","fas fa-ice-cream","fas fa-icicles","fas fa-icons","fas fa-id-badge","fas fa-id-card","fas fa-id-card-alt","fas fa-igloo","fas fa-image","fas fa-images","fas fa-inbox","fas fa-indent","fas fa-industry","fas fa-infinity","fas fa-info","fas fa-info-circle","fas fa-italic","fas fa-jedi","fas fa-joint","fas fa-journal-whills","fas fa-kaaba","fas fa-key","fas fa-keyboard","fas fa-khanda","fas fa-kiss","fas fa-kiss-beam","fas fa-kiss-wink-heart","fas fa-kiwi-bird","fas fa-landmark","fas fa-language","fas fa-laptop","fas fa-laptop-code","fas fa-laptop-medical","fas fa-laugh","fas fa-laugh-beam","fas fa-laugh-squint","fas fa-laugh-wink","fas fa-layer-group","fas fa-leaf","fas fa-lemon","fas fa-less-than","fas fa-less-than-equal","fas fa-level-down-alt","fas fa-level-up-alt","fas fa-life-ring","fas fa-lightbulb","fas fa-link","fas fa-lira-sign","fas fa-list","fas fa-list-alt","fas fa-list-ol","fas fa-list-ul","fas fa-location-arrow","fas fa-lock","fas fa-lock-open","fas fa-long-arrow-alt-down","fas fa-long-arrow-alt-left","fas fa-long-arrow-alt-right","fas fa-long-arrow-alt-up","fas fa-low-vision","fas fa-luggage-cart","fas fa-magic","fas fa-magnet","fas fa-mail-bulk","fas fa-male","fas fa-map","fas fa-map-marked","fas fa-map-marked-alt","fas fa-map-marker","fas fa-map-marker-alt","fas fa-map-pin","fas fa-map-signs","fas fa-marker","fas fa-mars","fas fa-mars-double","fas fa-mars-stroke","fas fa-mars-stroke-h","fas fa-mars-stroke-v","fas fa-mask","fas fa-medal","fas fa-medkit","fas fa-meh","fas fa-meh-blank","fas fa-meh-rolling-eyes","fas fa-memory","fas fa-menorah","fas fa-mercury","fas fa-meteor","fas fa-microchip","fas fa-microphone","fas fa-microphone-alt","fas fa-microphone-alt-slash","fas fa-microphone-slash","fas fa-microscope","fas fa-minus","fas fa-minus-circle","fas fa-minus-square","fas fa-mitten","fas fa-mobile","fas fa-mobile-alt","fas fa-money-bill","fas fa-money-bill-alt","fas fa-money-bill-wave","fas fa-money-bill-wave-alt","fas fa-money-check","fas fa-money-check-alt","fas fa-monument","fas fa-moon","fas fa-mortar-pestle","fas fa-mosque","fas fa-motorcycle","fas fa-mountain","fas fa-mouse","fas fa-mouse-pointer","fas fa-mug-hot","fas fa-music","fas fa-network-wired","fas fa-neuter","fas fa-newspaper","fas fa-not-equal","fas fa-notes-medical","fas fa-object-group","fas fa-object-ungroup","fas fa-oil-can","fas fa-om","fas fa-otter","fas fa-outdent","fas fa-pager","fas fa-paint-brush","fas fa-paint-roller","fas fa-palette","fas fa-pallet","fas fa-paper-plane","fas fa-paperclip","fas fa-parachute-box","fas fa-paragraph","fas fa-parking","fas fa-passport","fas fa-pastafarianism","fas fa-paste","fas fa-pause","fas fa-pause-circle","fas fa-paw","fas fa-peace","fas fa-pen","fas fa-pen-alt","fas fa-pen-fancy","fas fa-pen-nib","fas fa-pen-square","fas fa-pencil-alt","fas fa-pencil-ruler","fas fa-people-carry","fas fa-pepper-hot","fas fa-percent","fas fa-percentage","fas fa-person-booth","fas fa-phone","fas fa-phone-alt","fas fa-phone-slash","fas fa-phone-square","fas fa-phone-square-alt","fas fa-phone-volume","fas fa-photo-video","fas fa-piggy-bank","fas fa-pills","fas fa-pizza-slice","fas fa-place-of-worship","fas fa-plane","fas fa-plane-arrival","fas fa-plane-departure","fas fa-play","fas fa-play-circle","fas fa-plug","fas fa-plus","fas fa-plus-circle","fas fa-plus-square","fas fa-podcast","fas fa-poll","fas fa-poll-h","fas fa-poo","fas fa-poo-storm","fas fa-poop","fas fa-portrait","fas fa-pound-sign","fas fa-power-off","fas fa-pray","fas fa-praying-hands","fas fa-prescription","fas fa-prescription-bottle","fas fa-prescription-bottle-alt","fas fa-print","fas fa-procedures","fas fa-project-diagram","fas fa-puzzle-piece","fas fa-qrcode","fas fa-question","fas fa-question-circle","fas fa-quidditch","fas fa-quote-left","fas fa-quote-right","fas fa-quran","fas fa-radiation","fas fa-radiation-alt","fas fa-rainbow","fas fa-random","fas fa-receipt","fas fa-record-vinyl","fas fa-recycle","fas fa-redo","fas fa-redo-alt","fas fa-registered","fas fa-remove-format","fas fa-reply","fas fa-reply-all","fas fa-republican","fas fa-restroom","fas fa-retweet","fas fa-ribbon","fas fa-ring","fas fa-road","fas fa-robot","fas fa-rocket","fas fa-route","fas fa-rss","fas fa-rss-square","fas fa-ruble-sign","fas fa-ruler","fas fa-ruler-combined","fas fa-ruler-horizontal","fas fa-ruler-vertical","fas fa-running","fas fa-rupee-sign","fas fa-sad-cry","fas fa-sad-tear","fas fa-satellite","fas fa-satellite-dish","fas fa-save","fas fa-school","fas fa-screwdriver","fas fa-scroll","fas fa-sd-card","fas fa-search","fas fa-search-dollar","fas fa-search-location","fas fa-search-minus","fas fa-search-plus","fas fa-seedling","fas fa-server","fas fa-shapes","fas fa-share","fas fa-share-alt","fas fa-share-alt-square","fas fa-share-square","fas fa-shekel-sign","fas fa-shield-alt","fas fa-ship","fas fa-shipping-fast","fas fa-shoe-prints","fas fa-shopping-bag","fas fa-shopping-basket","fas fa-shopping-cart","fas fa-shower","fas fa-shuttle-van","fas fa-sign","fas fa-sign-in-alt","fas fa-sign-language","fas fa-sign-out-alt","fas fa-signal","fas fa-signature","fas fa-sim-card","fas fa-sitemap","fas fa-skating","fas fa-skiing","fas fa-skiing-nordic","fas fa-skull","fas fa-skull-crossbones","fas fa-slash","fas fa-sleigh","fas fa-sliders-h","fas fa-smile","fas fa-smile-beam","fas fa-smile-wink","fas fa-smog","fas fa-smoking","fas fa-smoking-ban","fas fa-sms","fas fa-snowboarding","fas fa-snowflake","fas fa-snowman","fas fa-snowplow","fas fa-socks","fas fa-solar-panel","fas fa-sort","fas fa-sort-alpha-down","fas fa-sort-alpha-down-alt","fas fa-sort-alpha-up","fas fa-sort-alpha-up-alt","fas fa-sort-amount-down","fas fa-sort-amount-down-alt","fas fa-sort-amount-up","fas fa-sort-amount-up-alt","fas fa-sort-down","fas fa-sort-numeric-down","fas fa-sort-numeric-down-alt","fas fa-sort-numeric-up","fas fa-sort-numeric-up-alt","fas fa-sort-up","fas fa-spa","fas fa-space-shuttle","fas fa-spell-check","fas fa-spider","fas fa-spinner","fas fa-splotch","fas fa-spray-can","fas fa-square","fas fa-square-full","fas fa-square-root-alt","fas fa-stamp","fas fa-star","fas fa-star-and-crescent","fas fa-star-half","fas fa-star-half-alt","fas fa-star-of-david","fas fa-star-of-life","fas fa-step-backward","fas fa-step-forward","fas fa-stethoscope","fas fa-sticky-note","fas fa-stop","fas fa-stop-circle","fas fa-stopwatch","fas fa-store","fas fa-store-alt","fas fa-stream","fas fa-street-view","fas fa-strikethrough","fas fa-stroopwafel","fas fa-subscript","fas fa-subway","fas fa-suitcase","fas fa-suitcase-rolling","fas fa-sun","fas fa-superscript","fas fa-surprise","fas fa-swatchbook","fas fa-swimmer","fas fa-swimming-pool","fas fa-synagogue","fas fa-sync","fas fa-sync-alt","fas fa-syringe","fas fa-table","fas fa-table-tennis","fas fa-tablet","fas fa-tablet-alt","fas fa-tablets","fas fa-tachometer-alt","fas fa-tag","fas fa-tags","fas fa-tape","fas fa-tasks","fas fa-taxi","fas fa-teeth","fas fa-teeth-open","fas fa-temperature-high","fas fa-temperature-low","fas fa-tenge","fas fa-terminal","fas fa-text-height","fas fa-text-width","fas fa-th","fas fa-th-large","fas fa-th-list","fas fa-theater-masks","fas fa-thermometer","fas fa-thermometer-empty","fas fa-thermometer-full","fas fa-thermometer-half","fas fa-thermometer-quarter","fas fa-thermometer-three-quarters","fas fa-thumbs-down","fas fa-thumbs-up","fas fa-thumbtack","fas fa-ticket-alt","fas fa-times","fas fa-times-circle","fas fa-tint","fas fa-tint-slash","fas fa-tired","fas fa-toggle-off","fas fa-toggle-on","fas fa-toilet","fas fa-toilet-paper","fas fa-toolbox","fas fa-tools","fas fa-tooth","fas fa-torah","fas fa-torii-gate","fas fa-tractor","fas fa-trademark","fas fa-traffic-light","fas fa-trailer","fas fa-train","fas fa-tram","fas fa-transgender","fas fa-transgender-alt","fas fa-trash","fas fa-trash-alt","fas fa-trash-restore","fas fa-trash-restore-alt","fas fa-tree","fas fa-trophy","fas fa-truck","fas fa-truck-loading","fas fa-truck-monster","fas fa-truck-moving","fas fa-truck-pickup","fas fa-tshirt","fas fa-tty","fas fa-tv","fas fa-umbrella","fas fa-umbrella-beach","fas fa-underline","fas fa-undo","fas fa-undo-alt","fas fa-universal-access","fas fa-university","fas fa-unlink","fas fa-unlock","fas fa-unlock-alt","fas fa-upload","fas fa-user","fas fa-user-alt","fas fa-user-alt-slash","fas fa-user-astronaut","fas fa-user-check","fas fa-user-circle","fas fa-user-clock","fas fa-user-cog","fas fa-user-edit","fas fa-user-friends","fas fa-user-graduate","fas fa-user-injured","fas fa-user-lock","fas fa-user-md","fas fa-user-minus","fas fa-user-ninja","fas fa-user-nurse","fas fa-user-plus","fas fa-user-secret","fas fa-user-shield","fas fa-user-slash","fas fa-user-tag","fas fa-user-tie","fas fa-user-times","fas fa-users","fas fa-users-cog","fas fa-utensil-spoon","fas fa-utensils","fas fa-vector-square","fas fa-venus","fas fa-venus-double","fas fa-venus-mars","fas fa-vial","fas fa-vials","fas fa-video","fas fa-video-slash","fas fa-vihara","fas fa-voicemail","fas fa-volleyball-ball","fas fa-volume-down","fas fa-volume-mute","fas fa-volume-off","fas fa-volume-up","fas fa-vote-yea","fas fa-vr-cardboard","fas fa-walking","fas fa-wallet","fas fa-warehouse","fas fa-water","fas fa-wave-square","fas fa-weight","fas fa-weight-hanging","fas fa-wheelchair","fas fa-wifi","fas fa-wind","fas fa-window-close","fas fa-window-maximize","fas fa-window-minimize","fas fa-window-restore","fas fa-wine-bottle","fas fa-wine-glass","fas fa-wine-glass-alt","fas fa-won-sign","fas fa-wrench","fas fa-x-ray","fas fa-yen-sign","fas fa-yin-yang","far fa-address-book","far fa-address-card","far fa-angry","far fa-arrow-alt-circle-down","far fa-arrow-alt-circle-left","far fa-arrow-alt-circle-right","far fa-arrow-alt-circle-up","far fa-bell","far fa-bell-slash","far fa-bookmark","far fa-building","far fa-calendar","far fa-calendar-alt","far fa-calendar-check","far fa-calendar-minus","far fa-calendar-plus","far fa-calendar-times","far fa-caret-square-down","far fa-caret-square-left","far fa-caret-square-right","far fa-caret-square-up","far fa-chart-bar","far fa-check-circle","far fa-check-square","far fa-circle","far fa-clipboard","far fa-clock","far fa-clone","far fa-closed-captioning","far fa-comment","far fa-comment-alt","far fa-comment-dots","far fa-comments","far fa-compass","far fa-copy","far fa-copyright","far fa-credit-card","far fa-dizzy","far fa-dot-circle","far fa-edit","far fa-envelope","far fa-envelope-open","far fa-eye","far fa-eye-slash","far fa-file","far fa-file-alt","far fa-file-archive","far fa-file-audio","far fa-file-code","far fa-file-excel","far fa-file-image","far fa-file-pdf","far fa-file-powerpoint","far fa-file-video","far fa-file-word","far fa-flag","far fa-flushed","far fa-folder","far fa-folder-open","far fa-frown","far fa-frown-open","far fa-futbol","far fa-gem","far fa-grimace","far fa-grin","far fa-grin-alt","far fa-grin-beam","far fa-grin-beam-sweat","far fa-grin-hearts","far fa-grin-squint","far fa-grin-squint-tears","far fa-grin-stars","far fa-grin-tears","far fa-grin-tongue","far fa-grin-tongue-squint","far fa-grin-tongue-wink","far fa-grin-wink","far fa-hand-lizard","far fa-hand-paper","far fa-hand-peace","far fa-hand-point-down","far fa-hand-point-left","far fa-hand-point-right","far fa-hand-point-up","far fa-hand-pointer","far fa-hand-rock","far fa-hand-scissors","far fa-hand-spock","far fa-handshake","far fa-hdd","far fa-heart","far fa-hospital","far fa-hourglass","far fa-id-badge","far fa-id-card","far fa-image","far fa-images","far fa-keyboard","far fa-kiss","far fa-kiss-beam","far fa-kiss-wink-heart","far fa-laugh","far fa-laugh-beam","far fa-laugh-squint","far fa-laugh-wink","far fa-lemon","far fa-life-ring","far fa-lightbulb","far fa-list-alt","far fa-map","far fa-meh","far fa-meh-blank","far fa-meh-rolling-eyes","far fa-minus-square","far fa-money-bill-alt","far fa-moon","far fa-newspaper","far fa-object-group","far fa-object-ungroup","far fa-paper-plane","far fa-pause-circle","far fa-play-circle","far fa-plus-square","far fa-question-circle","far fa-registered","far fa-sad-cry","far fa-sad-tear","far fa-save","far fa-share-square","far fa-smile","far fa-smile-beam","far fa-smile-wink","far fa-snowflake","far fa-square","far fa-star","far fa-star-half","far fa-sticky-note","far fa-stop-circle","far fa-sun","far fa-surprise","far fa-thumbs-down","far fa-thumbs-up","far fa-times-circle","far fa-tired","far fa-trash-alt","far fa-user","far fa-user-circle","far fa-window-close","far fa-window-maximize","far fa-window-minimize","far fa-window-restore","fab fa-500px","fab fa-accessible-icon","fab fa-accusoft","fab fa-acquisitions-incorporated","fab fa-adn","fab fa-adobe","fab fa-adversal","fab fa-affiliatetheme","fab fa-airbnb","fab fa-algolia","fab fa-alipay","fab fa-amazon","fab fa-amazon-pay","fab fa-amilia","fab fa-android","fab fa-angellist","fab fa-angrycreative","fab fa-angular","fab fa-app-store","fab fa-app-store-ios","fab fa-apper","fab fa-apple","fab fa-apple-pay","fab fa-artstation","fab fa-asymmetrik","fab fa-atlassian","fab fa-audible","fab fa-autoprefixer","fab fa-avianex","fab fa-aviato","fab fa-aws","fab fa-bandcamp","fab fa-battle-net","fab fa-behance","fab fa-behance-square","fab fa-bimobject","fab fa-bitbucket","fab fa-bitcoin","fab fa-bity","fab fa-black-tie","fab fa-blackberry","fab fa-blogger","fab fa-blogger-b","fab fa-bluetooth","fab fa-bluetooth-b","fab fa-bootstrap","fab fa-btc","fab fa-buffer","fab fa-buromobelexperte","fab fa-buy-n-large","fab fa-buysellads","fab fa-canadian-maple-leaf","fab fa-cc-amazon-pay","fab fa-cc-amex","fab fa-cc-apple-pay","fab fa-cc-diners-club","fab fa-cc-discover","fab fa-cc-jcb","fab fa-cc-mastercard","fab fa-cc-paypal","fab fa-cc-stripe","fab fa-cc-visa","fab fa-centercode","fab fa-centos","fab fa-chrome","fab fa-chromecast","fab fa-cloudscale","fab fa-cloudsmith","fab fa-cloudversify","fab fa-codepen","fab fa-codiepie","fab fa-confluence","fab fa-connectdevelop","fab fa-contao","fab fa-cotton-bureau","fab fa-cpanel","fab fa-creative-commons","fab fa-creative-commons-by","fab fa-creative-commons-nc","fab fa-creative-commons-nc-eu","fab fa-creative-commons-nc-jp","fab fa-creative-commons-nd","fab fa-creative-commons-pd","fab fa-creative-commons-pd-alt","fab fa-creative-commons-remix","fab fa-creative-commons-sa","fab fa-creative-commons-sampling","fab fa-creative-commons-sampling-plus","fab fa-creative-commons-share","fab fa-creative-commons-zero","fab fa-critical-role","fab fa-css3","fab fa-css3-alt","fab fa-cuttlefish","fab fa-d-and-d","fab fa-d-and-d-beyond","fab fa-dailymotion","fab fa-dashcube","fab fa-delicious","fab fa-deploydog","fab fa-deskpro","fab fa-dev","fab fa-deviantart","fab fa-dhl","fab fa-diaspora","fab fa-digg","fab fa-digital-ocean","fab fa-discord","fab fa-discourse","fab fa-dochub","fab fa-docker","fab fa-draft2digital","fab fa-dribbble","fab fa-dribbble-square","fab fa-dropbox","fab fa-drupal","fab fa-dyalog","fab fa-earlybirds","fab fa-ebay","fab fa-edge","fab fa-elementor","fab fa-ello","fab fa-ember","fab fa-empire","fab fa-envira","fab fa-erlang","fab fa-ethereum","fab fa-etsy","fab fa-evernote","fab fa-expeditedssl","fab fa-facebook","fab fa-facebook-f","fab fa-facebook-messenger","fab fa-facebook-square","fab fa-fantasy-flight-games","fab fa-fedex","fab fa-fedora","fab fa-figma","fab fa-firefox","fab fa-firefox-browser","fab fa-first-order","fab fa-first-order-alt","fab fa-firstdraft","fab fa-flickr","fab fa-flipboard","fab fa-fly","fab fa-font-awesome","fab fa-font-awesome-alt","fab fa-font-awesome-flag","fab fa-fonticons","fab fa-fonticons-fi","fab fa-fort-awesome","fab fa-fort-awesome-alt","fab fa-forumbee","fab fa-foursquare","fab fa-free-code-camp","fab fa-freebsd","fab fa-fulcrum","fab fa-galactic-republic","fab fa-galactic-senate","fab fa-get-pocket","fab fa-gg","fab fa-gg-circle","fab fa-git","fab fa-git-alt","fab fa-git-square","fab fa-github","fab fa-github-alt","fab fa-github-square","fab fa-gitkraken","fab fa-gitlab","fab fa-gitter","fab fa-glide","fab fa-glide-g","fab fa-gofore","fab fa-goodreads","fab fa-goodreads-g","fab fa-google","fab fa-google-drive","fab fa-google-play","fab fa-google-plus","fab fa-google-plus-g","fab fa-google-plus-square","fab fa-google-wallet","fab fa-gratipay","fab fa-grav","fab fa-gripfire","fab fa-grunt","fab fa-gulp","fab fa-hacker-news","fab fa-hacker-news-square","fab fa-hackerrank","fab fa-hips","fab fa-hire-a-helper","fab fa-hooli","fab fa-hornbill","fab fa-hotjar","fab fa-houzz","fab fa-html5","fab fa-hubspot","fab fa-ideal","fab fa-imdb","fab fa-instagram","fab fa-instagram-square","fab fa-intercom","fab fa-internet-explorer","fab fa-invision","fab fa-ioxhost","fab fa-itch-io","fab fa-itunes","fab fa-itunes-note","fab fa-java","fab fa-jedi-order","fab fa-jenkins","fab fa-jira","fab fa-joget","fab fa-joomla","fab fa-js","fab fa-js-square","fab fa-jsfiddle","fab fa-kaggle","fab fa-keybase","fab fa-keycdn","fab fa-kickstarter","fab fa-kickstarter-k","fab fa-korvue","fab fa-laravel","fab fa-lastfm","fab fa-lastfm-square","fab fa-leanpub","fab fa-less","fab fa-line","fab fa-linkedin","fab fa-linkedin-in","fab fa-linode","fab fa-linux","fab fa-lyft","fab fa-magento","fab fa-mailchimp","fab fa-mandalorian","fab fa-markdown","fab fa-mastodon","fab fa-maxcdn","fab fa-mdb","fab fa-medapps","fab fa-medium","fab fa-medium-m","fab fa-medrt","fab fa-meetup","fab fa-megaport","fab fa-mendeley","fab fa-microblog","fab fa-microsoft","fab fa-mix","fab fa-mixcloud","fab fa-mixer","fab fa-mizuni","fab fa-modx","fab fa-monero","fab fa-napster","fab fa-neos","fab fa-nimblr","fab fa-node","fab fa-node-js","fab fa-npm","fab fa-ns8","fab fa-nutritionix","fab fa-odnoklassniki","fab fa-odnoklassniki-square","fab fa-old-republic","fab fa-opencart","fab fa-openid","fab fa-opera","fab fa-optin-monster","fab fa-orcid","fab fa-osi","fab fa-page4","fab fa-pagelines","fab fa-palfed","fab fa-patreon","fab fa-paypal","fab fa-penny-arcade","fab fa-periscope","fab fa-phabricator","fab fa-phoenix-framework","fab fa-phoenix-squadron","fab fa-php","fab fa-pied-piper","fab fa-pied-piper-alt","fab fa-pied-piper-hat","fab fa-pied-piper-pp","fab fa-pied-piper-square","fab fa-pinterest","fab fa-pinterest-p","fab fa-pinterest-square","fab fa-playstation","fab fa-product-hunt","fab fa-pushed","fab fa-python","fab fa-qq","fab fa-quinscape","fab fa-quora","fab fa-r-project","fab fa-raspberry-pi","fab fa-ravelry","fab fa-react","fab fa-reacteurope","fab fa-readme","fab fa-rebel","fab fa-red-river","fab fa-reddit","fab fa-reddit-alien","fab fa-reddit-square","fab fa-redhat","fab fa-renren","fab fa-replyd","fab fa-researchgate","fab fa-resolving","fab fa-rev","fab fa-rocketchat","fab fa-rockrms","fab fa-safari","fab fa-salesforce","fab fa-sass","fab fa-schlix","fab fa-scribd","fab fa-searchengin","fab fa-sellcast","fab fa-sellsy","fab fa-servicestack","fab fa-shirtsinbulk","fab fa-shopify","fab fa-shopware","fab fa-simplybuilt","fab fa-sistrix","fab fa-sith","fab fa-sketch","fab fa-skyatlas","fab fa-skype","fab fa-slack","fab fa-slack-hash","fab fa-slideshare","fab fa-snapchat","fab fa-snapchat-ghost","fab fa-snapchat-square","fab fa-soundcloud","fab fa-sourcetree","fab fa-speakap","fab fa-speaker-deck","fab fa-spotify","fab fa-squarespace","fab fa-stack-exchange","fab fa-stack-overflow","fab fa-stackpath","fab fa-staylinked","fab fa-steam","fab fa-steam-square","fab fa-steam-symbol","fab fa-sticker-mule","fab fa-strava","fab fa-stripe","fab fa-stripe-s","fab fa-studiovinari","fab fa-stumbleupon","fab fa-stumbleupon-circle","fab fa-superpowers","fab fa-supple","fab fa-suse","fab fa-swift","fab fa-symfony","fab fa-teamspeak","fab fa-telegram","fab fa-telegram-plane","fab fa-tencent-weibo","fab fa-the-red-yeti","fab fa-themeco","fab fa-themeisle","fab fa-think-peaks","fab fa-trade-federation","fab fa-trello","fab fa-tripadvisor","fab fa-tumblr","fab fa-tumblr-square","fab fa-twitch","fab fa-twitter","fab fa-twitter-square","fab fa-typo3","fab fa-uber","fab fa-ubuntu","fab fa-uikit","fab fa-umbraco","fab fa-uniregistry","fab fa-unity","fab fa-untappd","fab fa-ups","fab fa-usb","fab fa-usps","fab fa-ussunnah","fab fa-vaadin","fab fa-viacoin","fab fa-viadeo","fab fa-viadeo-square","fab fa-viber","fab fa-vimeo","fab fa-vimeo-square","fab fa-vimeo-v","fab fa-vine","fab fa-vk","fab fa-vnv","fab fa-vuejs","fab fa-waze","fab fa-weebly","fab fa-weibo","fab fa-weixin","fab fa-whatsapp","fab fa-whatsapp-square","fab fa-whmcs","fab fa-wikipedia-w","fab fa-windows","fab fa-wix","fab fa-wizards-of-the-coast","fab fa-wolf-pack-battalion","fab fa-wordpress","fab fa-wordpress-simple","fab fa-wpbeginner","fab fa-wpexplorer","fab fa-wpforms","fab fa-wpressr","fab fa-xbox","fab fa-xing","fab fa-xing-square","fab fa-y-combinator","fab fa-yahoo","fab fa-yammer","fab fa-yandex","fab fa-yandex-international","fab fa-yarn","fab fa-yelp","fab fa-yoast","fab fa-youtube","fab fa-youtube-square","fab fa-zhihu"],Y=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.model=this.attrs.model,app.search.neonchat={usersSelected:[]},this.usersSelected=app.search.neonchat.usersSelected,this.input={title:R()(""),color:R()(""),icon:R()(""),iconState:{matches:[],lastInput:null}}},t.onremove=function(e){a.prototype.onremove.call(this,e),app.search.neonchat=null},t.getInput=function(){return this.input},t.setSelectedUsers=function(a){app.search.neonchat.usersSelected=a,this.usersSelected=app.search.neonchat.usersSelected},t.getSelectedUsers=function(){return this.usersSelected},t.className=function(){return"ChatModal Modal--small"},t.isChatExists=function(){return 1===this.getSelectedUsers().length&&app.chat.isExistsPMChat(app.session.user,this.getSelectedUsers()[0])},t.alertText=function(){return this.isChatExists()?app.translator.trans("xelson-chat.forum.chat.list.add_modal.alerts.exists"):null},t.componentAlert=function(){return this.alertText()?m("div",{className:"Alert"},this.alertText()):null},t.componentFormUsersSelect=function(a){return void 0===a&&(a="xelson-chat.forum.chat.list.add_modal.form.users"),[m("label",null,app.translator.trans(a)),this.componentUsersSelect()]},t.userMentionContent=function(a){return"@"+a.displayName()},t.userMentionClassname=function(a){return"deletable"},t.userMentionOnClick=function(a,e){return this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(e),1)},t.componentUsersMentions=function(){var a=this;return m("div",{className:"UsersTags"},this.getSelectedUsers().map((function(e){return m("div",{className:I()(["UserMention",a.userMentionClassname(e)]),onclick:a.userMentionOnClick.bind(a,e)},a.userMentionContent(e))})))},t.componentUsersSelect=function(){return[this.componentAlert(),this.componentUsersMentions(),m("div",{className:"UsersSearch"},m(O,{state:app.search}))]},t.componentFormIcon=function(a){var e,t=this;return[a.title?m("label",null,a.title):null,m("div",{className:"IconSearch"},a.desc?m("label",null,a.desc):null,m("div",{className:"Icon-Input IconSearchResult"},m("input",{class:"FormControl",type:"text",bidi:a.stream,placeholder:a.placeholder,onupdate:this.formInputOnUpdate.bind(this),onfocus:function(){return t.inputIconHasFocus=!0},onclick:function(){return t.inputIconHasFocus=!0},onkeypress:function(a){return t.inputIconHasFocus=!(13==a.keyCode)}}),m("icon",{className:"Chat-FullColor"},m("i",{className:(null==(e=this.input.icon())?void 0:e.length)?this.input.icon():"fas fa-bolt"})),this.inputIconHasFocus?this.dropdownIconMatches(this.input.icon()):null))]},t.componentFormColor=function(a){return[a.title?m("label",null,a.title):null,m("div",null,a.desc?m("label",null,a.desc):null,m("div",{className:"Color-Input"},m("input",{class:"FormControl",type:"text",bidi:a.stream,placeholder:a.placeholder,onupdate:this.formInputOnUpdate.bind(this)}),m("color",{className:"Chat-FullColor"})))]},t.dropdownIconMatches=function(a){var e=this,t=this.input.icon(),A=this.input.iconState;return t!==A.lastInput&&(A.matches=z.filter((function(a){return a.includes(t)})),A.matches.length>5&&(A.matches=A.matches.sort((function(a,e){return.5-Math.random()}))),A.lastInput=t),t.length&&A.matches.length>0&&(1!=A.matches.length||A.matches[0]!==t)?m("ul",{className:"Dropdown-menu Dropdown--Icons Search-results"},m("li",{className:"Dropdown-header"},"Font Awesome 5"),A.matches.slice(-5).map((function(a){return m("li",{className:"IconSearchResult",onclick:function(t){return e.input.icon(a)}},m("icon",{className:"Chat-FullColor"},m("i",{className:a})),m("span",null,Z()(a,t)))}))):null},t.formInputOnUpdate=function(a){$(".Chat-FullColor").css({color:this.input.color(),backgroundColor:this.input.color()})},t.componentFormInput=function(a){return[a.title?m("label",null,a.title):null,m("div",null,a.desc?m("label",null,a.desc):null,m("input",{class:"FormControl",type:"text",bidi:a.stream,placeholder:a.placeholder}))]},e}(M.a),K=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){var t=this;a.prototype.oninit.call(this,e),this.getInput().title=R()(this.model.title()),this.getInput().color=R()(this.model.color()),this.getInput().icon=R()(this.model.icon()),this.deleteChatTitleInput=R()(""),this.deleteState=0,this.initialUsers=this.model.users().filter((function(a){return!a.chat_pivot(t.model.id()).removed_at()})),this.setSelectedUsers(this.model.users().filter((function(a){return!a.chat_pivot(t.model.id()).removed_at()}))),this.edited={},this.isLocalModerator=this.isModer(app.session.user),this.isLocalLeaved=!this.initialUsers.includes(app.session.user)},t.title=function(){return app.translator.trans("xelson-chat.forum.chat.edit_modal.title")},t.onsubmit=function(){var a=this,e=this.getSelectedUsers().map((function(e){return a.initialUsers.includes(e)?null:k.a.getIdentifier(e)})).filter((function(a){return a})),t=this.initialUsers.map((function(e){return a.getSelectedUsers().includes(e)?null:k.a.getIdentifier(e)})).filter((function(a){return a})),s=Object.keys(this.edited).map((function(e){return a.edited[e]=A({id:e},a.edited[e])}));this.model.save({title:this.getInput().title(),color:this.getInput().color(),icon:this.getInput().icon(),users:{added:e,removed:t,edited:s},relationships:{users:this.getSelectedUsers()}}),this.hide()},t.alertText=function(){return null},t.isModer=function(a){var e,t;return!!a&&(!!(null!=(e=null==(t=this.edited[a.id()])?void 0:t.role)?e:a.chat_pivot(this.model.id()).role())||!!this.isCreator(a))},t.isCreator=function(a){return 2==a.chat_pivot(this.model.id()).role()||!this.model.creator()&&a.groups()&&a.groups().some((function(a){return a.id()==Q.a.ADMINISTRATOR_ID}))},t.userMentionClassname=function(a){return I()({editable:!0,moder:this.isModer(a),creator:this.isCreator(a)})},t.userMentionDropdownOnclick=function(a,e){switch(e){case"moder":this.isModer(a)?this.edited[a.id()]={role:0}:this.edited[a.id()]={role:1};break;case"kick":this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(a),1)}},t.componentUserMentionDropdown=function(a){return m(v.a,{buttonClassName:"Button Button--icon Button--flat Button--mention-edit",menuClassName:"Dropdown-menu--top Dropdown-menu--bottom Dropdown-menu--left Dropdown-menu--right",icon:"fas fa-chevron-down"},m(C.a,{icon:this.isModer(a)?"fas fa-times":"fas fa-users-cog",onclick:this.userMentionDropdownOnclick.bind(this,a,"moder"),disabled:a==app.session.user||!this.isCreator(app.session.user)||this.isCreator(a)},app.translator.trans("xelson-chat.forum.chat.moder")),m(C.a,{icon:"fas fa-trash-alt",onclick:this.userMentionDropdownOnclick.bind(this,a,"kick"),disabled:a.chat_pivot(this.model.id()).role()>=this.isLocalModerator&&a!=app.session.user},app.translator.trans("xelson-chat.forum.chat."+(a==app.session.user?"leave":"kick"))))},t.userMentionContent=function(a){return["@"+a.displayName(),this.isLocalModerator&&!app.chat.isChatPM(this.model)?this.componentUserMentionDropdown(a):null]},t.userMentionOnClick=function(a,e){this.$(e.target).find(".Dropdown").trigger("shown.bs.dropdown")},t.componentFormInputIcon=function(){return this.componentFormIcon({title:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.icon.label"),desc:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.icon.validator",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1",target:"blank"})}),stream:this.getInput().icon,placeholder:"fas fa-bolt"})},t.componentFormInputTitle=function(){return this.componentFormInput({title:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.title.label"),desc:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.title.validator"),stream:this.getInput().title,placeholder:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.title.label")})},t.componentFormInputColor=function(){return this.componentFormColor({title:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.color.label"),desc:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.color.validator"),stream:this.getInput().color,placeholder:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.color.label")})},t.componentChatInfo=function(){return[m("label",null,m("h2",null,this.model.title())),this.componentUsersMentions()]},t.componentFormPM=function(){return this.componentChatInfo()},t.componentFormChannel=function(){return this.isLocalModerator?[this.componentFormInputTitle(),this.componentFormInputColor(),this.componentFormInputIcon(),this.componentFormUsersSelect("xelson-chat.forum.chat.edit_modal.form.users.edit")]:this.componentChatInfo()},t.componentFormChat=function(){return this.isLocalModerator?[this.componentFormInputTitle(),this.componentFormInputColor(),this.componentFormInputIcon(),this.componentFormUsersSelect()]:this.componentChatInfo()},t.componentForm=function(){return this.model.type()?this.componentFormChannel():app.chat.isChatPM(this.model)?this.componentFormPM():this.componentFormChat()},t.componentFormButtons=function(){var a=[];return this.isLocalModerator&&!app.chat.isChatPM(this.model)&&a.push(m(C.a,{className:"Button Button--primary Button--block ButtonSave",onclick:this.onsubmit.bind(this),disabled:this.model.type()?!this.isCanEditChannel():!this.isCanEditChat()},app.translator.trans("xelson-chat.forum.chat.edit_modal.save_button"))),a.push(m(C.a,{className:"Button Button--primary Button--block ButtonLeave",onclick:this.onleave.bind(this),disabled:this.model.removed_by()&&this.model.removed_by()!=app.session.user.id()},app.translator.trans("xelson-chat.forum.chat.edit_modal.form."+(this.isLocalLeaved?"return":"leave")))),!app.chat.isChatPM(this.model)&&app.chat.getPermissions().create.channel&&a.push(this.componentDeleteChat()),a},t.onleave=function(){this.isLocalLeaved?(this.getSelectedUsers().push(app.session.user),this.model.save({users:{added:[k.a.getIdentifier(app.session.user)]},relationships:{users:this.getSelectedUsers()}}).then((function(a){return m.redraw()}))):this.model.save({users:{removed:[k.a.getIdentifier(app.session.user)]},relationships:{users:this.getSelectedUsers()}}).then((function(a){return m.redraw()})),this.hide()},t.isCanEditChannel=function(){return this.getInput().title().length},t.isCanEditChat=function(){return!this.alertText()},t.componentDeleteChat=function(){return[1==this.deleteState?[m("br",null),this.componentFormInput({title:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.delete.title"),desc:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.delete.desc"),placeholder:app.translator.trans("xelson-chat.forum.chat.edit_modal.form.delete.placeholder"),stream:this.deleteChatTitleInput})]:null,m(C.a,{className:"Button Button--primary Button--block ButtonDelete",onclick:this.ondelete.bind(this),disabled:1==this.deleteState&&!this.isValidTitleCopy()},app.translator.trans("xelson-chat.forum.chat.edit_modal.form.delete.button"))]},t.isValidTitleCopy=function(){return this.deleteChatTitleInput()==this.model.title()},t.ondelete=function(){switch(this.deleteState){case 0:this.deleteState=1;break;case 1:this.isValidTitleCopy()&&(app.chat.deleteChat(this.model),this.model.delete(),this.hide())}},t.content=function(){return m("div",{className:"Modal-body"},m("div",{class:"Form-group InputTitle"},this.componentForm(),m("div",{className:"ButtonsPadding"}),this.componentFormButtons()))},e}(Y),H=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.view=function(a){var e=this,t={};return this.attrs.ondragstart&&(t.ondragstart=this.attrs.ondragstart),this.attrs.ondragstart&&(t.onmousedown=this.attrs.onmousedown),m("div",A({className:"ChatHeader"},t),this.attrs.showChatListStream?m("div",{className:"icon",onclick:function(a){e.attrs.showChatListStream(!e.attrs.showChatListStream()),a.stopPropagation()}},m("i",{className:"fas fa-list"})):"",m("h2",null,app.chat.getCurrentChat()?[app.chat.getCurrentChat().icon()?m("i",{class:app.chat.getCurrentChat().icon(),style:{color:app.chat.getCurrentChat().color(),"margin-right":"3px"}}):null,app.chat.getCurrentChat().title()]:app.translator.trans("xelson-chat.forum.toolbar.title")),app.chat.getCurrentChat()&&app.session.user?m("div",{className:"icon","data-title":app.translator.trans("xelson-chat.forum.toolbar.chat.settings"),onclick:function(){return app.modal.show(K,{model:app.chat.getCurrentChat()})}},m("i",{className:"fas fa-cog"})):null,m("div",{className:"window-buttons"},this.windowButtonItems().toArray()))},t.windowButtonItems=function(){var a=new g.a;return a.add("sound",m("div",{className:"icon",onclick:this.toggleSound.bind(this),"data-title":app.translator.trans("xelson-chat.forum.toolbar."+(app.chat.getFrameState("isMuted")?"enable_sounds":"disable_sounds"))},m("i",{className:app.chat.getFrameState("isMuted")?"fas fa-volume-mute":"fas fa-volume-up"}))),a.add("notifications",m("div",{className:"icon",onclick:this.toggleNotifications.bind(this),"data-title":app.translator.trans("xelson-chat.forum.toolbar."+(app.chat.getFrameState("notify")?"disable_notifications":"enable_notifications"))},m("i",{className:app.chat.getFrameState("notify")?"fas fa-bell":"fas fa-bell-slash"}))),this.attrs.inFrame&&a.add("minimize",m("div",{className:"icon",onclick:this.toggleChat.bind(this),"data-title":app.translator.trans("xelson-chat.forum.toolbar."+(app.chat.getFrameState("beingShown")?"minimize":"maximize"))},m("i",{className:app.chat.getFrameState("beingShown")?"fas fa-window-minimize":"fas fa-window-maximize"}))),a},t.toggleChat=function(a){var e=!app.chat.getFrameState("beingShown");app.chat.saveFrameState("beingShown",e),a.preventDefault(),a.stopPropagation()},t.toggleSound=function(a){app.chat.saveFrameState("isMuted",!app.chat.getFrameState("isMuted")),a.preventDefault(),a.stopPropagation()},t.toggleNotifications=function(a){app.chat.saveFrameState("notify",!app.chat.getFrameState("notify")),"Notification"in window&&app.chat.getFrameState("notify")&&Notification.requestPermission(),a.preventDefault(),a.stopPropagation()},e}(l.a),L=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.isChannel=!1},t.title=function(){return app.translator.trans("xelson-chat.forum.chat.list.add_modal.title")},t.onsubmit=function(){app.store.createRecord("chats").save({title:this.getInput().title(),isChannel:this.isChannel,icon:this.getInput().icon(),color:this.getInput().color(),relationships:{users:[].concat(this.getSelectedUsers(),[app.session.user])}}).then((function(a){app.chat.addChat(a),app.chat.onChatChanged(a),m.redraw()})),this.hide()},t.componentFormInputColor=function(){return this.componentFormColor({title:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.color.label"),desc:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.color.validator"),stream:this.getInput().color,placeholder:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.color.label")})},t.componentFormInputIcon=function(){return this.componentFormIcon({title:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.icon.label"),desc:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.icon.validator",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1",target:"blank"})}),stream:this.getInput().icon,placeholder:"fas fa-bolt"})},t.componentFormChat=function(){return[this.usersSelected.length>1?[this.componentFormInput({title:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.title.chat"),desc:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.title.validator"),stream:this.getInput().title,placeholder:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.title.chat")}),this.componentFormInputColor(),this.componentFormInputIcon()]:null,this.componentFormUsersSelect()]},t.componentFormChannel=function(){return[this.componentFormInput({title:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.title.channel"),desc:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.title.validator"),stream:this.getInput().title,placeholder:app.translator.trans("xelson-chat.forum.chat.list.add_modal.form.title.channel")}),this.componentFormInputColor(),this.componentFormInputIcon()]},t.isCanCreateChat=function(){return!(this.getSelectedUsers().length>1&&!this.getInput().title().length)&&(!!this.getSelectedUsers().length&&!this.alertText())},t.isCanCreateChannel=function(){return this.getInput().title().length},t.content=function(){var a=this;return m("div",{className:"Modal-body"},m("div",{class:"Form-group InputTitle"},app.chat.getPermissions().create.channel?m("div",{className:"ChatType"},m("div",{className:I()({"Tab Tab--left":!0,"Tab--active":!this.isChannel}),onclick:function(){return a.isChannel=!1}.bind(this)},app.translator.trans("xelson-chat.forum.chat.list.add_modal.chat")),m("div",{className:I()({"Tab Tab--right":!0,"Tab--active":this.isChannel}),onclick:function(){return a.isChannel=!0}.bind(this)},app.translator.trans("xelson-chat.forum.chat.list.add_modal.channel"))):null,this.isChannel?this.componentFormChannel():this.componentFormChat(),m("div",{className:"ButtonsPadding"}),m(C.a,{className:"Button Button--primary Button--block",disabled:this.isChannel?!this.isCanCreateChannel():!this.isCanCreateChat(),onclick:this.onsubmit.bind(this)},app.translator.trans("xelson-chat.forum.chat.list.add_modal.create."+(this.isChannel?"channel":"chat")))))},e}(Y),X=t(8),j=t.n(X),W=t(6),_=t.n(W),aa=t(16),ea=t.n(aa),ta=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.model=this.attrs.model},t.componentAvatarPM=function(){return m("div",{className:I()({avatar:!0,image:this.model.avatarUrl()}),style:{"background-color":this.model.color(),color:this.model.textColor(),"background-image":this.model.avatarUrl()?"url("+this.model.avatarUrl()+")":null}},this.model.icon()?m("i",{class:this.model.icon()}):this.model.avatarUrl()?null:this.firstLetter(this.model.title()).toUpperCase())},t.componentAvatarChannel=function(){return m("div",{className:"avatar",style:{"background-color":this.model.color(),color:this.model.textColor()}},this.model.icon()?m("i",{class:this.model.icon()}):this.model.avatarUrl()?null:this.firstLetter(this.model.title()).toUpperCase())},t.view=function(a){return 1==this.model.type()?this.componentAvatarChannel():this.componentAvatarPM()},t.firstLetter=function(a){for(var e=0;e2||this.model.type())&&(e=s.displayName()+": ")),m("div",{className:I()({message:!0,censored:a.is_censored()}),title:a.is_censored()?app.translator.trans("xelson-chat.forum.chat.message.censored"):null},m("span",{className:"sender"},e),m("span",{className:t.type},t.text))},t.componentTextEmpty=function(){return m("div",{className:"message"},m("span",{className:"empty"},app.translator.trans("xelson-chat.forum.chat.list.preview.empty")))},e}(l.a),sa=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.view=function(a){var e=["ChatList"];return(app.chat.getFrameState("beingShownChatsList")||this.attrs.inPage)&&e.push("toggled"),m("div",{className:e.join(" ")},m("div",{className:"header"},m("div",{className:"input-wrapper input--down"},m("input",{id:"chat-find",bidi:app.chat.q,placeholder:app.translator.trans("xelson-chat.forum.chat.list.placeholder")})),this.attrs.inPage?"":m("div",{className:"ToggleButton icon icon-toggle",onclick:this.toggleChatsList.bind(this),"data-title":app.translator.trans("xelson-chat.forum.chat.list."+(app.chat.getFrameState("beingShownChatsList")?"unpin":"pin"))},m("i",{className:"fas fa-paperclip"}))),m("div",{className:"list"},app.chat.getChatsSortedByLastUpdate().map((function(a){return m("div",{onclick:app.chat.onChatChanged.bind(app.chat,a)},m(Aa,{key:a.id(),model:a}))})),app.session.user&&app.chat.getPermissions().create.chat?m("div",{class:"panel-add",onclick:function(){return app.modal.show(L)}}):null))},t.content=function(){var a=this;return app.chat.getChatsSortedByLastUpdate().map((function(e){return m("div",{onclick:a.onChatChanged.bind(a,e)},m(Aa,{key:e.id(),model:e}))}))},t.getChatsListPanel=function(){return document.querySelector(".ChatList")},t.getChatsList=function(){return document.querySelector(".ChatList .list")},t.toggleChatsList=function(a){var e=this.getChatsListPanel(),t=!0;e.classList.contains("toggled")?(e.classList.remove("toggled"),t=!1):e.classList.add("toggled"),app.chat.saveFrameState("beingShownChatsList",t)},e}(l.a),na=t(25),oa=t.n(na),ra=t(17),ia=t.n(ra),fa=t(26),la=t.n(fa),ca=t(18),ha=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){var t;a.prototype.oninit.call(this,e),this.model=this.attrs.model,this.state=this.attrs.state,app.chat.input=this,this.messageCharLimit=null!=(t=app.forum.attribute("xelson-chat.settings.charlimit"))?t:512,this.updatePlaceholder()},t.oncreate=function(e){a.prototype.oncreate.call(this,e);var t=this.state.input,A=this.$("#chat-input")[0];A.lineHeight=parseInt(window.getComputedStyle(A).getPropertyValue("line-height")),t.element=A,t.content()&&t.content().length&&this.inputProcess({target:A}),this.updateLimit()},t.onbeforeupdate=function(e,t){a.prototype.onbeforeupdate.call(this,e,t),this.model!==this.attrs.model&&(this.model=this.attrs.model,this.state=this.attrs.state),this.updatePlaceholder()},t.updatePlaceholder=function(){app.session.user?app.chat.getPermissions().post?this.model.removed_at()?this.inputPlaceholder=app.translator.trans("xelson-chat.forum.errors.removed"):this.inputPlaceholder=app.translator.trans("xelson-chat.forum.chat.placeholder"):this.inputPlaceholder=app.translator.trans("xelson-chat.forum.errors.chatdenied"):this.inputPlaceholder=app.translator.trans("xelson-chat.forum.errors.unauthenticated")},t.view=function(){var a=this;return m("div",{className:"ChatInput input-wrapper"},m("textarea",{id:"chat-input",maxlength:this.messageCharLimit,disabled:!app.chat.getPermissions().post||this.model.removed_at(),placeholder:this.inputPlaceholder,onkeypress:this.inputPressEnter.bind(this),oninput:this.inputProcess.bind(this),onpaste:this.inputProcess.bind(this),onkeyup:this.inputSaveDraft.bind(this),rows:this.state.input.rows,value:this.state.input.content(),onupdate:function(){return a.saveDraft.apply(a)}}),this.state.messageEditing?m("div",{className:"icon edit",onclick:this.state.messageEditEnd.bind(this.state)},m("i",{class:"fas fa-times"})):null,this.model.removed_at()&&this.model.removed_by()===parseInt(app.session.user.id())?m(C.a,{className:"Button Button--primary ButtonRejoin",onclick:function(){return app.modal.show(K,{model:a.model})}},app.translator.trans("xelson-chat.forum.chat.rejoin")):[m("div",{className:"icon send",onclick:this.inputPressButton.bind(this)},m("i",{class:"fas fa-angle-double-right"})),m("div",{id:"chat-limiter"})])},t.updateLimit=function(){var a=this.element.querySelector("#chat-limiter");if(a){var e=this.messageCharLimit-(this.state.input.messageLength||0);a.innerText=e+"/"+this.messageCharLimit,a.className=e<100?"reaching-limit":""}},t.saveDraft=function(a){var e=this;void 0===a&&(a=this.state.input.content()),this.state.input.lastDraft!=a&&Object(ca.throttle)(300,(function(){e.state.setChatStorageValue("draft",a)}))(),this.state.input.lastDraft=a},t.inputSaveDraft=function(a){a&&(a.redraw=!1);var e=a.target;this.saveDraft(e.value.trim())},t.resizeInput=function(){var a=this.state.getChatInput();a.rows=1,this.state.input.rows=Math.min(a.scrollHeight/a.lineHeight,"phone"===app.screen()?2:5),a.rows=this.state.input.rows},t.inputProcess=function(a){a&&(a.redraw=!1);var e=a.target;this.state.input.content(e.value);var t=e.value.trim();this.state.input.messageLength=t.length,this.updateLimit(),this.resizeInput(),this.state.input.messageLength?this.state.input.writingPreview||this.state.messageEditing||this.inputPreviewStart(t):this.state.input.writingPreview&&!t.length&&this.inputPreviewEnd(),this.state.messageEditing?this.state.messageEditing.content=t:this.state.input.writingPreview&&(this.state.input.previewModel.content=t),this.attrs.oninput&&this.attrs.oninput(a)},t.inputPressEnter=function(a){return a.redraw=!1,!(13==a.keyCode&&!a.shiftKey)||(this.state.messageSend(),!1)},t.inputPressButton=function(){this.state.messageSend()},t.inputPreviewStart=function(a){this.state.input.writingPreview?this.state.input.previewModel.isNeedToFlash=!0:(this.state.input.writingPreview=!0,this.state.input.previewModel=app.store.createRecord("chatmessages"),this.state.input.previewModel.pushData({id:0,attributes:{message:" ",created_at:0},relationships:{user:app.session.user,chat:this.model}}),A(this.state.input.previewModel,{isEditing:!0,isNeedToFlash:!0,content:a})),m.redraw()},t.inputPreviewEnd=function(){this.state.input.writingPreview=!1,m.redraw()},e}(l.a),da=t(19),ua=t.n(da),ma=t(27),pa=t.n(ma),ga=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){var t=this;a.prototype.oninit.call(this,e),this.labels=[],this.model=this.attrs.model,this.model.content||(this.model.content=this.model.message()),this.initLabels(),this.subtree=new ea.a((function(){return t.model.freshness}),(function(){return t.model.user().freshness}),(function(){return app.chat.getCurrentChat()}),(function(){return t.model.content}),(function(){return t.model.isDeletedForever}),(function(){return t.model.isTimedOut}),(function(){return t.model.isEditing}),(function(){return t.model.isNeedToFlash}))},t.modelEvent=function(a){app.chat.getViewportState(this.model.chat()).onChatMessageClicked(a,this.model),app.chat.onChatMessageClicked(a,this.model)},t.onbeforeupdate=function(e){return a.prototype.onbeforeupdate.call(this,e),this.model=this.attrs.model,this.subtree.needsRebuild()},t.content=function(){return m("div",null,this.model.user()?m(u.a,{className:"avatar-wrapper",href:app.route.user(this.model.user())},m("span",null,U()(this.model.user(),{className:"avatar"}))):m("div",{className:"avatar-wrapper"},m("span",null,U()(this.model.user(),{className:"avatar"}))),m("div",{className:"message-block"},m("div",{className:"toolbar"},m("a",{className:"name",onclick:this.modelEvent.bind(this,"insertMention")},_()(J()(this.model.user()))+": "),m("div",{className:"labels"},this.labels.map((function(a){return a.condition()?a.component():null}))),m("div",{className:"right"},this.model.id()?[this.model.isDeletedForever?null:this.editDropDown(),m("a",{className:"timestamp",title:_()(ua()(this.model.created_at()))},this.humanTime=j()(this.model.created_at()))]:this.model.isTimedOut?this.editDropDownTimedOut():null)),m("div",{className:"message"},this.model.is_censored()?m("div",{className:"censored actualMessage",title:app.translator.trans("xelson-chat.forum.chat.message.censored")},this.model.content):m("div",{className:"actualMessage",oncreate:this.onContentWrapperCreated.bind(this),onupdate:this.onContentWrapperUpdated.bind(this)},this.model.content))))},t.view=function(a){return m("div",{className:I()({"message-wrapper":!0,hidden:this.model.deleted_by(),editing:this.model.isEditing,deleted:!this.isVisible()}),"data-id":this.model.id()},this.model?this.content():null)},t.initLabels=function(){var a=this;this.labelBind((function(){return a.model.edited_at()}),(function(){return m("div",{class:"icon",title:_()(app.translator.trans("core.forum.post.edited_tooltip",{user:a.model.user(),ago:j()(a.model.edited_at())}))},m("i",{class:"fas fa-pencil-alt"}))})),this.labelBind((function(){return a.model.deleted_by()}),(function(){return m("div",{class:"icon"},m("i",{class:"fas fa-trash-alt"})," ",m("span",null,"("+app.translator.trans("xelson-chat.forum.chat.message.deleted"+(a.model.isDeletedForever?"_forever":""))," ",J()(a.model.deleted_by()),")"))})),this.labelBind((function(){return a.model.isTimedOut}),(function(){return m("div",{class:"icon",style:"color: #ff4063"},m("i",{class:"fas fa-exclamation-circle"}))}))},t.labelBind=function(a,e){this.labels.push({condition:a,component:e})},t.editDropDown=function(){var a=new g.a;return app.chat.getPermissions().edit&&this.model.user()&&this.model.user()==app.session.user&&a.add("dropdownEditStart",m(C.a,{onclick:this.modelEvent.bind(this,"dropdownEditStart"),icon:"fas fa-pencil-alt",disabled:this.model.deleted_by()||this.model.isEditing},app.translator.trans("core.forum.post_controls.edit_button"))),a.add("separator",m(pa.a,null)),(this.model.chat().role()||app.chat.getPermissions().delete&&this.model.user()==app.session.user)&&(this.model.deleted_by()?a.add("dropdownRestore",m(C.a,{onclick:this.modelEvent.bind(this,"dropdownRestore"),icon:"fas fa-reply",disabled:!app.chat.getPermissions().moderate.delete&&this.model.deleted_by()!=app.session.user},app.translator.trans("core.forum.post_controls.restore_button"))):a.add("dropdownHide",m(C.a,{onclick:this.modelEvent.bind(this,"dropdownHide"),icon:"fas fa-trash-alt",disabled:this.model.isEditing},app.translator.trans("core.forum.post_controls.delete_button")))),this.model.chat().role()&&(this.model.deleted_by()||app.chat.totalHidden()>=3)&&a.add("dropdownDelete",m(C.a,{onclick:this.modelEvent.bind(this,"dropdownDelete"),icon:"fas fa-trash-alt",disabled:!app.chat.getPermissions().delete},app.translator.trans("core.forum.post_controls.delete_forever_button"))),Object.keys(a.items).length<=1?null:m("div",{className:"edit"},m(v.a,{buttonClassName:"Button Button--icon Button--flat",menuClassName:"Dropdown-menu Dropdown-menu--top Dropdown-menu--bottom Dropdown-menu--left Dropdown-menu--right",icon:"fas fa-ellipsis-h"},a.toArray()))},t.editDropDownTimedOut=function(){return m("div",{className:"edit"},m(v.a,{buttonClassName:"Button Button--icon Button--flat",menuClassName:"Dropdown-menu--top Dropdown-menu--bottom Dropdown-menu--left Dropdown-menu--right",icon:"fas fa-ellipsis-h"},m(C.a,{onclick:this.modelEvent.bind(this,"dropdownDelete"),icon:"fas fa-trash-alt"},app.translator.trans("xelson-chat.forum.chat.message.actions.hide")),m(C.a,{onclick:this.modelEvent.bind(this,"dropdownResend"),icon:"fas fa-reply"},app.translator.trans("xelson-chat.forum.chat.message.actions.resend"))))},t.oncreate=function(e){var t=this;a.prototype.oncreate.call(this,e),this.messageWrapper=e.dom,this.pollInterval=setInterval((function(){t.renderMessage()}),100)},t.onremove=function(e){a.prototype.onremove.call(this,e),clearInterval(this.pollInterval)},t.onContentWrapperUpdated=function(e){a.prototype.onupdate.call(this,e),this.renderMessage(e.dom)},t.onContentWrapperCreated=function(e){a.prototype.oncreate.call(this,e),this.renderMessage(e.dom)},t.renderMessage=function(){this.model.isNeedToFlash&&(app.chat.flashItem($(this.messageWrapper)),this.model.isNeedToFlash=!1),this.model.content!==this.oldContent&&(this.oldContent=this.model.content,app.chat.renderChatMessage(this.model,this.model.content))},t.isVisible=function(){return this.model.chat()==app.chat.getCurrentChat()&&(!this.model.isDeletedForever&&!(this.model.deleted_by()&&!this.model.chat().role()&&this.model.user()!=app.session.user))},e}(l.a),ba=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.model.message().split("").every((function(a){return"*"===a}))?this.parsedContent={id:"chatCensored"}:this.parsedContent=JSON.parse(this.model.message())},t.componentUserMention=function(a){return m(u.a,{href:app.route.user(a)},m("span",{className:"UserMention"},a.displayName()))},t.componentUserMentionsByIds=function(a){var e=this;return a.map((function(a){return e.componentUserMention(app.store.getById("users",a))}))},t.componentEventText=function(){switch(this.parsedContent.id){case"chatCensored":return m("div",{className:"censored",title:app.translator.trans("xelson-chat.forum.chat.message.censored")},this.model.message());case"chatCreated":if(!this.model.chat())return;return 1==this.model.chat().type()?app.translator.trans("xelson-chat.forum.chat.message.events.channel.created",{creatorname:this.componentUserMention(this.model.user()),chatname:m("b",{className:"chat-title"},this.model.chat().title())}):0==this.model.chat().type()&&this.model.chat().users().length<=2?app.translator.trans("xelson-chat.forum.chat.message.events.pm.created",{creatorname:this.componentUserMention(this.model.chat().creator()),username:this.parsedContent.users.length?this.componentUserMention(app.store.getById("users",this.parsedContent.users[0])):null}):app.translator.trans("xelson-chat.forum.chat.message.events.chat.created",{creatorname:this.componentUserMention(this.model.user()),chatname:m("b",{className:"chat-title"},this.model.chat().title()),usernames:this.componentUserMentionsByIds(this.parsedContent.users),username:this.parsedContent.users.length?this.componentUserMention(app.store.getById("users",this.parsedContent.users[0])):null});case"chatEdited":var a,e;switch(this.parsedContent.column){case"title":a=m("b",{className:"chat-title"},this.parsedContent.old),e=m("b",{className:"chat-title"},this.parsedContent.new);break;case"color":a=m("i",{className:"fas fa-circle",style:{color:this.parsedContent.old}}),e=m("i",{className:"fas fa-circle",style:{color:this.parsedContent.new}});break;case"icon":a=this.parsedContent.old?m("i",{className:this.parsedContent.old}):m("b",null,"[nothing]"),e=m("i",{className:this.parsedContent.new})}return app.translator.trans("xelson-chat.forum.chat.message.events."+this.parsedContent.column+".edited",{editorname:this.componentUserMention(this.model.user()),old:a,new:e});case"chatAddRemoveUser":if(this.parsedContent.add.length&&this.parsedContent.remove.length)return app.translator.trans("xelson-chat.forum.chat.message.events.users.invited_kicked",{editorname:this.componentUserMention(this.model.user()),invitednames:this.componentUserMentionsByIds(this.parsedContent.add),kickednames:this.componentUserMentionsByIds(this.parsedContent.remove)});if(this.parsedContent.add.length)return this.parsedContent.add[0]==this.model.user().id()?app.translator.trans("xelson-chat.forum.chat.message.events.self.entered",{username:this.componentUserMention(this.model.user())}):app.translator.trans("xelson-chat.forum.chat.message.events.users.invited",{editorname:this.componentUserMention(this.model.user()),usernames:this.componentUserMentionsByIds(this.parsedContent.add)});if(this.parsedContent.remove.length)return this.parsedContent.remove[0]==this.model.user().id()?app.translator.trans("xelson-chat.forum.chat.message.events.self.leaved",{username:this.componentUserMention(this.model.user())}):app.translator.trans("xelson-chat.forum.chat.message.events.users.kicked",{editorname:this.componentUserMention(this.model.user()),usernames:this.componentUserMentionsByIds(this.parsedContent.remove)})}},t.content=function(){return m("div",{className:"event"},this.componentEventText(),m("a",{className:"timestamp",title:_()(ua()(this.model.created_at()))},this.humanTime=j()(this.model.created_at())))},e}(ga),Ca=function(a){function e(){return a.apply(this,arguments)||this}return r(e,a),e.prototype.view=function(a){return m("div",null,m("div",{className:"wrapper",style:{height:app.chat.getFrameState("transform").y+40+"px"}},app.chat.getChats().length?m("div",{className:"welcome"},m("h1",null,app.translator.trans("xelson-chat.forum.chat.welcome.header")),m("span",null,app.translator.trans("xelson-chat.forum.chat.welcome.subheader"))):null))},e}(l.a),wa=function(a){function e(){return a.apply(this,arguments)||this}return r(e,a),e}(k.a);A(wa.prototype,{message:k.a.attribute("message"),user:k.a.hasOne("user"),deleted_by:k.a.hasOne("deleted_by"),chat:k.a.hasOne("chat"),created_at:k.a.attribute("created_at",k.a.transformDate),edited_at:k.a.attribute("edited_at",k.a.transformDate),type:k.a.attribute("type"),is_readed:k.a.attribute("is_readed"),ip_address:k.a.attribute("ip_address"),is_censored:k.a.attribute("is_censored")});var va=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.model=this.attrs.chatModel,this.model&&(this.state=app.chat.getViewportState(this.model))},t.oncreate=function(e){a.prototype.oncreate.call(this,e),this.loadChat()},t.onupdate=function(e){a.prototype.onupdate.call(this,e);var t=e.attrs.chatModel;t!==this.model&&(this.model=t,this.model&&(this.state=app.chat.getViewportState(this.model),this.loadChat()))},t.loadChat=function(){var a=this,e=this.state.scroll.oldScroll;this.reloadMessages(),m.redraw(),setTimeout((function(){var t=a.element;a.getChatWrapper().scrollTop=t.scrollHeight-t.clientHeight-e}),200)},t.view=function(a){var e=this;return this.model?m("div",{className:"ChatViewport"},m("div",{className:"wrapper",oncreate:this.wrapperOnCreate.bind(this),onbeforeupdate:this.wrapperOnBeforeUpdate.bind(this),onupdate:this.wrapperOnUpdate.bind(this),onremove:this.wrapperOnRemove.bind(this)},this.componentLoader(this.state.scroll.loading),this.componentsChatMessages(this.model).concat(this.state.input.writingPreview?this.componentChatMessage(this.state.input.previewModel):[])),m(ha,{state:this.state,model:this.model,oninput:function(){e.nearBottom()&&!e.state.messageEditing&&e.scrollToBottom()}}),this.isFastScrollAvailable()?this.componentScroller():null):m("div",{className:"ChatViewport"},m(Ca,null),";")},t.componentChatMessage=function(a){return a.type()?m(ba,{key:a.id(),model:a}):m(ga,{key:a.id(),model:a})},t.componentsChatMessages=function(a){var e=this;return app.chat.getChatMessages().map((function(a){return e.componentChatMessage(a)}))},t.componentScroller=function(){return m("div",{className:"scroller",onclick:this.fastScroll.bind(this)},m("i",{class:"fas fa-angle-down"}))},t.componentLoader=function(a){return a?m("msgloader",{className:"message-wrapper--loading"},m(h.a,{className:"loading-old Button-icon"})):null},t.getChatWrapper=function(){return"phone"===app.screen()&&app.current.matches(Ba)?document.documentElement:document.querySelector(".ChatViewport .wrapper")},t.isFastScrollAvailable=function(){var a=this.getChatWrapper();return(this.state.newPushedPosts||this.model.unreaded()>=30||a&&a.scrollHeight>2e3&&a.scrollTop=30)this.fastMessagesFetch(a);else{var e=this.getChatWrapper();e.scrollTop=Math.max(e.scrollTop,e.scrollHeight-3e3),this.scrollToBottom()}},t.fastMessagesFetch=function(a){var e=this;a.redraw=!1,app.chat.chatmessages=[],app.chat.apiFetchChatMessages(this.model).then((function(a){var t,A;e.scrollToBottom(),t=300,i||(i=setTimeout((function(){m.redraw(),A&&A(),i=null}),t)),e.model.pushAttributes({unreaded:0});var s=app.chat.getChatMessages((function(a){return a.chat()==e.model})).slice(-1)[0];app.chat.apiReadChat(e.model,s)}))},t.wrapperOnCreate=function(e){a.prototype.oncreate.call(this,e),this.wrapperOnUpdate(e),(app.current.matches(Ba)?window:e.dom).addEventListener("scroll",this.boundScrollListener=this.wrapperOnScroll.bind(this),{passive:!0})},t.wrapperOnBeforeUpdate=function(e,t){a.prototype.onbeforeupdate.call(this,e,t),!this.state.autoScroll&&this.nearBottom()&&this.state.newPushedPosts&&(this.scrollAfterUpdate=!0)},t.wrapperOnUpdate=function(e){a.prototype.onupdate.call(this,e);var t=e.dom;this.model&&this.state.scroll.autoScroll&&(this.autoScrollTimeout&&clearTimeout(this.autoScrollTimeout),this.autoScrollTimeout=setTimeout(this.scrollToBottom.bind(this,!0),100)),t.scrollTop<=0&&(t.scrollTop=1),this.checkUnreaded(),this.scrollAfterUpdate&&(this.scrollAfterUpdate=!1,this.scrollToBottom())},t.wrapperOnRemove=function(e){a.prototype.onremove.call(this,e),e.dom.removeEventListener("scroll",this.boundScrollListener)},t.wrapperOnScroll=function(a){var e=this,t=app.current.matches(Ba)?document.documentElement:this.element;this.state.scroll.oldScroll=t.scrollHeight-t.clientHeight-t.scrollTop,this.checkUnreaded(),this.lastFastScrollStatus!=this.isFastScrollAvailable()&&(this.lastFastScrollStatus=this.isFastScrollAvailable(),m.redraw());var A=t.scrollHeight;if(this.atBottom()&&(this.state.newPushedPosts=!1),!(this.state.scroll.autoScroll||this.state.loading||this.scrolling)&&!this.state.messageEditing&&t.scrollTop>=0)if(t.scrollTop<=500){var s=app.chat.getChatMessages((function(a){return a.chat()==e.model}))[0];s&&s!=this.model.first_message()&&app.chat.apiFetchChatMessages(this.model,s.created_at().toISOString())}else if(t.scrollTop+t.offsetHeight>=A-500){var n=app.chat.getChatMessages((function(a){return a.chat()==e.model})).slice(-1)[0];n&&n!=this.model.last_message()&&app.chat.apiFetchChatMessages(this.model,n.created_at().toISOString())}},t.checkUnreaded=function(){var a=this,e=this.getChatWrapper();if(e&&this.model.unreaded()){var t=app.chat.getChatMessages((function(e){return e.chat()==a.model&&e.created_at()>=a.model.readed_at()&&!e.isReaded})),A=Array.isArray(t),s=0;for(t=A?t:t[Symbol.iterator]();;){var n;if(A){if(s>=t.length)break;n=t[s++]}else{if((s=t.next()).done)break;n=s.value}var o=n,r=document.querySelector('.message-wrapper[data-id="'+o.id()+'"');r&&e.scrollTop+e.offsetHeight>=r.offsetTop&&(o.isReaded=!0,this.state.scroll.autoScroll&&app.chat.getCurrentChat()==this.model?(app.chat.apiReadChat(this.model,new Date),this.model.pushAttributes({unreaded:0})):(app.chat.apiReadChat(this.model,o),this.model.pushAttributes({unreaded:this.model.unreaded()-1})),m.redraw())}}},t.scrollToAnchor=function(a){var e;e=a instanceof wa?$('.message-wrapper[data-id="'+a.id()+'"')[0]:a;var t=this.getChatWrapper();t&&e?$(t).stop().animate({scrollTop:e.offsetTop-e.offsetHeight},500):setTimeout(scroll,100)},t.scrollToBottom=function(a){var e=this;void 0===a&&(a=!1),this.scrolling=!0;var t=this.getChatWrapper();if(t){var A=!a&&this.atBottom(),s=app.current.matches(Ba)&&document.querySelector(".ChatViewport .wrapper").scrollHeight+200a.model.readed_at()}))[0];a.scrollToAnchor(e)}else a.state.scroll.autoScroll=!0;m.redraw()})),this.state.messagesFetched=!0}},t.nearBottom=function(){return this.pixelsFromBottom()<=500},t.atBottom=function(){return this.pixelsFromBottom()<=5},t.pixelsFromBottom=function(){var a=app.current.matches(Ba)?document.documentElement:this.element;return Math.abs(a.scrollHeight-a.scrollTop-a.clientHeight)},e}(l.a),Ba=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),this.bodyClass="App--chat",this.listOpen=R()(!1)},t.view=function(){var a=ia.a.prototype.sidebarItems();return a.has("forumStatisticsWidget")&&a.remove("forumStatisticsWidget"),m("div",{className:"ChatPage"},m("nav",{className:"IndexPage-nav sideNav"},m("ul",null,la()(a.toArray()))),m(H,{showChatListStream:this.listOpen}),app.chat.chatsLoading?m(h.a,null):m(va,{chatModel:app.chat.getCurrentChat()}),this.listOpen()?m("div",{class:"ChatPage--list"},m(sa,{inPage:!0})):"")},t.oncreate=function(e){var t=this;a.prototype.oncreate.call(this,e),this.clickHandler=function(a){var e=t.$(".ChatList")[0];!t.listOpen()||e&&e.contains(a.target)||(t.listOpen(!1),m.redraw())},$(window).on("click",this.clickHandler)},t.onupdate=function(e){a.prototype.onupdate.call(this,e),this.listOpen()&&(this.element.querySelector(".ChatPage--list").style.height=document.documentElement.clientHeight-this.element.querySelector(".ChatPage--list").getBoundingClientRect().top+"px")},t.onremove=function(e){a.prototype.onremove.call(this,e),$(window).off("click",this.clickHandler)},e}(oa.a),Ia=function(a){function e(){return a.apply(this,arguments)||this}r(e,a);var t=e.prototype;return t.oninit=function(e){a.prototype.oninit.call(this,e),document.addEventListener("mousedown",this.chatMoveListener.bind(this,"mousedown")),document.addEventListener("mouseup",this.chatMoveListener.bind(this,"mouseup"))},t.oncreate=function(e){a.prototype.oncreate.call(this,e)},t.calcHeight=function(){return app.chat.getFrameState("beingShown")?"phone"!==app.screen()?app.chat.getFrameState("transform").y+"px":"70vh":"30px"},t.view=function(a){if(!app.current.matches(Ba)){var e={right:app.chat.getFrameState("transform").x+"px",height:this.calcHeight()};return m("div",{className:"NeonChatFrame "+(app.chat.getFrameState("beingShown")?"":"hidden"),style:e},m("div",{tabindex:"0",className:"frame",id:"chat"},m(sa,null),m("div",{id:"chat-panel"},m(H,{ondragstart:function(){return!1},onmousedown:this.chatHeaderOnMouseDown.bind(this),inFrame:!0}),app.chat.chatsLoading?m(h.a,null):m(va,{chatModel:app.chat.getCurrentChat()}))))}},t.chatHeaderOnMouseDown=function(a){if(0===a.button){var e=a.path||a.composedPath&&a.composedPath();if(e)for(var t,A=0;A0&&e>0)&&(this.element.style.right=A+"px"),this.element.querySelector(".ChatHeader").clientHeight=e.length)break;s=e[A++]}else{if((A=e.next()).done)break;s=A.value}var n=s;if(n&&n!=app.session.user)return n}}return null},pickTextColorBasedOnBgColorSimple:function(a,e,t){var A="#"===a.charAt(0)?a.substring(1,7):a;return.299*parseInt(A.substring(0,2),16)+.587*parseInt(A.substring(2,4),16)+.114*parseInt(A.substring(4,6),16)>186?t:e}});var Qa=t(28),Da=t.n(Qa);function Ma(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}var Sa=function(){function a(a){Ma(this,"loadingSend",!1),Ma(this,"scroll",{autoScroll:!0,oldScroll:0}),Ma(this,"loading",!1),Ma(this,"loadingQueries",{}),Ma(this,"input",{messageLength:0,rows:1,content:R()()}),Ma(this,"messagesFetched",!1),Ma(this,"chatStorage",{key:null,draft:null}),a.model&&(this.initChatStorage(a.model),this.input.content(this.getChatStorageValue("draft")))}var e=a.prototype;return e.initChatStorage=function(a){this.chatStorage.key="neonchat.viewport"+a.id();var e,t=JSON.parse(localStorage.getItem(this.chatStorage.key));t&&(this.chatStorage.draft=null!=(e=t.draft)?e:"")},e.getChatStorageValue=function(a){return this.chatStorage[a]},e.setChatStorageValue=function(a,e){var t,A=null!=(t=JSON.parse(localStorage.getItem(this.chatStorage.key)))?t:{};A[a]=e,localStorage.setItem(this.chatStorage.key,JSON.stringify(A)),this.chatStorage[a]=e},e.onChatMessageClicked=function(a,e){switch(a){case"dropdownEditStart":this.messageEdit(e,!0);break;case"dropdownResend":this.messageResend(e);break;case"insertMention":this.insertMention(e)}},e.getChatInput=function(){return document.querySelector(".NeonChatFrame #chat-input")},e.messageSend=function(){var a=this.input.content();if(a&&a.trim().length>0&&!this.loadingSend)if(this.input.writingPreview)this.input.writingPreview=!1,this.messagePost(this.input.previewModel),app.chat.insertChatMessage(A(this.input.previewModel,{})),this.inputClear();else if(this.messageEditing){var e=this.messageEditing;e.content.trim()!==e.oldContent.trim()&&(e.oldContent=e.content,app.chat.editChatMessage(e,!0,e.content)),this.messageEditEnd(),this.inputClear()}},e.messageEdit=function(a){this.input.writingPreview&&this.input.instance.inputPreviewEnd(),this.messageEditing&&this.messageEditEnd(),a.isEditing=!0,a.oldContent=a.message(),this.messageEditing=a;var e=this.getChatInput();e.value=this.input.content(a.oldContent),e.focus(),app.chat.input.resizeInput(),m.redraw()},e.messageEditEnd=function(){var a=this.messageEditing;a&&(a.isEditing=!1,a.content=a.oldContent,this.inputClear(),m.redraw(),this.messageEditing=null)},e.messageResend=function(a){this.messagePost(a)},e.messagePost=function(a){var e=this;return this.loadingSend=!0,m.redraw(),app.chat.postChatMessage(a).then((function(a){e.loadingSend=!1,m.redraw()}),(function(a){e.loadingSend=!1,m.redraw()}))},e.inputClear=function(){this.input.messageLength=0,this.input.rows=1,this.input.content(null),m.redraw()},e.insertMention=function(a){var e=a.user();app.session.user&&(this.input.content((this.input.content()||"")+" @"+e.username()+" "),this.getChatInput().focus())},a}(),Na=new Audio;Na.src="data:audio/ogg;base64,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",Na.volume=.5;var xa=new Audio;xa.src="data:audio/ogg;base64,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",xa.volume=.5;var Fa=function(){function a(){var a,e,t,A,s,n,o;this.q=R()(""),this.chats=[],this.chatmessages=[],this.chatsLoading=!0,this.curChat=null,this.totalHiddenCount=0;var r=null!=(a=JSON.parse(localStorage.getItem("neonchat")))?a:{};this.frameState={beingShown:null!=(e=r.beingShown)?e:app.forum.attribute("xelson-chat.settings.display.minimize"),beingShownChatsList:null!=(t=r.beingShownChatsList)?t:0,isMuted:null!=(A=r.isMuted)&&A,notify:null!=(s=r.notify)&&s,transform:null!=(n=r.transform)?n:{x:0,y:400},isActive:!0,selectedChat:null!=(o=r.selectedChat)?o:0},this.permissions={post:app.forum.attribute("xelson-chat.permissions.chat"),edit:app.forum.attribute("xelson-chat.permissions.edit"),delete:app.forum.attribute("xelson-chat.permissions.delete"),create:{channel:app.forum.attribute("xelson-chat.permissions.create.channel"),chat:app.forum.attribute("xelson-chat.permissions.create")},moderate:{delete:app.forum.attribute("xelson-chat.permissions.moderate.delete"),vision:app.forum.attribute("xelson-chat.permissions.moderate.vision")}},this.viewportStates={},app.session.user&&app.pusher&&app.pusher.then(this.listenSocketChannels.bind(this))}var e=a.prototype;return e.getViewportState=function(a){return this.viewportStates[a.id()]},e.listenSocketChannels=function(a){var e=a.channels;e.main.bind("neonchat.events",this.handleSocketEvent.bind(this)),e.user&&e.user.bind("neonchat.events",this.handleSocketEvent.bind(this))},e.handleSocketEvent=function(a){var e=a.response.message;e&&(e=app.store.pushPayload(e));var t=a.response.chat;if(t&&(t=app.store.pushPayload(t)),!e||1!=e.chat().type()||!e.chat().removed_at())switch(a.event.id){case"message.post":app.session.user&&e.user()==app.session.user||(this.insertChatMessage(e,!0),m.redraw());break;case"message.edit":var A=e.data.attributes.actions;if(app.session.user&&A.invoker==app.session.user.id())return;void 0!==A.msg?app.session.user&&e.user()==app.session.user||this.editChatMessage(e,!1,A.msg):void 0!==A.hide&&(app.session.user&&A.invoker==app.session.user.id()||(A.hide?this.hideChatMessage(e,!1,e.deleted_by()):this.restoreChatMessage(e,!1)));break;case"message.delete":app.session.user&&e.deleted_by()==app.session.user||this.deleteChatMessage(e,!1,e.deleted_by());break;case"chat.create":app.session.user&&t.creator()==app.session.user||(this.addChat(t,!0),m.redraw());break;case"chat.edit":this.editChat(t,!0);var s=a.response.eventmsg_range;if(s.length&&this.apiFetchChatMessages(t,s,{notify:!0,withFlash:!0,disableLoader:!0}),app.session.user&&a.response.roles_updated_for&&a.response.roles_updated_for.includes(app.session.user.id()))switch(app.session.user.chat_pivot(t.id()).role()){case 0:app.alerts.show({type:"error"},app.translator.trans("xelson-chat.forum.chat.edit_modal.moderator.lost",{chatname:m("b",null,t.title())}));break;case 1:app.alerts.show({type:"success"},app.translator.trans("xelson-chat.forum.chat.edit_modal.moderator.got",{chatname:m("b",null,t.title())}))}m.redraw();break;case"chat.delete":app.session.user&&t.creator()==app.session.user||(this.deleteChat(t),m.redraw())}},e.getFrameState=function(a){return this.frameState[a]},e.saveFrameState=function(a,e){var t,A=null!=(t=JSON.parse(localStorage.getItem("neonchat")))?t:{};A[a]=e,localStorage.setItem("neonchat",JSON.stringify(A)),this.frameState[a]=e},e.getPermissions=function(){return this.permissions},e.getChats=function(){var a=this;return this.chats.filter((function(e){return a.q()&&e.matches(a.q().toLowerCase())||!a.q()&&!e.removed_at()}))},e.getChatsSortedByLastUpdate=function(){return this.getChats().sort((function(a,e){var t,A;return e.last_message()&&a.last_message()?(null==(t=e.last_message())?void 0:t.created_at())-(null==(A=a.last_message())?void 0:A.created_at()):0}))},e.addChat=function(a,e){void 0===e&&(e=!1),this.chats.push(a),this.viewportStates[a.id()]=new Sa({model:a}),a.id()==this.getFrameState("selectedChat")&&this.onChatChanged(a),e&&(a.isNeedToFlash=!0)},e.editChat=function(a,e){void 0===e&&(e=!1),e&&(a.isNeedToFlash=!0)},e.apiReadChat=function(a,e){var t;this.readingTimeout&&clearTimeout(this.readingTimeout),e instanceof Date?t=e.toISOString():e instanceof wa&&(t=e.created_at().toISOString()),this.readingTimeout=setTimeout((function(){return a.save({actions:{reading:t}})}),1e3)},e.deleteChat=function(a){this.chats=this.chats.filter((function(e){return e!=a})),this.getCurrentChat()==a&&this.setCurrentChat(null)},e.isChatPM=function(a){return 0==a.type()&&a.users().length<=2},e.isExistsPMChat=function(a,e){return this.getChats().some((function(t){var A=t.users();return 0===t.type()&&2===A.length&&A.some((function(e){return e==a}))&&A.some((function(a){return a==e}))}))},e.onChatChanged=function(a,e){void 0===e&&(e={}),e.redraw=!1,a!=this.getCurrentChat()&&(this.setCurrentChat(a),m.redraw.sync())},e.comporatorAscButZerosDesc=function(a,e){return 0==a?1:0==e?-1:a-e},e.getChatMessages=function(a){var e=this,t=this.chatmessages.sort((function(a,t){return e.comporatorAscButZerosDesc(a.id(),t.id())}));return a?t.filter(a):t},e.apiFetchChatMessages=function(a,e,t){var A=this;void 0===t&&(t={});var s=this.getViewportState(a),n=this;if(!s.loading&&!s.loadingQueries[e])return s.loading=!0,s.loadingQueries[e]=!0,app.store.find("chatmessages",{chat_id:a.id(),query:e}).then((function(a){a.length&&(a.map((function(a){t.withFlash&&(a.isNeedToFlash=!0),n.insertChatMessage(a)})),t.notify&&A.messageNotify(a[0]),s.loading=!1,s.loadingQueries[e]=!1,m.redraw())}))},e.isChatMessageExists=function(a){return this.chatmessages.find((function(e){return e.id()==a.id()}))},e.insertEventChatMessage=function(a,e,t){void 0===t&&(t=!1),a.pushAttributes({message:JSON.stringify(e)}),insertChatMessage(a,t)},e.insertChatMessage=function(a,e){if(void 0===e&&(e=!1),this.isChatMessageExists(a))return null;if(this.chatmessages.push(a),e){this.messageNotify(a),a.isNeedToFlash=!0;var t=a.chat();t.isNeedToFlash=!0,t.pushAttributes({unreaded:t.unreaded()+1})}var A=this.getChatMessages((function(e){return e.chat()==a.chat()}));(e||a.chat().removed_at())&&a.id()&&A[A.length-1]==a&&(a.chat().pushData({relationships:{last_message:a}}),this.getViewportState(a.chat()).newPushedPosts=!0)},e.renderChatMessage=function(a,e){var t=a instanceof k.a?document.querySelector('.NeonChatFrame .message-wrapper[data-id="'+a.id()+'"] .message'):a;t&&(s9e.TextFormatter.preview(e,t),$(t).find(".UserMention.UserMention--deleted").each((function(){var a=app.store.getBy("users","username",this.innerText.substring(1));this&&a&&(this.classList.remove("UserMention--deleted"),m.render(this,m(u.a,{href:app.route.user(a)},this.innerText)))})),Object(ca.throttle)(100,(function(){$(".NeonChatFrame script").each((function(){self.executedScripts||(self.executedScripts={});var a=$(this).attr("src");if(!self.executedScripts[a]){var e=document.createElement("script");e.src=a,document.head.appendChild(e),self.executedScripts[a]=!0}}))}))())},e.onChatMessageClicked=function(a,e){switch(a){case"dropdownHide":this.hideChatMessage(e,!0);break;case"dropdownRestore":this.restoreChatMessage(e,!0);break;case"dropdownDelete":this.deleteChatMessage(e,!0)}},e.postChatMessage=function(a){return a.save({message:a.content,created_at:new Date,chat_id:a.chat().id()}).then((function(e){a.isTimedOut=!1,a.isNeedToFlash=!0,a.isEditing=!1,a.chat().pushData({relationships:{last_message:a}})}),(function(e){a.isTimedOut=!0}))},e.editChatMessage=function(a,e,t){void 0===e&&(e=!1),a.content=t,a.isNeedToFlash=!0,a.pushAttributes({message:t,edited_at:new Date}),e&&a.save({actions:{msg:t},edited_at:new Date,message:t}),m.redraw()},e.deleteChatMessage=function(a,e,t){void 0===e&&(e=!1),void 0===t&&(t=app.session.user),a.isDeletedForever=!0,a.deleted_by()||a.pushData({relationships:{deleted_by:t}});var A=this.getChatMessages((function(e){return e.chat()==a.chat()&&!e.isDeletedForever}));A.length&&a.chat().pushData({relationships:{last_message:A[A.length-1]}}),this.chatmessages=this.chatmessages.filter((function(e){return e!=a})),e&&a.delete(),m.redraw()},e.totalHidden=function(){return this.totalHiddenCount},e.hideChatMessage=function(a,e,t){void 0===e&&(e=!1),void 0===t&&(t=app.session.user),a.pushData({relationships:{deleted_by:t}}),e&&a.save({actions:{hide:!0},relationships:{deleted_by:app.session.user}}),this.totalHiddenCount++,m.redraw()},e.restoreChatMessage=function(a,e){void 0===e&&(e=!1),this.isChatMessageExists(a)?(a.pushAttributes({deleted_by:0}),a.isNeedToFlash=!0,delete a.data.relationships.deleted_by):(this.insertChatMessage(a),a.isNeedToFlash=!0),e&&a.save({actions:{hide:!1},deleted_by:0}),m.redraw()},e.setCurrentChat=function(a){this.curChat=a,this.saveFrameState("selectedChat",a?a.id():null)},e.getCurrentChat=function(){return this.curChat},e.apiFetchChats=function(){var a=this;return app.store.find("chats").then((function(e){e.map((function(e){return a.addChat(e)})),a.chatsLoading=!1,m.redraw()}))},e.messageNotify=function(a){app.session.user&&a.user().id()==app.session.user.id()||this.notifyTry(a)},e.notifyTry=function(a){"Notification"in window&&(this.messageIsMention(a)&&this.notifySend(a),this.notifySound(a))},e.messageIsMention=function(a){return app.session.user&&a.message().indexOf("@"+app.session.user.username())>=0},e.notifySend=function(a){var e=a.user().avatarUrl();e||(e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPZSURBVHhe7Zs9aNVQGIZvioODQwdHCxUqdHBQtNihg4NLQdCigg6CoKKiNS4dnKRDcXBpEaHSggWFLg4WBBcHBwdLCzo4FBQs2NHBoYODcH2fnOQ2iUnvT27uvcnpA29Ozh3afG++85OTE6darVZyxXEP6XhSOiUNS4NSv1+G2ZR+++WGtCqtV6pzWypzIx8DHHdUx3PSRWmInzLwXXotrciMT94vbaR9Bjgud/WadEviTucBmfFcWpIZZEtmshtgAn8guRLnnYDg56TZrEZkM8Bxb+j4WDro1TvPL+mhTFg01eZpzQDHpV0vSKe9evf5IN2UEfQXTdHnl43juJd1XJN6JXjgWtb8a2uKxjPAcffp+ESivfcys9KUsuGvqe5OYwaY4JclhrUiwLB5pRET6htQvOAD3kiX6pmwex9Q3ODhvLTsx5BKvU6QNl/E4AO4dmJIJb0JmB6Vu18GrqopvPLPIyQbYMZ5hrpOzezyZls6njRPSGsCTHLKEjwckF6Y0yj/G2Cmt700yWkXY4rtnn9eI9oEzIPNN6lbc/u84dnhiJpC7QEqngHM8soaPBBbZCa7kwHm7v+QytT2k+DuHw6yIJwBLGaUPXggxtvmNGoAKzm2cN0vfQPMGl5ey1i9yJBiHuMkyAAWMG3jAofAgCLP91uFhyWNApX7rNv/pGIhA2QALy1sZRQDeGNjKycwwKbeP84wBsTf0dnEIAbYMPtLo38vA/wTa9kzwC+tBQPYkWErmxiQ6f16wdneywAdmn6nXiI2MIDdWLayigHr5txK1vsq1Tn6ABv7gU1iJwPgrV/ahBdzYMCKX9qEF3P4xQjLYiyP2cCW0n+AkyAD4Jlf2kAt1rAB85INs8I/ErF67Bhg3pUtmUqpmQ/eC0I4A2BaKnMWEBsx1ogaYJyZMZVSMhO++xDPAGCnZRlnh18kYouQtkmKpfLP0n6vXnzo+EZ097+a6g5JGUBT4MOESVMpBZNJwUOyAWD24Le8D7+HWPRjSSTdAMMdiY3HRYX5PjGkktwHhHFc9ti9k7wNBQXiozSuu88myVTqZQBNgT8wLhXpiZFrrRs81DcAzB+akIrQJ3CNE40ED/WbQByzk/Sp1GtDJEMdvX1TN6l5A8Bxj+r4Ujrm1bsPkxx2hCcOdbvRWBOIY/7RiDQldfPZgf/NNSROchqhtQwIY3aYPpLYfNipZhE80k4r8Ew3ILsBAcYITLgr5bWyxIfULGZEHmmz0D4DwjjuGR3Ze3hWyrr/gBVrhjU+nn7v/dJG8jEgjONiQPzzeSZXcWMIlKGLMvz5fI5L9pXKP+lVHvxHrr8zAAAAAElFTkSuQmCC"),this.getFrameState("notify")&&document.hidden&&new Notification(a.chat().title(),{body:a.user().username()+": "+a.message(),icon:e,silent:!0,timestamp:new Date})},e.notifySound=function(a){if(!this.getFrameState("isMuted")){var e=this.messageIsMention(a)?Na:xa;e.currentTime=0,e.play()}},e.flashItem=function(a){a.addClass("flash").one("animationend webkitAnimationEnd",(function(){return a.removeClass("flash")}))},a}();t(29);var Ta=document.createElement("div");Ta.setAttribute("id","chat"),document.body.append(Ta),app.initializers.add("xelson-chat",(function(a){function e(t,A,s,n){return e.hasOne=function(e,t,A){return function(){var s=this.data.attributes[e]&&this.data.attributes[e][t]&&this.data.attributes[e][t][A];if(s)return a.store.getById(s.data.type,s.data.id)}},function(){var a=this.data.attributes[t]&&this.data.attributes[t][A]&&this.data.attributes[t][A][s];return n?n(a):a}}a.store.models.chats=ya,a.store.models.chatmessages=wa,A(Da.a.prototype,{chat_pivot:function(a){return{role:e("chat_pivot",a,"role").bind(this),removed_by:e("chat_pivot",a,"removed_by").bind(this),readed_at:e("chat_pivot",a,"readed_at",k.a.transformDate).bind(this),removed_at:e("chat_pivot",a,"removed_at",k.a.transformDate).bind(this),joined_at:e("chat_pivot",a,"joined_at",k.a.transformDate).bind(this)}}}),Object(s.extend)(o.a.prototype,"mount",(function(){a.forum.attribute("xelson-chat.permissions.enabled")&&(a.chat=new Fa,m.mount(document.getElementById("chat"),Ia),"Notification"in window&&a.chat.getFrameState("notify")&&Notification.requestPermission(),a.pusher||a.alerts.show({type:"error"},a.translator.trans("xelson-chat.forum.pusher_not_found")),a.chat.apiFetchChats())}))}))}]); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index 89cc1f3..1487f51 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://module.exports/webpack/bootstrap","webpack://module.exports/./forum.js","webpack://module.exports/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://module.exports/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://module.exports/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://module.exports/./src/forum/addChatPage.js","webpack://module.exports/./src/forum/components/ChatAvatar.js","webpack://module.exports/./src/forum/components/ChatCreateModal.js","webpack://module.exports/./src/forum/components/ChatEditModal.js","webpack://module.exports/./src/forum/components/ChatEventMessage.js","webpack://module.exports/./src/forum/components/ChatFrame.js","webpack://module.exports/./src/forum/components/ChatHeader.js","webpack://module.exports/./src/forum/components/ChatInput.js","webpack://module.exports/./src/forum/components/ChatList.js","webpack://module.exports/./src/forum/components/ChatMessage.js","webpack://module.exports/./src/forum/components/ChatModal.js","webpack://module.exports/./src/forum/components/ChatPage.js","webpack://module.exports/./src/forum/components/ChatPreview.js","webpack://module.exports/./src/forum/components/ChatSearchUser.js","webpack://module.exports/./src/forum/components/ChatViewport.js","webpack://module.exports/./src/forum/components/ChatWelcome.js","webpack://module.exports/./src/forum/components/UsersSearchResults.js","webpack://module.exports/./src/forum/index.js","webpack://module.exports/./src/forum/models/Chat.js","webpack://module.exports/./src/forum/models/Message.js","webpack://module.exports/./src/forum/resources.js","webpack://module.exports/./src/forum/states/ChatState.js","webpack://module.exports/./src/forum/states/ViewportState.js","webpack://module.exports/./src/forum/utils/timedRedraw.js","webpack://module.exports/external \"flarum.core.compat['Application']\"","webpack://module.exports/external \"flarum.core.compat['Component']\"","webpack://module.exports/external \"flarum.core.compat['Model']\"","webpack://module.exports/external \"flarum.core.compat['common/components/Page']\"","webpack://module.exports/external \"flarum.core.compat['components/Button']\"","webpack://module.exports/external \"flarum.core.compat['components/Dropdown']\"","webpack://module.exports/external \"flarum.core.compat['components/IndexPage']\"","webpack://module.exports/external \"flarum.core.compat['components/Link']\"","webpack://module.exports/external \"flarum.core.compat['components/LinkButton']\"","webpack://module.exports/external \"flarum.core.compat['components/LoadingIndicator']\"","webpack://module.exports/external \"flarum.core.compat['components/Modal']\"","webpack://module.exports/external \"flarum.core.compat['components/Search']\"","webpack://module.exports/external \"flarum.core.compat['components/Separator']\"","webpack://module.exports/external \"flarum.core.compat['extend']\"","webpack://module.exports/external \"flarum.core.compat['helpers/avatar']\"","webpack://module.exports/external \"flarum.core.compat['helpers/fullTime']\"","webpack://module.exports/external \"flarum.core.compat['helpers/highlight']\"","webpack://module.exports/external \"flarum.core.compat['helpers/icon']\"","webpack://module.exports/external \"flarum.core.compat['helpers/listItems']\"","webpack://module.exports/external \"flarum.core.compat['helpers/username']\"","webpack://module.exports/external \"flarum.core.compat['models/Group']\"","webpack://module.exports/external \"flarum.core.compat['models/User']\"","webpack://module.exports/external \"flarum.core.compat['utils/ItemList']\"","webpack://module.exports/external \"flarum.core.compat['utils/Stream']\"","webpack://module.exports/external \"flarum.core.compat['utils/SubtreeRetainer']\"","webpack://module.exports/external \"flarum.core.compat['utils/classList']\"","webpack://module.exports/external \"flarum.core.compat['utils/computed']\"","webpack://module.exports/external \"flarum.core.compat['utils/extractText']\"","webpack://module.exports/external \"flarum.core.compat['utils/humanTime']\"","webpack://module.exports/external \"flarum.core.compat['utils/throttleDebounce']\""],"names":["addChatPage","app","routes","chat","path","component","ChatPage","extend","IndexPage","prototype","items","screen","add","route","translator","trans","ChatAvatar","oninit","vnode","model","attrs","componentAvatarPM","classList","avatar","image","avatarUrl","color","textColor","icon","firstLetter","title","toUpperCase","componentAvatarChannel","view","type","string","i","length","isLetter","c","toLowerCase","Component","ChatCreateModal","isChannel","onsubmit","store","createRecord","save","getInput","relationships","users","getSelectedUsers","session","user","then","addChat","onChatChanged","m","redraw","hide","componentFormInputColor","componentFormColor","desc","stream","placeholder","componentFormInputIcon","componentFormIcon","a","componentFormChat","usersSelected","componentFormInput","componentFormUsersSelect","componentFormChannel","isCanCreateChat","alertText","isCanCreateChannel","content","getPermissions","create","channel","bind","ChatModal","ChatEditModal","Stream","deleteChatTitleInput","deleteState","initialUsers","filter","mdl","chat_pivot","id","removed_at","setSelectedUsers","edited","isLocalModerator","isModer","isLocalLeaved","includes","added","map","Model","getIdentifier","e","removed","Object","keys","k","role","isCreator","creator","groups","some","g","Group","ADMINISTRATOR_ID","userMentionClassname","editable","moder","userMentionDropdownOnclick","button","splice","indexOf","componentUserMentionDropdown","userMentionContent","displayName","isChatPM","userMentionOnClick","$","target","find","trigger","componentFormInputTitle","componentChatInfo","componentUsersMentions","componentFormPM","componentForm","componentFormButtons","buttons","push","isCanEditChannel","isCanEditChat","onleave","removed_by","componentDeleteChat","ondelete","isValidTitleCopy","deleteChat","ChatEventMessage","message","split","every","parsedContent","JSON","parse","componentUserMention","componentUserMentionsByIds","ids","getById","componentEventText","creatorname","chatname","username","usernames","componentOld","componentNew","column","old","editorname","remove","invitednames","kickednames","extractText","fullTime","created_at","humanTime","ChatMessage","ChatFrame","document","addEventListener","chatMoveListener","oncreate","calcHeight","getFrameState","y","current","matches","style","right","x","height","chatHeaderOnMouseDown","chatsLoading","getCurrentChat","composedPath","el","contains","chatMoveStart","stopPropagation","preventDefault","event","chatMoving","chatMoveEnd","mouseMoveEvent","chatMoveProcess","moveLast","clientX","clientY","body","removeEventListener","saveFrameState","parseInt","element","offsetHeight","move","nextPos","window","innerWidth","querySelector","offsetWidth","clientHeight","innerHeight","ChatHeader","ondragstart","onmousedown","showChatListStream","modal","show","windowButtonItems","toArray","ItemList","toggleSound","toggleNotifications","inFrame","toggleChat","showing","Notification","requestPermission","ChatInput","state","input","messageCharLimit","forum","attribute","updatePlaceholder","inputState","lineHeight","getComputedStyle","getPropertyValue","inputProcess","updateLimit","onbeforeupdate","inputPlaceholder","post","inputPressEnter","inputSaveDraft","rows","saveDraft","apply","messageEditing","messageEditEnd","inputPressButton","limiter","charsTyped","messageLength","innerText","className","text","lastDraft","throttle","setChatStorageValue","value","trim","resizeInput","Math","min","scrollHeight","inputValue","writingPreview","inputPreviewStart","inputPreviewEnd","previewModel","oninput","keyCode","shiftKey","messageSend","pushData","attributes","isEditing","isNeedToFlash","classes","inPage","join","q","toggleChatsList","getChatsSortedByLastUpdate","getChatsListPanel","getChatsList","chatLists","labels","initLabels","subtree","SubtreeRetainer","freshness","isDeletedForever","isTimedOut","modelEvent","name","viewportState","getViewportState","onChatMessageClicked","needsRebuild","label","condition","editDropDown","editDropDownTimedOut","is_censored","onContentWrapperCreated","onContentWrapperUpdated","hidden","deleted_by","editing","deleted","isVisible","labelBind","edited_at","ago","edit","moderate","totalHidden","messageWrapper","dom","pollInterval","setInterval","renderMessage","onremove","clearInterval","onupdate","flashItem","oldContent","renderChatMessage","search","neonchat","iconState","lastInput","isChatExists","isExistsPMChat","componentAlert","componentUsersSelect","u","options","formInputOnUpdate","inputIconHasFocus","dropdownIconMatches","inputIcon","fa5IconsList","sort","b","random","slice","highlight","css","backgroundColor","Modal","bodyClass","listOpen","navItems","sidebarItems","has","listItems","clickHandler","chatList","on","documentElement","getBoundingClientRect","top","console","log","off","Page","ChatPreview","position","active","componentPreview","unreaded","componentMessageTime","lastMessage","last_message","time","Date","now","getTime","nl","n","getHours","getMinutes","componentTextPreview","componentTextEmpty","componentPreviewChannel","formatTextPreview","startsWith","formatResult","senderName","sender","censored","ChatSearchUser","sourceItems","UsersSearchSource","updateMaxHeight","currentSearch","getInitialSearch","getValue","setValue","searching","sources","open","hasFocus","loading","loadingSources","clear","source","Search","ChatViewport","chatModel","loadChat","oldScroll","scroll","reloadMessages","setTimeout","getChatWrapper","scrollTop","wrapperOnCreate","wrapperOnBeforeUpdate","wrapperOnUpdate","wrapperOnRemove","componentLoader","componentsChatMessages","concat","componentChatMessage","nearBottom","scrollToBottom","isFastScrollAvailable","componentScroller","getChatMessages","fastScroll","watch","chatWrapper","newPushedPosts","fastMessagesFetch","max","chatmessages","apiFetchChatMessages","r","timedRedraw","pushAttributes","apiReadChat","boundScrollListener","wrapperOnScroll","passive","vnodeNew","autoScroll","scrollAfterUpdate","autoScrollTimeout","clearTimeout","checkUnreaded","lastFastScrollStatus","currentHeight","atBottom","scrolling","topMessage","first_message","toISOString","bottomMessage","wrapper","list","readed_at","isReaded","msg","offsetTop","scrollToAnchor","anchor","Message","stop","animate","force","notAtBottom","fewMessages","pixelsFromBottom","messagesFetched","query","abs","ChatWelcome","getChats","UsersSearchResults","props","results","page","limit","isUserSelected","userClick","usersList","all","resultsFind","arr","lastIndexOf","localeCompare","moreText","more_results","LoadingIndicator","size","resultsSelected","values","children","undefined","createElement","setAttribute","append","initializers","models","chats","Chat","pivot","attr","transform","hasOne","relationship","data","User","chat_id","transformDate","joined_at","Application","ChatState","mount","getElementById","pusher","alerts","apiFetchChats","_title","_color","hasMany","v","pm_user","computed","updated","getPMUser","pickTextColorBasedOnBgColorSimple","bgColor","lightColor","darkColor","charAt","substring","is_readed","ip_address","base64AudioNotificationRef","base64AudioNotification","base64PlaceholderAvatarImage","refAudio","Audio","src","resources","volume","audio","curChat","totalHiddenCount","neonchatState","localStorage","getItem","frameState","beingShown","beingShownChatsList","isMuted","notify","isActive","selectedChat","permissions","vision","viewportStates","listenSocketChannels","socket","channels","main","handleSocketEvent","response","pushPayload","insertChatMessage","actions","invoker","editChatMessage","hideChatMessage","restoreChatMessage","deleteChatMessage","editChat","range","eventmsg_range","withFlash","disableLoader","roles_updated_for","key","setItem","stringify","outside","ViewportState","readingTimeout","timestamp","reading","setCurrentChat","user1","user2","sync","comporatorAscButZerosDesc","viewport","self","loadingQueries","messageNotify","isChatMessageExists","insertEventChatMessage","s9e","TextFormatter","preview","each","getBy","render","executeScriptsTimeout","executedScripts","scriptURL","scriptTag","head","appendChild","eventName","postChatMessage","notifyTry","messageIsMention","notifySend","notifySound","silent","sound","currentTime","play","$item","addClass","one","removeClass","params","draft","initChatStorage","getChatStorageValue","chatStorage","parsedData","cachedState","messageEdit","messageResend","insertMention","getChatInput","loadingSend","messagePost","inputClear","instance","inputElement","focus","redrawTimeout","timeout","callback"],"mappings":"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AI,CAACF,aAAL,EAAoB;AAChBA,iBAAa,GAAGxO,UAAU,CAAC,YAAM;AAC7BlX,OAAC,CAACC,MAAF;AACA,UAAI2lB,QAAJ,EAAcA,QAAQ;AACtBF,mBAAa,GAAG,IAAhB;AACH,KAJyB,EAIvBC,OAJuB,CAA1B;AAKH;AACJ,C;;;;;;;;;;;ACVD,mD;;;;;;;;;;;ACAA,iD;;;;;;;;;;;ACAA,6C;;;;;;;;;;;ACAA,8D;;;;;;;;;;;ACAA,yD;;;;;;;;;;;ACAA,2D;;;;;;;;;;;ACAA,4D;;;;;;;;;;;ACAA,uD;;;;;;;;;;;ACAA,6D;;;;;;;;;;;ACAA,mE;;;;;;;;;;;ACAA,wD;;;;;;;;;;;ACAA,yD;;;;;;;;;;;ACAA,4D;;;;;;;;;;;ACAA,8C;;;;;;;;;;;ACAA,sD;;;;;;;;;;;ACAA,wD;;;;;;;;;;;ACAA,yD;;;;;;;;;;;ACAA,oD;;;;;;;;;;;ACAA,yD;;;;;;;;;;;ACAA,wD;;;;;;;;;;;ACAA,oD;;;;;;;;;;;ACAA,mD;;;;;;;;;;;ACAA,sD;;;;;;;;;;;ACAA,oD;;;;;;;;;;;ACAA,6D;;;;;;;;;;;ACAA,uD;;;;;;;;;;;ACAA,sD;;;;;;;;;;;ACAA,yD;;;;;;;;;;;ACAA,uD;;;;;;;;;;;ACAA,8D","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./forum.js\");\n","export * from './src/forum';\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import { extend } from 'flarum/extend';\nimport IndexPage from 'flarum/components/IndexPage';\nimport LinkButton from 'flarum/components/LinkButton';\nimport ChatPage from './components/ChatPage';\n\nexport default function addChatPage() {\n app.routes.chat = { path: '/chat', component: ChatPage };\n\n extend(IndexPage.prototype, 'navItems', function (items) {\n if (app.screen() !== 'phone') return;\n\n items.add(\n 'chat',\n \n {app.translator.trans('xelson-chat.forum.index.chat_link')}\n ,\n -10\n );\n });\n}\n","import Component from 'flarum/Component';\nimport classList from 'flarum/utils/classList';\n\nexport default class ChatAvatar extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n }\n\n componentAvatarPM() {\n return (\n \n {this.model.icon() ? (\n \n ) : this.model.avatarUrl() ? null : (\n this.firstLetter(this.model.title()).toUpperCase()\n )}\n \n );\n }\n\n componentAvatarChannel() {\n return (\n
\n {this.model.icon() ? (\n \n ) : this.model.avatarUrl() ? null : (\n this.firstLetter(this.model.title()).toUpperCase()\n )}\n
\n );\n }\n\n view(vnode) {\n return this.model.type() == 1 ? this.componentAvatarChannel() : this.componentAvatarPM();\n }\n\n firstLetter(string) {\n for (let i = 0; i < string.length; i++) {\n if (this.isLetter(string[i])) return string[i];\n }\n return string[0];\n }\n\n isLetter(c) {\n return c.toLowerCase() != c.toUpperCase();\n }\n}\n","import Button from 'flarum/components/Button';\nimport classList from 'flarum/utils/classList';\n\nimport ChatSearchUser from './ChatSearchUser';\nimport ChatModal from './ChatModal';\nimport Stream from 'flarum/utils/Stream';\n\nexport default class ChatCreateModal extends ChatModal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.isChannel = false;\n }\n\n title() {\n return app.translator.trans('xelson-chat.forum.chat.list.add_modal.title');\n }\n\n onsubmit() {\n app.store\n .createRecord('chats')\n .save({\n title: this.getInput().title(),\n isChannel: this.isChannel,\n icon: this.getInput().icon(),\n color: this.getInput().color(),\n relationships: { users: [...this.getSelectedUsers(), app.session.user] },\n })\n .then((model) => {\n app.chat.addChat(model);\n app.chat.onChatChanged(model);\n m.redraw();\n });\n this.hide();\n }\n\n componentFormInputColor() {\n return this.componentFormColor({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.validator'),\n stream: this.getInput().color,\n placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.label'),\n });\n }\n\n componentFormInputIcon() {\n return this.componentFormIcon({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.icon.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.icon.validator', {\n a: ,\n }),\n stream: this.getInput().icon,\n placeholder: 'fas fa-bolt',\n });\n }\n\n componentFormChat() {\n return [\n this.usersSelected.length > 1\n ? [\n this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.chat'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.validator'),\n stream: this.getInput().title,\n placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.chat'),\n }),\n this.componentFormInputColor(),\n this.componentFormInputIcon(),\n ]\n : null,\n this.componentFormUsersSelect(),\n ];\n }\n\n componentFormChannel() {\n return [\n this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.channel'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.validator'),\n stream: this.getInput().title,\n placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.channel'),\n }),\n this.componentFormInputColor(),\n this.componentFormInputIcon(),\n ];\n }\n\n isCanCreateChat() {\n if (this.getSelectedUsers().length > 1 && !this.getInput().title().length) return false;\n if (!this.getSelectedUsers().length) return false;\n if (this.alertText()) return false;\n\n return true;\n }\n\n isCanCreateChannel() {\n return this.getInput().title().length;\n }\n\n content() {\n return (\n
\n
\n {app.chat.getPermissions().create.channel ? (\n
\n (this.isChannel = false)).bind(this)}\n >\n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.chat')}\n
\n (this.isChannel = true)).bind(this)}\n >\n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.channel')}\n
\n
\n ) : null}\n {this.isChannel ? this.componentFormChannel() : this.componentFormChat()}\n
\n \n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.create.' + (this.isChannel ? 'channel' : 'chat'))}\n \n \n \n );\n }\n}\n","import Button from 'flarum/components/Button';\nimport Dropdown from 'flarum/components/Dropdown';\nimport classList from 'flarum/utils/classList';\nimport Model from 'flarum/Model';\nimport Group from 'flarum/models/Group';\n\nimport ChatModal from './ChatModal';\nimport Stream from 'flarum/utils/Stream';\n\nexport default class ChatEditModal extends ChatModal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.getInput().title = Stream(this.model.title());\n this.getInput().color = Stream(this.model.color());\n this.getInput().icon = Stream(this.model.icon());\n\n this.deleteChatTitleInput = Stream('');\n this.deleteState = 0;\n\n this.initialUsers = this.model.users().filter((mdl) => !mdl.chat_pivot(this.model.id()).removed_at());\n this.setSelectedUsers(this.model.users().filter((mdl) => !mdl.chat_pivot(this.model.id()).removed_at()));\n this.edited = {};\n\n this.isLocalModerator = this.isModer(app.session.user);\n this.isLocalLeaved = !this.initialUsers.includes(app.session.user);\n }\n\n title() {\n return app.translator.trans('xelson-chat.forum.chat.edit_modal.title');\n }\n\n onsubmit() {\n let added = this.getSelectedUsers()\n .map((mdl) => (!this.initialUsers.includes(mdl) ? Model.getIdentifier(mdl) : null))\n .filter((e) => e);\n let removed = this.initialUsers.map((mdl) => (!this.getSelectedUsers().includes(mdl) ? Model.getIdentifier(mdl) : null)).filter((e) => e);\n let edited = Object.keys(this.edited).map((k) => (this.edited[k] = { id: k, ...this.edited[k] }));\n\n this.model.save({\n title: this.getInput().title(),\n color: this.getInput().color(),\n icon: this.getInput().icon(),\n users: { added, removed, edited },\n relationships: { users: this.getSelectedUsers() },\n });\n\n this.hide();\n }\n\n alertText() {\n return null;\n }\n\n isModer(user) {\n if (!user) return false;\n if (this.edited[user.id()]?.role ?? user.chat_pivot(this.model.id()).role()) return true;\n if (this.isCreator(user)) return true;\n\n return false;\n }\n\n isCreator(user) {\n return (\n user.chat_pivot(this.model.id()).role() == 2 ||\n (!this.model.creator() && user.groups() && user.groups().some((g) => g.id() == Group.ADMINISTRATOR_ID))\n );\n }\n\n userMentionClassname(user) {\n return classList({ editable: true, moder: this.isModer(user), creator: this.isCreator(user) });\n }\n\n userMentionDropdownOnclick(user, button) {\n switch (button) {\n case 'moder': {\n if (this.isModer(user)) this.edited[user.id()] = { role: 0 };\n else this.edited[user.id()] = { role: 1 };\n\n break;\n }\n case 'kick': {\n this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(user), 1);\n break;\n }\n }\n }\n\n componentUserMentionDropdown(user) {\n return (\n \n \n {app.translator.trans('xelson-chat.forum.chat.moder')}\n \n = this.isLocalModerator && user != app.session.user}\n >\n {app.translator.trans(`xelson-chat.forum.chat.${user == app.session.user ? 'leave' : 'kick'}`)}\n \n \n );\n }\n\n userMentionContent(user) {\n return ['@' + user.displayName(), this.isLocalModerator && !app.chat.isChatPM(this.model) ? this.componentUserMentionDropdown(user) : null];\n }\n\n userMentionOnClick(user, e) {\n this.$(e.target).find('.Dropdown').trigger('shown.bs.dropdown');\n }\n\n componentFormInputIcon() {\n return this.componentFormIcon({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.icon.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.icon.validator', {\n a:
,\n }),\n stream: this.getInput().icon,\n placeholder: 'fas fa-bolt',\n });\n }\n\n componentFormInputTitle() {\n return this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.validator'),\n stream: this.getInput().title,\n placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.label'),\n });\n }\n\n componentFormInputColor() {\n return this.componentFormColor({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.validator'),\n stream: this.getInput().color,\n placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.label'),\n });\n }\n\n componentChatInfo() {\n return [\n ,\n this.componentUsersMentions(),\n ];\n }\n\n componentFormPM() {\n return this.componentChatInfo();\n }\n\n componentFormChannel() {\n return this.isLocalModerator\n ? [\n this.componentFormInputTitle(),\n this.componentFormInputColor(),\n this.componentFormInputIcon(),\n this.componentFormUsersSelect('xelson-chat.forum.chat.edit_modal.form.users.edit'),\n ]\n : this.componentChatInfo();\n }\n\n componentFormChat() {\n return this.isLocalModerator\n ? [this.componentFormInputTitle(), this.componentFormInputColor(), this.componentFormInputIcon(), this.componentFormUsersSelect()]\n : this.componentChatInfo();\n }\n\n componentForm() {\n if (this.model.type()) return this.componentFormChannel();\n if (app.chat.isChatPM(this.model)) return this.componentFormPM();\n\n return this.componentFormChat();\n }\n\n componentFormButtons() {\n let buttons = [];\n\n if (this.isLocalModerator && !app.chat.isChatPM(this.model))\n buttons.push(\n \n {app.translator.trans('xelson-chat.forum.chat.edit_modal.save_button')}\n \n );\n\n buttons.push(\n \n {app.translator.trans(`xelson-chat.forum.chat.edit_modal.form.${this.isLocalLeaved ? 'return' : 'leave'}`)}\n \n );\n\n if (!app.chat.isChatPM(this.model) && app.chat.getPermissions().create.channel) buttons.push(this.componentDeleteChat());\n\n return buttons;\n }\n\n onleave() {\n if (!this.isLocalLeaved) {\n this.model\n .save({\n users: { removed: [Model.getIdentifier(app.session.user)] },\n relationships: { users: this.getSelectedUsers() },\n })\n .then((e) => m.redraw());\n } else {\n this.getSelectedUsers().push(app.session.user);\n\n this.model\n .save({\n users: { added: [Model.getIdentifier(app.session.user)] },\n relationships: { users: this.getSelectedUsers() },\n })\n .then((e) => m.redraw());\n }\n\n this.hide();\n }\n\n isCanEditChannel() {\n return this.getInput().title().length;\n }\n\n isCanEditChat() {\n if (this.alertText()) return false;\n\n return true;\n }\n\n componentDeleteChat() {\n return [\n this.deleteState == 1\n ? [\n

,\n this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.title'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.desc'),\n placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.placeholder'),\n stream: this.deleteChatTitleInput,\n }),\n ]\n : null,\n \n {app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.button')}\n ,\n ];\n }\n\n isValidTitleCopy() {\n return this.deleteChatTitleInput() == this.model.title();\n }\n\n ondelete() {\n switch (this.deleteState) {\n case 0: {\n this.deleteState = 1;\n break;\n }\n case 1: {\n if (this.isValidTitleCopy()) {\n app.chat.deleteChat(this.model);\n this.model.delete();\n\n this.hide();\n }\n break;\n }\n }\n }\n\n content() {\n return (\n
\n
\n {this.componentForm()}\n
\n {this.componentFormButtons()}\n
\n
\n );\n }\n}\n","import ChatMessage from './ChatMessage';\nimport Link from 'flarum/components/Link';\nimport extractText from 'flarum/utils/extractText';\nimport humanTime from 'flarum/utils/humanTime';\nimport fullTime from 'flarum/helpers/fullTime';\n\nexport default class ChatEventMessage extends ChatMessage {\n oninit(vnode) {\n super.oninit(vnode);\n\n if (\n this.model\n .message()\n .split('')\n .every((c) => c === '*')\n )\n this.parsedContent = { id: 'chatCensored' };\n else this.parsedContent = JSON.parse(this.model.message());\n }\n\n componentUserMention(user) {\n return (\n \n {user.displayName()}\n \n );\n }\n\n componentUserMentionsByIds(ids) {\n return ids.map((id) => this.componentUserMention(app.store.getById('users', id)));\n }\n\n componentEventText() {\n switch (this.parsedContent.id) {\n case 'chatCensored': {\n return (\n
\n {this.model.message()}\n
\n );\n }\n case 'chatCreated': {\n if (!this.model.chat()) return;\n\n if (this.model.chat().type() == 1) {\n return app.translator.trans(`xelson-chat.forum.chat.message.events.channel.created`, {\n creatorname: this.componentUserMention(this.model.user()),\n chatname: {this.model.chat().title()},\n });\n } else {\n if (this.model.chat().type() == 0 && this.model.chat().users().length <= 2) {\n return app.translator.trans(`xelson-chat.forum.chat.message.events.pm.created`, {\n creatorname: this.componentUserMention(this.model.chat().creator()),\n username: this.parsedContent.users.length\n ? this.componentUserMention(app.store.getById('users', this.parsedContent.users[0]))\n : null,\n });\n }\n\n return app.translator.trans(`xelson-chat.forum.chat.message.events.chat.created`, {\n creatorname: this.componentUserMention(this.model.user()),\n chatname: {this.model.chat().title()},\n usernames: this.componentUserMentionsByIds(this.parsedContent.users),\n username: this.parsedContent.users.length\n ? this.componentUserMention(app.store.getById('users', this.parsedContent.users[0]))\n : null,\n });\n }\n }\n case 'chatEdited': {\n let componentOld, componentNew;\n switch (this.parsedContent.column) {\n case 'title':\n componentOld = {this.parsedContent.old};\n componentNew = {this.parsedContent.new};\n break;\n\n case 'color':\n componentOld = ;\n componentNew = ;\n break;\n\n case 'icon':\n componentOld = this.parsedContent.old ? : [nothing];\n componentNew = ;\n break;\n }\n\n return app.translator.trans(`xelson-chat.forum.chat.message.events.${this.parsedContent.column}.edited`, {\n editorname: this.componentUserMention(this.model.user()),\n old: componentOld,\n new: componentNew,\n });\n }\n case 'chatAddRemoveUser': {\n if (this.parsedContent.add.length && this.parsedContent.remove.length) {\n return app.translator.trans('xelson-chat.forum.chat.message.events.users.invited_kicked', {\n editorname: this.componentUserMention(this.model.user()),\n invitednames: this.componentUserMentionsByIds(this.parsedContent.add),\n kickednames: this.componentUserMentionsByIds(this.parsedContent.remove),\n });\n } else if (this.parsedContent.add.length) {\n if (this.parsedContent.add[0] == this.model.user().id()) {\n return app.translator.trans('xelson-chat.forum.chat.message.events.self.entered', {\n username: this.componentUserMention(this.model.user()),\n });\n } else {\n return app.translator.trans('xelson-chat.forum.chat.message.events.users.invited', {\n editorname: this.componentUserMention(this.model.user()),\n usernames: this.componentUserMentionsByIds(this.parsedContent.add),\n });\n }\n } else if (this.parsedContent.remove.length) {\n if (this.parsedContent.remove[0] == this.model.user().id()) {\n return app.translator.trans('xelson-chat.forum.chat.message.events.self.leaved', {\n username: this.componentUserMention(this.model.user()),\n });\n } else {\n return app.translator.trans('xelson-chat.forum.chat.message.events.users.kicked', {\n editorname: this.componentUserMention(this.model.user()),\n usernames: this.componentUserMentionsByIds(this.parsedContent.remove),\n });\n }\n }\n }\n }\n }\n\n content() {\n return (\n
\n );\n }\n}\n","import Component from 'flarum/Component';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport ChatHeader from './ChatHeader';\nimport ChatList from './ChatList';\nimport ChatPage from './ChatPage';\nimport ChatViewport from './ChatViewport';\n\nexport default class ChatFrame extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n document.addEventListener('mousedown', this.chatMoveListener.bind(this, 'mousedown'));\n document.addEventListener('mouseup', this.chatMoveListener.bind(this, 'mouseup'));\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n calcHeight() {\n if (!app.chat.getFrameState('beingShown')) {\n return '30px';\n } else if (app.screen() !== 'phone') {\n return app.chat.getFrameState('transform').y + 'px';\n } else {\n return '70vh';\n }\n }\n\n view(vnode) {\n if (app.current.matches(ChatPage)) return;\n\n const style = { right: app.chat.getFrameState('transform').x + 'px', height: this.calcHeight() };\n\n return (\n
\n
\n \n\n
\n false} onmousedown={this.chatHeaderOnMouseDown.bind(this)} inFrame={true}>\n {app.chat.chatsLoading ? (\n \n ) : (\n \n )}\n
\n
\n
\n );\n }\n\n chatHeaderOnMouseDown(e) {\n if (e.button !== 0) return;\n\n var path = e.path || (e.composedPath && e.composedPath());\n if (path) {\n for (let i = 0, el; i < path.length; i++) {\n el = path[i];\n if (el.classList && el.classList.contains('icon')) return;\n }\n }\n\n if (!this.chatMoveStart(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n chatMoveListener(event, e) {\n switch (event) {\n case 'mouseup': {\n if (this.chatMoving) this.chatMoveEnd(e);\n break;\n }\n }\n }\n\n chatMoveStart(e) {\n if (!app.chat.getFrameState('beingShown')) return;\n this.chatMoving = true;\n this.mouseMoveEvent = this.chatMoveProcess.bind(this);\n this.moveLast = { x: e.clientX, y: e.clientY };\n\n document.addEventListener('mousemove', this.mouseMoveEvent);\n document.body.classList.add('moving');\n\n return false;\n }\n\n chatMoveEnd(e) {\n this.chatMoving = false;\n document.removeEventListener('mousemove', this.mouseMoveEvent);\n document.body.classList.remove('moving');\n\n if (!app.current.matches(ChatPage)) {\n app.chat.saveFrameState('transform', { x: parseInt(this.element.style.right), y: this.element.offsetHeight || 400 });\n }\n }\n\n chatMoveProcess(e) {\n let move = { x: e.clientX - this.moveLast.x, y: e.clientY - this.moveLast.y };\n let right = parseInt(this.element.style.right) || 0;\n let nextPos = { x: right - move.x, y: this.element.offsetHeight - move.y };\n\n if ((nextPos.x < window.innerWidth - this.element.querySelector('#chat').offsetWidth && move.x < 0) || (nextPos.x > 0 && move.x > 0))\n this.element.style.right = nextPos.x + 'px';\n\n if (this.element.querySelector('.ChatHeader').clientHeight < nextPos.y && nextPos.y < window.innerHeight - 100) {\n this.element.style.height = nextPos.y + 'px';\n }\n\n this.moveLast = { x: e.clientX, y: e.clientY };\n }\n}\n","import Component from 'flarum/Component';\nimport Link from 'flarum/components/Link';\nimport ItemList from 'flarum/utils/ItemList';\n\nimport ChatEditModal from './ChatEditModal';\n\nexport default class ChatHeader extends Component {\n view(vnode) {\n const attrs = {};\n\n if (this.attrs.ondragstart) attrs.ondragstart = this.attrs.ondragstart;\n if (this.attrs.ondragstart) attrs.onmousedown = this.attrs.onmousedown;\n\n return (\n
\n {this.attrs.showChatListStream ? (\n {\n this.attrs.showChatListStream(!this.attrs.showChatListStream());\n e.stopPropagation();\n }}\n >\n \n
\n ) : (\n ''\n )}\n

\n {app.chat.getCurrentChat()\n ? [\n app.chat.getCurrentChat().icon() ? (\n \n ) : null,\n app.chat.getCurrentChat().title(),\n ]\n : app.translator.trans('xelson-chat.forum.toolbar.title')}\n

\n {!app.chat.getCurrentChat() || !app.session.user ? null : (\n app.modal.show(ChatEditModal, { model: app.chat.getCurrentChat() })}\n >\n \n \n )}\n
{this.windowButtonItems().toArray()}
\n \n );\n }\n\n windowButtonItems() {\n const items = new ItemList();\n\n items.add(\n 'sound',\n \n \n \n );\n\n items.add(\n 'notifications',\n \n \n \n );\n\n if (this.attrs.inFrame) {\n items.add(\n 'minimize',\n \n \n \n );\n }\n\n /*\n if (this.attrs.inFrame && app.screen() === 'phone') {\n items.add(\n 'fullscreen',\n \n \n \n );\n }\n */\n\n return items;\n }\n\n toggleChat(e) {\n const showing = !app.chat.getFrameState('beingShown');\n\n app.chat.saveFrameState('beingShown', showing);\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n toggleSound(e) {\n app.chat.saveFrameState('isMuted', !app.chat.getFrameState('isMuted'));\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n toggleNotifications(e) {\n app.chat.saveFrameState('notify', !app.chat.getFrameState('notify'));\n if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission();\n\n e.preventDefault();\n e.stopPropagation();\n }\n}\n","import Component from 'flarum/Component';\nimport Button from 'flarum/components/Button';\nimport ChatEditModal from './ChatEditModal';\nimport {throttle} from 'flarum/utils/throttleDebounce';\n\nexport default class ChatInput extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n this.state = this.attrs.state;\n\n app.chat.input = this;\n\n this.messageCharLimit = app.forum.attribute('xelson-chat.settings.charlimit') ?? 512;\n\n this.updatePlaceholder();\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n let inputState = this.state.input;\n let input = this.$('#chat-input')[0];\n input.lineHeight = parseInt(window.getComputedStyle(input).getPropertyValue('line-height'));\n inputState.element = input;\n\n if(inputState.content().length) {\n this.inputProcess({target: input});\n }\n\n this.updateLimit();\n }\n\n onbeforeupdate(vnode, old) {\n super.onbeforeupdate(vnode, old);\n\n if (this.model !== this.attrs.model) {\n this.model = this.attrs.model;\n this.state = this.attrs.state;\n }\n this.updatePlaceholder();\n }\n\n updatePlaceholder() {\n if (!app.session.user) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.unauthenticated');\n else if (!app.chat.getPermissions().post) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.chatdenied');\n else if (this.model.removed_at()) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.removed');\n else this.inputPlaceholder = app.translator.trans('xelson-chat.forum.chat.placeholder');\n }\n\n view() {\n return (\n
\n this.saveDraft.apply(this)}\n />\n {this.state.messageEditing ? (\n
\n \n
\n ) : null}\n {this.model.removed_at() && this.model.removed_by() === parseInt(app.session.user.id()) ? (\n \n ) : (\n [\n
\n \n
,\n
,\n ]\n )}\n
\n );\n }\n\n updateLimit() {\n const limiter = this.element.querySelector('#chat-limiter');\n if (!limiter) return;\n\n let charsTyped = this.messageCharLimit - (this.state.input.messageLength || 0);\n limiter.innerText = charsTyped + '/' + this.messageCharLimit;\n limiter.className = charsTyped < 100 ? 'reaching-limit' : '';\n }\n\n saveDraft(text = this.state.input.content())\n {\n (this.state.input.lastDraft != text) && throttle(300, () => {\n this.state.setChatStorageValue('draft', text);\n })();\n this.state.input.lastDraft = text;\n }\n\n inputSaveDraft(e) {\n if (e) e.redraw = false;\n\n let input = e.target;\n this.saveDraft(input.value.trim());\n }\n\n resizeInput()\n {\n let input = this.state.input.element;\n\n input.rows = 1;\n this.state.input.rows = Math.min(input.scrollHeight / input.lineHeight, app.screen() === 'phone' ? 2 : 5);\n input.rows = this.state.input.rows;\n }\n\n inputProcess(e) {\n if (e) e.redraw = false;\n\n let input = e.target;\n this.state.input.content(input.value);\n let inputValue = input.value.trim();\n this.state.input.messageLength = inputValue.length;\n this.updateLimit();\n\n this.resizeInput();\n\n if (this.state.input.messageLength) {\n if (!this.state.input.writingPreview && !this.state.messageEditing) this.inputPreviewStart(inputValue);\n } else {\n if (this.state.input.writingPreview && !inputValue.length) this.inputPreviewEnd();\n }\n\n if (this.state.messageEditing) this.state.messageEditing.content = inputValue;\n else if (this.state.input.writingPreview) this.state.input.previewModel.content = inputValue;\n\n if (this.attrs.oninput) this.attrs.oninput(e);\n }\n\n inputPressEnter(e) {\n e.redraw = false;\n if (e.keyCode == 13 && !e.shiftKey) {\n this.state.messageSend();\n return false;\n }\n return true;\n }\n\n inputPressButton() {\n this.state.messageSend();\n }\n\n inputPreviewStart(content) {\n if (!this.state.input.writingPreview) {\n this.state.input.writingPreview = true;\n\n this.state.input.previewModel = app.store.createRecord('chatmessages');\n this.state.input.previewModel.pushData({\n id: 0,\n attributes: { message: ' ', created_at: 0 },\n relationships: { user: app.session.user, chat: this.model },\n });\n Object.assign(this.state.input.previewModel, { isEditing: true, isNeedToFlash: true, content });\n } else this.state.input.previewModel.isNeedToFlash = true;\n\n m.redraw();\n }\n\n inputPreviewEnd() {\n this.state.input.writingPreview = false;\n\n m.redraw();\n }\n}\n","import Component from 'flarum/Component';\nimport ChatCreateModal from './ChatCreateModal';\nimport ChatPreview from './ChatPreview';\n\nexport default class ChatFrame extends Component {\n view(vnode) {\n const classes = ['ChatList'];\n if (app.chat.getFrameState('beingShownChatsList') || this.attrs.inPage) classes.push('toggled');\n return (\n
\n
\n
\n \n
\n {this.attrs.inPage ? (\n ''\n ) : (\n \n \n
\n )}\n
\n
\n {app.chat.getChatsSortedByLastUpdate().map((model) => (\n
\n \n
\n ))}\n {app.session.user && app.chat.getPermissions().create.chat ? (\n
app.modal.show(ChatCreateModal)}>
\n ) : null}\n
\n \n );\n }\n\n content() {\n return app.chat.getChatsSortedByLastUpdate().map((model) => (\n
\n \n
\n ));\n }\n\n getChatsListPanel() {\n return document.querySelector('.ChatList');\n }\n\n getChatsList() {\n return document.querySelector('.ChatList .list');\n }\n\n toggleChatsList(e) {\n var chatLists = this.getChatsListPanel();\n var showing = true;\n\n if (chatLists.classList.contains('toggled')) {\n chatLists.classList.remove('toggled');\n showing = false;\n } else chatLists.classList.add('toggled');\n\n app.chat.saveFrameState('beingShownChatsList', showing);\n }\n}\n","import Component from 'flarum/Component';\nimport avatar from 'flarum/helpers/avatar';\nimport username from 'flarum/helpers/username';\nimport fullTime from 'flarum/helpers/fullTime';\nimport classList from 'flarum/utils/classList';\nimport humanTime from 'flarum/utils/humanTime';\nimport extractText from 'flarum/utils/extractText';\nimport ItemList from 'flarum/utils/ItemList';\nimport SubtreeRetainer from 'flarum/utils/SubtreeRetainer';\n\nimport Dropdown from 'flarum/components/Dropdown';\nimport Button from 'flarum/components/Button';\nimport Separator from 'flarum/components/Separator';\nimport Link from 'flarum/components/Link';\n\nexport default class ChatMessage extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.labels = [];\n this.model = this.attrs.model;\n if (!this.model.content) this.model.content = this.model.message();\n\n this.initLabels();\n\n this.subtree = new SubtreeRetainer(\n () => this.model.freshness,\n () => this.model.user().freshness,\n () => app.chat.getCurrentChat(),\n\n // Reactive attrs\n () => this.model.content,\n () => this.model.isDeletedForever,\n () => this.model.isTimedOut,\n () => this.model.isEditing,\n () => this.model.isNeedToFlash\n );\n }\n\n modelEvent(name) {\n const viewportState = app.chat.getViewportState(this.model.chat());\n viewportState.onChatMessageClicked(name, this.model);\n app.chat.onChatMessageClicked(name, this.model);\n }\n\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n this.model = this.attrs.model;\n\n return this.subtree.needsRebuild();\n }\n\n content() {\n return (\n
\n {this.model.user() ? (\n \n {avatar(this.model.user(), { className: 'avatar' })}\n \n ) : (\n
\n {avatar(this.model.user(), { className: 'avatar' })}\n
\n )}\n
\n
\n \n {extractText(username(this.model.user())) + ': '}\n \n
{this.labels.map((label) => (label.condition() ? label.component() : null))}
\n
\n {this.model.id()\n ? [\n this.model.isDeletedForever ? null : this.editDropDown(),\n \n {(this.humanTime = humanTime(this.model.created_at()))}\n ,\n ]\n : this.model.isTimedOut\n ? this.editDropDownTimedOut()\n : null}\n
\n
\n
\n {this.model.is_censored() ? (\n
\n {this.model.content}\n
\n ) : (\n \n {this.model.content}\n
\n )}\n
\n
\n \n );\n }\n\n view(vnode) {\n return (\n \n {this.model ? this.content() : null}\n \n );\n }\n\n initLabels() {\n this.labelBind(\n () => this.model.edited_at(),\n () => (\n \n \n \n )\n );\n\n this.labelBind(\n () => this.model.deleted_by(),\n () => (\n
\n {' '}\n \n {`(${app.translator.trans('xelson-chat.forum.chat.message.deleted' + (this.model.isDeletedForever ? '_forever' : ''))}`}{' '}\n {username(this.model.deleted_by())}\n {')'}\n \n
\n )\n );\n\n this.labelBind(\n () => this.model.isTimedOut,\n () => (\n
\n \n
\n )\n );\n }\n\n labelBind(condition, component) {\n this.labels.push({ condition: condition, component: component });\n }\n\n editDropDown() {\n const items = new ItemList();\n\n if (app.chat.getPermissions().edit && this.model.user() && this.model.user() == app.session.user) {\n items.add(\n 'dropdownEditStart',\n \n {app.translator.trans('core.forum.post_controls.edit_button')}\n \n );\n }\n\n items.add('separator', );\n\n if (this.model.chat().role() || (app.chat.getPermissions().delete && this.model.user() == app.session.user)) {\n if (this.model.deleted_by()) {\n items.add(\n 'dropdownRestore',\n \n {app.translator.trans('core.forum.post_controls.restore_button')}\n \n );\n } else {\n items.add(\n 'dropdownHide',\n \n );\n }\n }\n\n if (this.model.chat().role() && (this.model.deleted_by() || app.chat.totalHidden() >= 3)) {\n items.add(\n 'dropdownDelete',\n \n );\n }\n\n return Object.keys(items.items).length <= 1 ? null : (\n
\n \n {items.toArray()}\n \n
\n );\n }\n\n editDropDownTimedOut() {\n return (\n
\n \n \n \n \n
\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n this.messageWrapper = vnode.dom;\n\n this.pollInterval = setInterval(() => {\n this.renderMessage();\n }, 100);\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n clearInterval(this.pollInterval);\n }\n\n onContentWrapperUpdated(vnode) {\n super.onupdate(vnode);\n this.renderMessage(vnode.dom);\n }\n\n onContentWrapperCreated(vnode) {\n super.oncreate(vnode);\n this.renderMessage(vnode.dom);\n }\n\n renderMessage() {\n if (this.model.isNeedToFlash) {\n app.chat.flashItem($(this.messageWrapper));\n this.model.isNeedToFlash = false;\n }\n\n if (this.model.content !== this.oldContent) {\n this.oldContent = this.model.content;\n app.chat.renderChatMessage(this.model, this.model.content);\n }\n }\n\n isVisible() {\n if (this.model.chat() != app.chat.getCurrentChat()) return false;\n\n if (this.model.isDeletedForever) return false;\n\n if (this.model.deleted_by() && !(this.model.chat().role() || this.model.user() == app.session.user)) return false;\n\n return true;\n }\n}\n","import Modal from 'flarum/components/Modal';\nimport ChatSearchUser from './ChatSearchUser';\nimport Stream from 'flarum/utils/Stream';\nimport classList from 'flarum/utils/classList';\nimport { fa5IconsList } from '../resources';\nimport highlight from 'flarum/helpers/highlight';\n\nexport default class ChatModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n\n app.search.neonchat = { usersSelected: [] };\n this.usersSelected = app.search.neonchat.usersSelected;\n\n this.input = {\n title: Stream(''),\n color: Stream(''),\n icon: Stream(''),\n iconState: {\n matches: [],\n lastInput: null,\n },\n };\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n app.search.neonchat = null;\n }\n\n getInput() {\n return this.input;\n }\n\n setSelectedUsers(users) {\n app.search.neonchat.usersSelected = users;\n this.usersSelected = app.search.neonchat.usersSelected;\n }\n\n getSelectedUsers() {\n return this.usersSelected;\n }\n\n className() {\n return 'ChatModal Modal--small';\n }\n\n isChatExists() {\n return this.getSelectedUsers().length === 1 && app.chat.isExistsPMChat(app.session.user, this.getSelectedUsers()[0]);\n }\n\n alertText() {\n if (this.isChatExists()) return app.translator.trans('xelson-chat.forum.chat.list.add_modal.alerts.exists');\n\n return null;\n }\n\n componentAlert() {\n return !this.alertText() ? null :
{this.alertText()}
;\n }\n\n componentFormUsersSelect(label = 'xelson-chat.forum.chat.list.add_modal.form.users') {\n return [, this.componentUsersSelect()];\n }\n\n userMentionContent(user) {\n return '@' + user.displayName();\n }\n\n userMentionClassname(user) {\n return 'deletable';\n }\n\n userMentionOnClick(event, user) {\n return this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(user), 1);\n }\n\n componentUsersMentions() {\n return (\n
\n {this.getSelectedUsers().map((u) => (\n
\n {this.userMentionContent(u)}\n
\n ))}\n
\n );\n }\n\n componentUsersSelect() {\n return [\n this.componentAlert(),\n this.componentUsersMentions(),\n
\n \n
,\n ];\n }\n\n componentFormIcon(options) {\n return [\n options.title ? : null,\n
\n {options.desc ? : null}\n
\n (this.inputIconHasFocus = true)}\n onclick={() => (this.inputIconHasFocus = true)}\n onkeypress={(e) => (this.inputIconHasFocus = !(e.keyCode == 13))}\n />\n \n \n \n {this.inputIconHasFocus ? this.dropdownIconMatches(this.input.icon()) : null}\n
\n
,\n ];\n }\n\n componentFormColor(options) {\n return [\n options.title ? : null,\n
\n {options.desc ? : null}\n
\n \n \n
\n
,\n ];\n }\n\n dropdownIconMatches(search) {\n let inputIcon = this.input.icon();\n let iconState = this.input.iconState;\n\n if (inputIcon !== iconState.lastInput) {\n iconState.matches = fa5IconsList.filter((icon) => icon.includes(inputIcon));\n if (iconState.matches.length > 5) iconState.matches = iconState.matches.sort((a, b) => 0.5 - Math.random());\n\n iconState.lastInput = inputIcon;\n }\n\n return inputIcon.length && iconState.matches.length > 0 && !(iconState.matches.length == 1 && iconState.matches[0] === inputIcon) ? (\n
    \n
  • Font Awesome 5
  • \n {iconState.matches.slice(-5).map((icon) => (\n
  • this.input.icon(icon)}>\n \n \n \n {highlight(icon, inputIcon)}\n
  • \n ))}\n
\n ) : null;\n }\n\n formInputOnUpdate(vnode) {\n $('.Chat-FullColor').css({ color: this.input.color(), backgroundColor: this.input.color() });\n }\n\n componentFormInput(options) {\n return [\n options.title ? : null,\n
\n {options.desc ? : null}\n \n
,\n ];\n }\n}\n","import Page from 'flarum/common/components/Page';\nimport IndexPage from 'flarum/components/IndexPage';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport listItems from 'flarum/helpers/listItems';\nimport Stream from 'flarum/utils/Stream';\nimport ChatHeader from './ChatHeader';\nimport ChatList from './ChatList';\nimport ChatViewport from './ChatViewport';\n\nexport default class ChatPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.bodyClass = 'App--chat';\n this.listOpen = Stream(false);\n }\n\n view() {\n const navItems = IndexPage.prototype.sidebarItems();\n\n if (navItems.has('forumStatisticsWidget')) navItems.remove('forumStatisticsWidget');\n\n return (\n
\n \n \n {app.chat.chatsLoading ? : }\n {this.listOpen() ? (\n
\n \n
\n ) : (\n ''\n )}\n
\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.clickHandler = (e) => {\n const chatList = this.$('.ChatList')[0];\n\n if (this.listOpen() && !(chatList && chatList.contains(e.target))) {\n this.listOpen(false);\n m.redraw();\n }\n };\n\n $(window).on('click', this.clickHandler);\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n if (this.listOpen()) {\n this.element.querySelector('.ChatPage--list').style.height =\n document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top + 'px';\n\n console.log(\n this.element.querySelector('.ChatPage--list'),\n this.element.querySelector('.ChatPage--list').style.height,\n document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top\n );\n }\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n $(window).off('click', this.clickHandler);\n }\n}\n","import humanTime from 'flarum/utils/humanTime';\nimport Component from 'flarum/Component';\nimport classList from 'flarum/utils/classList';\nimport extractText from 'flarum/utils/extractText';\nimport SubtreeRetainer from 'flarum/utils/SubtreeRetainer';\n\nimport ChatAvatar from './ChatAvatar';\n\nexport default class ChatPreview extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n\n this.subtree = new SubtreeRetainer(\n () => this.model.freshness,\n () => app.chat.getCurrentChat(),\n\n // Reactive attrs\n () => this.model.isNeedToFlash\n );\n }\n\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n this.model = this.attrs.model;\n\n return this.subtree.needsRebuild();\n }\n\n view(vnode) {\n return (\n
\n
{this.componentPreview()}
\n {this.model.unreaded() ?
{this.model.unreaded()}
: null}\n
\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n if (this.model.isNeedToFlash) {\n app.chat.flashItem($(vnode.dom));\n this.model.isNeedToFlash = false;\n }\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n if (this.model.isNeedToFlash) {\n app.chat.flashItem($(vnode.dom));\n this.model.isNeedToFlash = false;\n }\n }\n\n componentMessageTime() {\n let lastMessage = this.model.last_message();\n let time = new Date(lastMessage.created_at());\n if (Date.now() - time.getTime() < 60 * 60 * 12 * 1000) {\n let nl = (n) => (n < 10 ? '0' : '') + n;\n return nl(time.getHours()) + ':' + nl(time.getMinutes());\n }\n\n return humanTime(lastMessage.created_at());\n }\n\n componentPreview() {\n return [\n ,\n
\n
\n {this.model.icon() ? : null}\n {this.model.title()}\n
\n {this.model.last_message() ? this.componentTextPreview() : this.componentTextEmpty()}\n
,\n this.model.last_message() ? (\n
\n {(this.humanTime = this.componentMessageTime())}\n
\n ) : null,\n ];\n }\n\n componentPreviewChannel() {\n return [\n ,\n
\n
\n {this.model.title()}\n
\n {this.componentTextPreview()}\n
,\n
\n {(this.humanTime = this.componentMessageTime())}\n
,\n ];\n }\n\n formatTextPreview(text) {\n let type;\n if (text.startsWith('```')) {\n text = app.translator.trans('xelson-chat.forum.chat.message.type.code');\n type = 'media';\n } else if (text.startsWith('http://') || text.startsWith('https://')) {\n text = app.translator.trans('xelson-chat.forum.chat.message.type.url');\n type = 'media';\n }\n return { text, type };\n }\n\n componentTextPreview() {\n let lastMessage = this.model.last_message();\n if (lastMessage.type() != 0) {\n return (\n
\n {app.translator.trans('xelson-chat.forum.chat.message.type.event')}\n
\n );\n }\n\n let formatResult = this.formatTextPreview(lastMessage.message());\n let senderName,\n users = this.model.users(),\n sender = lastMessage.user();\n if (app.session.user) {\n if (app.session.user == sender) senderName = `${app.translator.trans('xelson-chat.forum.chat.message.you')}: `;\n else if (users.length > 2 || this.model.type()) senderName = sender.displayName() + ': ';\n }\n\n return (\n \n {senderName}\n {formatResult.text}\n \n );\n }\n\n componentTextEmpty() {\n return (\n
\n {app.translator.trans('xelson-chat.forum.chat.list.preview.empty')}\n
\n );\n }\n}\n","import Search from 'flarum/components/Search';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport ItemList from 'flarum/utils/ItemList';\nimport classList from 'flarum/utils/classList';\nimport icon from 'flarum/helpers/icon';\nimport UsersSearchSource from './UsersSearchResults';\n\nexport default class ChatSearchUser extends Search {\n oninit(vnode) {\n super.oninit(vnode);\n }\n\n sourceItems() {\n const items = new ItemList();\n this.state = this.attrs.state ?? {};\n if (app.forum.attribute('canSearchUsers')) items.add('users', new UsersSearchSource({ state: app.search.neonchat }));\n\n return items;\n }\n\n updateMaxHeight() {}\n\n view(vnode) {\n const currentSearch = this.state.getInitialSearch();\n\n if (!this.state.getValue()?.length) {\n this.state.setValue(currentSearch || '');\n }\n\n app.current.searching = () => this.state.getValue();\n\n if (!this.sources) {\n this.sources = this.sourceItems().toArray();\n }\n\n if (!this.sources.length) return
;\n\n return (\n \n
\n this.state.setValue(e.target.value)}\n onfocus={() => (this.hasFocus = true)}\n />\n {this.loadingSources ? (\n \n ) : currentSearch ? (\n \n ) : (\n ''\n )}\n
\n {this.state.getValue() && this.hasFocus ? (\n
    \n {this.sources.map((source) => source.view(this.state.getValue()))}\n
\n ) : null}\n \n );\n }\n}\n","import Component from 'flarum/Component';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\n\nimport ChatInput from './ChatInput';\nimport ChatMessage from './ChatMessage';\nimport ChatEventMessage from './ChatEventMessage';\nimport ChatWelcome from './ChatWelcome';\nimport Message from '../models/Message';\nimport timedRedraw from '../utils/timedRedraw';\nimport ChatPage from './ChatPage';\n\nexport default class ChatViewport extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.chatModel;\n if (this.model) {\n this.state = app.chat.getViewportState(this.model);\n }\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadChat();\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // this.attrs is broken in onupdate hook\n const model = vnode.attrs.chatModel;\n\n if (model !== this.model) {\n this.model = model;\n if (this.model) {\n this.state = app.chat.getViewportState(this.model);\n this.loadChat();\n }\n }\n }\n\n loadChat() {\n const oldScroll = this.state.scroll.oldScroll;\n\n this.reloadMessages();\n m.redraw();\n\n setTimeout(() => {\n const element = this.element;\n\n this.getChatWrapper().scrollTop = element.scrollHeight - element.clientHeight - oldScroll;\n }, 200);\n }\n\n view(vnode) {\n if (this.model) {\n return (\n
\n \n {this.componentLoader(this.state.scroll.loading)}\n {this.componentsChatMessages(this.model).concat(\n this.state.input.writingPreview ? this.componentChatMessage(this.state.input.previewModel) : []\n )}\n
\n {\n if (this.nearBottom() && !this.state.messageEditing) {\n this.scrollToBottom();\n }\n }}\n >\n {this.isFastScrollAvailable() ? this.componentScroller() : null}\n \n );\n }\n\n return (\n
\n ;\n
\n );\n }\n\n componentChatMessage(model) {\n return model.type() ? : ;\n }\n\n componentsChatMessages(chat) {\n return app.chat.getChatMessages().map((model) => this.componentChatMessage(model));\n }\n\n componentScroller() {\n return (\n
\n \n
\n );\n }\n\n componentLoader(watch) {\n return watch ? (\n \n \n \n ) : null;\n }\n getChatWrapper() {\n return app.screen() === 'phone' && app.current.matches(ChatPage)\n ? document.documentElement\n : document.querySelector('.ChatViewport .wrapper');\n }\n\n isFastScrollAvailable() {\n let chatWrapper = this.getChatWrapper();\n return (\n (this.state.newPushedPosts ||\n this.model.unreaded() >= 30 ||\n (chatWrapper && chatWrapper.scrollHeight > 2000 && chatWrapper.scrollTop < chatWrapper.scrollHeight - 2000)) &&\n !this.nearBottom()\n );\n }\n\n fastScroll(e) {\n if (this.model.unreaded() >= 30) this.fastMessagesFetch(e);\n else {\n let chatWrapper = this.getChatWrapper();\n chatWrapper.scrollTop = Math.max(chatWrapper.scrollTop, chatWrapper.scrollHeight - 3000);\n this.scrollToBottom();\n }\n }\n\n fastMessagesFetch(e) {\n e.redraw = false;\n app.chat.chatmessages = [];\n\n app.chat.apiFetchChatMessages(this.model).then((r) => {\n this.scrollToBottom();\n timedRedraw(300);\n\n this.model.pushAttributes({ unreaded: 0 });\n let message = app.chat.getChatMessages((mdl) => mdl.chat() == this.model).slice(-1)[0];\n app.chat.apiReadChat(this.model, message);\n });\n }\n\n wrapperOnCreate(vnode) {\n super.oncreate(vnode);\n this.wrapperOnUpdate(vnode);\n\n (app.current.matches(ChatPage) ? window : vnode.dom).addEventListener(\n 'scroll',\n (this.boundScrollListener = this.wrapperOnScroll.bind(this)),\n { passive: true }\n );\n }\n\n wrapperOnBeforeUpdate(vnode, vnodeNew) {\n super.onbeforeupdate(vnode, vnodeNew);\n if (!this.state.autoScroll && this.nearBottom() && this.state.newPushedPosts) {\n this.scrollAfterUpdate = true;\n }\n }\n\n wrapperOnUpdate(vnode) {\n super.onupdate(vnode);\n let el = vnode.dom;\n if (this.model && this.state.scroll.autoScroll) {\n if (this.autoScrollTimeout) clearTimeout(this.autoScrollTimeout);\n this.autoScrollTimeout = setTimeout(this.scrollToBottom.bind(this, true), 100);\n }\n if (el.scrollTop <= 0) el.scrollTop = 1;\n this.checkUnreaded();\n\n if (this.scrollAfterUpdate) {\n this.scrollAfterUpdate = false;\n this.scrollToBottom();\n }\n }\n\n wrapperOnRemove(vnode) {\n super.onremove(vnode);\n vnode.dom.removeEventListener('scroll', this.boundScrollListener);\n }\n\n wrapperOnScroll(e) {\n const el = app.current.matches(ChatPage) ? document.documentElement : this.element;\n\n this.state.scroll.oldScroll = el.scrollHeight - el.clientHeight - el.scrollTop;\n\n this.checkUnreaded();\n\n if (this.lastFastScrollStatus != this.isFastScrollAvailable()) {\n this.lastFastScrollStatus = this.isFastScrollAvailable();\n m.redraw();\n }\n\n let currentHeight = el.scrollHeight;\n\n if (this.atBottom()) {\n this.state.newPushedPosts = false;\n }\n\n if (this.state.scroll.autoScroll || this.state.loading || this.scrolling) return;\n\n if (!this.state.messageEditing && el.scrollTop >= 0) {\n if (el.scrollTop <= 500) {\n let topMessage = app.chat.getChatMessages((model) => model.chat() == this.model)[0];\n if (topMessage && topMessage != this.model.first_message()) {\n app.chat.apiFetchChatMessages(this.model, topMessage.created_at().toISOString());\n }\n } else if (el.scrollTop + el.offsetHeight >= currentHeight - 500) {\n let bottomMessage = app.chat.getChatMessages((model) => model.chat() == this.model).slice(-1)[0];\n if (bottomMessage && bottomMessage != this.model.last_message()) {\n app.chat.apiFetchChatMessages(this.model, bottomMessage.created_at().toISOString());\n }\n }\n }\n }\n\n checkUnreaded() {\n let wrapper = this.getChatWrapper();\n if (wrapper && this.model.unreaded()) {\n let list = app.chat.getChatMessages((mdl) => mdl.chat() == this.model && mdl.created_at() >= this.model.readed_at() && !mdl.isReaded);\n\n for (const message of list) {\n let msg = document.querySelector(`.message-wrapper[data-id=\"${message.id()}\"`);\n if (msg && wrapper.scrollTop + wrapper.offsetHeight >= msg.offsetTop) {\n message.isReaded = true;\n\n if (this.state.scroll.autoScroll && app.chat.getCurrentChat() == this.model) {\n app.chat.apiReadChat(this.model, new Date());\n this.model.pushAttributes({ unreaded: 0 });\n } else {\n app.chat.apiReadChat(this.model, message);\n this.model.pushAttributes({ unreaded: this.model.unreaded() - 1 });\n }\n\n m.redraw();\n }\n }\n }\n }\n\n scrollToAnchor(anchor) {\n let element;\n if (anchor instanceof Message) element = $(`.message-wrapper[data-id=\"${anchor.id()}\"`)[0];\n else element = anchor;\n\n let chatWrapper = this.getChatWrapper();\n if (chatWrapper && element)\n $(chatWrapper)\n .stop()\n .animate({ scrollTop: element.offsetTop - element.offsetHeight }, 500);\n else setTimeout(scroll, 100);\n }\n\n scrollToBottom(force = false) {\n this.scrolling = true;\n let chatWrapper = this.getChatWrapper();\n if (chatWrapper) {\n const notAtBottom = !force && this.atBottom();\n const fewMessages =\n app.current.matches(ChatPage) &&\n document.querySelector('.ChatViewport .wrapper').scrollHeight + 200 < document.documentElement.clientHeight;\n if (notAtBottom || fewMessages) return;\n\n const time = this.pixelsFromBottom() < 80 ? 0 : 250;\n\n $(chatWrapper)\n .stop()\n .animate({ scrollTop: chatWrapper.scrollHeight }, time, 'swing', () => {\n this.state.scroll.autoScroll = false;\n this.scrolling = false;\n });\n }\n }\n\n reloadMessages() {\n if (!this.state.messagesFetched) {\n let query;\n if (this.model.unreaded()) {\n query = this.model.readed_at()?.toISOString() ?? new Date(0).toISOString();\n this.state.scroll.autoScroll = false;\n }\n\n app.chat.apiFetchChatMessages(this.model, query).then(() => {\n if (this.model.unreaded()) {\n let anchor = app.chat.getChatMessages((mdl) => mdl.chat() == this.model && mdl.created_at() > this.model.readed_at())[0];\n this.scrollToAnchor(anchor);\n } else this.state.scroll.autoScroll = true;\n\n m.redraw();\n });\n\n this.state.messagesFetched = true;\n }\n }\n\n nearBottom() {\n return this.pixelsFromBottom() <= 500;\n }\n\n atBottom() {\n return this.pixelsFromBottom() <= 5;\n }\n\n pixelsFromBottom() {\n const element = app.current.matches(ChatPage) ? document.documentElement : this.element;\n return Math.abs(element.scrollHeight - element.scrollTop - element.clientHeight);\n }\n}\n","import Component from 'flarum/Component';\n\nexport default class ChatWelcome extends Component {\n view(vnode) {\n return (\n
\n
\n {app.chat.getChats().length ? (\n
\n

{app.translator.trans('xelson-chat.forum.chat.welcome.header')}

\n {app.translator.trans('xelson-chat.forum.chat.welcome.subheader')}\n
\n ) : null}\n
\n
\n );\n }\n}\n","import avatar from 'flarum/helpers/avatar';\nimport username from 'flarum/helpers/username';\nimport highlight from 'flarum/helpers/highlight';\n\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\n\nexport default class UsersSearchResults {\n constructor(props) {\n this.results = {};\n this.searching = false;\n\n if (!props.state.usersSelected) props.state.usersSelected = [];\n this.usersSelected = props.state.usersSelected;\n }\n\n search(query) {\n this.searching = true;\n\n return app.store\n .find('users', {\n filter: { q: query },\n page: { limit: 5 },\n })\n .then((results) => {\n this.results[query] = results;\n this.searching = false;\n m.redraw();\n });\n }\n\n isUserSelected(user) {\n return this.usersSelected.some((u) => user.id() == u.id());\n }\n\n userClick(user) {\n if (!this.isUserSelected(user)) this.usersSelected.push(user);\n else this.usersSelected.splice(this.usersSelected.indexOf(user), 1);\n }\n\n view(query) {\n query = query.toLowerCase();\n\n const usersList = (this.results[query] || [])\n .concat(\n app.store.all('users').filter((user) => [user.username(), user.displayName()].some((value) => value.toLowerCase().includes(query)))\n )\n .filter((user) => user !== app.session.user);\n\n let resultsFind = usersList\n .filter((e, i, arr) => arr.lastIndexOf(e) === i)\n .sort((a, b) => a.displayName().localeCompare(b.displayName()))\n .filter((user) => !this.isUserSelected(user));\n\n let moreText;\n if (resultsFind.length > 5) {\n moreText = (\n
\n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.more_results', { more_results: resultsFind.length - 5 })}\n
\n );\n\n resultsFind = resultsFind.slice(-5);\n }\n\n if (!resultsFind.length) {\n if (!this.searching)\n return
  • {app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.failed')}
  • ;\n else LoadingIndicator.component({ size: 'tiny', className: 'Button Button--icon Button--link' });\n }\n\n const resultsSelected = Object.values(this.usersSelected).slice(-5);\n\n return [\n
  • {app.translator.trans('core.forum.search.users_heading')}
  • ,\n resultsFind.map((user) => {\n const name = username(user);\n const id = user.id();\n const children = [highlight(name.text, query)];\n\n return (\n
  • \n \n {avatar(user)}\n {{ ...name, text: undefined, children }}\n \n
  • \n );\n }),\n moreText,\n resultsSelected.length ? (\n
  • {app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.invited')}
  • \n ) : null,\n resultsSelected.map((user) => {\n const name = username(user);\n const children = [highlight(name.text, query)];\n\n return (\n
  • \n \n {avatar(user)}\n {{ ...name, text: undefined, children }}\n \n
  • \n );\n }),\n ];\n }\n}\n","import { extend } from 'flarum/extend';\nimport Application from 'flarum/Application';\nimport ChatFrame from './components/ChatFrame';\n\nimport Chat from './models/Chat';\nimport Message from './models/Message';\nimport User from 'flarum/models/User';\nimport Model from 'flarum/Model';\nimport ChatState from './states/ChatState';\nimport addChatPage from './addChatPage';\n\nconst chat = document.createElement('div');\nchat.setAttribute('id', 'chat');\n\ndocument.body.append(chat);\n\napp.initializers.add('xelson-chat', (app) => {\n app.store.models.chats = Chat;\n app.store.models.chatmessages = Message;\n\n function pivot(name, id, attr, transform) {\n pivot.hasOne = function (name, id, attr) {\n return function () {\n const relationship = this.data.attributes[name] && this.data.attributes[name][id] && this.data.attributes[name][id][attr];\n if (relationship) return app.store.getById(relationship.data.type, relationship.data.id);\n };\n };\n\n return function () {\n const value = this.data.attributes[name] && this.data.attributes[name][id] && this.data.attributes[name][id][attr];\n return transform ? transform(value) : value;\n };\n }\n\n Object.assign(User.prototype, {\n chat_pivot(chat_id) {\n return {\n role: pivot('chat_pivot', chat_id, 'role').bind(this),\n removed_by: pivot('chat_pivot', chat_id, 'removed_by').bind(this),\n readed_at: pivot('chat_pivot', chat_id, 'readed_at', Model.transformDate).bind(this),\n removed_at: pivot('chat_pivot', chat_id, 'removed_at', Model.transformDate).bind(this),\n joined_at: pivot('chat_pivot', chat_id, 'joined_at', Model.transformDate).bind(this),\n };\n },\n });\n\n extend(Application.prototype, 'mount', function () {\n if (!app.forum.attribute('xelson-chat.permissions.enabled')) return;\n\n app.chat = new ChatState();\n\n m.mount(document.getElementById('chat'), ChatFrame);\n\n if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission();\n\n if (!app.pusher) {\n app.alerts.show(\n { type: 'error' },\n app.translator.trans('xelson-chat.forum.pusher_not_found')\n );\n }\n\n app.chat.apiFetchChats();\n });\n\n //addChatPage();\n});\n","import Model from 'flarum/Model';\nimport computed from 'flarum/utils/computed';\n\nexport default class Chat extends Model {}\n\nObject.assign(Chat.prototype, {\n _title: Model.attribute('title'),\n _color: Model.attribute('color'),\n type: Model.attribute('type'),\n created_at: Model.attribute('created_at', Model.transformDate),\n creator: Model.hasOne('creator'),\n users: Model.hasMany('users'),\n first_message: Model.hasOne('first_message'),\n last_message: Model.hasOne('last_message'),\n icon: Model.attribute('icon'),\n\n role: Model.attribute('role'),\n unreaded: Model.attribute('unreaded', (v) => Math.max(v, 0)),\n readed_at: Model.attribute('readed_at', Model.transformDate),\n removed_at: Model.attribute('removed_at', Model.transformDate),\n joined_at: Model.attribute('joined_at', Model.transformDate),\n removed_by: Model.attribute('removed_by'),\n\n pm_user: computed('freshness', function (updated) {\n return this.getPMUser();\n }),\n\n title: computed('pm_user', '_title', function (pm_user, _title) {\n return pm_user ? pm_user.displayName() : _title;\n }),\n\n color: computed('pm_user', '_color', function (pm_user, _color) {\n return pm_user ? pm_user.color() : _color;\n }),\n\n avatarUrl: computed('pm_user', function (pm_user) {\n return pm_user ? pm_user.avatarUrl() : null;\n }),\n\n textColor: computed('color', function (color) {\n return this.pickTextColorBasedOnBgColorSimple(color, '#FFF', '#000');\n }),\n\n matches(q) {\n return (\n this.title().toLowerCase().includes(q) ||\n this.users().some((user) => {\n return user.displayName().toLowerCase().includes(q);\n })\n );\n },\n\n getPMUser() {\n let users = this.users();\n if (app.session.user && this.type() == 0 && users.length && users.length < 3) {\n for (const user of users) {\n if (user && user != app.session.user) return user;\n }\n }\n return null;\n },\n\n pickTextColorBasedOnBgColorSimple(bgColor, lightColor, darkColor) {\n var color = bgColor.charAt(0) === '#' ? bgColor.substring(1, 7) : bgColor;\n var r = parseInt(color.substring(0, 2), 16);\n var g = parseInt(color.substring(2, 4), 16);\n var b = parseInt(color.substring(4, 6), 16);\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? darkColor : lightColor;\n },\n});\n","import Model from 'flarum/Model';\n\nexport default class Message extends Model {}\n\nObject.assign(Message.prototype, {\n message: Model.attribute('message'),\n user: Model.hasOne('user'),\n deleted_by: Model.hasOne('deleted_by'),\n chat: Model.hasOne('chat'),\n created_at: Model.attribute('created_at', Model.transformDate),\n edited_at: Model.attribute('edited_at', Model.transformDate),\n type: Model.attribute('type'),\n is_readed: Model.attribute('is_readed'),\n ip_address: Model.attribute('ip_address'),\n is_censored: Model.attribute('is_censored'),\n});\n","export const base64AudioNotificationRef =\n 'data:audio/ogg;base64,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';\n\nexport const base64AudioNotification =\n 'data:audio/ogg;base64,T2dnUwACAAAAAAAAAACNnWV4AAAAAFddlwABHgF2b3JiaXMAAAAAAkSsAAAAAAAAAHcBAAAAAAC4AU9nZ1MAAAAAAAAAAAAAjZ1leAEAAABmvMEnED3//////////////////+IDdm9yYmlzLQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMTAxMTAxIChTY2hhdWZlbnVnZ2V0KQAAAAABBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAoBBbS63F3AlqHGLScswkdE5iEKqxCCJHtbfKMaUcxZ4aiJRREnuqKGOKScwxtNApJ63WUjqFFKSYUwoVUg5aIDRkhQAQmgHgcBxAsixAsjQAAAAAAAAAkDQN0DwPsDwPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8EQR8EQRAAAAAAAAACzPAzzRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA0TRA8zxA8zwAAAAAAAAAsDwP8EQR8DwRAAAAAAAAADTPAzxRBDxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAMDgONA2aBs8DOJYFz4PnQRQBjmXB8+B5EEUAAAAAAAAAAAAANM+DqkJV4aoAzfNgqlBVqC4AAAAAAAAAAAAAludBVaGqcF2A5XkwVZgqVBUAAAAAAAAAAAAATxShulBduCrAM0W4KlwVqgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAMCiKZQHLsixgWZYFNM2yAJYG0DyA5wFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABkWxLE0TRZqmaZomijRN0zRNFHmepnmeaULTPM80IYqeZ5oQRc8zTZimKKoqEEVVFQAAUOAAABBgg6bE4gCFhqwEAEICAAyOYlmeJ4qiKIqmqao0TdM8TxRF0TRV1VVpmqZ5niiKommqquryPE0TRdMURdNUVdeFpomiaZqiaaqq68LzRNE0TVNVVdV14XmiaJqmqaqu67oQRVE0TdNUVdd1XSCKpmmaquq6sgxE0TRVVVVdV5aBKJqmqqqq68oyME3TVFXXlV1ZBpimqrquLMsyQFVd13VlWbYBquq6rivLsg1wXdeVZVm2bQCuK8uybNsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEEkImJZWUSqogpFJSKRWEVFIqJaOSUmopVRBSKSmVCkIqpZVUAADYgQMA2IGFUGjISgAgDwCAIEYpxhhjDDKmFGPOOQeVUoox55yTjDHGmHPOSSkZY8w556SUjDnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzjknpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmqZpnieKliRpmud5niiapmZJmuZ5nieKpsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVVWyLIqmaZqq6rowTdNUVdd1ZZimaaqq67oubNtUVdV1ZRm2rZqqKruyDFxXdWXXtoHruq7s2rYAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg4xCCCGFEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAJCx1lprrbXWQEcppZRSSqlwjFJKKaWUUkoppZRSSimllEpKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSgUALlU4AOg+2LA6wknRWGChISsBgFQAAMAYpZhyTkIpFUKMOSYhpRYrhBhzTkpKMRbPOQehlNZaLJ5zDkIprcVYVOqclJRaiq2oFDIpKaXWYhDClJRaa6W1IIQqqcSWWmtBCF1TaimW2IIQtraSUowxBuGDj7GVWGoMPvggWysx1VoAAGaDAwBEgg2rI5wUjQUWGrISAAgJACCMUYoxxhhzzjnnJGOMMeaccxBCCKFkjDHnnHMOQgghlM4555xzEEIIIYRSSseccw5CCCGEUFLqnHMQQgihhBBKKp1zDkIIIYRSSkmlcxBCCKGEUEJJJaXUOQghhBBCKSmllEIIIYQSQiglpZRSCCGEEEIooaSUUgohhFJCCKWUlFJKKYUQSgillJJSSSmlEkoJIYRSUkkppRRCCCWUUkoqKaWUSgmhhFJKKaWklFJKIZRQQikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAlLJSSiitVUAipRik2kJHmYMUc4kscwxazaViDikGrYbKMaUYtBYyCJlSTEoJJXVMKSctxZhK55ykmHONpXMQAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABgAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBE9nZ1MAAEBVAAAAAAAAjZ1leAIAAAB/XJFVHCorKi82NDOptMC8u7y0t7K1sLOqr7G5rbGut6us0o2lYoRulW4sFSN0qwRMcIJAALCgzxM0c83vDQg/fp9BaKvwPkMyAwGs0hvK4tut0hvK4ttt+swokN/j97m4lnGcEgGZTAK0TAaMDJPk9MxmGJBqrNINVIXFVukGqsJiqzbgvgIR8AUDyH5haOV0l0mSQxC5NCNXDWHWhSygrNIlsvhkq3SJLD5ZmradQLlmzZqZpZFN+t3QisA3MplUIkuSRLY0e87MFvQcAQTk0g1U83PpBqr527QgIbh+9lZXqwQAASAQcLwemcf1Kmiu1xUDBhg6TseOo5evWiH7y2tp0gAM1X3lGVnkUN1XnpFF7jYUFRAAA4omDUF8AABABMTF4OAu5sWLfn3GC63jOI4mM4SszSUCXOMFbO70Gi9gc6dbP8IABpWGxiJK4t4HAABg3qB55TExoKoQcAAYWjNThkkmmqZTLV8DOlr2Af7s35+Oup+RkqUKRss+wJ/9+9NR9zNSslSBbwAAAACNwaAZlIakwTAAAAAAAAAAICFANMwEgApVm4sDcbqrqa5ubq64CKggoBaHi+eMYQaGpnQ6QyCR1MxMAo3jbGA/YqFLceNm0c28wdMZGXaZ1GMixaMtpZMNEqpECHOvXRGh9f2HywAwx7x5s/omiFKRRpojaY5sMycFMYzGTkYAY9LpRAQAAb45FlnTzPOg7T8jsWCUuDkWWdPM86DtPyOxYJToDwBQDwAU1VKTGZQyGUNswhCWAgAAAAAAAABEYRwAEQFVI2IxLKYCgorhsBhHCTXMSI1jJUPAjGloSxI6Tdxqz4V8juRzS7fe/XqRMXH7/3zCeyukI/RZEjJVepFkMsSYogLMzOWw8rLK8wDwLsCCAECMMwxjsmRNWojMbJE1W9YpIDrUOPgBMrNfvzZX9d/H/R/H6dgCAF4p9kOmbH4tNYvf1vzIJaPkVin2Q6Zsfi01i9/W/Mglo+TmjQCgWokeSE8PAMBgKBgIVygg6SIDYk0KAAAAAAAAGDECKqBGjF/+ICYDw3B8QAWAiYDD1S4iaqgpgBilE2jbrQYw0nG9QTpajnZ1ck1pAXAZukyoGABGTjhrZYWX/6MbcAAwzhyRyYyhBQAA4D1tQgIYz0MAAICs2bJny0lAgwwRJ5RM9wEA0IzDJMNM0wwF6IzIpDECGkOZDkwQAD74tTaptNl6lKPtLbaNUXIb/FqbVNpsPcrR9hbbxii5eckMAJlNTQYDMRCicQUMScEgAwAAAAAAjHF3UEQVkSxpRo6SZMsllxwZEBHNJZecESCGyYwZg3EkOjayIVvHeY0RB2fknW2mc867ub4sJW8nIUJ2aAIwDtFHDFIbJ3CPcyv0JUgrETu2Ylo/nLXund/90SFKQSsxY5iatI0qonkBcFECDhoZFZE9AIgG48QArUopkMkuQO/7NAAAHmpOw+K+jcn4YfxEHPtpG0VDzWlY3LcxGT+Mn4hjP22jqDcIQFQiMYFulA0BAMrQRSkDZTJCyGDCAAAAAABgEEVBQdxoAC8OcnAU9JhQQIwKCIgQaC65zUwBFnu/CzoLLeR6PdLCRojC5EQ0AMy1rZ2EdJiH2eJMLIHo2ko+ccVFBC0zwqD+Gmm20C74DZwvycoINDoVjSadzPRiaQlmxJD+3Sk0gDijB6A8821XuO/2CBDaFECHMc0JAL5JLsPTnuZkHNG/SISagEzwm+QyPO1pTsYR/YtEqAnIBO8NCRD1mmUCD7QBjUUCwGAwEIMyIhOGWAsDAAAAAIARDCIouBt3CATAHK9cc8zjAJhD0AUAADciKIAKiyCj9C/BRP8aG80QvypM7EuAaTfiVidj7R/v+w2EGiA82cFAXDUifw+0HelnmKDfYa4SILuYFI9eyKEHurXKkZk1gFLNzEQ0aJoIAHQ6RCejAkBNIq0C42T038ek0CoAfgn2w9NZc4r7SfoXCZMJ7hLsh6ez5hT3k/QvEiYTnDcSQGYVJqzFYGgyRTQuwxCXYQAAAAAAFNw4qigqxj3m8bkgf9BxPR5PoFSavQiIXHNkicyMShDKa/a4goT9BhpfKxlVGtbJKQKglQkZygQNUJVOxhjIBwE9QoAnF716HwhG7wOiRe1BbVPIw29jlKBRMgAmU9NhpmEAaYaO+R0zW1MKAB061gwUPiWnlXQyswAArgAAPvlNg3Ef2mG85fk/0mOXzSa6yW8ajPvQDuMtz/+RHrtsNtH5QACoZQnIsoakG5qWCYCsZzBoRKG6yICYIQUAAAAAAABRdwMIKg4gAIq4Cxh1N8YoIKoiSIQ0IxcAVSpknKqcfyco2RsE4jWB0+JuOqt9CaBODoAFxIeoVvHVflJdRBvketbKpPlqDVyfQAv8ryIrhBCAIJJcm5FLtAhEEhqAtHICAAAZh2QypIDnWkMAc01iUAAA/tj1w+ueranum/SMREyiwSj1seuH1z1bU9036RmJmESDUao3MgFkBTaEblQ0AoDqoojBQBSqgCEuBQAAAAAAAEUQ1A0obszxuICZVzgEHVyNQQFRHEIbkZvsAQAIebG8RK4l5MgihLaEiSs+tKYZf1+03uPfLwE+HYDQpjQVgB4B5mWuWDXedVh3FgA2MNq2AAJNgLaizZbdNGMDEkPjEYHQM0CTGKdtGYCvai3QzGgCAN5npRupI5+X+cQ3/IgHo3f7rHQjdeTzMp/4hh/xYPSua0HGsGF1IyvVAEBmKCiDkSIFGRAzYAAAAAAAAMwJSIa5Qn7H73oIuuA6DobHDYAYd1cAFNIQzZKRTRRUm9A000Fjej2CUAEQNdJEphUlKLFM6hDRUj7eqw/7LwyBOAH6Jt7gHotcQsullK9WMKkDyAfYFnAU8J3POJnZQjsYRke1AKUAADBOxhonldRA7tUs8IWMCwDeN8XDfDGsTx4/lGfEIatRWt8UD/PFsD55/FCeEYesRmneUiaAohGQHgggGiIAYFAGg1KKkB6GEEkBAACAAQDAICKiioI7pqAr4ZrjNTMLCCEPOACAgHFVQUVBSEdlfjLAxTCkEuEajlUuy1JDV3g1GLWhCUFyQs4bQxVe7iFaT+7SX9tFGWBNWtIU0wQApFoAAPnOiazZFCGaZIYyT5wcUP3d7YvrODNA38O0YwMAB95H1UNmG/uotpvwF3Hswmf0qI+qh8w29lFtN+Ev4tiFz+iRAxiXAdoBZAUzg9K4ggyIGTAAAAAMAIBMQU8Qw8zA4xiAEXRkAGBuMIAQICDXyJqRQdrsuU0qW1VQwRQ4GUuGKZFC/f6goq/YsGQnGCNmjNDZupQ9xzIO4BFh1A9px2XFMBXsrAbQI3+EWGUcaGWIAWh0yETodFRIk4jPwNdqZQBA00zGYATMP0uwcH8xQgEwnifFg+7J5mf1w/gJm+YaPZYnxYPuyeZn9cP4CZvmGj3mDUQEyApsSqMNoIgoRShikgEhgwwAAAAQAABVBOMKCohx5PrNMBGQiw9cXzBoAsAMqGbktgV0CK0mYyaNGxQV0p8uw8a239sBzNzbzYxuKfIU2Q+AeC32peqrt1SDMPAdxKD3wiMKkKOnAAD663NeYAIxTRsI2gcAgOv6tTgA7I8U4BKncgkAZAC+JsUbMyPV80ib9COuMbtGD9ekeGNmpHoeaZN+xDVm1+ihF5lkCERUXSRoATKDkUEZFFEYYkQGAAAADAAAYgwG3DGgDsKMAIYLAHjAMTCBrJlJIrQ5c0RmmjVSLQN0SorhRLheK/qjSIA7HuYfmaHa6netW/8EztcuAW4T0PBF8DSFPdqB2liCdmIrwIio8MikAEAoeX4KRP/eUf5mATB0MpMMChZiggGuyC9EAAcAvjdlw/qS59C+Srsj7jQPRo/2pmxYX/Ic2ldpd8Sd5sHokZcAQBQ1S5YZlB5nwBAqpAAAAIAAAOAOggKqqOSMZraakS23OdPMJEGTXJtFgGiSMzdZkhaiRKUaGc1gbeJqHZOYhgoikckNMWrztebQjkaId3qVxv3FdM0fn1tJel2iLaY2cmfhXEx4iwwJRDcVoAIgSYdkkg0MresBUH4E4N36CgBJtRPRAHLEMBlTANAAvjcVw8sZz9XNt9K+kYqrvKRIRml7UzG8nPFc3Xwr7RupuMpLimSU5g1JAlkLTGIkgKzQGIimEMswxFQKAAAwCAIACoAxCqi7H59cDFy/4/ViOB4JE8KQEURzNqNpC0aJasMUWtvtkDJMEwralcF7WqBAiqYxTINKXBiQGkfnWTrs+lQCtRsi44QN/NxVtYL0cMJDl4n1Lw0IYJg2mdkZGlIIv8s+zwCImZMhFKC/Tk0hzcwGAAcAGTCeJzVDfth5dXMz/kUi2nw2HZ8nNUN+2Hl1czP+RSLafDYd7w2RAFmHSWHUB2TKQCMQKWAIGTAAwCAIAICguCCgiDHu8/p9GCLow1zz4AoHAYAwjco1yQhACCjTyZiPLvuUfF5ByE8xnRKR4JbJl74kmHWeInAI9V1aMalkEJc3MMXqpk/fTN68LgFerE0WAICwoo+TAkj0FbRlOhaAzOOTBGJDlwZAlZUNgDYAMJ4nFbm6ZeeS3k2DoTbdCWyiy5OKXN2yc0nvpsFQm+4ENtFZHgigqCcAKIOBIkQhZsAQogAAgjAAAELgesyRAYC6iIACOCJERrYGFbkk2TKbLTM7TXJkz5mGrKYNBxXt1VVwtaTETYf0GV8AIESrok57G6WnTJiKvv2Ih2o0jFghRj6R6Ho+oRWhcam7293QQQEkyTjNcwshVF0gLV0AENfZTqvV1zfQ0WFVGAjAwQEGAF4n1QOl6zl40v5FnMpqOq5OqgdK13PwpP2LOJXVdJw3JECUtRgQFgNpDJTGGTDEjAAAgCAAAKgIIqIIrupBgVeGOa7HdYIeoLmNgqTNmuaMlGoRpzN3Q4e48JX+rB/IzqN7GhoISEQ6NJMQTjAX3dXvbkk6+xYEqbYUzVeMqZb79o1cIfJJrRzfQJw3FgBoOmOqrr+NZKkiEOIhAErGTDQZAeD3AkQ8L5kTAHAcAL4njUHZx3l03tL8H5nFt4luTxqDso/z6Lyl+T8yi28TnRchEiAajTaBzGQwUESRDEPMJAOAYRAEAQB1UYMCAurgCXpck4FkkK05MjRptma0GVnSEDRblgggEYAZiuYfVas+KEDpMApT7kUg3BGU374lmKkeRK6fQc0gfUcVXsV3mxzsFL2wkp40V67eIzLQwQtCRQBETzNGSJFq3PhqvwwQMUzpWGGAUt2ggHby7jTQQACaAHAoAF739AP+GfrDuybDms1XrHv6Af8M/eFdk2HN5isac5DCaBIwKKWMKS7DEDIoEAQBAADM4/EKyYMHfH4wjwe5ACChmkUqR1PN2uwRyMhN9gC0WcnzrQYpEmzIIRS2C3unw9AOZv4kdi+EkT6rCPi6EIwIvnZGa8HQXf+/U0u3jsn6JGZ4tYajzwNIKh1mSkGTYchkDEK6AsCPllVAm1/AgK/UE2hRADIGwAAZAE9nZ1MAAEC5AAAAAAAAjZ1leAMAAABUQ0gLGaekqKyqq6usqKippaypqKysq5mgqKekrqi+Jy35ejIfNu1/ZJYnw7EnLfl6Mh827X9klifD4QUCoKhZVKFADEoRojCEpQAgCAIAAIAKrqhBBciZRSpCs+eaNkvOrFGa5JYCjeYmZ5IGaIJE8T8Tra/XU9BxRBOUdMM3UwuANsI1mKHwH4lCCXqNrk3jJv3LzCdNUkFiBCuzjqglwRr1FYavsw1EATo+7WkLRFXY+EaBRuQ2cpXVcWHIpAUAkEEBGr4nLdn6NevqvKspYqvh2JOWbP2adXXe1RSx1XAYQWI0ARSIgRgoxRkwhAgGQBAAAADweZyAhDxBmeH6EI7jkQCEEE0aGZVE0izZcxQRORIBSCFEZioAo8hPm498xg2jucNihECv3WXcxLLxfcpbdJgOTMXI5bqTCSpk5XHhyQa2Hj3w2qGuI8YhKGrSvDd6TCxA91EFwFV/GUHi4jewV7cHIKIAfict2XEza+Km/I8wzWo47qQlO25mTdyU/xGmWQ2HC+hLwGgDKFAGpTTOgEGZDACGYQAAAIQFcQDMdeUVjjw4UiBoyGfI6/d6BQBggSZpzgCkAklNh/pDqhH7PhLXEtLOq+ZB/HyaUEZAHBU+E65zLYDx4vQf+WTp0KyabklZuPDS+gbVJU+T0CcfGiCiMUPXTTxOAkC+fgGKHwANnYoSWqLMIQCgAAocviedwrLl/eiaah6ZIZPh2pNOYdnyfnRNNY/MkMlweSElQCVcDGgBKSNCGRDLIMTJAEAYhgEAAAxGERVEDBggx3EEAMIVkgEgyNrIjFZmLhkhi5x6TbTNqb6q/xOE1K0+1iC6lPjl6ap97hfvaO29Dd6SHCvKe+f/KrDUEQgnJbNvIZ65pAVaBQCQZNpmGIZhBiidDJNxTtMqDCA6dhqhXBt6DBilASADHAAGOL4nLeH0iDOxm4ZHajAYyJ60hNMjzsRuGh6pwWAgLjBtkNJiyDhKEcUZMIRhOAjDAACAcDyGgcyP3/ESkElGwIvreNJAtoxcAZqRPSMjQKCKRahFTHwsIJOMoY1KSM7unNVqBnTKWMzEBjZQ/DVz97/SJcEvrSE1sw1lcqc/BS395rpsAaDpKSAA6aTjND4gzv7UAaQ9AOSUbaElVkX4VWKDATBKBNQAgAABnicdg/oe+sS3mkdcbDZgnnQM6nvoE99qHnGx2YDeIAA0LhC6oZ4AkBkKRNO4AgYpDA8DAACgiLsgBnEQHB8+ZK7XDTjeoNRdFIMoouIQRM4MgKQ0hUzEsDCC4SFE+S6Vbq7JqEADzIaK2lP45P6GdDCBxRcirWppMFrvBSMKJMTl5ielzodiUAChnZjOMAGpoaUZWowDmDbSAFuXSHj2xi0wQABYk4IGBsABviftYb/yfarzp5IiPew2kD1pD/uV71OdP5UU6WG3gTiAltEmoDgD0ZQiPQwyyACCYQAAkEleBxmSEF4Hj4MBSEYa2bJKKyKXrNGMRttIcmRGgYbo/luphNiBJCJTKLQ6CzR7/3nqZnEUlY7YSFWgw6qAW9dcc5sDSoTrCCdVlye9dwTox0gFDGBiXybZsmWCCI0ssQlTAGjNA/o/bP8CDX4AADCAU0AA4EABniftwXRmZ/XzXUmRCj0baJ60B9OZndXPdyVFKvRsoA6g7Q3UAYgElIEzEKJxGYYwGXAYhAEAQMgxEIBHDqhRQUAAwMzjgBAGRo6MLFlIyE2WSlMXpkd1Ybw+BdTFRKgNjPxBKDGV0FwEMNiN6tip19VtBrVLlpmCaOmLoi8EYruYPFThgmD34QIAlbEzZw4zC2IIeVF2HQDEre5AK7HgW74BAHAOQCHgB5AAAJ4nHZXxY8/q3B1JEaZblfKkozJ+7FmduyMpwnSrkgvIAEKqNiBTBqVRXIYhTEY4DAIAAObgcWWGGfJ6fHgdOfjNDK9XuOZ3cAADMxI1mlZASpHqJAZV7W1x24ewskSbUIFZgjetoEYRlhk789gIgUTsryc/oy6STr5af2sA6rLUBbhRbQBAOs7IjGlGkKaG9pisAQDJcxlaiM+01F0A0ADgCEAGMBAACJ4nnZX2GdbiXc0jTDcr50lnpX2GtXhX8wjTzcouoBcQGLUABQMhSlGoHoAQwXAYBAAAAFzXxZAhPAELeE0S+IM+5DG8QTdgQgBmBGTNbSKAUYHKtMhKZ1/hRpOAthaB4LlLMpB3ENxUEwDeYQA/61rr7vnpFvoGn8nbXGocREtEJ4ucpnHgANBmRLZsSRRA2iRW22LC8ltK67x3G0JhrIIRwEEgQ1YABR4nnZTyH9biruHSXKU46aSU/7AWdw2X5ioZB2AxcDwjI6JkQBiGwSAIAIBjwYAZ+C3gxfEZ2qzNyMgQaY4ksw1ym5EjACJrllzS0EKQiqepySbOXrqmb7+2gkCnX1Fn2pEYTTuE/o+bnHqP9UkL8mGg5s3eTvp7V81A7QbZMCDiW/r6ZQCteTESQIeVXRrkeJTpEgAA9326IURqnMtVkAAsI2SzxQA4OACeJ52V5ZPNwhHSX4TzaoA86awsn2wWjpD+IpxXA3gDgLKe2iwsKjMQpSmiMEjhgyAAAABGAETViPEYfoG5AROSk4jKmksmQDTNNXJtoUD6nGgBk4KYMagG26fzfHVQDbGCh2v9tAcmBhSrGMLLb7GB5iZMjW9fKN3/WtuD1k1E9zDRdh89gJ1TQgdL7TfJ2w7AFIyBbzIB1w3gADjQeoCjGUBQAAGeJ13t5S1OMm7KXySi+yblPOlqL29xknFT/iIR3Tcpu4CeZFPPSAIqM2SahliGIWTAMBwEAAAA8DsyAAVdl2AAD4AT8ODzBjDzyDWBIRPQ3DYRgFQ08ct6ENvSkHaYFHF0mjLCRAPRotCMYZqgpS/QKTDfU0p+63eh5VU5qFJChDPPbPzdTKReapRQjNN2mBiGEpUaa2GaD1LAfxgAsjiqBeDxAA5ACzgwzQACnifdrfXLTGx8wy88KOZJd2v9MhMb3/ALD4oOMC1TgZgyoigkOcRheBgAAAAw8wsDOUE3mD07SVvZc8nSjKwgMnOTJQCGYTpzhtKMCUkVakqDgp5LBkJ8wiXZirSRpsrYaQJpQqagGZozy5/YCy66EKwC8iYjGJf2z7gNfjAwLh2DcxYtaGSGNPuYYapFWklaP/oHKKCNNp2OFeDeheCGGaAAh8IBZK4BHJ4nXcnlm620eLJ/wk+DUp50JZdvttLiyf4JPw1KDiBdBOgDsowQAzEiGQaTAQdhAAAAAHldyTAXVwJw8AoACXM8AgAkWZasWXIkpG2WrGRtSpUahwkOrU1HkFQLkdmbjc2pbvrwEhnG14IrLxrConnQVoCtF2Q4UnU8w8kTiFGoJo3PNsRHIg4NA/Tc2jQz0wBoArMewPMGWJzVFuUXUCAABRoOIBswAJ4nXfn9O96pji/lG36oKOZJV37/jneq40v5hh8qig6gZ7QJKCNiMCiFUngyBmEAAADA8CEBMrxYIBhAGIAJaZasWSqVkbOVLWmRm1xEANEV49cSskN3rxBwAchTT3C+tNcktXx/y1XdlPUgkdj/QFPpkXu3t0sjWkD1EiL8ub90dKJHqNuPPa0HAAWhGWk2BWd+L8TfVmkwIAA1DLbl4FJVAcgAEBrAiiMQIAMeJ92DReKmh6V8aV9hUYyT7sEicdPDUr60r7AoOoBxmQWTgDIUFMkpoiGmMAyHYQAAAMwck8dFPplAuJ6AAAAI4HFcMwOAVI5MjVRuM5NG1rQbl9+utSdh+5+k+f1J8g3TQQFQ9C0KjUO1kXO+kpJdZy5mgihjalJU2wrm2kw98WHfyO92VLQ54CJEs/jPsw1+jG3fGioCgBozLREDb2MlV3dsCIBmwAEIEAAynie9K/0/tNSNL+0balydW4XzpHel/4eWuvGlfUONq3OrsAtowwYuAwwgU0XGy1N4EAYAAACQK0zCzA0GHHDMvB68AsM1QEEEACCvcAwAZCQAalK0cS81qm0d38BNx5EWVIUGtyr0De//k1mfQGjVhHydwVM7DHWSQXxt0/cXCeiCm7XPVNs9CBXhydOOqajKKLHwlAHgDIAXEwHkjjI890vgADDmaAqn0DIH/iY97FVC091q4wm8SQ97ldB0t9p4Ag6g5zIJBKCU+QcRojAIgwAAAIAJL0iOgz8IQNDBwADAgi6OQJjMJFlyajQjMzKlOTMQD/GjOg+CJqRzSQZVABGBikameaE6s8ppnZOr0r8CH6ZMvlDfWaB5zJTDmcnA8fMCF5dSN7KjLGIYgNaisLmSLvbndlrA6ugQpgtgABhQCEADHic97VUi07HxdKghTnraq0SmY+PpUIMLTDshsahMKaV0RpSMYRgAAAAAj/kUNOEGgvLhAq4jvGY+ExVyRgpoEjmylUIbRGfGYw+JHyZIDIm2wtfYJEmF6khNiAcNCVro99RJ7kpdz/GwNxBowi1AR69aSm8v3lwLCg8k28ofATP9JChty2gGlwMfk6WqTi7x8QdM9tu9BoIDMcAJNFDAAP4m3e31n82gPbXyFBrepLu9/rMZtKdWnkKDNwCIbACJizYYgDIQopSOohQOwyAAAAA4LmAQUQv4/TJMrgIAMmFG0AQAYPK5ACCDME0o41q01s63xC44+kUT++QQi4wizcc3g+WyEv3DeMrG3fOBRFdt2m7zQHqg5qaKno83aHMNjQiBjc3Gz9kOllG4YKAxKCOLat/L1vWYk4ryT0DAyqMCQOAAoAGGDP4mPZX9n09nvAVHaHiTnsr+z6cz3oIjNDjAMOoDCsRAFJ1GlIIgDAIAAABgrisZmMfF5HNcFxMyIFtG9sxWk6y5Ec2ZKSqyZk8jgLQomI6owNMRgf01qSJDuNXohiCc8OUcUrsagVwiXFDxTjS+1X0Wca0FfDhCs89oxrN5qxtOmOY1FVrI7lXtWmqdEjUEpIMw8zAY3ltpvfktLjcS+OcqgCFDA6ABPie9covErDsObmBOeuUWiVl3HNyAC0gJGC0gMxCDUjSiiD4IAAAAIEeGg/nlNV/Q62AOUsCPiyPzOF4ZACCCNmtuMwAkJTSdaDp8Ro/H5bBJFSJyhBPZFV0UIkHgA8CDwhfdH6Ky3wefQIjPP9PMwKObpi6Ish5SnnEGJt5KPg76v1qh4RPAYKAvAxCfBgEQokxbEPdp0sDhIwA0lMM4wQEI4AD+Jr0qyz91x4/OrS0t4E16VZZ/6o4fnVtbWoADGIvKCgaliCLG6GEAAAAAV8iQ5A9Yjqxp2iZpkiNrJpFqiJw5sgGQPWeSFEoS348srhGdem9UmDIk8EzoZYoAAEN+YiYUV8SgbtkS+iJcRJfd/3BfDqMRsCOOOFEBwfVCILMw+ZvJBlr61cvcyGV4xDDOfKwGwEdu+PfwmNHJcBmmxzM+E7srwQDAGgHA4MCvADg+J32Qk6SxO27ZbYI56YOcJI3dcctuE3gDAFnvDaAbUQcABWIgxh8x4GAYAAAAHEERMBIMeMwxkBuUSRJxV1cBBdBSzZEGIEkiJcaJCj2ey3pTVaif0G5VFkjI0EVTZm5J9IOK+5ddHKGMESC+mtn3Z38sb6WW5yMQ4EtFzBwWgHxtL9KK0kweR8Jr8kU/FuCampjaDwAAchipJxuIEg4CkAkgwAGBAwBPZ2dTAABAHQEAAAAAAI2dZXgEAAAA2J+1qxmkrK+eqa2praGyrK2mpaKlp5+pqaamoZ+lHid9cLPEvJzzxBYqxEkf3CwxL+c8sYUKXgCAutEkoBkMxPiMKBwGAAAAQBRAVcWRzwkgABCWNXubNGSTNUkiM2dSSciemQCWMNo3UbeO2yjSLjSZlfNlGOjrQmssB20JMiPmBu35I8APCDwWyRZQhUHGBBOOWggMRyWtJPhytsfjVtESR/2TypAzLID4IwyNLpmKJYa1GiKClfhiAaTRAAyAAQceJ73zu6S8K+OrszUhiJPe+V1S3pXx1dmaELiAlkBgNAADMVAmmj4MwjAAAAAADsgArzcQlOsFA59fMq9PHo+DYYCQUUGaIwdA4hO5koKu0eJK1IBCeKxsA8An0kDUP7OmJVVX/TMfUbPWdVsZbGiqganK3kzrWzoH+f63LP7Ly6r6tnFGGal0L53Ribx3aQuxZzSkqGyc7EfX5q/7GUvoWvDXiNM/DAB+A2QAPid9glVSaqZ44sjYwZz0CVZJqZniiSNjB1INVjgIoAyEKOOIIooOAwAAuAFcjwEOHg9BP4B88goAgBpGI2NmkiFb2obSaHxUwA/PwvC6daD4cMBnj2+eCGsF2JmatrvRe4U4q/NJ7YG8kbUgaTo+TMTWxf6tsybbpDKd1MlC3ljXS8PKCAJ8oiUtAUnYr4zZ/nfJt+FqnB+zGxm2l9sRvshziweLQQgICDhoBAAUBB4nfROzhANGajgpwRAnfROzhANGajgpwWC0gNEAMoP+KWWEgzAAAIDf8Zsw83hdjymIgRtEAIAZaJA0ojkyA82Ra04AADSTxnwB3Roo8MUEyAuADIZ+FYZrpc2UwzNSV67rcaT02p06OpnzmC9j2nUHPya7262qR03zhxZLy4cEYXgWeZAFG58jEcxnRSpgYc8KnTZnuiWgiJgM4AgAHid9EaPEoTvjiVusGcRJX8QocejOeOIWawZeAICa0QCUMlKaph8MAgAAAIAKRlXcBTw+czAAmavISLK3aURWEUluQoqMNBcCIBj/LaWrXjxWvM2ZdbeWo0SJSCWlxsuI4BWPDmh6pT/rRvdWlkLLL6L9xe/RV1wlBrUHsO7jH3LYa3RbQHxtJZQOGBRS5InXTbahDqvSl8e3pOcr2Eh/ChRgDRw8EAADAB4nvcFVop2GH8FxvbOAOOkNrhLtNPwIjuudBTiAvlKmDMRAlEZHMAyDMAAAAOaYhGPIYxmRPSNtQ9aUJNdKGSYNAc2ZNVsCVCMhSaET9P46JwHiS1IV3ibC0P4IXbG1kFgdoEjD5WajXCJx/61zbuUrT4UAWwbeydUGbnNNsaYyQiTXzFvOPomm5IMoyZfVyvLa2A6z9VhJYb10mWHAvyLx4mhaAqcPGYIABhAAPid901nSZRjtLdhiG8Oc9E1nSZdhtLdgi20MUnNBOEigDEoZDDqdgYIwDAAAEDCvXJBwPY55fSDkk2EAAG1KBhlnStPcZksCqtVtzCdy0bskGkuAIoiJPRtxSWw6tyC8iRs0iJZWiSUVQ3eKQoBH8mIkERUifeHP718NkrzPdMyHUcEeyVYhNut7QqtL6rCTkJGLfwwQ8kUEXGbwyt6DC2JIe4AC0ICGAV4n/YCz5FTGvHHEZTjUST/gLDmVMW8ccRkODmCUMoOBKELTo0EQAAAAAMNwDSkQyGxGkrXVJFumyJ494zg0kxlVEE1yzRYBCFRbwrQ4dNXNy6B9yR0W0KNXiuH9HizC8xYJlGYERQVkoJP4y4ut2HeMSBNGi5plMQ81+FWp3ai0kpz6RMwnDEVMqd610bgHTG/2rxdTdZFGtutPHma8wi4y8gR0gBxaDgYEgACgPid90lUSzXAUx2ENc9InXSXRDEdxHNbgAiYgUcoog/GP4CAMAAAAgDCB4fidoGN4ZeARyOdrMJkQIJIszSEpRERoAUwC/LDfswdbEiG66r+UYbc+VUuU2oNFKNWA/bNC+ECkZFuYWZ/J041ppnlqTdU37rx0Wj8eRRsj2/qka89S3I6T2PAqNbfFKsulksxSyPeCrGTfKyZqQODAYGg0UAA+J/3Ak2RRhrfhyPiDOekHniSLMrwNR8YfOIC+UmZQBmLQU/phGAAAAEA4YF4LZCHQzJyRoxmZ2dNqpgWQ5DYjMksEhTASMm3K1gyUAFnH2U2lTEolfbz6P9RH9nuaDtId4c8Lf7H2I/vW26EigWrYePjimi7oFmErz9dzPqN9y87vBf4i3b2at86d2ZgNmo+QPiMRv1C5/oUcXyH9UluW/d2lX66EQg2QCQDQIMMBDiADPif9oLPkTRnlT3M01TAn/aCz5E0Z5U9zNNXgAgIWLhJsAspAlFIUPR0EQAAAAACZZI7rWNCEYa6ZBF4fAszrGgAAkscLGBiARS7ufLsk830vYs3M9n5RJXNmBo/KtiOqlXkKtlm2HSEniWmjzC0dA5+5AWaXLSTektIiF3p+29mfmZujbGAJdGXpi5hru5VmXE1XEu8+0Uho1WlLo6FH1KmCgQA0lw2cAeAUAB4n/YajxI0q5QdTMMRJv+EocaNK+cEUDF4AILLBRQtIgBgZiJHx0TAIAAAAAICK4EZA4DW/AQAQQA4AAGRIs6AZuU2RpYsztYLPcsWMzCF481lHICMKLV23vI1wlCXP1mC/h1rLnyZAkcCNQknnNaKf3g3SDJ8S0tHIftnSJcviFhbYtOaul73W1x84a8avpTF1vxd8dZPyRUZpIdUfHu3F3/RWKQ0FAygBB3AAHif9oF3CrJzyxj0vECf9oF3CrJzyxj0v4A0AVDOwsBgMSjMpfTQcBAAAAABAFXDHHBfMCLiO68GoyJLmWkAjzSUTShAGEb9s5kNAwtZZW2gHcR3iQCDZKIhFRv70xQ7kIl/aR3jbllBqaVBIMQkUAap0WX//k8CQxteWuS+OtiCE0VSlnfqdrtODM9bqSP+uWrqm9AXtjsDa9zLclq0BYAIGwAECBh4n/WbtP7rhH47cA8RJv1n7j274hyP3AF4AIItGiyJKEWKgjw4CAAAAACoARkQzsiDkzIxUQdNcsxRAc5MhQOm9TfXXkKr0RqdZW4eglsehSMRAV+sJjdJiXiY3O7pI+gpfRGq8uWhaBIXzi8pGkFTb/0G6pc6iaXFdclS03y46KstO5HJiBpNPN7MLPXBYfl+fmQqc90ko0gM4AwEcOBDI1IEAAD4n/dSTJBuGL450MCf91JMkG4YvjnRgWQqKMhBCpwgNAwAAAAAlRI5ccma0Idpc5UYkVSJrNgUa5CaXAlpBMYph0mCLgKZylFkG9fuMV74d4DiRb5ms2kZp0c7jWYLuj8ompEbpWMcncZbug9pg7h+WOtKEWfnPjXquOjkGFa30pla4H3Upf9EfkDxxnu5WRqMR4aEtfbn5gzG3AiCQUQJCAF4n/ZFNSi6M9oMjujnUSX9kk5ILo/3giG4OLqANC0umGRno0YMwAAAAAAIwAyfo8zh+wHAcr+RRRGjOrA0A2bNmKaCkjUjbmLL3yvdS/mNt7zpcL7cx5kMnRHS+EtAzGiECP+2neCONF0Jo+fvbXe4hdIhIMx37yRM9mrO7V8dH13P97nnFIjFMOUn80Ubt4ePmtIxXv46xnupprQI4RQAHegAZAF4n/ZajJOOm+RMdi5g66bccJRk3zZ/oWMS4gAWJkkEpZTAY6YfDIAAAAAAgwPCa3+dxHcA8LpgcN8U4IwGIHLmtQKFw5YXeUVEfHc0X3ZlVUrG1dGPCuNjW0Wi/CZG6lRFHt4EOLQdIVROjQNtGFAPBpdLNgPYkfkRs4gh6Ut29VYukVitjSG8TddkUcdW1uK6YWmcQpgs97T3XWvZ9Z1YABsABBHAAXif97aqkDMPBAeqkv12VlGE4OIBRMrBkBs3IoHQUhWEQAAAgiGOOixQ0n4srUCAil0wglxQQErlJkoQgGiIaTWMCqc/pUhMT1GxJXMXpiBCyOnSZDqHTnzYvIuDPSIu+pUDrvHG3hMtBAGZ9F9vBh5/lOHLSy6TtGR91KaKhaepeeq1HSPW5uo4b4GxWrhJRQdL1bkdsmCgEAoBPD+AAPif91qOExlVpX2zROZiTfutRQuOqtC+26Bw4gLFkBqWIMj7jMAgDAAAAAIDP64vMppnVNEcuRJYKJHIVCiJ7cwmgRFBJ0SkmkudO9ScsxGe3NwSAP/KpWZ9gB1uFKpWviizAi9Qbulu2b04tXB2Ffa2wtuvamqlUBtONHdM6Ra3b+fQndPlJzuTeT7bPRZJ40+y37m6HrFpR28rbZdHgB8AFHIAag3BgAF4n/RW7xEEY5Z/iiPaDOumv2CUOwij/FEe0H1hGCzAQYkQ0YjwMwyAIAAAgxwwAAABEk1wzs+WMHJnStNJqzmqRmywB0Kvcb90y960ssnO7i7nkGmA+9vWy8wuSkrAeYtShJOS97DGoDSzzU3uZTQAtEeECS441xLXIanSAO08+8Q5K3HgRPuDoBhuixoqeeClN9N3uzLq1y32Rjk+wHsyrGIJREDgg4wBeJ/1Jk6SNK57YQJ30J02SNq54YgOWxUApg3EGHcEwCIIAAAAo5JJrZtZsZEaT7EkGSVJCRrYCiCy55gQQJa6AA4RgDvk9LsgxZuu/b+nnE5O1jvbQG9kYVOTZOBEWDdKrt0zPIosW09hc762S58ELvx7/7+lrbxDofzVWukeKhkcco0IxW91TTO95WRar68vRVKdXzPSie9GP3enOLzXQjkYGMJABPif9a+o/WVUcbNk8mJP+NfWfrCoOtmweuIARgNEAlMFgoPT0wyAAAAAAAADmelyZ6xrmMZ9Jrh9wvQAAwkC2ZhbALwIPneIpFSm/JQ73JGpTl1m1yaRL8aQuosY/DX3SVIfsOIGKdTGSiTOONq9VqFdg8NfLz+9aJBUYtR63ECKVrgUuB7QSwSzk5IIvhyLdv8idG5ZBX/Ddze16iQXADwhIAAuFUz4n/THjz6CGH2xpYE76Y8afQQ0/2NKAZTEYlFJK0Q/DMAgAAAAAmmvOJElyqIgsuQnNTECSPQRA5Jq1FVQw8ashr5RvQFFZWXCEWpaX0X2J8dv0feFr3d0dWhusbRh5d+OnKtZqhoGx2wyEFiHLbcrI7Hw6ddCC/285N+QxbOuiu9nv7X3jz5G6X7+ZN0w5hMbQlpEhRNK7bgQ00CAgDjIAPif9if2XCTPGH47QMCf9if2XCTPGH47QYFkZKUVHCNFBGAYBAACAkJucuWaRXYWMHFllliCSXDNbQDMysidA0+hf/qTdet1UALhQuwF+tqlSWn3XwFrUCk2I2JCzfHEr7QtiFFYjQnJ2xh6MoRBHvZx6O1Xw59ycxkwUEgqszLbpz9I80TNAt0ojQaUc7oV8F5OeDVckwIE0VCDQAGgAXif9E9vfCtUcbKBO+ie2vxWqOdiAFwCgwaQMBs1gPHoYBgEAAAAAAFQ2GVSSkStNQkCuSQHpZMYkGhgwTV/Ce0+iojBnUnEj+jTZFVKfO4JSNy5LvUBydG2i0fUKXyXphaIQNIKdd1gBQ8NfmQLrJNmYGfJibi077seJVVp5PNZv4iK5JKTUy3+xcQHxSSOd9dN5RleMrRm/1wCgJhAMtEwGaJABT2dnUwAE71wBAAAAAACNnWV4BQAAAMlv+DoQoKain6CcpaCZn5+YmpmaMl4n/Sn9r26ajSMVqJP+lP5XN83GkQoYIwElZaAMxij9IAgAAOA6HmQm8PiwoAFAm2vWKNMxBdpmRjaAVqjydIqMqe6tLBeKo30hFbW6ClJtnZR4a/Zax6bGyJRfOL5uBjgQYUf/6K1GwWo3z9MGnbhKDM6Oka9Wg07T50zbcHy6bYgAK9lFB84pK6Co9YySq+ZuzC6be5UWAggA5gCgYQA+J/3t6g9pxpg4wsKc9LerP6QZY+IIC94AgDoItBqDgVA0PRyEYQAAAAAAcCO4fgMkyZXXcRAzp8NYIOM0M8YEgmfp/61j6EUKNQ3SahDtTJTY+SdDSkZ+YL+DRCTiagmfc9GlBSN/drwppMbxbyMiVSUsToX0ePQXQUbU7GX3Y3nG6l/PVH43uLZx16jQCeBA4G0pRLummaHv8kc4mCAoEEBQAzQAXif9W+tPSjNaw5EY1En/1vqT0ozWcCQGlslgMBgZacbDAwAAAACguWTJmTVnJG00l2bVDEnQ7KkC0hkzWoC6MCcSfAFMS+RTJamxqln2l/ce0kh8XfDNzoT6jVrSVOVBWC9axo2N8JuqxahBFGnbW5IWN6iBLRvaVSA6ZSj/MZGIcNAG/IPyIJUtaOb9u/8nUPp+IamyYvzbPfKEgRWAAg04Pif91dsnx2xHcIA56a/ePjlmO4IDOIBRMhSIgein0SAMAAAAAAAAFkiyJpWmInJGZWSCmR0AKtfsASCkikGsNBExBUo1poij4wSmVdwgpIab2pfQqUkZ6O3JwKvHFZZ3d4y4v1zoYfuSvpWzVy4/felONhTPV12dzWbSdskaBTGyXFWWFpMHKeuKEIqOvt7B9aMvHTR8zQFAdpxmUBQAXif9nqf/4Iq3Zi+gTvo9T//BFW/NXoDlIAAxGAihpygdBgAAAABkrgMAAABkzTXJTCKpJCMze7ZEmpDkTDVokbjVYIAA9PWDaQ6J99XRQjWV/RaWjhdd7gQfD5UlQGuvTRimbT2WsK88Taau3pCz7UT1U5li2HWXuGaby9HUuTLowPmsSHzYal6TdJDasWTO2ZFAmlbxD3aagMkACAZAG14n/en9Z9VMP5oN1El/ev9ZNdOPZgNGgUDJyGCglD4KB0EAAICgG3RlILkSMgDQLLlVJDMBRJpLkiCIoEXESmzLVSpGWa9WO+T9Pa2oAn+IQ15Iytn2a+g/3EH9bWcCx6eanjGnaU24AGLXd5MoTiSkXa3TGUN9XLeuDcKWHMVR1WheTAh5r4XRmgBUF61nlw726H1vaRDADwCKA14n/TtWCQdptCeOEKiT/h2rhIM02hNHCLiAAYHFYDAYFKXp6DAIAAAAAAAAjrkSIMxcvxyzEiIzBwBpzgwAxKziHvPeC0tKSpQiASXIqJGCqD3LGxJf+ww1+tXYZ9DS+0Wz1BrX87IlWvBVXrWo1ZwdV7QjHP1zLi7FXS81NWsU6dzxo9uk7D6ZluuV/0kYyl95CQk+2d25mW3yCgUAVwFVIABgAF4n/TX2nxFmOjhAnfTX2H9GmOngAJZFFQwGZUwp/TAMAAAAAJVbGaRKpLlmbaQBIkcAqpE9U6NEqQLMerrqeUEm6SDVRnoJIiVNaFtUJ5FWRAa30mDLCl/XekJtj4tVEp3dohdR0lPKtF+kta1jc+rC4TUXJecOobKqIKDvv3EaRtSC7Q6nTaCgv2Liwkq5z3BVb9X12XQKgOKaAkIGHAA+J/3dy8dKsx0cYE76u5ePlWY7OIBSSRkMxhQ9pUEQBAAAAADjZFqikD23WZqoYjIdAcjIkj0aEHTCQX+yGTEqenimJbh6+Du8cjT+gs9y3K0TATTR18qROIdnZMc8Oih60ngjLTL9KZO+tS88iVsBDS4r1P+9wrkaUPk4Z5KlZz7Onfl14WyyQsTibwQHflpVNgAZWgAQQAFeJ/13Tv88MwocYaFO+u+c/nlmFDjCgmU0AGVQStGj6TAIAABgwjUBgGEAQERzNASNJLdJNHKNKpGZLRGgrmVTcOnvgnxWKjIlMkJRChP/ekp/4ggAa76F5b4EQT+d62tjnF3xS2mMRFYt4GUqWnorTCmpZ2vSrOfqud/rwqK344MvszPGtl6anJ2v1mnkDJSjRU34WmYUJTBxIGAAaABeJ/171u8ojTZwRIdDnfTvWb+jNNrAER0OCqWCwaDpfzAMAAAAADKT0hsvX6HW2M4YZg4AkZk9QIjAoC2SaWkjq1LrglHc767qlnZdnPvk/TVusjzq16TUQnrPv81duVKACjJxpr2uN7/tcy/hCSN0bSSeoaqebku/8o8rjhV19N/KbDdiZ2Oa9xXYvW3Mqha+njbw+424DBiAAICgCiheJ/1zlC/SAAeok/45yhdpgAOQtRCDwYhQ9IdBAAAAAOBARtHMZhclGpGRU9qghNw0FaoBGtFXNH2dF18GKWdzywgq2Zu6sBTsAVJIIn+8BTIW2yqXVkdrVNecOoiYNcvxHhbiagm+jv++RvUzaEDUG+mqpjWRqTe6WrVj0wTqLeUmKm2/4uBNY1Z27/E2HxoO4OCAARmgAV4n/b3tX6QCNlAn/b3tX6QCNkAmINEQg4GmlJ4ehmEAAJAXITweZLgA0HFVy0yaGFXG6SQMtKlg28TCVxFC1KfXt1CpWgiYzzT6B72Y1C5qv/116J/fJp/0yqv47HYRK6RIZKOVlalScSLrewBE2gX3J8HEZZ9bSaRq86vtGpPJ1/EZh/wdQrQy3CjMiBqfwwEoGBrguAYKAQBeJ/116R/UAAeok/669A9qgANoTAaliE7po2EYAAAAAOiMwTgzjU4Nowx77U3LiMmkEamWcCa0gHL+qCuLNv7DpTuLkXsiWvUvIj8jzHfQn4fu1V9bkezFjZsXU5KX+GLotdq4Hal6wPQ803Vv9kWAWIwsWfA3J8ucL0hUmknecvKfb56iE7vgxN2fr9H8ttAhoIDgIAfgAAReJ/19jl9QwAbqpL/P8QsK2ACZwAZMBgMhmY4QHQ2CAAAAjskDmOtxBWYAwLvFSpegM4cUERTIja8D4EwP0gWHqamjHwgpvSQ80V22bi9aMclURIuIJqNbg1R0H5hiZV3T1Qa9WCrC204odrpCpEOo7sP6EPwzRFVN53RrmkoZcq19inWq/YW1slwSWbbFoWwDzUHLgIBAA0AAXif97yxfugBuoE7631m+dAHcAAgAwAEABgEAAAAAAAAAAACKBKAcAAfAM5sAYMNBAAA=';\n\nexport const base64PlaceholderAvatarImage =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPZSURBVHhe7Zs9aNVQGIZvioODQwdHCxUqdHBQtNihg4NLQdCigg6CoKKiNS4dnKRDcXBpEaHSggWFLg4WBBcHBwdLCzo4FBQs2NHBoYODcH2fnOQ2iUnvT27uvcnpA29Ozh3afG++85OTE6darVZyxXEP6XhSOiUNS4NSv1+G2ZR+++WGtCqtV6pzWypzIx8DHHdUx3PSRWmInzLwXXotrciMT94vbaR9Bjgud/WadEviTucBmfFcWpIZZEtmshtgAn8guRLnnYDg56TZrEZkM8Bxb+j4WDro1TvPL+mhTFg01eZpzQDHpV0vSKe9evf5IN2UEfQXTdHnl43juJd1XJN6JXjgWtb8a2uKxjPAcffp+ESivfcys9KUsuGvqe5OYwaY4JclhrUiwLB5pRET6htQvOAD3kiX6pmwex9Q3ODhvLTsx5BKvU6QNl/E4AO4dmJIJb0JmB6Vu18GrqopvPLPIyQbYMZ5hrpOzezyZls6njRPSGsCTHLKEjwckF6Y0yj/G2Cmt700yWkXY4rtnn9eI9oEzIPNN6lbc/u84dnhiJpC7QEqngHM8soaPBBbZCa7kwHm7v+QytT2k+DuHw6yIJwBLGaUPXggxtvmNGoAKzm2cN0vfQPMGl5ey1i9yJBiHuMkyAAWMG3jAofAgCLP91uFhyWNApX7rNv/pGIhA2QALy1sZRQDeGNjKycwwKbeP84wBsTf0dnEIAbYMPtLo38vA/wTa9kzwC+tBQPYkWErmxiQ6f16wdneywAdmn6nXiI2MIDdWLayigHr5txK1vsq1Tn6ABv7gU1iJwPgrV/ahBdzYMCKX9qEF3P4xQjLYiyP2cCW0n+AkyAD4Jlf2kAt1rAB85INs8I/ErF67Bhg3pUtmUqpmQ/eC0I4A2BaKnMWEBsx1ogaYJyZMZVSMhO++xDPAGCnZRlnh18kYouQtkmKpfLP0n6vXnzo+EZ097+a6g5JGUBT4MOESVMpBZNJwUOyAWD24Le8D7+HWPRjSSTdAMMdiY3HRYX5PjGkktwHhHFc9ti9k7wNBQXiozSuu88myVTqZQBNgT8wLhXpiZFrrRs81DcAzB+akIrQJ3CNE40ED/WbQByzk/Sp1GtDJEMdvX1TN6l5A8Bxj+r4Ujrm1bsPkxx2hCcOdbvRWBOIY/7RiDQldfPZgf/NNSROchqhtQwIY3aYPpLYfNipZhE80k4r8Ew3ILsBAcYITLgr5bWyxIfULGZEHmmz0D4DwjjuGR3Ze3hWyrr/gBVrhjU+nn7v/dJG8jEgjONiQPzzeSZXcWMIlKGLMvz5fI5L9pXKP+lVHvxHrr8zAAAAAElFTkSuQmCC';\n\nexport const fa5IconsList = [ 'fas fa-ad','fas fa-address-book','fas fa-address-card','fas fa-adjust','fas fa-air-freshener','fas fa-align-center','fas fa-align-justify','fas fa-align-left','fas fa-align-right','fas fa-allergies','fas fa-ambulance','fas fa-american-sign-language-interpreting','fas fa-anchor','fas fa-angle-double-down','fas fa-angle-double-left','fas fa-angle-double-right','fas fa-angle-double-up','fas fa-angle-down','fas fa-angle-left','fas fa-angle-right','fas fa-angle-up','fas fa-angry','fas fa-ankh','fas fa-apple-alt','fas fa-archive','fas fa-archway','fas fa-arrow-alt-circle-down','fas fa-arrow-alt-circle-left','fas fa-arrow-alt-circle-right','fas fa-arrow-alt-circle-up','fas fa-arrow-circle-down','fas fa-arrow-circle-left','fas fa-arrow-circle-right','fas fa-arrow-circle-up','fas fa-arrow-down','fas fa-arrow-left','fas fa-arrow-right','fas fa-arrow-up','fas fa-arrows-alt','fas fa-arrows-alt-h','fas fa-arrows-alt-v','fas fa-assistive-listening-systems','fas fa-asterisk','fas fa-at','fas fa-atlas','fas fa-atom','fas fa-audio-description','fas fa-award','fas fa-baby','fas fa-baby-carriage','fas fa-backspace','fas fa-backward','fas fa-bacon','fas fa-bahai','fas fa-balance-scale','fas fa-balance-scale-left','fas fa-balance-scale-right','fas fa-ban','fas fa-band-aid','fas fa-barcode','fas fa-bars','fas fa-baseball-ball','fas fa-basketball-ball','fas fa-bath','fas fa-battery-empty','fas fa-battery-full','fas fa-battery-half','fas fa-battery-quarter','fas fa-battery-three-quarters','fas fa-bed','fas fa-beer','fas fa-bell','fas fa-bell-slash','fas fa-bezier-curve','fas fa-bible','fas fa-bicycle','fas fa-biking','fas fa-binoculars','fas fa-biohazard','fas fa-birthday-cake','fas fa-blender','fas fa-blender-phone','fas fa-blind','fas fa-blog','fas fa-bold','fas fa-bolt','fas fa-bomb','fas fa-bone','fas fa-bong','fas fa-book','fas fa-book-dead','fas fa-book-medical','fas fa-book-open','fas fa-book-reader','fas fa-bookmark','fas fa-border-all','fas fa-border-none','fas fa-border-style','fas fa-bowling-ball','fas fa-box','fas fa-box-open','fas fa-boxes','fas fa-braille','fas fa-brain','fas fa-bread-slice','fas fa-briefcase','fas fa-briefcase-medical','fas fa-broadcast-tower','fas fa-broom','fas fa-brush','fas fa-bug','fas fa-building','fas fa-bullhorn','fas fa-bullseye','fas fa-burn','fas fa-bus','fas fa-bus-alt','fas fa-business-time','fas fa-calculator','fas fa-calendar','fas fa-calendar-alt','fas fa-calendar-check','fas fa-calendar-day','fas fa-calendar-minus','fas fa-calendar-plus','fas fa-calendar-times','fas fa-calendar-week','fas fa-camera','fas fa-camera-retro','fas fa-campground','fas fa-candy-cane','fas fa-cannabis','fas fa-capsules','fas fa-car','fas fa-car-alt','fas fa-car-battery','fas fa-car-crash','fas fa-car-side','fas fa-caravan','fas fa-caret-down','fas fa-caret-left','fas fa-caret-right','fas fa-caret-square-down','fas fa-caret-square-left','fas fa-caret-square-right','fas fa-caret-square-up','fas fa-caret-up','fas fa-carrot','fas fa-cart-arrow-down','fas fa-cart-plus','fas fa-cash-register','fas fa-cat','fas fa-certificate','fas fa-chair','fas fa-chalkboard','fas fa-chalkboard-teacher','fas fa-charging-station','fas fa-chart-area','fas fa-chart-bar','fas fa-chart-line','fas fa-chart-pie','fas fa-check','fas fa-check-circle','fas fa-check-double','fas fa-check-square','fas fa-cheese','fas fa-chess','fas fa-chess-bishop','fas fa-chess-board','fas fa-chess-king','fas fa-chess-knight','fas fa-chess-pawn','fas fa-chess-queen','fas fa-chess-rook','fas fa-chevron-circle-down','fas fa-chevron-circle-left','fas fa-chevron-circle-right','fas fa-chevron-circle-up','fas fa-chevron-down','fas fa-chevron-left','fas fa-chevron-right','fas fa-chevron-up','fas fa-child','fas fa-church','fas fa-circle','fas fa-circle-notch','fas fa-city','fas fa-clinic-medical','fas fa-clipboard','fas fa-clipboard-check','fas fa-clipboard-list','fas fa-clock','fas fa-clone','fas fa-closed-captioning','fas fa-cloud','fas fa-cloud-download-alt','fas fa-cloud-meatball','fas fa-cloud-moon','fas fa-cloud-moon-rain','fas fa-cloud-rain','fas fa-cloud-showers-heavy','fas fa-cloud-sun','fas fa-cloud-sun-rain','fas fa-cloud-upload-alt','fas fa-cocktail','fas fa-code','fas fa-code-branch','fas fa-coffee','fas fa-cog','fas fa-cogs','fas fa-coins','fas fa-columns','fas fa-comment','fas fa-comment-alt','fas fa-comment-dollar','fas fa-comment-dots','fas fa-comment-medical','fas fa-comment-slash','fas fa-comments','fas fa-comments-dollar','fas fa-compact-disc','fas fa-compass','fas fa-compress','fas fa-compress-alt','fas fa-compress-arrows-alt','fas fa-concierge-bell','fas fa-cookie','fas fa-cookie-bite','fas fa-copy','fas fa-copyright','fas fa-couch','fas fa-credit-card','fas fa-crop','fas fa-crop-alt','fas fa-cross','fas fa-crosshairs','fas fa-crow','fas fa-crown','fas fa-crutch','fas fa-cube','fas fa-cubes','fas fa-cut','fas fa-database','fas fa-deaf','fas fa-democrat','fas fa-desktop','fas fa-dharmachakra','fas fa-diagnoses','fas fa-dice','fas fa-dice-d20','fas fa-dice-d6','fas fa-dice-five','fas fa-dice-four','fas fa-dice-one','fas fa-dice-six','fas fa-dice-three','fas fa-dice-two','fas fa-digital-tachograph','fas fa-directions','fas fa-divide','fas fa-dizzy','fas fa-dna','fas fa-dog','fas fa-dollar-sign','fas fa-dolly','fas fa-dolly-flatbed','fas fa-donate','fas fa-door-closed','fas fa-door-open','fas fa-dot-circle','fas fa-dove','fas fa-download','fas fa-drafting-compass','fas fa-dragon','fas fa-draw-polygon','fas fa-drum','fas fa-drum-steelpan','fas fa-drumstick-bite','fas fa-dumbbell','fas fa-dumpster','fas fa-dumpster-fire','fas fa-dungeon','fas fa-edit','fas fa-egg','fas fa-eject','fas fa-ellipsis-h','fas fa-ellipsis-v','fas fa-envelope','fas fa-envelope-open','fas fa-envelope-open-text','fas fa-envelope-square','fas fa-equals','fas fa-eraser','fas fa-ethernet','fas fa-euro-sign','fas fa-exchange-alt','fas fa-exclamation','fas fa-exclamation-circle','fas fa-exclamation-triangle','fas fa-expand','fas fa-expand-alt','fas fa-expand-arrows-alt','fas fa-external-link-alt','fas fa-external-link-square-alt','fas fa-eye','fas fa-eye-dropper','fas fa-eye-slash','fas fa-fan','fas fa-fast-backward','fas fa-fast-forward','fas fa-fax','fas fa-feather','fas fa-feather-alt','fas fa-female','fas fa-fighter-jet','fas fa-file','fas fa-file-alt','fas fa-file-archive','fas fa-file-audio','fas fa-file-code','fas fa-file-contract','fas fa-file-csv','fas fa-file-download','fas fa-file-excel','fas fa-file-export','fas fa-file-image','fas fa-file-import','fas fa-file-invoice','fas fa-file-invoice-dollar','fas fa-file-medical','fas fa-file-medical-alt','fas fa-file-pdf','fas fa-file-powerpoint','fas fa-file-prescription','fas fa-file-signature','fas fa-file-upload','fas fa-file-video','fas fa-file-word','fas fa-fill','fas fa-fill-drip','fas fa-film','fas fa-filter','fas fa-fingerprint','fas fa-fire','fas fa-fire-alt','fas fa-fire-extinguisher','fas fa-first-aid','fas fa-fish','fas fa-fist-raised','fas fa-flag','fas fa-flag-checkered','fas fa-flag-usa','fas fa-flask','fas fa-flushed','fas fa-folder','fas fa-folder-minus','fas fa-folder-open','fas fa-folder-plus','fas fa-font','fas fa-football-ball','fas fa-forward','fas fa-frog','fas fa-frown','fas fa-frown-open','fas fa-funnel-dollar','fas fa-futbol','fas fa-gamepad','fas fa-gas-pump','fas fa-gavel','fas fa-gem','fas fa-genderless','fas fa-ghost','fas fa-gift','fas fa-gifts','fas fa-glass-cheers','fas fa-glass-martini','fas fa-glass-martini-alt','fas fa-glass-whiskey','fas fa-glasses','fas fa-globe','fas fa-globe-africa','fas fa-globe-americas','fas fa-globe-asia','fas fa-globe-europe','fas fa-golf-ball','fas fa-gopuram','fas fa-graduation-cap','fas fa-greater-than','fas fa-greater-than-equal','fas fa-grimace','fas fa-grin','fas fa-grin-alt','fas fa-grin-beam','fas fa-grin-beam-sweat','fas fa-grin-hearts','fas fa-grin-squint','fas fa-grin-squint-tears','fas fa-grin-stars','fas fa-grin-tears','fas fa-grin-tongue','fas fa-grin-tongue-squint','fas fa-grin-tongue-wink','fas fa-grin-wink','fas fa-grip-horizontal','fas fa-grip-lines','fas fa-grip-lines-vertical','fas fa-grip-vertical','fas fa-guitar','fas fa-h-square','fas fa-hamburger','fas fa-hammer','fas fa-hamsa','fas fa-hand-holding','fas fa-hand-holding-heart','fas fa-hand-holding-usd','fas fa-hand-lizard','fas fa-hand-middle-finger','fas fa-hand-paper','fas fa-hand-peace','fas fa-hand-point-down','fas fa-hand-point-left','fas fa-hand-point-right','fas fa-hand-point-up','fas fa-hand-pointer','fas fa-hand-rock','fas fa-hand-scissors','fas fa-hand-spock','fas fa-hands','fas fa-hands-helping','fas fa-handshake','fas fa-hanukiah','fas fa-hard-hat','fas fa-hashtag','fas fa-hat-cowboy','fas fa-hat-cowboy-side','fas fa-hat-wizard','fas fa-hdd','fas fa-heading','fas fa-headphones','fas fa-headphones-alt','fas fa-headset','fas fa-heart','fas fa-heart-broken','fas fa-heartbeat','fas fa-helicopter','fas fa-highlighter','fas fa-hiking','fas fa-hippo','fas fa-history','fas fa-hockey-puck','fas fa-holly-berry','fas fa-home','fas fa-horse','fas fa-horse-head','fas fa-hospital','fas fa-hospital-alt','fas fa-hospital-symbol','fas fa-hot-tub','fas fa-hotdog','fas fa-hotel','fas fa-hourglass','fas fa-hourglass-end','fas fa-hourglass-half','fas fa-hourglass-start','fas fa-house-damage','fas fa-hryvnia','fas fa-i-cursor','fas fa-ice-cream','fas fa-icicles','fas fa-icons','fas fa-id-badge','fas fa-id-card','fas fa-id-card-alt','fas fa-igloo','fas fa-image','fas fa-images','fas fa-inbox','fas fa-indent','fas fa-industry','fas fa-infinity','fas fa-info','fas fa-info-circle','fas fa-italic','fas fa-jedi','fas fa-joint','fas fa-journal-whills','fas fa-kaaba','fas fa-key','fas fa-keyboard','fas fa-khanda','fas fa-kiss','fas fa-kiss-beam','fas fa-kiss-wink-heart','fas fa-kiwi-bird','fas fa-landmark','fas fa-language','fas fa-laptop','fas fa-laptop-code','fas fa-laptop-medical','fas fa-laugh','fas fa-laugh-beam','fas fa-laugh-squint','fas fa-laugh-wink','fas fa-layer-group','fas fa-leaf','fas fa-lemon','fas fa-less-than','fas fa-less-than-equal','fas fa-level-down-alt','fas fa-level-up-alt','fas fa-life-ring','fas fa-lightbulb','fas fa-link','fas fa-lira-sign','fas fa-list','fas fa-list-alt','fas fa-list-ol','fas fa-list-ul','fas fa-location-arrow','fas fa-lock','fas fa-lock-open','fas fa-long-arrow-alt-down','fas fa-long-arrow-alt-left','fas fa-long-arrow-alt-right','fas fa-long-arrow-alt-up','fas fa-low-vision','fas fa-luggage-cart','fas fa-magic','fas fa-magnet','fas fa-mail-bulk','fas fa-male','fas fa-map','fas fa-map-marked','fas fa-map-marked-alt','fas fa-map-marker','fas fa-map-marker-alt','fas fa-map-pin','fas fa-map-signs','fas fa-marker','fas fa-mars','fas fa-mars-double','fas fa-mars-stroke','fas fa-mars-stroke-h','fas fa-mars-stroke-v','fas fa-mask','fas fa-medal','fas fa-medkit','fas fa-meh','fas fa-meh-blank','fas fa-meh-rolling-eyes','fas fa-memory','fas fa-menorah','fas fa-mercury','fas fa-meteor','fas fa-microchip','fas fa-microphone','fas fa-microphone-alt','fas fa-microphone-alt-slash','fas fa-microphone-slash','fas fa-microscope','fas fa-minus','fas fa-minus-circle','fas fa-minus-square','fas fa-mitten','fas fa-mobile','fas fa-mobile-alt','fas fa-money-bill','fas fa-money-bill-alt','fas fa-money-bill-wave','fas fa-money-bill-wave-alt','fas fa-money-check','fas fa-money-check-alt','fas fa-monument','fas fa-moon','fas fa-mortar-pestle','fas fa-mosque','fas fa-motorcycle','fas fa-mountain','fas fa-mouse','fas fa-mouse-pointer','fas fa-mug-hot','fas fa-music','fas fa-network-wired','fas fa-neuter','fas fa-newspaper','fas fa-not-equal','fas fa-notes-medical','fas fa-object-group','fas fa-object-ungroup','fas fa-oil-can','fas fa-om','fas fa-otter','fas fa-outdent','fas fa-pager','fas fa-paint-brush','fas fa-paint-roller','fas fa-palette','fas fa-pallet','fas fa-paper-plane','fas fa-paperclip','fas fa-parachute-box','fas fa-paragraph','fas fa-parking','fas fa-passport','fas fa-pastafarianism','fas fa-paste','fas fa-pause','fas fa-pause-circle','fas fa-paw','fas fa-peace','fas fa-pen','fas fa-pen-alt','fas fa-pen-fancy','fas fa-pen-nib','fas fa-pen-square','fas fa-pencil-alt','fas fa-pencil-ruler','fas fa-people-carry','fas fa-pepper-hot','fas fa-percent','fas fa-percentage','fas fa-person-booth','fas fa-phone','fas fa-phone-alt','fas fa-phone-slash','fas fa-phone-square','fas fa-phone-square-alt','fas fa-phone-volume','fas fa-photo-video','fas fa-piggy-bank','fas fa-pills','fas fa-pizza-slice','fas fa-place-of-worship','fas fa-plane','fas fa-plane-arrival','fas fa-plane-departure','fas fa-play','fas fa-play-circle','fas fa-plug','fas fa-plus','fas fa-plus-circle','fas fa-plus-square','fas fa-podcast','fas fa-poll','fas fa-poll-h','fas fa-poo','fas fa-poo-storm','fas fa-poop','fas fa-portrait','fas fa-pound-sign','fas fa-power-off','fas fa-pray','fas fa-praying-hands','fas fa-prescription','fas fa-prescription-bottle','fas fa-prescription-bottle-alt','fas fa-print','fas fa-procedures','fas fa-project-diagram','fas fa-puzzle-piece','fas fa-qrcode','fas fa-question','fas fa-question-circle','fas fa-quidditch','fas fa-quote-left','fas fa-quote-right','fas fa-quran','fas fa-radiation','fas fa-radiation-alt','fas fa-rainbow','fas fa-random','fas fa-receipt','fas fa-record-vinyl','fas fa-recycle','fas fa-redo','fas fa-redo-alt','fas fa-registered','fas fa-remove-format','fas fa-reply','fas fa-reply-all','fas fa-republican','fas fa-restroom','fas fa-retweet','fas fa-ribbon','fas fa-ring','fas fa-road','fas fa-robot','fas fa-rocket','fas fa-route','fas fa-rss','fas fa-rss-square','fas fa-ruble-sign','fas fa-ruler','fas fa-ruler-combined','fas fa-ruler-horizontal','fas fa-ruler-vertical','fas fa-running','fas fa-rupee-sign','fas fa-sad-cry','fas fa-sad-tear','fas fa-satellite','fas fa-satellite-dish','fas fa-save','fas fa-school','fas fa-screwdriver','fas fa-scroll','fas fa-sd-card','fas fa-search','fas fa-search-dollar','fas fa-search-location','fas fa-search-minus','fas fa-search-plus','fas fa-seedling','fas fa-server','fas fa-shapes','fas fa-share','fas fa-share-alt','fas fa-share-alt-square','fas fa-share-square','fas fa-shekel-sign','fas fa-shield-alt','fas fa-ship','fas fa-shipping-fast','fas fa-shoe-prints','fas fa-shopping-bag','fas fa-shopping-basket','fas fa-shopping-cart','fas fa-shower','fas fa-shuttle-van','fas fa-sign','fas fa-sign-in-alt','fas fa-sign-language','fas fa-sign-out-alt','fas fa-signal','fas fa-signature','fas fa-sim-card','fas fa-sitemap','fas fa-skating','fas fa-skiing','fas fa-skiing-nordic','fas fa-skull','fas fa-skull-crossbones','fas fa-slash','fas fa-sleigh','fas fa-sliders-h','fas fa-smile','fas fa-smile-beam','fas fa-smile-wink','fas fa-smog','fas fa-smoking','fas fa-smoking-ban','fas fa-sms','fas fa-snowboarding','fas fa-snowflake','fas fa-snowman','fas fa-snowplow','fas fa-socks','fas fa-solar-panel','fas fa-sort','fas fa-sort-alpha-down','fas fa-sort-alpha-down-alt','fas fa-sort-alpha-up','fas fa-sort-alpha-up-alt','fas fa-sort-amount-down','fas fa-sort-amount-down-alt','fas fa-sort-amount-up','fas fa-sort-amount-up-alt','fas fa-sort-down','fas fa-sort-numeric-down','fas fa-sort-numeric-down-alt','fas fa-sort-numeric-up','fas fa-sort-numeric-up-alt','fas fa-sort-up','fas fa-spa','fas fa-space-shuttle','fas fa-spell-check','fas fa-spider','fas fa-spinner','fas fa-splotch','fas fa-spray-can','fas fa-square','fas fa-square-full','fas fa-square-root-alt','fas fa-stamp','fas fa-star','fas fa-star-and-crescent','fas fa-star-half','fas fa-star-half-alt','fas fa-star-of-david','fas fa-star-of-life','fas fa-step-backward','fas fa-step-forward','fas fa-stethoscope','fas fa-sticky-note','fas fa-stop','fas fa-stop-circle','fas fa-stopwatch','fas fa-store','fas fa-store-alt','fas fa-stream','fas fa-street-view','fas fa-strikethrough','fas fa-stroopwafel','fas fa-subscript','fas fa-subway','fas fa-suitcase','fas fa-suitcase-rolling','fas fa-sun','fas fa-superscript','fas fa-surprise','fas fa-swatchbook','fas fa-swimmer','fas fa-swimming-pool','fas fa-synagogue','fas fa-sync','fas fa-sync-alt','fas fa-syringe','fas fa-table','fas fa-table-tennis','fas fa-tablet','fas fa-tablet-alt','fas fa-tablets','fas fa-tachometer-alt','fas fa-tag','fas fa-tags','fas fa-tape','fas fa-tasks','fas fa-taxi','fas fa-teeth','fas fa-teeth-open','fas fa-temperature-high','fas fa-temperature-low','fas fa-tenge','fas fa-terminal','fas fa-text-height','fas fa-text-width','fas fa-th','fas fa-th-large','fas fa-th-list','fas fa-theater-masks','fas fa-thermometer','fas fa-thermometer-empty','fas fa-thermometer-full','fas fa-thermometer-half','fas fa-thermometer-quarter','fas fa-thermometer-three-quarters','fas fa-thumbs-down','fas fa-thumbs-up','fas fa-thumbtack','fas fa-ticket-alt','fas fa-times','fas fa-times-circle','fas fa-tint','fas fa-tint-slash','fas fa-tired','fas fa-toggle-off','fas fa-toggle-on','fas fa-toilet','fas fa-toilet-paper','fas fa-toolbox','fas fa-tools','fas fa-tooth','fas fa-torah','fas fa-torii-gate','fas fa-tractor','fas fa-trademark','fas fa-traffic-light','fas fa-trailer','fas fa-train','fas fa-tram','fas fa-transgender','fas fa-transgender-alt','fas fa-trash','fas fa-trash-alt','fas fa-trash-restore','fas fa-trash-restore-alt','fas fa-tree','fas fa-trophy','fas fa-truck','fas fa-truck-loading','fas fa-truck-monster','fas fa-truck-moving','fas fa-truck-pickup','fas fa-tshirt','fas fa-tty','fas fa-tv','fas fa-umbrella','fas fa-umbrella-beach','fas fa-underline','fas fa-undo','fas fa-undo-alt','fas fa-universal-access','fas fa-university','fas fa-unlink','fas fa-unlock','fas fa-unlock-alt','fas fa-upload','fas fa-user','fas fa-user-alt','fas fa-user-alt-slash','fas fa-user-astronaut','fas fa-user-check','fas fa-user-circle','fas fa-user-clock','fas fa-user-cog','fas fa-user-edit','fas fa-user-friends','fas fa-user-graduate','fas fa-user-injured','fas fa-user-lock','fas fa-user-md','fas fa-user-minus','fas fa-user-ninja','fas fa-user-nurse','fas fa-user-plus','fas fa-user-secret','fas fa-user-shield','fas fa-user-slash','fas fa-user-tag','fas fa-user-tie','fas fa-user-times','fas fa-users','fas fa-users-cog','fas fa-utensil-spoon','fas fa-utensils','fas fa-vector-square','fas fa-venus','fas fa-venus-double','fas fa-venus-mars','fas fa-vial','fas fa-vials','fas fa-video','fas fa-video-slash','fas fa-vihara','fas fa-voicemail','fas fa-volleyball-ball','fas fa-volume-down','fas fa-volume-mute','fas fa-volume-off','fas fa-volume-up','fas fa-vote-yea','fas fa-vr-cardboard','fas fa-walking','fas fa-wallet','fas fa-warehouse','fas fa-water','fas fa-wave-square','fas fa-weight','fas fa-weight-hanging','fas fa-wheelchair','fas fa-wifi','fas fa-wind','fas fa-window-close','fas fa-window-maximize','fas fa-window-minimize','fas fa-window-restore','fas fa-wine-bottle','fas fa-wine-glass','fas fa-wine-glass-alt','fas fa-won-sign','fas fa-wrench','fas fa-x-ray','fas fa-yen-sign','fas fa-yin-yang','far fa-address-book','far fa-address-card','far fa-angry','far fa-arrow-alt-circle-down','far fa-arrow-alt-circle-left','far fa-arrow-alt-circle-right','far fa-arrow-alt-circle-up','far fa-bell','far fa-bell-slash','far fa-bookmark','far fa-building','far fa-calendar','far fa-calendar-alt','far fa-calendar-check','far fa-calendar-minus','far fa-calendar-plus','far fa-calendar-times','far fa-caret-square-down','far fa-caret-square-left','far fa-caret-square-right','far fa-caret-square-up','far fa-chart-bar','far fa-check-circle','far fa-check-square','far fa-circle','far fa-clipboard','far fa-clock','far fa-clone','far fa-closed-captioning','far fa-comment','far fa-comment-alt','far fa-comment-dots','far fa-comments','far fa-compass','far fa-copy','far fa-copyright','far fa-credit-card','far fa-dizzy','far fa-dot-circle','far fa-edit','far fa-envelope','far fa-envelope-open','far fa-eye','far fa-eye-slash','far fa-file','far fa-file-alt','far fa-file-archive','far fa-file-audio','far fa-file-code','far fa-file-excel','far fa-file-image','far fa-file-pdf','far fa-file-powerpoint','far fa-file-video','far fa-file-word','far fa-flag','far fa-flushed','far fa-folder','far fa-folder-open','far fa-frown','far fa-frown-open','far fa-futbol','far fa-gem','far fa-grimace','far fa-grin','far fa-grin-alt','far fa-grin-beam','far fa-grin-beam-sweat','far fa-grin-hearts','far fa-grin-squint','far fa-grin-squint-tears','far fa-grin-stars','far fa-grin-tears','far fa-grin-tongue','far fa-grin-tongue-squint','far fa-grin-tongue-wink','far fa-grin-wink','far fa-hand-lizard','far fa-hand-paper','far fa-hand-peace','far fa-hand-point-down','far fa-hand-point-left','far fa-hand-point-right','far fa-hand-point-up','far fa-hand-pointer','far fa-hand-rock','far fa-hand-scissors','far fa-hand-spock','far fa-handshake','far fa-hdd','far fa-heart','far fa-hospital','far fa-hourglass','far fa-id-badge','far fa-id-card','far fa-image','far fa-images','far fa-keyboard','far fa-kiss','far fa-kiss-beam','far fa-kiss-wink-heart','far fa-laugh','far fa-laugh-beam','far fa-laugh-squint','far fa-laugh-wink','far fa-lemon','far fa-life-ring','far fa-lightbulb','far fa-list-alt','far fa-map','far fa-meh','far fa-meh-blank','far fa-meh-rolling-eyes','far fa-minus-square','far fa-money-bill-alt','far fa-moon','far fa-newspaper','far fa-object-group','far fa-object-ungroup','far fa-paper-plane','far fa-pause-circle','far fa-play-circle','far fa-plus-square','far fa-question-circle','far fa-registered','far fa-sad-cry','far fa-sad-tear','far fa-save','far fa-share-square','far fa-smile','far fa-smile-beam','far fa-smile-wink','far fa-snowflake','far fa-square','far fa-star','far fa-star-half','far fa-sticky-note','far fa-stop-circle','far fa-sun','far fa-surprise','far fa-thumbs-down','far fa-thumbs-up','far fa-times-circle','far fa-tired','far fa-trash-alt','far fa-user','far fa-user-circle','far fa-window-close','far fa-window-maximize','far fa-window-minimize','far fa-window-restore','fab fa-500px','fab fa-accessible-icon','fab fa-accusoft','fab fa-acquisitions-incorporated','fab fa-adn','fab fa-adobe','fab fa-adversal','fab fa-affiliatetheme','fab fa-airbnb','fab fa-algolia','fab fa-alipay','fab fa-amazon','fab fa-amazon-pay','fab fa-amilia','fab fa-android','fab fa-angellist','fab fa-angrycreative','fab fa-angular','fab fa-app-store','fab fa-app-store-ios','fab fa-apper','fab fa-apple','fab fa-apple-pay','fab fa-artstation','fab fa-asymmetrik','fab fa-atlassian','fab fa-audible','fab fa-autoprefixer','fab fa-avianex','fab fa-aviato','fab fa-aws','fab fa-bandcamp','fab fa-battle-net','fab fa-behance','fab fa-behance-square','fab fa-bimobject','fab fa-bitbucket','fab fa-bitcoin','fab fa-bity','fab fa-black-tie','fab fa-blackberry','fab fa-blogger','fab fa-blogger-b','fab fa-bluetooth','fab fa-bluetooth-b','fab fa-bootstrap','fab fa-btc','fab fa-buffer','fab fa-buromobelexperte','fab fa-buy-n-large','fab fa-buysellads','fab fa-canadian-maple-leaf','fab fa-cc-amazon-pay','fab fa-cc-amex','fab fa-cc-apple-pay','fab fa-cc-diners-club','fab fa-cc-discover','fab fa-cc-jcb','fab fa-cc-mastercard','fab fa-cc-paypal','fab fa-cc-stripe','fab fa-cc-visa','fab fa-centercode','fab fa-centos','fab fa-chrome','fab fa-chromecast','fab fa-cloudscale','fab fa-cloudsmith','fab fa-cloudversify','fab fa-codepen','fab fa-codiepie','fab fa-confluence','fab fa-connectdevelop','fab fa-contao','fab fa-cotton-bureau','fab fa-cpanel','fab fa-creative-commons','fab fa-creative-commons-by','fab fa-creative-commons-nc','fab fa-creative-commons-nc-eu','fab fa-creative-commons-nc-jp','fab fa-creative-commons-nd','fab fa-creative-commons-pd','fab fa-creative-commons-pd-alt','fab fa-creative-commons-remix','fab fa-creative-commons-sa','fab fa-creative-commons-sampling','fab fa-creative-commons-sampling-plus','fab fa-creative-commons-share','fab fa-creative-commons-zero','fab fa-critical-role','fab fa-css3','fab fa-css3-alt','fab fa-cuttlefish','fab fa-d-and-d','fab fa-d-and-d-beyond','fab fa-dailymotion','fab fa-dashcube','fab fa-delicious','fab fa-deploydog','fab fa-deskpro','fab fa-dev','fab fa-deviantart','fab fa-dhl','fab fa-diaspora','fab fa-digg','fab fa-digital-ocean','fab fa-discord','fab fa-discourse','fab fa-dochub','fab fa-docker','fab fa-draft2digital','fab fa-dribbble','fab fa-dribbble-square','fab fa-dropbox','fab fa-drupal','fab fa-dyalog','fab fa-earlybirds','fab fa-ebay','fab fa-edge','fab fa-elementor','fab fa-ello','fab fa-ember','fab fa-empire','fab fa-envira','fab fa-erlang','fab fa-ethereum','fab fa-etsy','fab fa-evernote','fab fa-expeditedssl','fab fa-facebook','fab fa-facebook-f','fab fa-facebook-messenger','fab fa-facebook-square','fab fa-fantasy-flight-games','fab fa-fedex','fab fa-fedora','fab fa-figma','fab fa-firefox','fab fa-firefox-browser','fab fa-first-order','fab fa-first-order-alt','fab fa-firstdraft','fab fa-flickr','fab fa-flipboard','fab fa-fly','fab fa-font-awesome','fab fa-font-awesome-alt','fab fa-font-awesome-flag','fab fa-fonticons','fab fa-fonticons-fi','fab fa-fort-awesome','fab fa-fort-awesome-alt','fab fa-forumbee','fab fa-foursquare','fab fa-free-code-camp','fab fa-freebsd','fab fa-fulcrum','fab fa-galactic-republic','fab fa-galactic-senate','fab fa-get-pocket','fab fa-gg','fab fa-gg-circle','fab fa-git','fab fa-git-alt','fab fa-git-square','fab fa-github','fab fa-github-alt','fab fa-github-square','fab fa-gitkraken','fab fa-gitlab','fab fa-gitter','fab fa-glide','fab fa-glide-g','fab fa-gofore','fab fa-goodreads','fab fa-goodreads-g','fab fa-google','fab fa-google-drive','fab fa-google-play','fab fa-google-plus','fab fa-google-plus-g','fab fa-google-plus-square','fab fa-google-wallet','fab fa-gratipay','fab fa-grav','fab fa-gripfire','fab fa-grunt','fab fa-gulp','fab fa-hacker-news','fab fa-hacker-news-square','fab fa-hackerrank','fab fa-hips','fab fa-hire-a-helper','fab fa-hooli','fab fa-hornbill','fab fa-hotjar','fab fa-houzz','fab fa-html5','fab fa-hubspot','fab fa-ideal','fab fa-imdb','fab fa-instagram','fab fa-instagram-square','fab fa-intercom','fab fa-internet-explorer','fab fa-invision','fab fa-ioxhost','fab fa-itch-io','fab fa-itunes','fab fa-itunes-note','fab fa-java','fab fa-jedi-order','fab fa-jenkins','fab fa-jira','fab fa-joget','fab fa-joomla','fab fa-js','fab fa-js-square','fab fa-jsfiddle','fab fa-kaggle','fab fa-keybase','fab fa-keycdn','fab fa-kickstarter','fab fa-kickstarter-k','fab fa-korvue','fab fa-laravel','fab fa-lastfm','fab fa-lastfm-square','fab fa-leanpub','fab fa-less','fab fa-line','fab fa-linkedin','fab fa-linkedin-in','fab fa-linode','fab fa-linux','fab fa-lyft','fab fa-magento','fab fa-mailchimp','fab fa-mandalorian','fab fa-markdown','fab fa-mastodon','fab fa-maxcdn','fab fa-mdb','fab fa-medapps','fab fa-medium','fab fa-medium-m','fab fa-medrt','fab fa-meetup','fab fa-megaport','fab fa-mendeley','fab fa-microblog','fab fa-microsoft','fab fa-mix','fab fa-mixcloud','fab fa-mixer','fab fa-mizuni','fab fa-modx','fab fa-monero','fab fa-napster','fab fa-neos','fab fa-nimblr','fab fa-node','fab fa-node-js','fab fa-npm','fab fa-ns8','fab fa-nutritionix','fab fa-odnoklassniki','fab fa-odnoklassniki-square','fab fa-old-republic','fab fa-opencart','fab fa-openid','fab fa-opera','fab fa-optin-monster','fab fa-orcid','fab fa-osi','fab fa-page4','fab fa-pagelines','fab fa-palfed','fab fa-patreon','fab fa-paypal','fab fa-penny-arcade','fab fa-periscope','fab fa-phabricator','fab fa-phoenix-framework','fab fa-phoenix-squadron','fab fa-php','fab fa-pied-piper','fab fa-pied-piper-alt','fab fa-pied-piper-hat','fab fa-pied-piper-pp','fab fa-pied-piper-square','fab fa-pinterest','fab fa-pinterest-p','fab fa-pinterest-square','fab fa-playstation','fab fa-product-hunt','fab fa-pushed','fab fa-python','fab fa-qq','fab fa-quinscape','fab fa-quora','fab fa-r-project','fab fa-raspberry-pi','fab fa-ravelry','fab fa-react','fab fa-reacteurope','fab fa-readme','fab fa-rebel','fab fa-red-river','fab fa-reddit','fab fa-reddit-alien','fab fa-reddit-square','fab fa-redhat','fab fa-renren','fab fa-replyd','fab fa-researchgate','fab fa-resolving','fab fa-rev','fab fa-rocketchat','fab fa-rockrms','fab fa-safari','fab fa-salesforce','fab fa-sass','fab fa-schlix','fab fa-scribd','fab fa-searchengin','fab fa-sellcast','fab fa-sellsy','fab fa-servicestack','fab fa-shirtsinbulk','fab fa-shopify','fab fa-shopware','fab fa-simplybuilt','fab fa-sistrix','fab fa-sith','fab fa-sketch','fab fa-skyatlas','fab fa-skype','fab fa-slack','fab fa-slack-hash','fab fa-slideshare','fab fa-snapchat','fab fa-snapchat-ghost','fab fa-snapchat-square','fab fa-soundcloud','fab fa-sourcetree','fab fa-speakap','fab fa-speaker-deck','fab fa-spotify','fab fa-squarespace','fab fa-stack-exchange','fab fa-stack-overflow','fab fa-stackpath','fab fa-staylinked','fab fa-steam','fab fa-steam-square','fab fa-steam-symbol','fab fa-sticker-mule','fab fa-strava','fab fa-stripe','fab fa-stripe-s','fab fa-studiovinari','fab fa-stumbleupon','fab fa-stumbleupon-circle','fab fa-superpowers','fab fa-supple','fab fa-suse','fab fa-swift','fab fa-symfony','fab fa-teamspeak','fab fa-telegram','fab fa-telegram-plane','fab fa-tencent-weibo','fab fa-the-red-yeti','fab fa-themeco','fab fa-themeisle','fab fa-think-peaks','fab fa-trade-federation','fab fa-trello','fab fa-tripadvisor','fab fa-tumblr','fab fa-tumblr-square','fab fa-twitch','fab fa-twitter','fab fa-twitter-square','fab fa-typo3','fab fa-uber','fab fa-ubuntu','fab fa-uikit','fab fa-umbraco','fab fa-uniregistry','fab fa-unity','fab fa-untappd','fab fa-ups','fab fa-usb','fab fa-usps','fab fa-ussunnah','fab fa-vaadin','fab fa-viacoin','fab fa-viadeo','fab fa-viadeo-square','fab fa-viber','fab fa-vimeo','fab fa-vimeo-square','fab fa-vimeo-v','fab fa-vine','fab fa-vk','fab fa-vnv','fab fa-vuejs','fab fa-waze','fab fa-weebly','fab fa-weibo','fab fa-weixin','fab fa-whatsapp','fab fa-whatsapp-square','fab fa-whmcs','fab fa-wikipedia-w','fab fa-windows','fab fa-wix','fab fa-wizards-of-the-coast','fab fa-wolf-pack-battalion','fab fa-wordpress','fab fa-wordpress-simple','fab fa-wpbeginner','fab fa-wpexplorer','fab fa-wpforms','fab fa-wpressr','fab fa-xbox','fab fa-xing','fab fa-xing-square','fab fa-y-combinator','fab fa-yahoo','fab fa-yammer','fab fa-yandex','fab fa-yandex-international','fab fa-yarn','fab fa-yelp','fab fa-yoast','fab fa-youtube','fab fa-youtube-square','fab fa-zhihu']","import Message from '../models/Message';\n\nimport Model from 'flarum/Model';\nimport Stream from 'flarum/utils/Stream';\nimport Link from 'flarum/components/Link';\n\nimport * as resources from '../resources';\nimport ViewportState from './ViewportState';\n\nvar refAudio = new Audio();\nrefAudio.src = resources.base64AudioNotificationRef;\nrefAudio.volume = 0.5;\n\nvar audio = new Audio();\naudio.src = resources.base64AudioNotification;\naudio.volume = 0.5;\n\nexport default class ChatState {\n constructor() {\n this.q = Stream('');\n this.chats = [];\n this.chatmessages = [];\n\n this.chatsLoading = true;\n this.curChat = null;\n this.totalHiddenCount = 0;\n\n let neonchatState = JSON.parse(localStorage.getItem('neonchat')) ?? {};\n\n this.frameState = {\n beingShown: neonchatState.beingShown ?? app.forum.attribute('xelson-chat.settings.display.minimize'),\n beingShownChatsList: neonchatState.beingShownChatsList ?? 0,\n isMuted: neonchatState.isMuted ?? false,\n notify: neonchatState.notify ?? false,\n transform: neonchatState.transform ?? { x: 0, y: 400 },\n isActive: true,\n selectedChat: neonchatState.selectedChat ?? 0,\n };\n\n this.permissions = {\n post: app.forum.attribute('xelson-chat.permissions.chat'),\n edit: app.forum.attribute('xelson-chat.permissions.edit'),\n delete: app.forum.attribute('xelson-chat.permissions.delete'),\n create: {\n channel: app.forum.attribute('xelson-chat.permissions.create.channel'),\n chat: app.forum.attribute('xelson-chat.permissions.create'),\n },\n moderate: {\n delete: app.forum.attribute('xelson-chat.permissions.moderate.delete'),\n vision: app.forum.attribute('xelson-chat.permissions.moderate.vision'),\n },\n };\n\n this.viewportStates = {};\n\n if (app.session.user && app.pusher) app.pusher.then(this.listenSocketChannels.bind(this));\n }\n\n getViewportState(model) {\n return this.viewportStates[model.id()];\n }\n\n listenSocketChannels(socket) {\n let channels = socket.channels;\n channels.main.bind('neonchat.events', this.handleSocketEvent.bind(this));\n if (channels.user) channels.user.bind('neonchat.events', this.handleSocketEvent.bind(this));\n }\n\n handleSocketEvent(r) {\n let message = r.response.message;\n if (message) message = app.store.pushPayload(message);\n\n let chat = r.response.chat;\n if (chat) chat = app.store.pushPayload(chat);\n\n // Workaround for blocking events from a chat we leaved\n if (message && message.chat().type() == 1 && message.chat().removed_at()) return;\n\n switch (r.event.id) {\n case 'message.post': {\n if (!app.session.user || message.user() != app.session.user) {\n this.insertChatMessage(message, true);\n m.redraw();\n }\n break;\n }\n case 'message.edit': {\n let actions = message.data.attributes.actions;\n if (app.session.user && actions.invoker == app.session.user.id()) return;\n\n if (actions.msg !== undefined) {\n if (!app.session.user || message.user() != app.session.user) this.editChatMessage(message, false, actions.msg);\n } else if (actions.hide !== undefined) {\n if (!app.session.user || actions.invoker != app.session.user.id())\n actions.hide ? this.hideChatMessage(message, false, message.deleted_by()) : this.restoreChatMessage(message, false);\n }\n break;\n }\n case 'message.delete': {\n if (!app.session.user || message.deleted_by() != app.session.user) this.deleteChatMessage(message, false, message.deleted_by());\n\n break;\n }\n case 'chat.create': {\n if (!app.session.user || chat.creator() != app.session.user) {\n this.addChat(chat, true);\n m.redraw();\n }\n break;\n }\n case 'chat.edit': {\n this.editChat(chat, true);\n let range = r.response.eventmsg_range;\n if (range.length) this.apiFetchChatMessages(chat, range, { notify: true, withFlash: true, disableLoader: true });\n\n if (app.session.user && r.response.roles_updated_for && r.response.roles_updated_for.includes(app.session.user.id())) {\n let role = app.session.user.chat_pivot(chat.id()).role();\n switch (role) {\n case 0: {\n app.alerts.show(\n { type: 'error' },\n app.translator.trans('xelson-chat.forum.chat.edit_modal.moderator.lost', { chatname: {chat.title()} })\n );\n break;\n }\n case 1: {\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('xelson-chat.forum.chat.edit_modal.moderator.got', { chatname: {chat.title()} })\n );\n break;\n }\n }\n }\n\n m.redraw();\n\n break;\n }\n case 'chat.delete': {\n if (!app.session.user || chat.creator() != app.session.user) {\n this.deleteChat(chat);\n m.redraw();\n }\n break;\n }\n }\n }\n\n getFrameState(key) {\n return this.frameState[key];\n }\n\n saveFrameState(key, value) {\n let neonchatState = JSON.parse(localStorage.getItem('neonchat')) ?? {};\n neonchatState[key] = value;\n localStorage.setItem('neonchat', JSON.stringify(neonchatState));\n\n this.frameState[key] = value;\n }\n\n getPermissions() {\n return this.permissions;\n }\n\n getChats() {\n return this.chats.filter((chat) => (this.q() && chat.matches(this.q().toLowerCase())) || (!this.q() && !chat.removed_at()));\n }\n\n getChatsSortedByLastUpdate() {\n return this.getChats().sort((a, b) => {\n if (b.last_message() && a.last_message()) {\n return b.last_message()?.created_at() - a.last_message()?.created_at();\n }\n return 0;\n });\n }\n\n addChat(model, outside = false) {\n this.chats.push(model);\n\n this.viewportStates[model.id()] = new ViewportState({ model });\n\n if (model.id() == this.getFrameState('selectedChat')) this.onChatChanged(model);\n if (outside) model.isNeedToFlash = true;\n }\n\n editChat(model, outside = false) {\n if (outside) model.isNeedToFlash = true;\n }\n\n apiReadChat(chat, message) {\n if (this.readingTimeout) clearTimeout(this.readingTimeout);\n\n let timestamp;\n if (message instanceof Date) timestamp = message.toISOString();\n else if (message instanceof Message) timestamp = message.created_at().toISOString();\n\n this.readingTimeout = setTimeout(() => chat.save({ actions: { reading: timestamp } }), 1000);\n }\n\n deleteChat(model) {\n this.chats = this.chats.filter((mdl) => mdl != model);\n if (this.getCurrentChat() == model) this.setCurrentChat(null);\n }\n\n isChatPM(model) {\n return model.type() == 0 && model.users().length <= 2;\n }\n\n isExistsPMChat(user1, user2) {\n return this.getChats().some((model) => {\n let users = model.users();\n return model.type() === 0 && users.length === 2 && users.some((model) => model == user1) && users.some((model) => model == user2);\n });\n }\n\n onChatChanged(model, e = {}) {\n e.redraw = false;\n if (model == this.getCurrentChat()) return;\n\n this.setCurrentChat(model);\n m.redraw.sync();\n }\n\n comporatorAscButZerosDesc(a, b) {\n return a == 0 ? 1 : b == 0 ? -1 : a - b;\n }\n\n getChatMessages(filter) {\n let list = this.chatmessages.sort((a, b) => this.comporatorAscButZerosDesc(a.id(), b.id()));\n return filter ? list.filter(filter) : list;\n }\n\n apiFetchChatMessages(model, query, options = {}) {\n let viewport = this.getViewportState(model);\n let self = this;\n\n if (viewport.loading || viewport.loadingQueries[query]) return;\n\n viewport.loading = true;\n viewport.loadingQueries[query] = true;\n\n return app.store.find('chatmessages', { chat_id: model.id(), query }).then((r) => {\n if (r.length) {\n r.map((model) => {\n if (options.withFlash) model.isNeedToFlash = true;\n self.insertChatMessage(model);\n });\n if (options.notify) this.messageNotify(r[0]);\n\n viewport.loading = false;\n viewport.loadingQueries[query] = false;\n //viewport.scroll.autoScroll = false;\n\n m.redraw();\n }\n });\n }\n\n isChatMessageExists(model) {\n return this.chatmessages.find((e) => e.id() == model.id());\n }\n\n insertEventChatMessage(model, data, notify = false) {\n model.pushAttributes({ message: JSON.stringify(data) });\n insertChatMessage(model, notify);\n }\n\n insertChatMessage(model, notify = false) {\n if (this.isChatMessageExists(model)) return null;\n\n this.chatmessages.push(model);\n if (notify) {\n this.messageNotify(model);\n model.isNeedToFlash = true;\n\n let chatModel = model.chat();\n chatModel.isNeedToFlash = true;\n chatModel.pushAttributes({ unreaded: chatModel.unreaded() + 1 });\n }\n\n let list = this.getChatMessages((mdl) => mdl.chat() == model.chat());\n if ((notify || model.chat().removed_at()) && model.id() && list[list.length - 1] == model) {\n model.chat().pushData({ relationships: { last_message: model } });\n this.getViewportState(model.chat()).newPushedPosts = true;\n }\n }\n\n renderChatMessage(model, content) {\n let element = model instanceof Model ? document.querySelector(`.NeonChatFrame .message-wrapper[data-id=\"${model.id()}\"] .message`) : model;\n\n if (element) {\n element.innerText = content;\n s9e.TextFormatter.preview(content, element);\n\n // Workaround for user mentions that doesn't works properly\n $(element).find('.UserMention').each(function () {\n let user = app.store.getBy('users', 'username', this.innerText.substring(1));\n if(user)\n {\n this.className = '';\n m.render(this, (\n \n {'@' + user.displayName()}\n \n ))\n }\n });\n\n if (this.executeScriptsTimeout) clearTimeout(this.executeScriptsTimeout);\n this.executeScriptsTimeout = setTimeout(() => {\n $('.NeonChatFrame script').each(function () {\n if (!self.executedScripts) self.executedScripts = {};\n let scriptURL = $(this).attr('src');\n if (!self.executedScripts[scriptURL]) {\n var scriptTag = document.createElement('script');\n scriptTag.src = scriptURL;\n document.head.appendChild(scriptTag);\n\n self.executedScripts[scriptURL] = true;\n }\n });\n }, 100);\n }\n }\n\n onChatMessageClicked(eventName, model) {\n switch (eventName) {\n case 'dropdownHide': {\n this.hideChatMessage(model, true);\n break;\n }\n case 'dropdownRestore': {\n this.restoreChatMessage(model, true);\n break;\n }\n case 'dropdownDelete': {\n this.deleteChatMessage(model, true);\n break;\n }\n }\n }\n\n postChatMessage(model) {\n return model.save({ message: model.content, created_at: new Date(), chat_id: model.chat().id() }).then(\n (r) => {\n model.isTimedOut = false;\n model.isNeedToFlash = true;\n model.isEditing = false;\n model.chat().pushData({ relationships: { last_message: model } });\n },\n (r) => {\n model.isTimedOut = true;\n }\n );\n }\n\n editChatMessage(model, sync = false, content) {\n model.content = content;\n model.isNeedToFlash = true;\n model.pushAttributes({ message: content, edited_at: new Date() });\n if (sync) model.save({ actions: { msg: content }, edited_at: new Date(), message: content });\n\n m.redraw();\n }\n\n deleteChatMessage(model, sync = false, user = app.session.user) {\n model.isDeletedForever = true;\n if (!model.deleted_by()) model.pushData({ relationships: { deleted_by: user } });\n let list = this.getChatMessages((mdl) => mdl.chat() == model.chat() && !mdl.isDeletedForever);\n if (list.length) model.chat().pushData({ relationships: { last_message: list[list.length - 1] } });\n\n this.chatmessages = this.chatmessages.filter((mdl) => mdl != model);\n if (sync) model.delete();\n\n m.redraw();\n }\n\n totalHidden() {\n return this.totalHiddenCount;\n }\n\n hideChatMessage(model, sync = false, user = app.session.user) {\n model.pushData({ relationships: { deleted_by: user } });\n if (sync) model.save({ actions: { hide: true }, relationships: { deleted_by: app.session.user } });\n\n this.totalHiddenCount++;\n m.redraw();\n }\n\n restoreChatMessage(model, sync = false) {\n if (!this.isChatMessageExists(model)) {\n this.insertChatMessage(model);\n model.isNeedToFlash = true;\n } else {\n model.pushAttributes({ deleted_by: 0 });\n model.isNeedToFlash = true;\n delete model.data.relationships.deleted_by;\n }\n if (sync) model.save({ actions: { hide: false }, deleted_by: 0 });\n\n m.redraw();\n }\n\n setCurrentChat(model) {\n this.curChat = model;\n this.saveFrameState('selectedChat', model ? model.id() : null);\n }\n\n getCurrentChat() {\n return this.curChat;\n }\n\n apiFetchChats() {\n return app.store.find('chats').then((chats) => {\n chats.map((model) => this.addChat(model));\n this.chatsLoading = false;\n m.redraw();\n });\n }\n\n messageNotify(model) {\n if (!app.session.user || model.user().id() != app.session.user.id()) this.notifyTry(model);\n }\n\n notifyTry(model) {\n if (!('Notification' in window)) return;\n\n if (this.messageIsMention(model)) this.notifySend(model);\n this.notifySound(model);\n }\n\n messageIsMention(model) {\n return app.session.user && model.message().indexOf('@' + app.session.user.username()) >= 0;\n }\n\n notifySend(model) {\n let avatar = model.user().avatarUrl();\n if (!avatar) avatar = resources.base64PlaceholderAvatarImage;\n\n if (this.getFrameState('notify') && document.hidden)\n new Notification(model.chat().title(), {\n body: `${model.user().username()}: ${model.message()}`,\n icon: avatar,\n silent: true,\n timestamp: new Date(),\n });\n }\n\n notifySound(model) {\n if (!this.getFrameState('isMuted')) {\n let sound = this.messageIsMention(model) ? refAudio : audio;\n sound.currentTime = 0;\n sound.play();\n }\n }\n\n /**\n * https://github.com/flarum/core/blob/7e74f5a03c7f206014f3f091968625fc0bf29094/js/src/forum/components/PostStream.js#L579\n *\n * 'Flash' the given post, drawing the user's attention to it.\n *\n * @param {jQuery} $item\n */\n flashItem($item) {\n $item.addClass('flash').one('animationend webkitAnimationEnd', () => $item.removeClass('flash'));\n }\n}\n","import Stream from 'flarum/utils/Stream';\n\nexport default class ViewportState {\n loadingSend = false;\n\n scroll = {\n autoScroll: true,\n oldScroll: 0,\n };\n\n loading = false;\n loadingQueries = {};\n\n input = {\n messageLength: 0,\n rows: 1,\n content: Stream(),\n };\n\n messagesFetched = false;\n\n constructor(params) {\n if (params.model) {\n this.initChatStorage(params.model);\n\n this.input.content(this.getChatStorageValue('draft'));\n }\n }\n\n chatStorage = {\n key: null,\n draft: null,\n };\n\n initChatStorage(model) {\n this.chatStorage.key = `neonchat.viewport${model.id()}`;\n let parsedData = JSON.parse(localStorage.getItem(this.chatStorage.key));\n\n if (parsedData) {\n this.chatStorage.draft = parsedData.draft ?? '';\n }\n }\n\n getChatStorageValue(key) {\n return this.chatStorage[key];\n }\n\n setChatStorageValue(key, value) {\n let cachedState = JSON.parse(localStorage.getItem(this.chatStorage.key)) ?? {};\n cachedState[key] = value;\n localStorage.setItem(this.chatStorage.key, JSON.stringify(cachedState));\n\n this.chatStorage[key] = value;\n }\n\n onChatMessageClicked(eventName, model) {\n switch (eventName) {\n case 'dropdownEditStart': {\n this.messageEdit(model, true);\n break;\n }\n case 'dropdownResend': {\n this.messageResend(model);\n break;\n }\n case 'insertMention': {\n this.insertMention(model);\n break;\n }\n }\n }\n\n getChatInput() {\n return document.querySelector('.NeonChatFrame #chat-input');\n }\n\n messageSend() {\n const text = this.input.content();\n\n if (text && text.trim().length > 0 && !this.loadingSend) {\n if (this.input.writingPreview) {\n this.input.writingPreview = false;\n\n this.messagePost(this.input.previewModel);\n app.chat.insertChatMessage(Object.assign(this.input.previewModel, {}));\n\n this.inputClear();\n } else if (this.messageEditing) {\n let model = this.messageEditing;\n if (model.content.trim() !== model.oldContent.trim()) {\n model.oldContent = model.content;\n app.chat.editChatMessage(model, true, model.content);\n }\n this.messageEditEnd();\n this.inputClear();\n }\n }\n }\n\n messageEdit(model) {\n if (this.input.writingPreview) this.input.instance.inputPreviewEnd();\n if(this.messageEditing) this.messageEditEnd();\n\n model.isEditing = true;\n model.oldContent = model.message();\n\n this.messageEditing = model;\n\n let inputElement = this.getChatInput();\n inputElement.value = this.input.content(model.oldContent);\n inputElement.focus();\n app.chat.input.resizeInput();\n\n m.redraw();\n }\n\n messageEditEnd() {\n let message = this.messageEditing;\n if (message) {\n message.isEditing = false;\n message.content = message.oldContent;\n this.inputClear();\n m.redraw();\n\n this.messageEditing = null;\n }\n }\n\n messageResend(model) {\n this.messagePost(model);\n }\n\n messagePost(model) {\n this.loadingSend = true;\n m.redraw();\n\n return app.chat.postChatMessage(model).then(\n (r) => {\n this.loadingSend = false;\n\n m.redraw();\n },\n (r) => {\n this.loadingSend = false;\n\n m.redraw();\n }\n );\n }\n\n inputClear() {\n this.input.messageLength = 0;\n this.input.rows = 1;\n this.input.content(null);\n m.redraw();\n }\n\n insertMention(model) {\n let user = model.user();\n if (!app.session.user) return;\n\n this.input.content((this.input.content() || '') + ` @${user.username()} `);\n\n var input = this.getChatInput();\n input.focus();\n }\n}\n","let redrawTimeout;\n\nexport default function timedRedraw(timeout, callback) {\n if (!redrawTimeout) {\n redrawTimeout = setTimeout(() => {\n m.redraw();\n if (callback) callback();\n redrawTimeout = null;\n }, timeout);\n }\n}\n","module.exports = flarum.core.compat['Application'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['common/components/Page'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['components/Dropdown'];","module.exports = flarum.core.compat['components/IndexPage'];","module.exports = flarum.core.compat['components/Link'];","module.exports = flarum.core.compat['components/LinkButton'];","module.exports = flarum.core.compat['components/LoadingIndicator'];","module.exports = flarum.core.compat['components/Modal'];","module.exports = flarum.core.compat['components/Search'];","module.exports = flarum.core.compat['components/Separator'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['helpers/avatar'];","module.exports = flarum.core.compat['helpers/fullTime'];","module.exports = flarum.core.compat['helpers/highlight'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['helpers/listItems'];","module.exports = flarum.core.compat['helpers/username'];","module.exports = flarum.core.compat['models/Group'];","module.exports = flarum.core.compat['models/User'];","module.exports = flarum.core.compat['utils/ItemList'];","module.exports = flarum.core.compat['utils/Stream'];","module.exports = flarum.core.compat['utils/SubtreeRetainer'];","module.exports = flarum.core.compat['utils/classList'];","module.exports = flarum.core.compat['utils/computed'];","module.exports = flarum.core.compat['utils/extractText'];","module.exports = flarum.core.compat['utils/humanTime'];","module.exports = flarum.core.compat['utils/throttleDebounce'];"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://module.exports/webpack/bootstrap","webpack://module.exports/external \"flarum.core.compat['Model']\"","webpack://module.exports/external \"flarum.core.compat['Component']\"","webpack://module.exports/external \"flarum.core.compat['components/Button']\"","webpack://module.exports/external \"flarum.core.compat['utils/classList']\"","webpack://module.exports/external \"flarum.core.compat['utils/Stream']\"","webpack://module.exports/external \"flarum.core.compat['components/LoadingIndicator']\"","webpack://module.exports/external \"flarum.core.compat['utils/extractText']\"","webpack://module.exports/external \"flarum.core.compat['components/Link']\"","webpack://module.exports/external \"flarum.core.compat['utils/humanTime']\"","webpack://module.exports/external \"flarum.core.compat['extend']\"","webpack://module.exports/external \"flarum.core.compat['utils/ItemList']\"","webpack://module.exports/external \"flarum.core.compat['helpers/avatar']\"","webpack://module.exports/external \"flarum.core.compat['helpers/username']\"","webpack://module.exports/external \"flarum.core.compat['utils/computed']\"","webpack://module.exports/external \"flarum.core.compat['components/Dropdown']\"","webpack://module.exports/external \"flarum.core.compat['helpers/highlight']\"","webpack://module.exports/external \"flarum.core.compat['utils/SubtreeRetainer']\"","webpack://module.exports/external \"flarum.core.compat['components/IndexPage']\"","webpack://module.exports/external \"flarum.core.compat['utils/throttleDebounce']\"","webpack://module.exports/external \"flarum.core.compat['helpers/fullTime']\"","webpack://module.exports/external \"flarum.core.compat['Application']\"","webpack://module.exports/external \"flarum.core.compat['models/Group']\"","webpack://module.exports/external \"flarum.core.compat['components/Modal']\"","webpack://module.exports/external \"flarum.core.compat['components/Search']\"","webpack://module.exports/external \"flarum.core.compat['helpers/icon']\"","webpack://module.exports/external \"flarum.core.compat['common/components/Page']\"","webpack://module.exports/external \"flarum.core.compat['helpers/listItems']\"","webpack://module.exports/external \"flarum.core.compat['components/Separator']\"","webpack://module.exports/external \"flarum.core.compat['models/User']\"","webpack://module.exports/external \"flarum.core.compat['components/LinkButton']\"","webpack://module.exports/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://module.exports/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://module.exports/./src/forum/utils/timedRedraw.js","webpack://module.exports/./src/forum/components/UsersSearchResults.js","webpack://module.exports/./src/forum/components/ChatSearchUser.js","webpack://module.exports/./src/forum/resources.js","webpack://module.exports/./src/forum/components/ChatModal.js","webpack://module.exports/./src/forum/components/ChatEditModal.js","webpack://module.exports/./src/forum/components/ChatHeader.js","webpack://module.exports/./src/forum/components/ChatCreateModal.js","webpack://module.exports/./src/forum/components/ChatAvatar.js","webpack://module.exports/./src/forum/components/ChatPreview.js","webpack://module.exports/./src/forum/components/ChatList.js","webpack://module.exports/./src/forum/components/ChatInput.js","webpack://module.exports/./src/forum/components/ChatMessage.js","webpack://module.exports/./src/forum/components/ChatEventMessage.js","webpack://module.exports/./src/forum/components/ChatWelcome.js","webpack://module.exports/./src/forum/models/Message.js","webpack://module.exports/./src/forum/components/ChatViewport.js","webpack://module.exports/./src/forum/components/ChatPage.js","webpack://module.exports/./src/forum/components/ChatFrame.js","webpack://module.exports/./src/forum/models/Chat.js","webpack://module.exports/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://module.exports/./src/forum/states/ViewportState.js","webpack://module.exports/./src/forum/states/ChatState.js","webpack://module.exports/./src/forum/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_extends","assign","target","arguments","length","source","apply","this","_inheritsLoose","subClass","superClass","constructor","__proto__","redrawTimeout","UsersSearchResults","props","results","searching","state","usersSelected","search","query","app","store","find","filter","q","page","limit","then","redraw","isUserSelected","user","some","u","id","userClick","splice","indexOf","push","view","toLowerCase","moreText","resultsFind","concat","all","username","displayName","includes","session","e","arr","lastIndexOf","sort","a","b","localeCompare","class","translator","trans","more_results","slice","className","LoadingIndicator","component","size","resultsSelected","values","map","children","highlight","text","data-index","onclick","avatar","undefined","ChatSearchUser","oninit","vnode","sourceItems","items","ItemList","attrs","forum","attribute","add","UsersSearchSource","neonchat","updateMaxHeight","currentSearch","getInitialSearch","getValue","setValue","current","sources","toArray","classList","open","hasFocus","active","loading","loadingSources","type","placeholder","oninput","onfocus","clear","icon","Search","fa5IconsList","ChatModal","model","input","title","Stream","color","iconState","matches","lastInput","onremove","getInput","setSelectedUsers","users","getSelectedUsers","isChatExists","chat","isExistsPMChat","alertText","componentAlert","componentFormUsersSelect","label","componentUsersSelect","userMentionContent","userMentionClassname","userMentionOnClick","event","componentUsersMentions","componentFormIcon","options","desc","bidi","stream","onupdate","formInputOnUpdate","inputIconHasFocus","onkeypress","keyCode","dropdownIconMatches","componentFormColor","inputIcon","Math","random","$","css","backgroundColor","componentFormInput","Modal","ChatEditModal","deleteChatTitleInput","deleteState","initialUsers","mdl","chat_pivot","removed_at","edited","isLocalModerator","isModer","isLocalLeaved","onsubmit","added","Model","getIdentifier","removed","keys","k","save","relationships","hide","role","isCreator","creator","groups","g","Group","ADMINISTRATOR_ID","editable","moder","userMentionDropdownOnclick","button","componentUserMentionDropdown","buttonClassName","menuClassName","disabled","isChatPM","trigger","componentFormInputIcon","href","tabindex","componentFormInputTitle","componentFormInputColor","componentChatInfo","componentFormPM","componentFormChannel","componentFormChat","componentForm","componentFormButtons","buttons","isCanEditChannel","isCanEditChat","onleave","removed_by","getPermissions","channel","componentDeleteChat","ondelete","isValidTitleCopy","deleteChat","content","ChatHeader","ondragstart","onmousedown","showChatListStream","stopPropagation","getCurrentChat","style","data-title","modal","show","windowButtonItems","toggleSound","getFrameState","toggleNotifications","inFrame","toggleChat","showing","saveFrameState","preventDefault","window","Notification","requestPermission","Component","ChatCreateModal","isChannel","createRecord","addChat","onChatChanged","isCanCreateChat","isCanCreateChannel","ChatAvatar","componentAvatarPM","image","avatarUrl","textColor","firstLetter","toUpperCase","componentAvatarChannel","string","isLetter","ChatPreview","subtree","SubtreeRetainer","freshness","isNeedToFlash","onbeforeupdate","needsRebuild","position","componentPreview","unreaded","oncreate","flashItem","dom","componentMessageTime","lastMessage","last_message","time","Date","created_at","now","getTime","nl","getHours","getMinutes","humanTime","componentTextPreview","componentTextEmpty","extractText","componentPreviewChannel","formatTextPreview","startsWith","senderName","formatResult","message","sender","censored","is_censored","ChatFrame","classes","inPage","join","toggleChatsList","getChatsSortedByLastUpdate","getChatsListPanel","document","querySelector","getChatsList","chatLists","contains","remove","ChatInput","messageCharLimit","updatePlaceholder","inputState","lineHeight","parseInt","getComputedStyle","getPropertyValue","element","inputProcess","updateLimit","old","post","inputPlaceholder","maxlength","inputPressEnter","onpaste","onkeyup","inputSaveDraft","rows","saveDraft","messageEditing","messageEditEnd","inputPressButton","limiter","charsTyped","messageLength","innerText","lastDraft","throttle","setChatStorageValue","trim","resizeInput","getChatInput","min","scrollHeight","screen","inputValue","writingPreview","inputPreviewStart","inputPreviewEnd","previewModel","shiftKey","messageSend","pushData","attributes","isEditing","ChatMessage","labels","initLabels","isDeletedForever","isTimedOut","modelEvent","getViewportState","onChatMessageClicked","route","condition","editDropDown","fullTime","editDropDownTimedOut","onContentWrapperCreated","onContentWrapperUpdated","hidden","deleted_by","editing","deleted","isVisible","data-id","labelBind","edited_at","ago","edit","moderate","totalHidden","messageWrapper","pollInterval","setInterval","renderMessage","clearInterval","oldContent","renderChatMessage","ChatEventMessage","split","every","parsedContent","JSON","parse","componentUserMention","componentUserMentionsByIds","ids","getById","componentEventText","creatorname","chatname","usernames","componentOld","componentNew","column","editorname","new","invitednames","kickednames","ChatWelcome","height","y","getChats","Message","hasOne","transformDate","is_readed","ip_address","ChatViewport","chatModel","loadChat","oldScroll","scroll","reloadMessages","setTimeout","getChatWrapper","scrollTop","clientHeight","wrapperOnCreate","wrapperOnBeforeUpdate","wrapperOnUpdate","wrapperOnRemove","componentLoader","componentsChatMessages","componentChatMessage","nearBottom","scrollToBottom","isFastScrollAvailable","componentScroller","getChatMessages","fastScroll","watch","ChatPage","documentElement","chatWrapper","newPushedPosts","fastMessagesFetch","max","chatmessages","apiFetchChatMessages","timeout","callback","pushAttributes","apiReadChat","addEventListener","boundScrollListener","wrapperOnScroll","passive","vnodeNew","autoScroll","scrollAfterUpdate","el","autoScrollTimeout","clearTimeout","checkUnreaded","removeEventListener","lastFastScrollStatus","currentHeight","atBottom","scrolling","topMessage","first_message","toISOString","offsetHeight","bottomMessage","wrapper","readed_at","isReaded","msg","offsetTop","scrollToAnchor","anchor","stop","animate","force","notAtBottom","fewMessages","pixelsFromBottom","messagesFetched","abs","bodyClass","listOpen","navItems","IndexPage","sidebarItems","has","listItems","chatsLoading","clickHandler","chatList","on","getBoundingClientRect","top","off","Page","chatMoveListener","calcHeight","right","x","chatHeaderOnMouseDown","path","composedPath","chatMoveStart","chatMoving","chatMoveEnd","mouseMoveEvent","chatMoveProcess","moveLast","clientX","clientY","body","move","nextPos","innerWidth","offsetWidth","innerHeight","Chat","_title","_color","hasMany","v","joined_at","pm_user","computed","updated","getPMUser","pickTextColorBasedOnBgColorSimple","bgColor","lightColor","darkColor","charAt","substring","_defineProperty","obj","configurable","writable","ViewportState","params","draft","initChatStorage","getChatStorageValue","chatStorage","parsedData","localStorage","getItem","cachedState","setItem","stringify","eventName","messageEdit","messageResend","insertMention","loadingSend","messagePost","insertChatMessage","inputClear","editChatMessage","instance","inputElement","focus","postChatMessage","refAudio","Audio","src","volume","audio","ChatState","chats","curChat","totalHiddenCount","neonchatState","frameState","beingShown","beingShownChatsList","isMuted","notify","transform","isActive","selectedChat","permissions","delete","vision","viewportStates","pusher","listenSocketChannels","socket","channels","main","handleSocketEvent","response","pushPayload","actions","data","invoker","hideChatMessage","restoreChatMessage","deleteChatMessage","editChat","range","eventmsg_range","withFlash","disableLoader","roles_updated_for","alerts","outside","timestamp","readingTimeout","reading","setCurrentChat","user1","user2","sync","comporatorAscButZerosDesc","list","viewport","self","loadingQueries","chat_id","messageNotify","isChatMessageExists","insertEventChatMessage","s9e","TextFormatter","preview","each","getBy","render","executedScripts","scriptURL","attr","scriptTag","createElement","head","appendChild","apiFetchChats","notifyTry","messageIsMention","notifySend","notifySound","silent","sound","currentTime","play","$item","addClass","one","removeClass","setAttribute","append","initializers","pivot","relationship","models","User","extend","Application","mount","getElementById"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,gBClFrDhC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAc,O,cCA3CnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAkB,W,cCA/CnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,sB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,oB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,iB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,gC,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,sB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,oB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,oB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAe,Q,cCA5CnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,mB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,mB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,qB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,mB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,wB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,sB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,0B,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,yB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,2B,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,qB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAoB,a,cCAjDnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,iB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,qB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,sB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,iB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,2B,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,sB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,yB,cCApCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,gB,cCApCnC,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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 32);\n","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['utils/classList'];","module.exports = flarum.core.compat['utils/Stream'];","module.exports = flarum.core.compat['components/LoadingIndicator'];","module.exports = flarum.core.compat['utils/extractText'];","module.exports = flarum.core.compat['components/Link'];","module.exports = flarum.core.compat['utils/humanTime'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['utils/ItemList'];","module.exports = flarum.core.compat['helpers/avatar'];","module.exports = flarum.core.compat['helpers/username'];","module.exports = flarum.core.compat['utils/computed'];","module.exports = flarum.core.compat['components/Dropdown'];","module.exports = flarum.core.compat['helpers/highlight'];","module.exports = flarum.core.compat['utils/SubtreeRetainer'];","module.exports = flarum.core.compat['components/IndexPage'];","module.exports = flarum.core.compat['utils/throttleDebounce'];","module.exports = flarum.core.compat['helpers/fullTime'];","module.exports = flarum.core.compat['Application'];","module.exports = flarum.core.compat['models/Group'];","module.exports = flarum.core.compat['components/Modal'];","module.exports = flarum.core.compat['components/Search'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['common/components/Page'];","module.exports = flarum.core.compat['helpers/listItems'];","module.exports = flarum.core.compat['components/Separator'];","module.exports = flarum.core.compat['models/User'];","module.exports = flarum.core.compat['components/LinkButton'];","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","let redrawTimeout;\n\nexport default function timedRedraw(timeout, callback) {\n if (!redrawTimeout) {\n redrawTimeout = setTimeout(() => {\n m.redraw();\n if (callback) callback();\n redrawTimeout = null;\n }, timeout);\n }\n}\n","import avatar from 'flarum/helpers/avatar';\nimport username from 'flarum/helpers/username';\nimport highlight from 'flarum/helpers/highlight';\n\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\n\nexport default class UsersSearchResults {\n constructor(props) {\n this.results = {};\n this.searching = false;\n\n if (!props.state.usersSelected) props.state.usersSelected = [];\n this.usersSelected = props.state.usersSelected;\n }\n\n search(query) {\n this.searching = true;\n\n return app.store\n .find('users', {\n filter: { q: query },\n page: { limit: 5 },\n })\n .then((results) => {\n this.results[query] = results;\n this.searching = false;\n m.redraw();\n });\n }\n\n isUserSelected(user) {\n return this.usersSelected.some((u) => user.id() == u.id());\n }\n\n userClick(user) {\n if (!this.isUserSelected(user)) this.usersSelected.push(user);\n else this.usersSelected.splice(this.usersSelected.indexOf(user), 1);\n }\n\n view(query) {\n query = query.toLowerCase();\n\n const usersList = (this.results[query] || [])\n .concat(\n app.store.all('users').filter((user) => [user.username(), user.displayName()].some((value) => value.toLowerCase().includes(query)))\n )\n .filter((user) => user !== app.session.user);\n\n let resultsFind = usersList\n .filter((e, i, arr) => arr.lastIndexOf(e) === i)\n .sort((a, b) => a.displayName().localeCompare(b.displayName()))\n .filter((user) => !this.isUserSelected(user));\n\n let moreText;\n if (resultsFind.length > 5) {\n moreText = (\n
    \n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.more_results', { more_results: resultsFind.length - 5 })}\n
    \n );\n\n resultsFind = resultsFind.slice(-5);\n }\n\n if (!resultsFind.length) {\n if (!this.searching)\n return
  • {app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.failed')}
  • ;\n else LoadingIndicator.component({ size: 'tiny', className: 'Button Button--icon Button--link' });\n }\n\n const resultsSelected = Object.values(this.usersSelected).slice(-5);\n\n return [\n
  • {app.translator.trans('core.forum.search.users_heading')}
  • ,\n resultsFind.map((user) => {\n const name = username(user);\n const id = user.id();\n const children = [highlight(name.text, query)];\n\n return (\n
  • \n \n {avatar(user)}\n {{ ...name, text: undefined, children }}\n \n
  • \n );\n }),\n moreText,\n resultsSelected.length ? (\n
  • {app.translator.trans('xelson-chat.forum.chat.list.add_modal.search.invited')}
  • \n ) : null,\n resultsSelected.map((user) => {\n const name = username(user);\n const children = [highlight(name.text, query)];\n\n return (\n
  • \n \n {avatar(user)}\n {{ ...name, text: undefined, children }}\n \n
  • \n );\n }),\n ];\n }\n}\n","import Search from 'flarum/components/Search';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport ItemList from 'flarum/utils/ItemList';\nimport classList from 'flarum/utils/classList';\nimport icon from 'flarum/helpers/icon';\nimport UsersSearchSource from './UsersSearchResults';\n\nexport default class ChatSearchUser extends Search {\n oninit(vnode) {\n super.oninit(vnode);\n }\n\n sourceItems() {\n const items = new ItemList();\n this.state = this.attrs.state ?? {};\n if (app.forum.attribute('canSearchUsers')) items.add('users', new UsersSearchSource({ state: app.search.neonchat }));\n\n return items;\n }\n\n updateMaxHeight() {}\n\n view(vnode) {\n const currentSearch = this.state.getInitialSearch();\n\n if (!this.state.getValue()?.length) {\n this.state.setValue(currentSearch || '');\n }\n\n app.current.searching = () => this.state.getValue();\n\n if (!this.sources) {\n this.sources = this.sourceItems().toArray();\n }\n\n if (!this.sources.length) return
    ;\n\n return (\n \n
    \n this.state.setValue(e.target.value)}\n onfocus={() => (this.hasFocus = true)}\n />\n {this.loadingSources ? (\n \n ) : currentSearch ? (\n \n ) : (\n ''\n )}\n
    \n {this.state.getValue() && this.hasFocus ? (\n
      \n {this.sources.map((source) => source.view(this.state.getValue()))}\n
    \n ) : null}\n \n );\n }\n}\n","export const base64AudioNotificationRef =\n 'data:audio/ogg;base64,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';\n\nexport const base64AudioNotification =\n 'data:audio/ogg;base64,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';\n\nexport const base64PlaceholderAvatarImage =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPZSURBVHhe7Zs9aNVQGIZvioODQwdHCxUqdHBQtNihg4NLQdCigg6CoKKiNS4dnKRDcXBpEaHSggWFLg4WBBcHBwdLCzo4FBQs2NHBoYODcH2fnOQ2iUnvT27uvcnpA29Ozh3afG++85OTE6darVZyxXEP6XhSOiUNS4NSv1+G2ZR+++WGtCqtV6pzWypzIx8DHHdUx3PSRWmInzLwXXotrciMT94vbaR9Bjgud/WadEviTucBmfFcWpIZZEtmshtgAn8guRLnnYDg56TZrEZkM8Bxb+j4WDro1TvPL+mhTFg01eZpzQDHpV0vSKe9evf5IN2UEfQXTdHnl43juJd1XJN6JXjgWtb8a2uKxjPAcffp+ESivfcys9KUsuGvqe5OYwaY4JclhrUiwLB5pRET6htQvOAD3kiX6pmwex9Q3ODhvLTsx5BKvU6QNl/E4AO4dmJIJb0JmB6Vu18GrqopvPLPIyQbYMZ5hrpOzezyZls6njRPSGsCTHLKEjwckF6Y0yj/G2Cmt700yWkXY4rtnn9eI9oEzIPNN6lbc/u84dnhiJpC7QEqngHM8soaPBBbZCa7kwHm7v+QytT2k+DuHw6yIJwBLGaUPXggxtvmNGoAKzm2cN0vfQPMGl5ey1i9yJBiHuMkyAAWMG3jAofAgCLP91uFhyWNApX7rNv/pGIhA2QALy1sZRQDeGNjKycwwKbeP84wBsTf0dnEIAbYMPtLo38vA/wTa9kzwC+tBQPYkWErmxiQ6f16wdneywAdmn6nXiI2MIDdWLayigHr5txK1vsq1Tn6ABv7gU1iJwPgrV/ahBdzYMCKX9qEF3P4xQjLYiyP2cCW0n+AkyAD4Jlf2kAt1rAB85INs8I/ErF67Bhg3pUtmUqpmQ/eC0I4A2BaKnMWEBsx1ogaYJyZMZVSMhO++xDPAGCnZRlnh18kYouQtkmKpfLP0n6vXnzo+EZ097+a6g5JGUBT4MOESVMpBZNJwUOyAWD24Le8D7+HWPRjSSTdAMMdiY3HRYX5PjGkktwHhHFc9ti9k7wNBQXiozSuu88myVTqZQBNgT8wLhXpiZFrrRs81DcAzB+akIrQJ3CNE40ED/WbQByzk/Sp1GtDJEMdvX1TN6l5A8Bxj+r4Ujrm1bsPkxx2hCcOdbvRWBOIY/7RiDQldfPZgf/NNSROchqhtQwIY3aYPpLYfNipZhE80k4r8Ew3ILsBAcYITLgr5bWyxIfULGZEHmmz0D4DwjjuGR3Ze3hWyrr/gBVrhjU+nn7v/dJG8jEgjONiQPzzeSZXcWMIlKGLMvz5fI5L9pXKP+lVHvxHrr8zAAAAAElFTkSuQmCC';\n\nexport const fa5IconsList = [ 'fas fa-ad','fas fa-address-book','fas fa-address-card','fas fa-adjust','fas fa-air-freshener','fas fa-align-center','fas fa-align-justify','fas fa-align-left','fas fa-align-right','fas fa-allergies','fas fa-ambulance','fas fa-american-sign-language-interpreting','fas fa-anchor','fas fa-angle-double-down','fas fa-angle-double-left','fas fa-angle-double-right','fas fa-angle-double-up','fas fa-angle-down','fas fa-angle-left','fas fa-angle-right','fas fa-angle-up','fas fa-angry','fas fa-ankh','fas fa-apple-alt','fas fa-archive','fas fa-archway','fas fa-arrow-alt-circle-down','fas fa-arrow-alt-circle-left','fas fa-arrow-alt-circle-right','fas fa-arrow-alt-circle-up','fas fa-arrow-circle-down','fas fa-arrow-circle-left','fas fa-arrow-circle-right','fas fa-arrow-circle-up','fas fa-arrow-down','fas fa-arrow-left','fas fa-arrow-right','fas fa-arrow-up','fas fa-arrows-alt','fas fa-arrows-alt-h','fas fa-arrows-alt-v','fas fa-assistive-listening-systems','fas fa-asterisk','fas fa-at','fas fa-atlas','fas fa-atom','fas fa-audio-description','fas fa-award','fas fa-baby','fas fa-baby-carriage','fas fa-backspace','fas fa-backward','fas fa-bacon','fas fa-bahai','fas fa-balance-scale','fas fa-balance-scale-left','fas fa-balance-scale-right','fas fa-ban','fas fa-band-aid','fas fa-barcode','fas fa-bars','fas fa-baseball-ball','fas fa-basketball-ball','fas fa-bath','fas fa-battery-empty','fas fa-battery-full','fas fa-battery-half','fas fa-battery-quarter','fas fa-battery-three-quarters','fas fa-bed','fas fa-beer','fas fa-bell','fas fa-bell-slash','fas fa-bezier-curve','fas fa-bible','fas fa-bicycle','fas fa-biking','fas fa-binoculars','fas fa-biohazard','fas fa-birthday-cake','fas fa-blender','fas fa-blender-phone','fas fa-blind','fas fa-blog','fas fa-bold','fas fa-bolt','fas fa-bomb','fas fa-bone','fas fa-bong','fas fa-book','fas fa-book-dead','fas fa-book-medical','fas fa-book-open','fas fa-book-reader','fas fa-bookmark','fas fa-border-all','fas fa-border-none','fas fa-border-style','fas fa-bowling-ball','fas fa-box','fas fa-box-open','fas fa-boxes','fas fa-braille','fas fa-brain','fas fa-bread-slice','fas fa-briefcase','fas fa-briefcase-medical','fas fa-broadcast-tower','fas fa-broom','fas fa-brush','fas fa-bug','fas fa-building','fas fa-bullhorn','fas fa-bullseye','fas fa-burn','fas fa-bus','fas fa-bus-alt','fas fa-business-time','fas fa-calculator','fas fa-calendar','fas fa-calendar-alt','fas fa-calendar-check','fas fa-calendar-day','fas fa-calendar-minus','fas fa-calendar-plus','fas fa-calendar-times','fas fa-calendar-week','fas fa-camera','fas fa-camera-retro','fas fa-campground','fas fa-candy-cane','fas fa-cannabis','fas fa-capsules','fas fa-car','fas fa-car-alt','fas fa-car-battery','fas fa-car-crash','fas fa-car-side','fas fa-caravan','fas fa-caret-down','fas fa-caret-left','fas fa-caret-right','fas fa-caret-square-down','fas fa-caret-square-left','fas fa-caret-square-right','fas fa-caret-square-up','fas fa-caret-up','fas fa-carrot','fas fa-cart-arrow-down','fas fa-cart-plus','fas fa-cash-register','fas fa-cat','fas fa-certificate','fas fa-chair','fas fa-chalkboard','fas fa-chalkboard-teacher','fas fa-charging-station','fas fa-chart-area','fas fa-chart-bar','fas fa-chart-line','fas fa-chart-pie','fas fa-check','fas fa-check-circle','fas fa-check-double','fas fa-check-square','fas fa-cheese','fas fa-chess','fas fa-chess-bishop','fas fa-chess-board','fas fa-chess-king','fas fa-chess-knight','fas fa-chess-pawn','fas fa-chess-queen','fas fa-chess-rook','fas fa-chevron-circle-down','fas fa-chevron-circle-left','fas fa-chevron-circle-right','fas fa-chevron-circle-up','fas fa-chevron-down','fas fa-chevron-left','fas fa-chevron-right','fas fa-chevron-up','fas fa-child','fas fa-church','fas fa-circle','fas fa-circle-notch','fas fa-city','fas fa-clinic-medical','fas fa-clipboard','fas fa-clipboard-check','fas fa-clipboard-list','fas fa-clock','fas fa-clone','fas fa-closed-captioning','fas fa-cloud','fas fa-cloud-download-alt','fas fa-cloud-meatball','fas fa-cloud-moon','fas fa-cloud-moon-rain','fas fa-cloud-rain','fas fa-cloud-showers-heavy','fas fa-cloud-sun','fas fa-cloud-sun-rain','fas fa-cloud-upload-alt','fas fa-cocktail','fas fa-code','fas fa-code-branch','fas fa-coffee','fas fa-cog','fas fa-cogs','fas fa-coins','fas fa-columns','fas fa-comment','fas fa-comment-alt','fas fa-comment-dollar','fas fa-comment-dots','fas fa-comment-medical','fas fa-comment-slash','fas fa-comments','fas fa-comments-dollar','fas fa-compact-disc','fas fa-compass','fas fa-compress','fas fa-compress-alt','fas fa-compress-arrows-alt','fas fa-concierge-bell','fas fa-cookie','fas fa-cookie-bite','fas fa-copy','fas fa-copyright','fas fa-couch','fas fa-credit-card','fas fa-crop','fas fa-crop-alt','fas fa-cross','fas fa-crosshairs','fas fa-crow','fas fa-crown','fas fa-crutch','fas fa-cube','fas fa-cubes','fas fa-cut','fas fa-database','fas fa-deaf','fas fa-democrat','fas fa-desktop','fas fa-dharmachakra','fas fa-diagnoses','fas fa-dice','fas fa-dice-d20','fas fa-dice-d6','fas fa-dice-five','fas fa-dice-four','fas fa-dice-one','fas fa-dice-six','fas fa-dice-three','fas fa-dice-two','fas fa-digital-tachograph','fas fa-directions','fas fa-divide','fas fa-dizzy','fas fa-dna','fas fa-dog','fas fa-dollar-sign','fas fa-dolly','fas fa-dolly-flatbed','fas fa-donate','fas fa-door-closed','fas fa-door-open','fas fa-dot-circle','fas fa-dove','fas fa-download','fas fa-drafting-compass','fas fa-dragon','fas fa-draw-polygon','fas fa-drum','fas fa-drum-steelpan','fas fa-drumstick-bite','fas fa-dumbbell','fas fa-dumpster','fas fa-dumpster-fire','fas fa-dungeon','fas fa-edit','fas fa-egg','fas fa-eject','fas fa-ellipsis-h','fas fa-ellipsis-v','fas fa-envelope','fas fa-envelope-open','fas fa-envelope-open-text','fas fa-envelope-square','fas fa-equals','fas fa-eraser','fas fa-ethernet','fas fa-euro-sign','fas fa-exchange-alt','fas fa-exclamation','fas fa-exclamation-circle','fas fa-exclamation-triangle','fas fa-expand','fas fa-expand-alt','fas fa-expand-arrows-alt','fas fa-external-link-alt','fas fa-external-link-square-alt','fas fa-eye','fas fa-eye-dropper','fas fa-eye-slash','fas fa-fan','fas fa-fast-backward','fas fa-fast-forward','fas fa-fax','fas fa-feather','fas fa-feather-alt','fas fa-female','fas fa-fighter-jet','fas fa-file','fas fa-file-alt','fas fa-file-archive','fas fa-file-audio','fas fa-file-code','fas fa-file-contract','fas fa-file-csv','fas fa-file-download','fas fa-file-excel','fas fa-file-export','fas fa-file-image','fas fa-file-import','fas fa-file-invoice','fas fa-file-invoice-dollar','fas fa-file-medical','fas fa-file-medical-alt','fas fa-file-pdf','fas fa-file-powerpoint','fas fa-file-prescription','fas fa-file-signature','fas fa-file-upload','fas fa-file-video','fas fa-file-word','fas fa-fill','fas fa-fill-drip','fas fa-film','fas fa-filter','fas fa-fingerprint','fas fa-fire','fas fa-fire-alt','fas fa-fire-extinguisher','fas fa-first-aid','fas fa-fish','fas fa-fist-raised','fas fa-flag','fas fa-flag-checkered','fas fa-flag-usa','fas fa-flask','fas fa-flushed','fas fa-folder','fas fa-folder-minus','fas fa-folder-open','fas fa-folder-plus','fas fa-font','fas fa-football-ball','fas fa-forward','fas fa-frog','fas fa-frown','fas fa-frown-open','fas fa-funnel-dollar','fas fa-futbol','fas fa-gamepad','fas fa-gas-pump','fas fa-gavel','fas fa-gem','fas fa-genderless','fas fa-ghost','fas fa-gift','fas fa-gifts','fas fa-glass-cheers','fas fa-glass-martini','fas fa-glass-martini-alt','fas fa-glass-whiskey','fas fa-glasses','fas fa-globe','fas fa-globe-africa','fas fa-globe-americas','fas fa-globe-asia','fas fa-globe-europe','fas fa-golf-ball','fas fa-gopuram','fas fa-graduation-cap','fas fa-greater-than','fas fa-greater-than-equal','fas fa-grimace','fas fa-grin','fas fa-grin-alt','fas fa-grin-beam','fas fa-grin-beam-sweat','fas fa-grin-hearts','fas fa-grin-squint','fas fa-grin-squint-tears','fas fa-grin-stars','fas fa-grin-tears','fas fa-grin-tongue','fas fa-grin-tongue-squint','fas fa-grin-tongue-wink','fas fa-grin-wink','fas fa-grip-horizontal','fas fa-grip-lines','fas fa-grip-lines-vertical','fas fa-grip-vertical','fas fa-guitar','fas fa-h-square','fas fa-hamburger','fas fa-hammer','fas fa-hamsa','fas fa-hand-holding','fas fa-hand-holding-heart','fas fa-hand-holding-usd','fas fa-hand-lizard','fas fa-hand-middle-finger','fas fa-hand-paper','fas fa-hand-peace','fas fa-hand-point-down','fas fa-hand-point-left','fas fa-hand-point-right','fas fa-hand-point-up','fas fa-hand-pointer','fas fa-hand-rock','fas fa-hand-scissors','fas fa-hand-spock','fas fa-hands','fas fa-hands-helping','fas fa-handshake','fas fa-hanukiah','fas fa-hard-hat','fas fa-hashtag','fas fa-hat-cowboy','fas fa-hat-cowboy-side','fas fa-hat-wizard','fas fa-hdd','fas fa-heading','fas fa-headphones','fas fa-headphones-alt','fas fa-headset','fas fa-heart','fas fa-heart-broken','fas fa-heartbeat','fas fa-helicopter','fas fa-highlighter','fas fa-hiking','fas fa-hippo','fas fa-history','fas fa-hockey-puck','fas fa-holly-berry','fas fa-home','fas fa-horse','fas fa-horse-head','fas fa-hospital','fas fa-hospital-alt','fas fa-hospital-symbol','fas fa-hot-tub','fas fa-hotdog','fas fa-hotel','fas fa-hourglass','fas fa-hourglass-end','fas fa-hourglass-half','fas fa-hourglass-start','fas fa-house-damage','fas fa-hryvnia','fas fa-i-cursor','fas fa-ice-cream','fas fa-icicles','fas fa-icons','fas fa-id-badge','fas fa-id-card','fas fa-id-card-alt','fas fa-igloo','fas fa-image','fas fa-images','fas fa-inbox','fas fa-indent','fas fa-industry','fas fa-infinity','fas fa-info','fas fa-info-circle','fas fa-italic','fas fa-jedi','fas fa-joint','fas fa-journal-whills','fas fa-kaaba','fas fa-key','fas fa-keyboard','fas fa-khanda','fas fa-kiss','fas fa-kiss-beam','fas fa-kiss-wink-heart','fas fa-kiwi-bird','fas fa-landmark','fas fa-language','fas fa-laptop','fas fa-laptop-code','fas fa-laptop-medical','fas fa-laugh','fas fa-laugh-beam','fas fa-laugh-squint','fas fa-laugh-wink','fas fa-layer-group','fas fa-leaf','fas fa-lemon','fas fa-less-than','fas fa-less-than-equal','fas fa-level-down-alt','fas fa-level-up-alt','fas fa-life-ring','fas fa-lightbulb','fas fa-link','fas fa-lira-sign','fas fa-list','fas fa-list-alt','fas fa-list-ol','fas fa-list-ul','fas fa-location-arrow','fas fa-lock','fas fa-lock-open','fas fa-long-arrow-alt-down','fas fa-long-arrow-alt-left','fas fa-long-arrow-alt-right','fas fa-long-arrow-alt-up','fas fa-low-vision','fas fa-luggage-cart','fas fa-magic','fas fa-magnet','fas fa-mail-bulk','fas fa-male','fas fa-map','fas fa-map-marked','fas fa-map-marked-alt','fas fa-map-marker','fas fa-map-marker-alt','fas fa-map-pin','fas fa-map-signs','fas fa-marker','fas fa-mars','fas fa-mars-double','fas fa-mars-stroke','fas fa-mars-stroke-h','fas fa-mars-stroke-v','fas fa-mask','fas fa-medal','fas fa-medkit','fas fa-meh','fas fa-meh-blank','fas fa-meh-rolling-eyes','fas fa-memory','fas fa-menorah','fas fa-mercury','fas fa-meteor','fas fa-microchip','fas fa-microphone','fas fa-microphone-alt','fas fa-microphone-alt-slash','fas fa-microphone-slash','fas fa-microscope','fas fa-minus','fas fa-minus-circle','fas fa-minus-square','fas fa-mitten','fas fa-mobile','fas fa-mobile-alt','fas fa-money-bill','fas fa-money-bill-alt','fas fa-money-bill-wave','fas fa-money-bill-wave-alt','fas fa-money-check','fas fa-money-check-alt','fas fa-monument','fas fa-moon','fas fa-mortar-pestle','fas fa-mosque','fas fa-motorcycle','fas fa-mountain','fas fa-mouse','fas fa-mouse-pointer','fas fa-mug-hot','fas fa-music','fas fa-network-wired','fas fa-neuter','fas fa-newspaper','fas fa-not-equal','fas fa-notes-medical','fas fa-object-group','fas fa-object-ungroup','fas fa-oil-can','fas fa-om','fas fa-otter','fas fa-outdent','fas fa-pager','fas fa-paint-brush','fas fa-paint-roller','fas fa-palette','fas fa-pallet','fas fa-paper-plane','fas fa-paperclip','fas fa-parachute-box','fas fa-paragraph','fas fa-parking','fas fa-passport','fas fa-pastafarianism','fas fa-paste','fas fa-pause','fas fa-pause-circle','fas fa-paw','fas fa-peace','fas fa-pen','fas fa-pen-alt','fas fa-pen-fancy','fas fa-pen-nib','fas fa-pen-square','fas fa-pencil-alt','fas fa-pencil-ruler','fas fa-people-carry','fas fa-pepper-hot','fas fa-percent','fas fa-percentage','fas fa-person-booth','fas fa-phone','fas fa-phone-alt','fas fa-phone-slash','fas fa-phone-square','fas fa-phone-square-alt','fas fa-phone-volume','fas fa-photo-video','fas fa-piggy-bank','fas fa-pills','fas fa-pizza-slice','fas fa-place-of-worship','fas fa-plane','fas fa-plane-arrival','fas fa-plane-departure','fas fa-play','fas fa-play-circle','fas fa-plug','fas fa-plus','fas fa-plus-circle','fas fa-plus-square','fas fa-podcast','fas fa-poll','fas fa-poll-h','fas fa-poo','fas fa-poo-storm','fas fa-poop','fas fa-portrait','fas fa-pound-sign','fas fa-power-off','fas fa-pray','fas fa-praying-hands','fas fa-prescription','fas fa-prescription-bottle','fas fa-prescription-bottle-alt','fas fa-print','fas fa-procedures','fas fa-project-diagram','fas fa-puzzle-piece','fas fa-qrcode','fas fa-question','fas fa-question-circle','fas fa-quidditch','fas fa-quote-left','fas fa-quote-right','fas fa-quran','fas fa-radiation','fas fa-radiation-alt','fas fa-rainbow','fas fa-random','fas fa-receipt','fas fa-record-vinyl','fas fa-recycle','fas fa-redo','fas fa-redo-alt','fas fa-registered','fas fa-remove-format','fas fa-reply','fas fa-reply-all','fas fa-republican','fas fa-restroom','fas fa-retweet','fas fa-ribbon','fas fa-ring','fas fa-road','fas fa-robot','fas fa-rocket','fas fa-route','fas fa-rss','fas fa-rss-square','fas fa-ruble-sign','fas fa-ruler','fas fa-ruler-combined','fas fa-ruler-horizontal','fas fa-ruler-vertical','fas fa-running','fas fa-rupee-sign','fas fa-sad-cry','fas fa-sad-tear','fas fa-satellite','fas fa-satellite-dish','fas fa-save','fas fa-school','fas fa-screwdriver','fas fa-scroll','fas fa-sd-card','fas fa-search','fas fa-search-dollar','fas fa-search-location','fas fa-search-minus','fas fa-search-plus','fas fa-seedling','fas fa-server','fas fa-shapes','fas fa-share','fas fa-share-alt','fas fa-share-alt-square','fas fa-share-square','fas fa-shekel-sign','fas fa-shield-alt','fas fa-ship','fas fa-shipping-fast','fas fa-shoe-prints','fas fa-shopping-bag','fas fa-shopping-basket','fas fa-shopping-cart','fas fa-shower','fas fa-shuttle-van','fas fa-sign','fas fa-sign-in-alt','fas fa-sign-language','fas fa-sign-out-alt','fas fa-signal','fas fa-signature','fas fa-sim-card','fas fa-sitemap','fas fa-skating','fas fa-skiing','fas fa-skiing-nordic','fas fa-skull','fas fa-skull-crossbones','fas fa-slash','fas fa-sleigh','fas fa-sliders-h','fas fa-smile','fas fa-smile-beam','fas fa-smile-wink','fas fa-smog','fas fa-smoking','fas fa-smoking-ban','fas fa-sms','fas fa-snowboarding','fas fa-snowflake','fas fa-snowman','fas fa-snowplow','fas fa-socks','fas fa-solar-panel','fas fa-sort','fas fa-sort-alpha-down','fas fa-sort-alpha-down-alt','fas fa-sort-alpha-up','fas fa-sort-alpha-up-alt','fas fa-sort-amount-down','fas fa-sort-amount-down-alt','fas fa-sort-amount-up','fas fa-sort-amount-up-alt','fas fa-sort-down','fas fa-sort-numeric-down','fas fa-sort-numeric-down-alt','fas fa-sort-numeric-up','fas fa-sort-numeric-up-alt','fas fa-sort-up','fas fa-spa','fas fa-space-shuttle','fas fa-spell-check','fas fa-spider','fas fa-spinner','fas fa-splotch','fas fa-spray-can','fas fa-square','fas fa-square-full','fas fa-square-root-alt','fas fa-stamp','fas fa-star','fas fa-star-and-crescent','fas fa-star-half','fas fa-star-half-alt','fas fa-star-of-david','fas fa-star-of-life','fas fa-step-backward','fas fa-step-forward','fas fa-stethoscope','fas fa-sticky-note','fas fa-stop','fas fa-stop-circle','fas fa-stopwatch','fas fa-store','fas fa-store-alt','fas fa-stream','fas fa-street-view','fas fa-strikethrough','fas fa-stroopwafel','fas fa-subscript','fas fa-subway','fas fa-suitcase','fas fa-suitcase-rolling','fas fa-sun','fas fa-superscript','fas fa-surprise','fas fa-swatchbook','fas fa-swimmer','fas fa-swimming-pool','fas fa-synagogue','fas fa-sync','fas fa-sync-alt','fas fa-syringe','fas fa-table','fas fa-table-tennis','fas fa-tablet','fas fa-tablet-alt','fas fa-tablets','fas fa-tachometer-alt','fas fa-tag','fas fa-tags','fas fa-tape','fas fa-tasks','fas fa-taxi','fas fa-teeth','fas fa-teeth-open','fas fa-temperature-high','fas fa-temperature-low','fas fa-tenge','fas fa-terminal','fas fa-text-height','fas fa-text-width','fas fa-th','fas fa-th-large','fas fa-th-list','fas fa-theater-masks','fas fa-thermometer','fas fa-thermometer-empty','fas fa-thermometer-full','fas fa-thermometer-half','fas fa-thermometer-quarter','fas fa-thermometer-three-quarters','fas fa-thumbs-down','fas fa-thumbs-up','fas fa-thumbtack','fas fa-ticket-alt','fas fa-times','fas fa-times-circle','fas fa-tint','fas fa-tint-slash','fas fa-tired','fas fa-toggle-off','fas fa-toggle-on','fas fa-toilet','fas fa-toilet-paper','fas fa-toolbox','fas fa-tools','fas fa-tooth','fas fa-torah','fas fa-torii-gate','fas fa-tractor','fas fa-trademark','fas fa-traffic-light','fas fa-trailer','fas fa-train','fas fa-tram','fas fa-transgender','fas fa-transgender-alt','fas fa-trash','fas fa-trash-alt','fas fa-trash-restore','fas fa-trash-restore-alt','fas fa-tree','fas fa-trophy','fas fa-truck','fas fa-truck-loading','fas fa-truck-monster','fas fa-truck-moving','fas fa-truck-pickup','fas fa-tshirt','fas fa-tty','fas fa-tv','fas fa-umbrella','fas fa-umbrella-beach','fas fa-underline','fas fa-undo','fas fa-undo-alt','fas fa-universal-access','fas fa-university','fas fa-unlink','fas fa-unlock','fas fa-unlock-alt','fas fa-upload','fas fa-user','fas fa-user-alt','fas fa-user-alt-slash','fas fa-user-astronaut','fas fa-user-check','fas fa-user-circle','fas fa-user-clock','fas fa-user-cog','fas fa-user-edit','fas fa-user-friends','fas fa-user-graduate','fas fa-user-injured','fas fa-user-lock','fas fa-user-md','fas fa-user-minus','fas fa-user-ninja','fas fa-user-nurse','fas fa-user-plus','fas fa-user-secret','fas fa-user-shield','fas fa-user-slash','fas fa-user-tag','fas fa-user-tie','fas fa-user-times','fas fa-users','fas fa-users-cog','fas fa-utensil-spoon','fas fa-utensils','fas fa-vector-square','fas fa-venus','fas fa-venus-double','fas fa-venus-mars','fas fa-vial','fas fa-vials','fas fa-video','fas fa-video-slash','fas fa-vihara','fas fa-voicemail','fas fa-volleyball-ball','fas fa-volume-down','fas fa-volume-mute','fas fa-volume-off','fas fa-volume-up','fas fa-vote-yea','fas fa-vr-cardboard','fas fa-walking','fas fa-wallet','fas fa-warehouse','fas fa-water','fas fa-wave-square','fas fa-weight','fas fa-weight-hanging','fas fa-wheelchair','fas fa-wifi','fas fa-wind','fas fa-window-close','fas fa-window-maximize','fas fa-window-minimize','fas fa-window-restore','fas fa-wine-bottle','fas fa-wine-glass','fas fa-wine-glass-alt','fas fa-won-sign','fas fa-wrench','fas fa-x-ray','fas fa-yen-sign','fas fa-yin-yang','far fa-address-book','far fa-address-card','far fa-angry','far fa-arrow-alt-circle-down','far fa-arrow-alt-circle-left','far fa-arrow-alt-circle-right','far fa-arrow-alt-circle-up','far fa-bell','far fa-bell-slash','far fa-bookmark','far fa-building','far fa-calendar','far fa-calendar-alt','far fa-calendar-check','far fa-calendar-minus','far fa-calendar-plus','far fa-calendar-times','far fa-caret-square-down','far fa-caret-square-left','far fa-caret-square-right','far fa-caret-square-up','far fa-chart-bar','far fa-check-circle','far fa-check-square','far fa-circle','far fa-clipboard','far fa-clock','far fa-clone','far fa-closed-captioning','far fa-comment','far fa-comment-alt','far fa-comment-dots','far fa-comments','far fa-compass','far fa-copy','far fa-copyright','far fa-credit-card','far fa-dizzy','far fa-dot-circle','far fa-edit','far fa-envelope','far fa-envelope-open','far fa-eye','far fa-eye-slash','far fa-file','far fa-file-alt','far fa-file-archive','far fa-file-audio','far fa-file-code','far fa-file-excel','far fa-file-image','far fa-file-pdf','far fa-file-powerpoint','far fa-file-video','far fa-file-word','far fa-flag','far fa-flushed','far fa-folder','far fa-folder-open','far fa-frown','far fa-frown-open','far fa-futbol','far fa-gem','far fa-grimace','far fa-grin','far fa-grin-alt','far fa-grin-beam','far fa-grin-beam-sweat','far fa-grin-hearts','far fa-grin-squint','far fa-grin-squint-tears','far fa-grin-stars','far fa-grin-tears','far fa-grin-tongue','far fa-grin-tongue-squint','far fa-grin-tongue-wink','far fa-grin-wink','far fa-hand-lizard','far fa-hand-paper','far fa-hand-peace','far fa-hand-point-down','far fa-hand-point-left','far fa-hand-point-right','far fa-hand-point-up','far fa-hand-pointer','far fa-hand-rock','far fa-hand-scissors','far fa-hand-spock','far fa-handshake','far fa-hdd','far fa-heart','far fa-hospital','far fa-hourglass','far fa-id-badge','far fa-id-card','far fa-image','far fa-images','far fa-keyboard','far fa-kiss','far fa-kiss-beam','far fa-kiss-wink-heart','far fa-laugh','far fa-laugh-beam','far fa-laugh-squint','far fa-laugh-wink','far fa-lemon','far fa-life-ring','far fa-lightbulb','far fa-list-alt','far fa-map','far fa-meh','far fa-meh-blank','far fa-meh-rolling-eyes','far fa-minus-square','far fa-money-bill-alt','far fa-moon','far fa-newspaper','far fa-object-group','far fa-object-ungroup','far fa-paper-plane','far fa-pause-circle','far fa-play-circle','far fa-plus-square','far fa-question-circle','far fa-registered','far fa-sad-cry','far fa-sad-tear','far fa-save','far fa-share-square','far fa-smile','far fa-smile-beam','far fa-smile-wink','far fa-snowflake','far fa-square','far fa-star','far fa-star-half','far fa-sticky-note','far fa-stop-circle','far fa-sun','far fa-surprise','far fa-thumbs-down','far fa-thumbs-up','far fa-times-circle','far fa-tired','far fa-trash-alt','far fa-user','far fa-user-circle','far fa-window-close','far fa-window-maximize','far fa-window-minimize','far fa-window-restore','fab fa-500px','fab fa-accessible-icon','fab fa-accusoft','fab fa-acquisitions-incorporated','fab fa-adn','fab fa-adobe','fab fa-adversal','fab fa-affiliatetheme','fab fa-airbnb','fab fa-algolia','fab fa-alipay','fab fa-amazon','fab fa-amazon-pay','fab fa-amilia','fab fa-android','fab fa-angellist','fab fa-angrycreative','fab fa-angular','fab fa-app-store','fab fa-app-store-ios','fab fa-apper','fab fa-apple','fab fa-apple-pay','fab fa-artstation','fab fa-asymmetrik','fab fa-atlassian','fab fa-audible','fab fa-autoprefixer','fab fa-avianex','fab fa-aviato','fab fa-aws','fab fa-bandcamp','fab fa-battle-net','fab fa-behance','fab fa-behance-square','fab fa-bimobject','fab fa-bitbucket','fab fa-bitcoin','fab fa-bity','fab fa-black-tie','fab fa-blackberry','fab fa-blogger','fab fa-blogger-b','fab fa-bluetooth','fab fa-bluetooth-b','fab fa-bootstrap','fab fa-btc','fab fa-buffer','fab fa-buromobelexperte','fab fa-buy-n-large','fab fa-buysellads','fab fa-canadian-maple-leaf','fab fa-cc-amazon-pay','fab fa-cc-amex','fab fa-cc-apple-pay','fab fa-cc-diners-club','fab fa-cc-discover','fab fa-cc-jcb','fab fa-cc-mastercard','fab fa-cc-paypal','fab fa-cc-stripe','fab fa-cc-visa','fab fa-centercode','fab fa-centos','fab fa-chrome','fab fa-chromecast','fab fa-cloudscale','fab fa-cloudsmith','fab fa-cloudversify','fab fa-codepen','fab fa-codiepie','fab fa-confluence','fab fa-connectdevelop','fab fa-contao','fab fa-cotton-bureau','fab fa-cpanel','fab fa-creative-commons','fab fa-creative-commons-by','fab fa-creative-commons-nc','fab fa-creative-commons-nc-eu','fab fa-creative-commons-nc-jp','fab fa-creative-commons-nd','fab fa-creative-commons-pd','fab fa-creative-commons-pd-alt','fab fa-creative-commons-remix','fab fa-creative-commons-sa','fab fa-creative-commons-sampling','fab fa-creative-commons-sampling-plus','fab fa-creative-commons-share','fab fa-creative-commons-zero','fab fa-critical-role','fab fa-css3','fab fa-css3-alt','fab fa-cuttlefish','fab fa-d-and-d','fab fa-d-and-d-beyond','fab fa-dailymotion','fab fa-dashcube','fab fa-delicious','fab fa-deploydog','fab fa-deskpro','fab fa-dev','fab fa-deviantart','fab fa-dhl','fab fa-diaspora','fab fa-digg','fab fa-digital-ocean','fab fa-discord','fab fa-discourse','fab fa-dochub','fab fa-docker','fab fa-draft2digital','fab fa-dribbble','fab fa-dribbble-square','fab fa-dropbox','fab fa-drupal','fab fa-dyalog','fab fa-earlybirds','fab fa-ebay','fab fa-edge','fab fa-elementor','fab fa-ello','fab fa-ember','fab fa-empire','fab fa-envira','fab fa-erlang','fab fa-ethereum','fab fa-etsy','fab fa-evernote','fab fa-expeditedssl','fab fa-facebook','fab fa-facebook-f','fab fa-facebook-messenger','fab fa-facebook-square','fab fa-fantasy-flight-games','fab fa-fedex','fab fa-fedora','fab fa-figma','fab fa-firefox','fab fa-firefox-browser','fab fa-first-order','fab fa-first-order-alt','fab fa-firstdraft','fab fa-flickr','fab fa-flipboard','fab fa-fly','fab fa-font-awesome','fab fa-font-awesome-alt','fab fa-font-awesome-flag','fab fa-fonticons','fab fa-fonticons-fi','fab fa-fort-awesome','fab fa-fort-awesome-alt','fab fa-forumbee','fab fa-foursquare','fab fa-free-code-camp','fab fa-freebsd','fab fa-fulcrum','fab fa-galactic-republic','fab fa-galactic-senate','fab fa-get-pocket','fab fa-gg','fab fa-gg-circle','fab fa-git','fab fa-git-alt','fab fa-git-square','fab fa-github','fab fa-github-alt','fab fa-github-square','fab fa-gitkraken','fab fa-gitlab','fab fa-gitter','fab fa-glide','fab fa-glide-g','fab fa-gofore','fab fa-goodreads','fab fa-goodreads-g','fab fa-google','fab fa-google-drive','fab fa-google-play','fab fa-google-plus','fab fa-google-plus-g','fab fa-google-plus-square','fab fa-google-wallet','fab fa-gratipay','fab fa-grav','fab fa-gripfire','fab fa-grunt','fab fa-gulp','fab fa-hacker-news','fab fa-hacker-news-square','fab fa-hackerrank','fab fa-hips','fab fa-hire-a-helper','fab fa-hooli','fab fa-hornbill','fab fa-hotjar','fab fa-houzz','fab fa-html5','fab fa-hubspot','fab fa-ideal','fab fa-imdb','fab fa-instagram','fab fa-instagram-square','fab fa-intercom','fab fa-internet-explorer','fab fa-invision','fab fa-ioxhost','fab fa-itch-io','fab fa-itunes','fab fa-itunes-note','fab fa-java','fab fa-jedi-order','fab fa-jenkins','fab fa-jira','fab fa-joget','fab fa-joomla','fab fa-js','fab fa-js-square','fab fa-jsfiddle','fab fa-kaggle','fab fa-keybase','fab fa-keycdn','fab fa-kickstarter','fab fa-kickstarter-k','fab fa-korvue','fab fa-laravel','fab fa-lastfm','fab fa-lastfm-square','fab fa-leanpub','fab fa-less','fab fa-line','fab fa-linkedin','fab fa-linkedin-in','fab fa-linode','fab fa-linux','fab fa-lyft','fab fa-magento','fab fa-mailchimp','fab fa-mandalorian','fab fa-markdown','fab fa-mastodon','fab fa-maxcdn','fab fa-mdb','fab fa-medapps','fab fa-medium','fab fa-medium-m','fab fa-medrt','fab fa-meetup','fab fa-megaport','fab fa-mendeley','fab fa-microblog','fab fa-microsoft','fab fa-mix','fab fa-mixcloud','fab fa-mixer','fab fa-mizuni','fab fa-modx','fab fa-monero','fab fa-napster','fab fa-neos','fab fa-nimblr','fab fa-node','fab fa-node-js','fab fa-npm','fab fa-ns8','fab fa-nutritionix','fab fa-odnoklassniki','fab fa-odnoklassniki-square','fab fa-old-republic','fab fa-opencart','fab fa-openid','fab fa-opera','fab fa-optin-monster','fab fa-orcid','fab fa-osi','fab fa-page4','fab fa-pagelines','fab fa-palfed','fab fa-patreon','fab fa-paypal','fab fa-penny-arcade','fab fa-periscope','fab fa-phabricator','fab fa-phoenix-framework','fab fa-phoenix-squadron','fab fa-php','fab fa-pied-piper','fab fa-pied-piper-alt','fab fa-pied-piper-hat','fab fa-pied-piper-pp','fab fa-pied-piper-square','fab fa-pinterest','fab fa-pinterest-p','fab fa-pinterest-square','fab fa-playstation','fab fa-product-hunt','fab fa-pushed','fab fa-python','fab fa-qq','fab fa-quinscape','fab fa-quora','fab fa-r-project','fab fa-raspberry-pi','fab fa-ravelry','fab fa-react','fab fa-reacteurope','fab fa-readme','fab fa-rebel','fab fa-red-river','fab fa-reddit','fab fa-reddit-alien','fab fa-reddit-square','fab fa-redhat','fab fa-renren','fab fa-replyd','fab fa-researchgate','fab fa-resolving','fab fa-rev','fab fa-rocketchat','fab fa-rockrms','fab fa-safari','fab fa-salesforce','fab fa-sass','fab fa-schlix','fab fa-scribd','fab fa-searchengin','fab fa-sellcast','fab fa-sellsy','fab fa-servicestack','fab fa-shirtsinbulk','fab fa-shopify','fab fa-shopware','fab fa-simplybuilt','fab fa-sistrix','fab fa-sith','fab fa-sketch','fab fa-skyatlas','fab fa-skype','fab fa-slack','fab fa-slack-hash','fab fa-slideshare','fab fa-snapchat','fab fa-snapchat-ghost','fab fa-snapchat-square','fab fa-soundcloud','fab fa-sourcetree','fab fa-speakap','fab fa-speaker-deck','fab fa-spotify','fab fa-squarespace','fab fa-stack-exchange','fab fa-stack-overflow','fab fa-stackpath','fab fa-staylinked','fab fa-steam','fab fa-steam-square','fab fa-steam-symbol','fab fa-sticker-mule','fab fa-strava','fab fa-stripe','fab fa-stripe-s','fab fa-studiovinari','fab fa-stumbleupon','fab fa-stumbleupon-circle','fab fa-superpowers','fab fa-supple','fab fa-suse','fab fa-swift','fab fa-symfony','fab fa-teamspeak','fab fa-telegram','fab fa-telegram-plane','fab fa-tencent-weibo','fab fa-the-red-yeti','fab fa-themeco','fab fa-themeisle','fab fa-think-peaks','fab fa-trade-federation','fab fa-trello','fab fa-tripadvisor','fab fa-tumblr','fab fa-tumblr-square','fab fa-twitch','fab fa-twitter','fab fa-twitter-square','fab fa-typo3','fab fa-uber','fab fa-ubuntu','fab fa-uikit','fab fa-umbraco','fab fa-uniregistry','fab fa-unity','fab fa-untappd','fab fa-ups','fab fa-usb','fab fa-usps','fab fa-ussunnah','fab fa-vaadin','fab fa-viacoin','fab fa-viadeo','fab fa-viadeo-square','fab fa-viber','fab fa-vimeo','fab fa-vimeo-square','fab fa-vimeo-v','fab fa-vine','fab fa-vk','fab fa-vnv','fab fa-vuejs','fab fa-waze','fab fa-weebly','fab fa-weibo','fab fa-weixin','fab fa-whatsapp','fab fa-whatsapp-square','fab fa-whmcs','fab fa-wikipedia-w','fab fa-windows','fab fa-wix','fab fa-wizards-of-the-coast','fab fa-wolf-pack-battalion','fab fa-wordpress','fab fa-wordpress-simple','fab fa-wpbeginner','fab fa-wpexplorer','fab fa-wpforms','fab fa-wpressr','fab fa-xbox','fab fa-xing','fab fa-xing-square','fab fa-y-combinator','fab fa-yahoo','fab fa-yammer','fab fa-yandex','fab fa-yandex-international','fab fa-yarn','fab fa-yelp','fab fa-yoast','fab fa-youtube','fab fa-youtube-square','fab fa-zhihu']","import Modal from 'flarum/components/Modal';\nimport ChatSearchUser from './ChatSearchUser';\nimport Stream from 'flarum/utils/Stream';\nimport classList from 'flarum/utils/classList';\nimport { fa5IconsList } from '../resources';\nimport highlight from 'flarum/helpers/highlight';\n\nexport default class ChatModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n\n app.search.neonchat = { usersSelected: [] };\n this.usersSelected = app.search.neonchat.usersSelected;\n\n this.input = {\n title: Stream(''),\n color: Stream(''),\n icon: Stream(''),\n iconState: {\n matches: [],\n lastInput: null,\n },\n };\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n app.search.neonchat = null;\n }\n\n getInput() {\n return this.input;\n }\n\n setSelectedUsers(users) {\n app.search.neonchat.usersSelected = users;\n this.usersSelected = app.search.neonchat.usersSelected;\n }\n\n getSelectedUsers() {\n return this.usersSelected;\n }\n\n className() {\n return 'ChatModal Modal--small';\n }\n\n isChatExists() {\n return this.getSelectedUsers().length === 1 && app.chat.isExistsPMChat(app.session.user, this.getSelectedUsers()[0]);\n }\n\n alertText() {\n if (this.isChatExists()) return app.translator.trans('xelson-chat.forum.chat.list.add_modal.alerts.exists');\n\n return null;\n }\n\n componentAlert() {\n return !this.alertText() ? null :
    {this.alertText()}
    ;\n }\n\n componentFormUsersSelect(label = 'xelson-chat.forum.chat.list.add_modal.form.users') {\n return [, this.componentUsersSelect()];\n }\n\n userMentionContent(user) {\n return '@' + user.displayName();\n }\n\n userMentionClassname(user) {\n return 'deletable';\n }\n\n userMentionOnClick(event, user) {\n return this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(user), 1);\n }\n\n componentUsersMentions() {\n return (\n
    \n {this.getSelectedUsers().map((u) => (\n
    \n {this.userMentionContent(u)}\n
    \n ))}\n
    \n );\n }\n\n componentUsersSelect() {\n return [\n this.componentAlert(),\n this.componentUsersMentions(),\n
    \n \n
    ,\n ];\n }\n\n componentFormIcon(options) {\n return [\n options.title ? : null,\n
    \n {options.desc ? : null}\n
    \n (this.inputIconHasFocus = true)}\n onclick={() => (this.inputIconHasFocus = true)}\n onkeypress={(e) => (this.inputIconHasFocus = !(e.keyCode == 13))}\n />\n \n \n \n {this.inputIconHasFocus ? this.dropdownIconMatches(this.input.icon()) : null}\n
    \n
    ,\n ];\n }\n\n componentFormColor(options) {\n return [\n options.title ? : null,\n
    \n {options.desc ? : null}\n
    \n \n \n
    \n
    ,\n ];\n }\n\n dropdownIconMatches(search) {\n let inputIcon = this.input.icon();\n let iconState = this.input.iconState;\n\n if (inputIcon !== iconState.lastInput) {\n iconState.matches = fa5IconsList.filter((icon) => icon.includes(inputIcon));\n if (iconState.matches.length > 5) iconState.matches = iconState.matches.sort((a, b) => 0.5 - Math.random());\n\n iconState.lastInput = inputIcon;\n }\n\n return inputIcon.length && iconState.matches.length > 0 && !(iconState.matches.length == 1 && iconState.matches[0] === inputIcon) ? (\n
      \n
    • Font Awesome 5
    • \n {iconState.matches.slice(-5).map((icon) => (\n
    • this.input.icon(icon)}>\n \n \n \n {highlight(icon, inputIcon)}\n
    • \n ))}\n
    \n ) : null;\n }\n\n formInputOnUpdate(vnode) {\n $('.Chat-FullColor').css({ color: this.input.color(), backgroundColor: this.input.color() });\n }\n\n componentFormInput(options) {\n return [\n options.title ? : null,\n
    \n {options.desc ? : null}\n \n
    ,\n ];\n }\n}\n","import Button from 'flarum/components/Button';\nimport Dropdown from 'flarum/components/Dropdown';\nimport classList from 'flarum/utils/classList';\nimport Model from 'flarum/Model';\nimport Group from 'flarum/models/Group';\n\nimport ChatModal from './ChatModal';\nimport Stream from 'flarum/utils/Stream';\n\nexport default class ChatEditModal extends ChatModal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.getInput().title = Stream(this.model.title());\n this.getInput().color = Stream(this.model.color());\n this.getInput().icon = Stream(this.model.icon());\n\n this.deleteChatTitleInput = Stream('');\n this.deleteState = 0;\n\n this.initialUsers = this.model.users().filter((mdl) => !mdl.chat_pivot(this.model.id()).removed_at());\n this.setSelectedUsers(this.model.users().filter((mdl) => !mdl.chat_pivot(this.model.id()).removed_at()));\n this.edited = {};\n\n this.isLocalModerator = this.isModer(app.session.user);\n this.isLocalLeaved = !this.initialUsers.includes(app.session.user);\n }\n\n title() {\n return app.translator.trans('xelson-chat.forum.chat.edit_modal.title');\n }\n\n onsubmit() {\n let added = this.getSelectedUsers()\n .map((mdl) => (!this.initialUsers.includes(mdl) ? Model.getIdentifier(mdl) : null))\n .filter((e) => e);\n let removed = this.initialUsers.map((mdl) => (!this.getSelectedUsers().includes(mdl) ? Model.getIdentifier(mdl) : null)).filter((e) => e);\n let edited = Object.keys(this.edited).map((k) => (this.edited[k] = { id: k, ...this.edited[k] }));\n\n this.model.save({\n title: this.getInput().title(),\n color: this.getInput().color(),\n icon: this.getInput().icon(),\n users: { added, removed, edited },\n relationships: { users: this.getSelectedUsers() },\n });\n\n this.hide();\n }\n\n alertText() {\n return null;\n }\n\n isModer(user) {\n if (!user) return false;\n if (this.edited[user.id()]?.role ?? user.chat_pivot(this.model.id()).role()) return true;\n if (this.isCreator(user)) return true;\n\n return false;\n }\n\n isCreator(user) {\n return (\n user.chat_pivot(this.model.id()).role() == 2 ||\n (!this.model.creator() && user.groups() && user.groups().some((g) => g.id() == Group.ADMINISTRATOR_ID))\n );\n }\n\n userMentionClassname(user) {\n return classList({ editable: true, moder: this.isModer(user), creator: this.isCreator(user) });\n }\n\n userMentionDropdownOnclick(user, button) {\n switch (button) {\n case 'moder': {\n if (this.isModer(user)) this.edited[user.id()] = { role: 0 };\n else this.edited[user.id()] = { role: 1 };\n\n break;\n }\n case 'kick': {\n this.getSelectedUsers().splice(this.getSelectedUsers().indexOf(user), 1);\n break;\n }\n }\n }\n\n componentUserMentionDropdown(user) {\n return (\n \n \n {app.translator.trans('xelson-chat.forum.chat.moder')}\n \n = this.isLocalModerator && user != app.session.user}\n >\n {app.translator.trans(`xelson-chat.forum.chat.${user == app.session.user ? 'leave' : 'kick'}`)}\n \n \n );\n }\n\n userMentionContent(user) {\n return ['@' + user.displayName(), this.isLocalModerator && !app.chat.isChatPM(this.model) ? this.componentUserMentionDropdown(user) : null];\n }\n\n userMentionOnClick(user, e) {\n this.$(e.target).find('.Dropdown').trigger('shown.bs.dropdown');\n }\n\n componentFormInputIcon() {\n return this.componentFormIcon({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.icon.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.icon.validator', {\n a: ,\n }),\n stream: this.getInput().icon,\n placeholder: 'fas fa-bolt',\n });\n }\n\n componentFormInputTitle() {\n return this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.validator'),\n stream: this.getInput().title,\n placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.title.label'),\n });\n }\n\n componentFormInputColor() {\n return this.componentFormColor({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.validator'),\n stream: this.getInput().color,\n placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.color.label'),\n });\n }\n\n componentChatInfo() {\n return [\n ,\n this.componentUsersMentions(),\n ];\n }\n\n componentFormPM() {\n return this.componentChatInfo();\n }\n\n componentFormChannel() {\n return this.isLocalModerator\n ? [\n this.componentFormInputTitle(),\n this.componentFormInputColor(),\n this.componentFormInputIcon(),\n this.componentFormUsersSelect('xelson-chat.forum.chat.edit_modal.form.users.edit'),\n ]\n : this.componentChatInfo();\n }\n\n componentFormChat() {\n return this.isLocalModerator\n ? [this.componentFormInputTitle(), this.componentFormInputColor(), this.componentFormInputIcon(), this.componentFormUsersSelect()]\n : this.componentChatInfo();\n }\n\n componentForm() {\n if (this.model.type()) return this.componentFormChannel();\n if (app.chat.isChatPM(this.model)) return this.componentFormPM();\n\n return this.componentFormChat();\n }\n\n componentFormButtons() {\n let buttons = [];\n\n if (this.isLocalModerator && !app.chat.isChatPM(this.model))\n buttons.push(\n \n {app.translator.trans('xelson-chat.forum.chat.edit_modal.save_button')}\n \n );\n\n buttons.push(\n \n {app.translator.trans(`xelson-chat.forum.chat.edit_modal.form.${this.isLocalLeaved ? 'return' : 'leave'}`)}\n \n );\n\n if (!app.chat.isChatPM(this.model) && app.chat.getPermissions().create.channel) buttons.push(this.componentDeleteChat());\n\n return buttons;\n }\n\n onleave() {\n if (!this.isLocalLeaved) {\n this.model\n .save({\n users: { removed: [Model.getIdentifier(app.session.user)] },\n relationships: { users: this.getSelectedUsers() },\n })\n .then((e) => m.redraw());\n } else {\n this.getSelectedUsers().push(app.session.user);\n\n this.model\n .save({\n users: { added: [Model.getIdentifier(app.session.user)] },\n relationships: { users: this.getSelectedUsers() },\n })\n .then((e) => m.redraw());\n }\n\n this.hide();\n }\n\n isCanEditChannel() {\n return this.getInput().title().length;\n }\n\n isCanEditChat() {\n if (this.alertText()) return false;\n\n return true;\n }\n\n componentDeleteChat() {\n return [\n this.deleteState == 1\n ? [\n

    ,\n this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.title'),\n desc: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.desc'),\n placeholder: app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.placeholder'),\n stream: this.deleteChatTitleInput,\n }),\n ]\n : null,\n \n {app.translator.trans('xelson-chat.forum.chat.edit_modal.form.delete.button')}\n ,\n ];\n }\n\n isValidTitleCopy() {\n return this.deleteChatTitleInput() == this.model.title();\n }\n\n ondelete() {\n switch (this.deleteState) {\n case 0: {\n this.deleteState = 1;\n break;\n }\n case 1: {\n if (this.isValidTitleCopy()) {\n app.chat.deleteChat(this.model);\n this.model.delete();\n\n this.hide();\n }\n break;\n }\n }\n }\n\n content() {\n return (\n
    \n
    \n {this.componentForm()}\n
    \n {this.componentFormButtons()}\n
    \n
    \n );\n }\n}\n","import Component from 'flarum/Component';\nimport Link from 'flarum/components/Link';\nimport ItemList from 'flarum/utils/ItemList';\n\nimport ChatEditModal from './ChatEditModal';\n\nexport default class ChatHeader extends Component {\n view(vnode) {\n const attrs = {};\n\n if (this.attrs.ondragstart) attrs.ondragstart = this.attrs.ondragstart;\n if (this.attrs.ondragstart) attrs.onmousedown = this.attrs.onmousedown;\n\n return (\n
    \n {this.attrs.showChatListStream ? (\n {\n this.attrs.showChatListStream(!this.attrs.showChatListStream());\n e.stopPropagation();\n }}\n >\n \n
    \n ) : (\n ''\n )}\n
    \n {!app.chat.getCurrentChat() || !app.session.user ? null : (\n app.modal.show(ChatEditModal, { model: app.chat.getCurrentChat() })}\n >\n \n \n )}\n
    {this.windowButtonItems().toArray()}
    \n \n );\n }\n\n windowButtonItems() {\n const items = new ItemList();\n\n items.add(\n 'sound',\n \n \n \n );\n\n items.add(\n 'notifications',\n \n \n \n );\n\n if (this.attrs.inFrame) {\n items.add(\n 'minimize',\n \n \n \n );\n }\n\n /*\n if (this.attrs.inFrame && app.screen() === 'phone') {\n items.add(\n 'fullscreen',\n \n \n \n );\n }\n */\n\n return items;\n }\n\n toggleChat(e) {\n const showing = !app.chat.getFrameState('beingShown');\n\n app.chat.saveFrameState('beingShown', showing);\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n toggleSound(e) {\n app.chat.saveFrameState('isMuted', !app.chat.getFrameState('isMuted'));\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n toggleNotifications(e) {\n app.chat.saveFrameState('notify', !app.chat.getFrameState('notify'));\n if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission();\n\n e.preventDefault();\n e.stopPropagation();\n }\n}\n","import Button from 'flarum/components/Button';\nimport classList from 'flarum/utils/classList';\n\nimport ChatSearchUser from './ChatSearchUser';\nimport ChatModal from './ChatModal';\nimport Stream from 'flarum/utils/Stream';\n\nexport default class ChatCreateModal extends ChatModal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.isChannel = false;\n }\n\n title() {\n return app.translator.trans('xelson-chat.forum.chat.list.add_modal.title');\n }\n\n onsubmit() {\n app.store\n .createRecord('chats')\n .save({\n title: this.getInput().title(),\n isChannel: this.isChannel,\n icon: this.getInput().icon(),\n color: this.getInput().color(),\n relationships: { users: [...this.getSelectedUsers(), app.session.user] },\n })\n .then((model) => {\n app.chat.addChat(model);\n app.chat.onChatChanged(model);\n m.redraw();\n });\n this.hide();\n }\n\n componentFormInputColor() {\n return this.componentFormColor({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.validator'),\n stream: this.getInput().color,\n placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.color.label'),\n });\n }\n\n componentFormInputIcon() {\n return this.componentFormIcon({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.icon.label'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.icon.validator', {\n a: ,\n }),\n stream: this.getInput().icon,\n placeholder: 'fas fa-bolt',\n });\n }\n\n componentFormChat() {\n return [\n this.usersSelected.length > 1\n ? [\n this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.chat'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.validator'),\n stream: this.getInput().title,\n placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.chat'),\n }),\n this.componentFormInputColor(),\n this.componentFormInputIcon(),\n ]\n : null,\n this.componentFormUsersSelect(),\n ];\n }\n\n componentFormChannel() {\n return [\n this.componentFormInput({\n title: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.channel'),\n desc: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.validator'),\n stream: this.getInput().title,\n placeholder: app.translator.trans('xelson-chat.forum.chat.list.add_modal.form.title.channel'),\n }),\n this.componentFormInputColor(),\n this.componentFormInputIcon(),\n ];\n }\n\n isCanCreateChat() {\n if (this.getSelectedUsers().length > 1 && !this.getInput().title().length) return false;\n if (!this.getSelectedUsers().length) return false;\n if (this.alertText()) return false;\n\n return true;\n }\n\n isCanCreateChannel() {\n return this.getInput().title().length;\n }\n\n content() {\n return (\n
    \n
    \n {app.chat.getPermissions().create.channel ? (\n
    \n (this.isChannel = false)).bind(this)}\n >\n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.chat')}\n
    \n (this.isChannel = true)).bind(this)}\n >\n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.channel')}\n
    \n
    \n ) : null}\n {this.isChannel ? this.componentFormChannel() : this.componentFormChat()}\n
    \n \n {app.translator.trans('xelson-chat.forum.chat.list.add_modal.create.' + (this.isChannel ? 'channel' : 'chat'))}\n \n \n \n );\n }\n}\n","import Component from 'flarum/Component';\nimport classList from 'flarum/utils/classList';\n\nexport default class ChatAvatar extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n }\n\n componentAvatarPM() {\n return (\n \n {this.model.icon() ? (\n \n ) : this.model.avatarUrl() ? null : (\n this.firstLetter(this.model.title()).toUpperCase()\n )}\n \n );\n }\n\n componentAvatarChannel() {\n return (\n
    \n {this.model.icon() ? (\n \n ) : this.model.avatarUrl() ? null : (\n this.firstLetter(this.model.title()).toUpperCase()\n )}\n
    \n );\n }\n\n view(vnode) {\n return this.model.type() == 1 ? this.componentAvatarChannel() : this.componentAvatarPM();\n }\n\n firstLetter(string) {\n for (let i = 0; i < string.length; i++) {\n if (this.isLetter(string[i])) return string[i];\n }\n return string[0];\n }\n\n isLetter(c) {\n return c.toLowerCase() != c.toUpperCase();\n }\n}\n","import humanTime from 'flarum/utils/humanTime';\nimport Component from 'flarum/Component';\nimport classList from 'flarum/utils/classList';\nimport extractText from 'flarum/utils/extractText';\nimport SubtreeRetainer from 'flarum/utils/SubtreeRetainer';\n\nimport ChatAvatar from './ChatAvatar';\n\nexport default class ChatPreview extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n\n this.subtree = new SubtreeRetainer(\n () => this.model.freshness,\n () => app.chat.getCurrentChat(),\n\n // Reactive attrs\n () => this.model.isNeedToFlash\n );\n }\n\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n this.model = this.attrs.model;\n\n return this.subtree.needsRebuild();\n }\n\n view(vnode) {\n return (\n
    \n
    {this.componentPreview()}
    \n {this.model.unreaded() ?
    {this.model.unreaded()}
    : null}\n
    \n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n if (this.model.isNeedToFlash) {\n app.chat.flashItem($(vnode.dom));\n this.model.isNeedToFlash = false;\n }\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n if (this.model.isNeedToFlash) {\n app.chat.flashItem($(vnode.dom));\n this.model.isNeedToFlash = false;\n }\n }\n\n componentMessageTime() {\n let lastMessage = this.model.last_message();\n let time = new Date(lastMessage.created_at());\n if (Date.now() - time.getTime() < 60 * 60 * 12 * 1000) {\n let nl = (n) => (n < 10 ? '0' : '') + n;\n return nl(time.getHours()) + ':' + nl(time.getMinutes());\n }\n\n return humanTime(lastMessage.created_at());\n }\n\n componentPreview() {\n return [\n ,\n
    \n
    \n {this.model.icon() ? : null}\n {this.model.title()}\n
    \n {this.model.last_message() ? this.componentTextPreview() : this.componentTextEmpty()}\n
    ,\n this.model.last_message() ? (\n
    \n {(this.humanTime = this.componentMessageTime())}\n
    \n ) : null,\n ];\n }\n\n componentPreviewChannel() {\n return [\n ,\n
    \n
    \n {this.model.title()}\n
    \n {this.componentTextPreview()}\n
    ,\n
    \n {(this.humanTime = this.componentMessageTime())}\n
    ,\n ];\n }\n\n formatTextPreview(text) {\n let type;\n if (text.startsWith('```')) {\n text = app.translator.trans('xelson-chat.forum.chat.message.type.code');\n type = 'media';\n } else if (text.startsWith('http://') || text.startsWith('https://')) {\n text = app.translator.trans('xelson-chat.forum.chat.message.type.url');\n type = 'media';\n }\n return { text, type };\n }\n\n componentTextPreview() {\n let lastMessage = this.model.last_message();\n if (lastMessage.type() != 0) {\n return (\n
    \n {app.translator.trans('xelson-chat.forum.chat.message.type.event')}\n
    \n );\n }\n\n let formatResult = this.formatTextPreview(lastMessage.message());\n let senderName,\n users = this.model.users(),\n sender = lastMessage.user();\n if (app.session.user) {\n if (app.session.user == sender) senderName = `${app.translator.trans('xelson-chat.forum.chat.message.you')}: `;\n else if (users.length > 2 || this.model.type()) senderName = sender.displayName() + ': ';\n }\n\n return (\n \n {senderName}\n {formatResult.text}\n \n );\n }\n\n componentTextEmpty() {\n return (\n
    \n {app.translator.trans('xelson-chat.forum.chat.list.preview.empty')}\n
    \n );\n }\n}\n","import Component from 'flarum/Component';\nimport ChatCreateModal from './ChatCreateModal';\nimport ChatPreview from './ChatPreview';\n\nexport default class ChatFrame extends Component {\n view(vnode) {\n const classes = ['ChatList'];\n if (app.chat.getFrameState('beingShownChatsList') || this.attrs.inPage) classes.push('toggled');\n return (\n
    \n
    \n
    \n \n
    \n {this.attrs.inPage ? (\n ''\n ) : (\n \n \n
    \n )}\n
    \n
    \n {app.chat.getChatsSortedByLastUpdate().map((model) => (\n
    \n \n
    \n ))}\n {app.session.user && app.chat.getPermissions().create.chat ? (\n
    app.modal.show(ChatCreateModal)}>
    \n ) : null}\n
    \n \n );\n }\n\n content() {\n return app.chat.getChatsSortedByLastUpdate().map((model) => (\n
    \n \n
    \n ));\n }\n\n getChatsListPanel() {\n return document.querySelector('.ChatList');\n }\n\n getChatsList() {\n return document.querySelector('.ChatList .list');\n }\n\n toggleChatsList(e) {\n var chatLists = this.getChatsListPanel();\n var showing = true;\n\n if (chatLists.classList.contains('toggled')) {\n chatLists.classList.remove('toggled');\n showing = false;\n } else chatLists.classList.add('toggled');\n\n app.chat.saveFrameState('beingShownChatsList', showing);\n }\n}\n","import Component from 'flarum/Component';\nimport Button from 'flarum/components/Button';\nimport ChatEditModal from './ChatEditModal';\nimport { throttle } from 'flarum/utils/throttleDebounce';\n\nexport default class ChatInput extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.model;\n this.state = this.attrs.state;\n\n app.chat.input = this;\n\n this.messageCharLimit = app.forum.attribute('xelson-chat.settings.charlimit') ?? 512;\n\n this.updatePlaceholder();\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n let inputState = this.state.input;\n let input = this.$('#chat-input')[0];\n input.lineHeight = parseInt(window.getComputedStyle(input).getPropertyValue('line-height'));\n inputState.element = input;\n\n if (inputState.content() && inputState.content().length) {\n this.inputProcess({ target: input });\n }\n\n this.updateLimit();\n }\n\n onbeforeupdate(vnode, old) {\n super.onbeforeupdate(vnode, old);\n\n if (this.model !== this.attrs.model) {\n this.model = this.attrs.model;\n this.state = this.attrs.state;\n }\n this.updatePlaceholder();\n }\n\n updatePlaceholder() {\n if (!app.session.user) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.unauthenticated');\n else if (!app.chat.getPermissions().post) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.chatdenied');\n else if (this.model.removed_at()) this.inputPlaceholder = app.translator.trans('xelson-chat.forum.errors.removed');\n else this.inputPlaceholder = app.translator.trans('xelson-chat.forum.chat.placeholder');\n }\n\n view() {\n return (\n
    \n this.saveDraft.apply(this)}\n />\n {this.state.messageEditing ? (\n
    \n \n
    \n ) : null}\n {this.model.removed_at() && this.model.removed_by() === parseInt(app.session.user.id()) ? (\n \n ) : (\n [\n
    \n \n
    ,\n
    ,\n ]\n )}\n
    \n );\n }\n\n updateLimit() {\n const limiter = this.element.querySelector('#chat-limiter');\n if (!limiter) return;\n\n let charsTyped = this.messageCharLimit - (this.state.input.messageLength || 0);\n limiter.innerText = charsTyped + '/' + this.messageCharLimit;\n limiter.className = charsTyped < 100 ? 'reaching-limit' : '';\n }\n\n saveDraft(text = this.state.input.content()) {\n this.state.input.lastDraft != text &&\n throttle(300, () => {\n this.state.setChatStorageValue('draft', text);\n })();\n this.state.input.lastDraft = text;\n }\n\n inputSaveDraft(e) {\n if (e) e.redraw = false;\n\n let input = e.target;\n this.saveDraft(input.value.trim());\n }\n\n resizeInput() {\n let input = this.state.getChatInput();\n\n input.rows = 1;\n this.state.input.rows = Math.min(input.scrollHeight / input.lineHeight, app.screen() === 'phone' ? 2 : 5);\n input.rows = this.state.input.rows;\n }\n\n inputProcess(e) {\n if (e) e.redraw = false;\n\n let input = e.target;\n this.state.input.content(input.value);\n let inputValue = input.value.trim();\n this.state.input.messageLength = inputValue.length;\n this.updateLimit();\n\n this.resizeInput();\n\n if (this.state.input.messageLength) {\n if (!this.state.input.writingPreview && !this.state.messageEditing) this.inputPreviewStart(inputValue);\n } else {\n if (this.state.input.writingPreview && !inputValue.length) this.inputPreviewEnd();\n }\n\n if (this.state.messageEditing) this.state.messageEditing.content = inputValue;\n else if (this.state.input.writingPreview) this.state.input.previewModel.content = inputValue;\n\n if (this.attrs.oninput) this.attrs.oninput(e);\n }\n\n inputPressEnter(e) {\n e.redraw = false;\n if (e.keyCode == 13 && !e.shiftKey) {\n this.state.messageSend();\n return false;\n }\n return true;\n }\n\n inputPressButton() {\n this.state.messageSend();\n }\n\n inputPreviewStart(content) {\n if (!this.state.input.writingPreview) {\n this.state.input.writingPreview = true;\n\n this.state.input.previewModel = app.store.createRecord('chatmessages');\n this.state.input.previewModel.pushData({\n id: 0,\n attributes: { message: ' ', created_at: 0 },\n relationships: { user: app.session.user, chat: this.model },\n });\n Object.assign(this.state.input.previewModel, { isEditing: true, isNeedToFlash: true, content });\n } else this.state.input.previewModel.isNeedToFlash = true;\n\n m.redraw();\n }\n\n inputPreviewEnd() {\n this.state.input.writingPreview = false;\n\n m.redraw();\n }\n}\n","import Component from 'flarum/Component';\nimport avatar from 'flarum/helpers/avatar';\nimport username from 'flarum/helpers/username';\nimport fullTime from 'flarum/helpers/fullTime';\nimport classList from 'flarum/utils/classList';\nimport humanTime from 'flarum/utils/humanTime';\nimport extractText from 'flarum/utils/extractText';\nimport ItemList from 'flarum/utils/ItemList';\nimport SubtreeRetainer from 'flarum/utils/SubtreeRetainer';\n\nimport Dropdown from 'flarum/components/Dropdown';\nimport Button from 'flarum/components/Button';\nimport Separator from 'flarum/components/Separator';\nimport Link from 'flarum/components/Link';\n\nexport default class ChatMessage extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.labels = [];\n this.model = this.attrs.model;\n if (!this.model.content) this.model.content = this.model.message();\n\n this.initLabels();\n\n this.subtree = new SubtreeRetainer(\n () => this.model.freshness,\n () => this.model.user().freshness,\n () => app.chat.getCurrentChat(),\n\n // Reactive attrs\n () => this.model.content,\n () => this.model.isDeletedForever,\n () => this.model.isTimedOut,\n () => this.model.isEditing,\n () => this.model.isNeedToFlash\n );\n }\n\n modelEvent(name) {\n const viewportState = app.chat.getViewportState(this.model.chat());\n viewportState.onChatMessageClicked(name, this.model);\n app.chat.onChatMessageClicked(name, this.model);\n }\n\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n this.model = this.attrs.model;\n\n return this.subtree.needsRebuild();\n }\n\n content() {\n return (\n
    \n {this.model.user() ? (\n \n {avatar(this.model.user(), { className: 'avatar' })}\n \n ) : (\n
    \n {avatar(this.model.user(), { className: 'avatar' })}\n
    \n )}\n
    \n
    \n \n {extractText(username(this.model.user())) + ': '}\n \n
    {this.labels.map((label) => (label.condition() ? label.component() : null))}
    \n
    \n {this.model.id()\n ? [\n this.model.isDeletedForever ? null : this.editDropDown(),\n \n {(this.humanTime = humanTime(this.model.created_at()))}\n ,\n ]\n : this.model.isTimedOut\n ? this.editDropDownTimedOut()\n : null}\n
    \n
    \n
    \n {this.model.is_censored() ? (\n
    \n {this.model.content}\n
    \n ) : (\n \n {this.model.content}\n
    \n )}\n
    \n
    \n \n );\n }\n\n view(vnode) {\n return (\n \n {this.model ? this.content() : null}\n \n );\n }\n\n initLabels() {\n this.labelBind(\n () => this.model.edited_at(),\n () => (\n \n \n \n )\n );\n\n this.labelBind(\n () => this.model.deleted_by(),\n () => (\n
    \n {' '}\n \n {`(${app.translator.trans('xelson-chat.forum.chat.message.deleted' + (this.model.isDeletedForever ? '_forever' : ''))}`}{' '}\n {username(this.model.deleted_by())}\n {')'}\n \n
    \n )\n );\n\n this.labelBind(\n () => this.model.isTimedOut,\n () => (\n
    \n \n
    \n )\n );\n }\n\n labelBind(condition, component) {\n this.labels.push({ condition: condition, component: component });\n }\n\n editDropDown() {\n const items = new ItemList();\n\n if (app.chat.getPermissions().edit && this.model.user() && this.model.user() == app.session.user) {\n items.add(\n 'dropdownEditStart',\n \n {app.translator.trans('core.forum.post_controls.edit_button')}\n \n );\n }\n\n items.add('separator', );\n\n if (this.model.chat().role() || (app.chat.getPermissions().delete && this.model.user() == app.session.user)) {\n if (this.model.deleted_by()) {\n items.add(\n 'dropdownRestore',\n \n {app.translator.trans('core.forum.post_controls.restore_button')}\n \n );\n } else {\n items.add(\n 'dropdownHide',\n \n );\n }\n }\n\n if (this.model.chat().role() && (this.model.deleted_by() || app.chat.totalHidden() >= 3)) {\n items.add(\n 'dropdownDelete',\n \n );\n }\n\n return Object.keys(items.items).length <= 1 ? null : (\n
    \n \n {items.toArray()}\n \n
    \n );\n }\n\n editDropDownTimedOut() {\n return (\n
    \n \n \n \n \n
    \n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n this.messageWrapper = vnode.dom;\n\n this.pollInterval = setInterval(() => {\n this.renderMessage();\n }, 100);\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n clearInterval(this.pollInterval);\n }\n\n onContentWrapperUpdated(vnode) {\n super.onupdate(vnode);\n this.renderMessage(vnode.dom);\n }\n\n onContentWrapperCreated(vnode) {\n super.oncreate(vnode);\n this.renderMessage(vnode.dom);\n }\n\n renderMessage() {\n if (this.model.isNeedToFlash) {\n app.chat.flashItem($(this.messageWrapper));\n this.model.isNeedToFlash = false;\n }\n\n if (this.model.content !== this.oldContent) {\n this.oldContent = this.model.content;\n app.chat.renderChatMessage(this.model, this.model.content);\n }\n }\n\n isVisible() {\n if (this.model.chat() != app.chat.getCurrentChat()) return false;\n\n if (this.model.isDeletedForever) return false;\n\n if (this.model.deleted_by() && !(this.model.chat().role() || this.model.user() == app.session.user)) return false;\n\n return true;\n }\n}\n","import ChatMessage from './ChatMessage';\nimport Link from 'flarum/components/Link';\nimport extractText from 'flarum/utils/extractText';\nimport humanTime from 'flarum/utils/humanTime';\nimport fullTime from 'flarum/helpers/fullTime';\n\nexport default class ChatEventMessage extends ChatMessage {\n oninit(vnode) {\n super.oninit(vnode);\n\n if (\n this.model\n .message()\n .split('')\n .every((c) => c === '*')\n )\n this.parsedContent = { id: 'chatCensored' };\n else this.parsedContent = JSON.parse(this.model.message());\n }\n\n componentUserMention(user) {\n return (\n \n {user.displayName()}\n \n );\n }\n\n componentUserMentionsByIds(ids) {\n return ids.map((id) => this.componentUserMention(app.store.getById('users', id)));\n }\n\n componentEventText() {\n switch (this.parsedContent.id) {\n case 'chatCensored': {\n return (\n
    \n {this.model.message()}\n
    \n );\n }\n case 'chatCreated': {\n if (!this.model.chat()) return;\n\n if (this.model.chat().type() == 1) {\n return app.translator.trans(`xelson-chat.forum.chat.message.events.channel.created`, {\n creatorname: this.componentUserMention(this.model.user()),\n chatname: {this.model.chat().title()},\n });\n } else {\n if (this.model.chat().type() == 0 && this.model.chat().users().length <= 2) {\n return app.translator.trans(`xelson-chat.forum.chat.message.events.pm.created`, {\n creatorname: this.componentUserMention(this.model.chat().creator()),\n username: this.parsedContent.users.length\n ? this.componentUserMention(app.store.getById('users', this.parsedContent.users[0]))\n : null,\n });\n }\n\n return app.translator.trans(`xelson-chat.forum.chat.message.events.chat.created`, {\n creatorname: this.componentUserMention(this.model.user()),\n chatname: {this.model.chat().title()},\n usernames: this.componentUserMentionsByIds(this.parsedContent.users),\n username: this.parsedContent.users.length\n ? this.componentUserMention(app.store.getById('users', this.parsedContent.users[0]))\n : null,\n });\n }\n }\n case 'chatEdited': {\n let componentOld, componentNew;\n switch (this.parsedContent.column) {\n case 'title':\n componentOld = {this.parsedContent.old};\n componentNew = {this.parsedContent.new};\n break;\n\n case 'color':\n componentOld = ;\n componentNew = ;\n break;\n\n case 'icon':\n componentOld = this.parsedContent.old ? : [nothing];\n componentNew = ;\n break;\n }\n\n return app.translator.trans(`xelson-chat.forum.chat.message.events.${this.parsedContent.column}.edited`, {\n editorname: this.componentUserMention(this.model.user()),\n old: componentOld,\n new: componentNew,\n });\n }\n case 'chatAddRemoveUser': {\n if (this.parsedContent.add.length && this.parsedContent.remove.length) {\n return app.translator.trans('xelson-chat.forum.chat.message.events.users.invited_kicked', {\n editorname: this.componentUserMention(this.model.user()),\n invitednames: this.componentUserMentionsByIds(this.parsedContent.add),\n kickednames: this.componentUserMentionsByIds(this.parsedContent.remove),\n });\n } else if (this.parsedContent.add.length) {\n if (this.parsedContent.add[0] == this.model.user().id()) {\n return app.translator.trans('xelson-chat.forum.chat.message.events.self.entered', {\n username: this.componentUserMention(this.model.user()),\n });\n } else {\n return app.translator.trans('xelson-chat.forum.chat.message.events.users.invited', {\n editorname: this.componentUserMention(this.model.user()),\n usernames: this.componentUserMentionsByIds(this.parsedContent.add),\n });\n }\n } else if (this.parsedContent.remove.length) {\n if (this.parsedContent.remove[0] == this.model.user().id()) {\n return app.translator.trans('xelson-chat.forum.chat.message.events.self.leaved', {\n username: this.componentUserMention(this.model.user()),\n });\n } else {\n return app.translator.trans('xelson-chat.forum.chat.message.events.users.kicked', {\n editorname: this.componentUserMention(this.model.user()),\n usernames: this.componentUserMentionsByIds(this.parsedContent.remove),\n });\n }\n }\n }\n }\n }\n\n content() {\n return (\n \n );\n }\n}\n","import Component from 'flarum/Component';\n\nexport default class ChatWelcome extends Component {\n view(vnode) {\n return (\n
    \n
    \n {app.chat.getChats().length ? (\n
    \n

    {app.translator.trans('xelson-chat.forum.chat.welcome.header')}

    \n {app.translator.trans('xelson-chat.forum.chat.welcome.subheader')}\n
    \n ) : null}\n
    \n
    \n );\n }\n}\n","import Model from 'flarum/Model';\n\nexport default class Message extends Model {}\n\nObject.assign(Message.prototype, {\n message: Model.attribute('message'),\n user: Model.hasOne('user'),\n deleted_by: Model.hasOne('deleted_by'),\n chat: Model.hasOne('chat'),\n created_at: Model.attribute('created_at', Model.transformDate),\n edited_at: Model.attribute('edited_at', Model.transformDate),\n type: Model.attribute('type'),\n is_readed: Model.attribute('is_readed'),\n ip_address: Model.attribute('ip_address'),\n is_censored: Model.attribute('is_censored'),\n});\n","import Component from 'flarum/Component';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\n\nimport ChatInput from './ChatInput';\nimport ChatMessage from './ChatMessage';\nimport ChatEventMessage from './ChatEventMessage';\nimport ChatWelcome from './ChatWelcome';\nimport Message from '../models/Message';\nimport timedRedraw from '../utils/timedRedraw';\nimport ChatPage from './ChatPage';\n\nexport default class ChatViewport extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.model = this.attrs.chatModel;\n if (this.model) {\n this.state = app.chat.getViewportState(this.model);\n }\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadChat();\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // this.attrs is broken in onupdate hook\n const model = vnode.attrs.chatModel;\n\n if (model !== this.model) {\n this.model = model;\n if (this.model) {\n this.state = app.chat.getViewportState(this.model);\n this.loadChat();\n }\n }\n }\n\n loadChat() {\n const oldScroll = this.state.scroll.oldScroll;\n\n this.reloadMessages();\n m.redraw();\n\n setTimeout(() => {\n const element = this.element;\n\n this.getChatWrapper().scrollTop = element.scrollHeight - element.clientHeight - oldScroll;\n }, 200);\n }\n\n view(vnode) {\n if (this.model) {\n return (\n
    \n \n {this.componentLoader(this.state.scroll.loading)}\n {this.componentsChatMessages(this.model).concat(\n this.state.input.writingPreview ? this.componentChatMessage(this.state.input.previewModel) : []\n )}\n
    \n {\n if (this.nearBottom() && !this.state.messageEditing) {\n this.scrollToBottom();\n }\n }}\n >\n {this.isFastScrollAvailable() ? this.componentScroller() : null}\n \n );\n }\n\n return (\n
    \n ;\n
    \n );\n }\n\n componentChatMessage(model) {\n return model.type() ? : ;\n }\n\n componentsChatMessages(chat) {\n return app.chat.getChatMessages().map((model) => this.componentChatMessage(model));\n }\n\n componentScroller() {\n return (\n
    \n \n
    \n );\n }\n\n componentLoader(watch) {\n return watch ? (\n \n \n \n ) : null;\n }\n getChatWrapper() {\n return app.screen() === 'phone' && app.current.matches(ChatPage)\n ? document.documentElement\n : document.querySelector('.ChatViewport .wrapper');\n }\n\n isFastScrollAvailable() {\n let chatWrapper = this.getChatWrapper();\n return (\n (this.state.newPushedPosts ||\n this.model.unreaded() >= 30 ||\n (chatWrapper && chatWrapper.scrollHeight > 2000 && chatWrapper.scrollTop < chatWrapper.scrollHeight - 2000)) &&\n !this.nearBottom()\n );\n }\n\n fastScroll(e) {\n if (this.model.unreaded() >= 30) this.fastMessagesFetch(e);\n else {\n let chatWrapper = this.getChatWrapper();\n chatWrapper.scrollTop = Math.max(chatWrapper.scrollTop, chatWrapper.scrollHeight - 3000);\n this.scrollToBottom();\n }\n }\n\n fastMessagesFetch(e) {\n e.redraw = false;\n app.chat.chatmessages = [];\n\n app.chat.apiFetchChatMessages(this.model).then((r) => {\n this.scrollToBottom();\n timedRedraw(300);\n\n this.model.pushAttributes({ unreaded: 0 });\n let message = app.chat.getChatMessages((mdl) => mdl.chat() == this.model).slice(-1)[0];\n app.chat.apiReadChat(this.model, message);\n });\n }\n\n wrapperOnCreate(vnode) {\n super.oncreate(vnode);\n this.wrapperOnUpdate(vnode);\n\n (app.current.matches(ChatPage) ? window : vnode.dom).addEventListener(\n 'scroll',\n (this.boundScrollListener = this.wrapperOnScroll.bind(this)),\n { passive: true }\n );\n }\n\n wrapperOnBeforeUpdate(vnode, vnodeNew) {\n super.onbeforeupdate(vnode, vnodeNew);\n if (!this.state.autoScroll && this.nearBottom() && this.state.newPushedPosts) {\n this.scrollAfterUpdate = true;\n }\n }\n\n wrapperOnUpdate(vnode) {\n super.onupdate(vnode);\n let el = vnode.dom;\n if (this.model && this.state.scroll.autoScroll) {\n if (this.autoScrollTimeout) clearTimeout(this.autoScrollTimeout);\n this.autoScrollTimeout = setTimeout(this.scrollToBottom.bind(this, true), 100);\n }\n if (el.scrollTop <= 0) el.scrollTop = 1;\n this.checkUnreaded();\n\n if (this.scrollAfterUpdate) {\n this.scrollAfterUpdate = false;\n this.scrollToBottom();\n }\n }\n\n wrapperOnRemove(vnode) {\n super.onremove(vnode);\n vnode.dom.removeEventListener('scroll', this.boundScrollListener);\n }\n\n wrapperOnScroll(e) {\n const el = app.current.matches(ChatPage) ? document.documentElement : this.element;\n\n this.state.scroll.oldScroll = el.scrollHeight - el.clientHeight - el.scrollTop;\n\n this.checkUnreaded();\n\n if (this.lastFastScrollStatus != this.isFastScrollAvailable()) {\n this.lastFastScrollStatus = this.isFastScrollAvailable();\n m.redraw();\n }\n\n let currentHeight = el.scrollHeight;\n\n if (this.atBottom()) {\n this.state.newPushedPosts = false;\n }\n\n if (this.state.scroll.autoScroll || this.state.loading || this.scrolling) return;\n\n if (!this.state.messageEditing && el.scrollTop >= 0) {\n if (el.scrollTop <= 500) {\n let topMessage = app.chat.getChatMessages((model) => model.chat() == this.model)[0];\n if (topMessage && topMessage != this.model.first_message()) {\n app.chat.apiFetchChatMessages(this.model, topMessage.created_at().toISOString());\n }\n } else if (el.scrollTop + el.offsetHeight >= currentHeight - 500) {\n let bottomMessage = app.chat.getChatMessages((model) => model.chat() == this.model).slice(-1)[0];\n if (bottomMessage && bottomMessage != this.model.last_message()) {\n app.chat.apiFetchChatMessages(this.model, bottomMessage.created_at().toISOString());\n }\n }\n }\n }\n\n checkUnreaded() {\n let wrapper = this.getChatWrapper();\n if (wrapper && this.model.unreaded()) {\n let list = app.chat.getChatMessages((mdl) => mdl.chat() == this.model && mdl.created_at() >= this.model.readed_at() && !mdl.isReaded);\n\n for (const message of list) {\n let msg = document.querySelector(`.message-wrapper[data-id=\"${message.id()}\"`);\n if (msg && wrapper.scrollTop + wrapper.offsetHeight >= msg.offsetTop) {\n message.isReaded = true;\n\n if (this.state.scroll.autoScroll && app.chat.getCurrentChat() == this.model) {\n app.chat.apiReadChat(this.model, new Date());\n this.model.pushAttributes({ unreaded: 0 });\n } else {\n app.chat.apiReadChat(this.model, message);\n this.model.pushAttributes({ unreaded: this.model.unreaded() - 1 });\n }\n\n m.redraw();\n }\n }\n }\n }\n\n scrollToAnchor(anchor) {\n let element;\n if (anchor instanceof Message) element = $(`.message-wrapper[data-id=\"${anchor.id()}\"`)[0];\n else element = anchor;\n\n let chatWrapper = this.getChatWrapper();\n if (chatWrapper && element)\n $(chatWrapper)\n .stop()\n .animate({ scrollTop: element.offsetTop - element.offsetHeight }, 500);\n else setTimeout(scroll, 100);\n }\n\n scrollToBottom(force = false) {\n this.scrolling = true;\n let chatWrapper = this.getChatWrapper();\n if (chatWrapper) {\n const notAtBottom = !force && this.atBottom();\n const fewMessages =\n app.current.matches(ChatPage) &&\n document.querySelector('.ChatViewport .wrapper').scrollHeight + 200 < document.documentElement.clientHeight;\n if (notAtBottom || fewMessages) return;\n\n const time = this.pixelsFromBottom() < 80 ? 0 : 250;\n\n $(chatWrapper)\n .stop()\n .animate({ scrollTop: chatWrapper.scrollHeight }, time, 'swing', () => {\n this.state.scroll.autoScroll = false;\n this.scrolling = false;\n });\n }\n }\n\n reloadMessages() {\n if (!this.state.messagesFetched) {\n let query;\n if (this.model.unreaded()) {\n query = this.model.readed_at()?.toISOString() ?? new Date(0).toISOString();\n this.state.scroll.autoScroll = false;\n }\n\n app.chat.apiFetchChatMessages(this.model, query).then(() => {\n if (this.model.unreaded()) {\n let anchor = app.chat.getChatMessages((mdl) => mdl.chat() == this.model && mdl.created_at() > this.model.readed_at())[0];\n this.scrollToAnchor(anchor);\n } else this.state.scroll.autoScroll = true;\n\n m.redraw();\n });\n\n this.state.messagesFetched = true;\n }\n }\n\n nearBottom() {\n return this.pixelsFromBottom() <= 500;\n }\n\n atBottom() {\n return this.pixelsFromBottom() <= 5;\n }\n\n pixelsFromBottom() {\n const element = app.current.matches(ChatPage) ? document.documentElement : this.element;\n return Math.abs(element.scrollHeight - element.scrollTop - element.clientHeight);\n }\n}\n","import Page from 'flarum/common/components/Page';\nimport IndexPage from 'flarum/components/IndexPage';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport listItems from 'flarum/helpers/listItems';\nimport Stream from 'flarum/utils/Stream';\nimport ChatHeader from './ChatHeader';\nimport ChatList from './ChatList';\nimport ChatViewport from './ChatViewport';\n\nexport default class ChatPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.bodyClass = 'App--chat';\n this.listOpen = Stream(false);\n }\n\n view() {\n const navItems = IndexPage.prototype.sidebarItems();\n\n if (navItems.has('forumStatisticsWidget')) navItems.remove('forumStatisticsWidget');\n\n return (\n
    \n \n \n {app.chat.chatsLoading ? : }\n {this.listOpen() ? (\n
    \n \n
    \n ) : (\n ''\n )}\n
    \n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.clickHandler = (e) => {\n const chatList = this.$('.ChatList')[0];\n\n if (this.listOpen() && !(chatList && chatList.contains(e.target))) {\n this.listOpen(false);\n m.redraw();\n }\n };\n\n $(window).on('click', this.clickHandler);\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n if (this.listOpen()) {\n this.element.querySelector('.ChatPage--list').style.height =\n document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top + 'px';\n }\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n $(window).off('click', this.clickHandler);\n }\n}\n","import Component from 'flarum/Component';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport ChatHeader from './ChatHeader';\nimport ChatList from './ChatList';\nimport ChatPage from './ChatPage';\nimport ChatViewport from './ChatViewport';\n\nexport default class ChatFrame extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n document.addEventListener('mousedown', this.chatMoveListener.bind(this, 'mousedown'));\n document.addEventListener('mouseup', this.chatMoveListener.bind(this, 'mouseup'));\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n\n calcHeight() {\n if (!app.chat.getFrameState('beingShown')) {\n return '30px';\n } else if (app.screen() !== 'phone') {\n return app.chat.getFrameState('transform').y + 'px';\n } else {\n return '70vh';\n }\n }\n\n view(vnode) {\n if (app.current.matches(ChatPage)) return;\n\n const style = { right: app.chat.getFrameState('transform').x + 'px', height: this.calcHeight() };\n\n return (\n
    \n
    \n \n\n
    \n false} onmousedown={this.chatHeaderOnMouseDown.bind(this)} inFrame={true}>\n {app.chat.chatsLoading ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n );\n }\n\n chatHeaderOnMouseDown(e) {\n if (e.button !== 0) return;\n\n var path = e.path || (e.composedPath && e.composedPath());\n if (path) {\n for (let i = 0, el; i < path.length; i++) {\n el = path[i];\n if (el.classList && el.classList.contains('icon')) return;\n }\n }\n\n if (!this.chatMoveStart(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n chatMoveListener(event, e) {\n switch (event) {\n case 'mouseup': {\n if (this.chatMoving) this.chatMoveEnd(e);\n break;\n }\n }\n }\n\n chatMoveStart(e) {\n if (!app.chat.getFrameState('beingShown')) return;\n this.chatMoving = true;\n this.mouseMoveEvent = this.chatMoveProcess.bind(this);\n this.moveLast = { x: e.clientX, y: e.clientY };\n\n document.addEventListener('mousemove', this.mouseMoveEvent);\n document.body.classList.add('moving');\n\n return false;\n }\n\n chatMoveEnd(e) {\n this.chatMoving = false;\n document.removeEventListener('mousemove', this.mouseMoveEvent);\n document.body.classList.remove('moving');\n\n if (!app.current.matches(ChatPage)) {\n app.chat.saveFrameState('transform', { x: parseInt(this.element.style.right), y: this.element.offsetHeight || 400 });\n }\n }\n\n chatMoveProcess(e) {\n let move = { x: e.clientX - this.moveLast.x, y: e.clientY - this.moveLast.y };\n let right = parseInt(this.element.style.right) || 0;\n let nextPos = { x: right - move.x, y: this.element.offsetHeight - move.y };\n\n if ((nextPos.x < window.innerWidth - this.element.querySelector('#chat').offsetWidth && move.x < 0) || (nextPos.x > 0 && move.x > 0))\n this.element.style.right = nextPos.x + 'px';\n\n if (this.element.querySelector('.ChatHeader').clientHeight < nextPos.y && nextPos.y < window.innerHeight - 100) {\n this.element.style.height = nextPos.y + 'px';\n }\n\n this.moveLast = { x: e.clientX, y: e.clientY };\n }\n}\n","import Model from 'flarum/Model';\nimport computed from 'flarum/utils/computed';\n\nexport default class Chat extends Model {}\n\nObject.assign(Chat.prototype, {\n _title: Model.attribute('title'),\n _color: Model.attribute('color'),\n type: Model.attribute('type'),\n created_at: Model.attribute('created_at', Model.transformDate),\n creator: Model.hasOne('creator'),\n users: Model.hasMany('users'),\n first_message: Model.hasOne('first_message'),\n last_message: Model.hasOne('last_message'),\n icon: Model.attribute('icon'),\n\n role: Model.attribute('role'),\n unreaded: Model.attribute('unreaded', (v) => Math.max(v, 0)),\n readed_at: Model.attribute('readed_at', Model.transformDate),\n removed_at: Model.attribute('removed_at', Model.transformDate),\n joined_at: Model.attribute('joined_at', Model.transformDate),\n removed_by: Model.attribute('removed_by'),\n\n pm_user: computed('freshness', function (updated) {\n return this.getPMUser();\n }),\n\n title: computed('pm_user', '_title', function (pm_user, _title) {\n return pm_user ? pm_user.displayName() : _title;\n }),\n\n color: computed('pm_user', '_color', function (pm_user, _color) {\n return pm_user ? pm_user.color() : _color;\n }),\n\n avatarUrl: computed('pm_user', function (pm_user) {\n return pm_user ? pm_user.avatarUrl() : null;\n }),\n\n textColor: computed('color', function (color) {\n return this.pickTextColorBasedOnBgColorSimple(color, '#FFF', '#000');\n }),\n\n matches(q) {\n return (\n this.title().toLowerCase().includes(q) ||\n this.users().some((user) => {\n return user.displayName().toLowerCase().includes(q);\n })\n );\n },\n\n getPMUser() {\n let users = this.users();\n if (app.session.user && this.type() == 0 && users.length && users.length < 3) {\n for (const user of users) {\n if (user && user != app.session.user) return user;\n }\n }\n return null;\n },\n\n pickTextColorBasedOnBgColorSimple(bgColor, lightColor, darkColor) {\n var color = bgColor.charAt(0) === '#' ? bgColor.substring(1, 7) : bgColor;\n var r = parseInt(color.substring(0, 2), 16);\n var g = parseInt(color.substring(2, 4), 16);\n var b = parseInt(color.substring(4, 6), 16);\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? darkColor : lightColor;\n },\n});\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import Stream from 'flarum/utils/Stream';\n\nexport default class ViewportState {\n loadingSend = false;\n\n scroll = {\n autoScroll: true,\n oldScroll: 0,\n };\n\n loading = false;\n loadingQueries = {};\n\n input = {\n messageLength: 0,\n rows: 1,\n content: Stream(),\n };\n\n messagesFetched = false;\n\n constructor(params) {\n if (params.model) {\n this.initChatStorage(params.model);\n\n this.input.content(this.getChatStorageValue('draft'));\n }\n }\n\n chatStorage = {\n key: null,\n draft: null,\n };\n\n initChatStorage(model) {\n this.chatStorage.key = `neonchat.viewport${model.id()}`;\n let parsedData = JSON.parse(localStorage.getItem(this.chatStorage.key));\n\n if (parsedData) {\n this.chatStorage.draft = parsedData.draft ?? '';\n }\n }\n\n getChatStorageValue(key) {\n return this.chatStorage[key];\n }\n\n setChatStorageValue(key, value) {\n let cachedState = JSON.parse(localStorage.getItem(this.chatStorage.key)) ?? {};\n cachedState[key] = value;\n localStorage.setItem(this.chatStorage.key, JSON.stringify(cachedState));\n\n this.chatStorage[key] = value;\n }\n\n onChatMessageClicked(eventName, model) {\n switch (eventName) {\n case 'dropdownEditStart': {\n this.messageEdit(model, true);\n break;\n }\n case 'dropdownResend': {\n this.messageResend(model);\n break;\n }\n case 'insertMention': {\n this.insertMention(model);\n break;\n }\n }\n }\n\n getChatInput() {\n return document.querySelector('.NeonChatFrame #chat-input');\n }\n\n messageSend() {\n const text = this.input.content();\n\n if (text && text.trim().length > 0 && !this.loadingSend) {\n if (this.input.writingPreview) {\n this.input.writingPreview = false;\n\n this.messagePost(this.input.previewModel);\n app.chat.insertChatMessage(Object.assign(this.input.previewModel, {}));\n\n this.inputClear();\n } else if (this.messageEditing) {\n let model = this.messageEditing;\n if (model.content.trim() !== model.oldContent.trim()) {\n model.oldContent = model.content;\n app.chat.editChatMessage(model, true, model.content);\n }\n this.messageEditEnd();\n this.inputClear();\n }\n }\n }\n\n messageEdit(model) {\n if (this.input.writingPreview) this.input.instance.inputPreviewEnd();\n if (this.messageEditing) this.messageEditEnd();\n\n model.isEditing = true;\n model.oldContent = model.message();\n\n this.messageEditing = model;\n\n let inputElement = this.getChatInput();\n inputElement.value = this.input.content(model.oldContent);\n inputElement.focus();\n app.chat.input.resizeInput();\n\n m.redraw();\n }\n\n messageEditEnd() {\n let message = this.messageEditing;\n if (message) {\n message.isEditing = false;\n message.content = message.oldContent;\n this.inputClear();\n m.redraw();\n\n this.messageEditing = null;\n }\n }\n\n messageResend(model) {\n this.messagePost(model);\n }\n\n messagePost(model) {\n this.loadingSend = true;\n m.redraw();\n\n return app.chat.postChatMessage(model).then(\n (r) => {\n this.loadingSend = false;\n\n m.redraw();\n },\n (r) => {\n this.loadingSend = false;\n\n m.redraw();\n }\n );\n }\n\n inputClear() {\n this.input.messageLength = 0;\n this.input.rows = 1;\n this.input.content(null);\n m.redraw();\n }\n\n insertMention(model) {\n let user = model.user();\n if (!app.session.user) return;\n\n this.input.content((this.input.content() || '') + ` @${user.username()} `);\n\n var input = this.getChatInput();\n input.focus();\n }\n}\n","import Message from '../models/Message';\n\nimport Model from 'flarum/Model';\nimport Stream from 'flarum/utils/Stream';\nimport Link from 'flarum/components/Link';\n\nimport * as resources from '../resources';\nimport ViewportState from './ViewportState';\nimport { throttle } from 'flarum/utils/throttleDebounce';\n\nvar refAudio = new Audio();\nrefAudio.src = resources.base64AudioNotificationRef;\nrefAudio.volume = 0.5;\n\nvar audio = new Audio();\naudio.src = resources.base64AudioNotification;\naudio.volume = 0.5;\n\nexport default class ChatState {\n constructor() {\n this.q = Stream('');\n this.chats = [];\n this.chatmessages = [];\n\n this.chatsLoading = true;\n this.curChat = null;\n this.totalHiddenCount = 0;\n\n let neonchatState = JSON.parse(localStorage.getItem('neonchat')) ?? {};\n\n this.frameState = {\n beingShown: neonchatState.beingShown ?? app.forum.attribute('xelson-chat.settings.display.minimize'),\n beingShownChatsList: neonchatState.beingShownChatsList ?? 0,\n isMuted: neonchatState.isMuted ?? false,\n notify: neonchatState.notify ?? false,\n transform: neonchatState.transform ?? { x: 0, y: 400 },\n isActive: true,\n selectedChat: neonchatState.selectedChat ?? 0,\n };\n\n this.permissions = {\n post: app.forum.attribute('xelson-chat.permissions.chat'),\n edit: app.forum.attribute('xelson-chat.permissions.edit'),\n delete: app.forum.attribute('xelson-chat.permissions.delete'),\n create: {\n channel: app.forum.attribute('xelson-chat.permissions.create.channel'),\n chat: app.forum.attribute('xelson-chat.permissions.create'),\n },\n moderate: {\n delete: app.forum.attribute('xelson-chat.permissions.moderate.delete'),\n vision: app.forum.attribute('xelson-chat.permissions.moderate.vision'),\n },\n };\n\n this.viewportStates = {};\n\n if (app.session.user && app.pusher) app.pusher.then(this.listenSocketChannels.bind(this));\n }\n\n getViewportState(model) {\n return this.viewportStates[model.id()];\n }\n\n listenSocketChannels(socket) {\n let channels = socket.channels;\n channels.main.bind('neonchat.events', this.handleSocketEvent.bind(this));\n if (channels.user) channels.user.bind('neonchat.events', this.handleSocketEvent.bind(this));\n }\n\n handleSocketEvent(r) {\n let message = r.response.message;\n if (message) message = app.store.pushPayload(message);\n\n let chat = r.response.chat;\n if (chat) chat = app.store.pushPayload(chat);\n\n // Workaround for blocking events from a chat we leaved\n if (message && message.chat().type() == 1 && message.chat().removed_at()) return;\n\n switch (r.event.id) {\n case 'message.post': {\n if (!app.session.user || message.user() != app.session.user) {\n this.insertChatMessage(message, true);\n m.redraw();\n }\n break;\n }\n case 'message.edit': {\n let actions = message.data.attributes.actions;\n if (app.session.user && actions.invoker == app.session.user.id()) return;\n\n if (actions.msg !== undefined) {\n if (!app.session.user || message.user() != app.session.user) this.editChatMessage(message, false, actions.msg);\n } else if (actions.hide !== undefined) {\n if (!app.session.user || actions.invoker != app.session.user.id())\n actions.hide ? this.hideChatMessage(message, false, message.deleted_by()) : this.restoreChatMessage(message, false);\n }\n break;\n }\n case 'message.delete': {\n if (!app.session.user || message.deleted_by() != app.session.user) this.deleteChatMessage(message, false, message.deleted_by());\n\n break;\n }\n case 'chat.create': {\n if (!app.session.user || chat.creator() != app.session.user) {\n this.addChat(chat, true);\n m.redraw();\n }\n break;\n }\n case 'chat.edit': {\n this.editChat(chat, true);\n let range = r.response.eventmsg_range;\n if (range.length) this.apiFetchChatMessages(chat, range, { notify: true, withFlash: true, disableLoader: true });\n\n if (app.session.user && r.response.roles_updated_for && r.response.roles_updated_for.includes(app.session.user.id())) {\n let role = app.session.user.chat_pivot(chat.id()).role();\n switch (role) {\n case 0: {\n app.alerts.show(\n { type: 'error' },\n app.translator.trans('xelson-chat.forum.chat.edit_modal.moderator.lost', { chatname: {chat.title()} })\n );\n break;\n }\n case 1: {\n app.alerts.show(\n { type: 'success' },\n app.translator.trans('xelson-chat.forum.chat.edit_modal.moderator.got', { chatname: {chat.title()} })\n );\n break;\n }\n }\n }\n\n m.redraw();\n\n break;\n }\n case 'chat.delete': {\n if (!app.session.user || chat.creator() != app.session.user) {\n this.deleteChat(chat);\n m.redraw();\n }\n break;\n }\n }\n }\n\n getFrameState(key) {\n return this.frameState[key];\n }\n\n saveFrameState(key, value) {\n let neonchatState = JSON.parse(localStorage.getItem('neonchat')) ?? {};\n neonchatState[key] = value;\n localStorage.setItem('neonchat', JSON.stringify(neonchatState));\n\n this.frameState[key] = value;\n }\n\n getPermissions() {\n return this.permissions;\n }\n\n getChats() {\n return this.chats.filter((chat) => (this.q() && chat.matches(this.q().toLowerCase())) || (!this.q() && !chat.removed_at()));\n }\n\n getChatsSortedByLastUpdate() {\n return this.getChats().sort((a, b) => {\n if (b.last_message() && a.last_message()) {\n return b.last_message()?.created_at() - a.last_message()?.created_at();\n }\n return 0;\n });\n }\n\n addChat(model, outside = false) {\n this.chats.push(model);\n\n this.viewportStates[model.id()] = new ViewportState({ model });\n\n if (model.id() == this.getFrameState('selectedChat')) this.onChatChanged(model);\n if (outside) model.isNeedToFlash = true;\n }\n\n editChat(model, outside = false) {\n if (outside) model.isNeedToFlash = true;\n }\n\n apiReadChat(chat, message) {\n if (this.readingTimeout) clearTimeout(this.readingTimeout);\n\n let timestamp;\n if (message instanceof Date) timestamp = message.toISOString();\n else if (message instanceof Message) timestamp = message.created_at().toISOString();\n\n this.readingTimeout = setTimeout(() => chat.save({ actions: { reading: timestamp } }), 1000);\n }\n\n deleteChat(model) {\n this.chats = this.chats.filter((mdl) => mdl != model);\n if (this.getCurrentChat() == model) this.setCurrentChat(null);\n }\n\n isChatPM(model) {\n return model.type() == 0 && model.users().length <= 2;\n }\n\n isExistsPMChat(user1, user2) {\n return this.getChats().some((model) => {\n let users = model.users();\n return model.type() === 0 && users.length === 2 && users.some((model) => model == user1) && users.some((model) => model == user2);\n });\n }\n\n onChatChanged(model, e = {}) {\n e.redraw = false;\n if (model == this.getCurrentChat()) return;\n\n this.setCurrentChat(model);\n m.redraw.sync();\n }\n\n comporatorAscButZerosDesc(a, b) {\n return a == 0 ? 1 : b == 0 ? -1 : a - b;\n }\n\n getChatMessages(filter) {\n let list = this.chatmessages.sort((a, b) => this.comporatorAscButZerosDesc(a.id(), b.id()));\n return filter ? list.filter(filter) : list;\n }\n\n apiFetchChatMessages(model, query, options = {}) {\n let viewport = this.getViewportState(model);\n let self = this;\n\n if (viewport.loading || viewport.loadingQueries[query]) return;\n\n viewport.loading = true;\n viewport.loadingQueries[query] = true;\n\n return app.store.find('chatmessages', { chat_id: model.id(), query }).then((r) => {\n if (r.length) {\n r.map((model) => {\n if (options.withFlash) model.isNeedToFlash = true;\n self.insertChatMessage(model);\n });\n if (options.notify) this.messageNotify(r[0]);\n\n viewport.loading = false;\n viewport.loadingQueries[query] = false;\n //viewport.scroll.autoScroll = false;\n\n m.redraw();\n }\n });\n }\n\n isChatMessageExists(model) {\n return this.chatmessages.find((e) => e.id() == model.id());\n }\n\n insertEventChatMessage(model, data, notify = false) {\n model.pushAttributes({ message: JSON.stringify(data) });\n insertChatMessage(model, notify);\n }\n\n insertChatMessage(model, notify = false) {\n if (this.isChatMessageExists(model)) return null;\n\n this.chatmessages.push(model);\n if (notify) {\n this.messageNotify(model);\n model.isNeedToFlash = true;\n\n let chatModel = model.chat();\n chatModel.isNeedToFlash = true;\n chatModel.pushAttributes({ unreaded: chatModel.unreaded() + 1 });\n }\n\n let list = this.getChatMessages((mdl) => mdl.chat() == model.chat());\n if ((notify || model.chat().removed_at()) && model.id() && list[list.length - 1] == model) {\n model.chat().pushData({ relationships: { last_message: model } });\n this.getViewportState(model.chat()).newPushedPosts = true;\n }\n }\n\n renderChatMessage(model, content) {\n let element = model instanceof Model ? document.querySelector(`.NeonChatFrame .message-wrapper[data-id=\"${model.id()}\"] .message`) : model;\n\n if (element) {\n s9e.TextFormatter.preview(content, element);\n\n // Workaround for user mentions that doesn't works properly\n $(element)\n .find('.UserMention.UserMention--deleted')\n .each(function () {\n let user = app.store.getBy('users', 'username', this.innerText.substring(1));\n if (this && user) {\n this.classList.remove('UserMention--deleted');\n m.render(this, {this.innerText});\n }\n });\n\n throttle(100, () => {\n $('.NeonChatFrame script').each(function () {\n if (!self.executedScripts) self.executedScripts = {};\n let scriptURL = $(this).attr('src');\n if (!self.executedScripts[scriptURL]) {\n var scriptTag = document.createElement('script');\n scriptTag.src = scriptURL;\n document.head.appendChild(scriptTag);\n\n self.executedScripts[scriptURL] = true;\n }\n });\n })();\n }\n }\n\n onChatMessageClicked(eventName, model) {\n switch (eventName) {\n case 'dropdownHide': {\n this.hideChatMessage(model, true);\n break;\n }\n case 'dropdownRestore': {\n this.restoreChatMessage(model, true);\n break;\n }\n case 'dropdownDelete': {\n this.deleteChatMessage(model, true);\n break;\n }\n }\n }\n\n postChatMessage(model) {\n return model.save({ message: model.content, created_at: new Date(), chat_id: model.chat().id() }).then(\n (r) => {\n model.isTimedOut = false;\n model.isNeedToFlash = true;\n model.isEditing = false;\n model.chat().pushData({ relationships: { last_message: model } });\n },\n (r) => {\n model.isTimedOut = true;\n }\n );\n }\n\n editChatMessage(model, sync = false, content) {\n model.content = content;\n model.isNeedToFlash = true;\n model.pushAttributes({ message: content, edited_at: new Date() });\n if (sync) model.save({ actions: { msg: content }, edited_at: new Date(), message: content });\n\n m.redraw();\n }\n\n deleteChatMessage(model, sync = false, user = app.session.user) {\n model.isDeletedForever = true;\n if (!model.deleted_by()) model.pushData({ relationships: { deleted_by: user } });\n let list = this.getChatMessages((mdl) => mdl.chat() == model.chat() && !mdl.isDeletedForever);\n if (list.length) model.chat().pushData({ relationships: { last_message: list[list.length - 1] } });\n\n this.chatmessages = this.chatmessages.filter((mdl) => mdl != model);\n if (sync) model.delete();\n\n m.redraw();\n }\n\n totalHidden() {\n return this.totalHiddenCount;\n }\n\n hideChatMessage(model, sync = false, user = app.session.user) {\n model.pushData({ relationships: { deleted_by: user } });\n if (sync) model.save({ actions: { hide: true }, relationships: { deleted_by: app.session.user } });\n\n this.totalHiddenCount++;\n m.redraw();\n }\n\n restoreChatMessage(model, sync = false) {\n if (!this.isChatMessageExists(model)) {\n this.insertChatMessage(model);\n model.isNeedToFlash = true;\n } else {\n model.pushAttributes({ deleted_by: 0 });\n model.isNeedToFlash = true;\n delete model.data.relationships.deleted_by;\n }\n if (sync) model.save({ actions: { hide: false }, deleted_by: 0 });\n\n m.redraw();\n }\n\n setCurrentChat(model) {\n this.curChat = model;\n this.saveFrameState('selectedChat', model ? model.id() : null);\n }\n\n getCurrentChat() {\n return this.curChat;\n }\n\n apiFetchChats() {\n return app.store.find('chats').then((chats) => {\n chats.map((model) => this.addChat(model));\n this.chatsLoading = false;\n m.redraw();\n });\n }\n\n messageNotify(model) {\n if (!app.session.user || model.user().id() != app.session.user.id()) this.notifyTry(model);\n }\n\n notifyTry(model) {\n if (!('Notification' in window)) return;\n\n if (this.messageIsMention(model)) this.notifySend(model);\n this.notifySound(model);\n }\n\n messageIsMention(model) {\n return app.session.user && model.message().indexOf('@' + app.session.user.username()) >= 0;\n }\n\n notifySend(model) {\n let avatar = model.user().avatarUrl();\n if (!avatar) avatar = resources.base64PlaceholderAvatarImage;\n\n if (this.getFrameState('notify') && document.hidden)\n new Notification(model.chat().title(), {\n body: `${model.user().username()}: ${model.message()}`,\n icon: avatar,\n silent: true,\n timestamp: new Date(),\n });\n }\n\n notifySound(model) {\n if (!this.getFrameState('isMuted')) {\n let sound = this.messageIsMention(model) ? refAudio : audio;\n sound.currentTime = 0;\n sound.play();\n }\n }\n\n /**\n * https://github.com/flarum/core/blob/7e74f5a03c7f206014f3f091968625fc0bf29094/js/src/forum/components/PostStream.js#L579\n *\n * 'Flash' the given post, drawing the user's attention to it.\n *\n * @param {jQuery} $item\n */\n flashItem($item) {\n $item.addClass('flash').one('animationend webkitAnimationEnd', () => $item.removeClass('flash'));\n }\n}\n","import { extend } from 'flarum/extend';\nimport Application from 'flarum/Application';\nimport ChatFrame from './components/ChatFrame';\n\nimport Chat from './models/Chat';\nimport Message from './models/Message';\nimport User from 'flarum/models/User';\nimport Model from 'flarum/Model';\nimport ChatState from './states/ChatState';\nimport addChatPage from './addChatPage';\n\nconst chat = document.createElement('div');\nchat.setAttribute('id', 'chat');\n\ndocument.body.append(chat);\n\napp.initializers.add('xelson-chat', (app) => {\n app.store.models.chats = Chat;\n app.store.models.chatmessages = Message;\n\n function pivot(name, id, attr, transform) {\n pivot.hasOne = function (name, id, attr) {\n return function () {\n const relationship = this.data.attributes[name] && this.data.attributes[name][id] && this.data.attributes[name][id][attr];\n if (relationship) return app.store.getById(relationship.data.type, relationship.data.id);\n };\n };\n\n return function () {\n const value = this.data.attributes[name] && this.data.attributes[name][id] && this.data.attributes[name][id][attr];\n return transform ? transform(value) : value;\n };\n }\n\n Object.assign(User.prototype, {\n chat_pivot(chat_id) {\n return {\n role: pivot('chat_pivot', chat_id, 'role').bind(this),\n removed_by: pivot('chat_pivot', chat_id, 'removed_by').bind(this),\n readed_at: pivot('chat_pivot', chat_id, 'readed_at', Model.transformDate).bind(this),\n removed_at: pivot('chat_pivot', chat_id, 'removed_at', Model.transformDate).bind(this),\n joined_at: pivot('chat_pivot', chat_id, 'joined_at', Model.transformDate).bind(this),\n };\n },\n });\n\n extend(Application.prototype, 'mount', function () {\n if (!app.forum.attribute('xelson-chat.permissions.enabled')) return;\n\n app.chat = new ChatState();\n\n m.mount(document.getElementById('chat'), ChatFrame);\n\n if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission();\n\n if (!app.pusher) {\n app.alerts.show({ type: 'error' }, app.translator.trans('xelson-chat.forum.pusher_not_found'));\n }\n\n app.chat.apiFetchChats();\n });\n\n //addChatPage();\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/forum/components/ChatInput.js b/js/src/forum/components/ChatInput.js index a68252f..42318fc 100644 --- a/js/src/forum/components/ChatInput.js +++ b/js/src/forum/components/ChatInput.js @@ -1,7 +1,7 @@ import Component from 'flarum/Component'; import Button from 'flarum/components/Button'; import ChatEditModal from './ChatEditModal'; -import {throttle} from 'flarum/utils/throttleDebounce'; +import { throttle } from 'flarum/utils/throttleDebounce'; export default class ChatInput extends Component { oninit(vnode) { @@ -25,8 +25,8 @@ export default class ChatInput extends Component { input.lineHeight = parseInt(window.getComputedStyle(input).getPropertyValue('line-height')); inputState.element = input; - if(inputState.content().length) { - this.inputProcess({target: input}); + if (inputState.content() && inputState.content().length) { + this.inputProcess({ target: input }); } this.updateLimit(); @@ -95,11 +95,11 @@ export default class ChatInput extends Component { limiter.className = charsTyped < 100 ? 'reaching-limit' : ''; } - saveDraft(text = this.state.input.content()) - { - (this.state.input.lastDraft != text) && throttle(300, () => { - this.state.setChatStorageValue('draft', text); - })(); + saveDraft(text = this.state.input.content()) { + this.state.input.lastDraft != text && + throttle(300, () => { + this.state.setChatStorageValue('draft', text); + })(); this.state.input.lastDraft = text; } @@ -110,9 +110,8 @@ export default class ChatInput extends Component { this.saveDraft(input.value.trim()); } - resizeInput() - { - let input = this.state.input.element; + resizeInput() { + let input = this.state.getChatInput(); input.rows = 1; this.state.input.rows = Math.min(input.scrollHeight / input.lineHeight, app.screen() === 'phone' ? 2 : 5); diff --git a/js/src/forum/components/ChatPage.js b/js/src/forum/components/ChatPage.js index 707f36b..727e980 100644 --- a/js/src/forum/components/ChatPage.js +++ b/js/src/forum/components/ChatPage.js @@ -58,12 +58,6 @@ export default class ChatPage extends Page { if (this.listOpen()) { this.element.querySelector('.ChatPage--list').style.height = document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top + 'px'; - - console.log( - this.element.querySelector('.ChatPage--list'), - this.element.querySelector('.ChatPage--list').style.height, - document.documentElement.clientHeight - this.element.querySelector('.ChatPage--list').getBoundingClientRect().top - ); } } diff --git a/js/src/forum/index.js b/js/src/forum/index.js index 47ae99c..8b82744 100644 --- a/js/src/forum/index.js +++ b/js/src/forum/index.js @@ -54,10 +54,7 @@ app.initializers.add('xelson-chat', (app) => { if ('Notification' in window && app.chat.getFrameState('notify')) Notification.requestPermission(); if (!app.pusher) { - app.alerts.show( - { type: 'error' }, - app.translator.trans('xelson-chat.forum.pusher_not_found') - ); + app.alerts.show({ type: 'error' }, app.translator.trans('xelson-chat.forum.pusher_not_found')); } app.chat.apiFetchChats(); diff --git a/js/src/forum/states/ChatState.js b/js/src/forum/states/ChatState.js index 7a2cfa9..931c94c 100644 --- a/js/src/forum/states/ChatState.js +++ b/js/src/forum/states/ChatState.js @@ -6,6 +6,7 @@ import Link from 'flarum/components/Link'; import * as resources from '../resources'; import ViewportState from './ViewportState'; +import { throttle } from 'flarum/utils/throttleDebounce'; var refAudio = new Audio(); refAudio.src = resources.base64AudioNotificationRef; @@ -291,25 +292,20 @@ export default class ChatState { let element = model instanceof Model ? document.querySelector(`.NeonChatFrame .message-wrapper[data-id="${model.id()}"] .message`) : model; if (element) { - element.innerText = content; s9e.TextFormatter.preview(content, element); // Workaround for user mentions that doesn't works properly - $(element).find('.UserMention').each(function () { - let user = app.store.getBy('users', 'username', this.innerText.substring(1)); - if(user) - { - this.className = ''; - m.render(this, ( - - {'@' + user.displayName()} - - )) - } - }); + $(element) + .find('.UserMention.UserMention--deleted') + .each(function () { + let user = app.store.getBy('users', 'username', this.innerText.substring(1)); + if (this && user) { + this.classList.remove('UserMention--deleted'); + m.render(this, {this.innerText}); + } + }); - if (this.executeScriptsTimeout) clearTimeout(this.executeScriptsTimeout); - this.executeScriptsTimeout = setTimeout(() => { + throttle(100, () => { $('.NeonChatFrame script').each(function () { if (!self.executedScripts) self.executedScripts = {}; let scriptURL = $(this).attr('src'); @@ -321,7 +317,7 @@ export default class ChatState { self.executedScripts[scriptURL] = true; } }); - }, 100); + })(); } } diff --git a/js/src/forum/states/ViewportState.js b/js/src/forum/states/ViewportState.js index 21c3148..125abf5 100644 --- a/js/src/forum/states/ViewportState.js +++ b/js/src/forum/states/ViewportState.js @@ -99,7 +99,7 @@ export default class ViewportState { messageEdit(model) { if (this.input.writingPreview) this.input.instance.inputPreviewEnd(); - if(this.messageEditing) this.messageEditEnd(); + if (this.messageEditing) this.messageEditEnd(); model.isEditing = true; model.oldContent = model.message(); diff --git a/resources/less/forum/ChatViewport.less b/resources/less/forum/ChatViewport.less index 253b7dd..f300122 100644 --- a/resources/less/forum/ChatViewport.less +++ b/resources/less/forum/ChatViewport.less @@ -2,6 +2,10 @@ .UserMention { .user-select(none); + a { + color: #697a96 !important; + } + display: inline-block; color: #697a96 !important; border-radius: 4px; @@ -11,6 +15,9 @@ } .UserMention:hover { + a { + color: #ff94c1 !important; + } color: #ff94c1 !important; }

    \n {app.chat.getCurrentChat()\n ? [\n app.chat.getCurrentChat().icon() ? (\n \n ) : null,\n app.chat.getCurrentChat().title(),\n ]\n : app.translator.trans('xelson-chat.forum.toolbar.title')}\n