From 6e7fab3ead7b8dd3a74c4d87ea4b62d932b39901 Mon Sep 17 00:00:00 2001 From: sadposter Date: Fri, 8 May 2020 14:16:11 +0100 Subject: [PATCH] fe --- priv/static/index.html | 6 +- .../static/css/app.1055039ce3f2fe4dd110.css | 108 ++++++++++++++ .../css/app.1055039ce3f2fe4dd110.css.map | 1 + .../static/css/app.613cef07981cd95ccceb.css | 5 - .../css/app.613cef07981cd95ccceb.css.map | 1 - .../vendors~app.18fea621d430000acc27.css.map | 1 - ...s => vendors~app.b2603a50868c68a1c192.css} | 31 ++-- .../vendors~app.b2603a50868c68a1c192.css.map | 1 + .../static/font/fontello.1588196596336.eot | Bin 22444 -> 0 bytes .../static/font/fontello.1588196596336.svg | 118 --------------- .../static/font/fontello.1588196596336.ttf | Bin 22276 -> 0 bytes .../static/font/fontello.1588196596336.woff | Bin 13656 -> 0 bytes .../static/font/fontello.1588196596336.woff2 | Bin 11540 -> 0 bytes .../static/font/fontello.1588419330867.woff | Bin 13836 -> 0 bytes .../static/font/fontello.1588419330867.woff2 | Bin 11712 -> 0 bytes ...9330867.eot => fontello.1588943731405.eot} | Bin 22752 -> 22976 bytes ...9330867.svg => fontello.1588943731405.svg} | 2 + ...9330867.ttf => fontello.1588943731405.ttf} | Bin 22584 -> 22808 bytes .../static/font/fontello.1588943731405.woff | Bin 0 -> 13988 bytes .../static/font/fontello.1588943731405.woff2 | Bin 0 -> 11816 bytes priv/static/static/fontello.1588196596336.css | 138 ------------------ ...9330867.css => fontello.1588943731405.css} | 14 +- priv/static/static/fontello.json | 6 + .../static/js/2.1c407059cd79fca99e19.js | 2 - .../static/js/2.1c407059cd79fca99e19.js.map | 1 - .../static/js/2.f9a5c4aba770b3f9f9e0.js | 2 + .../static/js/2.f9a5c4aba770b3f9f9e0.js.map | 1 + .../static/js/app.86c06d1416c31cdb0de5.js | 2 + .../static/js/app.86c06d1416c31cdb0de5.js.map | 1 + .../static/js/app.e689136d879ca1c869c6.js | 2 - .../static/js/app.e689136d879ca1c869c6.js.map | 1 - .../static/js/app.fa89b90e606f4facd209.js | 2 - .../static/js/app.fa89b90e606f4facd209.js.map | 1 - .../js/vendors~app.8aa781e6dd81307f544b.js | 69 --------- .../vendors~app.8aa781e6dd81307f544b.js.map | 1 - ...js => vendors~app.a516afd698489b59a809.js} | 18 +-- .../vendors~app.a516afd698489b59a809.js.map | 1 + .../vendors~app.de343579e844e698d456.js.map | 1 - priv/static/sw-pleroma.js | 8 +- priv/static/sw-pleroma.js.map | 2 +- 40 files changed, 162 insertions(+), 385 deletions(-) create mode 100644 priv/static/static/css/app.1055039ce3f2fe4dd110.css create mode 100644 priv/static/static/css/app.1055039ce3f2fe4dd110.css.map delete mode 100644 priv/static/static/css/app.613cef07981cd95ccceb.css delete mode 100644 priv/static/static/css/app.613cef07981cd95ccceb.css.map delete mode 100644 priv/static/static/css/vendors~app.18fea621d430000acc27.css.map rename priv/static/static/css/{vendors~app.18fea621d430000acc27.css => vendors~app.b2603a50868c68a1c192.css} (92%) create mode 100644 priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map delete mode 100644 priv/static/static/font/fontello.1588196596336.eot delete mode 100644 priv/static/static/font/fontello.1588196596336.svg delete mode 100644 priv/static/static/font/fontello.1588196596336.ttf delete mode 100644 priv/static/static/font/fontello.1588196596336.woff delete mode 100644 priv/static/static/font/fontello.1588196596336.woff2 delete mode 100644 priv/static/static/font/fontello.1588419330867.woff delete mode 100644 priv/static/static/font/fontello.1588419330867.woff2 rename priv/static/static/font/{fontello.1588419330867.eot => fontello.1588943731405.eot} (90%) rename priv/static/static/font/{fontello.1588419330867.svg => fontello.1588943731405.svg} (98%) rename priv/static/static/font/{fontello.1588419330867.ttf => fontello.1588943731405.ttf} (90%) create mode 100644 priv/static/static/font/fontello.1588943731405.woff create mode 100644 priv/static/static/font/fontello.1588943731405.woff2 delete mode 100644 priv/static/static/fontello.1588196596336.css rename priv/static/static/{fontello.1588419330867.css => fontello.1588943731405.css} (88%) delete mode 100644 priv/static/static/js/2.1c407059cd79fca99e19.js delete mode 100644 priv/static/static/js/2.1c407059cd79fca99e19.js.map create mode 100644 priv/static/static/js/2.f9a5c4aba770b3f9f9e0.js create mode 100644 priv/static/static/js/2.f9a5c4aba770b3f9f9e0.js.map create mode 100644 priv/static/static/js/app.86c06d1416c31cdb0de5.js create mode 100644 priv/static/static/js/app.86c06d1416c31cdb0de5.js.map delete mode 100644 priv/static/static/js/app.e689136d879ca1c869c6.js delete mode 100644 priv/static/static/js/app.e689136d879ca1c869c6.js.map delete mode 100644 priv/static/static/js/app.fa89b90e606f4facd209.js delete mode 100644 priv/static/static/js/app.fa89b90e606f4facd209.js.map delete mode 100644 priv/static/static/js/vendors~app.8aa781e6dd81307f544b.js delete mode 100644 priv/static/static/js/vendors~app.8aa781e6dd81307f544b.js.map rename priv/static/static/js/{vendors~app.de343579e844e698d456.js => vendors~app.a516afd698489b59a809.js} (75%) create mode 100644 priv/static/static/js/vendors~app.a516afd698489b59a809.js.map delete mode 100644 priv/static/static/js/vendors~app.de343579e844e698d456.js.map diff --git a/priv/static/index.html b/priv/static/index.html index 6e3e9905d..3369f7444 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1,5 +1 @@ -<<<<<<< HEAD -Pleroma
-======= -Pleroma
->>>>>>> fbcc53760e6fcd393513c05a5bd7a4a6a6f3b731 +Pleroma
\ No newline at end of file diff --git a/priv/static/static/css/app.1055039ce3f2fe4dd110.css b/priv/static/static/css/app.1055039ce3f2fe4dd110.css new file mode 100644 index 000000000..1867ca81a --- /dev/null +++ b/priv/static/static/css/app.1055039ce3f2fe4dd110.css @@ -0,0 +1,108 @@ +.with-load-more-footer { + padding: 10px; + text-align: center; + border-top: 1px solid; + border-top-color: #222; + border-top-color: var(--border, #222); +} +.with-load-more-footer .error { + font-size: 14px; +} +.tab-switcher { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} +.tab-switcher .contents { + -ms-flex: 1 0 auto; + flex: 1 0 auto; + min-height: 0px; +} +.tab-switcher .contents .hidden { + display: none; +} +.tab-switcher .contents.scrollable-tabs { + -ms-flex-preferred-size: 0; + flex-basis: 0; + overflow-y: auto; +} +.tab-switcher .tabs { + display: -ms-flexbox; + display: flex; + position: relative; + width: 100%; + overflow-y: hidden; + overflow-x: auto; + padding-top: 5px; + box-sizing: border-box; +} +.tab-switcher .tabs::after, .tab-switcher .tabs::before { + display: block; + content: ""; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + border-bottom: 1px solid; + border-bottom-color: #222; + border-bottom-color: var(--border, #222); +} +.tab-switcher .tabs .tab-wrapper { + height: 28px; + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} +.tab-switcher .tabs .tab-wrapper .tab { + width: 100%; + min-width: 1px; + position: relative; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + padding: 6px 1em; + padding-bottom: 99px; + margin-bottom: -93px; + white-space: nowrap; + color: #b9b9ba; + color: var(--tabText, #b9b9ba); + background-color: #182230; + background-color: var(--tab, #182230); +} +.tab-switcher .tabs .tab-wrapper .tab:not(.active) { + z-index: 4; +} +.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover { + z-index: 6; +} +.tab-switcher .tabs .tab-wrapper .tab.active { + background: transparent; + z-index: 5; + color: #b9b9ba; + color: var(--tabActiveText, #b9b9ba); +} +.tab-switcher .tabs .tab-wrapper .tab img { + max-height: 26px; + vertical-align: top; + margin-top: -5px; +} +.tab-switcher .tabs .tab-wrapper:not(.active)::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + z-index: 7; + border-bottom: 1px solid; + border-bottom-color: #222; + border-bottom-color: var(--border, #222); +} +.with-subscription-loading { + padding: 10px; + text-align: center; +} +.with-subscription-loading .error { + font-size: 14px; +} + +/*# sourceMappingURL=app.1055039ce3f2fe4dd110.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/app.1055039ce3f2fe4dd110.css.map b/priv/static/static/css/app.1055039ce3f2fe4dd110.css.map new file mode 100644 index 000000000..861ee8313 --- /dev/null +++ b/priv/static/static/css/app.1055039ce3f2fe4dd110.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/hocs/with_load_more/with_load_more.scss","webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_subscription/with_subscription.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.1055039ce3f2fe4dd110.css","sourcesContent":[".with-load-more-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: #222;\n border-top-color: var(--border, #222);\n}\n.with-load-more-footer .error {\n font-size: 14px;\n}",".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents {\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n min-height: 0px;\n}\n.tab-switcher .contents .hidden {\n display: none;\n}\n.tab-switcher .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n overflow-y: auto;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n content: \"\";\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher .tabs .tab-wrapper {\n height: 28px;\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n}\n.tab-switcher .tabs .tab-wrapper .tab {\n width: 100%;\n min-width: 1px;\n position: relative;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding: 6px 1em;\n padding-bottom: 99px;\n margin-bottom: -93px;\n white-space: nowrap;\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tabs .tab-wrapper .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tabs .tab-wrapper .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tabs .tab-wrapper .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 7;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}",".with-subscription-loading {\n padding: 10px;\n text-align: center;\n}\n.with-subscription-loading .error {\n font-size: 14px;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/app.613cef07981cd95ccceb.css b/priv/static/static/css/app.613cef07981cd95ccceb.css deleted file mode 100644 index c1d5f8188..000000000 --- a/priv/static/static/css/app.613cef07981cd95ccceb.css +++ /dev/null @@ -1,5 +0,0 @@ -.with-load-more-footer{padding:10px;text-align:center;border-top:1px solid;border-top-color:#222;border-top-color:var(--border, #222)}.with-load-more-footer .error{font-size:14px} -.tab-switcher{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.tab-switcher .contents{-ms-flex:1 0 auto;flex:1 0 auto;min-height:0px}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents.scrollable-tabs{-ms-flex-preferred-size:0;flex-basis:0;overflow-y:auto}.tab-switcher .tabs{display:-ms-flexbox;display:flex;position:relative;width:100%;overflow-y:hidden;overflow-x:auto;padding-top:5px;box-sizing:border-box}.tab-switcher .tabs::after,.tab-switcher .tabs::before{display:block;content:"";-ms-flex:1 1 auto;flex:1 1 auto;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)}.tab-switcher .tabs .tab-wrapper{height:28px;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto}.tab-switcher .tabs .tab-wrapper .tab{width:100%;min-width:1px;position:relative;border-bottom-left-radius:0;border-bottom-right-radius:0;padding:6px 1em;padding-bottom:99px;margin-bottom:-93px;white-space:nowrap;color:#b9b9ba;color:var(--tabText, #b9b9ba);background-color:#182230;background-color:var(--tab, #182230)}.tab-switcher .tabs .tab-wrapper .tab:not(.active){z-index:4}.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover{z-index:6}.tab-switcher .tabs .tab-wrapper .tab.active{background:transparent;z-index:5;color:#b9b9ba;color:var(--tabActiveText, #b9b9ba)}.tab-switcher .tabs .tab-wrapper .tab img{max-height:26px;vertical-align:top;margin-top:-5px}.tab-switcher .tabs .tab-wrapper:not(.active)::after{content:"";position:absolute;left:0;right:0;bottom:0;z-index:7;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)} -.with-subscription-loading{padding:10px;text-align:center}.with-subscription-loading .error{font-size:14px} - -/*# sourceMappingURL=app.613cef07981cd95ccceb.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/app.613cef07981cd95ccceb.css.map b/priv/static/static/css/app.613cef07981cd95ccceb.css.map deleted file mode 100644 index 556e0bb0b..000000000 --- a/priv/static/static/css/app.613cef07981cd95ccceb.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/hocs/with_load_more/with_load_more.scss","webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_subscription/with_subscription.scss"],"names":[],"mappings":"AAAA,uBAAuB,aAAa,kBAAkB,qBAAqB,sBAAsB,qCAAqC,8BAA8B,e;ACApK,cAAc,oBAAoB,aAAa,0BAA0B,sBAAsB,wBAAwB,kBAAkB,cAAc,eAAe,gCAAgC,aAAa,wCAAwC,0BAA0B,aAAa,gBAAgB,oBAAoB,oBAAoB,aAAa,kBAAkB,WAAW,kBAAkB,gBAAgB,gBAAgB,sBAAsB,uDAAuD,cAAc,WAAW,kBAAkB,cAAc,wBAAwB,yBAAyB,wCAAwC,iCAAiC,YAAY,kBAAkB,oBAAoB,aAAa,kBAAkB,cAAc,sCAAsC,WAAW,cAAc,kBAAkB,4BAA4B,6BAA6B,gBAAgB,oBAAoB,oBAAoB,mBAAmB,cAAc,8BAA8B,yBAAyB,qCAAqC,mDAAmD,UAAU,yDAAyD,UAAU,6CAA6C,uBAAuB,UAAU,cAAc,oCAAoC,0CAA0C,gBAAgB,mBAAmB,gBAAgB,qDAAqD,WAAW,kBAAkB,OAAO,QAAQ,SAAS,UAAU,wBAAwB,yBAAyB,wC;ACAtlD,2BAA2B,aAAa,kBAAkB,kCAAkC,e","file":"static/css/app.613cef07981cd95ccceb.css","sourcesContent":[".with-load-more-footer{padding:10px;text-align:center;border-top:1px solid;border-top-color:#222;border-top-color:var(--border, #222)}.with-load-more-footer .error{font-size:14px}",".tab-switcher{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.tab-switcher .contents{-ms-flex:1 0 auto;flex:1 0 auto;min-height:0px}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents.scrollable-tabs{-ms-flex-preferred-size:0;flex-basis:0;overflow-y:auto}.tab-switcher .tabs{display:-ms-flexbox;display:flex;position:relative;width:100%;overflow-y:hidden;overflow-x:auto;padding-top:5px;box-sizing:border-box}.tab-switcher .tabs::after,.tab-switcher .tabs::before{display:block;content:\"\";-ms-flex:1 1 auto;flex:1 1 auto;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)}.tab-switcher .tabs .tab-wrapper{height:28px;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto}.tab-switcher .tabs .tab-wrapper .tab{width:100%;min-width:1px;position:relative;border-bottom-left-radius:0;border-bottom-right-radius:0;padding:6px 1em;padding-bottom:99px;margin-bottom:-93px;white-space:nowrap;color:#b9b9ba;color:var(--tabText, #b9b9ba);background-color:#182230;background-color:var(--tab, #182230)}.tab-switcher .tabs .tab-wrapper .tab:not(.active){z-index:4}.tab-switcher .tabs .tab-wrapper .tab:not(.active):hover{z-index:6}.tab-switcher .tabs .tab-wrapper .tab.active{background:transparent;z-index:5;color:#b9b9ba;color:var(--tabActiveText, #b9b9ba)}.tab-switcher .tabs .tab-wrapper .tab img{max-height:26px;vertical-align:top;margin-top:-5px}.tab-switcher .tabs .tab-wrapper:not(.active)::after{content:\"\";position:absolute;left:0;right:0;bottom:0;z-index:7;border-bottom:1px solid;border-bottom-color:#222;border-bottom-color:var(--border, #222)}",".with-subscription-loading{padding:10px;text-align:center}.with-subscription-loading .error{font-size:14px}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/vendors~app.18fea621d430000acc27.css.map b/priv/static/static/css/vendors~app.18fea621d430000acc27.css.map deleted file mode 100644 index 057d67d6a..000000000 --- a/priv/static/static/css/vendors~app.18fea621d430000acc27.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/cropperjs/dist/cropper.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA","file":"static/css/vendors~app.18fea621d430000acc27.css","sourcesContent":["/*!\n * Cropper.js v1.5.6\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2019-10-04T04:33:44.164Z\n */\n\n.cropper-container {\n direction: ltr;\n font-size: 0;\n line-height: 0;\n position: relative;\n -ms-touch-action: none;\n touch-action: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.cropper-container img {\n display: block;\n height: 100%;\n image-orientation: 0deg;\n max-height: none !important;\n max-width: none !important;\n min-height: 0 !important;\n min-width: 0 !important;\n width: 100%;\n}\n\n.cropper-wrap-box,\n.cropper-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-modal {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.cropper-wrap-box,\n.cropper-canvas {\n overflow: hidden;\n}\n\n.cropper-drag-box {\n background-color: #fff;\n opacity: 0;\n}\n\n.cropper-modal {\n background-color: #000;\n opacity: 0.5;\n}\n\n.cropper-view-box {\n display: block;\n height: 100%;\n outline: 1px solid #39f;\n outline-color: rgba(51, 153, 255, 0.75);\n overflow: hidden;\n width: 100%;\n}\n\n.cropper-dashed {\n border: 0 dashed #eee;\n display: block;\n opacity: 0.5;\n position: absolute;\n}\n\n.cropper-dashed.dashed-h {\n border-bottom-width: 1px;\n border-top-width: 1px;\n height: calc(100% / 3);\n left: 0;\n top: calc(100% / 3);\n width: 100%;\n}\n\n.cropper-dashed.dashed-v {\n border-left-width: 1px;\n border-right-width: 1px;\n height: 100%;\n left: calc(100% / 3);\n top: 0;\n width: calc(100% / 3);\n}\n\n.cropper-center {\n display: block;\n height: 0;\n left: 50%;\n opacity: 0.75;\n position: absolute;\n top: 50%;\n width: 0;\n}\n\n.cropper-center::before,\n.cropper-center::after {\n background-color: #eee;\n content: ' ';\n display: block;\n position: absolute;\n}\n\n.cropper-center::before {\n height: 1px;\n left: -3px;\n top: 0;\n width: 7px;\n}\n\n.cropper-center::after {\n height: 7px;\n left: 0;\n top: -3px;\n width: 1px;\n}\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n display: block;\n height: 100%;\n opacity: 0.1;\n position: absolute;\n width: 100%;\n}\n\n.cropper-face {\n background-color: #fff;\n left: 0;\n top: 0;\n}\n\n.cropper-line {\n background-color: #39f;\n}\n\n.cropper-line.line-e {\n cursor: ew-resize;\n right: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-n {\n cursor: ns-resize;\n height: 5px;\n left: 0;\n top: -3px;\n}\n\n.cropper-line.line-w {\n cursor: ew-resize;\n left: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-s {\n bottom: -3px;\n cursor: ns-resize;\n height: 5px;\n left: 0;\n}\n\n.cropper-point {\n background-color: #39f;\n height: 5px;\n opacity: 0.75;\n width: 5px;\n}\n\n.cropper-point.point-e {\n cursor: ew-resize;\n margin-top: -3px;\n right: -3px;\n top: 50%;\n}\n\n.cropper-point.point-n {\n cursor: ns-resize;\n left: 50%;\n margin-left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-w {\n cursor: ew-resize;\n left: -3px;\n margin-top: -3px;\n top: 50%;\n}\n\n.cropper-point.point-s {\n bottom: -3px;\n cursor: s-resize;\n left: 50%;\n margin-left: -3px;\n}\n\n.cropper-point.point-ne {\n cursor: nesw-resize;\n right: -3px;\n top: -3px;\n}\n\n.cropper-point.point-nw {\n cursor: nwse-resize;\n left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-sw {\n bottom: -3px;\n cursor: nesw-resize;\n left: -3px;\n}\n\n.cropper-point.point-se {\n bottom: -3px;\n cursor: nwse-resize;\n height: 20px;\n opacity: 1;\n right: -3px;\n width: 20px;\n}\n\n@media (min-width: 768px) {\n .cropper-point.point-se {\n height: 15px;\n width: 15px;\n }\n}\n\n@media (min-width: 992px) {\n .cropper-point.point-se {\n height: 10px;\n width: 10px;\n }\n}\n\n@media (min-width: 1200px) {\n .cropper-point.point-se {\n height: 5px;\n opacity: 0.75;\n width: 5px;\n }\n}\n\n.cropper-point.point-se::before {\n background-color: #39f;\n bottom: -50%;\n content: ' ';\n display: block;\n height: 200%;\n opacity: 0;\n position: absolute;\n right: -50%;\n width: 200%;\n}\n\n.cropper-invisible {\n opacity: 0;\n}\n\n.cropper-bg {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');\n}\n\n.cropper-hide {\n display: block;\n height: 0;\n position: absolute;\n width: 0;\n}\n\n.cropper-hidden {\n display: none !important;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-disabled .cropper-drag-box,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n cursor: not-allowed;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/vendors~app.18fea621d430000acc27.css b/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css similarity index 92% rename from priv/static/static/css/vendors~app.18fea621d430000acc27.css rename to priv/static/static/css/vendors~app.b2603a50868c68a1c192.css index ef783cbb3..a2e625f5e 100644 --- a/priv/static/static/css/vendors~app.18fea621d430000acc27.css +++ b/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css @@ -1,11 +1,11 @@ /*! - * Cropper.js v1.5.6 + * Cropper.js v1.4.3 * https://fengyuanchen.github.io/cropperjs * * Copyright 2015-present Chen Fengyuan * Released under the MIT license * - * Date: 2019-10-04T04:33:44.164Z + * Date: 2018-10-24T13:07:11.429Z */ .cropper-container { @@ -16,6 +16,7 @@ -ms-touch-action: none; touch-action: none; -webkit-user-select: none; + -moz-user-select: none; -ms-user-select: none; user-select: none; } @@ -55,14 +56,14 @@ .cropper-modal { background-color: #000; - opacity: 0.5; + opacity: .5; } .cropper-view-box { display: block; height: 100%; - outline: 1px solid #39f; outline-color: rgba(51, 153, 255, 0.75); + outline: 1px solid #39f; overflow: hidden; width: 100%; } @@ -70,7 +71,7 @@ .cropper-dashed { border: 0 dashed #eee; display: block; - opacity: 0.5; + opacity: .5; position: absolute; } @@ -96,28 +97,28 @@ display: block; height: 0; left: 50%; - opacity: 0.75; + opacity: .75; position: absolute; top: 50%; width: 0; } -.cropper-center::before, -.cropper-center::after { +.cropper-center:before, +.cropper-center:after { background-color: #eee; content: ' '; display: block; position: absolute; } -.cropper-center::before { +.cropper-center:before { height: 1px; left: -3px; top: 0; width: 7px; } -.cropper-center::after { +.cropper-center:after { height: 7px; left: 0; top: -3px; @@ -129,7 +130,7 @@ .cropper-point { display: block; height: 100%; - opacity: 0.1; + opacity: .1; position: absolute; width: 100%; } @@ -175,7 +176,7 @@ .cropper-point { background-color: #39f; height: 5px; - opacity: 0.75; + opacity: .75; width: 5px; } @@ -251,12 +252,12 @@ @media (min-width: 1200px) { .cropper-point.point-se { height: 5px; - opacity: 0.75; + opacity: .75; width: 5px; } } -.cropper-point.point-se::before { +.cropper-point.point-se:before { background-color: #39f; bottom: -50%; content: ' '; @@ -303,4 +304,4 @@ } -/*# sourceMappingURL=vendors~app.18fea621d430000acc27.css.map*/ \ No newline at end of file +/*# sourceMappingURL=vendors~app.b2603a50868c68a1c192.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map b/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map new file mode 100644 index 000000000..e7013b291 --- /dev/null +++ b/priv/static/static/css/vendors~app.b2603a50868c68a1c192.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/cropperjs/dist/cropper.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA","file":"static/css/vendors~app.b2603a50868c68a1c192.css","sourcesContent":["/*!\n * Cropper.js v1.4.3\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2018-10-24T13:07:11.429Z\n */\n\n.cropper-container {\n direction: ltr;\n font-size: 0;\n line-height: 0;\n position: relative;\n -ms-touch-action: none;\n touch-action: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.cropper-container img {\n display: block;\n height: 100%;\n image-orientation: 0deg;\n max-height: none !important;\n max-width: none !important;\n min-height: 0 !important;\n min-width: 0 !important;\n width: 100%;\n}\n\n.cropper-wrap-box,\n.cropper-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-modal {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.cropper-wrap-box,\n.cropper-canvas {\n overflow: hidden;\n}\n\n.cropper-drag-box {\n background-color: #fff;\n opacity: 0;\n}\n\n.cropper-modal {\n background-color: #000;\n opacity: .5;\n}\n\n.cropper-view-box {\n display: block;\n height: 100%;\n outline-color: rgba(51, 153, 255, 0.75);\n outline: 1px solid #39f;\n overflow: hidden;\n width: 100%;\n}\n\n.cropper-dashed {\n border: 0 dashed #eee;\n display: block;\n opacity: .5;\n position: absolute;\n}\n\n.cropper-dashed.dashed-h {\n border-bottom-width: 1px;\n border-top-width: 1px;\n height: calc(100% / 3);\n left: 0;\n top: calc(100% / 3);\n width: 100%;\n}\n\n.cropper-dashed.dashed-v {\n border-left-width: 1px;\n border-right-width: 1px;\n height: 100%;\n left: calc(100% / 3);\n top: 0;\n width: calc(100% / 3);\n}\n\n.cropper-center {\n display: block;\n height: 0;\n left: 50%;\n opacity: .75;\n position: absolute;\n top: 50%;\n width: 0;\n}\n\n.cropper-center:before,\n.cropper-center:after {\n background-color: #eee;\n content: ' ';\n display: block;\n position: absolute;\n}\n\n.cropper-center:before {\n height: 1px;\n left: -3px;\n top: 0;\n width: 7px;\n}\n\n.cropper-center:after {\n height: 7px;\n left: 0;\n top: -3px;\n width: 1px;\n}\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n display: block;\n height: 100%;\n opacity: .1;\n position: absolute;\n width: 100%;\n}\n\n.cropper-face {\n background-color: #fff;\n left: 0;\n top: 0;\n}\n\n.cropper-line {\n background-color: #39f;\n}\n\n.cropper-line.line-e {\n cursor: ew-resize;\n right: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-n {\n cursor: ns-resize;\n height: 5px;\n left: 0;\n top: -3px;\n}\n\n.cropper-line.line-w {\n cursor: ew-resize;\n left: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-s {\n bottom: -3px;\n cursor: ns-resize;\n height: 5px;\n left: 0;\n}\n\n.cropper-point {\n background-color: #39f;\n height: 5px;\n opacity: .75;\n width: 5px;\n}\n\n.cropper-point.point-e {\n cursor: ew-resize;\n margin-top: -3px;\n right: -3px;\n top: 50%;\n}\n\n.cropper-point.point-n {\n cursor: ns-resize;\n left: 50%;\n margin-left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-w {\n cursor: ew-resize;\n left: -3px;\n margin-top: -3px;\n top: 50%;\n}\n\n.cropper-point.point-s {\n bottom: -3px;\n cursor: s-resize;\n left: 50%;\n margin-left: -3px;\n}\n\n.cropper-point.point-ne {\n cursor: nesw-resize;\n right: -3px;\n top: -3px;\n}\n\n.cropper-point.point-nw {\n cursor: nwse-resize;\n left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-sw {\n bottom: -3px;\n cursor: nesw-resize;\n left: -3px;\n}\n\n.cropper-point.point-se {\n bottom: -3px;\n cursor: nwse-resize;\n height: 20px;\n opacity: 1;\n right: -3px;\n width: 20px;\n}\n\n@media (min-width: 768px) {\n .cropper-point.point-se {\n height: 15px;\n width: 15px;\n }\n}\n\n@media (min-width: 992px) {\n .cropper-point.point-se {\n height: 10px;\n width: 10px;\n }\n}\n\n@media (min-width: 1200px) {\n .cropper-point.point-se {\n height: 5px;\n opacity: .75;\n width: 5px;\n }\n}\n\n.cropper-point.point-se:before {\n background-color: #39f;\n bottom: -50%;\n content: ' ';\n display: block;\n height: 200%;\n opacity: 0;\n position: absolute;\n right: -50%;\n width: 200%;\n}\n\n.cropper-invisible {\n opacity: 0;\n}\n\n.cropper-bg {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');\n}\n\n.cropper-hide {\n display: block;\n height: 0;\n position: absolute;\n width: 0;\n}\n\n.cropper-hidden {\n display: none !important;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-disabled .cropper-drag-box,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n cursor: not-allowed;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/font/fontello.1588196596336.eot b/priv/static/static/font/fontello.1588196596336.eot deleted file mode 100644 index b25cae9587bd33f1ce655449ab3c991009bf9771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22444 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 diff --git a/priv/static/static/font/fontello.1588196596336.svg b/priv/static/static/font/fontello.1588196596336.svg deleted file mode 100644 index b905a0f6c..000000000 --- a/priv/static/static/font/fontello.1588196596336.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - -Copyright (C) 2020 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/priv/static/static/font/fontello.1588196596336.ttf b/priv/static/static/font/fontello.1588196596336.ttf deleted file mode 100644 index 7b1a4b4b0e8e5549e06b6828e0bbd0f19b30e6b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22276 zcmd^ndwf*aedjs%J$K%(JEPa=N+Zn(Y4kuE%?KfjK@WsMfDkg4Fvb#kfY8%I*w`^y zH&E9m4!Ew@^)`)Tr;c~Gd2|5Bar55RNfT$=b()4`)3i-fCm%WKx;RN+t{L|GyE77C zaI($kv!DHAC7pZE>z;eg@BGg1eZ@Fq%*`HTB3ta+b6c1B{_6Wt^ET4Zu04&-osD}Q zV2lr-ymx$VY?1%xfBs{X{|jT%#qoQVP321N=ZtOpd$gNVi-+b;|K?*OjBR%?W?wus zc61T-9<;xPyLM>yzNt6odNIE8AY-@Ob9i!WqNwi7GmLfr3))kMQK5cK@-f!agmTs4 zx#ivlWc>Qv2fE*zraFsPlQ0pF!E2ADf%}(+`EhD1V7D z;ZGMAjxINyufhAaK8Et(;?m^e4>#9+4oktB*h7rguCpfA$%LLQ{X@((JGMN}ikXCZ z`l0q~^L%#t&=}JSEgWss%2C6avRW&Ch(E?;yzhPiZ(@(;@BI60Jr_{RWD&JD`5Bn% zonV<2_S2*|a^-HePdvn)MmL&6{s&`Xml#VR;k`m}w%y!peQCa+v!Y=v39&RD%(d$(Q~ z^%wtey!D9nJIm;I{wBY)CINGm040T~fSwKWwlfEFG8b^s!@SJL{4BtN%wQoFW<}VO z5?0E}ScH{hRTZp~Me(L;7GrT%!`87{R)_W1vj*0P{anwQSqn?DR+hrcXlMR^{~>%} z!czq>04giUQX)3JJK(RtgDN%~lEt_{~-d37C%4nNPrZwvx;zU_ZNbCZBK)*rl`igcHFo zeJ!7GHrS=_=Mzo|yYyN<;k>X*Kg=hhD3^YgPdG#DQZAoxn%J9wCncOK_9kFL2`7xb z*_lr`YwXR<`Gix)-t5UIoIm#FL_XmpvN!QAN;s3CaQQ^1lko4#KM8*!d;qJAWJ)TF zJgUS5-Y0@u3JV;~Q-RVzK$63C)d4qGDjT^M?dPmv7@_zIuO2Jc}aX$Yy~EJ0l^I0lId>6du>d> ztooQuu`Os^QI!Rzis}L$5TqfQiJ4F^E|=9+Cu1%l z!c*zhdoZ9xD=K60)?_Nw65$(pb1L1^Y=}x7N0S<*CS3BXG=x_Ik$?~`4u2qE`UImi zyu~!${(30FP2&wmDtfju<$S|1U$lkK2Ha=e0e&{*_r9e^^tXIfE<^B{KB?HTnt9}c zVVVXmyu7BSJi-T!xA27FdMklP^tW)N@_X|Qz@ZP=Tb3#IxphgDX>&j+3VTx)2#Ip2 zjsy1oV8F$#-HEj()BZSJtF4`p4e?p`D@~4|}bwcq$c4cPIx!#%519Sl0s+=G*Y=TXXA>bD$(~lM=Y7z$XhF{ zLy}5YG#lkS!h>GmmGFwLU4C6w1e`8DgZ_%5SFzvysW)Jp^WqB1N0z^Pw!Ixp%a#zl2TcIxOR3!0ca z5Bf?x^9F0QLiH}G^at*8c1#?(qB7%-YsI9@F{ zS%IJ;fP_RVE!=D%`jPJBEzO}cngJz4HT(dl-v|Y;NiH5mYdRKBM?hD2s;;SxS3Y># z0e-||-!kDbJUvZz&np{$ys=c))gD{Xz(dV;``)*IySces)y=6Dz zL*IK~-MwG!-F#=X^`L2A+!Z}?OLzO`Q;+dOK>LYayT@a1>hTdGbi$P@SMJ7H4S;4< zu%V1z4r1g2NfP?DXDbGVGX_D8OQ24ii2@f#LCc)NttFW<&@5r`YO5&nA;!5l%tS8s zk9;~54fuVsTvW%C4O|Hroty`V0t1c>LZ=iF04>nnlaIgpIR1Df(H{8X#CrxFKb#Rd zX3so#X10U(elf@&IrO;jcg zNobeiQMMS8tkvjlZA#U+E+5uhq3V2JZAZA+ritDMaMIkRp`Tr5;^9WOH=LN+u$^6i2hWw8YIFs@1os*sNC_YGB}+ zuJ(=urGx9}v`Ai!^gxWOku8@Q&O?>=y#`@E)eo-bA>d8+CKMF9O!?745)OO3Z&2Kbjz zYUhpiR>3E`Y=U^8n?KxrK-cUx#R*s^W4YsaP!cqraM^RO>H+t&hU+3I;j>_jHdN5^ zNhWzid{JnE=Avx-Jbgns_pyj5E}WF+?Dr;FG1T|&&o5U^lt0;v0>mm zXZ@Vju7m2ho;X^lG7jR#Q{ea^Lj_Rdu@s8PDj@@?$y2~p6e2>Q_UBVQTcy4H(!hbl z7Dw?wE><&YMwA5a4=0OrFC@YaN7&%sZ8kenshqD%ns{g%zeG)*!C&9H*dxfTe>U%Cf}|qC(b{CnW>2bckCV7xxKZu zHHP2T76bBYs1-aFr?!j-43bqrB4ePRRvB`uRi;x-?Kssbj!l4kt6(FH7HkTC$MdUY z6Q`OZOymoaOKf310 z+!&A0RC7PTRrt+5H)ibVL;mvnuRhB^%gd~W+~3j6zIOAWUc376q07GNWU^X#!@^Ob zYkwjvi`zlhLYaUK$OOuct3}pIeFFF;Q8m)8(zaF72E|G^0)kd*zY`R!Cik5JX?t4d zi@7mfzY{Hd9nm@JKplw&br<|Uh}R{$a1d0Gw8`8stV6tHM@HF5W~rQuazETGl< zL5?x*cM5BJnpX0(eQCe0^L2O|NHx7kCvr}UBE9gK_$6@!nsk!g!gjJxXS}JTAh9x+ z0H)H{59YLGd$t(j);bvy3Jy1)gUDYHU{w$~2>gsWwlY;E715Hwwr8vGKIN?(8sZ`W z_lf`hq~JsL{pmf3j{xpAzKgl2E z@8|dPV|6UE<)%vN(z3DGTZh#*p)4$oVnkt7FJ= zehhgp)-G==`4!(hGP1b{pkw?y{38ED{%L+Y-^>1leVKiVy}-_~PqO>iJwO)NWPuhO zNyqDO+M6RBwi!~_IEmtP&Y{_+LNQWsHgP4^8c>rlrL{pK(oZ&=KrIhcDwQfudlXV- zOM?K>6V*_B6i@-uq)7KsDv=>d5mPBO$J9<9r9tBcsZKaQEk-ilY;{mV)EO^`V_1wD zk5L&^2eK?)r5GwSa)a1A6tQ$N6j#({8Y+|y#XzGB6*Iu2iW(6DX+yP?FEt)hj20TF z91}__a8w|Rpja00Y2h*u2&5;1y+zNn*&^Ez+Q_w%@&&{#2AmG)2U32qTDn@Wm zDM65JC<2xi0O}kHCiCYzOwSwdFB4kaX(BiT#!U>&=2ue&=e6{CP})iNE`+y zE{YO<6s|zrlwsY0UadK}Tq=nIR4u$rP;KY}mWBs)L6V)K7;yO|4Z0o|WShYKHboL- zMHe**$S*23j0SmC7NH(W+@;#xk_Uza4YoW?MWca5i2FWSbU5&O!BJEqDzfaCMZ4s* z<3)<3Nj7PBvqWm9$iuK8sj@`##4Dll>8k3JRGWks3NDld7t{yAt%(>~1TO^3#t5=Q z6+}(6sfMD+n&y!L7zcxkE?BK}S@Y@wez+{4B!~_XdLV%cB*2dM2wFgdf=R3#CmXfU zNTjf61C!;VQ*aSDU;z~r%mHwcBvq4D2aLS}lweF2PdOyPhsPnb+XO+^04haMWt&5v zJ~{xinG??kiEI#{We2DYe!!J9NyiQe05v*cB9h(B1)I)A-}1{petFrtD#75)=_#a|UROtuziYK#~h%)xoiQuz?EVFTvk$`&5EK2FqSk~lej(XlpR>L6D=0(STu@K*kyCcHZr*a)Brk;i7dE* zBPin!+9PZL0HjOMbr}_s-G=pG!Gex8OE?e!fx@voJV^VFOU@a*jn+&?L^=lmwV;a% zssLRmY1D`CiN=vjHLuNOa|n_L%o}p!N5!*Z6)19uRc6Wqc-||MYy$n43ov07WbhKB zl1vNLu=Q4gOvFh7fuyR!=o^RB%3uBDdv^Eq4D#XohxyZHMedIRgKfOiJn)SNvb-jK zdhnLvVg8Ti0W7f7`z_qUYBV>@DL1uNc3J4Sv8Al2BTd-mNaAo9WPnZB@LdrRk zMM%NKgaFq4OqLxoM9xYE;KIBnVybIBu+3yAl!mD*lt^2sEe>u$@>Dg%sa3s@^t8A? z8K(+JlA*jNC&JhYP6S;Iq!Z*4w&{(!I;-l|1xHm??^keq9O@y>q4AFgg0@QE+t2$d zZNUKlgsn1Gx$lUk>l!ZH@ofmfk^%~H1uRz)Ja4}dje331pQ2IG=MBL1XXzsVh7Yn> zl&#CeV8DX;5MW<~+XfBfy@BxxFoE?d+ENX-4K0McF!5-?6_X}c3|R#&+Y}kHLL?lD zKGRq+jTs1jE0%1y5(&*9LxnF;?dz6g_*-@8$CEEDwC2>)r7vyI4RI%ATDN_;Ny}+ z6($-IpxGoQ3S*x%s-d9BT)7L#A;?3(6`HRskbGn(4XDr`cAa1TK=@aBQD*(MbA!G` z2>gpDHv+W?K8c?0TRPS^tcyiT3_l>D1Z)J^bR6P-kQlE*@(Vm#mN|j!mardTKhXdb zhlRqjTf#yCQzbeYVu(lKAdD9rk^EBTwoEGz+H5b|d`MLXx^qorzvQn*BQ{Yj(R8OH z*JRm`_^Z`Pxk?MCpUpk;tgz7XYzy3#w|QRPeB0*o6n}hmh};*B$!LEuxP+@_> zK9UW}hb@R-chF%`#{p;K#GxcUh#Qw~r_;W@1SjZPl3?{@3paKg$-sGBVTMB*gJZV_8_ijrkw8Ni0{vv#B zIQ0dSTM1J&1!P!dqagnU<}eD0-zkFXRgqI+@%k=wG^s1jCRhm$=Sap?pYXSM1C=d7 zNLw(Hkx?se0&7mmL_S2z`W+XEdcYCog*a!KBhlssd3Wd@9e?~@!}SkkTvxbTsQX)( zcZSntwL(J)pDe4bElUscd*330N0-mTV3qqRSfrb~1Mc2=9;t1w<%zZg&;4K?v<{Ty z$_eoqoN*2N-oRQiO)>Dmnz#=PoOV>~!vV&gK~Nw!8>l)+A;=-0Dvj2MEoaZFi@JK% z9t0m^b>49TlWQ8Zk8C%=5Q(?V#>IkTnos3U2HTB|!61LY7~=oQS@OPJhaZ3Zu(_qk zX8XNap>}(PTVHcV|5NT{AaDzIl0T3h`YWS)`vLy=tB(l*kK$7goahjW>I0TNp8SU| zN%vwsBB-DfKKUS<%8WBvmlxbz7xe{5Lz=kYg6yg-*s(yqV1r-;d|PmWHAu=JZi=** zK{(mw^SN9aqy&)Fpf4EkySy&1$E`Uvr^Bw>Bo%I187~sO9$+f>M!i-FR(M;iTs759 zp5>EggjfFUkv`$;$l@>e0{|#;`DLNw@`DB>-8 z*|VAA@-XBMzYpY5bV7Py-CX6(+@{I}>}>iK zc$V`{9E2AxvdpJBk|BfMT*uFjtZnrHk zyJlaYscArO61v`XT7_|dUPBlT0t_Yz0R}uSa^TK=BYTGi2exm!wXeHtQ)l~zqF|sX z9rague6+g=8^E?E;d|rh<}`>fyt-sNk0(22a>#X3fI%7xbBNr%IP)M?0i}U=3Wi11 zEbCw#R=`dkYKE#@=(2rZ`}X<_@0Du1Dq_{5aB{Fa7w#G0lEY)h+AEZ*hOGlziq?6w z%C?y4aq-JvA%7-}YmdA)`=Ic^3-|Nx&W7z9_SK8k)fGK8Qg2_OeNya6B))7Eb7#=A zGq=Bc=g#i3wyw5h%m|kj3x=my7mQf4t*cZxoA;6C{$b?3!u>BES5AGiu7UT6n|FGG z&TyC)nsFvcF8?&*5?(=6)poWi({XDln879-taSjp*a!WKZ)xU24+)B(ks@d$DYE3~ zBw0rk5Tw!B5v`0$L@HonL1+Oq4T5YdAlAA`NU7;g0U-&1Dp_Hms>6s1GeNm%(Naji zaf(L(7*hx~h$rI_=zK?Bm}zR>a$B$jtPM;?f+7tstxM|N$&b8n@r5H72YR48mO$Nx zo&wFdG_ZF|bJK4xn%;fSb@ldh=hh+q@g1l7ZR??H=_)aA5y~Nt$YGzSX1ROkss8>` z-|N07?lSZWy9hNNS_^a|IkeukO>AyVKD4c_Hh#Qdza$wo0xq(V-J01_V?sSAhZGM( zizG&(F_^pLQP5f_p?nljfjA+6G(mH;tgY%W15ND@8nIZ+8;eG5z`neK0B_H#mavfr zVfb0~D~Z?W59Ak;0b0v?1rU;+kkU1Hf_1I6)nbXN-luCbl*NTlULymKjG!VyEy!H3 zt~!4k`F!^K*Gk3~K46nags-zO%dmmW4${SWUj=r53xj=76%`ng$!tPVDKd2a83@!c zJwrBz)lE>9QP|rgOBN=zNS68&)wOZI5e;Z^DG=nUi+fFtAQv~etpJD^j6|ED3t1Wy zdBUQVutvcSRH!tB|45GRNT3j@6^M|h`(=2=L19T^dKa1g9gx--SZ-4cvm}Ap>SQu|4ELDyDO|IM6!spHwl&uaxqCEuBwd?9(H(19mC`hm9QT)LK_BO zc0iQeo;AQGn!!J8qHF{1r~>5Bx&MPFGi^6Kq%l#}#L*icRuo|fehy`r-cLNhH8LCu zmDYq1F&M~)9|D;wRj2^vAmu9L&_)FGfEtlOl*8_8S!At>G#O6e1hGP0%F${$>d+&Z zj<1Ga<{frw$hwR5o@Gyi#}GlWOhW^;GW?#S?t0IlCwH&=D0G@Zk7wE4;0?i^6A9U1 zB9!1n=Ra>6Z1|0aqYdlVH~mKAa%1CQ<3o*WrSl>8vd3qL9>tAG!y;pN8{Ero_ihjW zu;DrCaSyr^7!+f=TsCOhh^i57c5m)XSL5!+rlXC&(X@U&27Rbuu%U6e;o*D<=N!8C z-QrJR6N$3{md&`T3|L4(%#&nIEXW8k&@)I3;vDo>7=WZ1fR+s_z(DUsh$w~Pp zGjd}aJ^emS16=S!acu|1A7ih|*=BGcGE72$ThDn<9`b&iH$admGM@)|fQ=21b|be+ zs7S9F$v`ryFav&8&da4$Ag%`lD26L!08GFzuwcN6{0sn|1!VGa&@Ujh9(~A>K|wbZ zXv2Sc`|hEhy|YIS9of}YQK3}3iajk}Q5T}TI`-IsJ92W^4b_8J301MJcf9A``%a8e z=NWW1CWhY& zeh#!NL>f>WW(wgUu%xZoNgg3fVD8>E3kfs_O}~iPu7kNJWRH}A9ennn-EbiuBEa`p zv0?mGm`1FAYjzP568Lv1SVC~%K}E?xcA*DL4T?)8`7iIE4I^g0In(Ha(H_XPhEdQF zA>@og)w(VwvNatjYO$CexO5x~M66|=j;0ZqMF$HjRLHow3JFARyK_Ge`+Wnsi+1}4 ziZiI)t-BR1c=kZ|<=4rwBZR=H_izW+Q}3Z}5q$$@Uprt&)KBZ>6)bLavk;~m?K?IN zmwk{`^6^ILOtOaPAI)7rj3f-4vP64JehjPtoRqA!6rYEvG79O5wOFQF>>16}5=dwd zh=~`<2*I(+mRdmEfXX8Q&)fe%(I+m^YsI3xYiZ`1@D}b_i(=sc?xMgJ#LYmXpk>e* ze@T2Da(EGIWA&L@inAB753s-FWsP^vA7rbly+xw<&H|*;kH-AU@|61bY>gztV5UdP;=SuA1_@K5d3m>;631>Zpu31xLgiaaJn7 zHR_9Y@P;}uh3&@fjXG@Gn(&6G#UR)aLdBFH$Vxa8tXx!$5%BuUcQgO1&6&kFn zYsa?^kPQjXNY9|}2}u8Mh23=kw)nAn2+b*Io@y2G0kIGM15DfUNW*6#&e))gAnKdo$LKO`g^->>DbVgY-wtQ^d9p=AaXz+0;nqC{Y?3- zKv;ZyfWTGAMpjHFyst#d@L2+4WRcGY%Tk}!8j6I*_ESJervR<+Vr_dusOgN&AxRCX zrk`vOJ;kMBTSZE2N0Jyw%nlyD%F#n$vH)W~1RD57q%UvjL#PH>`mQ#UnGdI>V1OUV zcsbkHUR7CEf)JVz4=EM{fmx4uF!%(FV07*~g$Bzk4~C0PBrP!B3a2fED@gFdCUW9H z4K!h||M}8amifS~O>SrLZM|VLR*AB3{Ezs95B=!jcR-#VApmA1AtRCNSJdFQF8PVLP7VC=b3X)LBm4!Cw;9CphtLn|%y z*ET;sgr?EwR$=tAxDPxs$)3*Gi{W7-y$uHce2{n?SO))}I7eO)!aF>qFad!P3Zx!P z2wKfGhL5Uu>ki>rfcvPxQmXST1==*CmSF9IDsAy*c|-+#*$Y;e3sxi}M;F6&A;34ilYxLC5KY22PIcrDBl|EBT+1qqxH2FGEFM4%>=m1e zhWxjLh~be17-}x|02`2kk|kSA--?5#2tEpzGDC*A(#Li9mf>#aVxY3EbMM~tiGXR# z{T%}O%Iu|K;RHXkFS2syhb5m!(jAa$#aMaUzD!fZr<`>eb{?S+zX-y!&;IRpCa?L* z{Ls>>@!eQALu5K4iY+c-1E$(6t0>Y=uF_)3)qh}{TPiK~ zkE%rVVE8X^+_fM%#MKluePT7C zps)k*ygpJc;D*tktbF|AkZX!m3;Yy|5tHz*`Qtz9qiU9Rdv8 z`y|33Fd0$FR`ec;EEcf^QoS(l0T(R5a@}6r z^Co!$|J4{jeA^VuMAsA#ZV@+%H553)_>01-f;d2jrF_7SwTetUm5f)%l%O{dGT;Wg zE{xk(w!n~$r3`8z$`&IusdgsG6;`lfqenb zGZv+K#%%~sl-oEwL^eYe-rHQ;>qldtq`fre(_IL`P&`3*QEfN?f1Th!uo5`j z2kSEQ4VyI{PvkymjRsp6q)K;Fw8&RmSspD9cE;Vas>1#4}53UtdVViO(@i|PEa*yQ$ktL>40i4_DNhO4>^5W zRj)V@#VNhnO%pkw1sy3{{GUwO|84k{?Rf|F5-5;Wkh&)_-QiWR9{7bsy z73e=iZ<-SxwyrhH858A!oX^d3}9dO}whIJW^8R4R|3LVs-Ac({gY@PF_3Fe&}JA z$E%XRwVlSB`5#z87r8c0@LyLznoI8^UJ#SEbOoM z=I_GuxgoUVzL?*qGQQ%-9p?|{9Qj~&7vGE>`ncm0C-S}?x?(>p+?I}ue#p)Vwu{}H zSx!{L=53a{V1#e>3kZkmgFy}43h_;F0W#gGGv^$$I|Zj*n1ejdoOazgibx;`ADSS- zStd!^5KME@Fd~FB35RpX_HA2xdp2)MwXAPkS5sA4S`tFEw2t67#DZ#WOWXsah`{&_ z6vpQU5JzwU%ICjWS~KUub_fjY(yC4r5sDc!zWk${3f%$hV;n+9fZ_t8-XE z-RrCE`RB!zLYc-ZjJf)}H8!nb?fv=pSS#Gd{*3$hEdQzS9Q-O@m9|L_N3qQXlIxT1Cim}qe4b@*jjz-9XZ|hzR|B3v25xeX@l2>Q^t)jp zyi`B~O=XrK6=EDcc(HL_TXlH_iWr{$B!q1e}2mb`-haw=Y^X@M5#S zUfTnFU0=vk$aiZYk1vd&6VZ-iL8vEx7X1LZS$`of;|)-Gta=6YcNOwFc z@vn6+EZ(;?edzGAS<}7FY;J09G7sKoE}&|9er(npJGOjyVdlWrrG+DtU4T2{KDNZB0jk4nnVB#rb>mZY6E5f`E1B#d zdYI^$?=_8oj53CQkYeI`3{M=kT8^TeL7GBo9<`I!KT%nrz!lWY-B3S>9*6M!EJj(n zq4k}k>_zV-AkVZlx`_`C8!)?f_Uc2gd8_A`HG>JvCqMV22rfT_)hy$8%9`bpH7k>C zdB=QBz=PV3V4QLEZm^)TjM{cE)W#d$xw<}J)heAK+JCd3G>Q0#)Is1Gh`z>cT;~)G z>$F0oVL!#m^uxpy#FwKXI4O&GF)!hz^syh*Hj`KIN*?7^yqd=lQdxr!muh((Pw;xn zLe#|9BLt&`CwVKZA!**ml<~3o@yS``*y8NM*o1U+d2C6iOa0{B;_`j!(&X~JlatHp zS&3kN6VgG$ERn-#p!wF-X-J@+r|%%EiKm{99vTFUs#x{ zpPrYG9mQFYP`~V$o}XH%AD>^e2cwug`zS%Lhw6t(<{rIt^dnPBO+3EQi z`6vc$v93vtD(WYXFFRH<^<%Tk(%j_yF>P*adX`G^p|N9!CY?Abs9w&)O|w>pMh8v2 z{^;Gu#+LA6{DY?1`{bi@)3cLKTC4>H8bbphrWcP+A4UJM`&K9FTt0kk?%>gSfD3)} zgVXa1<8>ll^&+5pXjXnj^nL@_UO;+%Z2%cPe4%jt^t-tnwhTY>s+ z^R#&yW1nl1tFf%z!=nQwV}m2Z(Gj#}_6(z`gcenJbA47$WYzAv^ElELXcQEqT~UBI z+BKFH4o+qHIL6P)we?vwVbUb+-QzDw>>#>enwilN>N476O;SsoSM993x2v{d4cNBC z^}yHjqwqRRp&Kh6HG5A-$7mxgNU;)vX4WjhBv)sd6|19TJ^5GI-{o=go@DXx+S0Cl z$U!(0?K*GQ#opnHl4!+9ZAE?7nK&m1z1fMep8BjSfd!am*3rF<)`d*8Yb5KW(jZDs zl5XY#$mvCr$K>RArr$(c|@5Z({rI;q80! zl_eFZ_gnS8#5v~fzHRuN+l~Dj>&m+82uXpuUFRHhapIEY26jTM9vD7HmWBw>W+?{2e=V7q6u)&|e2TMZl z&~Vlr?J|3_b|9sW7ms$Cqj>$NJRbb}3f9$idi0!6smm_al~e*u0j$kmSDy_g&T+aM zfHU1giE|>|!-;be-HQ_EWV#n8&M9;+Nt{#ZUYaqlHUWJL!y&4mtdkhnydmIy?dkrQ+_jL)g!@~301lI2vHMW(*QJdw#CJV|9 z*Fxp`rpAQXYR$6=eR%JU#}!oIrqiN&X1rk0;GWKC+qp&_#7fp<-I(Z29~lMKjOuSq2_gYN-lJdPDHa}_t*qzjLlG;LOOR>SEv%`MSBdKvB31`A}gfC5C>&~Ss<0mer&E>vQ$s~}gZQMwgP zYpgZDQ8yyjXtc01m}7mmy)c9B)vXyN-uuoau5RVVMAU2`sBHn&?HFk|2ZsU(iOYw$`n-TsP>ZL^f4-8aPDAavI0+h8JU78nShGf5rkAA>b-> z3Av&;6%9Bf`8jR|u>gTy!_?LF{&H08yBT8qD%eMGBf8QNZ7Zp`X1^;&3UlltV5|bQ zo7P`Jkf$jY*0Hwa9xOSSKb&CYIEVg*?0THV-gl|r0$R%h{%kY)^d+)M+_nO+|U>O+~`)Q2*I z)Ta}fJ=BLXL)3>dw^1L;?4>>#WNxQElo_Tzlo_Eul-Wmpx{N;!XsOy}SqptIbZ2MZ*1u9rw7p)w1z1zxB*QLY-{I8c) z$*8L?t4(Ibs)6IgYU&w;?5_?&0O4mql=EWs;yEUFVfCz*G8f=K((*YMvvNw;XM``I z*@jxR>oY8q&x@?*9KsiOLu!0@_?$S=b1p`u&u9n9HJAtKsX+`;1IZ@_9cGh N*R#?Gz$khc``?oySyBK1 diff --git a/priv/static/static/font/fontello.1588196596336.woff b/priv/static/static/font/fontello.1588196596336.woff deleted file mode 100644 index 67852eb4857cb65142cdd1b034dc4d8bd68a6b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13656 zcmY*=V{|6L7VQ_?HYc`iJNaVU_QdwY*2K2$Ol;eBCYtc&-gn=RS8MIn=j=YaPOq-j ztGcRBdnigs06+lWja?If^q->!`2Y3)WB>n65~wBu0Dx$Iv%KF>C64~#r3hqX`R0

J|D~-E$qIzZ!JVT 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 De)AnP diff --git a/priv/static/static/font/fontello.1588196596336.woff2 b/priv/static/static/font/fontello.1588196596336.woff2 deleted file mode 100644 index c8d9ee6c85f28e20e1657a6b99debc94cf6d1519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11540 zcmV+vE$h;EPew8T0RR9104)>%4*&oF09OP604%xy0RR9100000000000000000000 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 G0vdE$4k9Q3 diff --git a/priv/static/static/font/fontello.1588419330867.woff b/priv/static/static/font/fontello.1588419330867.woff deleted file mode 100644 index 2bf4cbc16bfaf89c8e663c3ecdfdea1728fe781d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13836 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 adN{Y<|J>^Vp>Qot4UGdp^rZL;0Q?_|L~vFB diff --git a/priv/static/static/font/fontello.1588419330867.woff2 b/priv/static/static/font/fontello.1588419330867.woff2 deleted file mode 100644 index a31bf3f29df33e61b0472ae87e44d05efe32d05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11712 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 + + diff --git a/priv/static/static/font/fontello.1588419330867.ttf b/priv/static/static/font/fontello.1588943731405.ttf similarity index 90% rename from priv/static/static/font/fontello.1588419330867.ttf rename to priv/static/static/font/fontello.1588943731405.ttf index 7dc4f108b7be4e5c132da254f00e70a6463d8102..37133cfd7503542d2da2d71f9798bd86b181d02f 100644 GIT binary patch delta 720 zcmZuuPe_wt82`QRx9^*|X+upX$XxT!OgqS2o6|5Aoout{Ad-2g;r@J$t$l1mv<}iS zJ2+cK1VK<#hYr$5V9>$qAfszav_q@WX`dB%ay`?!^*%iO{=E-8FYo3Cd-$4VJ64tf zb`ikrLL#WVw_F=0{SpvO3yT@6R5|zsoTnJph!Rb#u4m^+TLFU-4WLI{gNg9=;}$dNEr4$;$#mw`Rfh`rv!o+RDy$U8`rZMT zvg`Zv>``upMSU}1Gz@kD!XZ0NSWDMupkp=)dSHbPHKopyz2qo4%WLI)xlk^af0hrl z2Ft&Ug}xMHnn?t>y+(ok7&0i*@P6ratCqZjx->Zl~KWb=bO{ zt^r4jyZelDgjtwmx7qd0P5KrWf8m$qdoeb|@&n$0EC;*;c_u%I@R)Ck7`e<6yBmx7 z^u|y>k^YcT@0WQz8)ro8$%NWFzQ^0%xK?jnIezvx3__{;{GDCH#y`vrPP*ApPMQ47 t=5l`T%{rUqNBezBs~bu>Jq{g@M6G0VuDK zR*;_CHE}{Dknh02z+I4@SX=-U7Xb1lfHX&XPGy?Ok43Hw3~Wmn80_*gQWH}ojUs_^ zt|CBrvkagB`$-lc+tmliSINjNsW{sg_WveO0A$dUoc!d(JyTB^GcdS?0Qn`ki4_Hm zeZ0$n{1ZUFLSABS>e;#CKm*-gFfcHkEyyn}S$Y1K76XIl4j@0SpeVKAsiXED28Qqr z6MsZA&Ym2?nC|YyzzEdL!05uj3})#7X)d60F9sGykh|3w6c|_-*j}i-P=8_c!sJ8$ zhm#*3e0cid^M`*Qg+5ArwEO7z(dA>xWELjP$@)xMs*FG#c~Dru0D?uBaB>qLF^Yeh*z_bBG0)fS59+qw<@uv(7AAy*`oPpt!2?R4(FfeT1!PaTL`LEM^ zCK)#e`Qmtfo39Mq%s?+QFxxcR=1B@Y0vQ;sA6 diff --git a/priv/static/static/font/fontello.1588943731405.woff b/priv/static/static/font/fontello.1588943731405.woff new file mode 100644 index 0000000000000000000000000000000000000000..bb278fce9d9899b2dad72cf6f8647a631bce7ca7 GIT binary patch literal 13988 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 aU~aAdrPl>i`dW+v0uu<%mGl7!=zjpdHM=qZ literal 0 HcmV?d00001 diff --git a/priv/static/static/font/fontello.1588943731405.woff2 b/priv/static/static/font/fontello.1588943731405.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1ebd2c9537e2117beefa15c4184c599ab73a8cf4 GIT binary patch literal 11816 zcmV+@F4xg_Pew8T0RR9104^v14*&oF09hCS04>b`0RR9100000000000000000000 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 WfjBU5@;T7=$3xI2FAjJBGH`kZRH>E# literal 0 HcmV?d00001 diff --git a/priv/static/static/fontello.1588196596336.css b/priv/static/static/fontello.1588196596336.css deleted file mode 100644 index c5881bc93..000000000 --- a/priv/static/static/fontello.1588196596336.css +++ /dev/null @@ -1,138 +0,0 @@ -@font-face { - font-family: "Icons"; - src: url("./font/fontello.1588196596336.eot"); - src: url("./font/fontello.1588196596336.eot") format("embedded-opentype"), - url("./font/fontello.1588196596336.woff2") format("woff2"), - url("./font/fontello.1588196596336.woff") format("woff"), - url("./font/fontello.1588196596336.ttf") format("truetype"), - url("./font/fontello.1588196596336.svg") format("svg"); - font-weight: normal; - font-style: normal; -} - -[class^="icon-"]::before, -[class*=" icon-"]::before { - font-family: "Icons"; - font-style: normal; - font-weight: normal; - speak: none; - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - font-variant: normal; - text-transform: none; - line-height: 1em; - margin-left: .2em; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-spin4::before { content: "\e834"; } - -.icon-cancel::before { content: "\e800"; } - -.icon-upload::before { content: "\e801"; } - -.icon-spin3::before { content: "\e832"; } - -.icon-reply::before { content: "\f112"; } - -.icon-star::before { content: "\e802"; } - -.icon-star-empty::before { content: "\e803"; } - -.icon-retweet::before { content: "\e804"; } - -.icon-eye-off::before { content: "\e805"; } - -.icon-binoculars::before { content: "\f1e5"; } - -.icon-cog::before { content: "\e807"; } - -.icon-user-plus::before { content: "\f234"; } - -.icon-menu::before { content: "\f0c9"; } - -.icon-logout::before { content: "\e808"; } - -.icon-down-open::before { content: "\e809"; } - -.icon-attach::before { content: "\e80a"; } - -.icon-link-ext::before { content: "\f08e"; } - -.icon-link-ext-alt::before { content: "\f08f"; } - -.icon-picture::before { content: "\e80b"; } - -.icon-video::before { content: "\e80c"; } - -.icon-right-open::before { content: "\e80d"; } - -.icon-left-open::before { content: "\e80e"; } - -.icon-up-open::before { content: "\e80f"; } - -.icon-comment-empty::before { content: "\f0e5"; } - -.icon-mail-alt::before { content: "\f0e0"; } - -.icon-lock::before { content: "\e811"; } - -.icon-lock-open-alt::before { content: "\f13e"; } - -.icon-globe::before { content: "\e812"; } - -.icon-brush::before { content: "\e813"; } - -.icon-search::before { content: "\e806"; } - -.icon-adjust::before { content: "\e816"; } - -.icon-thumbs-up-alt::before { content: "\f164"; } - -.icon-attention::before { content: "\e814"; } - -.icon-plus-squared::before { content: "\f0fe"; } - -.icon-plus::before { content: "\e815"; } - -.icon-edit::before { content: "\e817"; } - -.icon-play-circled::before { content: "\f144"; } - -.icon-pencil::before { content: "\e818"; } - -.icon-chart-bar::before { content: "\e81b"; } - -.icon-smile::before { content: "\f118"; } - -.icon-bell-alt::before { content: "\f0f3"; } - -.icon-wrench::before { content: "\e81a"; } - -.icon-pin::before { content: "\e819"; } - -.icon-ellipsis::before { content: "\f141"; } - -.icon-bell-ringing-o::before { content: "\e810"; } - -.icon-zoom-in::before { content: "\e81c"; } - -.icon-gauge::before { content: "\f0e4"; } - -.icon-users::before { content: "\e81d"; } - -.icon-info-circled::before { content: "\e81f"; } - -.icon-home-2::before { content: "\e821"; } - -.icon-chat::before { content: "\e81e"; } - -.icon-login::before { content: "\e820"; } - -.icon-arrow-curved::before { content: "\e822"; } - -.icon-link::before { content: "\e823"; } diff --git a/priv/static/static/fontello.1588419330867.css b/priv/static/static/fontello.1588943731405.css similarity index 88% rename from priv/static/static/fontello.1588419330867.css rename to priv/static/static/fontello.1588943731405.css index 198eff184..3e700a27c 100644 --- a/priv/static/static/fontello.1588419330867.css +++ b/priv/static/static/fontello.1588943731405.css @@ -1,11 +1,11 @@ @font-face { font-family: "Icons"; - src: url("./font/fontello.1588419330867.eot"); - src: url("./font/fontello.1588419330867.eot") format("embedded-opentype"), - url("./font/fontello.1588419330867.woff2") format("woff2"), - url("./font/fontello.1588419330867.woff") format("woff"), - url("./font/fontello.1588419330867.ttf") format("truetype"), - url("./font/fontello.1588419330867.svg") format("svg"); + src: url("./font/fontello.1588943731405.eot"); + src: url("./font/fontello.1588943731405.eot") format("embedded-opentype"), + url("./font/fontello.1588943731405.woff2") format("woff2"), + url("./font/fontello.1588943731405.woff") format("woff"), + url("./font/fontello.1588943731405.ttf") format("truetype"), + url("./font/fontello.1588943731405.svg") format("svg"); font-weight: normal; font-style: normal; } @@ -137,6 +137,8 @@ .icon-link::before { content: "\e823"; } +.icon-share::before { content: "\f1e0"; } + .icon-user::before { content: "\e824"; } .icon-ok::before { content: "\e827"; } diff --git a/priv/static/static/fontello.json b/priv/static/static/fontello.json index 5963b68b4..7f0e7cdd5 100755 --- a/priv/static/static/fontello.json +++ b/priv/static/static/fontello.json @@ -346,6 +346,12 @@ "code": 59427, "src": "fontawesome" }, + { + "uid": "4aad6bb50b02c18508aae9cbe14e784e", + "css": "share", + "code": 61920, + "src": "fontawesome" + }, { "uid": "8b80d36d4ef43889db10bc1f0dc9a862", "css": "user", diff --git a/priv/static/static/js/2.1c407059cd79fca99e19.js b/priv/static/static/js/2.1c407059cd79fca99e19.js deleted file mode 100644 index 14018d92a..000000000 --- a/priv/static/static/js/2.1c407059cd79fca99e19.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{585:function(t,e,i){var c=i(586);"string"==typeof c&&(c=[[t.i,c,""]]),c.locals&&(t.exports=c.locals);(0,i(4).default)("2eec4758",c,!0,{})},586:function(t,e,i){(t.exports=i(3)(!1)).push([t.i,".sticker-picker{width:100%}.sticker-picker .contents{min-height:250px}.sticker-picker .contents .sticker-picker-content{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 4px}.sticker-picker .contents .sticker-picker-content .sticker{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;margin:4px;width:56px;height:56px}.sticker-picker .contents .sticker-picker-content .sticker img{height:100%}.sticker-picker .contents .sticker-picker-content .sticker img:hover{filter:drop-shadow(0 0 5px var(--accent,#d8a070))}",""])},587:function(t,e,i){"use strict";i.r(e);var c=i(91),n={components:{TabSwitcher:i(53).a},data:function(){return{meta:{stickers:[]},path:""}},computed:{pack:function(){return this.$store.state.instance.stickers||[]}},methods:{clear:function(){this.meta={stickers:[]}},pick:function(t,e){var i=this,n=this.$store;fetch(t).then((function(t){t.blob().then((function(t){var a=new File([t],e,{mimetype:"image/png"}),r=new FormData;r.append("file",a),c.a.uploadMedia({store:n,formData:r}).then((function(t){i.$emit("uploaded",t),i.clear()}),(function(t){console.warn("Can't attach sticker"),console.warn(t),i.$emit("upload-failed","default")}))}))}))}}},a=i(0);var r=function(t){i(585)},s=Object(a.a)(n,(function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"sticker-picker"},[i("tab-switcher",{staticClass:"tab-switcher",attrs:{"render-only-focused":!0,"scrollable-tabs":""}},t._l(t.pack,(function(e){return i("div",{key:e.path,staticClass:"sticker-picker-content",attrs:{"image-tooltip":e.meta.title,image:e.path+e.meta.tabIcon}},t._l(e.meta.stickers,(function(c){return i("div",{key:c,staticClass:"sticker",on:{click:function(i){return i.stopPropagation(),i.preventDefault(),t.pick(e.path+c,e.meta.title)}}},[i("img",{attrs:{src:e.path+c}})])})),0)})),0)],1)}),[],!1,r,null,null);e.default=s.exports}}]); -//# sourceMappingURL=2.1c407059cd79fca99e19.js.map \ No newline at end of file diff --git a/priv/static/static/js/2.1c407059cd79fca99e19.js.map b/priv/static/static/js/2.1c407059cd79fca99e19.js.map deleted file mode 100644 index cfee79ea8..000000000 --- a/priv/static/static/js/2.1c407059cd79fca99e19.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/components/sticker_picker/sticker_picker.vue?e513","webpack:///./src/components/sticker_picker/sticker_picker.vue?1909","webpack:///./src/components/sticker_picker/sticker_picker.js","webpack:///./src/components/sticker_picker/sticker_picker.vue","webpack:///./src/components/sticker_picker/sticker_picker.vue?7504"],"names":["content","module","i","locals","exports","add","default","push","StickerPicker","components","TabSwitcher","data","meta","stickers","path","computed","pack","this","$store","state","instance","methods","clear","pick","sticker","name","store","fetch","then","res","blob","file","File","mimetype","formData","FormData","append","statusPosterService","uploadMedia","fileData","$emit","error","console","warn","__vue_styles__","context","Component","_vm","_h","$createElement","_c","_self","staticClass","attrs","_l","stickerpack","key","title","tabIcon","on","$event","stopPropagation","preventDefault"],"mappings":"6EAGA,IAAIA,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACC,EAAOC,EAAIF,EAAS,MAC7DA,EAAQG,SAAQF,EAAOG,QAAUJ,EAAQG,SAG/BE,EADH,EAAQ,GAAkEC,SACnE,WAAYN,GAAS,EAAM,K,qBCRlCC,EAAOG,QAAU,EAAQ,EAAR,EAA4D,IAK/EG,KAAK,CAACN,EAAOC,EAAI,4iBAA6iB,M,oDC8CvjBM,EA/CO,CACpBC,WAAY,CACVC,Y,MAAAA,GAEFC,KAJoB,WAKlB,MAAO,CACLC,KAAM,CACJC,SAAU,IAEZC,KAAM,KAGVC,SAAU,CACRC,KADQ,WAEN,OAAOC,KAAKC,OAAOC,MAAMC,SAASP,UAAY,KAGlDQ,QAAS,CACPC,MADO,WAELL,KAAKL,KAAO,CACVC,SAAU,KAGdU,KANO,SAMDC,EAASC,GAAM,WACbC,EAAQT,KAAKC,OAEnBS,MAAMH,GACHI,MAAK,SAACC,GACLA,EAAIC,OAAOF,MAAK,SAACE,GACf,IAAIC,EAAO,IAAIC,KAAK,CAACF,GAAOL,EAAM,CAAEQ,SAAU,cAC1CC,EAAW,IAAIC,SACnBD,EAASE,OAAO,OAAQL,GACxBM,IAAoBC,YAAY,CAAEZ,QAAOQ,aACtCN,MAAK,SAACW,GACL,EAAKC,MAAM,WAAYD,GACvB,EAAKjB,WACJ,SAACmB,GACFC,QAAQC,KAAK,wBACbD,QAAQC,KAAKF,GACb,EAAKD,MAAM,gBAAiB,uB,OCnC5C,IAEII,EAVJ,SAAsBC,GACpB,EAAQ,MAeNC,EAAY,YACd,GCjBW,WAAa,IAAIC,EAAI9B,KAAS+B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,eAAe,CAACE,YAAY,eAAeC,MAAM,CAAC,uBAAsB,EAAK,kBAAkB,KAAKN,EAAIO,GAAIP,EAAQ,MAAE,SAASQ,GAAa,OAAOL,EAAG,MAAM,CAACM,IAAID,EAAYzC,KAAKsC,YAAY,yBAAyBC,MAAM,CAAC,gBAAgBE,EAAY3C,KAAK6C,MAAM,MAAQF,EAAYzC,KAAOyC,EAAY3C,KAAK8C,UAAUX,EAAIO,GAAIC,EAAY3C,KAAa,UAAE,SAASY,GAAS,OAAO0B,EAAG,MAAM,CAACM,IAAIhC,EAAQ4B,YAAY,UAAUO,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOC,kBAAkBD,EAAOE,iBAAwBf,EAAIxB,KAAKgC,EAAYzC,KAAOU,EAAS+B,EAAY3C,KAAK6C,UAAU,CAACP,EAAG,MAAM,CAACG,MAAM,CAAC,IAAME,EAAYzC,KAAOU,UAAe,MAAK,IAAI,KACjvB,IDOY,EAahCoB,EAToB,KAEU,MAYjB,UAAAE,EAAiB","file":"static/js/2.1c407059cd79fca99e19.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./checkbox.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./checkbox.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./checkbox.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-01a5cae8\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./checkbox.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"checkbox\",class:{ disabled: _vm.disabled, indeterminate: _vm.indeterminate }},[_c('input',{attrs:{\"type\":\"checkbox\",\"disabled\":_vm.disabled},domProps:{\"checked\":_vm.checked,\"indeterminate\":_vm.indeterminate},on:{\"change\":function($event){_vm.$emit('change', $event.target.checked)}}}),_vm._v(\" \"),_c('i',{staticClass:\"checkbox-indicator\"}),_vm._v(\" \"),(!!_vm.$slots.default)?_c('span',{staticClass:\"label\"},[_vm._t(\"default\")],2):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { filter, sortBy, includes } from 'lodash'\n\nexport const notificationsFromStore = store => store.state.statuses.notifications.data\n\nexport const visibleTypes = store => ([\n store.state.config.notificationVisibility.likes && 'like',\n store.state.config.notificationVisibility.mentions && 'mention',\n store.state.config.notificationVisibility.repeats && 'repeat',\n store.state.config.notificationVisibility.follows && 'follow',\n store.state.config.notificationVisibility.followRequest && 'follow_request',\n store.state.config.notificationVisibility.moves && 'move',\n store.state.config.notificationVisibility.emojiReactions && 'pleroma:emoji_reaction'\n].filter(_ => _))\n\nconst statusNotifications = ['like', 'mention', 'repeat', 'pleroma:emoji_reaction']\n\nexport const isStatusNotification = (type) => includes(statusNotifications, type)\n\nconst sortById = (a, b) => {\n const seqA = Number(a.id)\n const seqB = Number(b.id)\n const isSeqA = !Number.isNaN(seqA)\n const isSeqB = !Number.isNaN(seqB)\n if (isSeqA && isSeqB) {\n return seqA > seqB ? -1 : 1\n } else if (isSeqA && !isSeqB) {\n return 1\n } else if (!isSeqA && isSeqB) {\n return -1\n } else {\n return a.id > b.id ? -1 : 1\n }\n}\n\nexport const filteredNotificationsFromStore = (store, types) => {\n // map is just to clone the array since sort mutates it and it causes some issues\n let sortedNotifications = notificationsFromStore(store).map(_ => _).sort(sortById)\n sortedNotifications = sortBy(sortedNotifications, 'seen')\n return sortedNotifications.filter(\n (notification) => (types || visibleTypes(store)).includes(notification.type)\n )\n}\n\nexport const unseenNotificationsFromStore = store =>\n filter(filteredNotificationsFromStore(store), ({ seen }) => !seen)\n","import { includes } from 'lodash'\n\nconst generateProfileLink = (id, screenName, restrictedNicknames) => {\n const complicated = !screenName || (isExternal(screenName) || includes(restrictedNicknames, screenName))\n return {\n name: (complicated ? 'external-user-profile' : 'user-profile'),\n params: (complicated ? { id } : { name: screenName })\n }\n}\n\nconst isExternal = screenName => screenName && screenName.includes('@')\n\nexport default generateProfileLink\n","// TODO this func might as well take the entire file and use its mimetype\n// or the entire service could be just mimetype service that only operates\n// on mimetypes and not files. Currently the naming is confusing.\nconst fileType = mimetype => {\n if (mimetype.match(/text\\/html/)) {\n return 'html'\n }\n\n if (mimetype.match(/image/)) {\n return 'image'\n }\n\n if (mimetype.match(/video/)) {\n return 'video'\n }\n\n if (mimetype.match(/audio/)) {\n return 'audio'\n }\n\n return 'unknown'\n}\n\nconst fileMatchesSomeType = (types, file) =>\n types.some(type => fileType(file.mimetype) === type)\n\nconst fileTypeService = {\n fileType,\n fileMatchesSomeType\n}\n\nexport default fileTypeService\n","const DialogModal = {\n props: {\n darkOverlay: {\n default: true,\n type: Boolean\n },\n onCancel: {\n default: () => {},\n type: Function\n }\n }\n}\n\nexport default DialogModal\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./dialog_modal.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./dialog_modal.js\"\nimport __vue_script__ from \"!!babel-loader!./dialog_modal.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-70b9d662\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./dialog_modal.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{class:{ 'dark-overlay': _vm.darkOverlay },on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }$event.stopPropagation();_vm.onCancel()}}},[_c('div',{staticClass:\"dialog-modal panel panel-default\",on:{\"click\":function($event){$event.stopPropagation();}}},[_c('div',{staticClass:\"panel-heading dialog-modal-heading\"},[_c('div',{staticClass:\"title\"},[_vm._t(\"header\")],2)]),_vm._v(\" \"),_c('div',{staticClass:\"dialog-modal-content\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"dialog-modal-footer user-interactions panel-footer\"},[_vm._t(\"footer\")],2)])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import DialogModal from '../dialog_modal/dialog_modal.vue'\nimport Popover from '../popover/popover.vue'\n\nconst FORCE_NSFW = 'mrf_tag:media-force-nsfw'\nconst STRIP_MEDIA = 'mrf_tag:media-strip'\nconst FORCE_UNLISTED = 'mrf_tag:force-unlisted'\nconst DISABLE_REMOTE_SUBSCRIPTION = 'mrf_tag:disable-remote-subscription'\nconst DISABLE_ANY_SUBSCRIPTION = 'mrf_tag:disable-any-subscription'\nconst SANDBOX = 'mrf_tag:sandbox'\nconst QUARANTINE = 'mrf_tag:quarantine'\n\nconst ModerationTools = {\n props: [\n 'user'\n ],\n data () {\n return {\n tags: {\n FORCE_NSFW,\n STRIP_MEDIA,\n FORCE_UNLISTED,\n DISABLE_REMOTE_SUBSCRIPTION,\n DISABLE_ANY_SUBSCRIPTION,\n SANDBOX,\n QUARANTINE\n },\n showDeleteUserDialog: false,\n toggled: false\n }\n },\n components: {\n DialogModal,\n Popover\n },\n computed: {\n tagsSet () {\n return new Set(this.user.tags)\n },\n hasTagPolicy () {\n return this.$store.state.instance.tagPolicyAvailable\n }\n },\n methods: {\n hasTag (tagName) {\n return this.tagsSet.has(tagName)\n },\n toggleTag (tag) {\n const store = this.$store\n if (this.tagsSet.has(tag)) {\n store.state.api.backendInteractor.untagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('untagUser', { user: this.user, tag })\n })\n } else {\n store.state.api.backendInteractor.tagUser({ user: this.user, tag }).then(response => {\n if (!response.ok) { return }\n store.commit('tagUser', { user: this.user, tag })\n })\n }\n },\n toggleRight (right) {\n const store = this.$store\n if (this.user.rights[right]) {\n store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: false })\n })\n } else {\n store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {\n if (!response.ok) { return }\n store.commit('updateRight', { user: this.user, right, value: true })\n })\n }\n },\n toggleActivationStatus () {\n this.$store.dispatch('toggleActivationStatus', { user: this.user })\n },\n deleteUserDialog (show) {\n this.showDeleteUserDialog = show\n },\n deleteUser () {\n const store = this.$store\n const user = this.user\n const { id, name } = user\n store.state.api.backendInteractor.deleteUser({ user })\n .then(e => {\n this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)\n const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'\n const isTargetUser = this.$route.params.name === name || this.$route.params.id === id\n if (isProfile && isTargetUser) {\n window.history.back()\n }\n })\n },\n setToggled (value) {\n this.toggled = value\n }\n }\n}\n\nexport default ModerationTools\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./moderation_tools.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./moderation_tools.js\"\nimport __vue_script__ from \"!!babel-loader!./moderation_tools.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-168f1ca6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./moderation_tools.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Popover',{staticClass:\"moderation-tools-popover\",attrs:{\"trigger\":\"click\",\"placement\":\"bottom\",\"offset\":{ y: 5 }},on:{\"show\":function($event){_vm.setToggled(true)},\"close\":function($event){_vm.setToggled(false)}}},[_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('div',{staticClass:\"dropdown-menu\"},[(_vm.user.is_local)?_c('span',[_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleRight(\"admin\")}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(!!_vm.user.rights.admin ? 'user_card.admin_menu.revoke_admin' : 'user_card.admin_menu.grant_admin'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleRight(\"moderator\")}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(!!_vm.user.rights.moderator ? 'user_card.admin_menu.revoke_moderator' : 'user_card.admin_menu.grant_moderator'))+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"dropdown-divider\",attrs:{\"role\":\"separator\"}})]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleActivationStatus()}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(!!_vm.user.deactivated ? 'user_card.admin_menu.activate_account' : 'user_card.admin_menu.deactivate_account'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.deleteUserDialog(true)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.delete_account'))+\"\\n \")]),_vm._v(\" \"),(_vm.hasTagPolicy)?_c('div',{staticClass:\"dropdown-divider\",attrs:{\"role\":\"separator\"}}):_vm._e(),_vm._v(\" \"),(_vm.hasTagPolicy)?_c('span',[_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.FORCE_NSFW)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.force_nsfw'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.FORCE_NSFW) }})]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.STRIP_MEDIA)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.strip_media'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.STRIP_MEDIA) }})]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.FORCE_UNLISTED)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.force_unlisted'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.FORCE_UNLISTED) }})]),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.SANDBOX)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.sandbox'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.SANDBOX) }})]),_vm._v(\" \"),(_vm.user.is_local)?_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.DISABLE_REMOTE_SUBSCRIPTION)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.disable_remote_subscription'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.DISABLE_REMOTE_SUBSCRIPTION) }})]):_vm._e(),_vm._v(\" \"),(_vm.user.is_local)?_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.DISABLE_ANY_SUBSCRIPTION)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.disable_any_subscription'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.DISABLE_ANY_SUBSCRIPTION) }})]):_vm._e(),_vm._v(\" \"),(_vm.user.is_local)?_c('button',{staticClass:\"dropdown-item\",on:{\"click\":function($event){_vm.toggleTag(_vm.tags.QUARANTINE)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.quarantine'))+\"\\n \"),_c('span',{staticClass:\"menu-checkbox\",class:{ 'menu-checkbox-checked': _vm.hasTag(_vm.tags.QUARANTINE) }})]):_vm._e()]):_vm._e()])]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default btn-block\",class:{ toggled: _vm.toggled },attrs:{\"slot\":\"trigger\"},slot:\"trigger\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.moderation'))+\"\\n \")])]),_vm._v(\" \"),_c('portal',{attrs:{\"to\":\"modal\"}},[(_vm.showDeleteUserDialog)?_c('DialogModal',{attrs:{\"on-cancel\":_vm.deleteUserDialog.bind(this, false)}},[_c('template',{slot:\"header\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.delete_user'))+\"\\n \")]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('user_card.admin_menu.delete_user_confirmation')))]),_vm._v(\" \"),_c('template',{slot:\"footer\"},[_c('button',{staticClass:\"btn btn-default\",on:{\"click\":function($event){_vm.deleteUserDialog(false)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default danger\",on:{\"click\":function($event){_vm.deleteUser()}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.admin_menu.delete_user'))+\"\\n \")])])],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ProgressButton from '../progress_button/progress_button.vue'\nimport Popover from '../popover/popover.vue'\n\nconst AccountActions = {\n props: [\n 'user', 'relationship'\n ],\n data () {\n return { }\n },\n components: {\n ProgressButton,\n Popover\n },\n methods: {\n showRepeats () {\n this.$store.dispatch('showReblogs', this.user.id)\n },\n hideRepeats () {\n this.$store.dispatch('hideReblogs', this.user.id)\n },\n blockUser () {\n this.$store.dispatch('blockUser', this.user.id)\n },\n unblockUser () {\n this.$store.dispatch('unblockUser', this.user.id)\n },\n reportUser () {\n this.$store.dispatch('openUserReportingModal', this.user.id)\n }\n }\n}\n\nexport default AccountActions\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./account_actions.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./account_actions.js\"\nimport __vue_script__ from \"!!babel-loader!./account_actions.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-bf5e6e30\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./account_actions.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"account-actions\"},[_c('Popover',{attrs:{\"trigger\":\"click\",\"placement\":\"bottom\"}},[_c('div',{staticClass:\"account-tools-popover\",attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('div',{staticClass:\"dropdown-menu\"},[(_vm.relationship.following)?[(_vm.relationship.showing_reblogs)?_c('button',{staticClass:\"btn btn-default dropdown-item\",on:{\"click\":_vm.hideRepeats}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.hide_repeats'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.relationship.showing_reblogs)?_c('button',{staticClass:\"btn btn-default dropdown-item\",on:{\"click\":_vm.showRepeats}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.show_repeats'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"dropdown-divider\",attrs:{\"role\":\"separator\"}})]:_vm._e(),_vm._v(\" \"),(_vm.relationship.blocking)?_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.unblockUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.unblock'))+\"\\n \")]):_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.blockUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.block'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default btn-block dropdown-item\",on:{\"click\":_vm.reportUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.report'))+\"\\n \")])],2)]),_vm._v(\" \"),_c('div',{staticClass:\"btn btn-default ellipsis-button\",attrs:{\"slot\":\"trigger\"},slot:\"trigger\"},[_c('i',{staticClass:\"icon-ellipsis trigger-button\"})])])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport RemoteFollow from '../remote_follow/remote_follow.vue'\nimport ProgressButton from '../progress_button/progress_button.vue'\nimport FollowButton from '../follow_button/follow_button.vue'\nimport ModerationTools from '../moderation_tools/moderation_tools.vue'\nimport AccountActions from '../account_actions/account_actions.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters } from 'vuex'\n\nexport default {\n props: [\n 'userId', 'switcher', 'selected', 'hideBio', 'rounded', 'bordered', 'allowZoomingAvatar'\n ],\n data () {\n return {\n followRequestInProgress: false,\n betterShadow: this.$store.state.interface.browserSupport.cssFilter\n }\n },\n created () {\n this.$store.dispatch('fetchUserRelationship', this.user.id)\n },\n computed: {\n user () {\n return this.$store.getters.findUser(this.userId)\n },\n relationship () {\n return this.$store.getters.relationship(this.userId)\n },\n classes () {\n return [{\n 'user-card-rounded-t': this.rounded === 'top', // set border-top-left-radius and border-top-right-radius\n 'user-card-rounded': this.rounded === true, // set border-radius for all sides\n 'user-card-bordered': this.bordered === true // set border for all sides\n }]\n },\n style () {\n return {\n backgroundImage: [\n `linear-gradient(to bottom, var(--profileTint), var(--profileTint))`,\n `url(${this.user.cover_photo})`\n ].join(', ')\n }\n },\n isOtherUser () {\n return this.user.id !== this.$store.state.users.currentUser.id\n },\n subscribeUrl () {\n // eslint-disable-next-line no-undef\n const serverUrl = new URL(this.user.statusnet_profile_url)\n return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n dailyAvg () {\n const days = Math.ceil((new Date() - new Date(this.user.created_at)) / (60 * 60 * 24 * 1000))\n return Math.round(this.user.statuses_count / days)\n },\n userHighlightType: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return (data && data.type) || 'disabled'\n },\n set (type) {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n if (type !== 'disabled') {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: (data && data.color) || '#FFFFFF', type })\n } else {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color: undefined })\n }\n },\n ...mapGetters(['mergedConfig'])\n },\n userHighlightColor: {\n get () {\n const data = this.$store.getters.mergedConfig.highlight[this.user.screen_name]\n return data && data.color\n },\n set (color) {\n this.$store.dispatch('setHighlight', { user: this.user.screen_name, color })\n }\n },\n visibleRole () {\n const rights = this.user.rights\n if (!rights) { return }\n const validRole = rights.admin || rights.moderator\n const roleTitle = rights.admin ? 'admin' : 'moderator'\n return validRole && roleTitle\n },\n hideFollowsCount () {\n return this.isOtherUser && this.user.hide_follows_count\n },\n hideFollowersCount () {\n return this.isOtherUser && this.user.hide_followers_count\n },\n ...mapGetters(['mergedConfig'])\n },\n components: {\n UserAvatar,\n RemoteFollow,\n ModerationTools,\n AccountActions,\n ProgressButton,\n FollowButton\n },\n methods: {\n muteUser () {\n this.$store.dispatch('muteUser', this.user.id)\n },\n unmuteUser () {\n this.$store.dispatch('unmuteUser', this.user.id)\n },\n subscribeUser () {\n return this.$store.dispatch('subscribeUser', this.user.id)\n },\n unsubscribeUser () {\n return this.$store.dispatch('unsubscribeUser', this.user.id)\n },\n setProfileView (v) {\n if (this.switcher) {\n const store = this.$store\n store.commit('setProfileView', { v })\n }\n },\n linkClicked ({ target }) {\n if (target.tagName === 'SPAN') {\n target = target.parentNode\n }\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n userProfileLink (user) {\n return generateProfileLink(\n user.id, user.screen_name,\n this.$store.state.instance.restrictedNicknames\n )\n },\n zoomAvatar () {\n const attachment = {\n url: this.user.profile_image_url_original,\n mimetype: 'image'\n }\n this.$store.dispatch('setMedia', [attachment])\n this.$store.dispatch('setCurrent', attachment)\n },\n mentionUser () {\n this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user })\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./user_card.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./user_card.js\"\nimport __vue_script__ from \"!!babel-loader!./user_card.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4d895630\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./user_card.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-card\",class:_vm.classes},[_c('div',{staticClass:\"background-image\",class:{ 'hide-bio': _vm.hideBio },style:(_vm.style)}),_vm._v(\" \"),_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"user-info\"},[_c('div',{staticClass:\"container\"},[(_vm.allowZoomingAvatar)?_c('a',{staticClass:\"user-info-avatar-link\",on:{\"click\":_vm.zoomAvatar}},[_c('UserAvatar',{attrs:{\"better-shadow\":_vm.betterShadow,\"user\":_vm.user}}),_vm._v(\" \"),_vm._m(0)],1):_c('router-link',{attrs:{\"to\":_vm.userProfileLink(_vm.user)}},[_c('UserAvatar',{attrs:{\"better-shadow\":_vm.betterShadow,\"user\":_vm.user}})],1),_vm._v(\" \"),_c('div',{staticClass:\"user-summary\"},[_c('div',{staticClass:\"top-line\"},[(_vm.user.name_html)?_c('div',{staticClass:\"user-name\",attrs:{\"title\":_vm.user.name},domProps:{\"innerHTML\":_vm._s(_vm.user.name_html)}}):_c('div',{staticClass:\"user-name\",attrs:{\"title\":_vm.user.name}},[_vm._v(\"\\n \"+_vm._s(_vm.user.name)+\"\\n \")]),_vm._v(\" \"),(!_vm.isOtherUser)?_c('router-link',{attrs:{\"to\":{ name: 'user-settings' }}},[_c('i',{staticClass:\"button-icon icon-wrench usersettings\",attrs:{\"title\":_vm.$t('tool_tip.user_settings')}})]):_vm._e(),_vm._v(\" \"),(_vm.isOtherUser && !_vm.user.is_local)?_c('a',{attrs:{\"href\":_vm.user.statusnet_profile_url,\"target\":\"_blank\"}},[_c('i',{staticClass:\"icon-link-ext usersettings\"})]):_vm._e(),_vm._v(\" \"),(_vm.isOtherUser && _vm.loggedIn)?_c('AccountActions',{attrs:{\"user\":_vm.user,\"relationship\":_vm.relationship}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"bottom-line\"},[_c('router-link',{staticClass:\"user-screen-name\",attrs:{\"to\":_vm.userProfileLink(_vm.user)}},[_vm._v(\"\\n @\"+_vm._s(_vm.user.screen_name)+\"\\n \")]),_vm._v(\" \"),(!_vm.hideBio && !!_vm.visibleRole)?_c('span',{staticClass:\"alert staff\"},[_vm._v(_vm._s(_vm.visibleRole))]):_vm._e(),_vm._v(\" \"),(_vm.user.locked)?_c('span',[_c('i',{staticClass:\"icon icon-lock\"})]):_vm._e(),_vm._v(\" \"),(!_vm.mergedConfig.hideUserStats && !_vm.hideBio)?_c('span',{staticClass:\"dailyAvg\"},[_vm._v(_vm._s(_vm.dailyAvg)+\" \"+_vm._s(_vm.$t('user_card.per_day')))]):_vm._e()],1)])],1),_vm._v(\" \"),_c('div',{staticClass:\"user-meta\"},[(_vm.relationship.followed_by && _vm.loggedIn && _vm.isOtherUser)?_c('div',{staticClass:\"following\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.follows_you'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isOtherUser && (_vm.loggedIn || !_vm.switcher))?_c('div',{staticClass:\"highlighter\"},[(_vm.userHighlightType !== 'disabled')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userHighlightColor),expression:\"userHighlightColor\"}],staticClass:\"userHighlightText\",attrs:{\"id\":'userHighlightColorTx'+_vm.user.id,\"type\":\"text\"},domProps:{\"value\":(_vm.userHighlightColor)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.userHighlightColor=$event.target.value}}}):_vm._e(),_vm._v(\" \"),(_vm.userHighlightType !== 'disabled')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userHighlightColor),expression:\"userHighlightColor\"}],staticClass:\"userHighlightCl\",attrs:{\"id\":'userHighlightColor'+_vm.user.id,\"type\":\"color\"},domProps:{\"value\":(_vm.userHighlightColor)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.userHighlightColor=$event.target.value}}}):_vm._e(),_vm._v(\" \"),_c('label',{staticClass:\"userHighlightSel select\",attrs:{\"for\":\"style-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userHighlightType),expression:\"userHighlightType\"}],staticClass:\"userHighlightSel\",attrs:{\"id\":'userHighlightSel'+_vm.user.id},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.userHighlightType=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"disabled\"}},[_vm._v(\"No highlight\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"solid\"}},[_vm._v(\"Solid bg\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"striped\"}},[_vm._v(\"Striped bg\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"side\"}},[_vm._v(\"Side stripe\")])]),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]):_vm._e()]),_vm._v(\" \"),(_vm.loggedIn && _vm.isOtherUser)?_c('div',{staticClass:\"user-interactions\"},[_c('div',{staticClass:\"btn-group\"},[_c('FollowButton',{attrs:{\"relationship\":_vm.relationship}}),_vm._v(\" \"),(_vm.relationship.following)?[(!_vm.relationship.subscribing)?_c('ProgressButton',{staticClass:\"btn btn-default\",attrs:{\"click\":_vm.subscribeUser,\"title\":_vm.$t('user_card.subscribe')}},[_c('i',{staticClass:\"icon-bell-alt\"})]):_c('ProgressButton',{staticClass:\"btn btn-default toggled\",attrs:{\"click\":_vm.unsubscribeUser,\"title\":_vm.$t('user_card.unsubscribe')}},[_c('i',{staticClass:\"icon-bell-ringing-o\"})])]:_vm._e()],2),_vm._v(\" \"),_c('div',[(_vm.relationship.muting)?_c('button',{staticClass:\"btn btn-default btn-block toggled\",on:{\"click\":_vm.unmuteUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.muted'))+\"\\n \")]):_c('button',{staticClass:\"btn btn-default btn-block\",on:{\"click\":_vm.muteUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.mute'))+\"\\n \")])]),_vm._v(\" \"),_c('div',[_c('button',{staticClass:\"btn btn-default btn-block\",on:{\"click\":_vm.mentionUser}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.mention'))+\"\\n \")])]),_vm._v(\" \"),(_vm.loggedIn.role === \"admin\")?_c('ModerationTools',{attrs:{\"user\":_vm.user}}):_vm._e()],1):_vm._e(),_vm._v(\" \"),(!_vm.loggedIn && _vm.user.is_local)?_c('div',{staticClass:\"user-interactions\"},[_c('RemoteFollow',{attrs:{\"user\":_vm.user}})],1):_vm._e()])]),_vm._v(\" \"),(!_vm.hideBio)?_c('div',{staticClass:\"panel-body\"},[(!_vm.mergedConfig.hideUserStats && _vm.switcher)?_c('div',{staticClass:\"user-counts\"},[_c('div',{staticClass:\"user-count\",on:{\"click\":function($event){$event.preventDefault();_vm.setProfileView('statuses')}}},[_c('h5',[_vm._v(_vm._s(_vm.$t('user_card.statuses')))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.user.statuses_count)+\" \"),_c('br')])]),_vm._v(\" \"),_c('div',{staticClass:\"user-count\",on:{\"click\":function($event){$event.preventDefault();_vm.setProfileView('friends')}}},[_c('h5',[_vm._v(_vm._s(_vm.$t('user_card.followees')))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.hideFollowsCount ? _vm.$t('user_card.hidden') : _vm.user.friends_count))])]),_vm._v(\" \"),_c('div',{staticClass:\"user-count\",on:{\"click\":function($event){$event.preventDefault();_vm.setProfileView('followers')}}},[_c('h5',[_vm._v(_vm._s(_vm.$t('user_card.followers')))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.hideFollowersCount ? _vm.$t('user_card.hidden') : _vm.user.followers_count))])])]):_vm._e(),_vm._v(\" \"),(!_vm.hideBio && _vm.user.description_html)?_c('p',{staticClass:\"user-card-bio\",domProps:{\"innerHTML\":_vm._s(_vm.user.description_html)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}):(!_vm.hideBio)?_c('p',{staticClass:\"user-card-bio\"},[_vm._v(\"\\n \"+_vm._s(_vm.user.description)+\"\\n \")]):_vm._e()]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-info-avatar-link-overlay\"},[_c('i',{staticClass:\"button-icon icon-zoom-in\"})])}]\nexport { render, staticRenderFns }","import StillImage from '../still-image/still-image.vue'\n\nconst UserAvatar = {\n props: [\n 'user',\n 'betterShadow',\n 'compact'\n ],\n data () {\n return {\n showPlaceholder: false\n }\n },\n components: {\n StillImage\n },\n computed: {\n imgSrc () {\n return this.showPlaceholder ? '/images/avi.png' : this.user.profile_image_url_original\n }\n },\n methods: {\n imageLoadError () {\n this.showPlaceholder = true\n }\n },\n watch: {\n src () {\n this.showPlaceholder = false\n }\n }\n}\n\nexport default UserAvatar\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./user_avatar.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./user_avatar.js\"\nimport __vue_script__ from \"!!babel-loader!./user_avatar.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-056a5e34\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./user_avatar.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('StillImage',{staticClass:\"avatar\",class:{ 'avatar-compact': _vm.compact, 'better-shadow': _vm.betterShadow },attrs:{\"alt\":_vm.user.screen_name,\"title\":_vm.user.screen_name,\"src\":_vm.imgSrc,\"image-load-error\":_vm.imageLoadError}})}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { mapGetters } from 'vuex'\n\nconst FavoriteButton = {\n props: ['status', 'loggedIn'],\n data () {\n return {\n animated: false\n }\n },\n methods: {\n favorite () {\n if (!this.status.favorited) {\n this.$store.dispatch('favorite', { id: this.status.id })\n } else {\n this.$store.dispatch('unfavorite', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n }\n },\n computed: {\n classes () {\n return {\n 'icon-star-empty': !this.status.favorited,\n 'icon-star': this.status.favorited,\n 'animate-spin': this.animated\n }\n },\n ...mapGetters(['mergedConfig'])\n }\n}\n\nexport default FavoriteButton\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./favorite_button.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./favorite_button.js\"\nimport __vue_script__ from \"!!babel-loader!./favorite_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2ced002f\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./favorite_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loggedIn)?_c('div',[_c('i',{staticClass:\"button-icon favorite-button fav-active\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.favorite')},on:{\"click\":function($event){$event.preventDefault();_vm.favorite()}}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.fave_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.fave_num))]):_vm._e()]):_c('div',[_c('i',{staticClass:\"button-icon favorite-button\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.favorite')}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.fave_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.fave_num))]):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Popover from '../popover/popover.vue'\nimport { mapGetters } from 'vuex'\n\nconst ReactButton = {\n props: ['status'],\n data () {\n return {\n filterWord: ''\n }\n },\n components: {\n Popover\n },\n methods: {\n addReaction (event, emoji, close) {\n const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji)\n if (existingReaction && existingReaction.me) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n } else {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n }\n close()\n }\n },\n computed: {\n commonEmojis () {\n return ['❤️', '😠', '👀', '😂', '🔥']\n },\n emojis () {\n if (this.filterWord !== '') {\n return this.$store.state.instance.emoji.filter(emoji => emoji.displayText.includes(this.filterWord))\n }\n return this.$store.state.instance.emoji || []\n },\n ...mapGetters(['mergedConfig'])\n }\n}\n\nexport default ReactButton\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./react_button.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./react_button.js\"\nimport __vue_script__ from \"!!babel-loader!./react_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-185f65eb\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./react_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{staticClass:\"react-button-popover\",attrs:{\"trigger\":\"click\",\"placement\":\"top\",\"offset\":{ y: 5 }},scopedSlots:_vm._u([{key:\"content\",fn:function(ref){\nvar close = ref.close;\nreturn _c('div',{},[_c('div',{staticClass:\"reaction-picker-filter\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.filterWord),expression:\"filterWord\"}],attrs:{\"placeholder\":_vm.$t('emoji.search_emoji')},domProps:{\"value\":(_vm.filterWord)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.filterWord=$event.target.value}}})]),_vm._v(\" \"),_c('div',{staticClass:\"reaction-picker\"},[_vm._l((_vm.commonEmojis),function(emoji){return _c('span',{key:emoji,staticClass:\"emoji-button\",on:{\"click\":function($event){_vm.addReaction($event, emoji, close)}}},[_vm._v(\"\\n \"+_vm._s(emoji)+\"\\n \")])}),_vm._v(\" \"),_c('div',{staticClass:\"reaction-picker-divider\"}),_vm._v(\" \"),_vm._l((_vm.emojis),function(emoji,key){return _c('span',{key:key,staticClass:\"emoji-button\",on:{\"click\":function($event){_vm.addReaction($event, emoji.replacement, close)}}},[_vm._v(\"\\n \"+_vm._s(emoji.replacement)+\"\\n \")])}),_vm._v(\" \"),_c('div',{staticClass:\"reaction-bottom-fader\"})],2)])}}])},[_c('i',{staticClass:\"icon-smile button-icon add-reaction-button\",attrs:{\"slot\":\"trigger\",\"title\":_vm.$t('tool_tip.add_reaction')},slot:\"trigger\"})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { mapGetters } from 'vuex'\n\nconst RetweetButton = {\n props: ['status', 'loggedIn', 'visibility'],\n data () {\n return {\n animated: false\n }\n },\n methods: {\n retweet () {\n if (!this.status.repeated) {\n this.$store.dispatch('retweet', { id: this.status.id })\n } else {\n this.$store.dispatch('unretweet', { id: this.status.id })\n }\n this.animated = true\n setTimeout(() => {\n this.animated = false\n }, 500)\n }\n },\n computed: {\n classes () {\n return {\n 'retweeted': this.status.repeated,\n 'retweeted-empty': !this.status.repeated,\n 'animate-spin': this.animated\n }\n },\n ...mapGetters(['mergedConfig'])\n }\n}\n\nexport default RetweetButton\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./retweet_button.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./retweet_button.js\"\nimport __vue_script__ from \"!!babel-loader!./retweet_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-538410cc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./retweet_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loggedIn)?_c('div',[(_vm.visibility !== 'private' && _vm.visibility !== 'direct')?[_c('i',{staticClass:\"button-icon retweet-button icon-retweet rt-active\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.repeat')},on:{\"click\":function($event){$event.preventDefault();_vm.retweet()}}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.repeat_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.repeat_num))]):_vm._e()]:[_c('i',{staticClass:\"button-icon icon-lock\",class:_vm.classes,attrs:{\"title\":_vm.$t('timeline.no_retweet_hint')}})]],2):(!_vm.loggedIn)?_c('div',[_c('i',{staticClass:\"button-icon icon-retweet\",class:_vm.classes,attrs:{\"title\":_vm.$t('tool_tip.repeat')}}),_vm._v(\" \"),(!_vm.mergedConfig.hidePostStats && _vm.status.repeat_num > 0)?_c('span',[_vm._v(_vm._s(_vm.status.repeat_num))]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Popover from '../popover/popover.vue'\n\nconst ExtraButtons = {\n props: [ 'status' ],\n components: { Popover },\n methods: {\n deleteStatus () {\n const confirmed = window.confirm(this.$t('status.delete_confirm'))\n if (confirmed) {\n this.$store.dispatch('deleteStatus', { id: this.status.id })\n }\n },\n pinStatus () {\n this.$store.dispatch('pinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unpinStatus () {\n this.$store.dispatch('unpinStatus', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n muteConversation () {\n this.$store.dispatch('muteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n unmuteConversation () {\n this.$store.dispatch('unmuteConversation', this.status.id)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n },\n copyLink () {\n navigator.clipboard.writeText(this.statusLink)\n .then(() => this.$emit('onSuccess'))\n .catch(err => this.$emit('onError', err.error.error))\n }\n },\n computed: {\n currentUser () { return this.$store.state.users.currentUser },\n canDelete () {\n if (!this.currentUser) { return }\n const superuser = this.currentUser.rights.moderator || this.currentUser.rights.admin\n return superuser || this.status.user.id === this.currentUser.id\n },\n ownStatus () {\n return this.status.user.id === this.currentUser.id\n },\n canPin () {\n return this.ownStatus && (this.status.visibility === 'public' || this.status.visibility === 'unlisted')\n },\n canMute () {\n return !!this.currentUser\n },\n statusLink () {\n return `${this.$store.state.instance.server}${this.$router.resolve({ name: 'conversation', params: { id: this.status.id } }).href}`\n }\n }\n}\n\nexport default ExtraButtons\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./extra_buttons.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./extra_buttons.js\"\nimport __vue_script__ from \"!!babel-loader!./extra_buttons.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-b30b8de6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./extra_buttons.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{staticClass:\"extra-button-popover\",attrs:{\"trigger\":\"click\",\"placement\":\"top\"},scopedSlots:_vm._u([{key:\"content\",fn:function(ref){\nvar close = ref.close;\nreturn _c('div',{},[_c('div',{staticClass:\"dropdown-menu\"},[(_vm.canMute && !_vm.status.thread_muted)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":function($event){$event.preventDefault();return _vm.muteConversation($event)}}},[_c('i',{staticClass:\"icon-eye-off\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.mute_conversation\")))])]):_vm._e(),_vm._v(\" \"),(_vm.canMute && _vm.status.thread_muted)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":function($event){$event.preventDefault();return _vm.unmuteConversation($event)}}},[_c('i',{staticClass:\"icon-eye-off\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.unmute_conversation\")))])]):_vm._e(),_vm._v(\" \"),(!_vm.status.pinned && _vm.canPin)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.pinStatus($event)},close]}},[_c('i',{staticClass:\"icon-pin\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.pin\")))])]):_vm._e(),_vm._v(\" \"),(_vm.status.pinned && _vm.canPin)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.unpinStatus($event)},close]}},[_c('i',{staticClass:\"icon-pin\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.unpin\")))])]):_vm._e(),_vm._v(\" \"),(_vm.canDelete)?_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.deleteStatus($event)},close]}},[_c('i',{staticClass:\"icon-cancel\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.delete\")))])]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"dropdown-item dropdown-item-icon\",on:{\"click\":[function($event){$event.preventDefault();return _vm.copyLink($event)},close]}},[_c('i',{staticClass:\"icon-share\"}),_c('span',[_vm._v(_vm._s(_vm.$t(\"status.copy_link\")))])])])])}}])},[_c('i',{staticClass:\"icon-ellipsis button-icon\",attrs:{\"slot\":\"trigger\"},slot:\"trigger\"})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst AvatarList = {\n props: ['users'],\n computed: {\n slicedUsers () {\n return this.users ? this.users.slice(0, 15) : []\n }\n },\n components: {\n UserAvatar\n },\n methods: {\n userProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n }\n }\n}\n\nexport default AvatarList\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./avatar_list.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./avatar_list.js\"\nimport __vue_script__ from \"!!babel-loader!./avatar_list.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4cea5bcf\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./avatar_list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatars\"},_vm._l((_vm.slicedUsers),function(user){return _c('router-link',{key:user.id,staticClass:\"avatars-item\",attrs:{\"to\":_vm.userProfileLink(user)}},[_c('UserAvatar',{staticClass:\"avatar-small\",attrs:{\"user\":user}})],1)}),1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import StillImage from '../still-image/still-image.vue'\nimport VideoAttachment from '../video_attachment/video_attachment.vue'\nimport nsfwImage from '../../assets/nsfw.png'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { mapGetters } from 'vuex'\n\nconst Attachment = {\n props: [\n 'attachment',\n 'nsfw',\n 'statusId',\n 'size',\n 'allowPlay',\n 'setMedia',\n 'naturalSizeLoad'\n ],\n data () {\n return {\n nsfwImage: this.$store.state.instance.nsfwCensorImage || nsfwImage,\n hideNsfwLocal: this.$store.getters.mergedConfig.hideNsfw,\n preloadImage: this.$store.getters.mergedConfig.preloadImage,\n loading: false,\n img: fileTypeService.fileType(this.attachment.mimetype) === 'image' && document.createElement('img'),\n modalOpen: false,\n showHidden: false\n }\n },\n components: {\n StillImage,\n VideoAttachment\n },\n computed: {\n usePlaceHolder () {\n return this.size === 'hide' || this.type === 'unknown'\n },\n referrerpolicy () {\n return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer'\n },\n type () {\n return fileTypeService.fileType(this.attachment.mimetype)\n },\n hidden () {\n return this.nsfw && this.hideNsfwLocal && !this.showHidden\n },\n isEmpty () {\n return (this.type === 'html' && !this.attachment.oembed) || this.type === 'unknown'\n },\n isSmall () {\n return this.size === 'small'\n },\n fullwidth () {\n return this.type === 'html' || this.type === 'audio'\n },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n linkClicked ({ target }) {\n if (target.tagName === 'A') {\n window.open(target.href, '_blank')\n }\n },\n openModal (event) {\n const modalTypes = this.mergedConfig.playVideosInModal\n ? ['image', 'video']\n : ['image']\n if (fileTypeService.fileMatchesSomeType(modalTypes, this.attachment) ||\n this.usePlaceHolder\n ) {\n event.stopPropagation()\n event.preventDefault()\n this.setMedia()\n this.$store.dispatch('setCurrent', this.attachment)\n }\n },\n toggleHidden (event) {\n if (\n (this.mergedConfig.useOneClickNsfw && !this.showHidden) &&\n (this.type !== 'video' || this.mergedConfig.playVideosInModal)\n ) {\n this.openModal(event)\n return\n }\n if (this.img && !this.preloadImage) {\n if (this.img.onload) {\n this.img.onload()\n } else {\n this.loading = true\n this.img.src = this.attachment.url\n this.img.onload = () => {\n this.loading = false\n this.showHidden = !this.showHidden\n }\n }\n } else {\n this.showHidden = !this.showHidden\n }\n },\n onImageLoad (image) {\n const width = image.naturalWidth\n const height = image.naturalHeight\n this.naturalSizeLoad && this.naturalSizeLoad({ width, height })\n }\n }\n}\n\nexport default Attachment\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./attachment.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./attachment.js\"\nimport __vue_script__ from \"!!babel-loader!./attachment.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-61e0eb0c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./attachment.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {\nvar _obj;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.usePlaceHolder)?_c('div',{on:{\"click\":_vm.openModal}},[(_vm.type !== 'html')?_c('a',{staticClass:\"placeholder\",attrs:{\"target\":\"_blank\",\"href\":_vm.attachment.url}},[_vm._v(\"\\n [\"+_vm._s(_vm.nsfw ? \"NSFW/\" : \"\")+_vm._s(_vm.type.toUpperCase())+\"]\\n \")]):_vm._e()]):_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isEmpty),expression:\"!isEmpty\"}],staticClass:\"attachment\",class:( _obj = {}, _obj[_vm.type] = true, _obj.loading = _vm.loading, _obj['fullwidth'] = _vm.fullwidth, _obj['nsfw-placeholder'] = _vm.hidden, _obj )},[(_vm.hidden)?_c('a',{staticClass:\"image-attachment\",attrs:{\"href\":_vm.attachment.url},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleHidden($event)}}},[_c('img',{key:_vm.nsfwImage,staticClass:\"nsfw\",class:{'small': _vm.isSmall},attrs:{\"src\":_vm.nsfwImage}}),_vm._v(\" \"),(_vm.type === 'video')?_c('i',{staticClass:\"play-icon icon-play-circled\"}):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.nsfw && _vm.hideNsfwLocal && !_vm.hidden)?_c('div',{staticClass:\"hider\"},[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleHidden($event)}}},[_vm._v(\"Hide\")])]):_vm._e(),_vm._v(\" \"),(_vm.type === 'image' && (!_vm.hidden || _vm.preloadImage))?_c('a',{staticClass:\"image-attachment\",class:{'hidden': _vm.hidden && _vm.preloadImage },attrs:{\"href\":_vm.attachment.url,\"target\":\"_blank\",\"title\":_vm.attachment.description},on:{\"click\":_vm.openModal}},[_c('StillImage',{attrs:{\"referrerpolicy\":_vm.referrerpolicy,\"mimetype\":_vm.attachment.mimetype,\"src\":_vm.attachment.large_thumb_url || _vm.attachment.url,\"image-load-handler\":_vm.onImageLoad}})],1):_vm._e(),_vm._v(\" \"),(_vm.type === 'video' && !_vm.hidden)?_c('a',{staticClass:\"video-container\",class:{'small': _vm.isSmall},attrs:{\"href\":_vm.allowPlay ? undefined : _vm.attachment.url},on:{\"click\":_vm.openModal}},[_c('VideoAttachment',{staticClass:\"video\",attrs:{\"attachment\":_vm.attachment,\"controls\":_vm.allowPlay}}),_vm._v(\" \"),(!_vm.allowPlay)?_c('i',{staticClass:\"play-icon icon-play-circled\"}):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.type === 'audio')?_c('audio',{attrs:{\"src\":_vm.attachment.url,\"controls\":\"\"}}):_vm._e(),_vm._v(\" \"),(_vm.type === 'html' && _vm.attachment.oembed)?_c('div',{staticClass:\"oembed\",on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}},[(_vm.attachment.thumb_url)?_c('div',{staticClass:\"image\"},[_c('img',{attrs:{\"src\":_vm.attachment.thumb_url}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"text\"},[_c('h1',[_c('a',{attrs:{\"href\":_vm.attachment.url}},[_vm._v(_vm._s(_vm.attachment.oembed.title))])]),_vm._v(\" \"),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.attachment.oembed.oembedHTML)}})])]):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Timeago from '../timeago/timeago.vue'\nimport { forEach, map } from 'lodash'\n\nexport default {\n name: 'Poll',\n props: ['basePoll'],\n components: { Timeago },\n data () {\n return {\n loading: false,\n choices: []\n }\n },\n created () {\n if (!this.$store.state.polls.pollsObject[this.pollId]) {\n this.$store.dispatch('mergeOrAddPoll', this.basePoll)\n }\n this.$store.dispatch('trackPoll', this.pollId)\n },\n destroyed () {\n this.$store.dispatch('untrackPoll', this.pollId)\n },\n computed: {\n pollId () {\n return this.basePoll.id\n },\n poll () {\n const storePoll = this.$store.state.polls.pollsObject[this.pollId]\n return storePoll || {}\n },\n options () {\n return (this.poll && this.poll.options) || []\n },\n expiresAt () {\n return (this.poll && this.poll.expires_at) || 0\n },\n expired () {\n return (this.poll && this.poll.expired) || false\n },\n loggedIn () {\n return this.$store.state.users.currentUser\n },\n showResults () {\n return this.poll.voted || this.expired || !this.loggedIn\n },\n totalVotesCount () {\n return this.poll.votes_count\n },\n containerClass () {\n return {\n loading: this.loading\n }\n },\n choiceIndices () {\n // Convert array of booleans into an array of indices of the\n // items that were 'true', so [true, false, false, true] becomes\n // [0, 3].\n return this.choices\n .map((entry, index) => entry && index)\n .filter(value => typeof value === 'number')\n },\n isDisabled () {\n const noChoice = this.choiceIndices.length === 0\n return this.loading || noChoice\n }\n },\n methods: {\n percentageForOption (count) {\n return this.totalVotesCount === 0 ? 0 : Math.round(count / this.totalVotesCount * 100)\n },\n resultTitle (option) {\n return `${option.votes_count}/${this.totalVotesCount} ${this.$t('polls.votes')}`\n },\n fetchPoll () {\n this.$store.dispatch('refreshPoll', { id: this.statusId, pollId: this.poll.id })\n },\n activateOption (index) {\n // forgive me father: doing checking the radio/checkboxes\n // in code because of customized input elements need either\n // a) an extra element for the actual graphic, or b) use a\n // pseudo element for the label. We use b) which mandates\n // using \"for\" and \"id\" matching which isn't nice when the\n // same poll appears multiple times on the site (notifs and\n // timeline for example). With code we can make sure it just\n // works without altering the pseudo element implementation.\n const allElements = this.$el.querySelectorAll('input')\n const clickedElement = this.$el.querySelector(`input[value=\"${index}\"]`)\n if (this.poll.multiple) {\n // Checkboxes, toggle only the clicked one\n clickedElement.checked = !clickedElement.checked\n } else {\n // Radio button, uncheck everything and check the clicked one\n forEach(allElements, element => { element.checked = false })\n clickedElement.checked = true\n }\n this.choices = map(allElements, e => e.checked)\n },\n optionId (index) {\n return `poll${this.poll.id}-${index}`\n },\n vote () {\n if (this.choiceIndices.length === 0) return\n this.loading = true\n this.$store.dispatch(\n 'votePoll',\n { id: this.statusId, pollId: this.poll.id, choices: this.choiceIndices }\n ).then(poll => {\n this.loading = false\n })\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./poll.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./poll.js\"\nimport __vue_script__ from \"!!babel-loader!./poll.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-db51c57e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./poll.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"poll\",class:_vm.containerClass},[_vm._l((_vm.options),function(option,index){return _c('div',{key:index,staticClass:\"poll-option\"},[(_vm.showResults)?_c('div',{staticClass:\"option-result\",attrs:{\"title\":_vm.resultTitle(option)}},[_c('div',{staticClass:\"option-result-label\"},[_c('span',{staticClass:\"result-percentage\"},[_vm._v(\"\\n \"+_vm._s(_vm.percentageForOption(option.votes_count))+\"%\\n \")]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(option.title))])]),_vm._v(\" \"),_c('div',{staticClass:\"result-fill\",style:({ 'width': ((_vm.percentageForOption(option.votes_count)) + \"%\") })})]):_c('div',{on:{\"click\":function($event){_vm.activateOption(index)}}},[(_vm.poll.multiple)?_c('input',{attrs:{\"type\":\"checkbox\",\"disabled\":_vm.loading},domProps:{\"value\":index}}):_c('input',{attrs:{\"type\":\"radio\",\"disabled\":_vm.loading},domProps:{\"value\":index}}),_vm._v(\" \"),_c('label',{staticClass:\"option-vote\"},[_c('div',[_vm._v(_vm._s(option.title))])])])])}),_vm._v(\" \"),_c('div',{staticClass:\"footer faint\"},[(!_vm.showResults)?_c('button',{staticClass:\"btn btn-default poll-vote-button\",attrs:{\"type\":\"button\",\"disabled\":_vm.isDisabled},on:{\"click\":_vm.vote}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('polls.vote'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"total\"},[_vm._v(\"\\n \"+_vm._s(_vm.totalVotesCount)+\" \"+_vm._s(_vm.$t(\"polls.votes\"))+\" · \\n \")]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":_vm.expired ? 'polls.expired' : 'polls.expires_in'}},[_c('Timeago',{attrs:{\"time\":_vm.expiresAt,\"auto-update\":60,\"now-threshold\":0}})],1)],1)],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Attachment from '../attachment/attachment.vue'\nimport { chunk, last, dropRight, sumBy } from 'lodash'\n\nconst Gallery = {\n props: [\n 'attachments',\n 'nsfw',\n 'setMedia'\n ],\n data () {\n return {\n sizes: {}\n }\n },\n components: { Attachment },\n computed: {\n rows () {\n if (!this.attachments) {\n return []\n }\n const rows = chunk(this.attachments, 3)\n if (last(rows).length === 1 && rows.length > 1) {\n // if 1 attachment on last row -> add it to the previous row instead\n const lastAttachment = last(rows)[0]\n const allButLastRow = dropRight(rows)\n last(allButLastRow).push(lastAttachment)\n return allButLastRow\n }\n return rows\n },\n useContainFit () {\n return this.$store.getters.mergedConfig.useContainFit\n }\n },\n methods: {\n onNaturalSizeLoad (id, size) {\n this.$set(this.sizes, id, size)\n },\n rowStyle (itemsPerRow) {\n return { 'padding-bottom': `${(100 / (itemsPerRow + 0.6))}%` }\n },\n itemStyle (id, row) {\n const total = sumBy(row, item => this.getAspectRatio(item.id))\n return { flex: `${this.getAspectRatio(id) / total} 1 0%` }\n },\n getAspectRatio (id) {\n const size = this.sizes[id]\n return size ? size.width / size.height : 1\n }\n }\n}\n\nexport default Gallery\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./gallery.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./gallery.js\"\nimport __vue_script__ from \"!!babel-loader!./gallery.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-68a574b8\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./gallery.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"galleryContainer\",staticStyle:{\"width\":\"100%\"}},_vm._l((_vm.rows),function(row,index){return _c('div',{key:index,staticClass:\"gallery-row\",class:{ 'contain-fit': _vm.useContainFit, 'cover-fit': !_vm.useContainFit },style:(_vm.rowStyle(row.length))},[_c('div',{staticClass:\"gallery-row-inner\"},_vm._l((row),function(attachment){return _c('attachment',{key:attachment.id,style:(_vm.itemStyle(attachment.id, row)),attrs:{\"set-media\":_vm.setMedia,\"nsfw\":_vm.nsfw,\"attachment\":attachment,\"allow-play\":false,\"natural-size-load\":_vm.onNaturalSizeLoad.bind(null, attachment.id)}})}),1)])}),0)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const LinkPreview = {\n name: 'LinkPreview',\n props: [\n 'card',\n 'size',\n 'nsfw'\n ],\n data () {\n return {\n imageLoaded: false\n }\n },\n computed: {\n useImage () {\n // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid\n // as it makes sure to hide the image if somehow NSFW tagged preview can\n // exist.\n return this.card.image && !this.nsfw && this.size !== 'hide'\n },\n useDescription () {\n return this.card.description && /\\S/.test(this.card.description)\n }\n },\n created () {\n if (this.useImage) {\n const newImg = new Image()\n newImg.onload = () => {\n this.imageLoaded = true\n }\n newImg.src = this.card.image\n }\n }\n}\n\nexport default LinkPreview\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./link-preview.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./link-preview.js\"\nimport __vue_script__ from \"!!babel-loader!./link-preview.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7c8d99ac\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./link-preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticClass:\"link-preview-card\",attrs:{\"href\":_vm.card.url,\"target\":\"_blank\",\"rel\":\"noopener\"}},[(_vm.useImage && _vm.imageLoaded)?_c('div',{staticClass:\"card-image\",class:{ 'small-image': _vm.size === 'small' }},[_c('img',{attrs:{\"src\":_vm.card.image}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"card-content\"},[_c('span',{staticClass:\"card-host faint\"},[_vm._v(_vm._s(_vm.card.provider_name))]),_vm._v(\" \"),_c('h4',{staticClass:\"card-title\"},[_vm._v(_vm._s(_vm.card.title))]),_vm._v(\" \"),(_vm.useDescription)?_c('p',{staticClass:\"card-description\"},[_vm._v(_vm._s(_vm.card.description))]):_vm._e()])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Attachment from '../attachment/attachment.vue'\nimport Poll from '../poll/poll.vue'\nimport Gallery from '../gallery/gallery.vue'\nimport LinkPreview from '../link-preview/link-preview.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport fileType from 'src/services/file_type/file_type.service'\nimport { processHtml } from 'src/services/tiny_post_html_processor/tiny_post_html_processor.service.js'\nimport { mentionMatchesUrl, extractTagFromUrl } from 'src/services/matcher/matcher.service.js'\nimport { mapGetters, mapState } from 'vuex'\n\nconst StatusContent = {\n name: 'StatusContent',\n props: [\n 'status',\n 'focused',\n 'noHeading',\n 'fullContent'\n ],\n data () {\n return {\n showingTall: this.inConversation && this.focused,\n showingLongSubject: false,\n // not as computed because it sets the initial state which will be changed later\n expandingSubject: !this.$store.getters.mergedConfig.collapseMessageWithSubject\n }\n },\n computed: {\n localCollapseSubjectDefault () {\n return this.mergedConfig.collapseMessageWithSubject\n },\n hideAttachments () {\n return (this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation)\n },\n // This is a bit hacky, but we want to approximate post height before rendering\n // so we count newlines (masto uses

for paragraphs, GS uses
between them)\n // as well as approximate line count by counting characters and approximating ~80\n // per line.\n //\n // Using max-height + overflow: auto for status components resulted in false positives\n // very often with japanese characters, and it was very annoying.\n tallStatus () {\n const lengthScore = this.status.statusnet_html.split(/ 20\n },\n longSubject () {\n return this.status.summary.length > 900\n },\n // When a status has a subject and is also tall, we should only have one show more/less button. If the default is to collapse statuses with subjects, we just treat it like a status with a subject; otherwise, we just treat it like a tall status.\n mightHideBecauseSubject () {\n return this.status.summary && (!this.tallStatus || this.localCollapseSubjectDefault)\n },\n mightHideBecauseTall () {\n return this.tallStatus && (!this.status.summary || !this.localCollapseSubjectDefault)\n },\n hideSubjectStatus () {\n return this.mightHideBecauseSubject && !this.expandingSubject\n },\n hideTallStatus () {\n return this.mightHideBecauseTall && !this.showingTall\n },\n showingMore () {\n return (this.mightHideBecauseTall && this.showingTall) || (this.mightHideBecauseSubject && this.expandingSubject)\n },\n nsfwClickthrough () {\n if (!this.status.nsfw) {\n return false\n }\n if (this.status.summary && this.localCollapseSubjectDefault) {\n return false\n }\n return true\n },\n attachmentSize () {\n if ((this.mergedConfig.hideAttachments && !this.inConversation) ||\n (this.mergedConfig.hideAttachmentsInConv && this.inConversation) ||\n (this.status.attachments.length > this.maxThumbnails)) {\n return 'hide'\n } else if (this.compact) {\n return 'small'\n }\n return 'normal'\n },\n galleryTypes () {\n if (this.attachmentSize === 'hide') {\n return []\n }\n return this.mergedConfig.playVideosInModal\n ? ['image', 'video']\n : ['image']\n },\n galleryAttachments () {\n return this.status.attachments.filter(\n file => fileType.fileMatchesSomeType(this.galleryTypes, file)\n )\n },\n nonGalleryAttachments () {\n return this.status.attachments.filter(\n file => !fileType.fileMatchesSomeType(this.galleryTypes, file)\n )\n },\n hasImageAttachments () {\n return this.status.attachments.some(\n file => fileType.fileType(file.mimetype) === 'image'\n )\n },\n hasVideoAttachments () {\n return this.status.attachments.some(\n file => fileType.fileType(file.mimetype) === 'video'\n )\n },\n maxThumbnails () {\n return this.mergedConfig.maxThumbnails\n },\n postBodyHtml () {\n const html = this.status.statusnet_html\n\n if (this.mergedConfig.greentext) {\n try {\n if (html.includes('>')) {\n // This checks if post has '>' at the beginning, excluding mentions so that @mention >impying works\n return processHtml(html, (string) => {\n if (string.includes('>') &&\n string\n .replace(/<[^>]+?>/gi, '') // remove all tags\n .replace(/@\\w+/gi, '') // remove mentions (even failed ones)\n .trim()\n .startsWith('>')) {\n return `${string}`\n } else {\n return string\n }\n })\n } else {\n return html\n }\n } catch (e) {\n console.err('Failed to process status html', e)\n return html\n }\n } else {\n return html\n }\n },\n contentHtml () {\n if (!this.status.summary_html) {\n return this.postBodyHtml\n }\n return this.status.summary_html + '
' + this.postBodyHtml\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n betterShadow: state => state.interface.browserSupport.cssFilter,\n currentUser: state => state.users.currentUser\n })\n },\n components: {\n Attachment,\n Poll,\n Gallery,\n LinkPreview\n },\n methods: {\n linkClicked (event) {\n const target = event.target.closest('.status-content a')\n if (target) {\n if (target.className.match(/mention/)) {\n const href = target.href\n const attn = this.status.attentions.find(attn => mentionMatchesUrl(attn, href))\n if (attn) {\n event.stopPropagation()\n event.preventDefault()\n const link = this.generateUserProfileLink(attn.id, attn.screen_name)\n this.$router.push(link)\n return\n }\n }\n if (target.rel.match(/(?:^|\\s)tag(?:$|\\s)/) || target.className.match(/hashtag/)) {\n // Extract tag name from link url\n const tag = extractTagFromUrl(target.href)\n if (tag) {\n const link = this.generateTagLink(tag)\n this.$router.push(link)\n return\n }\n }\n window.open(target.href, '_blank')\n }\n },\n toggleShowMore () {\n if (this.mightHideBecauseTall) {\n this.showingTall = !this.showingTall\n } else if (this.mightHideBecauseSubject) {\n this.expandingSubject = !this.expandingSubject\n }\n },\n generateUserProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n },\n generateTagLink (tag) {\n return `/tag/${tag}`\n },\n setMedia () {\n const attachments = this.attachmentSize === 'hide' ? this.status.attachments : this.galleryAttachments\n return () => this.$store.dispatch('setMedia', attachments)\n }\n }\n}\n\nexport default StatusContent\n","/**\n * This is a tiny purpose-built HTML parser/processor. This basically detects any type of visual newline and\n * allows it to be processed, useful for greentexting, mostly\n *\n * known issue: doesn't handle CDATA so nested CDATA might not work well\n *\n * @param {Object} input - input data\n * @param {(string) => string} processor - function that will be called on every line\n * @return {string} processed html\n */\nexport const processHtml = (html, processor) => {\n const handledTags = new Set(['p', 'br', 'div'])\n const openCloseTags = new Set(['p', 'div'])\n\n let buffer = '' // Current output buffer\n const level = [] // How deep we are in tags and which tags were there\n let textBuffer = '' // Current line content\n let tagBuffer = null // Current tag buffer, if null = we are not currently reading a tag\n\n // Extracts tag name from tag, i.e. => span\n const getTagName = (tag) => {\n const result = /(?:<\\/(\\w+)>|<(\\w+)\\s?[^/]*?\\/?>)/gi.exec(tag)\n return result && (result[1] || result[2])\n }\n\n const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer\n if (textBuffer.trim().length > 0) {\n buffer += processor(textBuffer)\n } else {\n buffer += textBuffer\n }\n textBuffer = ''\n }\n\n const handleBr = (tag) => { // handles single newlines/linebreaks/selfclosing\n flush()\n buffer += tag\n }\n\n const handleOpen = (tag) => { // handles opening tags\n flush()\n buffer += tag\n level.push(tag)\n }\n\n const handleClose = (tag) => { // handles closing tags\n flush()\n buffer += tag\n if (level[level.length - 1] === tag) {\n level.pop()\n }\n }\n\n for (let i = 0; i < html.length; i++) {\n const char = html[i]\n if (char === '<' && tagBuffer === null) {\n tagBuffer = char\n } else if (char !== '>' && tagBuffer !== null) {\n tagBuffer += char\n } else if (char === '>' && tagBuffer !== null) {\n tagBuffer += char\n const tagFull = tagBuffer\n tagBuffer = null\n const tagName = getTagName(tagFull)\n if (handledTags.has(tagName)) {\n if (tagName === 'br') {\n handleBr(tagFull)\n } else if (openCloseTags.has(tagName)) {\n if (tagFull[1] === '/') {\n handleClose(tagFull)\n } else if (tagFull[tagFull.length - 2] === '/') {\n // self-closing\n handleBr(tagFull)\n } else {\n handleOpen(tagFull)\n }\n }\n } else {\n textBuffer += tagFull\n }\n } else if (char === '\\n') {\n handleBr(char)\n } else {\n textBuffer += char\n }\n }\n if (tagBuffer) {\n textBuffer += tagBuffer\n }\n\n flush()\n\n return buffer\n}\n","export const mentionMatchesUrl = (attention, url) => {\n if (url === attention.statusnet_profile_url) {\n return true\n }\n const [namepart, instancepart] = attention.screen_name.split('@')\n const matchstring = new RegExp('://' + instancepart + '/.*' + namepart + '$', 'g')\n\n return !!url.match(matchstring)\n}\n\n/**\n * Extract tag name from pleroma or mastodon url.\n * i.e https://bikeshed.party/tag/photo or https://quey.org/tags/sky\n * @param {string} url\n */\nexport const extractTagFromUrl = (url) => {\n const regex = /tag[s]*\\/(\\w+)$/g\n const result = regex.exec(url)\n if (!result) {\n return false\n }\n return result[1]\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./status_content.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./status_content.js\"\nimport __vue_script__ from \"!!babel-loader!./status_content.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-43c5cfd4\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./status_content.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"status-body\"},[_vm._t(\"header\"),_vm._v(\" \"),(_vm.longSubject)?_c('div',{staticClass:\"status-content-wrapper\",class:{ 'tall-status': !_vm.showingLongSubject }},[(!_vm.showingLongSubject)?_c('a',{staticClass:\"tall-status-hider\",class:{ 'tall-status-hider_focused': _vm.focused },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.showingLongSubject=true}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"general.show_more\"))+\"\\n \"),(_vm.hasImageAttachments)?_c('span',{staticClass:\"icon-picture\"}):_vm._e(),_vm._v(\" \"),(_vm.hasVideoAttachments)?_c('span',{staticClass:\"icon-video\"}):_vm._e(),_vm._v(\" \"),(_vm.status.card)?_c('span',{staticClass:\"icon-link\"}):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"status-content media-body\",domProps:{\"innerHTML\":_vm._s(_vm.contentHtml)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}),_vm._v(\" \"),(_vm.showingLongSubject)?_c('a',{staticClass:\"status-unhider\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.showingLongSubject=false}}},[_vm._v(_vm._s(_vm.$t(\"general.show_less\")))]):_vm._e()]):_c('div',{staticClass:\"status-content-wrapper\",class:{'tall-status': _vm.hideTallStatus}},[(_vm.hideTallStatus)?_c('a',{staticClass:\"tall-status-hider\",class:{ 'tall-status-hider_focused': _vm.focused },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowMore($event)}}},[_vm._v(_vm._s(_vm.$t(\"general.show_more\")))]):_vm._e(),_vm._v(\" \"),(!_vm.hideSubjectStatus)?_c('div',{staticClass:\"status-content media-body\",domProps:{\"innerHTML\":_vm._s(_vm.contentHtml)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}):_c('div',{staticClass:\"status-content media-body\",domProps:{\"innerHTML\":_vm._s(_vm.status.summary_html)},on:{\"click\":function($event){$event.preventDefault();return _vm.linkClicked($event)}}}),_vm._v(\" \"),(_vm.hideSubjectStatus)?_c('a',{staticClass:\"cw-status-hider\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowMore($event)}}},[_vm._v(_vm._s(_vm.$t(\"general.show_more\")))]):_vm._e(),_vm._v(\" \"),(_vm.showingMore)?_c('a',{staticClass:\"status-unhider\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowMore($event)}}},[_vm._v(_vm._s(_vm.$t(\"general.show_less\")))]):_vm._e()]),_vm._v(\" \"),(_vm.status.poll && _vm.status.poll.options)?_c('div',[_c('poll',{attrs:{\"base-poll\":_vm.status.poll}})],1):_vm._e(),_vm._v(\" \"),(_vm.status.attachments.length !== 0 && (!_vm.hideSubjectStatus || _vm.showingLongSubject))?_c('div',{staticClass:\"attachments media-body\"},[_vm._l((_vm.nonGalleryAttachments),function(attachment){return _c('attachment',{key:attachment.id,staticClass:\"non-gallery\",attrs:{\"size\":_vm.attachmentSize,\"nsfw\":_vm.nsfwClickthrough,\"attachment\":attachment,\"allow-play\":true,\"set-media\":_vm.setMedia()}})}),_vm._v(\" \"),(_vm.galleryAttachments.length > 0)?_c('gallery',{attrs:{\"nsfw\":_vm.nsfwClickthrough,\"attachments\":_vm.galleryAttachments,\"set-media\":_vm.setMedia()}}):_vm._e()],2):_vm._e(),_vm._v(\" \"),(_vm.status.card && !_vm.hideSubjectStatus && !_vm.noHeading)?_c('div',{staticClass:\"link-preview media-body\"},[_c('link-preview',{attrs:{\"card\":_vm.status.card,\"size\":_vm.attachmentSize,\"nsfw\":_vm.nsfwClickthrough}})],1):_vm._e(),_vm._v(\" \"),_vm._t(\"footer\")],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { find } from 'lodash'\n\nconst StatusPopover = {\n name: 'StatusPopover',\n props: [\n 'statusId'\n ],\n data () {\n return {\n error: false\n }\n },\n computed: {\n status () {\n return find(this.$store.state.statuses.allStatuses, { id: this.statusId })\n }\n },\n components: {\n Status: () => import('../status/status.vue'),\n Popover: () => import('../popover/popover.vue')\n },\n methods: {\n enter () {\n if (!this.status) {\n this.$store.dispatch('fetchStatus', this.statusId)\n .then(data => (this.error = false))\n .catch(e => (this.error = true))\n }\n }\n }\n}\n\nexport default StatusPopover\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./status_popover.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./status_popover.js\"\nimport __vue_script__ from \"!!babel-loader!./status_popover.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3b873076\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./status_popover.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Popover',{attrs:{\"trigger\":\"hover\",\"popover-class\":\"status-popover\",\"bound-to\":{ x: 'container' }},on:{\"show\":_vm.enter}},[_c('template',{slot:\"trigger\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"content\"},slot:\"content\"},[(_vm.status)?_c('Status',{attrs:{\"is-preview\":true,\"statusoid\":_vm.status,\"compact\":true}}):(_vm.error)?_c('div',{staticClass:\"status-preview-no-content faint\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('status.status_unavailable'))+\"\\n \")]):_c('div',{staticClass:\"status-preview-no-content\"},[_c('i',{staticClass:\"icon-spin4 animate-spin\"})])],1)],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport Popover from '../popover/popover.vue'\n\nconst EMOJI_REACTION_COUNT_CUTOFF = 12\n\nconst EmojiReactions = {\n name: 'EmojiReactions',\n components: {\n UserAvatar,\n Popover\n },\n props: ['status'],\n data: () => ({\n showAll: false\n }),\n computed: {\n tooManyReactions () {\n return this.status.emoji_reactions.length > EMOJI_REACTION_COUNT_CUTOFF\n },\n emojiReactions () {\n return this.showAll\n ? this.status.emoji_reactions\n : this.status.emoji_reactions.slice(0, EMOJI_REACTION_COUNT_CUTOFF)\n },\n showMoreString () {\n return `+${this.status.emoji_reactions.length - EMOJI_REACTION_COUNT_CUTOFF}`\n },\n accountsForEmoji () {\n return this.status.emoji_reactions.reduce((acc, reaction) => {\n acc[reaction.name] = reaction.accounts || []\n return acc\n }, {})\n },\n loggedIn () {\n return !!this.$store.state.users.currentUser\n }\n },\n methods: {\n toggleShowAll () {\n this.showAll = !this.showAll\n },\n reactedWith (emoji) {\n return this.status.emoji_reactions.find(r => r.name === emoji).me\n },\n fetchEmojiReactionsByIfMissing () {\n const hasNoAccounts = this.status.emoji_reactions.find(r => !r.accounts)\n if (hasNoAccounts) {\n this.$store.dispatch('fetchEmojiReactionsBy', this.status.id)\n }\n },\n reactWith (emoji) {\n this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })\n },\n unreact (emoji) {\n this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })\n },\n emojiOnClick (emoji, event) {\n if (!this.loggedIn) return\n\n if (this.reactedWith(emoji)) {\n this.unreact(emoji)\n } else {\n this.reactWith(emoji)\n }\n }\n }\n}\n\nexport default EmojiReactions\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./emoji_reactions.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./emoji_reactions.js\"\nimport __vue_script__ from \"!!babel-loader!./emoji_reactions.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d7ef3158\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./emoji_reactions.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"emoji-reactions\"},[_vm._l((_vm.emojiReactions),function(reaction){return _c('Popover',{key:reaction.name,attrs:{\"trigger\":\"hover\",\"placement\":\"top\",\"offset\":{ y: 5 }}},[_c('div',{staticClass:\"reacted-users\",attrs:{\"slot\":\"content\"},slot:\"content\"},[(_vm.accountsForEmoji[reaction.name].length)?_c('div',_vm._l((_vm.accountsForEmoji[reaction.name]),function(account){return _c('div',{key:account.id,staticClass:\"reacted-user\"},[_c('UserAvatar',{staticClass:\"avatar-small\",attrs:{\"user\":account,\"compact\":true}}),_vm._v(\" \"),_c('div',{staticClass:\"reacted-user-names\"},[_c('span',{staticClass:\"reacted-user-name\",domProps:{\"innerHTML\":_vm._s(account.name_html)}}),_vm._v(\" \"),_c('span',{staticClass:\"reacted-user-screen-name\"},[_vm._v(_vm._s(account.screen_name))])])],1)}),0):_c('div',[_c('i',{staticClass:\"icon-spin4 animate-spin\"})])]),_vm._v(\" \"),_c('button',{staticClass:\"emoji-reaction btn btn-default\",class:{ 'picked-reaction': _vm.reactedWith(reaction.name), 'not-clickable': !_vm.loggedIn },attrs:{\"slot\":\"trigger\"},on:{\"click\":function($event){_vm.emojiOnClick(reaction.name, $event)},\"mouseenter\":function($event){_vm.fetchEmojiReactionsByIfMissing()}},slot:\"trigger\"},[_c('span',{staticClass:\"reaction-emoji\"},[_vm._v(_vm._s(reaction.name))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(reaction.count))])])])}),_vm._v(\" \"),(_vm.tooManyReactions)?_c('a',{staticClass:\"emoji-reaction-expand faint\",attrs:{\"href\":\"javascript:void(0)\"},on:{\"click\":_vm.toggleShowAll}},[_vm._v(\"\\n \"+_vm._s(_vm.showAll ? _vm.$t('general.show_less') : _vm.showMoreString)+\"\\n \")]):_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import FavoriteButton from '../favorite_button/favorite_button.vue'\nimport ReactButton from '../react_button/react_button.vue'\nimport RetweetButton from '../retweet_button/retweet_button.vue'\nimport ExtraButtons from '../extra_buttons/extra_buttons.vue'\nimport PostStatusForm from '../post_status_form/post_status_form.vue'\nimport UserCard from '../user_card/user_card.vue'\nimport UserAvatar from '../user_avatar/user_avatar.vue'\nimport AvatarList from '../avatar_list/avatar_list.vue'\nimport Timeago from '../timeago/timeago.vue'\nimport StatusContent from '../status_content/status_content.vue'\nimport StatusPopover from '../status_popover/status_popover.vue'\nimport EmojiReactions from '../emoji_reactions/emoji_reactions.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport { filter, unescape, uniqBy } from 'lodash'\nimport { mapGetters, mapState } from 'vuex'\n\nconst Status = {\n name: 'Status',\n props: [\n 'statusoid',\n 'expandable',\n 'inConversation',\n 'focused',\n 'highlight',\n 'compact',\n 'replies',\n 'isPreview',\n 'noHeading',\n 'inlineExpanded',\n 'showPinned',\n 'inProfile',\n 'profileUserId'\n ],\n data () {\n return {\n replying: false,\n unmuted: false,\n userExpanded: false,\n error: null\n }\n },\n computed: {\n muteWords () {\n return this.mergedConfig.muteWords\n },\n repeaterClass () {\n const user = this.statusoid.user\n return highlightClass(user)\n },\n userClass () {\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n return highlightClass(user)\n },\n deleted () {\n return this.statusoid.deleted\n },\n repeaterStyle () {\n const user = this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userStyle () {\n if (this.noHeading) return\n const user = this.retweet ? (this.statusoid.retweeted_status.user) : this.statusoid.user\n const highlight = this.mergedConfig.highlight\n return highlightStyle(highlight[user.screen_name])\n },\n userProfileLink () {\n return this.generateUserProfileLink(this.status.user.id, this.status.user.screen_name)\n },\n replyProfileLink () {\n if (this.isReply) {\n return this.generateUserProfileLink(this.status.in_reply_to_user_id, this.replyToName)\n }\n },\n retweet () { return !!this.statusoid.retweeted_status },\n retweeter () { return this.statusoid.user.name || this.statusoid.user.screen_name },\n retweeterHtml () { return this.statusoid.user.name_html },\n retweeterProfileLink () { return this.generateUserProfileLink(this.statusoid.user.id, this.statusoid.user.screen_name) },\n status () {\n if (this.retweet) {\n return this.statusoid.retweeted_status\n } else {\n return this.statusoid\n }\n },\n statusFromGlobalRepository () {\n // NOTE: Consider to replace status with statusFromGlobalRepository\n return this.$store.state.statuses.allStatusesObject[this.status.id]\n },\n loggedIn () {\n return !!this.currentUser\n },\n muteWordHits () {\n const statusText = this.status.text.toLowerCase()\n const statusSummary = this.status.summary.toLowerCase()\n const hits = filter(this.muteWords, (muteWord) => {\n return statusText.includes(muteWord.toLowerCase()) || statusSummary.includes(muteWord.toLowerCase())\n })\n\n return hits\n },\n muted () {\n const relationship = this.$store.getters.relationship(this.status.user.id)\n return !this.unmuted && (\n (!(this.inProfile && this.status.user.id === this.profileUserId) && relationship.muting) ||\n (!this.inConversation && this.status.thread_muted) ||\n this.muteWordHits.length > 0)\n },\n hideFilteredStatuses () {\n return this.mergedConfig.hideFilteredStatuses\n },\n hideStatus () {\n return (this.hideReply || this.deleted) || (this.muted && this.hideFilteredStatuses)\n },\n isFocused () {\n // retweet or root of an expanded conversation\n if (this.focused) {\n return true\n } else if (!this.inConversation) {\n return false\n }\n // use conversation highlight only when in conversation\n return this.status.id === this.highlight\n },\n isReply () {\n return !!(this.status.in_reply_to_status_id && this.status.in_reply_to_user_id)\n },\n replyToName () {\n if (this.status.in_reply_to_screen_name) {\n return this.status.in_reply_to_screen_name\n } else {\n const user = this.$store.getters.findUser(this.status.in_reply_to_user_id)\n return user && user.screen_name\n }\n },\n hideReply () {\n if (this.mergedConfig.replyVisibility === 'all') {\n return false\n }\n if (this.inConversation || !this.isReply) {\n return false\n }\n if (this.status.user.id === this.currentUser.id) {\n return false\n }\n if (this.status.type === 'retweet') {\n return false\n }\n const checkFollowing = this.mergedConfig.replyVisibility === 'following'\n for (var i = 0; i < this.status.attentions.length; ++i) {\n if (this.status.user.id === this.status.attentions[i].id) {\n continue\n }\n // There's zero guarantee of this working. If we happen to have that user and their\n // relationship in store then it will work, but there's kinda little chance of having\n // them for people you're not following.\n const relationship = this.$store.state.users.relationships[this.status.attentions[i].id]\n if (checkFollowing && relationship && relationship.following) {\n return false\n }\n if (this.status.attentions[i].id === this.currentUser.id) {\n return false\n }\n }\n return this.status.attentions.length > 0\n },\n replySubject () {\n if (!this.status.summary) return ''\n const decodedSummary = unescape(this.status.summary)\n const behavior = this.mergedConfig.subjectLineBehavior\n const startsWithRe = decodedSummary.match(/^re[: ]/i)\n if ((behavior !== 'noop' && startsWithRe) || behavior === 'masto') {\n return decodedSummary\n } else if (behavior === 'email') {\n return 're: '.concat(decodedSummary)\n } else if (behavior === 'noop') {\n return ''\n }\n },\n combinedFavsAndRepeatsUsers () {\n // Use the status from the global status repository since favs and repeats are saved in it\n const combinedUsers = [].concat(\n this.statusFromGlobalRepository.favoritedBy,\n this.statusFromGlobalRepository.rebloggedBy\n )\n return uniqBy(combinedUsers, 'id')\n },\n tags () {\n return this.status.tags.filter(tagObj => tagObj.hasOwnProperty('name')).map(tagObj => tagObj.name).join(' ')\n },\n hidePostStats () {\n return this.mergedConfig.hidePostStats\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n betterShadow: state => state.interface.browserSupport.cssFilter,\n currentUser: state => state.users.currentUser\n })\n },\n components: {\n FavoriteButton,\n ReactButton,\n RetweetButton,\n ExtraButtons,\n PostStatusForm,\n UserCard,\n UserAvatar,\n AvatarList,\n Timeago,\n StatusPopover,\n EmojiReactions,\n StatusContent\n },\n methods: {\n visibilityIcon (visibility) {\n switch (visibility) {\n case 'private':\n return 'icon-lock'\n case 'unlisted':\n return 'icon-lock-open-alt'\n case 'direct':\n return 'icon-mail-alt'\n default:\n return 'icon-globe'\n }\n },\n showError (error) {\n this.error = error\n },\n clearError () {\n this.error = undefined\n },\n toggleReplying () {\n this.replying = !this.replying\n },\n gotoOriginal (id) {\n if (this.inConversation) {\n this.$emit('goto', id)\n }\n },\n toggleExpanded () {\n this.$emit('toggleExpanded')\n },\n toggleMute () {\n this.unmuted = !this.unmuted\n },\n toggleUserExpanded () {\n this.userExpanded = !this.userExpanded\n },\n generateUserProfileLink (id, name) {\n return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)\n }\n },\n watch: {\n 'highlight': function (id) {\n if (this.status.id === id) {\n let rect = this.$el.getBoundingClientRect()\n if (rect.top < 100) {\n // Post is above screen, match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.height >= (window.innerHeight - 50)) {\n // Post we want to see is taller than screen so match its top to screen top\n window.scrollBy(0, rect.top - 100)\n } else if (rect.bottom > window.innerHeight - 50) {\n // Post is below screen, match its bottom to screen bottom\n window.scrollBy(0, rect.bottom - window.innerHeight + 50)\n }\n }\n },\n 'status.repeat_num': function (num) {\n // refetch repeats when repeat_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.rebloggedBy && this.statusFromGlobalRepository.rebloggedBy.length !== num) {\n this.$store.dispatch('fetchRepeats', this.status.id)\n }\n },\n 'status.fave_num': function (num) {\n // refetch favs when fave_num is changed in any way\n if (this.isFocused && this.statusFromGlobalRepository.favoritedBy && this.statusFromGlobalRepository.favoritedBy.length !== num) {\n this.$store.dispatch('fetchFavs', this.status.id)\n }\n }\n },\n filters: {\n capitalize: function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n }\n }\n}\n\nexport default Status\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./status.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./status.js\"\nimport __vue_script__ from \"!!babel-loader!./status.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0f001f68\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./status.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.hideStatus)?_c('div',{staticClass:\"status-el\",class:[{ 'status-el_focused': _vm.isFocused }, { 'status-conversation': _vm.inlineExpanded }]},[(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \"),_c('i',{staticClass:\"button-icon icon-cancel\",on:{\"click\":_vm.clearError}})]):_vm._e(),_vm._v(\" \"),(_vm.muted && !_vm.isPreview)?[_c('div',{staticClass:\"media status container muted\"},[_c('small',[_c('router-link',{attrs:{\"to\":_vm.userProfileLink}},[_vm._v(\"\\n \"+_vm._s(_vm.status.user.screen_name)+\"\\n \")])],1),_vm._v(\" \"),_c('small',{staticClass:\"muteWords\"},[_vm._v(_vm._s(_vm.muteWordHits.join(', ')))]),_vm._v(\" \"),_c('a',{staticClass:\"unmute\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMute($event)}}},[_c('i',{staticClass:\"button-icon icon-eye-off\"})])])]:[(_vm.showPinned)?_c('div',{staticClass:\"status-pin\"},[_c('i',{staticClass:\"fa icon-pin faint\"}),_vm._v(\" \"),_c('span',{staticClass:\"faint\"},[_vm._v(_vm._s(_vm.$t('status.pinned')))])]):_vm._e(),_vm._v(\" \"),(_vm.retweet && !_vm.noHeading && !_vm.inConversation)?_c('div',{staticClass:\"media container retweet-info\",class:[_vm.repeaterClass, { highlighted: _vm.repeaterStyle }],style:([_vm.repeaterStyle])},[(_vm.retweet)?_c('UserAvatar',{staticClass:\"media-left\",attrs:{\"better-shadow\":_vm.betterShadow,\"user\":_vm.statusoid.user}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"media-body faint\"},[_c('span',{staticClass:\"user-name\"},[(_vm.retweeterHtml)?_c('router-link',{attrs:{\"to\":_vm.retweeterProfileLink},domProps:{\"innerHTML\":_vm._s(_vm.retweeterHtml)}}):_c('router-link',{attrs:{\"to\":_vm.retweeterProfileLink}},[_vm._v(_vm._s(_vm.retweeter))])],1),_vm._v(\" \"),_c('i',{staticClass:\"fa icon-retweet retweeted\",attrs:{\"title\":_vm.$t('tool_tip.repeat')}}),_vm._v(\"\\n \"+_vm._s(_vm.$t('timeline.repeated'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"media status\",class:[_vm.userClass, { highlighted: _vm.userStyle, 'is-retweet': _vm.retweet && !_vm.inConversation }],style:([ _vm.userStyle ]),attrs:{\"data-tags\":_vm.tags}},[(!_vm.noHeading)?_c('div',{staticClass:\"media-left\"},[_c('router-link',{attrs:{\"to\":_vm.userProfileLink},nativeOn:{\"!click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleUserExpanded($event)}}},[_c('UserAvatar',{attrs:{\"compact\":_vm.compact,\"better-shadow\":_vm.betterShadow,\"user\":_vm.status.user}})],1)],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"status-body\"},[(_vm.userExpanded)?_c('UserCard',{staticClass:\"status-usercard\",attrs:{\"user-id\":_vm.status.user.id,\"rounded\":true,\"bordered\":true}}):_vm._e(),_vm._v(\" \"),(!_vm.noHeading)?_c('div',{staticClass:\"media-heading\"},[_c('div',{staticClass:\"heading-name-row\"},[_c('div',{staticClass:\"name-and-account-name\"},[(_vm.status.user.name_html)?_c('h4',{staticClass:\"user-name\",domProps:{\"innerHTML\":_vm._s(_vm.status.user.name_html)}}):_c('h4',{staticClass:\"user-name\"},[_vm._v(\"\\n \"+_vm._s(_vm.status.user.name)+\"\\n \")]),_vm._v(\" \"),_c('router-link',{staticClass:\"account-name\",attrs:{\"to\":_vm.userProfileLink}},[_vm._v(\"\\n \"+_vm._s(_vm.status.user.screen_name)+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"heading-right\"},[_c('router-link',{staticClass:\"timeago faint-link\",attrs:{\"to\":{ name: 'conversation', params: { id: _vm.status.id } }}},[_c('Timeago',{attrs:{\"time\":_vm.status.created_at,\"auto-update\":60}})],1),_vm._v(\" \"),(_vm.status.visibility)?_c('div',{staticClass:\"button-icon visibility-icon\"},[_c('i',{class:_vm.visibilityIcon(_vm.status.visibility),attrs:{\"title\":_vm._f(\"capitalize\")(_vm.status.visibility)}})]):_vm._e(),_vm._v(\" \"),(!_vm.status.is_local && !_vm.isPreview)?_c('a',{staticClass:\"source_url\",attrs:{\"href\":_vm.status.external_url,\"target\":\"_blank\",\"title\":\"Source\"}},[_c('i',{staticClass:\"button-icon icon-link-ext-alt\"})]):_vm._e(),_vm._v(\" \"),(_vm.expandable && !_vm.isPreview)?[_c('a',{attrs:{\"href\":\"#\",\"title\":\"Expand\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleExpanded($event)}}},[_c('i',{staticClass:\"button-icon icon-plus-squared\"})])]:_vm._e(),_vm._v(\" \"),(_vm.unmuted)?_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMute($event)}}},[_c('i',{staticClass:\"button-icon icon-eye-off\"})]):_vm._e()],2)]),_vm._v(\" \"),_c('div',{staticClass:\"heading-reply-row\"},[(_vm.isReply)?_c('div',{staticClass:\"reply-to-and-accountname\"},[(!_vm.isPreview)?_c('StatusPopover',{staticClass:\"reply-to-popover\",staticStyle:{\"min-width\":\"0\"},attrs:{\"status-id\":_vm.status.in_reply_to_status_id}},[_c('a',{staticClass:\"reply-to\",attrs:{\"href\":\"#\",\"aria-label\":_vm.$t('tool_tip.reply')},on:{\"click\":function($event){$event.preventDefault();_vm.gotoOriginal(_vm.status.in_reply_to_status_id)}}},[_c('i',{staticClass:\"button-icon icon-reply\"}),_vm._v(\" \"),_c('span',{staticClass:\"faint-link reply-to-text\"},[_vm._v(_vm._s(_vm.$t('status.reply_to')))])])]):_c('span',{staticClass:\"reply-to\"},[_c('span',{staticClass:\"reply-to-text\"},[_vm._v(_vm._s(_vm.$t('status.reply_to')))])]),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":_vm.replyProfileLink}},[_vm._v(\"\\n \"+_vm._s(_vm.replyToName)+\"\\n \")]),_vm._v(\" \"),(_vm.replies && _vm.replies.length)?_c('span',{staticClass:\"faint replies-separator\"},[_vm._v(\"\\n -\\n \")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.inConversation && !_vm.isPreview && _vm.replies && _vm.replies.length)?_c('div',{staticClass:\"replies\"},[_c('span',{staticClass:\"faint\"},[_vm._v(_vm._s(_vm.$t('status.replies_list')))]),_vm._v(\" \"),_vm._l((_vm.replies),function(reply){return _c('StatusPopover',{key:reply.id,attrs:{\"status-id\":reply.id}},[_c('a',{staticClass:\"reply-link\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.gotoOriginal(reply.id)}}},[_vm._v(_vm._s(reply.name))])])})],2):_vm._e()])]):_vm._e(),_vm._v(\" \"),_c('StatusContent',{attrs:{\"status\":_vm.status,\"no-heading\":_vm.noHeading,\"highlight\":_vm.highlight,\"focused\":_vm.isFocused}}),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\"}},[(!_vm.hidePostStats && _vm.isFocused && _vm.combinedFavsAndRepeatsUsers.length > 0)?_c('div',{staticClass:\"favs-repeated-users\"},[_c('div',{staticClass:\"stats\"},[(_vm.statusFromGlobalRepository.rebloggedBy && _vm.statusFromGlobalRepository.rebloggedBy.length > 0)?_c('div',{staticClass:\"stat-count\"},[_c('a',{staticClass:\"stat-title\"},[_vm._v(_vm._s(_vm.$t('status.repeats')))]),_vm._v(\" \"),_c('div',{staticClass:\"stat-number\"},[_vm._v(\"\\n \"+_vm._s(_vm.statusFromGlobalRepository.rebloggedBy.length)+\"\\n \")])]):_vm._e(),_vm._v(\" \"),(_vm.statusFromGlobalRepository.favoritedBy && _vm.statusFromGlobalRepository.favoritedBy.length > 0)?_c('div',{staticClass:\"stat-count\"},[_c('a',{staticClass:\"stat-title\"},[_vm._v(_vm._s(_vm.$t('status.favorites')))]),_vm._v(\" \"),_c('div',{staticClass:\"stat-number\"},[_vm._v(\"\\n \"+_vm._s(_vm.statusFromGlobalRepository.favoritedBy.length)+\"\\n \")])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"avatar-row\"},[_c('AvatarList',{attrs:{\"users\":_vm.combinedFavsAndRepeatsUsers}})],1)])]):_vm._e()]),_vm._v(\" \"),((_vm.mergedConfig.emojiReactionsOnTimeline || _vm.isFocused) && (!_vm.noHeading && !_vm.isPreview))?_c('EmojiReactions',{attrs:{\"status\":_vm.status}}):_vm._e(),_vm._v(\" \"),(!_vm.noHeading && !_vm.isPreview)?_c('div',{staticClass:\"status-actions media-body\"},[_c('div',[(_vm.loggedIn)?_c('i',{staticClass:\"button-icon icon-reply\",class:{'button-icon-active': _vm.replying},attrs:{\"title\":_vm.$t('tool_tip.reply')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleReplying($event)}}}):_c('i',{staticClass:\"button-icon button-icon-disabled icon-reply\",attrs:{\"title\":_vm.$t('tool_tip.reply')}}),_vm._v(\" \"),(_vm.status.replies_count > 0)?_c('span',[_vm._v(_vm._s(_vm.status.replies_count))]):_vm._e()]),_vm._v(\" \"),_c('retweet-button',{attrs:{\"visibility\":_vm.status.visibility,\"logged-in\":_vm.loggedIn,\"status\":_vm.status}}),_vm._v(\" \"),_c('favorite-button',{attrs:{\"logged-in\":_vm.loggedIn,\"status\":_vm.status}}),_vm._v(\" \"),(_vm.loggedIn)?_c('ReactButton',{attrs:{\"status\":_vm.status}}):_vm._e(),_vm._v(\" \"),_c('extra-buttons',{attrs:{\"status\":_vm.status},on:{\"onError\":_vm.showError,\"onSuccess\":_vm.clearError}})],1):_vm._e()],1)]),_vm._v(\" \"),(_vm.replying)?_c('div',{staticClass:\"container\"},[_c('PostStatusForm',{staticClass:\"reply-body\",attrs:{\"reply-to\":_vm.status.id,\"attentions\":_vm.status.attentions,\"replied-user\":_vm.status.user,\"copy-message-scope\":_vm.status.visibility,\"subject\":_vm.replySubject},on:{\"posted\":_vm.toggleReplying}})],1):_vm._e()]],2):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\nconst Popover = {\n name: 'Popover',\n props: {\n // Action to trigger popover: either 'hover' or 'click'\n trigger: String,\n // Either 'top' or 'bottom'\n placement: String,\n // Takes object with properties 'x' and 'y', values of these can be\n // 'container' for using offsetParent as boundaries for either axis\n // or 'viewport'\n boundTo: Object,\n // Takes a top/bottom/left/right object, how much space to leave\n // between boundary and popover element\n margin: Object,\n // Takes a x/y object and tells how many pixels to offset from\n // anchor point on either axis\n offset: Object,\n // Additional styles you may want for the popover container\n popoverClass: String\n },\n data () {\n return {\n hidden: true,\n styles: { opacity: 0 },\n oldSize: { width: 0, height: 0 }\n }\n },\n methods: {\n updateStyles () {\n if (this.hidden) {\n this.styles = {\n opacity: 0\n }\n return\n }\n\n // Popover will be anchored around this element, trigger ref is the container, so\n // its children are what are inside the slot. Expect only one slot=\"trigger\".\n const anchorEl = (this.$refs.trigger && this.$refs.trigger.children[0]) || this.$el\n const screenBox = anchorEl.getBoundingClientRect()\n // Screen position of the origin point for popover\n const origin = { x: screenBox.left + screenBox.width * 0.5, y: screenBox.top }\n const content = this.$refs.content\n // Minor optimization, don't call a slow reflow call if we don't have to\n const parentBounds = this.boundTo &&\n (this.boundTo.x === 'container' || this.boundTo.y === 'container') &&\n this.$el.offsetParent.getBoundingClientRect()\n const margin = this.margin || {}\n\n // What are the screen bounds for the popover? Viewport vs container\n // when using viewport, using default margin values to dodge the navbar\n const xBounds = this.boundTo && this.boundTo.x === 'container' ? {\n min: parentBounds.left + (margin.left || 0),\n max: parentBounds.right - (margin.right || 0)\n } : {\n min: 0 + (margin.left || 10),\n max: window.innerWidth - (margin.right || 10)\n }\n\n const yBounds = this.boundTo && this.boundTo.y === 'container' ? {\n min: parentBounds.top + (margin.top || 0),\n max: parentBounds.bottom - (margin.bottom || 0)\n } : {\n min: 0 + (margin.top || 50),\n max: window.innerHeight - (margin.bottom || 5)\n }\n\n let horizOffset = 0\n\n // If overflowing from left, move it so that it doesn't\n if ((origin.x - content.offsetWidth * 0.5) < xBounds.min) {\n horizOffset += -(origin.x - content.offsetWidth * 0.5) + xBounds.min\n }\n\n // If overflowing from right, move it so that it doesn't\n if ((origin.x + horizOffset + content.offsetWidth * 0.5) > xBounds.max) {\n horizOffset -= (origin.x + horizOffset + content.offsetWidth * 0.5) - xBounds.max\n }\n\n // Default to whatever user wished with placement prop\n let usingTop = this.placement !== 'bottom'\n\n // Handle special cases, first force to displaying on top if there's not space on bottom,\n // regardless of what placement value was. Then check if there's not space on top, and\n // force to bottom, again regardless of what placement value was.\n if (origin.y + content.offsetHeight > yBounds.max) usingTop = true\n if (origin.y - content.offsetHeight < yBounds.min) usingTop = false\n\n const yOffset = (this.offset && this.offset.y) || 0\n const translateY = usingTop\n ? -anchorEl.offsetHeight - yOffset - content.offsetHeight\n : yOffset\n\n const xOffset = (this.offset && this.offset.x) || 0\n const translateX = (anchorEl.offsetWidth * 0.5) - content.offsetWidth * 0.5 + horizOffset + xOffset\n\n // Note, separate translateX and translateY avoids blurry text on chromium,\n // single translate or translate3d resulted in blurry text.\n this.styles = {\n opacity: 1,\n transform: `translateX(${Math.floor(translateX)}px) translateY(${Math.floor(translateY)}px)`\n }\n },\n showPopover () {\n if (this.hidden) this.$emit('show')\n this.hidden = false\n this.$nextTick(this.updateStyles)\n },\n hidePopover () {\n if (!this.hidden) this.$emit('close')\n this.hidden = true\n this.styles = { opacity: 0 }\n },\n onMouseenter (e) {\n if (this.trigger === 'hover') this.showPopover()\n },\n onMouseleave (e) {\n if (this.trigger === 'hover') this.hidePopover()\n },\n onClick (e) {\n if (this.trigger === 'click') {\n if (this.hidden) {\n this.showPopover()\n } else {\n this.hidePopover()\n }\n }\n },\n onClickOutside (e) {\n if (this.hidden) return\n if (this.$el.contains(e.target)) return\n this.hidePopover()\n }\n },\n updated () {\n // Monitor changes to content size, update styles only when content sizes have changed,\n // that should be the only time we need to move the popover box if we don't care about scroll\n // or resize\n const content = this.$refs.content\n if (!content) return\n if (this.oldSize.width !== content.offsetWidth || this.oldSize.height !== content.offsetHeight) {\n this.updateStyles()\n this.oldSize = { width: content.offsetWidth, height: content.offsetHeight }\n }\n },\n created () {\n document.addEventListener('click', this.onClickOutside)\n },\n destroyed () {\n document.removeEventListener('click', this.onClickOutside)\n this.hidePopover()\n }\n}\n\nexport default Popover\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./popover.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./popover.js\"\nimport __vue_script__ from \"!!babel-loader!./popover.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-10f1984d\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./popover.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{on:{\"mouseenter\":_vm.onMouseenter,\"mouseleave\":_vm.onMouseleave}},[_c('div',{ref:\"trigger\",on:{\"click\":_vm.onClick}},[_vm._t(\"trigger\")],2),_vm._v(\" \"),(!_vm.hidden)?_c('div',{ref:\"content\",staticClass:\"popover\",class:_vm.popoverClass,style:(_vm.styles)},[_vm._t(\"content\",null,{close:_vm.hidePopover})],2):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","export const SECOND = 1000\nexport const MINUTE = 60 * SECOND\nexport const HOUR = 60 * MINUTE\nexport const DAY = 24 * HOUR\nexport const WEEK = 7 * DAY\nexport const MONTH = 30 * DAY\nexport const YEAR = 365.25 * DAY\n\nexport const relativeTime = (date, nowThreshold = 1) => {\n if (typeof date === 'string') date = Date.parse(date)\n const round = Date.now() > date ? Math.floor : Math.ceil\n const d = Math.abs(Date.now() - date)\n let r = { num: round(d / YEAR), key: 'time.years' }\n if (d < nowThreshold * SECOND) {\n r.num = 0\n r.key = 'time.now'\n } else if (d < MINUTE) {\n r.num = round(d / SECOND)\n r.key = 'time.seconds'\n } else if (d < HOUR) {\n r.num = round(d / MINUTE)\n r.key = 'time.minutes'\n } else if (d < DAY) {\n r.num = round(d / HOUR)\n r.key = 'time.hours'\n } else if (d < WEEK) {\n r.num = round(d / DAY)\n r.key = 'time.days'\n } else if (d < MONTH) {\n r.num = round(d / WEEK)\n r.key = 'time.weeks'\n } else if (d < YEAR) {\n r.num = round(d / MONTH)\n r.key = 'time.months'\n }\n // Remove plural form when singular\n if (r.num === 1) r.key = r.key.slice(0, -1)\n return r\n}\n\nexport const relativeTimeShort = (date, nowThreshold = 1) => {\n const r = relativeTime(date, nowThreshold)\n r.key += '_short'\n return r\n}\n","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./progress_button.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./progress_button.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-9f751ae6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./progress_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{attrs:{\"disabled\":_vm.progress || _vm.disabled},on:{\"click\":_vm.onClick}},[(_vm.progress && _vm.$slots.progress)?[_vm._t(\"progress\")]:[_vm._t(\"default\")]],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { hex2rgb } from '../color_convert/color_convert.js'\nconst highlightStyle = (prefs) => {\n if (prefs === undefined) return\n const { color, type } = prefs\n if (typeof color !== 'string') return\n const rgb = hex2rgb(color)\n if (rgb == null) return\n const solidColor = `rgb(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)})`\n const tintColor = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .1)`\n const tintColor2 = `rgba(${Math.floor(rgb.r)}, ${Math.floor(rgb.g)}, ${Math.floor(rgb.b)}, .2)`\n if (type === 'striped') {\n return {\n backgroundImage: [\n 'repeating-linear-gradient(135deg,',\n `${tintColor} ,`,\n `${tintColor} 20px,`,\n `${tintColor2} 20px,`,\n `${tintColor2} 40px`\n ].join(' '),\n backgroundPosition: '0 0'\n }\n } else if (type === 'solid') {\n return {\n backgroundColor: tintColor2\n }\n } else if (type === 'side') {\n return {\n backgroundImage: [\n 'linear-gradient(to right,',\n `${solidColor} ,`,\n `${solidColor} 2px,`,\n `transparent 6px`\n ].join(' '),\n backgroundPosition: '0 0'\n }\n }\n}\n\nconst highlightClass = (user) => {\n return 'USER____' + user.screen_name\n .replace(/\\./g, '_')\n .replace(/@/g, '_AT_')\n}\n\nexport {\n highlightClass,\n highlightStyle\n}\n","import Vue from 'vue'\n\nimport './tab_switcher.scss'\n\nexport default Vue.component('tab-switcher', {\n name: 'TabSwitcher',\n props: {\n renderOnlyFocused: {\n required: false,\n type: Boolean,\n default: false\n },\n onSwitch: {\n required: false,\n type: Function,\n default: undefined\n },\n activeTab: {\n required: false,\n type: String,\n default: undefined\n },\n scrollableTabs: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n active: this.$slots.default.findIndex(_ => _.tag)\n }\n },\n computed: {\n activeIndex () {\n // In case of controlled component\n if (this.activeTab) {\n return this.$slots.default.findIndex(slot => this.activeTab === slot.key)\n } else {\n return this.active\n }\n }\n },\n beforeUpdate () {\n const currentSlot = this.$slots.default[this.active]\n if (!currentSlot.tag) {\n this.active = this.$slots.default.findIndex(_ => _.tag)\n }\n },\n methods: {\n activateTab (index) {\n return (e) => {\n e.preventDefault()\n if (typeof this.onSwitch === 'function') {\n this.onSwitch.call(null, this.$slots.default[index].key)\n }\n this.active = index\n }\n }\n },\n render (h) {\n const tabs = this.$slots.default\n .map((slot, index) => {\n if (!slot.tag) return\n const classesTab = ['tab']\n const classesWrapper = ['tab-wrapper']\n\n if (this.activeIndex === index) {\n classesTab.push('active')\n classesWrapper.push('active')\n }\n if (slot.data.attrs.image) {\n return (\n

\n )\n }\n return (\n
\n \n {slot.data.attrs.label}\n
\n )\n })\n\n const contents = this.$slots.default.map((slot, index) => {\n if (!slot.tag) return\n const active = this.activeIndex === index\n if (this.renderOnlyFocused) {\n return active\n ?
{slot}
\n :
\n }\n return
{slot}
\n })\n\n return (\n
\n
\n {tabs}\n
\n
\n {contents}\n
\n
\n )\n }\n})\n","/* eslint-env browser */\nimport statusPosterService from '../../services/status_poster/status_poster.service.js'\nimport fileSizeFormatService from '../../services/file_size_format/file_size_format.js'\n\nconst mediaUpload = {\n data () {\n return {\n uploading: false,\n uploadReady: true\n }\n },\n methods: {\n uploadFile (file) {\n const self = this\n const store = this.$store\n if (file.size > store.state.instance.uploadlimit) {\n const filesize = fileSizeFormatService.fileSizeFormat(file.size)\n const allowedsize = fileSizeFormatService.fileSizeFormat(store.state.instance.uploadlimit)\n self.$emit('upload-failed', 'file_too_big', { filesize: filesize.num, filesizeunit: filesize.unit, allowedsize: allowedsize.num, allowedsizeunit: allowedsize.unit })\n return\n }\n const formData = new FormData()\n formData.append('file', file)\n\n self.$emit('uploading')\n self.uploading = true\n\n statusPosterService.uploadMedia({ store, formData })\n .then((fileData) => {\n self.$emit('uploaded', fileData)\n self.uploading = false\n }, (error) => { // eslint-disable-line handle-callback-err\n self.$emit('upload-failed', 'default')\n self.uploading = false\n })\n },\n fileDrop (e) {\n if (e.dataTransfer.files.length > 0) {\n e.preventDefault() // allow dropping text like before\n this.uploadFile(e.dataTransfer.files[0])\n }\n },\n fileDrag (e) {\n let types = e.dataTransfer.types\n if (types.contains('Files')) {\n e.dataTransfer.dropEffect = 'copy'\n } else {\n e.dataTransfer.dropEffect = 'none'\n }\n },\n clearFile () {\n this.uploadReady = false\n this.$nextTick(() => {\n this.uploadReady = true\n })\n },\n change ({ target }) {\n for (var i = 0; i < target.files.length; i++) {\n let file = target.files[i]\n this.uploadFile(file)\n }\n }\n },\n props: [\n 'dropFiles'\n ],\n watch: {\n 'dropFiles': function (fileInfos) {\n if (!this.uploading) {\n this.uploadFile(fileInfos[0])\n }\n }\n }\n}\n\nexport default mediaUpload\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./media_upload.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./media_upload.js\"\nimport __vue_script__ from \"!!babel-loader!./media_upload.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-74382032\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./media_upload.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media-upload\",on:{\"drop\":[function($event){$event.preventDefault();},_vm.fileDrop],\"dragover\":function($event){$event.preventDefault();return _vm.fileDrag($event)}}},[_c('label',{staticClass:\"label\",attrs:{\"title\":_vm.$t('tool_tip.media_upload')}},[(_vm.uploading)?_c('i',{staticClass:\"progress-icon icon-spin4 animate-spin\"}):_vm._e(),_vm._v(\" \"),(!_vm.uploading)?_c('i',{staticClass:\"new-icon icon-upload\"}):_vm._e(),_vm._v(\" \"),(_vm.uploadReady)?_c('input',{staticStyle:{\"position\":\"fixed\",\"top\":\"-100em\"},attrs:{\"type\":\"file\",\"multiple\":\"true\"},on:{\"change\":_vm.change}}):_vm._e()])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import * as DateUtils from 'src/services/date_utils/date_utils.js'\nimport { uniq } from 'lodash'\n\nexport default {\n name: 'PollForm',\n props: ['visible'],\n data: () => ({\n pollType: 'single',\n options: ['', ''],\n expiryAmount: 10,\n expiryUnit: 'minutes'\n }),\n computed: {\n pollLimits () {\n return this.$store.state.instance.pollLimits\n },\n maxOptions () {\n return this.pollLimits.max_options\n },\n maxLength () {\n return this.pollLimits.max_option_chars\n },\n expiryUnits () {\n const allUnits = ['minutes', 'hours', 'days']\n const expiry = this.convertExpiryFromUnit\n return allUnits.filter(\n unit => this.pollLimits.max_expiration >= expiry(unit, 1)\n )\n },\n minExpirationInCurrentUnit () {\n return Math.ceil(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.min_expiration\n )\n )\n },\n maxExpirationInCurrentUnit () {\n return Math.floor(\n this.convertExpiryToUnit(\n this.expiryUnit,\n this.pollLimits.max_expiration\n )\n )\n }\n },\n methods: {\n clear () {\n this.pollType = 'single'\n this.options = ['', '']\n this.expiryAmount = 10\n this.expiryUnit = 'minutes'\n },\n nextOption (index) {\n const element = this.$el.querySelector(`#poll-${index + 1}`)\n if (element) {\n element.focus()\n } else {\n // Try adding an option and try focusing on it\n const addedOption = this.addOption()\n if (addedOption) {\n this.$nextTick(function () {\n this.nextOption(index)\n })\n }\n }\n },\n addOption () {\n if (this.options.length < this.maxOptions) {\n this.options.push('')\n return true\n }\n return false\n },\n deleteOption (index, event) {\n if (this.options.length > 2) {\n this.options.splice(index, 1)\n }\n },\n convertExpiryToUnit (unit, amount) {\n // Note: we want seconds and not milliseconds\n switch (unit) {\n case 'minutes': return (1000 * amount) / DateUtils.MINUTE\n case 'hours': return (1000 * amount) / DateUtils.HOUR\n case 'days': return (1000 * amount) / DateUtils.DAY\n }\n },\n convertExpiryFromUnit (unit, amount) {\n // Note: we want seconds and not milliseconds\n switch (unit) {\n case 'minutes': return 0.001 * amount * DateUtils.MINUTE\n case 'hours': return 0.001 * amount * DateUtils.HOUR\n case 'days': return 0.001 * amount * DateUtils.DAY\n }\n },\n expiryAmountChange () {\n this.expiryAmount =\n Math.max(this.minExpirationInCurrentUnit, this.expiryAmount)\n this.expiryAmount =\n Math.min(this.maxExpirationInCurrentUnit, this.expiryAmount)\n this.updatePollToParent()\n },\n updatePollToParent () {\n const expiresIn = this.convertExpiryFromUnit(\n this.expiryUnit,\n this.expiryAmount\n )\n\n const options = uniq(this.options.filter(option => option !== ''))\n if (options.length < 2) {\n this.$emit('update-poll', { error: this.$t('polls.not_enough_options') })\n return\n }\n this.$emit('update-poll', {\n options,\n multiple: this.pollType === 'multiple',\n expiresIn\n })\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./poll_form.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./poll_form.js\"\nimport __vue_script__ from \"!!babel-loader!./poll_form.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1f896331\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./poll_form.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:\"poll-form\"},[_vm._l((_vm.options),function(option,index){return _c('div',{key:index,staticClass:\"poll-option\"},[_c('div',{staticClass:\"input-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.options[index]),expression:\"options[index]\"}],staticClass:\"poll-option-input\",attrs:{\"id\":(\"poll-\" + index),\"type\":\"text\",\"placeholder\":_vm.$t('polls.option'),\"maxlength\":_vm.maxLength},domProps:{\"value\":(_vm.options[index])},on:{\"change\":_vm.updatePollToParent,\"keydown\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }$event.stopPropagation();$event.preventDefault();_vm.nextOption(index)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.options, index, $event.target.value)}}})]),_vm._v(\" \"),(_vm.options.length > 2)?_c('div',{staticClass:\"icon-container\"},[_c('i',{staticClass:\"icon-cancel\",on:{\"click\":function($event){_vm.deleteOption(index)}}})]):_vm._e()])}),_vm._v(\" \"),(_vm.options.length < _vm.maxOptions)?_c('a',{staticClass:\"add-option faint\",on:{\"click\":_vm.addOption}},[_c('i',{staticClass:\"icon-plus\"}),_vm._v(\"\\n \"+_vm._s(_vm.$t(\"polls.add_option\"))+\"\\n \")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"poll-type-expiry\"},[_c('div',{staticClass:\"poll-type\",attrs:{\"title\":_vm.$t('polls.type')}},[_c('label',{staticClass:\"select\",attrs:{\"for\":\"poll-type-selector\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.pollType),expression:\"pollType\"}],staticClass:\"select\",on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.pollType=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.updatePollToParent]}},[_c('option',{attrs:{\"value\":\"single\"}},[_vm._v(_vm._s(_vm.$t('polls.single_choice')))]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"multiple\"}},[_vm._v(_vm._s(_vm.$t('polls.multiple_choices')))])]),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]),_vm._v(\" \"),_c('div',{staticClass:\"poll-expiry\",attrs:{\"title\":_vm.$t('polls.expiry')}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.expiryAmount),expression:\"expiryAmount\"}],staticClass:\"expiry-amount hide-number-spinner\",attrs:{\"type\":\"number\",\"min\":_vm.minExpirationInCurrentUnit,\"max\":_vm.maxExpirationInCurrentUnit},domProps:{\"value\":(_vm.expiryAmount)},on:{\"change\":_vm.expiryAmountChange,\"input\":function($event){if($event.target.composing){ return; }_vm.expiryAmount=$event.target.value}}}),_vm._v(\" \"),_c('label',{staticClass:\"expiry-unit select\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.expiryUnit),expression:\"expiryUnit\"}],on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.expiryUnit=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.expiryAmountChange]}},_vm._l((_vm.expiryUnits),function(unit){return _c('option',{key:unit,domProps:{\"value\":unit}},[_vm._v(\"\\n \"+_vm._s(_vm.$t((\"time.\" + unit + \"_short\"), ['']))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])])])],2):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import statusPoster from '../../services/status_poster/status_poster.service.js'\nimport MediaUpload from '../media_upload/media_upload.vue'\nimport ScopeSelector from '../scope_selector/scope_selector.vue'\nimport EmojiInput from '../emoji_input/emoji_input.vue'\nimport PollForm from '../poll/poll_form.vue'\nimport fileTypeService from '../../services/file_type/file_type.service.js'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport { reject, map, uniqBy } from 'lodash'\nimport suggestor from '../emoji_input/suggestor.js'\nimport { mapGetters } from 'vuex'\nimport Checkbox from '../checkbox/checkbox.vue'\n\nconst buildMentionsString = ({ user, attentions = [] }, currentUser) => {\n let allAttentions = [...attentions]\n\n allAttentions.unshift(user)\n\n allAttentions = uniqBy(allAttentions, 'id')\n allAttentions = reject(allAttentions, { id: currentUser.id })\n\n let mentions = map(allAttentions, (attention) => {\n return `@${attention.screen_name}`\n })\n\n return mentions.length > 0 ? mentions.join(' ') + ' ' : ''\n}\n\nconst PostStatusForm = {\n props: [\n 'replyTo',\n 'repliedUser',\n 'attentions',\n 'copyMessageScope',\n 'subject'\n ],\n components: {\n MediaUpload,\n EmojiInput,\n PollForm,\n ScopeSelector,\n Checkbox\n },\n mounted () {\n this.resize(this.$refs.textarea)\n const textLength = this.$refs.textarea.value.length\n this.$refs.textarea.setSelectionRange(textLength, textLength)\n\n if (this.replyTo) {\n this.$refs.textarea.focus()\n }\n },\n data () {\n const preset = this.$route.query.message\n let statusText = preset || ''\n\n const { scopeCopy } = this.$store.getters.mergedConfig\n\n if (this.replyTo) {\n const currentUser = this.$store.state.users.currentUser\n statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)\n }\n\n const scope = ((this.copyMessageScope && scopeCopy) || this.copyMessageScope === 'direct')\n ? this.copyMessageScope\n : this.$store.state.users.currentUser.default_scope\n\n const { postContentType: contentType } = this.$store.getters.mergedConfig\n\n return {\n dropFiles: [],\n submitDisabled: false,\n error: null,\n posting: false,\n highlighted: 0,\n newStatus: {\n spoilerText: this.subject || '',\n status: statusText,\n nsfw: false,\n files: [],\n poll: {},\n visibility: scope,\n contentType\n },\n caret: 0,\n pollFormVisible: false\n }\n },\n computed: {\n users () {\n return this.$store.state.users.users\n },\n userDefaultScope () {\n return this.$store.state.users.currentUser.default_scope\n },\n showAllScopes () {\n return !this.mergedConfig.minimalScopesMode\n },\n emojiUserSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ],\n users: this.$store.state.users.users,\n updateUsersList: (input) => this.$store.dispatch('searchUsers', input)\n })\n },\n emojiSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ]\n })\n },\n emoji () {\n return this.$store.state.instance.emoji || []\n },\n customEmoji () {\n return this.$store.state.instance.customEmoji || []\n },\n statusLength () {\n return this.newStatus.status.length\n },\n spoilerTextLength () {\n return this.newStatus.spoilerText.length\n },\n statusLengthLimit () {\n return this.$store.state.instance.textlimit\n },\n hasStatusLengthLimit () {\n return this.statusLengthLimit > 0\n },\n charactersLeft () {\n return this.statusLengthLimit - (this.statusLength + this.spoilerTextLength)\n },\n isOverLengthLimit () {\n return this.hasStatusLengthLimit && (this.charactersLeft < 0)\n },\n minimalScopesMode () {\n return this.$store.state.instance.minimalScopesMode\n },\n alwaysShowSubject () {\n return this.mergedConfig.alwaysShowSubjectInput\n },\n postFormats () {\n return this.$store.state.instance.postFormats || []\n },\n safeDMEnabled () {\n return this.$store.state.instance.safeDM\n },\n pollsAvailable () {\n return this.$store.state.instance.pollsAvailable &&\n this.$store.state.instance.pollLimits.max_options >= 2\n },\n hideScopeNotice () {\n return this.$store.getters.mergedConfig.hideScopeNotice\n },\n pollContentError () {\n return this.pollFormVisible &&\n this.newStatus.poll &&\n this.newStatus.poll.error\n },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n postStatus (newStatus) {\n if (this.posting) { return }\n if (this.submitDisabled) { return }\n\n if (this.newStatus.status === '') {\n if (this.newStatus.files.length === 0) {\n this.error = 'Cannot post an empty status with no files'\n return\n }\n }\n\n const poll = this.pollFormVisible ? this.newStatus.poll : {}\n if (this.pollContentError) {\n this.error = this.pollContentError\n return\n }\n\n this.posting = true\n statusPoster.postStatus({\n status: newStatus.status,\n spoilerText: newStatus.spoilerText || null,\n visibility: newStatus.visibility,\n sensitive: newStatus.nsfw,\n media: newStatus.files,\n store: this.$store,\n inReplyToStatusId: this.replyTo,\n contentType: newStatus.contentType,\n poll\n }).then((data) => {\n if (!data.error) {\n this.newStatus = {\n status: '',\n spoilerText: '',\n files: [],\n visibility: newStatus.visibility,\n contentType: newStatus.contentType,\n poll: {}\n }\n this.pollFormVisible = false\n this.$refs.mediaUpload.clearFile()\n this.clearPollForm()\n this.$emit('posted')\n let el = this.$el.querySelector('textarea')\n el.style.height = 'auto'\n el.style.height = undefined\n this.error = null\n } else {\n this.error = data.error\n }\n this.posting = false\n })\n },\n addMediaFile (fileInfo) {\n this.newStatus.files.push(fileInfo)\n this.enableSubmit()\n },\n removeMediaFile (fileInfo) {\n let index = this.newStatus.files.indexOf(fileInfo)\n this.newStatus.files.splice(index, 1)\n },\n uploadFailed (errString, templateArgs) {\n templateArgs = templateArgs || {}\n this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)\n this.enableSubmit()\n },\n disableSubmit () {\n this.submitDisabled = true\n },\n enableSubmit () {\n this.submitDisabled = false\n },\n type (fileInfo) {\n return fileTypeService.fileType(fileInfo.mimetype)\n },\n paste (e) {\n this.resize(e)\n if (e.clipboardData.files.length > 0) {\n // prevent pasting of file as text\n e.preventDefault()\n // Strangely, files property gets emptied after event propagation\n // Trying to wrap it in array doesn't work. Plus I doubt it's possible\n // to hold more than one file in clipboard.\n this.dropFiles = [e.clipboardData.files[0]]\n }\n },\n fileDrop (e) {\n if (e.dataTransfer.files.length > 0) {\n e.preventDefault() // allow dropping text like before\n this.dropFiles = e.dataTransfer.files\n }\n },\n fileDrag (e) {\n e.dataTransfer.dropEffect = 'copy'\n },\n onEmojiInputInput (e) {\n this.$nextTick(() => {\n this.resize(this.$refs['textarea'])\n })\n },\n resize (e) {\n const target = e.target || e\n if (!(target instanceof window.Element)) { return }\n\n // Reset to default height for empty form, nothing else to do here.\n if (target.value === '') {\n target.style.height = null\n this.$refs['emoji-input'].resize()\n return\n }\n\n const formRef = this.$refs['form']\n const bottomRef = this.$refs['bottom']\n /* Scroller is either `window` (replies in TL), sidebar (main post form,\n * replies in notifs) or mobile post form. Note that getting and setting\n * scroll is different for `Window` and `Element`s\n */\n const bottomBottomPaddingStr = window.getComputedStyle(bottomRef)['padding-bottom']\n const bottomBottomPadding = Number(bottomBottomPaddingStr.substring(0, bottomBottomPaddingStr.length - 2))\n\n const scrollerRef = this.$el.closest('.sidebar-scroller') ||\n this.$el.closest('.post-form-modal-view') ||\n window\n\n // Getting info about padding we have to account for, removing 'px' part\n const topPaddingStr = window.getComputedStyle(target)['padding-top']\n const bottomPaddingStr = window.getComputedStyle(target)['padding-bottom']\n const topPadding = Number(topPaddingStr.substring(0, topPaddingStr.length - 2))\n const bottomPadding = Number(bottomPaddingStr.substring(0, bottomPaddingStr.length - 2))\n const vertPadding = topPadding + bottomPadding\n\n /* Explanation:\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight\n * scrollHeight returns element's scrollable content height, i.e. visible\n * element + overscrolled parts of it. We use it to determine when text\n * inside the textarea exceeded its height, so we can set height to prevent\n * overscroll, i.e. make textarea grow with the text. HOWEVER, since we\n * explicitly set new height, scrollHeight won't go below that, so we can't\n * SHRINK the textarea when there's extra space. To workaround that we set\n * height to 'auto' which makes textarea tiny again, so that scrollHeight\n * will match text height again. HOWEVER, shrinking textarea can screw with\n * the scroll since there might be not enough padding around form-bottom to even\n * warrant a scroll, so it will jump to 0 and refuse to move anywhere,\n * so we check current scroll position before shrinking and then restore it\n * with needed delta.\n */\n\n // this part has to be BEFORE the content size update\n const currentScroll = scrollerRef === window\n ? scrollerRef.scrollY\n : scrollerRef.scrollTop\n const scrollerHeight = scrollerRef === window\n ? scrollerRef.innerHeight\n : scrollerRef.offsetHeight\n const scrollerBottomBorder = currentScroll + scrollerHeight\n\n // BEGIN content size update\n target.style.height = 'auto'\n const newHeight = target.scrollHeight - vertPadding\n target.style.height = `${newHeight}px`\n // END content size update\n\n // We check where the bottom border of form-bottom element is, this uses findOffset\n // to find offset relative to scrollable container (scroller)\n const bottomBottomBorder = bottomRef.offsetHeight + findOffset(bottomRef, scrollerRef).top + bottomBottomPadding\n\n const isBottomObstructed = scrollerBottomBorder < bottomBottomBorder\n const isFormBiggerThanScroller = scrollerHeight < formRef.offsetHeight\n const bottomChangeDelta = bottomBottomBorder - scrollerBottomBorder\n // The intention is basically this;\n // Keep form-bottom always visible so that submit button is in view EXCEPT\n // if form element bigger than scroller and caret isn't at the end, so that\n // if you scroll up and edit middle of text you won't get scrolled back to bottom\n const shouldScrollToBottom = isBottomObstructed &&\n !(isFormBiggerThanScroller &&\n this.$refs.textarea.selectionStart !== this.$refs.textarea.value.length)\n const totalDelta = shouldScrollToBottom ? bottomChangeDelta : 0\n const targetScroll = currentScroll + totalDelta\n\n if (scrollerRef === window) {\n scrollerRef.scroll(0, targetScroll)\n } else {\n scrollerRef.scrollTop = targetScroll\n }\n\n this.$refs['emoji-input'].resize()\n },\n showEmojiPicker () {\n this.$refs['textarea'].focus()\n this.$refs['emoji-input'].triggerShowPicker()\n },\n clearError () {\n this.error = null\n },\n changeVis (visibility) {\n this.newStatus.visibility = visibility\n },\n togglePollForm () {\n this.pollFormVisible = !this.pollFormVisible\n },\n setPoll (poll) {\n this.newStatus.poll = poll\n },\n clearPollForm () {\n if (this.$refs.pollForm) {\n this.$refs.pollForm.clear()\n }\n },\n dismissScopeNotice () {\n this.$store.dispatch('setOption', { name: 'hideScopeNotice', value: true })\n }\n }\n}\n\nexport default PostStatusForm\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./post_status_form.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./post_status_form.js\"\nimport __vue_script__ from \"!!babel-loader!./post_status_form.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c2ba770c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./post_status_form.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"form\",staticClass:\"post-status-form\"},[_c('form',{attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();_vm.postStatus(_vm.newStatus)}}},[_c('div',{staticClass:\"form-group\"},[(!_vm.$store.state.users.currentUser.locked && _vm.newStatus.visibility == 'private')?_c('i18n',{staticClass:\"visibility-notice\",attrs:{\"path\":\"post_status.account_not_locked_warning\",\"tag\":\"p\"}},[_c('router-link',{attrs:{\"to\":{ name: 'user-settings' }}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.account_not_locked_warning_link'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),(!_vm.hideScopeNotice && _vm.newStatus.visibility === 'public')?_c('p',{staticClass:\"visibility-notice notice-dismissible\"},[_c('span',[_vm._v(_vm._s(_vm.$t('post_status.scope_notice.public')))]),_vm._v(\" \"),_c('a',{staticClass:\"button-icon dismiss\",on:{\"click\":function($event){$event.preventDefault();_vm.dismissScopeNotice()}}},[_c('i',{staticClass:\"icon-cancel\"})])]):(!_vm.hideScopeNotice && _vm.newStatus.visibility === 'unlisted')?_c('p',{staticClass:\"visibility-notice notice-dismissible\"},[_c('span',[_vm._v(_vm._s(_vm.$t('post_status.scope_notice.unlisted')))]),_vm._v(\" \"),_c('a',{staticClass:\"button-icon dismiss\",on:{\"click\":function($event){$event.preventDefault();_vm.dismissScopeNotice()}}},[_c('i',{staticClass:\"icon-cancel\"})])]):(!_vm.hideScopeNotice && _vm.newStatus.visibility === 'private' && _vm.$store.state.users.currentUser.locked)?_c('p',{staticClass:\"visibility-notice notice-dismissible\"},[_c('span',[_vm._v(_vm._s(_vm.$t('post_status.scope_notice.private')))]),_vm._v(\" \"),_c('a',{staticClass:\"button-icon dismiss\",on:{\"click\":function($event){$event.preventDefault();_vm.dismissScopeNotice()}}},[_c('i',{staticClass:\"icon-cancel\"})])]):(_vm.newStatus.visibility === 'direct')?_c('p',{staticClass:\"visibility-notice\"},[(_vm.safeDMEnabled)?_c('span',[_vm._v(_vm._s(_vm.$t('post_status.direct_warning_to_first_only')))]):_c('span',[_vm._v(_vm._s(_vm.$t('post_status.direct_warning_to_all')))])]):_vm._e(),_vm._v(\" \"),(_vm.newStatus.spoilerText || _vm.alwaysShowSubject)?_c('EmojiInput',{staticClass:\"form-control\",attrs:{\"enable-emoji-picker\":\"\",\"suggest\":_vm.emojiSuggestor},model:{value:(_vm.newStatus.spoilerText),callback:function ($$v) {_vm.$set(_vm.newStatus, \"spoilerText\", $$v)},expression:\"newStatus.spoilerText\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.spoilerText),expression:\"newStatus.spoilerText\"}],staticClass:\"form-post-subject\",attrs:{\"type\":\"text\",\"placeholder\":_vm.$t('post_status.content_warning')},domProps:{\"value\":(_vm.newStatus.spoilerText)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newStatus, \"spoilerText\", $event.target.value)}}})]):_vm._e(),_vm._v(\" \"),_c('EmojiInput',{ref:\"emoji-input\",staticClass:\"form-control main-input\",attrs:{\"suggest\":_vm.emojiUserSuggestor,\"enable-emoji-picker\":\"\",\"hide-emoji-button\":\"\",\"enable-sticker-picker\":\"\"},on:{\"input\":_vm.onEmojiInputInput,\"sticker-uploaded\":_vm.addMediaFile,\"sticker-upload-failed\":_vm.uploadFailed},model:{value:(_vm.newStatus.status),callback:function ($$v) {_vm.$set(_vm.newStatus, \"status\", $$v)},expression:\"newStatus.status\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.status),expression:\"newStatus.status\"}],ref:\"textarea\",staticClass:\"form-post-body\",attrs:{\"placeholder\":_vm.$t('post_status.default'),\"rows\":\"1\",\"disabled\":_vm.posting},domProps:{\"value\":(_vm.newStatus.status)},on:{\"keydown\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if(!$event.metaKey){ return null; }_vm.postStatus(_vm.newStatus)},\"keyup\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if(!$event.ctrlKey){ return null; }_vm.postStatus(_vm.newStatus)},\"drop\":_vm.fileDrop,\"dragover\":function($event){$event.preventDefault();return _vm.fileDrag($event)},\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newStatus, \"status\", $event.target.value)},_vm.resize],\"compositionupdate\":_vm.resize,\"paste\":_vm.paste}}),_vm._v(\" \"),(_vm.hasStatusLengthLimit)?_c('p',{staticClass:\"character-counter faint\",class:{ error: _vm.isOverLengthLimit }},[_vm._v(\"\\n \"+_vm._s(_vm.charactersLeft)+\"\\n \")]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"visibility-tray\"},[_c('scope-selector',{attrs:{\"show-all\":_vm.showAllScopes,\"user-default\":_vm.userDefaultScope,\"original-scope\":_vm.copyMessageScope,\"initial-scope\":_vm.newStatus.visibility,\"on-scope-change\":_vm.changeVis}}),_vm._v(\" \"),(_vm.postFormats.length > 1)?_c('div',{staticClass:\"text-format\"},[_c('label',{staticClass:\"select\",attrs:{\"for\":\"post-content-type\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newStatus.contentType),expression:\"newStatus.contentType\"}],staticClass:\"form-control\",attrs:{\"id\":\"post-content-type\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.newStatus, \"contentType\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.postFormats),function(postFormat){return _c('option',{key:postFormat,domProps:{\"value\":postFormat}},[_vm._v(\"\\n \"+_vm._s(_vm.$t((\"post_status.content_type[\\\"\" + postFormat + \"\\\"]\")))+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]):_vm._e(),_vm._v(\" \"),(_vm.postFormats.length === 1 && _vm.postFormats[0] !== 'text/plain')?_c('div',{staticClass:\"text-format\"},[_c('span',{staticClass:\"only-format\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t((\"post_status.content_type[\\\"\" + (_vm.postFormats[0]) + \"\\\"]\")))+\"\\n \")])]):_vm._e()],1)],1),_vm._v(\" \"),(_vm.pollsAvailable)?_c('poll-form',{ref:\"pollForm\",attrs:{\"visible\":_vm.pollFormVisible},on:{\"update-poll\":_vm.setPoll}}):_vm._e(),_vm._v(\" \"),_c('div',{ref:\"bottom\",staticClass:\"form-bottom\"},[_c('div',{staticClass:\"form-bottom-left\"},[_c('media-upload',{ref:\"mediaUpload\",staticClass:\"media-upload-icon\",attrs:{\"drop-files\":_vm.dropFiles},on:{\"uploading\":_vm.disableSubmit,\"uploaded\":_vm.addMediaFile,\"upload-failed\":_vm.uploadFailed}}),_vm._v(\" \"),_c('div',{staticClass:\"emoji-icon\"},[_c('i',{staticClass:\"icon-smile btn btn-default\",attrs:{\"title\":_vm.$t('emoji.add_emoji')},on:{\"click\":_vm.showEmojiPicker}})]),_vm._v(\" \"),(_vm.pollsAvailable)?_c('div',{staticClass:\"poll-icon\",class:{ selected: _vm.pollFormVisible }},[_c('i',{staticClass:\"icon-chart-bar btn btn-default\",attrs:{\"title\":_vm.$t('polls.add_poll')},on:{\"click\":_vm.togglePollForm}})]):_vm._e()],1),_vm._v(\" \"),(_vm.posting)?_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.posting'))+\"\\n \")]):(_vm.isOverLengthLimit)?_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.submit'))+\"\\n \")]):_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":_vm.submitDisabled,\"type\":\"submit\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.submit'))+\"\\n \")])]),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n Error: \"+_vm._s(_vm.error)+\"\\n \"),_c('i',{staticClass:\"button-icon icon-cancel\",on:{\"click\":_vm.clearError}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"attachments\"},_vm._l((_vm.newStatus.files),function(file){return _c('div',{key:file.url,staticClass:\"media-upload-wrapper\"},[_c('i',{staticClass:\"fa button-icon icon-cancel\",on:{\"click\":function($event){_vm.removeMediaFile(file)}}}),_vm._v(\" \"),_c('div',{staticClass:\"media-upload-container attachment\"},[(_vm.type(file) === 'image')?_c('img',{staticClass:\"thumbnail media-upload\",attrs:{\"src\":file.url}}):_vm._e(),_vm._v(\" \"),(_vm.type(file) === 'video')?_c('video',{attrs:{\"src\":file.url,\"controls\":\"\"}}):_vm._e(),_vm._v(\" \"),(_vm.type(file) === 'audio')?_c('audio',{attrs:{\"src\":file.url,\"controls\":\"\"}}):_vm._e(),_vm._v(\" \"),(_vm.type(file) === 'unknown')?_c('a',{attrs:{\"href\":file.url}},[_vm._v(_vm._s(file.url))]):_vm._e()])])}),0),_vm._v(\" \"),(_vm.newStatus.files.length > 0)?_c('div',{staticClass:\"upload_settings\"},[_c('Checkbox',{model:{value:(_vm.newStatus.nsfw),callback:function ($$v) {_vm.$set(_vm.newStatus, \"nsfw\", $$v)},expression:\"newStatus.nsfw\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('post_status.attachments_sensitive'))+\"\\n \")])],1):_vm._e()],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const StillImage = {\n props: [\n 'src',\n 'referrerpolicy',\n 'mimetype',\n 'imageLoadError',\n 'imageLoadHandler'\n ],\n data () {\n return {\n stopGifs: this.$store.getters.mergedConfig.stopGifs\n }\n },\n computed: {\n animated () {\n return this.stopGifs && (this.mimetype === 'image/gif' || this.src.endsWith('.gif'))\n }\n },\n methods: {\n onLoad () {\n this.imageLoadHandler && this.imageLoadHandler(this.$refs.src)\n const canvas = this.$refs.canvas\n if (!canvas) return\n const width = this.$refs.src.naturalWidth\n const height = this.$refs.src.naturalHeight\n canvas.width = width\n canvas.height = height\n canvas.getContext('2d').drawImage(this.$refs.src, 0, 0, width, height)\n },\n onError () {\n this.imageLoadError && this.imageLoadError()\n }\n }\n}\n\nexport default StillImage\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./still-image.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./still-image.js\"\nimport __vue_script__ from \"!!babel-loader!./still-image.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1bc509fc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./still-image.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"still-image\",class:{ animated: _vm.animated }},[(_vm.animated)?_c('canvas',{ref:\"canvas\"}):_vm._e(),_vm._v(\" \"),_c('img',{key:_vm.src,ref:\"src\",attrs:{\"src\":_vm.src,\"referrerpolicy\":_vm.referrerpolicy},on:{\"load\":_vm.onLoad,\"error\":_vm.onError}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./timeago.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./timeago.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ac499830\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./timeago.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('time',{attrs:{\"datetime\":_vm.time,\"title\":_vm.localeDateString}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(_vm.relativeTime.key, [_vm.relativeTime.num]))+\"\\n\")])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const fileSizeFormat = (num) => {\n var exponent\n var unit\n var units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']\n if (num < 1) {\n return num + ' ' + units[0]\n }\n\n exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n num = (num / Math.pow(1024, exponent)).toFixed(2) * 1\n unit = units[exponent]\n return { num: num, unit: unit }\n}\nconst fileSizeFormatService = {\n fileSizeFormat\n}\nexport default fileSizeFormatService\n","import { debounce } from 'lodash'\n/**\n * suggest - generates a suggestor function to be used by emoji-input\n * data: object providing source information for specific types of suggestions:\n * data.emoji - optional, an array of all emoji available i.e.\n * (state.instance.emoji + state.instance.customEmoji)\n * data.users - optional, an array of all known users\n * updateUsersList - optional, a function to search and append to users\n *\n * Depending on data present one or both (or none) can be present, so if field\n * doesn't support user linking you can just provide only emoji.\n */\n\nconst debounceUserSearch = debounce((data, input) => {\n data.updateUsersList(input)\n}, 500, { leading: true, trailing: false })\n\nexport default data => input => {\n const firstChar = input[0]\n if (firstChar === ':' && data.emoji) {\n return suggestEmoji(data.emoji)(input)\n }\n if (firstChar === '@' && data.users) {\n return suggestUsers(data)(input)\n }\n return []\n}\n\nexport const suggestEmoji = emojis => input => {\n const noPrefix = input.toLowerCase().substr(1)\n return emojis\n .filter(({ displayText }) => displayText.toLowerCase().match(noPrefix))\n .sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // An exact match always wins\n aScore += a.displayText.toLowerCase() === noPrefix ? 200 : 0\n bScore += b.displayText.toLowerCase() === noPrefix ? 200 : 0\n\n // Prioritize custom emoji a lot\n aScore += a.imageUrl ? 100 : 0\n bScore += b.imageUrl ? 100 : 0\n\n // Prioritize prefix matches somewhat\n aScore += a.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0\n bScore += b.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0\n\n // Sort by length\n aScore -= a.displayText.length\n bScore -= b.displayText.length\n\n // Break ties alphabetically\n const alphabetically = a.displayText > b.displayText ? 0.5 : -0.5\n\n return bScore - aScore + alphabetically\n })\n}\n\nexport const suggestUsers = data => input => {\n const noPrefix = input.toLowerCase().substr(1)\n const users = data.users\n\n const newUsers = users.filter(\n user =>\n user.screen_name.toLowerCase().startsWith(noPrefix) ||\n user.name.toLowerCase().startsWith(noPrefix)\n\n /* taking only 20 results so that sorting is a bit cheaper, we display\n * only 5 anyway. could be inaccurate, but we ideally we should query\n * backend anyway\n */\n ).slice(0, 20).sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // Matches on screen name (i.e. user@instance) makes a priority\n aScore += a.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n bScore += b.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n\n // Matches on name takes second priority\n aScore += a.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n bScore += b.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n\n const diff = (bScore - aScore) * 10\n\n // Then sort alphabetically\n const nameAlphabetically = a.name > b.name ? 1 : -1\n const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1\n\n return diff + nameAlphabetically + screenNameAlphabetically\n /* eslint-disable camelcase */\n }).map(({ screen_name, name, profile_image_url_original }) => ({\n displayText: screen_name,\n detailText: name,\n imageUrl: profile_image_url_original,\n replacement: '@' + screen_name + ' '\n }))\n\n // BE search users if there are no matches\n if (newUsers.length === 0 && data.updateUsersList) {\n debounceUserSearch(data, noPrefix)\n }\n return newUsers\n /* eslint-enable camelcase */\n}\n","import { map } from 'lodash'\nimport apiService from '../api/api.service.js'\n\nconst postStatus = ({ store, status, spoilerText, visibility, sensitive, poll, media = [], inReplyToStatusId = undefined, contentType = 'text/plain' }) => {\n const mediaIds = map(media, 'id')\n\n return apiService.postStatus({\n credentials: store.state.users.currentUser.credentials,\n status,\n spoilerText,\n visibility,\n sensitive,\n mediaIds,\n inReplyToStatusId,\n contentType,\n poll })\n .then((data) => {\n if (!data.error) {\n store.dispatch('addNewStatuses', {\n statuses: [data],\n timeline: 'friends',\n showImmediately: true,\n noIdUpdate: true // To prevent missing notices on next pull.\n })\n }\n return data\n })\n .catch((err) => {\n return {\n error: err.message\n }\n })\n}\n\nconst uploadMedia = ({ store, formData }) => {\n const credentials = store.state.users.currentUser.credentials\n\n return apiService.uploadMedia({ credentials, formData })\n}\n\nconst statusPosterService = {\n postStatus,\n uploadMedia\n}\n\nexport default statusPosterService\n","export const findOffset = (child, parent, { top = 0, left = 0 } = {}, ignorePadding = true) => {\n const result = {\n top: top + child.offsetTop,\n left: left + child.offsetLeft\n }\n if (!ignorePadding && child !== window) {\n const { topPadding, leftPadding } = findPadding(child)\n result.top += ignorePadding ? 0 : topPadding\n result.left += ignorePadding ? 0 : leftPadding\n }\n\n if (child.offsetParent && (parent === window || parent.contains(child.offsetParent) || parent === child.offsetParent)) {\n return findOffset(child.offsetParent, parent, result, false)\n } else {\n if (parent !== window) {\n const { topPadding, leftPadding } = findPadding(parent)\n result.top += topPadding\n result.left += leftPadding\n }\n return result\n }\n}\n\nconst findPadding = (el) => {\n const topPaddingStr = window.getComputedStyle(el)['padding-top']\n const topPadding = Number(topPaddingStr.substring(0, topPaddingStr.length - 2))\n const leftPaddingStr = window.getComputedStyle(el)['padding-left']\n const leftPadding = Number(leftPaddingStr.substring(0, leftPaddingStr.length - 2))\n\n return { topPadding, leftPadding }\n}\n","import { reduce, find } from 'lodash'\n\nexport const replaceWord = (str, toReplace, replacement) => {\n return str.slice(0, toReplace.start) + replacement + str.slice(toReplace.end)\n}\n\nexport const wordAtPosition = (str, pos) => {\n const words = splitIntoWords(str)\n const wordsWithPosition = addPositionToWords(words)\n\n return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos)\n}\n\nexport const addPositionToWords = (words) => {\n return reduce(words, (result, word) => {\n const data = {\n word,\n start: 0,\n end: word.length\n }\n\n if (result.length > 0) {\n const previous = result.pop()\n\n data.start += previous.end\n data.end += previous.end\n\n result.push(previous)\n }\n\n result.push(data)\n\n return result\n }, [])\n}\n\nexport const splitIntoWords = (str) => {\n // Split at word boundaries\n const regex = /\\b/\n const triggers = /[@#:]+$/\n\n let split = str.split(regex)\n\n // Add trailing @ and # to the following word.\n const words = reduce(split, (result, word) => {\n if (result.length > 0) {\n let previous = result.pop()\n const matches = previous.match(triggers)\n if (matches) {\n previous = previous.replace(triggers, '')\n word = matches[0] + word\n }\n result.push(previous)\n }\n result.push(word)\n\n return result\n }, [])\n\n return words\n}\n\nconst completion = {\n wordAtPosition,\n addPositionToWords,\n splitIntoWords,\n replaceWord\n}\n\nexport default completion\n","import Checkbox from '../checkbox/checkbox.vue'\n\n// At widest, approximately 20 emoji are visible in a row,\n// loading 3 rows, could be overkill for narrow picker\nconst LOAD_EMOJI_BY = 60\n\n// When to start loading new batch emoji, in pixels\nconst LOAD_EMOJI_MARGIN = 64\n\nconst filterByKeyword = (list, keyword = '') => {\n return list.filter(x => x.displayText.includes(keyword))\n}\n\nconst EmojiPicker = {\n props: {\n enableStickerPicker: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n keyword: '',\n activeGroup: 'custom',\n showingStickers: false,\n groupsScrolledClass: 'scrolled-top',\n keepOpen: false,\n customEmojiBufferSlice: LOAD_EMOJI_BY,\n customEmojiTimeout: null,\n customEmojiLoadAllConfirmed: false\n }\n },\n components: {\n StickerPicker: () => import('../sticker_picker/sticker_picker.vue'),\n Checkbox\n },\n methods: {\n onStickerUploaded (e) {\n this.$emit('sticker-uploaded', e)\n },\n onStickerUploadFailed (e) {\n this.$emit('sticker-upload-failed', e)\n },\n onEmoji (emoji) {\n const value = emoji.imageUrl ? `:${emoji.displayText}:` : emoji.replacement\n this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })\n },\n onScroll (e) {\n const target = (e && e.target) || this.$refs['emoji-groups']\n this.updateScrolledClass(target)\n this.scrolledGroup(target)\n this.triggerLoadMore(target)\n },\n highlight (key) {\n const ref = this.$refs['group-' + key]\n const top = ref[0].offsetTop\n this.setShowStickers(false)\n this.activeGroup = key\n this.$nextTick(() => {\n this.$refs['emoji-groups'].scrollTop = top + 1\n })\n },\n updateScrolledClass (target) {\n if (target.scrollTop <= 5) {\n this.groupsScrolledClass = 'scrolled-top'\n } else if (target.scrollTop >= target.scrollTopMax - 5) {\n this.groupsScrolledClass = 'scrolled-bottom'\n } else {\n this.groupsScrolledClass = 'scrolled-middle'\n }\n },\n triggerLoadMore (target) {\n const ref = this.$refs['group-end-custom'][0]\n if (!ref) return\n const bottom = ref.offsetTop + ref.offsetHeight\n\n const scrollerBottom = target.scrollTop + target.clientHeight\n const scrollerTop = target.scrollTop\n const scrollerMax = target.scrollHeight\n\n // Loads more emoji when they come into view\n const approachingBottom = bottom - scrollerBottom < LOAD_EMOJI_MARGIN\n // Always load when at the very top in case there's no scroll space yet\n const atTop = scrollerTop < 5\n // Don't load when looking at unicode category or at the very bottom\n const bottomAboveViewport = bottom < scrollerTop || scrollerBottom === scrollerMax\n if (!bottomAboveViewport && (approachingBottom || atTop)) {\n this.loadEmoji()\n }\n },\n scrolledGroup (target) {\n const top = target.scrollTop + 5\n this.$nextTick(() => {\n this.emojisView.forEach(group => {\n const ref = this.$refs['group-' + group.id]\n if (ref[0].offsetTop <= top) {\n this.activeGroup = group.id\n }\n })\n })\n },\n loadEmoji () {\n const allLoaded = this.customEmojiBuffer.length === this.filteredEmoji.length\n\n if (allLoaded) {\n return\n }\n\n this.customEmojiBufferSlice += LOAD_EMOJI_BY\n },\n startEmojiLoad (forceUpdate = false) {\n if (!forceUpdate) {\n this.keyword = ''\n }\n this.$nextTick(() => {\n this.$refs['emoji-groups'].scrollTop = 0\n })\n const bufferSize = this.customEmojiBuffer.length\n const bufferPrefilledAll = bufferSize === this.filteredEmoji.length\n if (bufferPrefilledAll && !forceUpdate) {\n return\n }\n this.customEmojiBufferSlice = LOAD_EMOJI_BY\n },\n toggleStickers () {\n this.showingStickers = !this.showingStickers\n },\n setShowStickers (value) {\n this.showingStickers = value\n }\n },\n watch: {\n keyword () {\n this.customEmojiLoadAllConfirmed = false\n this.onScroll()\n this.startEmojiLoad(true)\n }\n },\n computed: {\n activeGroupView () {\n return this.showingStickers ? '' : this.activeGroup\n },\n stickersAvailable () {\n if (this.$store.state.instance.stickers) {\n return this.$store.state.instance.stickers.length > 0\n }\n return 0\n },\n filteredEmoji () {\n return filterByKeyword(\n this.$store.state.instance.customEmoji || [],\n this.keyword\n )\n },\n customEmojiBuffer () {\n return this.filteredEmoji.slice(0, this.customEmojiBufferSlice)\n },\n emojis () {\n const standardEmojis = this.$store.state.instance.emoji || []\n const customEmojis = this.customEmojiBuffer\n\n return [\n {\n id: 'custom',\n text: this.$t('emoji.custom'),\n icon: 'icon-smile',\n emojis: customEmojis\n },\n {\n id: 'standard',\n text: this.$t('emoji.unicode'),\n icon: 'icon-picture',\n emojis: filterByKeyword(standardEmojis, this.keyword)\n }\n ]\n },\n emojisView () {\n return this.emojis.filter(value => value.emojis.length > 0)\n },\n stickerPickerEnabled () {\n return (this.$store.state.instance.stickers || []).length !== 0\n }\n }\n}\n\nexport default EmojiPicker\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./emoji_picker.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./emoji_picker.js\"\nimport __vue_script__ from \"!!babel-loader!./emoji_picker.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-47d21b3b\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./emoji_picker.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"emoji-picker panel panel-default panel-body\"},[_c('div',{staticClass:\"heading\"},[_c('span',{staticClass:\"emoji-tabs\"},_vm._l((_vm.emojis),function(group){return _c('span',{key:group.id,staticClass:\"emoji-tabs-item\",class:{\n active: _vm.activeGroupView === group.id,\n disabled: group.emojis.length === 0\n },attrs:{\"title\":group.text},on:{\"click\":function($event){$event.preventDefault();_vm.highlight(group.id)}}},[_c('i',{class:group.icon})])}),0),_vm._v(\" \"),(_vm.stickerPickerEnabled)?_c('span',{staticClass:\"additional-tabs\"},[_c('span',{staticClass:\"stickers-tab-icon additional-tabs-item\",class:{active: _vm.showingStickers},attrs:{\"title\":_vm.$t('emoji.stickers')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleStickers($event)}}},[_c('i',{staticClass:\"icon-star\"})])]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"emoji-content\",class:{hidden: _vm.showingStickers}},[_c('div',{staticClass:\"emoji-search\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.keyword),expression:\"keyword\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":_vm.$t('emoji.search_emoji')},domProps:{\"value\":(_vm.keyword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.keyword=$event.target.value}}})]),_vm._v(\" \"),_c('div',{ref:\"emoji-groups\",staticClass:\"emoji-groups\",class:_vm.groupsScrolledClass,on:{\"scroll\":_vm.onScroll}},_vm._l((_vm.emojisView),function(group){return _c('div',{key:group.id,staticClass:\"emoji-group\"},[_c('h6',{ref:'group-' + group.id,refInFor:true,staticClass:\"emoji-group-title\"},[_vm._v(\"\\n \"+_vm._s(group.text)+\"\\n \")]),_vm._v(\" \"),_vm._l((group.emojis),function(emoji){return _c('span',{key:group.id + emoji.displayText,staticClass:\"emoji-item\",attrs:{\"title\":emoji.displayText},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();_vm.onEmoji(emoji)}}},[(!emoji.imageUrl)?_c('span',[_vm._v(_vm._s(emoji.replacement))]):_c('img',{attrs:{\"src\":emoji.imageUrl}})])}),_vm._v(\" \"),_c('span',{ref:'group-end-' + group.id,refInFor:true})],2)}),0),_vm._v(\" \"),_c('div',{staticClass:\"keep-open\"},[_c('Checkbox',{model:{value:(_vm.keepOpen),callback:function ($$v) {_vm.keepOpen=$$v},expression:\"keepOpen\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('emoji.keep_open'))+\"\\n \")])],1)]),_vm._v(\" \"),(_vm.showingStickers)?_c('div',{staticClass:\"stickers-content\"},[_c('sticker-picker',{on:{\"uploaded\":_vm.onStickerUploaded,\"upload-failed\":_vm.onStickerUploadFailed}})],1):_vm._e()])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Completion from '../../services/completion/completion.js'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport { take } from 'lodash'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\n\n/**\n * EmojiInput - augmented inputs for emoji and autocomplete support in inputs\n * without having to give up the comfort of and