diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map
index 686385d..82d5317 100644
--- a/js/dist/admin.js.map
+++ b/js/dist/admin.js.map
@@ -1 +1 @@
-{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCElDC,EAAW,CACf,WACA,UACA,WACA,SACA,WACA,WACA,YACA,gBACA,UACA,KACA,QACA,UAGFC,IAAAA,aAAAA,IAAqB,oBAAoB,WACvC,IAAMC,EAAMD,IAAAA,cAAAA,IAAsB,oBAElCC,EACGC,gBAAgB,CACfC,MAAOH,IAAAA,WAAAA,MAAqB,kDAC5BI,QAAS,kCACTC,KAAM,YAEPH,gBAAgB,CACfC,MAAOH,IAAAA,WAAAA,MAAqB,8CAC5BI,QAAS,8BACTC,KAAM,YAEPH,iBAAgB,WACf,OAAO,YACR,IAEHH,EAASO,SAAQ,SAACC,GAAD,OACfN,EAAIC,gBAAgB,CAClBC,MAAOH,IAAAA,WAAAA,MAAA,iCAAsDO,GAC7DH,QAAS,6BAA6BG,EACtCF,KAAM,WAJO,GAOlB,G","sources":["webpack://@fof/share-social/webpack/bootstrap","webpack://@fof/share-social/webpack/runtime/compat get default export","webpack://@fof/share-social/webpack/runtime/define property getters","webpack://@fof/share-social/webpack/runtime/hasOwnProperty shorthand","webpack://@fof/share-social/webpack/runtime/make namespace object","webpack://@fof/share-social/external root \"flarum.core.compat['admin/app']\"","webpack://@fof/share-social/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\nconst networks = [\n 'facebook',\n 'twitter',\n 'linkedin',\n 'reddit',\n 'whatsapp',\n 'telegram',\n 'vkontakte',\n 'odnoklassniki',\n 'my_mail',\n 'qq',\n 'qzone',\n 'native',\n];\n\napp.initializers.add('fof/share-social', () => {\n const set = app.extensionData.for('fof-share-social');\n\n set\n .registerSetting({\n label: app.translator.trans('fof-share-social.admin.settings.canonical-urls'),\n setting: 'fof-share-social.canonical-urls',\n type: 'boolean',\n })\n .registerSetting({\n label: app.translator.trans('fof-share-social.admin.settings.plain-copy'),\n setting: 'fof-share-social.plain-copy',\n type: 'boolean',\n })\n .registerSetting(function () {\n return
;\n });\n\n networks.forEach((network) =>\n set.registerSetting({\n label: app.translator.trans(`fof-share-social.lib.networks.${network}`),\n setting: `fof-share-social.networks.${network}`,\n type: 'boolean',\n })\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","networks","app","set","registerSetting","label","setting","type","forEach","network"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCElDC,EAAW,CACf,WACA,UACA,WACA,SACA,WACA,WACA,YACA,gBACA,UACA,KACA,QACA,UAGFC,IAAAA,aAAiBC,IAAI,oBAAoB,WACvC,IAAMC,EAAMF,IAAAA,cAAiB,IAAK,oBAElCE,EACGC,gBAAgB,CACfC,MAAOJ,IAAAA,WAAeK,MAAM,kDAC5BC,QAAS,kCACTC,KAAM,YAEPJ,gBAAgB,CACfC,MAAOJ,IAAAA,WAAeK,MAAM,8CAC5BC,QAAS,8BACTC,KAAM,YAEPJ,iBAAgB,WACf,OAAOK,EAAA,UACT,IAEFT,EAASU,SAAQ,SAACC,GAAO,OACvBR,EAAIC,gBAAgB,CAClBC,MAAOJ,IAAAA,WAAeK,MAAM,iCAAiCK,GAC7DJ,QAAS,6BAA6BI,EACtCH,KAAM,WACN,GAEN,G","sources":["webpack://@fof/share-social/webpack/bootstrap","webpack://@fof/share-social/webpack/runtime/compat get default export","webpack://@fof/share-social/webpack/runtime/define property getters","webpack://@fof/share-social/webpack/runtime/hasOwnProperty shorthand","webpack://@fof/share-social/webpack/runtime/make namespace object","webpack://@fof/share-social/external root \"flarum.core.compat['admin/app']\"","webpack://@fof/share-social/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\nconst networks = [\n 'facebook',\n 'twitter',\n 'linkedin',\n 'reddit',\n 'whatsapp',\n 'telegram',\n 'vkontakte',\n 'odnoklassniki',\n 'my_mail',\n 'qq',\n 'qzone',\n 'native',\n];\n\napp.initializers.add('fof/share-social', () => {\n const set = app.extensionData.for('fof-share-social');\n\n set\n .registerSetting({\n label: app.translator.trans('fof-share-social.admin.settings.canonical-urls'),\n setting: 'fof-share-social.canonical-urls',\n type: 'boolean',\n })\n .registerSetting({\n label: app.translator.trans('fof-share-social.admin.settings.plain-copy'),\n setting: 'fof-share-social.plain-copy',\n type: 'boolean',\n })\n .registerSetting(function () {\n return
;\n });\n\n networks.forEach((network) =>\n set.registerSetting({\n label: app.translator.trans(`fof-share-social.lib.networks.${network}`),\n setting: `fof-share-social.networks.${network}`,\n type: 'boolean',\n })\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","networks","app","add","set","registerSetting","label","trans","setting","type","m","forEach","network"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/dist/forum.js b/js/dist/forum.js
index 93f2bb0..c13c8d2 100644
--- a/js/dist/forum.js
+++ b/js/dist/forum.js
@@ -1,2 +1,2 @@
-(()=>{var t={n:r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return t.d(e,{a:e}),e},d:(r,e)=>{for(var o in e)t.o(e,o)&&!t.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:e[o]})},o:(t,r)=>Object.prototype.hasOwnProperty.call(t,r),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},r={};(()=>{"use strict";t.r(r);const e=flarum.core.compat["forum/app"];var o=t.n(e);const n=flarum.core.compat["common/extend"],a=flarum.core.compat["forum/components/DiscussionPage"];var i=t.n(a);const c=flarum.core.compat["common/components/Button"];var u=t.n(c);const l=flarum.core.compat["common/Model"];var s=t.n(l);const f=flarum.core.compat["common/models/Discussion"];var p=t.n(f);function d(t,r){return d=Object.setPrototypeOf||function(t,r){return t.__proto__=r,t},d(t,r)}function h(t,r){t.prototype=Object.create(r.prototype),t.prototype.constructor=t,d(t,r)}const y=flarum.core.compat["common/components/Modal"];var v=t.n(y);const g=flarum.core.compat["common/helpers/icon"];var b=t.n(g);const w=flarum.core.compat["common/utils/string"];function k(t){return k=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},k(t)}function S(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function q(t,r,e){return q=S()?Reflect.construct:function(t,r,e){var o=[null];o.push.apply(o,r);var n=new(Function.bind.apply(t,o));return e&&d(n,e.prototype),n},q.apply(null,arguments)}function O(t){var r="function"==typeof Map?new Map:void 0;return O=function(t){if(null===t||(e=t,-1===Function.toString.call(e).indexOf("[native code]")))return t;var e;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(t))return r.get(t);r.set(t,o)}function o(){return q(t,arguments,k(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),d(o,t)},O(t)}function _(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,r){if(t){if("string"==typeof t)return j(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?j(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){e&&(t=e);var o=0;return function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function j(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,o=new Array(r);e/g,">")};function A(t){if("string"==typeof t)return x(t);for(var r=t[0],e=arguments.length,o=new Array(e>1?e-1:0),n=1;nt.length)&&(r=t.length);for(var e=0,o=new Array(r);e=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e.split("."));!(o=i()).done;){var u=o.value;n=n?n[u]:void 0}var l=c({value:n,key:e});if(void 0===l){if(a)return t;throw new I(e)}return String(l)},s=/{{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}}/gi;return s.test(t)&&(t=t.replace(s,(u=l,function(){return A(u.apply(void 0,arguments))}))),t.replace(/{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}/gi,l)}(e,r),o().title,n)},e.data=function(){var t;return{url:this.discussion.shareUrl(),title:o().title,description:this.discussion.firstPost()&&(0,w.truncate)((0,w.getPlainContent)(null==(t=this.discussion.firstPost())?void 0:t.contentHtml()),150,0)||""}},e.copy=function(){var t=document.querySelector(".ShareUrl input");t.select(),t.setSelectionRange(0,99999),document.execCommand("copy"),this.toggleCopyIcon()},e.toggleCopyIcon=function(){var t=document.querySelector(".ShareUrl button i");t.classList.toggle("fa-copy"),setTimeout((function(){t.classList.toggle("fa-copy")}),3e3)},r}(v());o().initializers.add("fof/share-social",(function(){p().prototype.shareUrl=s().attribute("shareUrl"),(0,n.extend)(i().prototype,"sidebarItems",(function(t){var r=this,e=o().forum.attribute("fof-share-social.networks");e.length&&t.add("share-social",m(u(),{class:"Button Button-icon Button--share",icon:"fas fa-share-alt",onclick:function(){return o().modal.show(C,{networks:e,discussion:r.discussion})}},o().translator.trans("fof-share-social.forum.discussion.share_button")),-1)}))}))})(),module.exports=r})();
+(()=>{var t={n:r=>{var e=r&&r.__esModule?()=>r.default:()=>r;return t.d(e,{a:e}),e},d:(r,e)=>{for(var o in e)t.o(e,o)&&!t.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:e[o]})},o:(t,r)=>Object.prototype.hasOwnProperty.call(t,r),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},r={};(()=>{"use strict";t.r(r);const e=flarum.core.compat["forum/app"];var o=t.n(e);const n=flarum.core.compat["common/extend"],a=flarum.core.compat["forum/components/DiscussionPage"];var i=t.n(a);const c=flarum.core.compat["common/components/Button"];var u=t.n(c);const l=flarum.core.compat["common/Model"];var s=t.n(l);const f=flarum.core.compat["common/models/Discussion"];var p=t.n(f);function d(t,r){return d=Object.setPrototypeOf||function(t,r){return t.__proto__=r,t},d(t,r)}function h(t,r){t.prototype=Object.create(r.prototype),t.prototype.constructor=t,d(t,r)}const y=flarum.core.compat["common/components/Modal"];var v=t.n(y);const g=flarum.core.compat["common/helpers/icon"];var b=t.n(g);const w=flarum.core.compat["common/utils/string"];function k(t){return k=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},k(t)}function S(t,r,e){return S=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,r,e){var o=[null];o.push.apply(o,r);var n=new(Function.bind.apply(t,o));return e&&d(n,e.prototype),n},S.apply(null,arguments)}function q(t){var r="function"==typeof Map?new Map:void 0;return q=function(t){if(null===t||(e=t,-1===Function.toString.call(e).indexOf("[native code]")))return t;var e;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(t))return r.get(t);r.set(t,o)}function o(){return S(t,arguments,k(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),d(o,t)},q(t)}function O(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,o=new Array(r);e/g,">")};function j(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,o=new Array(r);e=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e.split("."));!(o=i()).done;){var u=o.value;n=n?n[u]:void 0}var l=c({value:n,key:e});if(void 0===l){if(a)return t;throw new x(e)}return String(l)},s=/{{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}}/gi;return s.test(t)&&(t=t.replace(s,(u=l,function(){return function(t){if("string"==typeof t)return _(t);for(var r=t[0],e=arguments.length,o=new Array(e>1?e-1:0),n=1;n=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(o.entries());!(a=i()).done;){var c=a.value,u=c[0],l=c[1];r=r+_(String(l))+t[u+1]}return r}(u.apply(void 0,arguments))}))),t.replace(/{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}/gi,l)}const M=flarum.core.compat["common/utils/ItemList"];var I=t.n(M),P=function(t){return{title:t.title,text:t.description,url:t.url}},B={facebook:"//facebook.com/sharer/sharer.php?u={url}",twitter:"//twitter.com/share?url={url}&text={title}",linkedin:"//linkedin.com/shareArticle?mini=true&url={url}&title={title}&summary={description}",reddit:"//www.reddit.com/submit?url={url}&title={title}",whatsapp:"//api.whatsapp.com/send/?phone&text={title}%20{url}",telegram:"//telegram.me/share/url?url={url}&text={title}",vkontakte:"//vk.com/share.php?url={url}&title={title}&description={description}",odnoklassniki:"//connect.ok.ru/offer?url={url}",my_mail:"//connect.mail.ru/share?url={url}&title={title}&description={description}",qq:"//connect.qq.com/widget/shareqq/iframe_index.html?url={url}&title={title}",qzone:"//sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&summary={description}&title={title}",native:function(t){return navigator.share(P(t))}},U={vkontakte:"fab fa-vk",my_mail:"fas fa-at",qq:"fab fa-qq",qzone:"fas fa-star",native:"fas fa-share-square"},z=function(t){function r(){return t.apply(this,arguments)||this}h(r,t);var e=r.prototype;return e.oninit=function(r){t.prototype.oninit.call(this,r),this.networks=this.attrs.networks,this.discussion=this.attrs.discussion},e.className=function(){return"FofShareSocialModal Modal--small"},e.title=function(){return o().translator.trans("fof-share-social.forum.modal.title")},e.content=function(){return m("div",{className:"Modal-body"},m("div",{className:"Form Form--centered"},m("div",{className:"Form-group"},this.shareItems().toArray())))},e.shareItems=function(){var t=this,r=new(I()),e=o().forum.attribute("fof-share-social.plain-copy");return this.networks.filter((function(r){return"native"!==r||(null==navigator.canShare?void 0:navigator.canShare(P(t.data())))})).map((function(e){return r.add("network-"+e,m(u(),{className:"Button Button--rounded Button--block Share--"+e,icon:(U[e]||"fab fa-"+e)+" fa-lg fa-fw",onclick:t.onclick.bind(t,e)},o().translator.trans("fof-share-social.lib.networks."+e)))})),e&&r.add("plain-copy",m("div",{className:"ShareUrl"},m("input",{className:"FormControl",type:"text",value:this.discussion.shareUrl()}),m(u(),{className:"Button Button--primary","aria-label":o().translator.trans("fof-share-social.forum.modal.copy_button"),onclick:this.copy.bind(this)},b()("fas fa-copy fa-check")))),r},e.onclick=function(t){var r=this.data(),e=B[t];if("function"==typeof e)return e(r);var n="width=1000, height= 500, top="+($(window).height()/2-250)+", left="+($(window).width()/2-500)+", status=no, scrollbars=no, resizable=no";for(var a in r)r[a]=encodeURIComponent(r[a]);window.open(A(e,r),o().title,n)},e.data=function(){var t;return{url:this.discussion.shareUrl(),title:o().title,description:this.discussion.firstPost()&&(0,w.truncate)((0,w.getPlainContent)(null==(t=this.discussion.firstPost())?void 0:t.contentHtml()),150,0)||""}},e.copy=function(){var t=document.querySelector(".ShareUrl input");t.select(),t.setSelectionRange(0,99999),document.execCommand("copy"),this.toggleCopyIcon()},e.toggleCopyIcon=function(){var t=document.querySelector(".ShareUrl button i");t.classList.toggle("fa-copy"),setTimeout((function(){t.classList.toggle("fa-copy")}),3e3)},r}(v());o().initializers.add("fof/share-social",(function(){p().prototype.shareUrl=s().attribute("shareUrl"),(0,n.extend)(i().prototype,"sidebarItems",(function(t){var r=this,e=o().forum.attribute("fof-share-social.networks");e.length&&t.add("share-social",m(u(),{class:"Button Button-icon Button--share",icon:"fas fa-share-alt",onclick:function(){return o().modal.show(z,{networks:e,discussion:r.discussion})}},o().translator.trans("fof-share-social.forum.discussion.share_button")),-1)}))}))})(),module.exports=r})();
//# 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 3fa8222..2468ec3 100644
--- a/js/dist/forum.js.map
+++ b/js/dist/forum.js.map
@@ -1 +1 @@
-{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@fof/share-social/webpack/bootstrap","webpack://@fof/share-social/webpack/runtime/compat get default export","webpack://@fof/share-social/webpack/runtime/define property getters","webpack://@fof/share-social/webpack/runtime/hasOwnProperty shorthand","webpack://@fof/share-social/webpack/runtime/make namespace object","webpack://@fof/share-social/external root \"flarum.core.compat['forum/app']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/extend']\"","webpack://@fof/share-social/external root \"flarum.core.compat['forum/components/DiscussionPage']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/components/Button']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/Model']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/models/Discussion']\"","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/share-social/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/utils/string']\"","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://@fof/share-social/./node_modules/escape-goat/index.js","webpack://@fof/share-social/./node_modules/pupa/index.js","webpack://@fof/share-social/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@fof/share-social/./src/forum/components/ShareModal.js","webpack://@fof/share-social/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Discussion'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","const _htmlEscape = string => string\n\t.replace(/&/g, '&')\n\t.replace(/\"/g, '"')\n\t.replace(/'/g, ''')\n\t.replace(//g, '>');\n\nconst _htmlUnescape = htmlString => htmlString\n\t.replace(/>/g, '>')\n\t.replace(/</g, '<')\n\t.replace(/?39;/g, '\\'')\n\t.replace(/"/g, '\"')\n\t.replace(/&/g, '&');\n\nexport function htmlEscape(strings, ...values) {\n\tif (typeof strings === 'string') {\n\t\treturn _htmlEscape(strings);\n\t}\n\n\tlet output = strings[0];\n\tfor (const [index, value] of values.entries()) {\n\t\toutput = output + _htmlEscape(String(value)) + strings[index + 1];\n\t}\n\n\treturn output;\n}\n\nexport function htmlUnescape(strings, ...values) {\n\tif (typeof strings === 'string') {\n\t\treturn _htmlUnescape(strings);\n\t}\n\n\tlet output = strings[0];\n\tfor (const [index, value] of values.entries()) {\n\t\toutput = output + _htmlUnescape(String(value)) + strings[index + 1];\n\t}\n\n\treturn output;\n}\n","import {htmlEscape} from 'escape-goat';\n\nexport class MissingValueError extends Error {\n\tconstructor(key) {\n\t\tsuper(`Missing a value for ${key ? `the placeholder: ${key}` : 'a placeholder'}`, key);\n\t\tthis.name = 'MissingValueError';\n\t\tthis.key = key;\n\t}\n}\n\nexport default function pupa(template, data, {ignoreMissing = false, transform = ({value}) => value} = {}) {\n\tif (typeof template !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\` in the first argument, got \\`${typeof template}\\``);\n\t}\n\n\tif (typeof data !== 'object') {\n\t\tthrow new TypeError(`Expected an \\`object\\` or \\`Array\\` in the second argument, got \\`${typeof data}\\``);\n\t}\n\n\tconst replace = (placeholder, key) => {\n\t\tlet value = data;\n\t\tfor (const property of key.split('.')) {\n\t\t\tvalue = value ? value[property] : undefined;\n\t\t}\n\n\t\tconst transformedValue = transform({value, key});\n\t\tif (transformedValue === undefined) {\n\t\t\tif (ignoreMissing) {\n\t\t\t\treturn placeholder;\n\t\t\t}\n\n\t\t\tthrow new MissingValueError(key);\n\t\t}\n\n\t\treturn String(transformedValue);\n\t};\n\n\tconst composeHtmlEscape = replacer => (...args) => htmlEscape(replacer(...args));\n\n\t// The regex tries to match either a number inside `{{ }}` or a valid JS identifier or key path.\n\tconst doubleBraceRegex = /{{(\\d+|[a-z$_][\\w\\-$]*?(?:\\.[\\w\\-$]*?)*?)}}/gi;\n\n\tif (doubleBraceRegex.test(template)) {\n\t\ttemplate = template.replace(doubleBraceRegex, composeHtmlEscape(replace));\n\t}\n\n\tconst braceRegex = /{(\\d+|[a-z$_][\\w\\-$]*?(?:\\.[\\w\\-$]*?)*?)}/gi;\n\n\treturn template.replace(braceRegex, replace);\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport icon from 'flarum/common/helpers/icon';\nimport { truncate, getPlainContent } from 'flarum/common/utils/string';\n\nimport pupa from 'pupa';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nconst navigatorData = ({ title, description, url }) => ({ title, text: description, url });\n\nconst share = {\n facebook: '//facebook.com/sharer/sharer.php?u={url}',\n twitter: '//twitter.com/share?url={url}&text={title}',\n linkedin: '//linkedin.com/shareArticle?mini=true&url={url}&title={title}&summary={description}',\n reddit: '//www.reddit.com/submit?url={url}&title={title}',\n whatsapp: '//api.whatsapp.com/send/?phone&text={title}%20{url}',\n telegram: '//telegram.me/share/url?url={url}&text={title}',\n\n vkontakte: '//vk.com/share.php?url={url}&title={title}&description={description}',\n odnoklassniki: '//connect.ok.ru/offer?url={url}',\n my_mail: '//connect.mail.ru/share?url={url}&title={title}&description={description}',\n qq: '//connect.qq.com/widget/shareqq/iframe_index.html?url={url}&title={title}',\n qzone: '//sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&summary={description}&title={title}',\n\n native: (data) => navigator.share(navigatorData(data)),\n};\n\nconst shareIcons = {\n vkontakte: 'fab fa-vk',\n my_mail: 'fas fa-at',\n qq: 'fab fa-qq',\n qzone: 'fas fa-star',\n native: 'fas fa-share-square',\n};\n\nexport default class ShareModal extends Modal {\n oninit(vdom) {\n super.oninit(vdom);\n\n this.networks = this.attrs.networks;\n this.discussion = this.attrs.discussion;\n }\n\n className() {\n return 'FofShareSocialModal Modal--small';\n }\n\n title() {\n return app.translator.trans('fof-share-social.forum.modal.title');\n }\n\n content() {\n return (\n \n
\n
{this.shareItems().toArray()}
\n
\n
\n );\n }\n\n shareItems() {\n const items = new ItemList();\n const plainCopy = app.forum.attribute('fof-share-social.plain-copy');\n\n {\n this.networks\n .filter((name) => name !== 'native' || navigator.canShare?.(navigatorData(this.data())))\n .map((network) =>\n items.add(\n `network-${network}`,\n \n )\n );\n }\n\n if (plainCopy) {\n items.add(\n 'plain-copy',\n \n \n \n
\n );\n }\n\n return items;\n }\n\n onclick(network) {\n const data = this.data();\n const action = share[network];\n\n if (typeof action === 'function') {\n return action(data);\n }\n\n const width = 1000;\n const height = 500;\n const top = $(window).height() / 2 - height / 2;\n const left = $(window).width() / 2 - width / 2;\n const windowParams = `width=${width}, height= ${height}, top=${top}, left=${left}, status=no, scrollbars=no, resizable=no`;\n\n for (const dataKey in data) {\n data[dataKey] = encodeURIComponent(data[dataKey]);\n }\n\n window.open(pupa(action, data), app.title, windowParams);\n }\n\n data() {\n const url = this.discussion.shareUrl();\n const title = app.title;\n const description = (this.discussion.firstPost() && truncate(getPlainContent(this.discussion.firstPost()?.contentHtml()), 150, 0)) || '';\n\n return { url, title, description };\n }\n\n copy() {\n const copyText = document.querySelector('.ShareUrl input');\n copyText.select();\n copyText.setSelectionRange(0, 99999);\n document.execCommand('copy');\n this.toggleCopyIcon();\n }\n\n toggleCopyIcon() {\n const copyButton = document.querySelector('.ShareUrl button i');\n copyButton.classList.toggle('fa-copy');\n setTimeout(() => {\n copyButton.classList.toggle('fa-copy');\n }, 3000);\n }\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\nimport Model from 'flarum/common/Model';\nimport Discussion from 'flarum/common/models/Discussion';\n\nimport ShareModal from './components/ShareModal';\n\napp.initializers.add('fof/share-social', () => {\n Discussion.prototype.shareUrl = Model.attribute('shareUrl');\n\n extend(DiscussionPage.prototype, 'sidebarItems', function (items) {\n const networks = app.forum.attribute('fof-share-social.networks');\n\n if (!networks.length) return;\n\n items.add(\n 'share-social',\n ,\n -1\n );\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","create","constructor","_getPrototypeOf","getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","e","_construct","Parent","args","Class","isNativeReflectConstruct","push","apply","instance","Function","bind","arguments","_wrapNativeSuper","_cache","Map","undefined","fn","toString","indexOf","TypeError","has","set","Wrapper","this","writable","configurable","_htmlEscape","string","replace","htmlEscape","strings","output","values","entries","index","String","MissingValueError","name","Error","navigatorData","title","text","description","url","share","facebook","twitter","linkedin","reddit","whatsapp","telegram","vkontakte","odnoklassniki","my_mail","qq","qzone","native","data","navigator","shareIcons","ShareModal","oninit","vdom","networks","attrs","discussion","className","app","content","shareItems","toArray","items","ItemList","plainCopy","filter","canShare","map","network","add","icon","onclick","type","shareUrl","copy","action","windowParams","$","window","height","width","dataKey","encodeURIComponent","open","template","ignoreMissing","transform","replacer","placeholder","split","property","transformedValue","doubleBraceRegex","test","pupa","firstPost","truncate","getPlainContent","contentHtml","copyText","document","querySelector","select","setSelectionRange","execCommand","toggleCopyIcon","copyButton","classList","toggle","setTimeout","Modal","Discussion","Model","extend","DiscussionPage","length","class"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@fof/share-social/webpack/bootstrap","webpack://@fof/share-social/webpack/runtime/compat get default export","webpack://@fof/share-social/webpack/runtime/define property getters","webpack://@fof/share-social/webpack/runtime/hasOwnProperty shorthand","webpack://@fof/share-social/webpack/runtime/make namespace object","webpack://@fof/share-social/external root \"flarum.core.compat['forum/app']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/extend']\"","webpack://@fof/share-social/external root \"flarum.core.compat['forum/components/DiscussionPage']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/components/Button']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/Model']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/models/Discussion']\"","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/share-social/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@fof/share-social/external root \"flarum.core.compat['common/utils/string']\"","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://@fof/share-social/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://@fof/share-social/./node_modules/escape-goat/index.js","webpack://@fof/share-social/./node_modules/pupa/index.js","webpack://@fof/share-social/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@fof/share-social/./src/forum/components/ShareModal.js","webpack://@fof/share-social/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Discussion'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","const _htmlEscape = string => string\n\t.replace(/&/g, '&')\n\t.replace(/\"/g, '"')\n\t.replace(/'/g, ''')\n\t.replace(//g, '>');\n\nconst _htmlUnescape = htmlString => htmlString\n\t.replace(/>/g, '>')\n\t.replace(/</g, '<')\n\t.replace(/?39;/g, '\\'')\n\t.replace(/"/g, '\"')\n\t.replace(/&/g, '&');\n\nexport function htmlEscape(strings, ...values) {\n\tif (typeof strings === 'string') {\n\t\treturn _htmlEscape(strings);\n\t}\n\n\tlet output = strings[0];\n\tfor (const [index, value] of values.entries()) {\n\t\toutput = output + _htmlEscape(String(value)) + strings[index + 1];\n\t}\n\n\treturn output;\n}\n\nexport function htmlUnescape(strings, ...values) {\n\tif (typeof strings === 'string') {\n\t\treturn _htmlUnescape(strings);\n\t}\n\n\tlet output = strings[0];\n\tfor (const [index, value] of values.entries()) {\n\t\toutput = output + _htmlUnescape(String(value)) + strings[index + 1];\n\t}\n\n\treturn output;\n}\n","import {htmlEscape} from 'escape-goat';\n\nexport class MissingValueError extends Error {\n\tconstructor(key) {\n\t\tsuper(`Missing a value for ${key ? `the placeholder: ${key}` : 'a placeholder'}`, key);\n\t\tthis.name = 'MissingValueError';\n\t\tthis.key = key;\n\t}\n}\n\nexport default function pupa(template, data, {ignoreMissing = false, transform = ({value}) => value} = {}) {\n\tif (typeof template !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\` in the first argument, got \\`${typeof template}\\``);\n\t}\n\n\tif (typeof data !== 'object') {\n\t\tthrow new TypeError(`Expected an \\`object\\` or \\`Array\\` in the second argument, got \\`${typeof data}\\``);\n\t}\n\n\tconst replace = (placeholder, key) => {\n\t\tlet value = data;\n\t\tfor (const property of key.split('.')) {\n\t\t\tvalue = value ? value[property] : undefined;\n\t\t}\n\n\t\tconst transformedValue = transform({value, key});\n\t\tif (transformedValue === undefined) {\n\t\t\tif (ignoreMissing) {\n\t\t\t\treturn placeholder;\n\t\t\t}\n\n\t\t\tthrow new MissingValueError(key);\n\t\t}\n\n\t\treturn String(transformedValue);\n\t};\n\n\tconst composeHtmlEscape = replacer => (...args) => htmlEscape(replacer(...args));\n\n\t// The regex tries to match either a number inside `{{ }}` or a valid JS identifier or key path.\n\tconst doubleBraceRegex = /{{(\\d+|[a-z$_][\\w\\-$]*?(?:\\.[\\w\\-$]*?)*?)}}/gi;\n\n\tif (doubleBraceRegex.test(template)) {\n\t\ttemplate = template.replace(doubleBraceRegex, composeHtmlEscape(replace));\n\t}\n\n\tconst braceRegex = /{(\\d+|[a-z$_][\\w\\-$]*?(?:\\.[\\w\\-$]*?)*?)}/gi;\n\n\treturn template.replace(braceRegex, replace);\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport icon from 'flarum/common/helpers/icon';\nimport { truncate, getPlainContent } from 'flarum/common/utils/string';\n\nimport pupa from 'pupa';\nimport ItemList from 'flarum/common/utils/ItemList';\n\nconst navigatorData = ({ title, description, url }) => ({ title, text: description, url });\n\nconst share = {\n facebook: '//facebook.com/sharer/sharer.php?u={url}',\n twitter: '//twitter.com/share?url={url}&text={title}',\n linkedin: '//linkedin.com/shareArticle?mini=true&url={url}&title={title}&summary={description}',\n reddit: '//www.reddit.com/submit?url={url}&title={title}',\n whatsapp: '//api.whatsapp.com/send/?phone&text={title}%20{url}',\n telegram: '//telegram.me/share/url?url={url}&text={title}',\n\n vkontakte: '//vk.com/share.php?url={url}&title={title}&description={description}',\n odnoklassniki: '//connect.ok.ru/offer?url={url}',\n my_mail: '//connect.mail.ru/share?url={url}&title={title}&description={description}',\n qq: '//connect.qq.com/widget/shareqq/iframe_index.html?url={url}&title={title}',\n qzone: '//sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&summary={description}&title={title}',\n\n native: (data) => navigator.share(navigatorData(data)),\n};\n\nconst shareIcons = {\n vkontakte: 'fab fa-vk',\n my_mail: 'fas fa-at',\n qq: 'fab fa-qq',\n qzone: 'fas fa-star',\n native: 'fas fa-share-square',\n};\n\nexport default class ShareModal extends Modal {\n oninit(vdom) {\n super.oninit(vdom);\n\n this.networks = this.attrs.networks;\n this.discussion = this.attrs.discussion;\n }\n\n className() {\n return 'FofShareSocialModal Modal--small';\n }\n\n title() {\n return app.translator.trans('fof-share-social.forum.modal.title');\n }\n\n content() {\n return (\n \n
\n
{this.shareItems().toArray()}
\n
\n
\n );\n }\n\n shareItems() {\n const items = new ItemList();\n const plainCopy = app.forum.attribute('fof-share-social.plain-copy');\n\n {\n this.networks\n .filter((name) => name !== 'native' || navigator.canShare?.(navigatorData(this.data())))\n .map((network) =>\n items.add(\n `network-${network}`,\n \n )\n );\n }\n\n if (plainCopy) {\n items.add(\n 'plain-copy',\n \n \n \n
\n );\n }\n\n return items;\n }\n\n onclick(network) {\n const data = this.data();\n const action = share[network];\n\n if (typeof action === 'function') {\n return action(data);\n }\n\n const width = 1000;\n const height = 500;\n const top = $(window).height() / 2 - height / 2;\n const left = $(window).width() / 2 - width / 2;\n const windowParams = `width=${width}, height= ${height}, top=${top}, left=${left}, status=no, scrollbars=no, resizable=no`;\n\n for (const dataKey in data) {\n data[dataKey] = encodeURIComponent(data[dataKey]);\n }\n\n window.open(pupa(action, data), app.title, windowParams);\n }\n\n data() {\n const url = this.discussion.shareUrl();\n const title = app.title;\n const description = (this.discussion.firstPost() && truncate(getPlainContent(this.discussion.firstPost()?.contentHtml()), 150, 0)) || '';\n\n return { url, title, description };\n }\n\n copy() {\n const copyText = document.querySelector('.ShareUrl input');\n copyText.select();\n copyText.setSelectionRange(0, 99999);\n document.execCommand('copy');\n this.toggleCopyIcon();\n }\n\n toggleCopyIcon() {\n const copyButton = document.querySelector('.ShareUrl button i');\n copyButton.classList.toggle('fa-copy');\n setTimeout(() => {\n copyButton.classList.toggle('fa-copy');\n }, 3000);\n }\n}\n","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\nimport Model from 'flarum/common/Model';\nimport Discussion from 'flarum/common/models/Discussion';\n\nimport ShareModal from './components/ShareModal';\n\napp.initializers.add('fof/share-social', () => {\n Discussion.prototype.shareUrl = Model.attribute('shareUrl');\n\n extend(DiscussionPage.prototype, 'sidebarItems', function (items) {\n const networks = app.forum.attribute('fof-share-social.networks');\n\n if (!networks.length) return;\n\n items.add(\n 'share-social',\n ,\n -1\n );\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","create","constructor","_getPrototypeOf","getPrototypeOf","_construct","Parent","args","Class","Reflect","construct","sham","Proxy","Boolean","valueOf","e","isNativeReflectConstruct","push","apply","instance","Function","bind","arguments","_wrapNativeSuper","_cache","Map","undefined","fn","toString","indexOf","TypeError","has","set","Wrapper","this","writable","configurable","_htmlEscape","string","replace","MissingValueError","_Error","_this","name","Error","pupa","template","data","_temp","_ref","_ref$ignoreMissing","ignoreMissing","_ref$transform","transform","_ref2","replacer","placeholder","_step","_iterator","_createForOfIteratorHelperLoose","split","done","property","transformedValue","String","doubleBraceRegex","test","strings","output","_len","length","values","Array","_key","entries","_step$value","index","htmlEscape","navigatorData","title","text","description","url","share","facebook","twitter","linkedin","reddit","whatsapp","telegram","vkontakte","odnoklassniki","my_mail","qq","qzone","native","navigator","shareIcons","ShareModal","_Modal","_proto","oninit","vdom","networks","attrs","discussion","className","app","trans","content","m","shareItems","toArray","items","ItemList","plainCopy","attribute","filter","canShare","map","network","add","Button","icon","onclick","type","shareUrl","copy","action","windowParams","$","window","height","width","dataKey","encodeURIComponent","open","_this$discussion$firs","firstPost","truncate","getPlainContent","contentHtml","copyText","document","querySelector","select","setSelectionRange","execCommand","toggleCopyIcon","copyButton","classList","toggle","setTimeout","Modal","Discussion","Model","extend","DiscussionPage","class","show"],"sourceRoot":""}
\ No newline at end of file