From a94e33e1638053559bf4aa05e8bda3abf54bd6e8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 26 Aug 2020 08:32:10 +0200 Subject: [PATCH 1/3] Set the user status as header, so clients can decide to not show notifications Signed-off-by: Joas Schilling --- docs/ocs-endpoint-v2.md | 10 +++++++- lib/Capabilities.php | 1 + lib/Controller/EndpointController.php | 24 ++++++++++++++++--- tests/Unit/CapabilitiesTest.php | 1 + .../Controller/EndpointControllerTest.php | 7 +++++- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/docs/ocs-endpoint-v2.md b/docs/ocs-endpoint-v2.md index 609acf32a..8c94b0742 100644 --- a/docs/ocs-endpoint-v2.md +++ b/docs/ocs-endpoint-v2.md @@ -26,7 +26,8 @@ In order to find out if notifications is installed/enabled on the server you can "delete-all", "icons", "rich-strings", - "action-web" + "action-web", + "user-status" ] } } @@ -103,6 +104,13 @@ Status | Explanation `204 No Content` | please slow down the polling to once per hour, since there are no apps that can generate notifications `304 Not Modified` | The provided `If-None-Match` matches the ETag, response body is empty +### Headers + +Status | Explanation +---|--- +`ETag` | See https://tools.ietf.org/html/rfc7232#section-2.3 +`X-Nextcloud-User-Status` | Only available with the `user-status` capability. The user status (`away`, `dnd`, `offline`, `online`) should be taken into account and in case of `dnd` no notifications should be directly shown. + ### Specification Optional elements are still set in the array, the value is just empty: diff --git a/lib/Capabilities.php b/lib/Capabilities.php index b177c6b77..a46456a20 100644 --- a/lib/Capabilities.php +++ b/lib/Capabilities.php @@ -46,6 +46,7 @@ public function getCapabilities(): array { 'icons', 'rich-strings', 'action-web', + 'user-status', ], 'push' => [ 'devices', diff --git a/lib/Controller/EndpointController.php b/lib/Controller/EndpointController.php index f568fde8f..8048e9e81 100644 --- a/lib/Controller/EndpointController.php +++ b/lib/Controller/EndpointController.php @@ -34,6 +34,8 @@ use OCP\Notification\IAction; use OCP\Notification\IManager; use OCP\Notification\INotification; +use OCP\UserStatus\IManager as IUserStatusManager; +use OCP\UserStatus\IUserStatus; class EndpointController extends OCSController { /** @var Handler */ @@ -44,6 +46,8 @@ class EndpointController extends OCSController { private $l10nFactory; /** @var IUserSession */ private $session; + /** @var IUserStatusManager */ + private $userStatusManager; /** @var Push */ private $push; @@ -53,6 +57,7 @@ public function __construct(string $appName, IManager $manager, IFactory $l10nFactory, IUserSession $session, + IUserStatusManager $userStatusManager, Push $push) { parent::__construct($appName, $request); @@ -60,6 +65,7 @@ public function __construct(string $appName, $this->manager = $manager; $this->l10nFactory = $l10nFactory; $this->session = $session; + $this->userStatusManager = $userStatusManager; $this->push = $push; } @@ -71,10 +77,20 @@ public function __construct(string $appName, * @return DataResponse */ public function listNotifications(string $apiVersion): DataResponse { + $userStatus = $this->userStatusManager->getUserStatuses([ + $this->getCurrentUser(), + ]); + + $headers = ['X-Nextcloud-User-Status' => IUserStatus::ONLINE]; + if (isset($userStatus[$this->getCurrentUser()])) { + $userStatus = $userStatus[$this->getCurrentUser()]; + $headers['X-Nextcloud-User-Status'] = $userStatus->getStatus(); + } + // When there are no apps registered that use the notifications // We stop polling for them. if (!$this->manager->hasNotifiers()) { - return new DataResponse(null, Http::STATUS_NO_CONTENT); + return new DataResponse(null, Http::STATUS_NO_CONTENT, $headers); } $filter = $this->manager->createNotification(); @@ -98,11 +114,13 @@ public function listNotifications(string $apiVersion): DataResponse { } $eTag = $this->generateETag($notificationIds); + + $headers['ETag'] = $eTag; if ($apiVersion !== 'v1' && $this->request->getHeader('If-None-Match') === $eTag) { - return new DataResponse([], Http::STATUS_NOT_MODIFIED); + return new DataResponse([], Http::STATUS_NOT_MODIFIED, $headers); } - return new DataResponse($data, Http::STATUS_OK, ['ETag' => $eTag]); + return new DataResponse($data, Http::STATUS_OK, $headers); } /** diff --git a/tests/Unit/CapabilitiesTest.php b/tests/Unit/CapabilitiesTest.php index a2e395f15..c757acf56 100644 --- a/tests/Unit/CapabilitiesTest.php +++ b/tests/Unit/CapabilitiesTest.php @@ -39,6 +39,7 @@ public function testGetCapabilities() { 'icons', 'rich-strings', 'action-web', + 'user-status', ], 'push' => [ 'devices', diff --git a/tests/Unit/Controller/EndpointControllerTest.php b/tests/Unit/Controller/EndpointControllerTest.php index b1ae0d1ab..8be59b375 100644 --- a/tests/Unit/Controller/EndpointControllerTest.php +++ b/tests/Unit/Controller/EndpointControllerTest.php @@ -37,6 +37,7 @@ use OCP\Notification\IAction; use OCP\Notification\IManager; use OCP\Notification\INotification; +use OCP\UserStatus\IManager as IUserStatusManager; use PHPUnit\Framework\MockObject\MockObject; use function Sabre\Event\Loop\instance; @@ -55,7 +56,8 @@ class EndpointControllerTest extends TestCase { /** @var IUserSession|MockObject */ protected $session; - + /** @var IUserStatusManager|MockObject */ + protected $userStatusManager; /** @var EndpointController */ protected $controller; @@ -72,6 +74,7 @@ protected function setUp(): void { $this->manager = $this->createMock(IManager::class); $this->l10nFactory = $this->createMock(IFactory::class); $this->session = $this->createMock(IUserSession::class); + $this->userStatusManager = $this->createMock(IUserStatusManager::class); $this->user = $this->createMock(IUser::class); $this->push = $this->createMock(Push::class); @@ -93,6 +96,7 @@ protected function getController(array $methods = [], $username = 'username') { $this->manager, $this->l10nFactory, $this->session, + $this->userStatusManager, $this->push ); } @@ -105,6 +109,7 @@ protected function getController(array $methods = [], $username = 'username') { $this->manager, $this->l10nFactory, $this->session, + $this->userStatusManager, $this->push, ]) ->setMethods($methods) From 1ae825e8780a57f5acd3475625fc8af99202867a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 26 Aug 2020 08:33:25 +0200 Subject: [PATCH 2/3] Don't show browser notifications when the user is in DND Signed-off-by: Joas Schilling --- js/notifications.js | 2 +- js/notifications.js.map | 2 +- src/App.vue | 8 ++++++++ src/Components/Notification.vue | 3 +-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/js/notifications.js b/js/notifications.js index ad9cf74e0..6629f162f 100644 --- a/js/notifications.js +++ b/js/notifications.js @@ -11,7 +11,7 @@ var r=Object.freeze({});function i(t){return null==t}function o(t){return null!= * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed - */var r=/["'&<>]/;t.exports=function(t){var e,n=""+t,i=r.exec(n);if(!i)return n;var o="",a=0,s=0;for(a=i.index;a0?r:n)(t)}},function(t,e,n){var r=n(188);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);(0,n(192).default)("c07f2d4e",r,!0,{})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.subscribe=function(t,e){o.subscribe(t,e)},e.unsubscribe=function(t,e){o.unsubscribe(t,e)},e.emit=function(t,e){o.emit(t,e)};var r=n(128),i=n(133);var o=(void 0!==window.OC&&window.OC._eventBus&&void 0===window._nc_event_bus&&(console.warn("found old event bus instance at OC._eventBus. Update your version!"),window._nc_event_bus=window.OC._eventBus),void 0!==window._nc_event_bus?new r.ProxyBus(window._nc_event_bus):window._nc_event_bus=new i.SimpleBus)},function(t,e,n){var r=n(0),i=n(25),o="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?o.call(t,""):Object(t)}:Object},function(t,e,n){var r=n(5);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t,e){try{i(r,t,e)}catch(n){r[t]=e}return e}},function(t,e,n){var r=n(56),i=n(38),o=r("keys");t.exports=function(t){return o[t]||(o[t]=i(t))}},function(t,e){t.exports=!1},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+r).toString(36)}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var c,u=[],l=!1,f=-1;function p(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!l){var t=s(p);l=!0;for(var e=u.length;e;){for(c=u,u=[];++f1)for(var n=1;n"+t+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;h=r?function(t){t.write(d("")),t.close();var e=t.parentWindow.Object;return t=null,e}(r):((e=u("iframe")).style.display="none",c.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(d("document.F=Object")),t.close(),t.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};s[f]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(p.prototype=i(t),n=new p,p.prototype=null,n[f]=t):n=h(),void 0===e?n:o(n,e)}},function(t,e,n){"use strict";var r=n(11),i=n(141),o=n(84),a=n(85),s=n(46),c=n(9),u=n(12),l=n(1),f=n(37),p=n(20),d=n(83),h=d.IteratorPrototype,v=d.BUGGY_SAFARI_ITERATORS,m=l("iterator"),g=function(){return this};t.exports=function(t,e,n,l,d,y,b){i(n,e,l);var _,w,x,E=function(t){if(t===d&&S)return S;if(!v&&t in C)return C[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},O=e+" Iterator",A=!1,C=t.prototype,k=C[m]||C["@@iterator"]||d&&C[d],S=!v&&k||E(d),T="Array"==e&&C.entries||k;if(T&&(_=o(T.call(new t)),h!==Object.prototype&&_.next&&(f||o(_)===h||(a?a(_,h):"function"!=typeof _[m]&&c(_,m,g)),s(_,O,!0,!0),f&&(p[O]=g))),"values"==d&&k&&"values"!==k.name&&(A=!0,S=function(){return k.call(this)}),f&&!b||C[m]===S||c(C,m,S),p[e]=S,d)if(w={values:E("values"),keys:y?S:E("keys"),entries:E("entries")},b)for(x in w)(v||A||!(x in C))&&u(C,x,w[x]);else r({target:e,proto:!0,forced:v||A},w);return w}},function(t,e,n){var r=n(10).f,i=n(4),o=n(1)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r={};r[n(1)("toStringTag")]="z",t.exports="[object z]"===String(r)},function(t,e,n){"use strict";var r,i,o=n(98),a=n(181),s=RegExp.prototype.exec,c=String.prototype.replace,u=s,l=(r=/a/,i=/b*/g,s.call(r,"a"),s.call(i,"a"),0!==r.lastIndex||0!==i.lastIndex),f=a.UNSUPPORTED_Y||a.BROKEN_CARET,p=void 0!==/()??/.exec("")[1];(l||p||f)&&(u=function(t){var e,n,r,i,a=this,u=f&&a.sticky,d=o.call(a),h=a.source,v=0,m=t;return u&&(-1===(d=d.replace("y","")).indexOf("g")&&(d+="g"),m=String(t).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==t[a.lastIndex-1])&&(h="(?: "+h+")",m=" "+m,v++),n=new RegExp("^(?:"+h+")",d)),p&&(n=new RegExp("^"+h+"$(?!\\s)",d)),l&&(e=a.lastIndex),r=s.call(u?n:a,m),u?r?(r.input=r.input.slice(v),r[0]=r[0].slice(v),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:l&&r&&(a.lastIndex=a.global?r.index+r[0].length:e),p&&r&&r.length>1&&c.call(r[0],n,(function(){for(i=1;ic;)r(s,n=e[c++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var r=n(24),i=n(18),o=n(105),a=function(t){return function(e,n,a){var s,c=r(e),u=i(c.length),l=o(a,u);if(t&&n!=n){for(;u>l;)if((s=c[l++])!=s)return!0}else for(;u>l;l++)if((t||l in c)&&c[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(0),i=/#|\.prototype\./,o=function(t,e){var n=s[a(t)];return n==u||n!=c&&("function"==typeof e?r(e):!!e)},a=o.normalize=function(t){return String(t).replace(i,".").toLowerCase()},s=o.data={},c=o.NATIVE="N",u=o.POLYFILL="P";t.exports=o},function(t,e,n){var r=n(57),i=n(39);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r=200&&t<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(t){c.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){c.headers[t]=r.merge(o)})),t.exports=c}).call(this,n(40))},function(t,e,n){"use strict";var r=n(3),i=n(114),o=n(63),a=n(116),s=n(119),c=n(120),u=n(67);t.exports=function(t){return new Promise((function(e,l){var f=t.data,p=t.headers;r.isFormData(f)&&delete p["Content-Type"];var d=new XMLHttpRequest;if(t.auth){var h=t.auth.username||"",v=t.auth.password||"";p.Authorization="Basic "+btoa(h+":"+v)}var m=a(t.baseURL,t.url);if(d.open(t.method.toUpperCase(),o(m,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in d?s(d.getAllResponseHeaders()):null,r={data:t.responseType&&"text"!==t.responseType?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:n,config:t,request:d};i(e,l,r),d=null}},d.onabort=function(){d&&(l(u("Request aborted",t,"ECONNABORTED",d)),d=null)},d.onerror=function(){l(u("Network Error",t,null,d)),d=null},d.ontimeout=function(){var e="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),l(u(e,t,"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var g=n(121),y=(t.withCredentials||c(m))&&t.xsrfCookieName?g.read(t.xsrfCookieName):void 0;y&&(p[t.xsrfHeaderName]=y)}if("setRequestHeader"in d&&r.forEach(p,(function(t,e){void 0===f&&"content-type"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(d.withCredentials=!!t.withCredentials),t.responseType)try{d.responseType=t.responseType}catch(e){if("json"!==t.responseType)throw e}"function"==typeof t.onDownloadProgress&&d.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){d&&(d.abort(),l(t),d=null)})),void 0===f&&(f=null),d.send(f)}))}},function(t,e,n){"use strict";var r=n(115);t.exports=function(t,e,n,i,o){var a=new Error(t);return r(a,e,n,i,o)}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e){e=e||{};var n={},i=["url","method","params","data"],o=["headers","auth","proxy"],a=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];r.forEach(i,(function(t){void 0!==e[t]&&(n[t]=e[t])})),r.forEach(o,(function(i){r.isObject(e[i])?n[i]=r.deepMerge(t[i],e[i]):void 0!==e[i]?n[i]=e[i]:r.isObject(t[i])?n[i]=r.deepMerge(t[i]):void 0!==t[i]&&(n[i]=t[i])})),r.forEach(a,(function(r){void 0!==e[r]?n[r]=e[r]:void 0!==t[r]&&(n[r]=t[r])}));var s=i.concat(o).concat(a),c=Object.keys(e).filter((function(t){return-1===s.indexOf(t)}));return r.forEach(c,(function(r){void 0!==e[r]?n[r]=e[r]:void 0!==t[r]&&(n[r]=t[r])})),n}},function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e,n){"use strict";var r=n(11),i=n(71);r({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,n){"use strict";var r=n(72).forEach,i=n(76),o=n(42),a=i("forEach"),s=o("forEach");t.exports=a&&s?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,n){var r=n(41),i=n(33),o=n(19),a=n(18),s=n(73),c=[].push,u=function(t){var e=1==t,n=2==t,u=3==t,l=4==t,f=6==t,p=5==t||f;return function(d,h,v,m){for(var g,y,b=o(d),_=i(b),w=r(h,v,3),x=a(_.length),E=0,O=m||s,A=e?O(d,x):n?O(d,0):void 0;x>E;E++)if((p||E in _)&&(y=w(g=_[E],E,b),t))if(e)A[E]=y;else if(y)switch(t){case 3:return!0;case 5:return g;case 6:return E;case 2:c.call(A,g)}else if(l)return!1;return f?-1:u||l?l:A}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6)}},function(t,e,n){var r=n(5),i=n(74),o=n(1)("species");t.exports=function(t,e){var n;return i(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!i(n.prototype)?r(n)&&null===(n=n[o])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},function(t,e,n){var r=n(25);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){var r=n(0);t.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},function(t,e,n){"use strict";var r=n(0);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){throw 1},1)}))}},function(t,e,n){var r=n(43).MAX_SAFE_COMPONENT_LENGTH,i=n(78),o=(e=t.exports={}).re=[],a=e.src=[],s=e.t={},c=0,u=function(t,e,n){var r=c++;i(r,e),s[t]=r,a[r]=e,o[r]=new RegExp(e,n?"g":void 0)};u("NUMERICIDENTIFIER","0|[1-9]\\d*"),u("NUMERICIDENTIFIERLOOSE","[0-9]+"),u("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),u("MAINVERSION","(".concat(a[s.NUMERICIDENTIFIER],")\\.")+"(".concat(a[s.NUMERICIDENTIFIER],")\\.")+"(".concat(a[s.NUMERICIDENTIFIER],")")),u("MAINVERSIONLOOSE","(".concat(a[s.NUMERICIDENTIFIERLOOSE],")\\.")+"(".concat(a[s.NUMERICIDENTIFIERLOOSE],")\\.")+"(".concat(a[s.NUMERICIDENTIFIERLOOSE],")")),u("PRERELEASEIDENTIFIER","(?:".concat(a[s.NUMERICIDENTIFIER],"|").concat(a[s.NONNUMERICIDENTIFIER],")")),u("PRERELEASEIDENTIFIERLOOSE","(?:".concat(a[s.NUMERICIDENTIFIERLOOSE],"|").concat(a[s.NONNUMERICIDENTIFIER],")")),u("PRERELEASE","(?:-(".concat(a[s.PRERELEASEIDENTIFIER],"(?:\\.").concat(a[s.PRERELEASEIDENTIFIER],")*))")),u("PRERELEASELOOSE","(?:-?(".concat(a[s.PRERELEASEIDENTIFIERLOOSE],"(?:\\.").concat(a[s.PRERELEASEIDENTIFIERLOOSE],")*))")),u("BUILDIDENTIFIER","[0-9A-Za-z-]+"),u("BUILD","(?:\\+(".concat(a[s.BUILDIDENTIFIER],"(?:\\.").concat(a[s.BUILDIDENTIFIER],")*))")),u("FULLPLAIN","v?".concat(a[s.MAINVERSION]).concat(a[s.PRERELEASE],"?").concat(a[s.BUILD],"?")),u("FULL","^".concat(a[s.FULLPLAIN],"$")),u("LOOSEPLAIN","[v=\\s]*".concat(a[s.MAINVERSIONLOOSE]).concat(a[s.PRERELEASELOOSE],"?").concat(a[s.BUILD],"?")),u("LOOSE","^".concat(a[s.LOOSEPLAIN],"$")),u("GTLT","((?:<|>)?=?)"),u("XRANGEIDENTIFIERLOOSE","".concat(a[s.NUMERICIDENTIFIERLOOSE],"|x|X|\\*")),u("XRANGEIDENTIFIER","".concat(a[s.NUMERICIDENTIFIER],"|x|X|\\*")),u("XRANGEPLAIN","[v=\\s]*(".concat(a[s.XRANGEIDENTIFIER],")")+"(?:\\.(".concat(a[s.XRANGEIDENTIFIER],")")+"(?:\\.(".concat(a[s.XRANGEIDENTIFIER],")")+"(?:".concat(a[s.PRERELEASE],")?").concat(a[s.BUILD],"?")+")?)?"),u("XRANGEPLAINLOOSE","[v=\\s]*(".concat(a[s.XRANGEIDENTIFIERLOOSE],")")+"(?:\\.(".concat(a[s.XRANGEIDENTIFIERLOOSE],")")+"(?:\\.(".concat(a[s.XRANGEIDENTIFIERLOOSE],")")+"(?:".concat(a[s.PRERELEASELOOSE],")?").concat(a[s.BUILD],"?")+")?)?"),u("XRANGE","^".concat(a[s.GTLT],"\\s*").concat(a[s.XRANGEPLAIN],"$")),u("XRANGELOOSE","^".concat(a[s.GTLT],"\\s*").concat(a[s.XRANGEPLAINLOOSE],"$")),u("COERCE","".concat("(^|[^\\d])(\\d{1,").concat(r,"})")+"(?:\\.(\\d{1,".concat(r,"}))?")+"(?:\\.(\\d{1,".concat(r,"}))?")+"(?:$|[^\\d])"),u("COERCERTL",a[s.COERCE],!0),u("LONETILDE","(?:~>?)"),u("TILDETRIM","(\\s*)".concat(a[s.LONETILDE],"\\s+"),!0),e.tildeTrimReplace="$1~",u("TILDE","^".concat(a[s.LONETILDE]).concat(a[s.XRANGEPLAIN],"$")),u("TILDELOOSE","^".concat(a[s.LONETILDE]).concat(a[s.XRANGEPLAINLOOSE],"$")),u("LONECARET","(?:\\^)"),u("CARETTRIM","(\\s*)".concat(a[s.LONECARET],"\\s+"),!0),e.caretTrimReplace="$1^",u("CARET","^".concat(a[s.LONECARET]).concat(a[s.XRANGEPLAIN],"$")),u("CARETLOOSE","^".concat(a[s.LONECARET]).concat(a[s.XRANGEPLAINLOOSE],"$")),u("COMPARATORLOOSE","^".concat(a[s.GTLT],"\\s*(").concat(a[s.LOOSEPLAIN],")$|^$")),u("COMPARATOR","^".concat(a[s.GTLT],"\\s*(").concat(a[s.FULLPLAIN],")$|^$")),u("COMPARATORTRIM","(\\s*)".concat(a[s.GTLT],"\\s*(").concat(a[s.LOOSEPLAIN],"|").concat(a[s.XRANGEPLAIN],")"),!0),e.comparatorTrimReplace="$1$2$3",u("HYPHENRANGE","^\\s*(".concat(a[s.XRANGEPLAIN],")")+"\\s+-\\s+"+"(".concat(a[s.XRANGEPLAIN],")")+"\\s*$"),u("HYPHENRANGELOOSE","^\\s*(".concat(a[s.XRANGEPLAINLOOSE],")")+"\\s+-\\s+"+"(".concat(a[s.XRANGEPLAINLOOSE],")")+"\\s*$"),u("STAR","(<|>)?=?\\s*\\*"),u("GTE0","^\\s*>=\\s*0.0.0\\s*$"),u("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")},function(t,e,n){(function(e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r="object"===(void 0===e?"undefined":n(e))&&e.env&&e.env.NODE_DEBUG&&/\bsemver\b/i.test(e.env.NODE_DEBUG)?function(){for(var t,e=arguments.length,n=new Array(e),r=0;rs)throw new TypeError("version is longer than ".concat(s," characters"));o("SemVer",e,n),this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease;var i=e.trim().match(n.loose?l[f.LOOSE]:l[f.FULL]);if(!i)throw new TypeError("Invalid Version: ".concat(e));if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>c||this.major<0)throw new TypeError("Invalid major version");if(this.minor>c||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>c||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map((function(t){if(/^[0-9]+$/.test(t)){var e=+t;if(e>=0&&e=0;)"number"==typeof this.prerelease[n]&&(this.prerelease[n]++,n=-2);-1===n&&this.prerelease.push(0)}e&&(this.prerelease[0]===e?isNaN(this.prerelease[1])&&(this.prerelease=[e,0]):this.prerelease=[e,0]);break;default:throw new Error("invalid increment argument: ".concat(t))}return this.format(),this.raw=this.version,this}}])&&i(e.prototype,n),a&&i(e,a),t}();t.exports=d},function(t,e,n){var r=n(0),i=n(1),o=n(81),a=i("species");t.exports=function(t){return o>=51||!r((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e,n){var r,i,o=n(2),a=n(136),s=o.process,c=s&&s.versions,u=c&&c.v8;u?i=(r=u.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=r[1]),t.exports=i&&+i},function(t,e,n){"use strict";var r=n(24),i=n(138),o=n(20),a=n(27),s=n(45),c=a.set,u=a.getterFor("Array Iterator");t.exports=s(Array,"Array",(function(t,e){c(this,{type:"Array Iterator",target:r(t),index:0,kind:e})}),(function(){var t=u(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(t,e,n){"use strict";var r,i,o,a=n(84),s=n(9),c=n(4),u=n(1),l=n(37),f=u("iterator"),p=!1;[].keys&&("next"in(o=[].keys())?(i=a(a(o)))!==Object.prototype&&(r=i):p=!0),null==r&&(r={}),l||c(r,f)||s(r,f,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:p}},function(t,e,n){var r=n(4),i=n(19),o=n(36),a=n(142),s=o("IE_PROTO"),c=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=i(t),r(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},function(t,e,n){var r=n(6),i=n(143);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,o){return r(n),i(o),e?t.call(n,o):n.__proto__=o,n}}():void 0)},function(t,e,n){var r=n(28),i=n(5),o=n(4),a=n(10).f,s=n(38),c=n(146),u=s("meta"),l=0,f=Object.isExtensible||function(){return!0},p=function(t){a(t,u,{value:{objectID:"O"+ ++l,weakData:{}}})},d=t.exports={REQUIRED:!1,fastKey:function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,u)){if(!f(t))return"F";if(!e)return"E";p(t)}return t[u].objectID},getWeakData:function(t,e){if(!o(t,u)){if(!f(t))return!0;if(!e)return!1;p(t)}return t[u].weakData},onFreeze:function(t){return c&&d.REQUIRED&&f(t)&&!o(t,u)&&p(t),t}};r[u]=!0},function(t,e,n){var r=n(6),i=n(147),o=n(18),a=n(41),s=n(148),c=n(149),u=function(t,e){this.stopped=t,this.result=e};(t.exports=function(t,e,n,l,f){var p,d,h,v,m,g,y,b=a(e,n,l?2:1);if(f)p=t;else{if("function"!=typeof(d=s(t)))throw TypeError("Target is not iterable");if(i(d)){for(h=0,v=o(t.length);v>h;h++)if((m=l?b(r(y=t[h])[0],y[1]):b(t[h]))&&m instanceof u)return m;return new u(!1)}p=d.call(t)}for(g=p.next;!(y=g.call(p)).done;)if("object"==typeof(m=c(p,b,y.value,l))&&m&&m instanceof u)return m;return new u(!1)}).stop=function(t){return new u(!0,t)}},function(t,e,n){var r=n(47),i=n(25),o=n(1)("toStringTag"),a="Arguments"==i(function(){return arguments}());t.exports=r?i:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),o))?n:a?i(e):"Object"==(r=i(e))&&"function"==typeof e.callee?"Arguments":r}},function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},function(t,e,n){var r=n(47),i=n(12),o=n(155);r||i(Object.prototype,"toString",o,{unsafe:!0})},function(t,e,n){var r=n(30),i=n(26),o=function(t){return function(e,n){var o,a,s=String(i(e)),c=r(n),u=s.length;return c<0||c>=u?t?"":void 0:(o=s.charCodeAt(c))<55296||o>56319||c+1===u||(a=s.charCodeAt(c+1))<56320||a>57343?t?s.charAt(c):o:t?s.slice(c,c+2):a-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0,e.HandlebarsEnvironment=l;var i=n(7),o=r(n(13)),a=n(94),s=n(169),c=r(n(95)),u=n(96);e.VERSION="4.7.6";e.COMPILER_REVISION=8;e.LAST_COMPATIBLE_COMPILER_REVISION=7;e.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};function l(t,e,n){this.helpers=t||{},this.partials=e||{},this.decorators=n||{},a.registerDefaultHelpers(this),s.registerDefaultDecorators(this)}l.prototype={constructor:l,logger:c.default,log:c.default.log,registerHelper:function(t,e){if("[object Object]"===i.toString.call(t)){if(e)throw new o.default("Arg not supported with multiple helpers");i.extend(this.helpers,t)}else this.helpers[t]=e},unregisterHelper:function(t){delete this.helpers[t]},registerPartial:function(t,e){if("[object Object]"===i.toString.call(t))i.extend(this.partials,t);else{if(void 0===e)throw new o.default('Attempting to register a partial called "'+t+'" as undefined');this.partials[t]=e}},unregisterPartial:function(t){delete this.partials[t]},registerDecorator:function(t,e){if("[object Object]"===i.toString.call(t)){if(e)throw new o.default("Arg not supported with multiple decorators");i.extend(this.decorators,t)}else this.decorators[t]=e},unregisterDecorator:function(t){delete this.decorators[t]},resetLoggedPropertyAccesses:function(){u.resetLoggedProperties()}};var f=c.default.log;e.log=f,e.createFrame=i.createFrame,e.logger=c.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0,e.registerDefaultHelpers=function(t){i.default(t),o.default(t),a.default(t),s.default(t),c.default(t),u.default(t),l.default(t)},e.moveHelperToHooks=function(t,e,n){t.helpers[e]&&(t.hooks[e]=t.helpers[e],n||delete t.helpers[e])};var i=r(n(162)),o=r(n(163)),a=r(n(164)),s=r(n(165)),c=r(n(166)),u=r(n(167)),l=r(n(168))},function(t,e,n){"use strict";e.__esModule=!0;var r=n(7),i={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(t){if("string"==typeof t){var e=r.indexOf(i.methodMap,t.toLowerCase());t=e>=0?e:parseInt(t,10)}return t},log:function(t){if(t=i.lookupLevel(t),"undefined"!=typeof console&&i.lookupLevel(i.level)<=t){var e=i.methodMap[t];console[e]||(e="log");for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;ol;)for(var d,h=u(arguments[l++]),v=f?o(h).concat(f(h)):o(h),m=v.length,g=0;m>g;)d=v[g++],r&&!p.call(h,d)||(n[d]=h[d]);return n}:l},function(t,e,n){t.exports=n(108)},function(t,e,n){"use strict";var r=n(3),i=n(62),o=n(109),a=n(68);function s(t){var e=new o(t),n=i(o.prototype.request,e);return r.extend(n,o.prototype,e),r.extend(n,e),n}var c=s(n(65));c.Axios=o,c.create=function(t){return s(a(c.defaults,t))},c.Cancel=n(69),c.CancelToken=n(122),c.isCancel=n(64),c.all=function(t){return Promise.all(t)},c.spread=n(123),t.exports=c,t.exports.default=c},function(t,e,n){"use strict";var r=n(3),i=n(63),o=n(110),a=n(111),s=n(68);function c(t){this.defaults=t,this.interceptors={request:new o,response:new o}}c.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=s(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=[a,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},c.prototype.getUri=function(t){return t=s(this.defaults,t),i(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(r.merge(n||{},{method:t,url:e}))}})),r.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,i){return this.request(r.merge(i||{},{method:t,url:e,data:n}))}})),t.exports=c},function(t,e,n){"use strict";var r=n(3);function i(){this.handlers=[]}i.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=i},function(t,e,n){"use strict";var r=n(3),i=n(112),o=n(64),a=n(65);function s(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return s(t),t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||a.adapter)(t).then((function(e){return s(t),e.data=i(e.data,e.headers,t.transformResponse),e}),(function(e){return o(e)||(s(t),e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(67);t.exports=function(t,e,n){var i=n.config.validateStatus;!i||i(n.status)?t(n):e(r("Request failed with status code "+n.status,n.config,null,n.request,n))}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,i){return t.config=e,n&&(t.code=n),t.request=r,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},function(t,e,n){"use strict";var r=n(117),i=n(118);t.exports=function(t,e){return t&&!r(e)?i(t,e):e}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(3),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,o,a={};return t?(r.forEach(t.split("\n"),(function(t){if(o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e){if(a[e]&&i.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},function(t,e,n){"use strict";var r=n(3);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";var r=n(3);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(69);function i(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var t;return{token:new i((function(e){t=e})),cancel:t}},t.exports=i},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"getRequestToken",{enumerable:!0,get:function(){return r.getRequestToken}}),Object.defineProperty(e,"onRequestTokenUpdate",{enumerable:!0,get:function(){return r.onRequestTokenUpdate}}),Object.defineProperty(e,"getCurrentUser",{enumerable:!0,get:function(){return i.getCurrentUser}});var r=n(125),i=n(159)},function(t,e,n){"use strict";n(70),Object.defineProperty(e,"__esModule",{value:!0}),e.getRequestToken=function(){return o},e.onRequestTokenUpdate=function(t){a.push(t)};var r=n(32),i=document.getElementsByTagName("head")[0],o=i?i.getAttribute("data-requesttoken"):null,a=[];(0,r.subscribe)("csrf-token-update",(function(t){o=t.token,a.forEach((function(e){try{e(t.token)}catch(t){console.error("error updating CSRF token observer",t)}}))}))},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,n){var r=n(75);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ProxyBus=void 0;var r=o(n(129)),i=o(n(132));function o(t){return t&&t.__esModule?t:{default:t}}function a(t,e){for(var n=0;ni)return null;if(!(e.loose?a[s.LOOSE]:a[s.FULL]).test(t))return null;try{return new c(t,e)}catch(t){return null}}},function(t,e){var n=/^[0-9]+$/,r=function(t,e){var r=n.test(t),i=n.test(e);return r&&i&&(t=+t,e=+e),t===e?0:r&&!i?-1:i&&!r?1:t=51||!i((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),m=f("concat"),g=function(t){if(!a(t))return!1;var e=t[h];return void 0!==e?!!e:o(t)};r({target:"Array",proto:!0,forced:!v||!m},{concat:function(t){var e,n,r,i,o,a=s(this),f=l(a,0),p=0;for(e=-1,r=arguments.length;e9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");u(f,p++,o)}return f.length=p,f}})},function(t,e,n){"use strict";var r=n(34),i=n(10),o=n(23);t.exports=function(t,e,n){var a=r(e);a in t?i.f(t,a,o(0,n)):t[a]=n}},function(t,e,n){var r=n(29);t.exports=r("navigator","userAgent")||""},function(t,e,n){"use strict";var r=n(11),i=n(72).filter,o=n(80),a=n(42),s=o("filter"),c=a("filter");r({target:"Array",proto:!0,forced:!s||!c},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r=n(1),i=n(44),o=n(10),a=r("unscopables"),s=Array.prototype;null==s[a]&&o.f(s,a,{configurable:!0,value:i(null)}),t.exports=function(t){s[a][t]=!0}},function(t,e,n){var r=n(8),i=n(10),o=n(6),a=n(61);t.exports=r?Object.defineProperties:function(t,e){o(t);for(var n,r=a(e),s=r.length,c=0;s>c;)i.f(t,n=r[c++],e[n]);return t}},function(t,e,n){var r=n(29);t.exports=r("document","documentElement")},function(t,e,n){"use strict";var r=n(83).IteratorPrototype,i=n(44),o=n(23),a=n(46),s=n(20),c=function(){return this};t.exports=function(t,e,n){var u=e+" Iterator";return t.prototype=i(r,{next:o(1,n)}),a(t,u,!1,!0),s[u]=c,t}},function(t,e,n){var r=n(0);t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var r=n(5);t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,e,n){"use strict";var r=n(145),i=n(152);t.exports=r("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),i)},function(t,e,n){"use strict";var r=n(11),i=n(2),o=n(60),a=n(12),s=n(86),c=n(87),u=n(89),l=n(5),f=n(0),p=n(150),d=n(46),h=n(151);t.exports=function(t,e,n){var v=-1!==t.indexOf("Map"),m=-1!==t.indexOf("Weak"),g=v?"set":"add",y=i[t],b=y&&y.prototype,_=y,w={},x=function(t){var e=b[t];a(b,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(m&&!l(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!l(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(m&&!l(t))&&e.call(this,0===t?0:t)}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(o(t,"function"!=typeof y||!(m||b.forEach&&!f((function(){(new y).entries().next()})))))_=n.getConstructor(e,t,v,g),s.REQUIRED=!0;else if(o(t,!0)){var E=new _,O=E[g](m?{}:-0,1)!=E,A=f((function(){E.has(1)})),C=p((function(t){new y(t)})),k=!m&&f((function(){for(var t=new y,e=5;e--;)t[g](e,e);return!t.has(-0)}));C||((_=e((function(e,n){u(e,_,t);var r=h(new y,e,_);return null!=n&&c(n,r[g],r,v),r}))).prototype=b,b.constructor=_),(A||k)&&(x("delete"),x("has"),v&&x("get")),(k||O)&&x(g),m&&b.clear&&delete b.clear}return w[t]=_,r({global:!0,forced:_!=y},w),d(_,t),m||n.setStrong(_,t,v),_}},function(t,e,n){var r=n(0);t.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,n){var r=n(1),i=n(20),o=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||a[o]===t)}},function(t,e,n){var r=n(88),i=n(20),o=n(1)("iterator");t.exports=function(t){if(null!=t)return t[o]||t["@@iterator"]||i[r(t)]}},function(t,e,n){var r=n(6);t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},function(t,e,n){var r=n(1)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o={};o[r]=function(){return{next:function(){return{done:n=!0}}}},t(o)}catch(t){}return n}},function(t,e,n){var r=n(5),i=n(85);t.exports=function(t,e,n){var o,a;return i&&"function"==typeof(o=e.constructor)&&o!==n&&r(a=o.prototype)&&a!==n.prototype&&i(t,a),t}},function(t,e,n){"use strict";var r=n(10).f,i=n(44),o=n(153),a=n(41),s=n(89),c=n(87),u=n(45),l=n(154),f=n(8),p=n(86).fastKey,d=n(27),h=d.set,v=d.getterFor;t.exports={getConstructor:function(t,e,n,u){var l=t((function(t,r){s(t,l,e),h(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),f||(t.size=0),null!=r&&c(r,t[u],t,n)})),d=v(e),m=function(t,e,n){var r,i,o=d(t),a=g(t,e);return a?a.value=n:(o.last=a={index:i=p(e,!0),key:e,value:n,previous:r=o.last,next:void 0,removed:!1},o.first||(o.first=a),r&&(r.next=a),f?o.size++:t.size++,"F"!==i&&(o.index[i]=a)),t},g=function(t,e){var n,r=d(t),i=p(e);if("F"!==i)return r.index[i];for(n=r.first;n;n=n.next)if(n.key==e)return n};return o(l.prototype,{clear:function(){for(var t=d(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,f?t.size=0:this.size=0},delete:function(t){var e=d(this),n=g(this,t);if(n){var r=n.next,i=n.previous;delete e.index[n.index],n.removed=!0,i&&(i.next=r),r&&(r.previous=i),e.first==n&&(e.first=r),e.last==n&&(e.last=i),f?e.size--:this.size--}return!!n},forEach:function(t){for(var e,n=d(this),r=a(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:n.first;)for(r(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!g(this,t)}}),o(l.prototype,n?{get:function(t){var e=g(this,t);return e&&e.value},set:function(t,e){return m(this,0===t?0:t,e)}}:{add:function(t){return m(this,t=0===t?0:t,t)}}),f&&r(l.prototype,"size",{get:function(){return d(this).size}}),l},setStrong:function(t,e,n){var r=e+" Iterator",i=v(e),o=v(r);u(t,e,(function(t,e){h(this,{type:r,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=o(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),l(e)}}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){for(var i in e)r(t,i,e[i],n);return t}},function(t,e,n){"use strict";var r=n(29),i=n(10),o=n(1),a=n(8),s=o("species");t.exports=function(t){var e=r(t),n=i.f;a&&e&&!e[s]&&n(e,s,{configurable:!0,get:function(){return this}})}},function(t,e,n){"use strict";var r=n(47),i=n(88);t.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,n){"use strict";var r=n(91).charAt,i=n(27),o=n(45),a=i.set,s=i.getterFor("String Iterator");o(String,"String",(function(t){a(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=s(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=r(n,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var r=n(2),i=n(92),o=n(71),a=n(9);for(var s in i){var c=r[s],u=c&&c.prototype;if(u&&u.forEach!==o)try{a(u,"forEach",o)}catch(t){u.forEach=o}}},function(t,e,n){var r=n(2),i=n(92),o=n(82),a=n(9),s=n(1),c=s("iterator"),u=s("toStringTag"),l=o.values;for(var f in i){var p=r[f],d=p&&p.prototype;if(d){if(d[c]!==l)try{a(d,c,l)}catch(t){d[c]=l}if(d[u]||a(d,u,f),i[f])for(var h in o)if(d[h]!==o[h])try{a(d,h,o[h])}catch(t){d[h]=o[h]}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getCurrentUser=function(){if(null===i)return null;return{uid:i,displayName:a,isAdmin:s}};var r=document.getElementsByTagName("head")[0],i=r?r.getAttribute("data-user"):null,o=document.getElementsByTagName("head")[0],a=o?o.getAttribute("data-user-displayname"):null,s="undefined"!=typeof OC&&OC.isUserAdmin()},function(t,e,n){var r=n(21);t.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var o,a=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return''+c("function"==typeof(o=null!=(o=u(n,"name")||(null!=e?u(e,"name"):e))?o:s)?o.call(a,{name:"name",hash:{},data:i,loc:{start:{line:1,column:66},end:{line:1,column:74}}}):o)+"\n"},useData:!0})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}e.__esModule=!0;var o=i(n(93)),a=r(n(172)),s=r(n(13)),c=i(n(7)),u=i(n(173)),l=r(n(175));function f(){var t=new o.HandlebarsEnvironment;return c.extend(t,o),t.SafeString=a.default,t.Exception=s.default,t.Utils=c,t.escapeExpression=c.escapeExpression,t.VM=u,t.template=function(e){return u.template(e,t)},t}var p=f();p.create=f,l.default(p),p.default=p,e.default=p,t.exports=e.default},function(t,e,n){"use strict";e.__esModule=!0;var r=n(7);e.default=function(t){t.registerHelper("blockHelperMissing",(function(e,n){var i=n.inverse,o=n.fn;if(!0===e)return o(this);if(!1===e||null==e)return i(this);if(r.isArray(e))return e.length>0?(n.ids&&(n.ids=[n.name]),t.helpers.each(e,n)):i(this);if(n.data&&n.ids){var a=r.createFrame(n.data);a.contextPath=r.appendContextPath(n.data.contextPath,n.name),n={data:a}}return o(e,n)}))},t.exports=e.default},function(t,e,n){"use strict";(function(r){e.__esModule=!0;var i,o=n(7),a=n(13),s=(i=a)&&i.__esModule?i:{default:i};e.default=function(t){t.registerHelper("each",(function(t,e){if(!e)throw new s.default("Must pass iterator to #each");var n,i=e.fn,a=e.inverse,c=0,u="",l=void 0,f=void 0;function p(e,n,r){l&&(l.key=e,l.index=n,l.first=0===n,l.last=!!r,f&&(l.contextPath=f+e)),u+=i(t[e],{data:l,blockParams:o.blockParams([t[e],e],[f+e,null])})}if(e.data&&e.ids&&(f=o.appendContextPath(e.data.contextPath,e.ids[0])+"."),o.isFunction(t)&&(t=t.call(this)),e.data&&(l=o.createFrame(e.data)),t&&"object"==typeof t)if(o.isArray(t))for(var d=t.length;c=s.LAST_COMPATIBLE_COMPILER_REVISION&&e<=s.COMPILER_REVISION)return;if(e= 4.3.0"],main:function(t,e,n,r,i){var o,a=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'
'+c("function"==typeof(o=null!=(o=u(n,"name")||(null!=e?u(e,"name"):e))?o:s)?o.call(a,{name:"name",hash:{},data:i,loc:{start:{line:1,column:140},end:{line:1,column:148}}}):o)+"
\n"},useData:!0})},function(t,e,n){var r=n(21);t.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var o,a=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return''+c("function"==typeof(o=null!=(o=u(n,"name")||(null!=e?u(e,"name"):e))?o:s)?o.call(a,{name:"name",hash:{},data:i,loc:{start:{line:1,column:54},end:{line:1,column:62}}}):o)+"\n"},useData:!0})},function(t,e,n){var r=n(21);t.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var o,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return""+t.escapeExpression("function"==typeof(o=null!=(o=a(n,"name")||(null!=e?a(e,"name"):e))?o:t.hooks.helperMissing)?o.call(null!=e?e:t.nullContext||{},{name:"name",hash:{},data:i,loc:{start:{line:1,column:8},end:{line:1,column:16}}}):o)+"\n"},useData:!0})},function(t,e,n){var r=n(21);t.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var o,a=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return''+c("function"==typeof(o=null!=(o=u(n,"name")||(null!=e?u(e,"name"):e))?o:s)?o.call(a,{name:"name",hash:{},data:i,loc:{start:{line:1,column:19},end:{line:1,column:27}}}):o)+"\n"},useData:!0})},function(t,e,n){"use strict";var r=n(11),i=n(58).indexOf,o=n(76),a=n(42),s=[].indexOf,c=!!s&&1/[1].indexOf(1,-0)<0,u=o("indexOf"),l=a("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:c||!u||!l},{indexOf:function(t){return c?s.apply(this,arguments)||0:i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(0);function i(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=r((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=r((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,e,n){"use strict";var r=n(12),i=n(6),o=n(0),a=n(98),s=RegExp.prototype,c=s.toString,u=o((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),l="toString"!=c.name;(u||l)&&r(RegExp.prototype,"toString",(function(){var t=i(this),e=String(t.source),n=t.flags;return"/"+e+"/"+String(void 0===n&&t instanceof RegExp&&!("flags"in s)?a.call(t):n)}),{unsafe:!0})},function(t,e,n){"use strict";var r=n(184),i=n(6),o=n(19),a=n(18),s=n(30),c=n(26),u=n(185),l=n(186),f=Math.max,p=Math.min,d=Math.floor,h=/\$([$&'`]|\d\d?|<[^>]*>)/g,v=/\$([$&'`]|\d\d?)/g;r("replace",2,(function(t,e,n,r){var m=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,g=r.REPLACE_KEEPS_$0,y=m?"$":"$0";return[function(n,r){var i=c(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,i,r):e.call(String(i),n,r)},function(t,r){if(!m&&g||"string"==typeof r&&-1===r.indexOf(y)){var o=n(e,t,this,r);if(o.done)return o.value}var c=i(t),d=String(this),h="function"==typeof r;h||(r=String(r));var v=c.global;if(v){var _=c.unicode;c.lastIndex=0}for(var w=[];;){var x=l(c,d);if(null===x)break;if(w.push(x),!v)break;""===String(x[0])&&(c.lastIndex=u(d,a(c.lastIndex),_))}for(var E,O="",A=0,C=0;C=A&&(O+=d.slice(A,S)+R,A=S+k.length)}return O+d.slice(A)}];function b(t,n,r,i,a,s){var c=r+t.length,u=i.length,l=v;return void 0!==a&&(a=o(a),l=h),e.call(s,l,(function(e,o){var s;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,r);case"'":return n.slice(c);case"<":s=a[o.slice(1,-1)];break;default:var l=+o;if(0===l)return e;if(l>u){var f=d(l/10);return 0===f?e:f<=u?void 0===i[f-1]?o.charAt(1):i[f-1]+o.charAt(1):e}s=i[l-1]}return void 0===s?"":s}))}}))},function(t,e,n){"use strict";n(97);var r=n(12),i=n(0),o=n(1),a=n(48),s=n(9),c=o("species"),u=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),l="$0"==="a".replace(/./,"$0"),f=o("replace"),p=!!/./[f]&&""===/./[f]("a","$0"),d=!i((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,f){var h=o(t),v=!i((function(){var e={};return e[h]=function(){return 7},7!=""[t](e)})),m=v&&!i((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags="",n[h]=/./[h]),n.exec=function(){return e=!0,null},n[h](""),!e}));if(!v||!m||"replace"===t&&(!u||!l||p)||"split"===t&&!d){var g=/./[h],y=n(h,""[t],(function(t,e,n,r,i){return e.exec===a?v&&!i?{done:!0,value:g.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}),{REPLACE_KEEPS_$0:l,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:p}),b=y[0],_=y[1];r(String.prototype,t,b),r(RegExp.prototype,h,2==e?function(t,e){return _.call(t,this,e)}:function(t){return _.call(t,this)})}f&&s(RegExp.prototype[h],"sham",!0)}},function(t,e,n){"use strict";var r=n(91).charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},function(t,e,n){var r=n(25),i=n(48);t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var o=n.call(t,e);if("object"!=typeof o)throw TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,n){"use strict";var r=n(31);n.n(r).a},function(t,e,n){"use strict";n.r(e);var r=n(99),i=n.n(r)()(!0);i.push([t.i,"\n.fade-enter-active[data-v-69402ee4],\n.fade-leave-active[data-v-69402ee4],\n.fade-collapse-enter-active[data-v-69402ee4],\n.fade-collapse-leave-active[data-v-69402ee4] {\n\ttransition: opacity var(--animation-quick), max-height var(--animation-quick);\n}\n.fade-collapse-enter[data-v-69402ee4],\n.fade-collapse-leave-to[data-v-69402ee4] {\n\topacity: 0;\n\tmax-height: 0;\n}\n.fade-enter[data-v-69402ee4],\n.fade-leave-to[data-v-69402ee4] {\n\topacity: 0;\n}\n","",{version:3,sources:["src/App.vue"],names:[],mappings:";AAmUA;;;;CAIA,6EAAA;AACA;AACA;;CAEA,UAAA;CACA,aAAA;AACA;AACA;;CAEA,UAAA;AACA",file:"App.vue",sourcesContent:["\n\n\\n\\n\\n\"]}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a \n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"action-button pull-right\",class:{ primary: _vm.primary },attrs:{\"data-type\":_vm.type,\"data-href\":_vm.link},on:{\"click\":_vm.onClickActionButton}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.label)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright (c) 2016 Joas Schilling \n *\n * @author Joas Schilling \n *\n * This file is licensed under the Affero General Public License version 3 or\n * later. See the COPYING file.\n */\n\nimport escapeHTML from 'escape-html'\n\nexport default {\n\tfileTemplate: require('./templates/file.handlebars'),\n\n\tuserLocalTemplate: require('./templates/userLocal.handlebars'),\n\tuserRemoteTemplate: require('./templates/userRemote.handlebars'),\n\n\tunknownTemplate: require('./templates/unkown.handlebars'),\n\tunknownLinkTemplate: require('./templates/unkownLink.handlebars'),\n\n\t/**\n\t * @param {string} message The rich object message with placeholders\n\t * @param {Object} parameters The rich objects to be parsed into the message\n\t * @returns {string} The HTML to render this message\n\t */\n\tparseMessage: function(message, parameters) {\n\t\tmessage = escapeHTML(message)\n\t\tconst regex = /\\{([a-z\\-_0-9]+)\\}/gi\n\t\tconst matches = message.match(regex)\n\n\t\tif (!matches) {\n\t\t\treturn message\n\t\t}\n\n\t\tmatches.forEach(parameter => {\n\t\t\tparameter = parameter.substring(1, parameter.length - 1)\n\t\t\tif (!Object.prototype.hasOwnProperty.call(parameters, parameter) || !parameters[parameter]) {\n\t\t\t\t// Malformed translation?\n\t\t\t\tconsole.error('Potential malformed ROS string: parameter {' + parameter + '} was found in the string but is missing from the parameter list')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst parsed = this.parseParameter(parameters[parameter])\n\t\t\tmessage = message.replace('{' + parameter + '}', parsed)\n\t\t})\n\n\t\treturn message.replace(new RegExp('\\n', 'g'), '
')\n\t},\n\n\t/**\n\t * @param {Object} parameter Rich Object\n\t * @param {string} parameter.type Type of the object\n\t * @param {string} parameter.id Identifier of the object\n\t * @param {string} parameter.name Name of the object\n\t * @param {string} parameter.link Absolute link to the object\n\t * @param {string} [parameter.server] Server the user is on\n\t * @param {string} [parameter.path] User visible path of the file\n\t * @returns {string} The HTML to render this object\n\t */\n\tparseParameter: function(parameter) {\n\t\tswitch (parameter.type) {\n\t\tcase 'file':\n\t\t\treturn this.parseFileParameter(parameter).trim('\\n')\n\n\t\tcase 'user':\n\t\t\tif (parameter.server === undefined) {\n\t\t\t\treturn this.userLocalTemplate(parameter).trim('\\n')\n\t\t\t}\n\n\t\t\treturn this.userRemoteTemplate(parameter).trim('\\n')\n\n\t\tdefault:\n\t\t\tif (parameter.link !== undefined) {\n\t\t\t\treturn this.unknownLinkTemplate(parameter).trim('\\n')\n\t\t\t}\n\n\t\t\treturn this.unknownTemplate(parameter).trim('\\n')\n\t\t}\n\t},\n\n\t/**\n\t * @param {Object} parameter Rich Object file\n\t * @param {string} parameter.id Numeric ID of the file\n\t * @param {string} parameter.name Name of the file/folder\n\t * @param {string} parameter.path User visible path of the file\n\t * @param {string} parameter.link Absolute link to the file\n\t * @returns {string} The HTML to render this parameter\n\t */\n\tparseFileParameter: function(parameter) {\n\t\tconst lastSlashPosition = parameter.path.lastIndexOf('/')\n\t\tconst firstSlashPosition = parameter.path.indexOf('/')\n\t\tparameter.path = parameter.path.substring(firstSlashPosition === 0 ? 1 : 0, lastSlashPosition)\n\n\t\treturn this.fileTemplate(Object.assign({}, parameter, {\n\t\t\ttitle: parameter.path.length === 0 ? '' : t('notifications', 'in {path}', parameter),\n\t\t}))\n\t},\n}\n","import { render, staticRenderFns } from \"./Notification.vue?vue&type=template&id=41515a7a&\"\nimport script from \"./Notification.vue?vue&type=script&lang=js&\"\nexport * from \"./Notification.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"notification\",attrs:{\"data-id\":_vm.notificationId,\"data-timestamp\":_vm.timestamp}},[_c('div',{staticClass:\"notification-heading\"},[_c('span',{staticClass:\"notification-time has-tooltip live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp,\"title\":_vm.absoluteDate}},[_vm._v(_vm._s(_vm.relativeDate))]),_vm._v(\" \"),_c('div',{staticClass:\"notification-delete\",on:{\"click\":_vm.onDismissNotification}},[_c('span',{staticClass:\"icon icon-close svg\",attrs:{\"title\":_vm.t('notifications', 'Dismiss')}})])]),_vm._v(\" \"),(_vm.useLink)?_c('a',{staticClass:\"notification-subject full-subject-link\",attrs:{\"href\":_vm.link}},[(_vm.icon)?_c('span',{staticClass:\"image\"},[_c('img',{staticClass:\"notification-icon\",attrs:{\"src\":_vm.icon}})]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.renderedSubject)}})]):_c('div',{staticClass:\"notification-subject\"},[(_vm.icon)?_c('span',{staticClass:\"image\"},[_c('img',{staticClass:\"notification-icon\",attrs:{\"src\":_vm.icon}})]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.renderedSubject)}})]),_vm._v(\" \"),(_vm.message)?_c('div',{staticClass:\"notification-message\",on:{\"click\":_vm.onClickMessage}},[_c('div',{staticClass:\"message-container\",class:{ collapsed: _vm.isCollapsedMessage },domProps:{\"innerHTML\":_vm._s(_vm.renderedMessage)}}),_vm._v(\" \"),(_vm.isCollapsedMessage)?_c('div',{staticClass:\"notification-overflow\"}):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.actions.length)?_c('div',{staticClass:\"notification-actions\"},_vm._l((_vm.actions),function(a,i){return _c('Action',_vm._b({key:i},'Action',a,false))}),1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=69402ee4&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=69402ee4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"69402ee4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.shutdown)?_c('div',{staticClass:\"notifications\"},[_c('div',{ref:\"button\",staticClass:\"notifications-button menutoggle\",class:{ hasNotifications: _vm.notifications.length },attrs:{\"tabindex\":\"0\",\"role\":\"button\",\"aria-label\":_vm.t('notifications', 'Notifications'),\"aria-haspopup\":\"true\",\"aria-controls\":\"notification-container\",\"aria-expanded\":\"false\"},on:{\"click\":_vm.requestWebNotificationPermissions}},[_c('img',{ref:\"icon\",staticClass:\"svg\",attrs:{\"alt\":\"\",\"title\":_vm.t('notifications', 'Notifications'),\"src\":_vm.iconPath}})]),_vm._v(\" \"),_c('div',{ref:\"container\",staticClass:\"notification-container\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.notifications.length > 0)?_c('ul',{staticClass:\"notification-wrapper\"},[_c('transition-group',{attrs:{\"name\":\"fade-collapse\",\"tag\":\"li\"}},_vm._l((_vm.notifications),function(n,index){return _c('Notification',_vm._b({key:n.notification_id,attrs:{\"index\":index,\"notification-id\":n.notification_id,\"object-id\":n.object_id,\"object-type\":n.object_type},on:{\"remove\":_vm.onRemove}},'Notification',n,false))}),1),_vm._v(\" \"),(_vm.notifications.length > 2)?_c('li',[_c('div',{staticClass:\"dismiss-all\",on:{\"click\":_vm.onDismissAll}},[_c('span',{staticClass:\"icon icon-close svg\",attrs:{\"title\":_vm.t('notifications', 'Dismiss all notifications')}}),_vm._v(\" \"+_vm._s(_vm.t('notifications', 'Dismiss all notifications'))+\"\\n\\t\\t\\t\\t\\t\")])]):_vm._e()],1):_c('div',{staticClass:\"emptycontent\"},[_c('div',{staticClass:\"icon icon-notifications-dark\"}),_vm._v(\" \"),(_vm.webNotificationsGranted === null)?_c('h2',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('notifications', 'Requesting browser permissions to show notifications'))+\"\\n\\t\\t\\t\\t\")]):_c('h2',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('notifications', 'No notifications'))+\"\\n\\t\\t\\t\\t\")])])])],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 Joas Schilling \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport Vue from 'vue'\nimport App from './App'\n\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n\nconst unifiedSearch = document.getElementById('unified-search')\nconst notificationsBell = document.createElement('div')\nnotificationsBell.setAttribute('id', 'notifications')\nunifiedSearch.insertAdjacentHTML('afterend', notificationsBell.outerHTML)\n\nexport default new Vue({\n\tel: '#notifications',\n\tname: 'Init',\n\trender: h => h(App),\n})\n","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n","/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of \\n\"]}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a \n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"action-button pull-right\",class:{ primary: _vm.primary },attrs:{\"data-type\":_vm.type,\"data-href\":_vm.link},on:{\"click\":_vm.onClickActionButton}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.label)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright (c) 2016 Joas Schilling \n *\n * @author Joas Schilling \n *\n * This file is licensed under the Affero General Public License version 3 or\n * later. See the COPYING file.\n */\n\nimport escapeHTML from 'escape-html'\n\nexport default {\n\tfileTemplate: require('./templates/file.handlebars'),\n\n\tuserLocalTemplate: require('./templates/userLocal.handlebars'),\n\tuserRemoteTemplate: require('./templates/userRemote.handlebars'),\n\n\tunknownTemplate: require('./templates/unkown.handlebars'),\n\tunknownLinkTemplate: require('./templates/unkownLink.handlebars'),\n\n\t/**\n\t * @param {string} message The rich object message with placeholders\n\t * @param {Object} parameters The rich objects to be parsed into the message\n\t * @returns {string} The HTML to render this message\n\t */\n\tparseMessage: function(message, parameters) {\n\t\tmessage = escapeHTML(message)\n\t\tconst regex = /\\{([a-z\\-_0-9]+)\\}/gi\n\t\tconst matches = message.match(regex)\n\n\t\tif (!matches) {\n\t\t\treturn message\n\t\t}\n\n\t\tmatches.forEach(parameter => {\n\t\t\tparameter = parameter.substring(1, parameter.length - 1)\n\t\t\tif (!Object.prototype.hasOwnProperty.call(parameters, parameter) || !parameters[parameter]) {\n\t\t\t\t// Malformed translation?\n\t\t\t\tconsole.error('Potential malformed ROS string: parameter {' + parameter + '} was found in the string but is missing from the parameter list')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst parsed = this.parseParameter(parameters[parameter])\n\t\t\tmessage = message.replace('{' + parameter + '}', parsed)\n\t\t})\n\n\t\treturn message.replace(new RegExp('\\n', 'g'), '
')\n\t},\n\n\t/**\n\t * @param {Object} parameter Rich Object\n\t * @param {string} parameter.type Type of the object\n\t * @param {string} parameter.id Identifier of the object\n\t * @param {string} parameter.name Name of the object\n\t * @param {string} parameter.link Absolute link to the object\n\t * @param {string} [parameter.server] Server the user is on\n\t * @param {string} [parameter.path] User visible path of the file\n\t * @returns {string} The HTML to render this object\n\t */\n\tparseParameter: function(parameter) {\n\t\tswitch (parameter.type) {\n\t\tcase 'file':\n\t\t\treturn this.parseFileParameter(parameter).trim('\\n')\n\n\t\tcase 'user':\n\t\t\tif (parameter.server === undefined) {\n\t\t\t\treturn this.userLocalTemplate(parameter).trim('\\n')\n\t\t\t}\n\n\t\t\treturn this.userRemoteTemplate(parameter).trim('\\n')\n\n\t\tdefault:\n\t\t\tif (parameter.link !== undefined) {\n\t\t\t\treturn this.unknownLinkTemplate(parameter).trim('\\n')\n\t\t\t}\n\n\t\t\treturn this.unknownTemplate(parameter).trim('\\n')\n\t\t}\n\t},\n\n\t/**\n\t * @param {Object} parameter Rich Object file\n\t * @param {string} parameter.id Numeric ID of the file\n\t * @param {string} parameter.name Name of the file/folder\n\t * @param {string} parameter.path User visible path of the file\n\t * @param {string} parameter.link Absolute link to the file\n\t * @returns {string} The HTML to render this parameter\n\t */\n\tparseFileParameter: function(parameter) {\n\t\tconst lastSlashPosition = parameter.path.lastIndexOf('/')\n\t\tconst firstSlashPosition = parameter.path.indexOf('/')\n\t\tparameter.path = parameter.path.substring(firstSlashPosition === 0 ? 1 : 0, lastSlashPosition)\n\n\t\treturn this.fileTemplate(Object.assign({}, parameter, {\n\t\t\ttitle: parameter.path.length === 0 ? '' : t('notifications', 'in {path}', parameter),\n\t\t}))\n\t},\n}\n","import { render, staticRenderFns } from \"./Notification.vue?vue&type=template&id=0cd3ad14&\"\nimport script from \"./Notification.vue?vue&type=script&lang=js&\"\nexport * from \"./Notification.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"notification\",attrs:{\"data-id\":_vm.notificationId,\"data-timestamp\":_vm.timestamp}},[_c('div',{staticClass:\"notification-heading\"},[_c('span',{staticClass:\"notification-time has-tooltip live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp,\"title\":_vm.absoluteDate}},[_vm._v(_vm._s(_vm.relativeDate))]),_vm._v(\" \"),_c('div',{staticClass:\"notification-delete\",on:{\"click\":_vm.onDismissNotification}},[_c('span',{staticClass:\"icon icon-close svg\",attrs:{\"title\":_vm.t('notifications', 'Dismiss')}})])]),_vm._v(\" \"),(_vm.useLink)?_c('a',{staticClass:\"notification-subject full-subject-link\",attrs:{\"href\":_vm.link}},[(_vm.icon)?_c('span',{staticClass:\"image\"},[_c('img',{staticClass:\"notification-icon\",attrs:{\"src\":_vm.icon}})]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.renderedSubject)}})]):_c('div',{staticClass:\"notification-subject\"},[(_vm.icon)?_c('span',{staticClass:\"image\"},[_c('img',{staticClass:\"notification-icon\",attrs:{\"src\":_vm.icon}})]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.renderedSubject)}})]),_vm._v(\" \"),(_vm.message)?_c('div',{staticClass:\"notification-message\",on:{\"click\":_vm.onClickMessage}},[_c('div',{staticClass:\"message-container\",class:{ collapsed: _vm.isCollapsedMessage },domProps:{\"innerHTML\":_vm._s(_vm.renderedMessage)}}),_vm._v(\" \"),(_vm.isCollapsedMessage)?_c('div',{staticClass:\"notification-overflow\"}):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.actions.length)?_c('div',{staticClass:\"notification-actions\"},_vm._l((_vm.actions),function(a,i){return _c('Action',_vm._b({key:i},'Action',a,false))}),1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=4b1b0c4a&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=4b1b0c4a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4b1b0c4a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.shutdown)?_c('div',{staticClass:\"notifications\"},[_c('div',{ref:\"button\",staticClass:\"notifications-button menutoggle\",class:{ hasNotifications: _vm.notifications.length },attrs:{\"tabindex\":\"0\",\"role\":\"button\",\"aria-label\":_vm.t('notifications', 'Notifications'),\"aria-haspopup\":\"true\",\"aria-controls\":\"notification-container\",\"aria-expanded\":\"false\"},on:{\"click\":_vm.requestWebNotificationPermissions}},[_c('img',{ref:\"icon\",staticClass:\"svg\",attrs:{\"alt\":\"\",\"title\":_vm.t('notifications', 'Notifications'),\"src\":_vm.iconPath}})]),_vm._v(\" \"),_c('div',{ref:\"container\",staticClass:\"notification-container\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.notifications.length > 0)?_c('ul',{staticClass:\"notification-wrapper\"},[_c('transition-group',{attrs:{\"name\":\"fade-collapse\",\"tag\":\"li\"}},_vm._l((_vm.notifications),function(n,index){return _c('Notification',_vm._b({key:n.notification_id,attrs:{\"index\":index,\"notification-id\":n.notification_id,\"object-id\":n.object_id,\"object-type\":n.object_type},on:{\"remove\":_vm.onRemove}},'Notification',n,false))}),1),_vm._v(\" \"),(_vm.notifications.length > 2)?_c('li',[_c('div',{staticClass:\"dismiss-all\",on:{\"click\":_vm.onDismissAll}},[_c('span',{staticClass:\"icon icon-close svg\",attrs:{\"title\":_vm.t('notifications', 'Dismiss all notifications')}}),_vm._v(\" \"+_vm._s(_vm.t('notifications', 'Dismiss all notifications'))+\"\\n\\t\\t\\t\\t\\t\")])]):_vm._e()],1):_c('div',{staticClass:\"emptycontent\"},[_c('div',{staticClass:\"icon icon-notifications-dark\"}),_vm._v(\" \"),(_vm.webNotificationsGranted === null)?_c('h2',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('notifications', 'Requesting browser permissions to show notifications'))+\"\\n\\t\\t\\t\\t\")]):_c('h2',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('notifications', 'No notifications'))+\"\\n\\t\\t\\t\\t\")])])])],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 Joas Schilling \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport Vue from 'vue'\nimport App from './App'\n\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n\nconst unifiedSearch = document.getElementById('unified-search')\nconst notificationsBell = document.createElement('div')\nnotificationsBell.setAttribute('id', 'notifications')\nunifiedSearch.insertAdjacentHTML('afterend', notificationsBell.outerHTML)\n\nexport default new Vue({\n\tel: '#notifications',\n\tname: 'Init',\n\trender: h => h(App),\n})\n","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n","/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of